diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 8ba27ae6f54..7b9b54a19bb 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -28,6 +28,7 @@ go.sum @ajm188 @deepthi @harshit-gangal @mattlord @rohit-nayak-ps @systay @froui
/go/test/endtoend/onlineddl @rohit-nayak-ps @shlomi-noach
/go/test/endtoend/messaging @mattlord @rohit-nayak-ps @derekperkins
/go/test/endtoend/schemadiff @shlomi-noach @mattlord
+/go/test/endtoend/transaction @harshit-gangal @systay @frouioui @GuptaManan100
/go/test/endtoend/*throttler* @shlomi-noach @mattlord @timvaillancourt
/go/test/endtoend/vtgate @harshit-gangal @systay @frouioui
/go/test/endtoend/vtorc @deepthi @shlomi-noach @GuptaManan100 @timvaillancourt
@@ -77,7 +78,7 @@ go.sum @ajm188 @deepthi @harshit-gangal @mattlord @rohit-nayak-ps @systay @froui
/go/vt/vttablet/*tmclient* @ajm188 @GuptaManan100 @rohit-nayak-ps @shlomi-noach
/go/vt/vttablet/vexec @mattlord @rohit-nayak-ps @shlomi-noach
/go/vt/wrangler @deepthi @mattlord @rohit-nayak-ps
-/go/vt/workflow @mattlord @rohit-nayak-ps
+/go/vt/vtctl/workflow @mattlord @rohit-nayak-ps
/proto/ @deepthi @harshit-gangal
/proto/vtadmin.proto @ajm188 @notfelineit @mattlord
/proto/vtctldata.proto @ajm188 @notfelineit @mattlord
diff --git a/.github/workflows/assign_milestone.yml b/.github/workflows/assign_milestone.yml
index 3ae0a89b4a9..6687a239b57 100644
--- a/.github/workflows/assign_milestone.yml
+++ b/.github/workflows/assign_milestone.yml
@@ -12,7 +12,7 @@ env:
jobs:
build:
name: Assign Milestone
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
permissions:
pull-requests: write
diff --git a/.github/workflows/auto_approve_pr.yml b/.github/workflows/auto_approve_pr.yml
index de553694927..e584337f78b 100644
--- a/.github/workflows/auto_approve_pr.yml
+++ b/.github/workflows/auto_approve_pr.yml
@@ -9,7 +9,7 @@ permissions:
jobs:
auto_approve:
name: Auto Approve Pull Request
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
permissions:
pull-requests: write # only given on local PRs, forks run with `read` access
diff --git a/.github/workflows/check_label.yml b/.github/workflows/check_label.yml
index 15b3ae3ec15..2c6439a29f9 100644
--- a/.github/workflows/check_label.yml
+++ b/.github/workflows/check_label.yml
@@ -9,7 +9,7 @@ jobs:
check_pull_request_labels:
name: Check Pull Request labels
timeout-minutes: 10
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
if: github.repository == 'vitessio/vitess'
steps:
- name: Release Notes label
diff --git a/.github/workflows/check_make_vtadmin_authz_testgen.yml b/.github/workflows/check_make_vtadmin_authz_testgen.yml
index f69df918be1..26543c8a948 100644
--- a/.github/workflows/check_make_vtadmin_authz_testgen.yml
+++ b/.github/workflows/check_make_vtadmin_authz_testgen.yml
@@ -6,7 +6,7 @@ permissions: read-all
jobs:
build:
name: Check Make vtadmin_authz_testgen
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
run: |
@@ -61,7 +61,7 @@ jobs:
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.vtadmin_changes == 'true'
run: |
sudo apt-get update
- sudo apt-get install -y make unzip g++ etcd curl git wget
+ sudo apt-get install -y make unzip g++ etcd-client etcd-server curl git wget
sudo service etcd stop
go mod download
go install golang.org/x/tools/cmd/goimports@latest
diff --git a/.github/workflows/check_make_vtadmin_web_proto.yml b/.github/workflows/check_make_vtadmin_web_proto.yml
index 0f8d404a256..1c1bf2cae4f 100644
--- a/.github/workflows/check_make_vtadmin_web_proto.yml
+++ b/.github/workflows/check_make_vtadmin_web_proto.yml
@@ -6,7 +6,7 @@ permissions: read-all
jobs:
build:
name: Check Make VTAdmin Web Proto
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
run: |
diff --git a/.github/workflows/close_stale_pull_requests.yml b/.github/workflows/close_stale_pull_requests.yml
index 17fef550aa3..dbb71ac79b9 100644
--- a/.github/workflows/close_stale_pull_requests.yml
+++ b/.github/workflows/close_stale_pull_requests.yml
@@ -9,7 +9,7 @@ permissions: read-all
jobs:
close_stale_pull_requests:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
permissions:
pull-requests: write
diff --git a/.github/workflows/cluster_endtoend_12.yml b/.github/workflows/cluster_endtoend_12.yml
index a7451cc8661..7c98855b783 100644
--- a/.github/workflows/cluster_endtoend_12.yml
+++ b/.github/workflows/cluster_endtoend_12.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (12)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_13.yml b/.github/workflows/cluster_endtoend_13.yml
index d9d96f7d9b5..947d393bbbb 100644
--- a/.github/workflows/cluster_endtoend_13.yml
+++ b/.github/workflows/cluster_endtoend_13.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (13)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_15.yml b/.github/workflows/cluster_endtoend_15.yml
index a78e747fe7d..aedc1bbd691 100644
--- a/.github/workflows/cluster_endtoend_15.yml
+++ b/.github/workflows/cluster_endtoend_15.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (15)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_18.yml b/.github/workflows/cluster_endtoend_18.yml
index 2156ed918a3..9886b617d51 100644
--- a/.github/workflows/cluster_endtoend_18.yml
+++ b/.github/workflows/cluster_endtoend_18.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (18)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_21.yml b/.github/workflows/cluster_endtoend_21.yml
index ca99cc29fc9..e6bccee0004 100644
--- a/.github/workflows/cluster_endtoend_21.yml
+++ b/.github/workflows/cluster_endtoend_21.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (21)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
@@ -112,6 +121,13 @@ jobs:
# install JUnit report formatter
go install github.com/vitessio/go-junit-report@HEAD
+ - name: Install Minio
+ if: steps.skip-workflow.outputs.skip-workflow == 'false'
+ run: |
+ wget https://dl.min.io/server/minio/release/linux-amd64/minio
+ chmod +x minio
+ mv minio /usr/local/bin
+
- name: Setup launchable dependencies
if: steps.skip-workflow.outputs.is_draft == 'false' && steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' && github.base_ref == 'main'
run: |
diff --git a/.github/workflows/cluster_endtoend_backup_pitr.yml b/.github/workflows/cluster_endtoend_backup_pitr.yml
index b0790925f7a..1f744e85004 100644
--- a/.github/workflows/cluster_endtoend_backup_pitr.yml
+++ b/.github/workflows/cluster_endtoend_backup_pitr.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (backup_pitr)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_backup_pitr_mysqlshell.yml b/.github/workflows/cluster_endtoend_backup_pitr_mysqlshell.yml
index f0db46c9049..6ed73f260df 100644
--- a/.github/workflows/cluster_endtoend_backup_pitr_mysqlshell.yml
+++ b/.github/workflows/cluster_endtoend_backup_pitr_mysqlshell.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (backup_pitr_mysqlshell)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_backup_pitr_xtrabackup.yml b/.github/workflows/cluster_endtoend_backup_pitr_xtrabackup.yml
index 5d75aa3e56e..9bb6a4b56f8 100644
--- a/.github/workflows/cluster_endtoend_backup_pitr_xtrabackup.yml
+++ b/.github/workflows/cluster_endtoend_backup_pitr_xtrabackup.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (backup_pitr_xtrabackup)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -102,7 +102,7 @@ jobs:
sudo apt-get -qq update
# Install everything else we need, and configure
- sudo apt-get -qq install -y percona-server-server percona-server-client make unzip g++ etcd git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y percona-server-server percona-server-client make unzip g++ etcd-client etcd-server git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_ers_prs_newfeatures_heavy.yml b/.github/workflows/cluster_endtoend_ers_prs_newfeatures_heavy.yml
index 3263e55e1d0..e859749ceca 100644
--- a/.github/workflows/cluster_endtoend_ers_prs_newfeatures_heavy.yml
+++ b/.github/workflows/cluster_endtoend_ers_prs_newfeatures_heavy.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (ers_prs_newfeatures_heavy)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_mysql80.yml b/.github/workflows/cluster_endtoend_mysql80.yml
index 51612778ab6..653db141b7d 100644
--- a/.github/workflows/cluster_endtoend_mysql80.yml
+++ b/.github/workflows/cluster_endtoend_mysql80.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (mysql80)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_mysql_server_vault.yml b/.github/workflows/cluster_endtoend_mysql_server_vault.yml
index 8b1ad64c1f1..9de4aacd499 100644
--- a/.github/workflows/cluster_endtoend_mysql_server_vault.yml
+++ b/.github/workflows/cluster_endtoend_mysql_server_vault.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (mysql_server_vault)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_onlineddl_revert.yml b/.github/workflows/cluster_endtoend_onlineddl_revert.yml
index 8bbdac23b1c..54c85944190 100644
--- a/.github/workflows/cluster_endtoend_onlineddl_revert.yml
+++ b/.github/workflows/cluster_endtoend_onlineddl_revert.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (onlineddl_revert)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -97,12 +97,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_onlineddl_scheduler.yml b/.github/workflows/cluster_endtoend_onlineddl_scheduler.yml
index 89a611f2671..9e117ac0f04 100644
--- a/.github/workflows/cluster_endtoend_onlineddl_scheduler.yml
+++ b/.github/workflows/cluster_endtoend_onlineddl_scheduler.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (onlineddl_scheduler)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -97,12 +97,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_onlineddl_vrepl.yml b/.github/workflows/cluster_endtoend_onlineddl_vrepl.yml
index b0b3dfd23cf..5056e46d895 100644
--- a/.github/workflows/cluster_endtoend_onlineddl_vrepl.yml
+++ b/.github/workflows/cluster_endtoend_onlineddl_vrepl.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (onlineddl_vrepl)
- runs-on: gh-hosted-runners-16cores-1
+ runs-on: gh-hosted-runners-16cores-1-24.04
steps:
- name: Skip CI
@@ -97,12 +97,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_onlineddl_vrepl_stress.yml b/.github/workflows/cluster_endtoend_onlineddl_vrepl_stress.yml
index ca3c46e4113..3597b37ede7 100644
--- a/.github/workflows/cluster_endtoend_onlineddl_vrepl_stress.yml
+++ b/.github/workflows/cluster_endtoend_onlineddl_vrepl_stress.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (onlineddl_vrepl_stress)
- runs-on: gh-hosted-runners-16cores-1
+ runs-on: gh-hosted-runners-16cores-1-24.04
steps:
- name: Skip CI
@@ -97,12 +97,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_onlineddl_vrepl_stress_suite.yml b/.github/workflows/cluster_endtoend_onlineddl_vrepl_stress_suite.yml
index a7462070fb8..a5322578981 100644
--- a/.github/workflows/cluster_endtoend_onlineddl_vrepl_stress_suite.yml
+++ b/.github/workflows/cluster_endtoend_onlineddl_vrepl_stress_suite.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (onlineddl_vrepl_stress_suite)
- runs-on: gh-hosted-runners-16cores-1
+ runs-on: gh-hosted-runners-16cores-1-24.04
steps:
- name: Skip CI
@@ -97,12 +97,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_onlineddl_vrepl_suite.yml b/.github/workflows/cluster_endtoend_onlineddl_vrepl_suite.yml
index 4dfed7e08b7..12bde509048 100644
--- a/.github/workflows/cluster_endtoend_onlineddl_vrepl_suite.yml
+++ b/.github/workflows/cluster_endtoend_onlineddl_vrepl_suite.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (onlineddl_vrepl_suite)
- runs-on: gh-hosted-runners-16cores-1
+ runs-on: gh-hosted-runners-16cores-1-24.04
steps:
- name: Skip CI
@@ -97,12 +97,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_schemadiff_vrepl.yml b/.github/workflows/cluster_endtoend_schemadiff_vrepl.yml
index bad67619e5f..e452d28606a 100644
--- a/.github/workflows/cluster_endtoend_schemadiff_vrepl.yml
+++ b/.github/workflows/cluster_endtoend_schemadiff_vrepl.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (schemadiff_vrepl)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -97,12 +97,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_tabletmanager_consul.yml b/.github/workflows/cluster_endtoend_tabletmanager_consul.yml
index 7d7fd26fedc..3e8ffce0ac5 100644
--- a/.github/workflows/cluster_endtoend_tabletmanager_consul.yml
+++ b/.github/workflows/cluster_endtoend_tabletmanager_consul.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (tabletmanager_consul)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_tabletmanager_tablegc.yml b/.github/workflows/cluster_endtoend_tabletmanager_tablegc.yml
index b74640e57d1..cc75ef22937 100644
--- a/.github/workflows/cluster_endtoend_tabletmanager_tablegc.yml
+++ b/.github/workflows/cluster_endtoend_tabletmanager_tablegc.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (tabletmanager_tablegc)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_tabletmanager_throttler_topo.yml b/.github/workflows/cluster_endtoend_tabletmanager_throttler_topo.yml
index c101cd72450..0837be5356e 100644
--- a/.github/workflows/cluster_endtoend_tabletmanager_throttler_topo.yml
+++ b/.github/workflows/cluster_endtoend_tabletmanager_throttler_topo.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (tabletmanager_throttler_topo)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_topo_connection_cache.yml b/.github/workflows/cluster_endtoend_topo_connection_cache.yml
index a3455fae92b..da6ee53ad53 100644
--- a/.github/workflows/cluster_endtoend_topo_connection_cache.yml
+++ b/.github/workflows/cluster_endtoend_topo_connection_cache.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (topo_connection_cache)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vreplication_across_db_versions.yml b/.github/workflows/cluster_endtoend_vreplication_across_db_versions.yml
index ec063bd783d..a38506ddd7d 100644
--- a/.github/workflows/cluster_endtoend_vreplication_across_db_versions.yml
+++ b/.github/workflows/cluster_endtoend_vreplication_across_db_versions.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vreplication_across_db_versions)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vreplication_basic.yml b/.github/workflows/cluster_endtoend_vreplication_basic.yml
index bb9dcfe7742..283d0451a34 100644
--- a/.github/workflows/cluster_endtoend_vreplication_basic.yml
+++ b/.github/workflows/cluster_endtoend_vreplication_basic.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vreplication_basic)
- runs-on: gh-hosted-runners-16cores-1
+ runs-on: gh-hosted-runners-16cores-1-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vreplication_cellalias.yml b/.github/workflows/cluster_endtoend_vreplication_cellalias.yml
index dd59ad06cf7..b316c075614 100644
--- a/.github/workflows/cluster_endtoend_vreplication_cellalias.yml
+++ b/.github/workflows/cluster_endtoend_vreplication_cellalias.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vreplication_cellalias)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vreplication_copy_parallel.yml b/.github/workflows/cluster_endtoend_vreplication_copy_parallel.yml
index 5dff9b71f5d..48f506709e7 100644
--- a/.github/workflows/cluster_endtoend_vreplication_copy_parallel.yml
+++ b/.github/workflows/cluster_endtoend_vreplication_copy_parallel.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vreplication_copy_parallel)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vreplication_foreign_key_stress.yml b/.github/workflows/cluster_endtoend_vreplication_foreign_key_stress.yml
index 8fdb1bd567a..a1293e3688e 100644
--- a/.github/workflows/cluster_endtoend_vreplication_foreign_key_stress.yml
+++ b/.github/workflows/cluster_endtoend_vreplication_foreign_key_stress.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vreplication_foreign_key_stress)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vreplication_mariadb_to_mysql.yml b/.github/workflows/cluster_endtoend_vreplication_mariadb_to_mysql.yml
index 55260161652..2013d89a83d 100644
--- a/.github/workflows/cluster_endtoend_vreplication_mariadb_to_mysql.yml
+++ b/.github/workflows/cluster_endtoend_vreplication_mariadb_to_mysql.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vreplication_mariadb_to_mysql)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vreplication_migrate_vdiff2_convert_tz.yml b/.github/workflows/cluster_endtoend_vreplication_migrate.yml
similarity index 88%
rename from .github/workflows/cluster_endtoend_vreplication_migrate_vdiff2_convert_tz.yml
rename to .github/workflows/cluster_endtoend_vreplication_migrate.yml
index 2f47615564c..e7a8a8cb5ce 100644
--- a/.github/workflows/cluster_endtoend_vreplication_migrate_vdiff2_convert_tz.yml
+++ b/.github/workflows/cluster_endtoend_vreplication_migrate.yml
@@ -1,9 +1,9 @@
# DO NOT MODIFY: THIS FILE IS GENERATED USING "make generate_ci_workflows"
-name: Cluster (vreplication_migrate_vdiff2_convert_tz)
+name: Cluster (vreplication_migrate)
on: [push, pull_request]
concurrency:
- group: format('{0}-{1}', ${{ github.ref }}, 'Cluster (vreplication_migrate_vdiff2_convert_tz)')
+ group: format('{0}-{1}', ${{ github.ref }}, 'Cluster (vreplication_migrate)')
cancel-in-progress: true
permissions: read-all
@@ -15,8 +15,8 @@ env:
jobs:
build:
- name: Run endtoend tests on Cluster (vreplication_migrate_vdiff2_convert_tz)
- runs-on: gh-hosted-runners-16cores-1
+ name: Run endtoend tests on Cluster (vreplication_migrate)
+ runs-on: gh-hosted-runners-16cores-1-24.04
steps:
- name: Skip CI
@@ -67,7 +67,7 @@ jobs:
- 'tools/**'
- 'config/**'
- 'bootstrap.sh'
- - '.github/workflows/cluster_endtoend_vreplication_migrate_vdiff2_convert_tz.yml'
+ - '.github/workflows/cluster_endtoend_vreplication_migrate.yml'
- name: Set up Go
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
@@ -158,7 +167,7 @@ jobs:
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_vdiff2_convert_tz | tee -a output.txt | go-junit-report -set-exit-code > report.xml
+ eatmydata -- go run test.go -docker=false -follow -shard vreplication_migrate | tee -a output.txt | go-junit-report -set-exit-code > report.xml
- name: Print test output and Record test result in launchable if PR is not a draft
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' && always()
diff --git a/.github/workflows/cluster_endtoend_vreplication_multi_tenant.yml b/.github/workflows/cluster_endtoend_vreplication_multi_tenant.yml
index 51c8397d712..c0c80a8dc61 100644
--- a/.github/workflows/cluster_endtoend_vreplication_multi_tenant.yml
+++ b/.github/workflows/cluster_endtoend_vreplication_multi_tenant.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vreplication_multi_tenant)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vreplication_partial_movetables_and_materialize.yml b/.github/workflows/cluster_endtoend_vreplication_partial_movetables_and_materialize.yml
index 315ab84aa77..0b80b82fd7f 100644
--- a/.github/workflows/cluster_endtoend_vreplication_partial_movetables_and_materialize.yml
+++ b/.github/workflows/cluster_endtoend_vreplication_partial_movetables_and_materialize.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vreplication_partial_movetables_and_materialize)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vreplication_v2.yml b/.github/workflows/cluster_endtoend_vreplication_v2.yml
index b8ffa1c27b8..fcbe7057b4c 100644
--- a/.github/workflows/cluster_endtoend_vreplication_v2.yml
+++ b/.github/workflows/cluster_endtoend_vreplication_v2.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vreplication_v2)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vreplication_vtctldclient_vdiff2_movetables_tz.yml b/.github/workflows/cluster_endtoend_vreplication_vtctldclient_vdiff2_movetables_tz.yml
new file mode 100644
index 00000000000..40f2002f9a3
--- /dev/null
+++ b/.github/workflows/cluster_endtoend_vreplication_vtctldclient_vdiff2_movetables_tz.yml
@@ -0,0 +1,188 @@
+# DO NOT MODIFY: THIS FILE IS GENERATED USING "make generate_ci_workflows"
+
+name: Cluster (vreplication_vtctldclient_vdiff2_movetables_tz)
+on: [push, pull_request]
+concurrency:
+ group: format('{0}-{1}', ${{ github.ref }}, 'Cluster (vreplication_vtctldclient_vdiff2_movetables_tz)')
+ cancel-in-progress: true
+
+permissions: read-all
+
+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_vtctldclient_vdiff2_movetables_tz)
+ 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
+
+ PR_DATA=$(curl -s\
+ -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
+ -H "Accept: application/vnd.github.v3+json" \
+ "https://api.github.com/repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}")
+ draft=$(echo "$PR_DATA" | jq .draft -r)
+ echo "is_draft=${draft}" >> $GITHUB_OUTPUT
+
+ - name: Check out code
+ if: steps.skip-workflow.outputs.skip-workflow == 'false'
+ uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
+
+ - 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/vt/sidecardb/**/*.sql'
+ - 'go/test/endtoend/onlineddl/vrepl_suite/**'
+ - 'test.go'
+ - 'Makefile'
+ - 'build.env'
+ - 'go.sum'
+ - 'go.mod'
+ - 'proto/*.proto'
+ - 'tools/**'
+ - 'config/**'
+ - 'bootstrap.sh'
+ - '.github/workflows/cluster_endtoend_vreplication_vtctldclient_vdiff2_movetables_tz.yml'
+
+ - 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-file: go.mod
+
+ - 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: |
+ # Limit local port range to not use ports that overlap with server side
+ # ports that we listen on.
+ sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535"
+ # 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: Get dependencies
+ if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
+ run: |
+
+ # Get key to latest MySQL repo
+ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
+ # Setup MySQL 8.0
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
+ # Install everything else we need, and configure
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
+
+ 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/vitessio/go-junit-report@HEAD
+
+ - name: Setup launchable dependencies
+ if: steps.skip-workflow.outputs.is_draft == 'false' && steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' && github.base_ref == 'main'
+ 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" --no-commit-collection --source .
+
+ - name: Run cluster endtoend test
+ if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
+ timeout-minutes: 45
+ run: |
+ # We set the VTDATAROOT to the /tmp folder to reduce the file path of mysql.sock file
+ # which musn't be more than 107 characters long.
+ export VTDATAROOT="/tmp/"
+ source build.env
+
+ set -exo pipefail
+
+ # Increase our open file descriptor limit as we could hit this
+ ulimit -n 65536
+ cat <<-EOF>>./config/mycnf/mysql8026.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
+
+ cat <<-EOF>>./config/mycnf/mysql8026.cnf
+ binlog-transaction-compression=ON
+ EOF
+
+ # run the tests however you normally do, then produce a JUnit XML file
+ eatmydata -- go run test.go -docker=false -follow -shard vreplication_vtctldclient_vdiff2_movetables_tz | tee -a output.txt | go-junit-report -set-exit-code > report.xml
+
+ - name: Print test output and Record test result in launchable if PR is not a draft
+ if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' && always()
+ run: |
+ if [[ "${{steps.skip-workflow.outputs.is_draft}}" == "false" ]]; then
+ # send recorded tests to launchable
+ launchable record tests --build "$GITHUB_RUN_ID" go-test . || true
+ fi
+
+ # print test output
+ cat output.txt
+
+ - name: Test Summary
+ if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' && always()
+ uses: test-summary/action@31493c76ec9e7aa675f1585d3ed6f1da69269a86 # v2.4
+ with:
+ paths: "report.xml"
+ show: "fail"
diff --git a/.github/workflows/cluster_endtoend_vstream.yml b/.github/workflows/cluster_endtoend_vstream.yml
index efc0ae1564f..acfefb40758 100644
--- a/.github/workflows/cluster_endtoend_vstream.yml
+++ b/.github/workflows/cluster_endtoend_vstream.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vstream)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vtbackup.yml b/.github/workflows/cluster_endtoend_vtbackup.yml
index ddc172bd59e..947598bc307 100644
--- a/.github/workflows/cluster_endtoend_vtbackup.yml
+++ b/.github/workflows/cluster_endtoend_vtbackup.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vtbackup)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vtctlbackup_sharded_clustertest_heavy.yml b/.github/workflows/cluster_endtoend_vtctlbackup_sharded_clustertest_heavy.yml
index dee6ab7ea65..c6f8712a35a 100644
--- a/.github/workflows/cluster_endtoend_vtctlbackup_sharded_clustertest_heavy.yml
+++ b/.github/workflows/cluster_endtoend_vtctlbackup_sharded_clustertest_heavy.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vtctlbackup_sharded_clustertest_heavy)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vtgate_concurrentdml.yml b/.github/workflows/cluster_endtoend_vtgate_concurrentdml.yml
index 2c16a563531..2cd81fe04ef 100644
--- a/.github/workflows/cluster_endtoend_vtgate_concurrentdml.yml
+++ b/.github/workflows/cluster_endtoend_vtgate_concurrentdml.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vtgate_concurrentdml)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vtgate_foreignkey_stress.yml b/.github/workflows/cluster_endtoend_vtgate_foreignkey_stress.yml
index 78cd2b09356..19620d9e3a2 100644
--- a/.github/workflows/cluster_endtoend_vtgate_foreignkey_stress.yml
+++ b/.github/workflows/cluster_endtoend_vtgate_foreignkey_stress.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vtgate_foreignkey_stress)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vtgate_gen4.yml b/.github/workflows/cluster_endtoend_vtgate_gen4.yml
index 60930f758bd..06961af4ee7 100644
--- a/.github/workflows/cluster_endtoend_vtgate_gen4.yml
+++ b/.github/workflows/cluster_endtoend_vtgate_gen4.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vtgate_gen4)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vtgate_general_heavy.yml b/.github/workflows/cluster_endtoend_vtgate_general_heavy.yml
index 5511adfbb66..e0b21df421a 100644
--- a/.github/workflows/cluster_endtoend_vtgate_general_heavy.yml
+++ b/.github/workflows/cluster_endtoend_vtgate_general_heavy.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vtgate_general_heavy)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vtgate_godriver.yml b/.github/workflows/cluster_endtoend_vtgate_godriver.yml
index 8b1b2cc9a49..23c9da550c2 100644
--- a/.github/workflows/cluster_endtoend_vtgate_godriver.yml
+++ b/.github/workflows/cluster_endtoend_vtgate_godriver.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vtgate_godriver)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vtgate_partial_keyspace.yml b/.github/workflows/cluster_endtoend_vtgate_partial_keyspace.yml
index 14277b0bf60..f5d1850aca3 100644
--- a/.github/workflows/cluster_endtoend_vtgate_partial_keyspace.yml
+++ b/.github/workflows/cluster_endtoend_vtgate_partial_keyspace.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vtgate_partial_keyspace)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vtgate_plantests.yml b/.github/workflows/cluster_endtoend_vtgate_plantests.yml
new file mode 100644
index 00000000000..93ed6a55f05
--- /dev/null
+++ b/.github/workflows/cluster_endtoend_vtgate_plantests.yml
@@ -0,0 +1,166 @@
+# DO NOT MODIFY: THIS FILE IS GENERATED USING "make generate_ci_workflows"
+
+name: Cluster (vtgate_plantests)
+on: [push, pull_request]
+concurrency:
+ group: format('{0}-{1}', ${{ github.ref }}, 'Cluster (vtgate_plantests)')
+ cancel-in-progress: true
+
+permissions: read-all
+
+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 (vtgate_plantests)
+ runs-on: ubuntu-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
+
+ PR_DATA=$(curl -s\
+ -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
+ -H "Accept: application/vnd.github.v3+json" \
+ "https://api.github.com/repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}")
+ draft=$(echo "$PR_DATA" | jq .draft -r)
+ echo "is_draft=${draft}" >> $GITHUB_OUTPUT
+
+ - name: Check out code
+ if: steps.skip-workflow.outputs.skip-workflow == 'false'
+ uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
+
+ - 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/vt/sidecardb/**/*.sql'
+ - 'go/test/endtoend/onlineddl/vrepl_suite/**'
+ - 'test.go'
+ - 'Makefile'
+ - 'build.env'
+ - 'go.sum'
+ - 'go.mod'
+ - 'proto/*.proto'
+ - 'tools/**'
+ - 'config/**'
+ - 'bootstrap.sh'
+ - '.github/workflows/cluster_endtoend_vtgate_plantests.yml'
+
+ - 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-file: go.mod
+
+ - 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: |
+ # Limit local port range to not use ports that overlap with server side
+ # ports that we listen on.
+ sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535"
+ # 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: Get dependencies
+ if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
+ run: |
+
+ # Get key to latest MySQL repo
+ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
+ # Setup MySQL 8.0
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
+ # Install everything else we need, and configure
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
+
+ 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/vitessio/go-junit-report@HEAD
+
+ - name: Setup launchable dependencies
+ if: steps.skip-workflow.outputs.is_draft == 'false' && steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' && github.base_ref == 'main'
+ 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" --no-commit-collection --source .
+
+ - name: Run cluster endtoend test
+ if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
+ timeout-minutes: 45
+ run: |
+ # We set the VTDATAROOT to the /tmp folder to reduce the file path of mysql.sock file
+ # which musn't be more than 107 characters long.
+ export VTDATAROOT="/tmp/"
+ source build.env
+
+ set -exo pipefail
+
+ # run the tests however you normally do, then produce a JUnit XML file
+ eatmydata -- go run test.go -docker=false -follow -shard vtgate_plantests | tee -a output.txt | go-junit-report -set-exit-code > report.xml
+
+ - name: Print test output and Record test result in launchable if PR is not a draft
+ if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' && always()
+ run: |
+ if [[ "${{steps.skip-workflow.outputs.is_draft}}" == "false" ]]; then
+ # send recorded tests to launchable
+ launchable record tests --build "$GITHUB_RUN_ID" go-test . || true
+ fi
+
+ # print test output
+ cat output.txt
+
+ - name: Test Summary
+ if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' && always()
+ uses: test-summary/action@31493c76ec9e7aa675f1585d3ed6f1da69269a86 # v2.4
+ with:
+ paths: "report.xml"
+ show: "fail"
diff --git a/.github/workflows/cluster_endtoend_vtgate_queries.yml b/.github/workflows/cluster_endtoend_vtgate_queries.yml
index d6d8d82f29c..80462086a57 100644
--- a/.github/workflows/cluster_endtoend_vtgate_queries.yml
+++ b/.github/workflows/cluster_endtoend_vtgate_queries.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vtgate_queries)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vtgate_readafterwrite.yml b/.github/workflows/cluster_endtoend_vtgate_readafterwrite.yml
index 2aa7c64ce54..686db1e12ab 100644
--- a/.github/workflows/cluster_endtoend_vtgate_readafterwrite.yml
+++ b/.github/workflows/cluster_endtoend_vtgate_readafterwrite.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vtgate_readafterwrite)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vtgate_reservedconn.yml b/.github/workflows/cluster_endtoend_vtgate_reservedconn.yml
index 08dd4f0d11d..0f4ae20b0a7 100644
--- a/.github/workflows/cluster_endtoend_vtgate_reservedconn.yml
+++ b/.github/workflows/cluster_endtoend_vtgate_reservedconn.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vtgate_reservedconn)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vtgate_schema.yml b/.github/workflows/cluster_endtoend_vtgate_schema.yml
index d0e4cbfb50e..2dca36298e1 100644
--- a/.github/workflows/cluster_endtoend_vtgate_schema.yml
+++ b/.github/workflows/cluster_endtoend_vtgate_schema.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vtgate_schema)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vtgate_schema_tracker.yml b/.github/workflows/cluster_endtoend_vtgate_schema_tracker.yml
index 963ac487892..711f38253cb 100644
--- a/.github/workflows/cluster_endtoend_vtgate_schema_tracker.yml
+++ b/.github/workflows/cluster_endtoend_vtgate_schema_tracker.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vtgate_schema_tracker)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vtgate_tablet_healthcheck_cache.yml b/.github/workflows/cluster_endtoend_vtgate_tablet_healthcheck_cache.yml
index 2b08bb8ce33..55996d7fa86 100644
--- a/.github/workflows/cluster_endtoend_vtgate_tablet_healthcheck_cache.yml
+++ b/.github/workflows/cluster_endtoend_vtgate_tablet_healthcheck_cache.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vtgate_tablet_healthcheck_cache)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vtgate_topo.yml b/.github/workflows/cluster_endtoend_vtgate_topo.yml
index 233fd212433..f47e0a8dd63 100644
--- a/.github/workflows/cluster_endtoend_vtgate_topo.yml
+++ b/.github/workflows/cluster_endtoend_vtgate_topo.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vtgate_topo)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vtgate_topo_consul.yml b/.github/workflows/cluster_endtoend_vtgate_topo_consul.yml
index 8396ff0e6be..1b62ac79041 100644
--- a/.github/workflows/cluster_endtoend_vtgate_topo_consul.yml
+++ b/.github/workflows/cluster_endtoend_vtgate_topo_consul.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vtgate_topo_consul)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vtgate_topo_etcd.yml b/.github/workflows/cluster_endtoend_vtgate_topo_etcd.yml
index f156754bef1..f88d3b9af3a 100644
--- a/.github/workflows/cluster_endtoend_vtgate_topo_etcd.yml
+++ b/.github/workflows/cluster_endtoend_vtgate_topo_etcd.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vtgate_topo_etcd)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vtgate_transaction.yml b/.github/workflows/cluster_endtoend_vtgate_transaction.yml
index 7ef4ed4774e..9ae7b465695 100644
--- a/.github/workflows/cluster_endtoend_vtgate_transaction.yml
+++ b/.github/workflows/cluster_endtoend_vtgate_transaction.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vtgate_transaction)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vtgate_unsharded.yml b/.github/workflows/cluster_endtoend_vtgate_unsharded.yml
index 7222a0cc9f4..d348606dc31 100644
--- a/.github/workflows/cluster_endtoend_vtgate_unsharded.yml
+++ b/.github/workflows/cluster_endtoend_vtgate_unsharded.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vtgate_unsharded)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vtgate_vindex_heavy.yml b/.github/workflows/cluster_endtoend_vtgate_vindex_heavy.yml
index 653938d0f54..16bdee60217 100644
--- a/.github/workflows/cluster_endtoend_vtgate_vindex_heavy.yml
+++ b/.github/workflows/cluster_endtoend_vtgate_vindex_heavy.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vtgate_vindex_heavy)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vtgate_vschema.yml b/.github/workflows/cluster_endtoend_vtgate_vschema.yml
index fdd2a435123..fb176119769 100644
--- a/.github/workflows/cluster_endtoend_vtgate_vschema.yml
+++ b/.github/workflows/cluster_endtoend_vtgate_vschema.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vtgate_vschema)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vtorc.yml b/.github/workflows/cluster_endtoend_vtorc.yml
index d1cf4b6db39..92c2ea3d5d7 100644
--- a/.github/workflows/cluster_endtoend_vtorc.yml
+++ b/.github/workflows/cluster_endtoend_vtorc.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vtorc)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -105,12 +105,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_vttablet_prscomplex.yml b/.github/workflows/cluster_endtoend_vttablet_prscomplex.yml
index 80e9174da81..9868c382a69 100644
--- a/.github/workflows/cluster_endtoend_vttablet_prscomplex.yml
+++ b/.github/workflows/cluster_endtoend_vttablet_prscomplex.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (vttablet_prscomplex)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -96,12 +96,21 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_xb_backup.yml b/.github/workflows/cluster_endtoend_xb_backup.yml
index bfcbb96ccb7..26dbfea2def 100644
--- a/.github/workflows/cluster_endtoend_xb_backup.yml
+++ b/.github/workflows/cluster_endtoend_xb_backup.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (xb_backup)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -102,7 +102,7 @@ jobs:
sudo apt-get -qq update
# Install everything else we need, and configure
- sudo apt-get -qq install -y percona-server-server percona-server-client make unzip g++ etcd git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y percona-server-server percona-server-client make unzip g++ etcd-client etcd-server git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/cluster_endtoend_xb_recovery.yml b/.github/workflows/cluster_endtoend_xb_recovery.yml
index f07aa3d01a1..43360690d6b 100644
--- a/.github/workflows/cluster_endtoend_xb_recovery.yml
+++ b/.github/workflows/cluster_endtoend_xb_recovery.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Cluster (xb_recovery)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -102,7 +102,7 @@ jobs:
sudo apt-get -qq update
# Install everything else we need, and configure
- sudo apt-get -qq install -y percona-server-server percona-server-client make unzip g++ etcd git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y percona-server-server percona-server-client make unzip g++ etcd-client etcd-server git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
diff --git a/.github/workflows/code_freeze.yml b/.github/workflows/code_freeze.yml
index 92ef037ee6b..a66fb6e8b2b 100644
--- a/.github/workflows/code_freeze.yml
+++ b/.github/workflows/code_freeze.yml
@@ -7,7 +7,7 @@ permissions: read-all
jobs:
build:
name: Code Freeze
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Fail if Code Freeze is enabled
run: |
diff --git a/.github/workflows/codecov.yml b/.github/workflows/codecov.yml
index 7846749a013..fc30974212b 100644
--- a/.github/workflows/codecov.yml
+++ b/.github/workflows/codecov.yml
@@ -9,7 +9,7 @@ permissions: read-all
jobs:
test:
name: Code Coverage
- runs-on: gh-hosted-runners-16cores-1
+ runs-on: gh-hosted-runners-16cores-1-24.04
steps:
- name: Check out code
diff --git a/.github/workflows/codeql_analysis.yml b/.github/workflows/codeql_analysis.yml
index e1a474ce9a2..c523e34c697 100644
--- a/.github/workflows/codeql_analysis.yml
+++ b/.github/workflows/codeql_analysis.yml
@@ -14,7 +14,7 @@ permissions: read-all
jobs:
analyze:
name: Analyze
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
permissions:
actions: read
contents: read
@@ -59,13 +59,13 @@ jobs:
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.32-1_all.deb
+ 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 curl git wget eatmydata
+ 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
diff --git a/.github/workflows/create_release.yml b/.github/workflows/create_release.yml
index bafb115bb03..424cc5bfe15 100644
--- a/.github/workflows/create_release.yml
+++ b/.github/workflows/create_release.yml
@@ -12,28 +12,22 @@ permissions: read-all
jobs:
build:
name: Create Release
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
permissions:
contents: write
steps:
+ - name: Check out code
+ uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Set up Go
uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2
with:
go-version-file: go.mod
- - name: Setup node
- uses: actions/setup-node@v4
- with:
- node-version: '20.12.2'
-
- name: Tune the OS
run: |
sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535"
- - name: Check out code
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
-
- name: Get dependencies
run: |
sudo apt-get update
diff --git a/.github/workflows/docker_build_images.yml b/.github/workflows/docker_build_images.yml
index 6d5e12119b3..2024d677205 100644
--- a/.github/workflows/docker_build_images.yml
+++ b/.github/workflows/docker_build_images.yml
@@ -1,4 +1,4 @@
-name: Docker Build Images
+name: Build Docker Images
on:
push:
branches:
@@ -8,15 +8,69 @@ on:
workflow_dispatch:
concurrency:
- group: format('{0}-{1}', ${{ github.ref }}, 'Docker Build Images (v20+)')
+ group: format('{0}-{1}', ${{ github.ref }}, 'Build Docker Images')
cancel-in-progress: true
permissions: read-all
jobs:
+ build_and_push_vttestserver:
+ name: Build and push vttestserver
+ runs-on: gh-hosted-runners-16cores-1-24.04
+ if: github.repository == 'vitessio/vitess'
+
+ strategy:
+ fail-fast: true
+ matrix:
+ branch: [ mysql80 ]
+
+ steps:
+ - name: Check out code
+ uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
+
+ - name: Login to Docker Hub
+ uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
+ with:
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
+
+ - name: Set Dockerfile path
+ run: |
+ echo "DOCKERFILE=./docker/vttestserver/Dockerfile.${{ matrix.branch }}" >> $GITHUB_ENV
+
+ - name: Build and push on main
+ if: startsWith(github.ref, 'refs/tags/') == false
+ uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # v5.4.0
+ with:
+ context: .
+ file: ${{ env.DOCKERFILE }}
+ push: true
+ tags: vitess/vttestserver:${{ matrix.branch }}
+
+ ######
+ # All code below only applies to new tags
+ ######
+ - name: Get the Git tag
+ if: startsWith(github.ref, 'refs/tags/')
+ run: echo "TAG_NAME=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
+
+ - name: Set Docker tag name
+ if: startsWith(github.ref, 'refs/tags/')
+ run: |
+ echo "DOCKER_TAG=vitess/vttestserver:${TAG_NAME}-${{ matrix.branch }}" >> $GITHUB_ENV
+
+ - name: Build and push on tags
+ if: startsWith(github.ref, 'refs/tags/')
+ uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # v5.4.0
+ with:
+ context: .
+ file: ${{ env.DOCKERFILE }}
+ push: true
+ tags: ${{ env.DOCKER_TAG }}
+
build_and_push_lite:
- name: Build and push vitess/lite Docker images
- runs-on: ubuntu-latest
+ name: Build and push lite
+ runs-on: ubuntu-24.04
if: github.repository == 'vitessio/vitess'
strategy:
@@ -26,10 +80,10 @@ jobs:
steps:
- name: Check out code
- uses: actions/checkout@v4
+ uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Login to Docker Hub
- uses: docker/login-action@v3
+ uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
@@ -43,8 +97,8 @@ jobs:
fi
- name: Build and push on main
- if: github.ref == 'refs/heads/main'
- uses: docker/build-push-action@v5
+ if: startsWith(github.ref, 'refs/tags/') == false
+ uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # v5.4.0
with:
context: .
file: ${{ env.DOCKERFILE }}
@@ -69,7 +123,7 @@ jobs:
- name: Build and push on tags
if: startsWith(github.ref, 'refs/tags/')
- uses: docker/build-push-action@v5
+ uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # v5.4.0
with:
context: .
file: ${{ env.DOCKERFILE }}
@@ -77,23 +131,24 @@ jobs:
tags: ${{ env.DOCKER_TAG }}
build_and_push_components:
- name: Build and push vitess components Docker images
- needs: build_and_push_lite
- runs-on: gh-hosted-runners-16cores-1
- if: github.repository == 'vitessio/vitess'
+ name: Build and push
+ runs-on: gh-hosted-runners-16cores-1-24.04
+ if: github.repository == 'vitessio/vitess' && needs.build_and_push_lite.result == 'success'
+ needs:
+ - build_and_push_lite
strategy:
fail-fast: true
matrix:
debian: [ bullseye, bookworm ]
- component: [ vtadmin, vtorc, vtgate, vttablet, mysqlctld, mysqlctl, vtctl, vtctlclient, vtctld, logrotate, logtail, vtbackup, vtexplain ]
+ component: [ vtadmin, vtorc, vtgate, vttablet, mysqlctld, mysqlctl, vtctl, vtctlclient, vtctld, vtctldclient, logrotate, logtail, vtbackup, vtexplain ]
steps:
- name: Check out code
- uses: actions/checkout@v4
+ uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Login to Docker Hub
- uses: docker/login-action@v3
+ uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
@@ -103,8 +158,8 @@ jobs:
echo "DOCKER_CTX=./docker/binaries/${{ matrix.component }}" >> $GITHUB_ENV
- name: Build and push on main latest tag
- if: github.ref == 'refs/heads/main' && matrix.debian == 'bookworm'
- uses: docker/build-push-action@v5
+ if: startsWith(github.ref, 'refs/tags/') == false && matrix.debian == 'bookworm'
+ uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # v5.4.0
with:
context: ${{ env.DOCKER_CTX }}
push: true
@@ -114,8 +169,8 @@ jobs:
DEBIAN_VER=${{ matrix.debian }}-slim
- name: Build and push on main debian specific tag
- if: github.ref == 'refs/heads/main'
- uses: docker/build-push-action@v5
+ if: startsWith(github.ref, 'refs/tags/') == false
+ uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # v5.4.0
with:
context: ${{ env.DOCKER_CTX }}
push: true
@@ -147,7 +202,7 @@ jobs:
# Build and Push component image to DOCKER_TAG, applies to both debian version
- name: Build and push on tags using Debian extension
if: startsWith(github.ref, 'refs/tags/')
- uses: docker/build-push-action@v5
+ uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # v5.4.0
with:
context: ${{ env.DOCKER_CTX }}
push: true
@@ -160,11 +215,29 @@ jobs:
# It is fine to build a second time here when "matrix.debian == 'bookworm'" as we have cached the first build already
- name: Build and push on tags without Debian extension
if: startsWith(github.ref, 'refs/tags/') && matrix.debian == 'bookworm'
- uses: docker/build-push-action@v5
+ uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # v5.4.0
with:
context: ${{ env.DOCKER_CTX }}
push: true
tags: ${{ env.DOCKER_TAG_DEFAULT_DEBIAN }}
build-args: |
VT_BASE_VER=${{ env.TAG_NAME }}
- DEBIAN_VER=${{ matrix.debian }}-slim
\ No newline at end of file
+ DEBIAN_VER=${{ matrix.debian }}-slim
+
+ slack_notification:
+ name: Slack Notification if failed
+ runs-on: ubuntu-24.04
+ needs:
+ - build_and_push_vttestserver
+ - build_and_push_lite
+ - build_and_push_components
+ if: ${{ failure() }}
+ steps:
+ - name: Slack Workflow Notification
+ uses: Gamesight/slack-workflow-status@68bf00d0dbdbcb206c278399aa1ef6c14f74347a # v1.3.0
+ with:
+ repo_token: ${{secrets.GITHUB_TOKEN}}
+ slack_webhook_url: ${{secrets.SLACK_WEBHOOK_URL}}
+ channel: '#docker-build-notifications'
+ name: 'Docker Build Notification'
+ icon_url: https://avatars.githubusercontent.com/u/33043890?s=96&v=4
\ No newline at end of file
diff --git a/.github/workflows/docker_test_cluster_10.yml b/.github/workflows/docker_test_cluster_10.yml
index ce1c9e7277b..10a7c1551c0 100644
--- a/.github/workflows/docker_test_cluster_10.yml
+++ b/.github/workflows/docker_test_cluster_10.yml
@@ -5,7 +5,7 @@ jobs:
build:
name: Docker Test Cluster 10
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
diff --git a/.github/workflows/docker_test_cluster_25.yml b/.github/workflows/docker_test_cluster_25.yml
index eb2319b8c9f..34463ce3830 100644
--- a/.github/workflows/docker_test_cluster_25.yml
+++ b/.github/workflows/docker_test_cluster_25.yml
@@ -5,7 +5,7 @@ jobs:
build:
name: Docker Test Cluster 25
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
diff --git a/.github/workflows/e2e_race.yml b/.github/workflows/e2e_race.yml
index 78c8d0b1753..50e1e4b9485 100644
--- a/.github/workflows/e2e_race.yml
+++ b/.github/workflows/e2e_race.yml
@@ -5,7 +5,7 @@ jobs:
build:
name: End-to-End Test (Race)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
run: |
@@ -65,13 +65,13 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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
# Install everything else we need, and configure
- sudo apt-get install -y mysql-server mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils
+ sudo apt-get install -y mysql-server mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils
sudo service mysql stop
sudo service etcd stop
sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
diff --git a/.github/workflows/endtoend.yml b/.github/workflows/endtoend.yml
index 9e06e4ee44b..f061e8bee68 100644
--- a/.github/workflows/endtoend.yml
+++ b/.github/workflows/endtoend.yml
@@ -5,7 +5,7 @@ jobs:
build:
name: End-to-End Test
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
run: |
@@ -63,7 +63,7 @@ jobs:
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
run: |
sudo apt-get update
- sudo apt-get install -y mysql-server mysql-client make unzip g++ etcd curl git wget
+ sudo apt-get install -y mysql-server mysql-client make unzip g++ etcd-client etcd-server curl git wget
sudo service mysql stop
sudo service etcd stop
sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
diff --git a/.github/workflows/local_example.yml b/.github/workflows/local_example.yml
index 65669158415..fc9724aa6ac 100644
--- a/.github/workflows/local_example.yml
+++ b/.github/workflows/local_example.yml
@@ -4,8 +4,8 @@ permissions: read-all
jobs:
build:
- name: Local example using ${{ matrix.topo }} on ubuntu-22.04
- runs-on: gh-hosted-runners-16cores-1
+ name: Local example using ${{ matrix.topo }} on Ubuntu
+ runs-on: gh-hosted-runners-16cores-1-24.04
strategy:
matrix:
topo: [consul,etcd,zk2]
@@ -67,24 +67,6 @@ jobs:
- name: Get dependencies
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.examples == 'true'
run: |
- if [ ${{matrix.os}} = "ubuntu-22.04" ]; then
- # Get key to latest MySQL repo
- sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
- # Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-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
-
- # Install everything else we need, and configure
- 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
- elif [ ${{matrix.os}} = "macos-latest" ]; then
- brew install mysql@5.7 make unzip etcd curl git wget
- fi
go mod download
- name: Run make minimaltools
diff --git a/.github/workflows/region_example.yml b/.github/workflows/region_example.yml
index c031ea315b5..c17f43eec11 100644
--- a/.github/workflows/region_example.yml
+++ b/.github/workflows/region_example.yml
@@ -4,8 +4,8 @@ permissions: read-all
jobs:
build:
- name: Region Sharding example using ${{ matrix.topo }} on ubuntu-22.04
- runs-on: gh-hosted-runners-16cores-1
+ name: Region Sharding example using ${{ matrix.topo }} on Ubuntu
+ runs-on: gh-hosted-runners-16cores-1-24.04
strategy:
matrix:
topo: [etcd]
@@ -67,24 +67,6 @@ jobs:
- name: Get dependencies
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.examples == 'true'
run: |
- if [ ${{matrix.os}} = "ubuntu-22.04" ]; then
- # Get key to latest MySQL repo
- sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
- # Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-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
-
- # Install everything else we need, and configure
- 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
- elif [ ${{matrix.os}} = "macos-latest" ]; then
- brew install mysql@5.7 make unzip etcd curl git wget
- fi
go mod download
- name: Run make minimaltools
diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml
index 7d20694b850..de90706da27 100644
--- a/.github/workflows/scorecards.yml
+++ b/.github/workflows/scorecards.yml
@@ -14,7 +14,7 @@ permissions: read-all
jobs:
analysis:
name: Scorecard analysis
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
permissions:
# Needed to upload the results to code-scanning dashboard.
security-events: write
@@ -53,7 +53,7 @@ jobs:
# Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
# format to the repository Actions tab.
- name: "Upload artifact"
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
with:
name: SARIF file
path: results.sarif
@@ -62,6 +62,6 @@ jobs:
# Upload the results to GitHub's code scanning dashboard (optional).
# Commenting out will disable upload of results to your repo's Code Scanning dashboard
- name: "Upload to code-scanning"
- uses: github/codeql-action/upload-sarif@v3
+ uses: github/codeql-action/upload-sarif@f09c1c0a94de965c15400f5634aa42fac8fb8f88 # v3.27.5
with:
sarif_file: results.sarif
diff --git a/.github/workflows/static_checks_etc.yml b/.github/workflows/static_checks_etc.yml
index cd896d5fd29..cd2cce93827 100644
--- a/.github/workflows/static_checks_etc.yml
+++ b/.github/workflows/static_checks_etc.yml
@@ -9,7 +9,7 @@ permissions: read-all
jobs:
build:
name: Static Code Checks Etc
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -152,7 +152,7 @@ jobs:
if: steps.skip-workflow.outputs.skip-workflow == 'false' && (steps.changes.outputs.parser_changes == 'true' || steps.changes.outputs.go_files == 'true')
run: |
sudo apt-get update
- sudo apt-get install -y make unzip g++ etcd curl git wget
+ sudo apt-get install -y make unzip g++ etcd-client etcd-server curl git wget
sudo service etcd stop
go mod download
diff --git a/.github/workflows/unit_race.yml b/.github/workflows/unit_race.yml
index e764cd33d9d..8ffb74bd2cb 100644
--- a/.github/workflows/unit_race.yml
+++ b/.github/workflows/unit_race.yml
@@ -15,7 +15,7 @@ jobs:
build:
name: Unit Test (Race)
- runs-on: gh-hosted-runners-16cores-1
+ runs-on: gh-hosted-runners-16cores-1-24.04
steps:
- name: Skip CI
run: |
diff --git a/.github/workflows/unit_race_evalengine.yml b/.github/workflows/unit_race_evalengine.yml
index 5a5cb637681..d6d248f066e 100644
--- a/.github/workflows/unit_race_evalengine.yml
+++ b/.github/workflows/unit_race_evalengine.yml
@@ -15,7 +15,7 @@ jobs:
build:
name: Unit Test (Evalengine_Race)
- runs-on: gh-hosted-runners-16cores-1
+ runs-on: gh-hosted-runners-16cores-1-24.04
steps:
- name: Skip CI
run: |
diff --git a/.github/workflows/unit_test_evalengine_mysql57.yml b/.github/workflows/unit_test_evalengine_mysql57.yml
index cff3ca581bb..ecc366b38fe 100644
--- a/.github/workflows/unit_test_evalengine_mysql57.yml
+++ b/.github/workflows/unit_test_evalengine_mysql57.yml
@@ -16,7 +16,7 @@ env:
jobs:
test:
name: Unit Test (evalengine_mysql57)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -89,30 +89,37 @@ jobs:
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.unit_tests == 'true'
run: |
export DEBIAN_FRONTEND="noninteractive"
- sudo apt-get -qq update
+ sudo apt-get update
# Uninstall any previously installed MySQL first
sudo systemctl stop apparmor
- sudo DEBIAN_FRONTEND="noninteractive" apt-get -qq remove -y --purge mysql-server mysql-client mysql-common
- sudo apt-get -qq -y autoremove
- sudo apt-get -qq -y autoclean
+ 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
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.33-1_all.deb
# Bionic packages are still compatible for Jammy since there's no MySQL 5.7
# packages for Jammy.
echo mysql-apt-config mysql-apt-config/repo-codename select bionic | sudo debconf-set-selections
echo mysql-apt-config mysql-apt-config/select-server select mysql-5.7 | sudo debconf-set-selections
sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config*
- sudo apt-get -qq update
- sudo DEBIAN_FRONTEND="noninteractive" apt-get -qq install -y mysql-client=5.7* mysql-community-server=5.7* mysql-server=5.7* libncurses5
+ sudo apt-get update
+ # We have to install this old version of libaio1. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo DEBIAN_FRONTEND="noninteractive" apt-get install -y mysql-client=5.7* mysql-community-server=5.7* mysql-server=5.7* libncurses6
- sudo apt-get -qq install -y make unzip g++ curl git wget ant openjdk-11-jdk eatmydata
+ sudo apt-get install -y make unzip g++ curl git wget ant openjdk-11-jdk eatmydata
sudo service mysql 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/
diff --git a/.github/workflows/unit_test_evalengine_mysql80.yml b/.github/workflows/unit_test_evalengine_mysql80.yml
index 5578829d48d..e6e802b52d8 100644
--- a/.github/workflows/unit_test_evalengine_mysql80.yml
+++ b/.github/workflows/unit_test_evalengine_mysql80.yml
@@ -16,7 +16,7 @@ env:
jobs:
test:
name: Unit Test (evalengine_mysql80)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -89,27 +89,27 @@ jobs:
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.unit_tests == 'true'
run: |
export DEBIAN_FRONTEND="noninteractive"
- sudo apt-get -qq update
+ sudo apt-get update
# Uninstall any previously installed MySQL first
sudo systemctl stop apparmor
- sudo DEBIAN_FRONTEND="noninteractive" apt-get -qq remove -y --purge mysql-server mysql-client mysql-common
- sudo apt-get -qq -y autoremove
- sudo apt-get -qq -y autoclean
+ 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
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
- sudo DEBIAN_FRONTEND="noninteractive" apt-get -qq install -y mysql-server mysql-client
+ sudo apt-get update
+ sudo DEBIAN_FRONTEND="noninteractive" apt-get install -y mysql-server mysql-client
- sudo apt-get -qq install -y make unzip g++ curl git wget ant openjdk-11-jdk eatmydata
+ sudo apt-get install -y make unzip g++ curl git wget ant openjdk-11-jdk eatmydata
sudo service mysql 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/
diff --git a/.github/workflows/unit_test_evalengine_mysql84.yml b/.github/workflows/unit_test_evalengine_mysql84.yml
index 2a86d5bfabd..46736dac349 100644
--- a/.github/workflows/unit_test_evalengine_mysql84.yml
+++ b/.github/workflows/unit_test_evalengine_mysql84.yml
@@ -16,7 +16,7 @@ env:
jobs:
test:
name: Unit Test (evalengine_mysql84)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -89,27 +89,27 @@ jobs:
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.unit_tests == 'true'
run: |
export DEBIAN_FRONTEND="noninteractive"
- sudo apt-get -qq update
+ sudo apt-get update
# Uninstall any previously installed MySQL first
sudo systemctl stop apparmor
- sudo DEBIAN_FRONTEND="noninteractive" apt-get -qq remove -y --purge mysql-server mysql-client mysql-common
- sudo apt-get -qq -y autoremove
- sudo apt-get -qq -y autoclean
+ 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
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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.4-lts | sudo debconf-set-selections
sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config*
- sudo apt-get -qq update
- sudo DEBIAN_FRONTEND="noninteractive" apt-get -qq install -y mysql-server mysql-client
+ sudo apt-get update
+ sudo DEBIAN_FRONTEND="noninteractive" apt-get install -y mysql-server mysql-client
- sudo apt-get -qq install -y make unzip g++ curl git wget ant openjdk-11-jdk eatmydata
+ sudo apt-get install -y make unzip g++ curl git wget ant openjdk-11-jdk eatmydata
sudo service mysql 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/
diff --git a/.github/workflows/unit_test_mysql57.yml b/.github/workflows/unit_test_mysql57.yml
index 4f2ce90e16a..3eaf02d1538 100644
--- a/.github/workflows/unit_test_mysql57.yml
+++ b/.github/workflows/unit_test_mysql57.yml
@@ -16,7 +16,7 @@ env:
jobs:
test:
name: Unit Test (mysql57)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -89,30 +89,37 @@ jobs:
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.unit_tests == 'true'
run: |
export DEBIAN_FRONTEND="noninteractive"
- sudo apt-get -qq update
+ sudo apt-get update
# Uninstall any previously installed MySQL first
sudo systemctl stop apparmor
- sudo DEBIAN_FRONTEND="noninteractive" apt-get -qq remove -y --purge mysql-server mysql-client mysql-common
- sudo apt-get -qq -y autoremove
- sudo apt-get -qq -y autoclean
+ 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
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.33-1_all.deb
# Bionic packages are still compatible for Jammy since there's no MySQL 5.7
# packages for Jammy.
echo mysql-apt-config mysql-apt-config/repo-codename select bionic | sudo debconf-set-selections
echo mysql-apt-config mysql-apt-config/select-server select mysql-5.7 | sudo debconf-set-selections
sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config*
- sudo apt-get -qq update
- sudo DEBIAN_FRONTEND="noninteractive" apt-get -qq install -y mysql-client=5.7* mysql-community-server=5.7* mysql-server=5.7* libncurses5
+ sudo apt-get update
+ # We have to install this old version of libaio1. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo DEBIAN_FRONTEND="noninteractive" apt-get install -y mysql-client=5.7* mysql-community-server=5.7* mysql-server=5.7* libncurses6
- sudo apt-get -qq install -y make unzip g++ curl git wget ant openjdk-11-jdk eatmydata
+ sudo apt-get install -y make unzip g++ curl git wget ant openjdk-11-jdk eatmydata
sudo service mysql 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/
diff --git a/.github/workflows/unit_test_mysql80.yml b/.github/workflows/unit_test_mysql80.yml
index 03f31a25cc8..c036e6dd477 100644
--- a/.github/workflows/unit_test_mysql80.yml
+++ b/.github/workflows/unit_test_mysql80.yml
@@ -16,7 +16,7 @@ env:
jobs:
test:
name: Unit Test (mysql80)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -89,27 +89,27 @@ jobs:
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.unit_tests == 'true'
run: |
export DEBIAN_FRONTEND="noninteractive"
- sudo apt-get -qq update
+ sudo apt-get update
# Uninstall any previously installed MySQL first
sudo systemctl stop apparmor
- sudo DEBIAN_FRONTEND="noninteractive" apt-get -qq remove -y --purge mysql-server mysql-client mysql-common
- sudo apt-get -qq -y autoremove
- sudo apt-get -qq -y autoclean
+ 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
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
- sudo DEBIAN_FRONTEND="noninteractive" apt-get -qq install -y mysql-server mysql-client
+ sudo apt-get update
+ sudo DEBIAN_FRONTEND="noninteractive" apt-get install -y mysql-server mysql-client
- sudo apt-get -qq install -y make unzip g++ curl git wget ant openjdk-11-jdk eatmydata
+ sudo apt-get install -y make unzip g++ curl git wget ant openjdk-11-jdk eatmydata
sudo service mysql 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/
diff --git a/.github/workflows/unit_test_mysql84.yml b/.github/workflows/unit_test_mysql84.yml
index 95a56aeff81..84447ce390b 100644
--- a/.github/workflows/unit_test_mysql84.yml
+++ b/.github/workflows/unit_test_mysql84.yml
@@ -16,7 +16,7 @@ env:
jobs:
test:
name: Unit Test (mysql84)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -89,27 +89,27 @@ jobs:
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.unit_tests == 'true'
run: |
export DEBIAN_FRONTEND="noninteractive"
- sudo apt-get -qq update
+ sudo apt-get update
# Uninstall any previously installed MySQL first
sudo systemctl stop apparmor
- sudo DEBIAN_FRONTEND="noninteractive" apt-get -qq remove -y --purge mysql-server mysql-client mysql-common
- sudo apt-get -qq -y autoremove
- sudo apt-get -qq -y autoclean
+ 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
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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.4-lts | sudo debconf-set-selections
sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config*
- sudo apt-get -qq update
- sudo DEBIAN_FRONTEND="noninteractive" apt-get -qq install -y mysql-server mysql-client
+ sudo apt-get update
+ sudo DEBIAN_FRONTEND="noninteractive" apt-get install -y mysql-server mysql-client
- sudo apt-get -qq install -y make unzip g++ curl git wget ant openjdk-11-jdk eatmydata
+ sudo apt-get install -y make unzip g++ curl git wget ant openjdk-11-jdk eatmydata
sudo service mysql 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/
diff --git a/.github/workflows/update_golang_dependencies.yml b/.github/workflows/update_golang_dependencies.yml
index a614a634d83..33c5157097c 100644
--- a/.github/workflows/update_golang_dependencies.yml
+++ b/.github/workflows/update_golang_dependencies.yml
@@ -14,7 +14,7 @@ jobs:
contents: write
pull-requests: write
name: Update Golang Dependencies
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Set up Go
uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2
diff --git a/.github/workflows/update_golang_version.yml b/.github/workflows/update_golang_version.yml
index b25f3e72da1..ad5dceeafa5 100644
--- a/.github/workflows/update_golang_version.yml
+++ b/.github/workflows/update_golang_version.yml
@@ -15,20 +15,20 @@ jobs:
pull-requests: write
strategy:
matrix:
- branch: [ main, release-20.0, release-19.0, release-18.0 ]
+ branch: [ main, release-21.0, release-20.0, release-19.0 ]
name: Update Golang Version
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- - name: Set up Go
- uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2
- with:
- go-version-file: go.mod
-
- name: Check out code
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
with:
ref: ${{ matrix.branch }}
+ - name: Set up Go
+ uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2
+ with:
+ go-version-file: go.mod
+
- name: Detect new version and update codebase
env:
GH_TOKEN: ${{ github.token }}
@@ -39,8 +39,10 @@ jobs:
if [ ${{ matrix.branch }} == "main" ]; then
go run ./go/tools/go-upgrade/go-upgrade.go upgrade --main --allow-major-upgrade
- else
+ elif [ ${{ matrix.branch }} == "release-21.0" ]; then
go run ./go/tools/go-upgrade/go-upgrade.go upgrade
+ else
+ go run ./go/tools/go-upgrade/go-upgrade.go upgrade --workflow-update=false
fi
output=$(git status -s)
diff --git a/.github/workflows/upgrade_downgrade_test_backups_e2e.yml b/.github/workflows/upgrade_downgrade_test_backups_e2e.yml
index f1c4f335f0d..a56aad2f523 100644
--- a/.github/workflows/upgrade_downgrade_test_backups_e2e.yml
+++ b/.github/workflows/upgrade_downgrade_test_backups_e2e.yml
@@ -13,7 +13,7 @@ jobs:
upgrade_downgrade_test_e2e:
timeout-minutes: 60
name: Run Upgrade Downgrade Test - Backups - E2E
- runs-on: gh-hosted-runners-16cores-1
+ runs-on: gh-hosted-runners-16cores-1-24.04
steps:
- name: Skip CI
@@ -87,7 +87,7 @@ jobs:
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
run: |
sudo apt-get update
- sudo apt-get install -y mysql-server mysql-client make unzip g++ etcd curl git wget eatmydata
+ sudo apt-get install -y mysql-server mysql-client make unzip g++ etcd-client etcd-server 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/
diff --git a/.github/workflows/upgrade_downgrade_test_backups_e2e_next_release.yml b/.github/workflows/upgrade_downgrade_test_backups_e2e_next_release.yml
index 73c24c5e72e..7ee6c2db799 100644
--- a/.github/workflows/upgrade_downgrade_test_backups_e2e_next_release.yml
+++ b/.github/workflows/upgrade_downgrade_test_backups_e2e_next_release.yml
@@ -14,7 +14,7 @@ jobs:
upgrade_downgrade_test_e2e:
timeout-minutes: 60
name: Run Upgrade Downgrade Test - Backups - E2E - Next Release
- runs-on: gh-hosted-runners-16cores-1
+ runs-on: gh-hosted-runners-16cores-1-24.04
steps:
- name: Skip CI
@@ -89,7 +89,7 @@ jobs:
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
run: |
sudo apt-get update
- sudo apt-get install -y mysql-server mysql-client make unzip g++ etcd curl git wget eatmydata
+ sudo apt-get install -y mysql-server mysql-client make unzip g++ etcd-client etcd-server 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/
diff --git a/.github/workflows/upgrade_downgrade_test_backups_manual.yml b/.github/workflows/upgrade_downgrade_test_backups_manual.yml
index 9c866affb0b..00aab1b78ff 100644
--- a/.github/workflows/upgrade_downgrade_test_backups_manual.yml
+++ b/.github/workflows/upgrade_downgrade_test_backups_manual.yml
@@ -15,7 +15,7 @@ jobs:
upgrade_downgrade_test_manual:
timeout-minutes: 40
name: Run Upgrade Downgrade Test - Backups - Manual
- runs-on: gh-hosted-runners-16cores-1
+ runs-on: gh-hosted-runners-16cores-1-24.04
steps:
- name: Skip CI
@@ -102,14 +102,14 @@ jobs:
# Install MySQL 8.0
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 curl git wget eatmydata grep
+ sudo apt-get install -y make unzip g++ etcd-client etcd-server curl git wget eatmydata grep
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
diff --git a/.github/workflows/upgrade_downgrade_test_backups_manual_next_release.yml b/.github/workflows/upgrade_downgrade_test_backups_manual_next_release.yml
index 802ee78d940..768268271a1 100644
--- a/.github/workflows/upgrade_downgrade_test_backups_manual_next_release.yml
+++ b/.github/workflows/upgrade_downgrade_test_backups_manual_next_release.yml
@@ -15,7 +15,7 @@ jobs:
upgrade_downgrade_test_manual:
timeout-minutes: 40
name: Run Upgrade Downgrade Test - Backups - Manual - Next Release
- runs-on: gh-hosted-runners-16cores-1
+ runs-on: gh-hosted-runners-16cores-1-24.04
steps:
- name: Skip CI
@@ -103,14 +103,14 @@ jobs:
# Install MySQL 8.0
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 curl git wget eatmydata grep
+ sudo apt-get install -y make unzip g++ etcd-client etcd-server curl git wget eatmydata grep
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
diff --git a/.github/workflows/upgrade_downgrade_test_onlineddl_flow.yml b/.github/workflows/upgrade_downgrade_test_onlineddl_flow.yml
index 89e5f7c4d25..72426e70a61 100644
--- a/.github/workflows/upgrade_downgrade_test_onlineddl_flow.yml
+++ b/.github/workflows/upgrade_downgrade_test_onlineddl_flow.yml
@@ -16,7 +16,7 @@ jobs:
upgrade_downgrade_test:
name: Run Upgrade Downgrade Test - Online DDL flow
- runs-on: gh-hosted-runners-16cores-1
+ runs-on: gh-hosted-runners-16cores-1-24.04
steps:
- name: Skip CI
@@ -108,13 +108,13 @@ jobs:
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.32-1_all.deb
+ 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 curl git wget eatmydata
+ 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
diff --git a/.github/workflows/upgrade_downgrade_test_query_serving_queries.yml b/.github/workflows/upgrade_downgrade_test_query_serving_queries.yml
index f7d68dfee04..5ac1a55334c 100644
--- a/.github/workflows/upgrade_downgrade_test_query_serving_queries.yml
+++ b/.github/workflows/upgrade_downgrade_test_query_serving_queries.yml
@@ -16,7 +16,7 @@ jobs:
upgrade_downgrade_test:
name: Run Upgrade Downgrade Test - Query Serving (Queries)
- runs-on: gh-hosted-runners-16cores-1
+ runs-on: gh-hosted-runners-16cores-1-24.04
steps:
- name: Skip CI
@@ -100,13 +100,13 @@ jobs:
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.32-1_all.deb
+ 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 curl git wget eatmydata
+ 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
diff --git a/.github/workflows/upgrade_downgrade_test_query_serving_queries_next_release.yml b/.github/workflows/upgrade_downgrade_test_query_serving_queries_next_release.yml
index c3011453557..c65fff08c52 100644
--- a/.github/workflows/upgrade_downgrade_test_query_serving_queries_next_release.yml
+++ b/.github/workflows/upgrade_downgrade_test_query_serving_queries_next_release.yml
@@ -16,7 +16,7 @@ jobs:
upgrade_downgrade_test:
name: Run Upgrade Downgrade Test - Query Serving (Queries) Next Release
- runs-on: gh-hosted-runners-16cores-1
+ runs-on: gh-hosted-runners-16cores-1-24.04
steps:
- name: Skip CI
@@ -101,13 +101,13 @@ jobs:
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.32-1_all.deb
+ 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 curl git wget eatmydata
+ 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
@@ -117,43 +117,46 @@ jobs:
# install JUnit report formatter
go install github.com/vitessio/go-junit-report@HEAD
- # Build current commit's binaries
- - name: Get dependencies for this commit
+ # Checkout to the next release of Vitess
+ - name: Check out other 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 the binaries for this commit
+ - 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: |
source build.env
NOVTADMINBUILD=1 make build
- mkdir -p /tmp/vitess-build-current/
- cp -R bin /tmp/vitess-build-current/
+ mkdir -p /tmp/vitess-build-other/
+ cp -R bin /tmp/vitess-build-other/
rm -Rf bin/*
- # Checkout to the next release of Vitess
- - name: Check out other version's code (${{ steps.output-next-release-ref.outputs.next_release_ref }})
+ # 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
- with:
- ref: ${{ steps.output-next-release-ref.outputs.next_release_ref }}
- - name: Get dependencies for the next release
+ - 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 next release's binaries
+ - 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: |
source build.env
NOVTADMINBUILD=1 make build
- mkdir -p /tmp/vitess-build-other/
- cp -R bin /tmp/vitess-build-other/
- rm -Rf bin/*
+ mkdir -p /tmp/vitess-build-current/
+ cp -R bin /tmp/vitess-build-current/
- name: Convert ErrorContains checks to Error checks
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
@@ -166,8 +169,6 @@ jobs:
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
run: |
source build.env
-
- cp -r /tmp/vitess-build-current/bin/* $PWD/bin/
rm -f $PWD/bin/vtgate
cp /tmp/vitess-build-other/bin/vtgate $PWD/bin/vtgate
vtgate --version
diff --git a/.github/workflows/upgrade_downgrade_test_query_serving_schema.yml b/.github/workflows/upgrade_downgrade_test_query_serving_schema.yml
index a9162d2f199..4b5fad0ab29 100644
--- a/.github/workflows/upgrade_downgrade_test_query_serving_schema.yml
+++ b/.github/workflows/upgrade_downgrade_test_query_serving_schema.yml
@@ -16,7 +16,7 @@ jobs:
upgrade_downgrade_test:
name: Run Upgrade Downgrade Test - Query Serving (Schema)
- runs-on: gh-hosted-runners-16cores-1
+ runs-on: gh-hosted-runners-16cores-1-24.04
steps:
- name: Skip CI
@@ -100,13 +100,13 @@ jobs:
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.32-1_all.deb
+ 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 curl git wget eatmydata
+ 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
diff --git a/.github/workflows/upgrade_downgrade_test_query_serving_schema_next_release.yml b/.github/workflows/upgrade_downgrade_test_query_serving_schema_next_release.yml
index bf5f63d8836..6157079db6f 100644
--- a/.github/workflows/upgrade_downgrade_test_query_serving_schema_next_release.yml
+++ b/.github/workflows/upgrade_downgrade_test_query_serving_schema_next_release.yml
@@ -16,7 +16,7 @@ jobs:
upgrade_downgrade_test:
name: Run Upgrade Downgrade Test - Query Serving (Schema) Next Release
- runs-on: gh-hosted-runners-16cores-1
+ runs-on: gh-hosted-runners-16cores-1-24.04
steps:
- name: Skip CI
@@ -101,13 +101,13 @@ jobs:
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.32-1_all.deb
+ 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 curl git wget eatmydata
+ 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
diff --git a/.github/workflows/upgrade_downgrade_test_reparent_new_vtctl.yml b/.github/workflows/upgrade_downgrade_test_reparent_new_vtctl.yml
index ac6615b5788..931d9174c31 100644
--- a/.github/workflows/upgrade_downgrade_test_reparent_new_vtctl.yml
+++ b/.github/workflows/upgrade_downgrade_test_reparent_new_vtctl.yml
@@ -16,7 +16,7 @@ jobs:
upgrade_downgrade_test:
name: Run Upgrade Downgrade Test - Reparent New Vtctl
- runs-on: gh-hosted-runners-16cores-1
+ runs-on: gh-hosted-runners-16cores-1-24.04
steps:
- name: Skip CI
@@ -101,13 +101,13 @@ jobs:
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.32-1_all.deb
+ 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 curl git wget eatmydata
+ 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
diff --git a/.github/workflows/upgrade_downgrade_test_reparent_new_vttablet.yml b/.github/workflows/upgrade_downgrade_test_reparent_new_vttablet.yml
index e163ab35ea4..d77b7be53b3 100644
--- a/.github/workflows/upgrade_downgrade_test_reparent_new_vttablet.yml
+++ b/.github/workflows/upgrade_downgrade_test_reparent_new_vttablet.yml
@@ -16,7 +16,7 @@ jobs:
upgrade_downgrade_test:
name: Run Upgrade Downgrade Test - Reparent New VTTablet
- runs-on: gh-hosted-runners-16cores-1
+ runs-on: gh-hosted-runners-16cores-1-24.04
steps:
- name: Skip CI
@@ -101,13 +101,13 @@ jobs:
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.32-1_all.deb
+ 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 curl git wget eatmydata
+ 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
diff --git a/.github/workflows/upgrade_downgrade_test_reparent_old_vtctl.yml b/.github/workflows/upgrade_downgrade_test_reparent_old_vtctl.yml
index 93e94466b74..701025d7ecc 100644
--- a/.github/workflows/upgrade_downgrade_test_reparent_old_vtctl.yml
+++ b/.github/workflows/upgrade_downgrade_test_reparent_old_vtctl.yml
@@ -16,7 +16,7 @@ jobs:
upgrade_downgrade_test:
name: Run Upgrade Downgrade Test - Reparent Old Vtctl
- runs-on: gh-hosted-runners-16cores-1
+ runs-on: gh-hosted-runners-16cores-1-24.04
steps:
- name: Skip CI
@@ -100,13 +100,13 @@ jobs:
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.32-1_all.deb
+ 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 curl git wget eatmydata
+ 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
diff --git a/.github/workflows/upgrade_downgrade_test_reparent_old_vttablet.yml b/.github/workflows/upgrade_downgrade_test_reparent_old_vttablet.yml
index 12f6b514aa1..8b121d4af10 100644
--- a/.github/workflows/upgrade_downgrade_test_reparent_old_vttablet.yml
+++ b/.github/workflows/upgrade_downgrade_test_reparent_old_vttablet.yml
@@ -16,7 +16,7 @@ jobs:
upgrade_downgrade_test:
name: Run Upgrade Downgrade Test - Reparent Old VTTablet
- runs-on: gh-hosted-runners-16cores-1
+ runs-on: gh-hosted-runners-16cores-1-24.04
steps:
- name: Skip CI
@@ -100,13 +100,13 @@ jobs:
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.32-1_all.deb
+ 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 curl git wget eatmydata
+ 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
diff --git a/.github/workflows/upgrade_downgrade_test_semi_sync.yml b/.github/workflows/upgrade_downgrade_test_semi_sync.yml
index 16dac6e7fd2..f12e323654e 100644
--- a/.github/workflows/upgrade_downgrade_test_semi_sync.yml
+++ b/.github/workflows/upgrade_downgrade_test_semi_sync.yml
@@ -13,7 +13,7 @@ jobs:
upgrade_downgrade_test_e2e:
timeout-minutes: 60
name: Run Semi Sync Upgrade Downgrade Test
- runs-on: gh-hosted-runners-16cores-1
+ runs-on: gh-hosted-runners-16cores-1-24.04
steps:
- name: Skip CI
@@ -87,7 +87,7 @@ jobs:
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
run: |
sudo apt-get update
- sudo apt-get install -y mysql-server mysql-client make unzip g++ etcd curl git wget eatmydata
+ sudo apt-get install -y mysql-server mysql-client make unzip g++ etcd-client etcd-server 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/
diff --git a/.github/workflows/vitess_tester_vtgate.yml b/.github/workflows/vitess_tester_vtgate.yml
index 64b429a3724..7d5cf89a3ec 100644
--- a/.github/workflows/vitess_tester_vtgate.yml
+++ b/.github/workflows/vitess_tester_vtgate.yml
@@ -16,7 +16,7 @@ env:
jobs:
build:
name: Run endtoend tests on Vitess Tester (vtgate)
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -95,12 +95,12 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
@@ -112,7 +112,7 @@ jobs:
go install github.com/vitessio/go-junit-report@HEAD
# install vitess tester
- go install github.com/vitessio/vitess-tester/go/vt@374fd9f495c1afd3b6bea9d4ec7728119714055
+ go install github.com/vitessio/vt/go/vt@e43009309f599378504905d4b804460f47822ac5
- name: Setup launchable dependencies
if: steps.skip-workflow.outputs.is_draft == 'false' && steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' && github.base_ref == 'main'
@@ -142,7 +142,7 @@ jobs:
i=1
for dir in ./go/test/endtoend/vtgate/vitess_tester/*/; do
# We go over all the directories in the given path.
- # If there is a vschema file there, we use it, otherwise we let vitess-tester autogenerate it.
+ # If there is a vschema file there, we use it, otherwise we let vt tester autogenerate it.
if [ -f $dir/vschema.json ]; then
vt tester --xunit --vschema "$dir"vschema.json $dir/*.test
else
diff --git a/.github/workflows/vtadmin_web_build.yml b/.github/workflows/vtadmin_web_build.yml
index 096b70cd002..822fa8a0920 100644
--- a/.github/workflows/vtadmin_web_build.yml
+++ b/.github/workflows/vtadmin_web_build.yml
@@ -16,7 +16,7 @@ permissions: read-all
jobs:
build:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
run: |
diff --git a/.github/workflows/vtadmin_web_lint.yml b/.github/workflows/vtadmin_web_lint.yml
index 5435b4b54fe..694c24734a6 100644
--- a/.github/workflows/vtadmin_web_lint.yml
+++ b/.github/workflows/vtadmin_web_lint.yml
@@ -16,7 +16,7 @@ permissions: read-all
jobs:
lint:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
run: |
diff --git a/.github/workflows/vtadmin_web_unit_tests.yml b/.github/workflows/vtadmin_web_unit_tests.yml
index b765a68fa76..72a887c1926 100644
--- a/.github/workflows/vtadmin_web_unit_tests.yml
+++ b/.github/workflows/vtadmin_web_unit_tests.yml
@@ -16,7 +16,7 @@ permissions: read-all
jobs:
unit-tests:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
run: |
diff --git a/.github/workflows/vtop_example.yml b/.github/workflows/vtop_example.yml
new file mode 100644
index 00000000000..fb5ae87c101
--- /dev/null
+++ b/.github/workflows/vtop_example.yml
@@ -0,0 +1,97 @@
+name: vtop_example
+on: [push, pull_request]
+concurrency:
+ group: format('{0}-{1}', ${{ github.ref }}, 'vtop_example')
+ cancel-in-progress: true
+
+jobs:
+ build:
+ name: VTop Example
+ runs-on: self-hosted
+
+ 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
+
+ PR_DATA=$(curl -s\
+ -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
+ -H "Accept: application/vnd.github.v3+json" \
+ "https://api.github.com/repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}")
+ draft=$(echo "$PR_DATA" | jq .draft -r)
+ echo "is_draft=${draft}" >> $GITHUB_OUTPUT
+
+ - name: Check out code
+ if: steps.skip-workflow.outputs.skip-workflow == 'false'
+ uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
+
+ - 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/vt/sidecardb/**/*.sql'
+ - 'test.go'
+ - 'Makefile'
+ - 'build.env'
+ - 'go.[sumod]'
+ - 'proto/*.proto'
+ - 'tools/**'
+ - 'config/**'
+ - 'bootstrap.sh'
+ - 'examples/**'
+ - 'test/**'
+ - '.github/workflows/vtop_example.yml'
+
+ - 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-file: go.mod
+
+ - name: Tune the OS
+ if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
+ run: |
+ echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range
+
+ - name: Get dependencies
+ if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
+ run: |
+ # Install everything we need, and configure
+ sudo apt-get install -y eatmydata make
+ go mod download
+
+ # needed for vtctldclient
+ - name: Build vitess
+ if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
+ run: |
+ make build
+
+ - name: Install kubectl & kind
+ if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
+ run: |
+ make install_kubectl_kind
+
+ - name: vtop_example
+ if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
+ timeout-minutes: 60
+ run: |
+ source build.env
+ eatmydata -- go run test.go -docker=false -skip-build -print-log -follow -retry=1 -timeout=60m vtop_example
\ No newline at end of file
diff --git a/Makefile b/Makefile
index 61b85e0287f..13f7fde28e0 100644
--- a/Makefile
+++ b/Makefile
@@ -286,7 +286,7 @@ $(PROTO_GO_OUTS): minimaltools install_protoc-gen-go proto/*.proto
# This rule builds the bootstrap images for all flavors.
DOCKER_IMAGES_FOR_TEST = mysql80 percona80
DOCKER_IMAGES = common $(DOCKER_IMAGES_FOR_TEST)
-BOOTSTRAP_VERSION=36
+BOOTSTRAP_VERSION=39
ensure_bootstrap_version:
find docker/ -type f -exec sed -i "s/^\(ARG bootstrap_version\)=.*/\1=${BOOTSTRAP_VERSION}/" {} \;
sed -i 's/\(^.*flag.String(\"bootstrap-version\",\) *\"[^\"]\+\"/\1 \"${BOOTSTRAP_VERSION}\"/' test.go
diff --git a/build.env b/build.env
index ec41eb11d4b..58abbf41d1b 100755
--- a/build.env
+++ b/build.env
@@ -17,7 +17,7 @@
source ./tools/shell_functions.inc
go version >/dev/null 2>&1 || fail "Go is not installed or is not in \$PATH. See https://vitess.io/contributing/build-from-source for install instructions."
-goversion_min 1.23.1 || echo "Go version reported: `go version`. Version 1.23.1+ recommended. See https://vitess.io/contributing/build-from-source for install instructions."
+goversion_min 1.23.4 || echo "Go version reported: `go version`. Version 1.23.4+ recommended. See https://vitess.io/contributing/build-from-source for install instructions."
mkdir -p dist
mkdir -p bin
diff --git a/changelog/18.0/18.0.0/summary.md b/changelog/18.0/18.0.0/summary.md
index 35ad018b7bc..5f643a1355c 100644
--- a/changelog/18.0/18.0.0/summary.md
+++ b/changelog/18.0/18.0.0/summary.md
@@ -2,6 +2,8 @@
### Table of Contents
+- **[Known Issues](#known-issues)**
+ - **[VTTablet runs an unnecessary DDL](#sidecardb-issue)**
- **[Major Changes](#major-changes)**
- **[Breaking Changes](#breaking-changes)**
- [Local examples now use etcd v3 storage and API](#local-examples-etcd-v3)
@@ -36,6 +38,15 @@
- **[Durability Policies](#durability-policies)**
- [New Durability Policies](#new-durability-policies)
+## Known Issues
+
+### VTTablet runs an unnecessary DDL
+In this release, with MySQL 8.0 whenever VTTablet's tabletserver goes through initialization, it finds
+a diff in its internal `schemacopy` table and tries to apply a DDL to fix it. The DDL
+is a no-op and this loop of applying the DDL continues to run.
+
+If this problem is encountered, the following PR should be reverted to resolve it - https://github.com/vitessio/vitess/pull/15859.
+
## Major Changes
### Breaking Changes
diff --git a/changelog/18.0/18.0.7/changelog.md b/changelog/18.0/18.0.7/changelog.md
index f9b6fd53bbc..9631e94af4c 100644
--- a/changelog/18.0/18.0.7/changelog.md
+++ b/changelog/18.0/18.0.7/changelog.md
@@ -38,7 +38,6 @@
* [release-18.0] bugfix: Allow cross-keyspace joins (#16520) [#16522](https://github.com/vitessio/vitess/pull/16522)
### Release
#### General
- * [release-18.0] Bump to `v18.0.7-SNAPSHOT` after the `v18.0.6` release [#16454](https://github.com/vitessio/vitess/pull/16454)
### Testing
#### Query Serving
* [release-18.0] Replace ErrorContains checks with Error checks before running upgrade downgrade [#16701](https://github.com/vitessio/vitess/pull/16701)
diff --git a/changelog/18.0/18.0.7/release_notes.md b/changelog/18.0/18.0.7/release_notes.md
index 2e48f54ee07..7faeaeeef45 100644
--- a/changelog/18.0/18.0.7/release_notes.md
+++ b/changelog/18.0/18.0.7/release_notes.md
@@ -1,7 +1,7 @@
# Release of Vitess v18.0.7
The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/18.0/18.0.7/changelog.md).
-The release includes 21 merged Pull Requests.
+The release includes 23 merged Pull Requests.
Thanks to all our contributors: @GuptaManan100, @app/vitess-bot, @frouioui, @shlomi-noach, @vitess-bot
diff --git a/changelog/18.0/18.0.8/changelog.md b/changelog/18.0/18.0.8/changelog.md
new file mode 100644
index 00000000000..0558cd04947
--- /dev/null
+++ b/changelog/18.0/18.0.8/changelog.md
@@ -0,0 +1,47 @@
+# Changelog of Vitess v18.0.8
+
+### Bug fixes
+#### Backup and Restore
+ * [release-18.0] Fail fast when builtinbackup fails to restore a single file (#16856) [#16866](https://github.com/vitessio/vitess/pull/16866)
+#### Query Serving
+ * [release-18.0] fixes bugs around expression precedence and LIKE (#16934 & #16649) [#16944](https://github.com/vitessio/vitess/pull/16944)
+ * [release-18.0] fix issue with aggregation inside of derived tables [#16948](https://github.com/vitessio/vitess/pull/16948)
+ * [release-18.0] Planner Bug: Joins inside derived table (#14974) [#16962](https://github.com/vitessio/vitess/pull/16962)
+ * [release-18.0] bugfix: add HAVING columns inside derived tables (#16976) [#16977](https://github.com/vitessio/vitess/pull/16977)
+ * [release-18.0] Delegate Column Availability Checks to MySQL for Single-Route Queries (#17077) [#17084](https://github.com/vitessio/vitess/pull/17084)
+ * bugfix: make sure to split predicates before planning them [#17099](https://github.com/vitessio/vitess/pull/17099)
+ * [release-18.0] Bugfix for Panic on Joined Queries with Non-Authoritative Tables in Vitess 19.0 (#17103) [#17115](https://github.com/vitessio/vitess/pull/17115)
+#### VTAdmin
+ * [release-18.0] VTAdmin: Fix serve-handler's path-to-regexp dep and add default schema refresh (#16778) [#16782](https://github.com/vitessio/vitess/pull/16782)
+#### VTGate
+ * [release-18.0] Fix deadlock between health check and topology watcher (#16995) [#17007](https://github.com/vitessio/vitess/pull/17007)
+#### VTTablet
+ * [release-18.0] Fix race in `replicationLagModule` of `go/vt/throttle` (#16078) [#16898](https://github.com/vitessio/vitess/pull/16898)
+### Dependencies
+#### Java
+ * [release-18.0] Bump com.google.protobuf:protobuf-java from 3.24.3 to 3.25.5 in /java (#16809) [#16836](https://github.com/vitessio/vitess/pull/16836)
+ * [release-18.0] Bump commons-io:commons-io from 2.7 to 2.14.0 in /java (#16889) [#16929](https://github.com/vitessio/vitess/pull/16929)
+#### VTAdmin
+ * [release-18.0] VTAdmin: Address security vuln in path-to-regexp node pkg (#16770) [#16771](https://github.com/vitessio/vitess/pull/16771)
+### Documentation
+#### Build/CI
+ * [Direct PR] [release-18.0]: Add `sidecardb` known issue [#17096](https://github.com/vitessio/vitess/pull/17096)
+### Enhancement
+#### Online DDL
+ * [release-18.0] Improve Schema Engine's TablesWithSize80 query (#17066) [#17088](https://github.com/vitessio/vitess/pull/17088)
+### Internal Cleanup
+#### VTAdmin
+ * [release-18.0] VTAdmin: Upgrade deps to address security vulns (#16843) [#16845](https://github.com/vitessio/vitess/pull/16845)
+### Regression
+#### Backup and Restore
+ * [release-18.0] Fix unreachable errors when taking a backup (#17062) [#17109](https://github.com/vitessio/vitess/pull/17109)
+#### Query Serving
+ * [release-18.0] fix: route engine to handle column truncation for execute after lookup (#16981) [#16983](https://github.com/vitessio/vitess/pull/16983)
+ * [release-18.0] Add support for `MultiEqual` opcode for lookup vindexes. (#16975) [#17038](https://github.com/vitessio/vitess/pull/17038)
+### Release
+#### General
+ * [release-18.0] Bump to `v18.0.8-SNAPSHOT` after the `v18.0.7` release [#16748](https://github.com/vitessio/vitess/pull/16748)
+### Testing
+#### Cluster management
+ * [release-18.0] Flaky test fixes (#16940) [#16957](https://github.com/vitessio/vitess/pull/16957)
+
diff --git a/changelog/18.0/18.0.8/release_notes.md b/changelog/18.0/18.0.8/release_notes.md
new file mode 100644
index 00000000000..87f69f48cdf
--- /dev/null
+++ b/changelog/18.0/18.0.8/release_notes.md
@@ -0,0 +1,7 @@
+# Release of Vitess v18.0.8
+The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/18.0/18.0.8/changelog.md).
+
+The release includes 22 merged Pull Requests.
+
+Thanks to all our contributors: @GuptaManan100, @app/vitess-bot, @shlomi-noach, @systay
+
diff --git a/changelog/18.0/README.md b/changelog/18.0/README.md
index 98d6b52589b..5177986e79d 100644
--- a/changelog/18.0/README.md
+++ b/changelog/18.0/README.md
@@ -1,4 +1,8 @@
## v18.0
+* **[18.0.8](18.0.8)**
+ * [Changelog](18.0.8/changelog.md)
+ * [Release Notes](18.0.8/release_notes.md)
+
* **[18.0.7](18.0.7)**
* [Changelog](18.0.7/changelog.md)
* [Release Notes](18.0.7/release_notes.md)
diff --git a/changelog/19.0/19.0.7/changelog.md b/changelog/19.0/19.0.7/changelog.md
new file mode 100644
index 00000000000..a5c9a693f9c
--- /dev/null
+++ b/changelog/19.0/19.0.7/changelog.md
@@ -0,0 +1,50 @@
+# Changelog of Vitess v19.0.7
+
+### Bug fixes
+#### Backup and Restore
+ * [release-19.0] Fail fast when builtinbackup fails to restore a single file (#16856) [#16867](https://github.com/vitessio/vitess/pull/16867)
+#### Query Serving
+ * Backport: Fix ACL checks for CTEs (#16642) [#16776](https://github.com/vitessio/vitess/pull/16776)
+ * [release-19.0] VTTablet: smartconnpool: notify all expired waiters (#16897) [#16901](https://github.com/vitessio/vitess/pull/16901)
+ * [release-19.0] fixes bugs around expression precedence and LIKE (#16934 & #16649) [#16945](https://github.com/vitessio/vitess/pull/16945)
+ * [release-19.0] bugfix: add HAVING columns inside derived tables (#16976) [#16978](https://github.com/vitessio/vitess/pull/16978)
+ * [release-19.0] bugfix: treat EXPLAIN like SELECT (#17054) [#17056](https://github.com/vitessio/vitess/pull/17056)
+ * [release-19.0] Delegate Column Availability Checks to MySQL for Single-Route Queries (#17077) [#17085](https://github.com/vitessio/vitess/pull/17085)
+ * Bugfix for Panic on Joined Queries with Non-Authoritative Tables in Vitess 19.0 [#17103](https://github.com/vitessio/vitess/pull/17103)
+#### VTAdmin
+ * [release-19.0] VTAdmin: Fix serve-handler's path-to-regexp dep and add default schema refresh (#16778) [#16783](https://github.com/vitessio/vitess/pull/16783)
+#### VTGate
+ * [release-19.0] Support passing filters to `discovery.NewHealthCheck(...)` (#16170) [#16871](https://github.com/vitessio/vitess/pull/16871)
+ * [release-19.0] Fix deadlock between health check and topology watcher (#16995) [#17008](https://github.com/vitessio/vitess/pull/17008)
+#### VTTablet
+ * [release-19.0] Fix race in `replicationLagModule` of `go/vt/throttle` (#16078) [#16899](https://github.com/vitessio/vitess/pull/16899)
+### CI/Build
+#### Docker
+ * [release-19.0] Remove mysql57 from docker images [#16763](https://github.com/vitessio/vitess/pull/16763)
+#### General
+ * [release-19.0] Upgrade Golang to 1.22.8 [#16895](https://github.com/vitessio/vitess/pull/16895)
+### Dependencies
+#### Java
+ * [release-19.0] Bump com.google.protobuf:protobuf-java from 3.24.3 to 3.25.5 in /java (#16809) [#16837](https://github.com/vitessio/vitess/pull/16837)
+ * [release-19.0] Bump commons-io:commons-io from 2.7 to 2.14.0 in /java (#16889) [#16930](https://github.com/vitessio/vitess/pull/16930)
+#### VTAdmin
+ * [release-19.0] VTAdmin: Address security vuln in path-to-regexp node pkg (#16770) [#16772](https://github.com/vitessio/vitess/pull/16772)
+### Enhancement
+#### Online DDL
+ * [release-19.0] Improve Schema Engine's TablesWithSize80 query (#17066) [#17089](https://github.com/vitessio/vitess/pull/17089)
+### Internal Cleanup
+#### VTAdmin
+ * [release-19.0] VTAdmin: Upgrade deps to address security vulns (#16843) [#16846](https://github.com/vitessio/vitess/pull/16846)
+### Regression
+#### Backup and Restore
+ * [release-19.0] Fix unreachable errors when taking a backup (#17062) [#17110](https://github.com/vitessio/vitess/pull/17110)
+#### Query Serving
+ * [release-19.0] fix: route engine to handle column truncation for execute after lookup (#16981) [#16984](https://github.com/vitessio/vitess/pull/16984)
+ * [release-19.0] Add support for `MultiEqual` opcode for lookup vindexes. (#16975) [#17039](https://github.com/vitessio/vitess/pull/17039)
+### Release
+#### General
+ * [release-19.0] Code Freeze for `v19.0.7` [#17148](https://github.com/vitessio/vitess/pull/17148)
+### Testing
+#### Cluster management
+ * [release-19.0] Flaky test fixes (#16940) [#16958](https://github.com/vitessio/vitess/pull/16958)
+
diff --git a/changelog/19.0/19.0.7/release_notes.md b/changelog/19.0/19.0.7/release_notes.md
new file mode 100644
index 00000000000..9cc9532d018
--- /dev/null
+++ b/changelog/19.0/19.0.7/release_notes.md
@@ -0,0 +1,7 @@
+# Release of Vitess v19.0.7
+The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/19.0/19.0.7/changelog.md).
+
+The release includes 24 merged Pull Requests.
+
+Thanks to all our contributors: @app/vitess-bot, @frouioui, @systay, @timvaillancourt, @vitess-bot
+
diff --git a/changelog/19.0/19.0.8/changelog.md b/changelog/19.0/19.0.8/changelog.md
new file mode 100644
index 00000000000..97995e779b7
--- /dev/null
+++ b/changelog/19.0/19.0.8/changelog.md
@@ -0,0 +1,29 @@
+# Changelog of Vitess v19.0.8
+
+### Bug fixes
+#### Topology
+ * [release-19.0] Close zookeeper topo connection on disconnect (#17136) [#17191](https://github.com/vitessio/vitess/pull/17191)
+#### VTTablet
+ * [release-19.0] Fix deadlock in messager and health streamer (#17230) [#17233](https://github.com/vitessio/vitess/pull/17233)
+ * [release-19.0] Fix potential deadlock in health streamer (#17261) [#17268](https://github.com/vitessio/vitess/pull/17268)
+### CI/Build
+#### Build/CI
+ * [release-19.0] Specify Ubuntu 24.04 for all jobs (#17278) [#17280](https://github.com/vitessio/vitess/pull/17280)
+#### Cluster management
+ * [release-19.0] Fix flakiness in `TestListenerShutdown` (#17024) [#17187](https://github.com/vitessio/vitess/pull/17187)
+#### General
+ * [release-19.0] Upgrade the Golang version to `go1.22.9` [#17214](https://github.com/vitessio/vitess/pull/17214)
+### Enhancement
+#### Query Serving
+ * [release-19.0] Fix to prevent stopping buffering prematurely (#17013) [#17203](https://github.com/vitessio/vitess/pull/17203)
+### Internal Cleanup
+#### Build/CI
+ * [release-19.0] Change the name of the vitess-tester repository (#16917) [#17028](https://github.com/vitessio/vitess/pull/17028)
+### Release
+#### General
+ * [release-19.0] Bump to `v19.0.8-SNAPSHOT` after the `v19.0.7` release [#17158](https://github.com/vitessio/vitess/pull/17158)
+ * [release-19.0] Code Freeze for `v19.0.8` [#17310](https://github.com/vitessio/vitess/pull/17310)
+### Testing
+#### Build/CI
+ * [release-19.0] Flakes: Address flakiness in TestZkConnClosedOnDisconnect (#17194) [#17195](https://github.com/vitessio/vitess/pull/17195)
+
diff --git a/changelog/19.0/19.0.8/release_notes.md b/changelog/19.0/19.0.8/release_notes.md
new file mode 100644
index 00000000000..ffb601fba4f
--- /dev/null
+++ b/changelog/19.0/19.0.8/release_notes.md
@@ -0,0 +1,7 @@
+# Release of Vitess v19.0.8
+The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/19.0/19.0.8/changelog.md).
+
+The release includes 11 merged Pull Requests.
+
+Thanks to all our contributors: @app/vitess-bot, @frouioui, @vitess-bot
+
diff --git a/changelog/19.0/README.md b/changelog/19.0/README.md
index cd43ee9bbd3..5893d3b1f4c 100644
--- a/changelog/19.0/README.md
+++ b/changelog/19.0/README.md
@@ -1,4 +1,12 @@
## v19.0
+* **[19.0.8](19.0.8)**
+ * [Changelog](19.0.8/changelog.md)
+ * [Release Notes](19.0.8/release_notes.md)
+
+* **[19.0.7](19.0.7)**
+ * [Changelog](19.0.7/changelog.md)
+ * [Release Notes](19.0.7/release_notes.md)
+
* **[19.0.6](19.0.6)**
* [Changelog](19.0.6/changelog.md)
* [Release Notes](19.0.6/release_notes.md)
diff --git a/changelog/20.0/20.0.3/changelog.md b/changelog/20.0/20.0.3/changelog.md
new file mode 100644
index 00000000000..678a7e6a98c
--- /dev/null
+++ b/changelog/20.0/20.0.3/changelog.md
@@ -0,0 +1,50 @@
+# Changelog of Vitess v20.0.3
+
+### Bug fixes
+#### Backup and Restore
+ * [release-20.0] Fail fast when builtinbackup fails to restore a single file (#16856) [#16868](https://github.com/vitessio/vitess/pull/16868)
+#### Query Serving
+ * [release-20.0] VTGate MoveTables Buffering: Fix panic when buffering is disabled (#16922) [#16935](https://github.com/vitessio/vitess/pull/16935)
+ * [release-20.0] fixes bugs around expression precedence and LIKE (#16934 & #16649) [#16946](https://github.com/vitessio/vitess/pull/16946)
+ * [release-20.0] bugfix: add HAVING columns inside derived tables (#16976) [#16979](https://github.com/vitessio/vitess/pull/16979)
+ * [release-20.0] bugfix: treat EXPLAIN like SELECT (#17054) [#17057](https://github.com/vitessio/vitess/pull/17057)
+ * [release-20.0] Delegate Column Availability Checks to MySQL for Single-Route Queries (#17077) [#17086](https://github.com/vitessio/vitess/pull/17086)
+#### VReplication
+ * [release-20.0] Migrate Workflow: Scope vindex names correctly when target and source keyspace have different names (#16769) [#16815](https://github.com/vitessio/vitess/pull/16815)
+#### VTAdmin
+ * [release-20.0] VTAdmin: Fix serve-handler's path-to-regexp dep and add default schema refresh (#16778) [#16784](https://github.com/vitessio/vitess/pull/16784)
+#### VTGate
+ * [release-20.0] Support passing filters to `discovery.NewHealthCheck(…)` (#16170) [#16872](https://github.com/vitessio/vitess/pull/16872)
+ * [release-20.0] Fix deadlock between health check and topology watcher (#16995) [#17009](https://github.com/vitessio/vitess/pull/17009)
+#### VTTablet
+ * [release-20.0] Fix race in `replicationLagModule` of `go/vt/throttle` (#16078) [#16900](https://github.com/vitessio/vitess/pull/16900)
+### CI/Build
+#### General
+ * [release-20.0] Upgrade Golang to 1.22.8 [#16894](https://github.com/vitessio/vitess/pull/16894)
+### Dependencies
+#### Java
+ * [release-20.0] Bump com.google.protobuf:protobuf-java from 3.24.3 to 3.25.5 in /java (#16809) [#16838](https://github.com/vitessio/vitess/pull/16838)
+ * [release-20.0] Bump commons-io:commons-io from 2.7 to 2.14.0 in /java (#16889) [#16931](https://github.com/vitessio/vitess/pull/16931)
+#### VTAdmin
+ * [release-20.0] VTAdmin: Address security vuln in path-to-regexp node pkg (#16770) [#16773](https://github.com/vitessio/vitess/pull/16773)
+### Enhancement
+#### Build/CI
+ * [release-20.0] Change upgrade test to still use the older version of tests (#16937) [#16969](https://github.com/vitessio/vitess/pull/16969)
+#### Online DDL
+ * [release-20.0] Improve Schema Engine's TablesWithSize80 query (#17066) [#17090](https://github.com/vitessio/vitess/pull/17090)
+### Internal Cleanup
+#### VTAdmin
+ * [release-20.0] VTAdmin: Upgrade deps to address security vulns (#16843) [#16847](https://github.com/vitessio/vitess/pull/16847)
+### Regression
+#### Backup and Restore
+ * [release-20.0] Fix unreachable errors when taking a backup (#17062) [#17111](https://github.com/vitessio/vitess/pull/17111)
+#### Query Serving
+ * [release-20.0] fix: route engine to handle column truncation for execute after lookup (#16981) [#16985](https://github.com/vitessio/vitess/pull/16985)
+ * [release-20.0] Add support for `MultiEqual` opcode for lookup vindexes. (#16975) [#17040](https://github.com/vitessio/vitess/pull/17040)
+### Release
+#### General
+ * [release-20.0] Code Freeze for `v20.0.3` [#17145](https://github.com/vitessio/vitess/pull/17145)
+### Testing
+#### Cluster management
+ * [release-20.0] Flaky test fixes (#16940) [#16959](https://github.com/vitessio/vitess/pull/16959)
+
diff --git a/changelog/20.0/20.0.3/release_notes.md b/changelog/20.0/20.0.3/release_notes.md
new file mode 100644
index 00000000000..e2eaf22fd79
--- /dev/null
+++ b/changelog/20.0/20.0.3/release_notes.md
@@ -0,0 +1,7 @@
+# Release of Vitess v20.0.3
+The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/20.0/20.0.3/changelog.md).
+
+The release includes 23 merged Pull Requests.
+
+Thanks to all our contributors: @app/vitess-bot, @frouioui, @timvaillancourt, @vitess-bot
+
diff --git a/changelog/20.0/20.0.4/changelog.md b/changelog/20.0/20.0.4/changelog.md
new file mode 100644
index 00000000000..ec4af560368
--- /dev/null
+++ b/changelog/20.0/20.0.4/changelog.md
@@ -0,0 +1,27 @@
+# Changelog of Vitess v20.0.4
+
+### Bug fixes
+#### Query Serving
+ * [release-20.0] Use proper keyspace when updating the query graph of a reference DML (#17226) [#17257](https://github.com/vitessio/vitess/pull/17257)
+#### Topology
+ * [release-20.0] Close zookeeper topo connection on disconnect (#17136) [#17192](https://github.com/vitessio/vitess/pull/17192)
+#### VTTablet
+ * [release-20.0] Fix deadlock in messager and health streamer (#17230) [#17234](https://github.com/vitessio/vitess/pull/17234)
+ * [release-20.0] Fix potential deadlock in health streamer (#17261) [#17269](https://github.com/vitessio/vitess/pull/17269)
+### CI/Build
+#### Build/CI
+ * [release-20.0] Specify Ubuntu 24.04 for all jobs (#17278) [#17281](https://github.com/vitessio/vitess/pull/17281)
+#### Cluster management
+ * [release-20.0] Fix flakiness in `TestListenerShutdown` (#17024) [#17188](https://github.com/vitessio/vitess/pull/17188)
+#### General
+ * [release-20.0] Upgrade the Golang version to `go1.22.9` [#17212](https://github.com/vitessio/vitess/pull/17212)
+### Enhancement
+#### Query Serving
+ * [release-20.0] Fix to prevent stopping buffering prematurely (#17013) [#17204](https://github.com/vitessio/vitess/pull/17204)
+### Internal Cleanup
+#### Build/CI
+ * [release-20.0] Change the name of the vitess-tester repository (#16917) [#17029](https://github.com/vitessio/vitess/pull/17029)
+### Testing
+#### Build/CI
+ * [release-20.0] Flakes: Address flakiness in TestZkConnClosedOnDisconnect (#17194) [#17196](https://github.com/vitessio/vitess/pull/17196)
+
diff --git a/changelog/20.0/20.0.4/release_notes.md b/changelog/20.0/20.0.4/release_notes.md
new file mode 100644
index 00000000000..42dc5b2b8a3
--- /dev/null
+++ b/changelog/20.0/20.0.4/release_notes.md
@@ -0,0 +1,7 @@
+# Release of Vitess v20.0.4
+The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/20.0/20.0.4/changelog.md).
+
+The release includes 10 merged Pull Requests.
+
+Thanks to all our contributors: @app/vitess-bot, @frouioui
+
diff --git a/changelog/20.0/README.md b/changelog/20.0/README.md
index f8e12c1d453..2fe6e3d9d61 100644
--- a/changelog/20.0/README.md
+++ b/changelog/20.0/README.md
@@ -1,4 +1,12 @@
## v20.0
+* **[20.0.4](20.0.4)**
+ * [Changelog](20.0.4/changelog.md)
+ * [Release Notes](20.0.4/release_notes.md)
+
+* **[20.0.3](20.0.3)**
+ * [Changelog](20.0.3/changelog.md)
+ * [Release Notes](20.0.3/release_notes.md)
+
* **[20.0.2](20.0.2)**
* [Changelog](20.0.2/changelog.md)
* [Release Notes](20.0.2/release_notes.md)
diff --git a/changelog/21.0/21.0.0/changelog.md b/changelog/21.0/21.0.0/changelog.md
new file mode 100644
index 00000000000..32b09e1344e
--- /dev/null
+++ b/changelog/21.0/21.0.0/changelog.md
@@ -0,0 +1,473 @@
+# Changelog of Vitess v21.0.0
+
+### Bug fixes
+#### ACL
+ * Fix ACL checks for CTEs [#16642](https://github.com/vitessio/vitess/pull/16642)
+#### Backup and Restore
+ * fixing issue with xtrabackup and long gtids [#16304](https://github.com/vitessio/vitess/pull/16304)
+ * Fix `xtrabackup`/`builtin` context when doing `AddFiles` [#16806](https://github.com/vitessio/vitess/pull/16806)
+ * Fail fast when builtinbackup fails to restore a single file [#16856](https://github.com/vitessio/vitess/pull/16856)
+ * [release-21.0] fix releasing the global read lock when mysqlshell backup fails (#17000) [#17012](https://github.com/vitessio/vitess/pull/17012)
+#### Build/CI
+ * Fix echo command in build docker images workflow [#16350](https://github.com/vitessio/vitess/pull/16350)
+ * CI: Remove build docker images CI action until we figure out if that it is affecting our rate limits [#16759](https://github.com/vitessio/vitess/pull/16759)
+ * Fix golang upgrade workflow [#16890](https://github.com/vitessio/vitess/pull/16890)
+#### Cluster management
+ * Use default schema reload config values when config file is empty [#16393](https://github.com/vitessio/vitess/pull/16393)
+ * fix: Use authentication_policy to specify default auth plugin for MySQL 8.4 [#16426](https://github.com/vitessio/vitess/pull/16426)
+ * [Direct PR] [release-21.0] Revert Errant GTID detection in vttablets [#17019](https://github.com/vitessio/vitess/pull/17019)
+#### Docker
+ * Fix the install dependencies script in Docker [#16340](https://github.com/vitessio/vitess/pull/16340)
+#### Documentation
+ * Fix the `v19.0.0` release notes and use the `vitess/lite` image for the MySQL container [#16282](https://github.com/vitessio/vitess/pull/16282)
+#### Examples
+ * Example operator 401_scheduled_backups.yaml incorrect keyspace [#16732](https://github.com/vitessio/vitess/pull/16732)
+ * small fixes for docker-compose setup [#16818](https://github.com/vitessio/vitess/pull/16818)
+#### Observability
+ * VReplication: Estimate lag when workflow fully throttled [#16577](https://github.com/vitessio/vitess/pull/16577)
+#### Online DDL
+ * Online DDL: Fail a --in-order-completion migration, if a _prior_ migration within the same context is 'failed' or 'cancelled' [#16071](https://github.com/vitessio/vitess/pull/16071)
+ * Ensure that we check the correct collation for foreign keys [#16109](https://github.com/vitessio/vitess/pull/16109)
+ * Online DDL shadow table: rename referenced table name in self referencing FK [#16205](https://github.com/vitessio/vitess/pull/16205)
+ * Online DDL: do not update last_throttled_timestamp with zero value [#16395](https://github.com/vitessio/vitess/pull/16395)
+ * Support `SHOW VITESS_MIGRATIONS` from inside a transaction [#16399](https://github.com/vitessio/vitess/pull/16399)
+#### Query Serving
+ * Fix dual merging in outer join queries [#15959](https://github.com/vitessio/vitess/pull/15959)
+ * Handle single sharded keyspaces for analysis [#16068](https://github.com/vitessio/vitess/pull/16068)
+ * Fix schemadiff semantics handling [#16073](https://github.com/vitessio/vitess/pull/16073)
+ * `schemadiff`: only compare column collations if of textual type [#16138](https://github.com/vitessio/vitess/pull/16138)
+ * Handle Nullability for Columns from Outer Tables [#16174](https://github.com/vitessio/vitess/pull/16174)
+ * fix: rows affected count for multi table update for non-literal column value [#16181](https://github.com/vitessio/vitess/pull/16181)
+ * Correct Handling of UNION Queries with Literals in the Vitess Planner [#16227](https://github.com/vitessio/vitess/pull/16227)
+ * Parsing `Json_arrayagg` and `Json_objectagg` to allow some queries to work [#16251](https://github.com/vitessio/vitess/pull/16251)
+ * Fix Incorrect Optimization with LIMIT and GROUP BY [#16263](https://github.com/vitessio/vitess/pull/16263)
+ * planner: Handle ORDER BY inside derived tables [#16353](https://github.com/vitessio/vitess/pull/16353)
+ * fix issue with aggregation inside of derived tables [#16366](https://github.com/vitessio/vitess/pull/16366)
+ * Fix Join Predicate Cleanup Bug in Route Merging [#16386](https://github.com/vitessio/vitess/pull/16386)
+ * Fix panic in user defined aggregation functions planning [#16398](https://github.com/vitessio/vitess/pull/16398)
+ * Fix subquery planning having an aggregation that is used in order by as long as we can merge it all into a single route [#16402](https://github.com/vitessio/vitess/pull/16402)
+ * bugfix: don't treat join predicates as filter predicates [#16472](https://github.com/vitessio/vitess/pull/16472)
+ * fix: reference table join merge [#16488](https://github.com/vitessio/vitess/pull/16488)
+ * fix: sequence table next value acl permission to writer role [#16509](https://github.com/vitessio/vitess/pull/16509)
+ * fix: show tables to use any keyspace on system schema [#16521](https://github.com/vitessio/vitess/pull/16521)
+ * simplify merging logic [#16525](https://github.com/vitessio/vitess/pull/16525)
+ * Fix: Offset planning in hash joins [#16540](https://github.com/vitessio/vitess/pull/16540)
+ * Fix query plan cache misses metric [#16562](https://github.com/vitessio/vitess/pull/16562)
+ * Atomic Transaction bug fix with PRS disruption [#16576](https://github.com/vitessio/vitess/pull/16576)
+ * JSON Encoding: Use Type_RAW for marshalling json [#16637](https://github.com/vitessio/vitess/pull/16637)
+ * Fix race conditions in the concatenate engine streaming [#16640](https://github.com/vitessio/vitess/pull/16640)
+ * Fix Precedence rule for Tilda op [#16649](https://github.com/vitessio/vitess/pull/16649)
+ * fix sizegen so it handles type aliases [#16650](https://github.com/vitessio/vitess/pull/16650)
+ * Fix race condition that prevents queries from being buffered after vtgate startup [#16655](https://github.com/vitessio/vitess/pull/16655)
+ * Fix data race in keyspace event watcher [#16683](https://github.com/vitessio/vitess/pull/16683)
+ * fix: DDL comments to be recorded in AST [#16774](https://github.com/vitessio/vitess/pull/16774)
+ * vtgate: Use the time zone setting correctly [#16824](https://github.com/vitessio/vitess/pull/16824)
+ * VTTablet: smartconnpool: notify all expired waiters [#16897](https://github.com/vitessio/vitess/pull/16897)
+ * [release-21.0] fix issue with json unmarshalling of operators with space in them [#16933](https://github.com/vitessio/vitess/pull/16933)
+ * [release-21.0] VTGate MoveTables Buffering: Fix panic when buffering is disabled (#16922) [#16936](https://github.com/vitessio/vitess/pull/16936)
+ * [release-21.0] fixes bugs around expression precedence and LIKE (#16934) [#16947](https://github.com/vitessio/vitess/pull/16947)
+ * [release-21.0] [Direct PR] bugfix: add HAVING columns inside derived tables (#16976) [#16980](https://github.com/vitessio/vitess/pull/16980)
+#### Schema Tracker
+ * Log and ignore the error in reading udfs in schema tracker [#16630](https://github.com/vitessio/vitess/pull/16630)
+#### Throttler
+ * Tablet throttler: remove cached metric associated with removed tablet [#16555](https://github.com/vitessio/vitess/pull/16555)
+ * Throttler/vreplication: fix app name used by VPlayer [#16578](https://github.com/vitessio/vitess/pull/16578)
+#### VReplication
+ * vtctldclient: Fix Apply (Shard | Keyspace| Table) Routing Rules commands [#16096](https://github.com/vitessio/vitess/pull/16096)
+ * CI Bug: Rename shard name back to match existing workflow file for vreplication_migrate_vdiff2_convert_tz [#16148](https://github.com/vitessio/vitess/pull/16148)
+ * VReplication: handle escaped identifiers in vschema when initializing sequence tables [#16169](https://github.com/vitessio/vitess/pull/16169)
+ * VDiff CLI: Fix VDiff `show` bug [#16177](https://github.com/vitessio/vitess/pull/16177)
+ * CI flaky test: Fix flakiness in vreplication_migrate_vdiff2_convert_tz [#16180](https://github.com/vitessio/vitess/pull/16180)
+ * VReplication Workflow: set state correctly when restarting workflow streams in the copy phase [#16217](https://github.com/vitessio/vitess/pull/16217)
+ * VReplication: Properly handle target shards w/o a primary in Reshard [#16283](https://github.com/vitessio/vitess/pull/16283)
+ * VDiff: Copy non in_keyrange workflow filters to target tablet query [#16307](https://github.com/vitessio/vitess/pull/16307)
+ * VReplication: disable use of `session_track_gtids` [#16424](https://github.com/vitessio/vitess/pull/16424)
+ * VStream API: validate that last PK has fields defined [#16478](https://github.com/vitessio/vitess/pull/16478)
+ * VReplication: Properly ignore errors from trying to drop tables that don't exist [#16505](https://github.com/vitessio/vitess/pull/16505)
+ * VReplication: Return lock error everywhere that LockName fails [#16560](https://github.com/vitessio/vitess/pull/16560)
+ * VReplication: Gather source positions once we know all writes are done during traffic switch [#16572](https://github.com/vitessio/vitess/pull/16572)
+ * VTGate VStream: Ensure reasonable delivery time for reshard journal event [#16639](https://github.com/vitessio/vitess/pull/16639)
+ * Workflow Status: change logic to determine whether `MoveTables` writes are switched [#16731](https://github.com/vitessio/vitess/pull/16731)
+ * Migrate Workflow: Scope vindex names correctly when target and source keyspace have different names [#16769](https://github.com/vitessio/vitess/pull/16769)
+ * VReplication: Support both vindex col def formats when initing target sequences [#16862](https://github.com/vitessio/vitess/pull/16862)
+ * [release-21.0] fix: Infinite logs in case of non-existent stream logs (#17004) [#17014](https://github.com/vitessio/vitess/pull/17014)
+ * [release-21.0] VReplication: Support reversing read-only traffic in vtctldclient (#16920) [#17015](https://github.com/vitessio/vitess/pull/17015)
+ * [release-21.0] Use proper zstd decoder pool for binlog event compression handling (#17042) [#17045](https://github.com/vitessio/vitess/pull/17045)
+#### VTAdmin
+ * VTAdmin: Upgrade websockets js package [#16504](https://github.com/vitessio/vitess/pull/16504)
+ * VTAdmin: Fix serve-handler's path-to-regexp dep and add default schema refresh [#16778](https://github.com/vitessio/vitess/pull/16778)
+#### VTCombo
+ * vtcombo: close query service on drop database [#16606](https://github.com/vitessio/vitess/pull/16606)
+#### VTGate
+ * Fix `RemoveTablet` during `TabletExternallyReparented` causing connection issues [#16371](https://github.com/vitessio/vitess/pull/16371)
+ * Fix panic in schema tracker in presence of keyspace routing rules [#16383](https://github.com/vitessio/vitess/pull/16383)
+ * [release-21.0] Fix deadlock between health check and topology watcher (#16995) [#17010](https://github.com/vitessio/vitess/pull/17010)
+#### VTTablet
+ * Fix race in `replicationLagModule` of `go/vt/throttle` [#16078](https://github.com/vitessio/vitess/pull/16078)
+#### VTorc
+ * FindErrantGTIDs: superset is not an errant GTID situation [#16725](https://github.com/vitessio/vitess/pull/16725)
+ * Remember all tablets in VTOrc [#16888](https://github.com/vitessio/vitess/pull/16888)
+#### schema management
+ * `schemadiff`: fix index/foreign-key apply scenario [#16698](https://github.com/vitessio/vitess/pull/16698)
+#### vtctldclient
+ * [release-21.0] Fix flag name typo from #16852 (#16921) [#16923](https://github.com/vitessio/vitess/pull/16923)
+#### vtexplain
+ * Fix `vtexplain` not handling `UNION` queries with `weight_string` results correctly. [#16129](https://github.com/vitessio/vitess/pull/16129)
+#### vttestserver
+ * parse transaction timeout as duration [#16338](https://github.com/vitessio/vitess/pull/16338)
+### CI/Build
+#### Backup and Restore
+ * `backup_pitr` CI: validate rejoining replication stream [#16807](https://github.com/vitessio/vitess/pull/16807)
+#### Build/CI
+ * Add DCO workflow [#16052](https://github.com/vitessio/vitess/pull/16052)
+ * Remove DCO workaround [#16087](https://github.com/vitessio/vitess/pull/16087)
+ * CI: Fix for xtrabackup install failures [#16329](https://github.com/vitessio/vitess/pull/16329)
+ * CI: rename `TestSchemaChange` to distinguish the tests [#16694](https://github.com/vitessio/vitess/pull/16694)
+ * CI: Use valid tag for the ossf-scorecard action [#16730](https://github.com/vitessio/vitess/pull/16730)
+ * `endtoend`: better error reporting in Online DDL MySQL execution tests [#16786](https://github.com/vitessio/vitess/pull/16786)
+ * Docker Images Build CI action: add updated version from release-20.0 back in prep for v21 release [#16799](https://github.com/vitessio/vitess/pull/16799)
+ * Use `go-version-file: go.mod` in CI [#16841](https://github.com/vitessio/vitess/pull/16841)
+ * [release-21.0] Flakes: Address flakes in TestMoveTables* unit tests (#16942) [#16951](https://github.com/vitessio/vitess/pull/16951)
+#### Docker
+ * Docker: Update node vtadmin version [#16147](https://github.com/vitessio/vitess/pull/16147)
+ * Fix `docker_lite_push` make target [#16662](https://github.com/vitessio/vitess/pull/16662)
+ * [release-21.0] Build `vttestserver` in GHA and send Slack message on Docker Build failure (#16963) [#17047](https://github.com/vitessio/vitess/pull/17047)
+#### General
+ * [main] Upgrade the Golang version to `go1.22.4` [#16062](https://github.com/vitessio/vitess/pull/16062)
+ * [main] Upgrade the Golang version to `go1.22.5` [#16319](https://github.com/vitessio/vitess/pull/16319)
+ * Update Golang to `1.23.0` [#16599](https://github.com/vitessio/vitess/pull/16599)
+ * [main] Upgrade the Golang version to `go1.23.1` [#16720](https://github.com/vitessio/vitess/pull/16720)
+ * [main] Upgrade the Golang version to `go1.23.2` [#16891](https://github.com/vitessio/vitess/pull/16891)
+#### Online DDL
+ * CI: increase timeout for Online DDL foreign key stress tests [#16203](https://github.com/vitessio/vitess/pull/16203)
+ * CI: wait-for rather than 'assume' in Online DDL flow [#16210](https://github.com/vitessio/vitess/pull/16210)
+ * A couple changes in Online DDL CI [#16272](https://github.com/vitessio/vitess/pull/16272)
+#### VReplication
+ * CI: Lower resources used for TestVtctldMigrateSharded [#16875](https://github.com/vitessio/vitess/pull/16875)
+ * [release-21.0] VReplication: Restore previous minimal e2e test behavior (#17016) [#17017](https://github.com/vitessio/vitess/pull/17017)
+#### VTAdmin
+ * Update micromatch to 4.0.8 [#16660](https://github.com/vitessio/vitess/pull/16660)
+#### VTGate
+ * CI: testing self referencing tables in foreign key stress tests [#16216](https://github.com/vitessio/vitess/pull/16216)
+### Dependencies
+#### General
+ * Upgrade the Golang Dependencies [#16194](https://github.com/vitessio/vitess/pull/16194)
+ * Upgrade the Golang Dependencies [#16302](https://github.com/vitessio/vitess/pull/16302)
+ * Upgrade the Golang Dependencies [#16379](https://github.com/vitessio/vitess/pull/16379)
+ * Upgrade the Golang Dependencies [#16514](https://github.com/vitessio/vitess/pull/16514)
+ * Upgrade the Golang Dependencies [#16600](https://github.com/vitessio/vitess/pull/16600)
+ * Upgrade the Golang Dependencies [#16691](https://github.com/vitessio/vitess/pull/16691)
+ * Upgrade the Golang Dependencies [#16785](https://github.com/vitessio/vitess/pull/16785)
+#### Java
+ * Bump com.google.protobuf:protobuf-java from 3.24.3 to 3.25.5 in /java [#16809](https://github.com/vitessio/vitess/pull/16809)
+ * [release-21.0] Bump commons-io:commons-io from 2.7 to 2.14.0 in /java (#16889) [#16932](https://github.com/vitessio/vitess/pull/16932)
+#### VTAdmin
+ * Update braces package [#16115](https://github.com/vitessio/vitess/pull/16115)
+ * VTAdmin: Address security vuln in path-to-regexp node pkg [#16770](https://github.com/vitessio/vitess/pull/16770)
+### Documentation
+#### Documentation
+ * Changelog 20.0: Fix broken links [#16048](https://github.com/vitessio/vitess/pull/16048)
+ * copy editing changes to summary [#16880](https://github.com/vitessio/vitess/pull/16880)
+ * Add blurb about experimental 8.4 support [#16886](https://github.com/vitessio/vitess/pull/16886)
+ * [release-21.0] Add missing changelog for PR #16852 (#17002) [#17006](https://github.com/vitessio/vitess/pull/17006)
+#### General
+ * release notes: update dml related release notes [#16241](https://github.com/vitessio/vitess/pull/16241)
+#### Query Serving
+ * [Direct PR][release note]: Atomic Distributed Transaction [#17079](https://github.com/vitessio/vitess/pull/17079)
+#### VReplication
+ * Release docs: Add vreplication related entries to the v20 summary [#16259](https://github.com/vitessio/vitess/pull/16259)
+#### VTTablet
+ * clarify collations are also supported for `db_charset` [#16423](https://github.com/vitessio/vitess/pull/16423)
+### Enhancement
+#### Build/CI
+ * Improve the queries upgrade/downgrade CI workflow by using same test code version as binary [#16494](https://github.com/vitessio/vitess/pull/16494)
+ * [release-21.0] Change upgrade test to still use the older version of tests (#16937) [#16970](https://github.com/vitessio/vitess/pull/16970)
+#### CLI
+ * Support specifying expected primary in ERS/PRS [#16852](https://github.com/vitessio/vitess/pull/16852)
+#### Cluster management
+ * Prefer replicas that have innodb buffer pool populated in PRS [#16374](https://github.com/vitessio/vitess/pull/16374)
+ * Allow cross cell promotion in PRS [#16461](https://github.com/vitessio/vitess/pull/16461)
+ * Fix: Errant GTID detection on the replicas when they set replication source [#16833](https://github.com/vitessio/vitess/pull/16833)
+ * [release-21.0] [Direct PR] Add RPC to read the reparent journal position [#16982](https://github.com/vitessio/vitess/pull/16982)
+ * [Direct PR] [release-21.0] Augment `PrimaryStatus` to also send Server UUID [#17032](https://github.com/vitessio/vitess/pull/17032)
+#### Docker
+ * Remove the `bootstrap` dependency on the Docker images we ship [#16339](https://github.com/vitessio/vitess/pull/16339)
+#### Evalengine
+ * evalengine: Implement `PERIOD_ADD` [#16492](https://github.com/vitessio/vitess/pull/16492)
+ * evalengine: Implement `PERIOD_DIFF` [#16557](https://github.com/vitessio/vitess/pull/16557)
+#### General
+ * Add MySQL 8.4 unit tests [#16440](https://github.com/vitessio/vitess/pull/16440)
+ * Added the scorecard github action and its badge [#16538](https://github.com/vitessio/vitess/pull/16538)
+#### Online DDL
+ * `schemadiff`: improved diff ordering with various foreign key strategies [#16081](https://github.com/vitessio/vitess/pull/16081)
+ * Online DDL: `ALTER VITESS_MIGRATION CLEANUP ALL` [#16314](https://github.com/vitessio/vitess/pull/16314)
+ * Online DDL: ensure high `lock_wait_timeout` in Vreplication cut-over [#16601](https://github.com/vitessio/vitess/pull/16601)
+ * Online DDL: new `message_timestamp` column in `schema_migrations` table [#16633](https://github.com/vitessio/vitess/pull/16633)
+ * Online DDL: better support for subsecond `--force-cut-over-after` DDL strategy flag value. [#16635](https://github.com/vitessio/vitess/pull/16635)
+ * VReplication workflows: retry "wrong tablet type" errors [#16645](https://github.com/vitessio/vitess/pull/16645)
+#### Query Serving
+ * Add parsing support for `ANY`/`SOME`/`ALL` comparison modifiers. [#16080](https://github.com/vitessio/vitess/pull/16080)
+ * VIndexes: Stop recommending md5 based vindex types as md5 is considered insecure [#16113](https://github.com/vitessio/vitess/pull/16113)
+ * feat: make the arguments print themselves with type info [#16232](https://github.com/vitessio/vitess/pull/16232)
+ * Group Concat function support for separator [#16237](https://github.com/vitessio/vitess/pull/16237)
+ * Prevent Early Ordering Pushdown to Enable Aggregation Pushdown to MySQL [#16278](https://github.com/vitessio/vitess/pull/16278)
+ * Add new mysql connection drain [#16298](https://github.com/vitessio/vitess/pull/16298)
+ * Improve typing during query planning [#16310](https://github.com/vitessio/vitess/pull/16310)
+ * Fail on prepare of reserved connection [#16316](https://github.com/vitessio/vitess/pull/16316)
+ * make sure to add weight_string for the right expression [#16325](https://github.com/vitessio/vitess/pull/16325)
+ * flow based tablet load balancer [#16351](https://github.com/vitessio/vitess/pull/16351)
+ * feat: remove ORDER BY from inside derived table [#16354](https://github.com/vitessio/vitess/pull/16354)
+ * Implement parser support for all select modifiers [#16396](https://github.com/vitessio/vitess/pull/16396)
+ * Handle dual queries with LIMIT on the vtgate [#16400](https://github.com/vitessio/vitess/pull/16400)
+ * Complex Expression handling for uncorrelated IN and NOT IN subqueries [#16439](https://github.com/vitessio/vitess/pull/16439)
+ * Add basic vector support for MySQL 9.x [#16464](https://github.com/vitessio/vitess/pull/16464)
+ * allow innodb_lock_wait_timeout as system variable [#16574](https://github.com/vitessio/vitess/pull/16574)
+ * Add command to see the unresolved transactions [#16589](https://github.com/vitessio/vitess/pull/16589)
+ * Reject TwoPC calls if semi-sync is not enabled [#16608](https://github.com/vitessio/vitess/pull/16608)
+ * Additional recursive CTE work [#16616](https://github.com/vitessio/vitess/pull/16616)
+ * DDL allowed outside of transaction in vttablet [#16661](https://github.com/vitessio/vitess/pull/16661)
+ * `BinlogEvent`: publish `ServerID()` function [#16713](https://github.com/vitessio/vitess/pull/16713)
+ * feat: authoritative query timeout for vttablet from vtgate [#16735](https://github.com/vitessio/vitess/pull/16735)
+ * Add `vexplain trace` [#16768](https://github.com/vitessio/vitess/pull/16768)
+ * Count how many shards were hit by routes when using `vexplain` [#16802](https://github.com/vitessio/vitess/pull/16802)
+ * Add VEXPLAIN KEYS for improved sharding key selection [#16830](https://github.com/vitessio/vitess/pull/16830)
+ * reject atomic distributed transaction on savepoints and modified system settings [#16835](https://github.com/vitessio/vitess/pull/16835)
+ * Making Reshard work smoothly with Atomic Transactions [#16844](https://github.com/vitessio/vitess/pull/16844)
+ * Query serving: incorporate mirror query results in log stats, fix mirror query max lag bug [#16879](https://github.com/vitessio/vitess/pull/16879)
+ * Enhanced output for vexplain keys [#16892](https://github.com/vitessio/vitess/pull/16892)
+#### Throttler
+ * Tablet throttler: multi-metric support [#15988](https://github.com/vitessio/vitess/pull/15988)
+ * Throttler: return app name in check result, synthesize "why throttled" explanation from result [#16416](https://github.com/vitessio/vitess/pull/16416)
+ * Throttler: `SelfMetric` interface, simplify adding new throttler metrics [#16469](https://github.com/vitessio/vitess/pull/16469)
+ * Throttler: `CheckThrottlerResponseCode` to replace HTTP status codes [#16491](https://github.com/vitessio/vitess/pull/16491)
+ * Deprecate `UpdateThrottlerConfig`'s `--check-as-check-self` and `--check-as-check-shard` flags [#16507](https://github.com/vitessio/vitess/pull/16507)
+ * `mysqld` system metrics, with `TabletManager` rpc [#16850](https://github.com/vitessio/vitess/pull/16850)
+#### VReplication
+ * VReplication: Improve handling of vplayer stalls [#15797](https://github.com/vitessio/vitess/pull/15797)
+ * VReplication: LookupVindex create use existing artifacts when possible [#16097](https://github.com/vitessio/vitess/pull/16097)
+ * VReplication: use new topo named locks and TTL override for workflow coordination [#16260](https://github.com/vitessio/vitess/pull/16260)
+ * VReplication: Handle large binlog compressed transactions more efficiently [#16328](https://github.com/vitessio/vitess/pull/16328)
+ * VReplication: make flags workflow-specific and dynamically changeable [#16583](https://github.com/vitessio/vitess/pull/16583)
+ * VDiff: Improve row diff handling in report [#16618](https://github.com/vitessio/vitess/pull/16618)
+ * VDiff: Add control for start/resume and stop [#16654](https://github.com/vitessio/vitess/pull/16654)
+ * VReplication: Force flag for traffic switching [#16709](https://github.com/vitessio/vitess/pull/16709)
+ * VReplication: Replace most usage of SimulatedNulls [#16734](https://github.com/vitessio/vitess/pull/16734)
+ * VReplication: Add VTGate VStreamFlag to include journal events in the stream [#16737](https://github.com/vitessio/vitess/pull/16737)
+ * VReplication: Validate min set of user permissions in traffic switch prechecks [#16762](https://github.com/vitessio/vitess/pull/16762)
+ * Materialize workflow support for reference tables [#16787](https://github.com/vitessio/vitess/pull/16787)
+ * VReplication: Undo vschema changes on LookupVindex workflow creation fail [#16810](https://github.com/vitessio/vitess/pull/16810)
+ * VReplication: Support automatically replacing auto_inc cols with sequences [#16860](https://github.com/vitessio/vitess/pull/16860)
+#### VTAdmin
+ * VTAdmin: Initiate workflow details tab [#16570](https://github.com/vitessio/vitess/pull/16570)
+ * VTAdmin: Workflow status endpoint [#16587](https://github.com/vitessio/vitess/pull/16587)
+ * VTAdmin(API): Add workflow start/stop endpoint [#16658](https://github.com/vitessio/vitess/pull/16658)
+ * VTAdmin: Distributed transactions list on VTAdmin [#16793](https://github.com/vitessio/vitess/pull/16793)
+ * [Release 21.0] [Direct PR] Conclude txn in VTAdmin and `GetUnresolvedTransactions` bug fix [#16949](https://github.com/vitessio/vitess/pull/16949)
+#### VTCombo
+ * VTCombo: Ensure VSchema exists when creating keyspace [#16094](https://github.com/vitessio/vitess/pull/16094)
+#### VTGate
+ * VStream API: allow keyspace-level heartbeats to be streamed [#16593](https://github.com/vitessio/vitess/pull/16593)
+#### VTTablet
+ * Heartbeat writer can always generate on-demand leased heartbeats, even if not at all configured [#16014](https://github.com/vitessio/vitess/pull/16014)
+ * Add tablet-tags/`--init_tags` stats [#16695](https://github.com/vitessio/vitess/pull/16695)
+ * Add `ChangeTabletTags` RPC to `vtctl`, `ChangeTags` RPC to `vttablet` [#16857](https://github.com/vitessio/vitess/pull/16857)
+#### VTorc
+ * Errant GTID Counts metric in VTOrc [#16829](https://github.com/vitessio/vitess/pull/16829)
+#### schema management
+ * `schemadiff`: Online DDL support, declarative based [#16462](https://github.com/vitessio/vitess/pull/16462)
+ * `shcemadiff`: support `INSTANT` DDL for changing column visibility [#16503](https://github.com/vitessio/vitess/pull/16503)
+ * SidecarDB: Don't ignore table charset and collation [#16670](https://github.com/vitessio/vitess/pull/16670)
+ * schemadiff: more `INSTANT` algorithm considerations [#16678](https://github.com/vitessio/vitess/pull/16678)
+ * schemadiff: reject non-deterministic function in new column's default value [#16684](https://github.com/vitessio/vitess/pull/16684)
+ * schemadiff: reject `uuid_short` and `random_bytes` in new column expression [#16692](https://github.com/vitessio/vitess/pull/16692)
+#### vtctldclient
+ * Add `vtctldclient` container image [#16318](https://github.com/vitessio/vitess/pull/16318)
+#### web UI
+ * VTAdmin(web): Add workflow start/stop actions [#16675](https://github.com/vitessio/vitess/pull/16675)
+ * VTAdmin(web): Some tweaks in the workflow details [#16706](https://github.com/vitessio/vitess/pull/16706)
+ * VTAdmin(web): Initiate MoveTables workflow create screen [#16707](https://github.com/vitessio/vitess/pull/16707)
+### Feature
+#### Backup and Restore
+ * adding new mysql shell backup engine [#16295](https://github.com/vitessio/vitess/pull/16295)
+ * select backup engine in Backup() and ignore engines in RestoreFromBackup() [#16428](https://github.com/vitessio/vitess/pull/16428)
+#### Query Serving
+ * add support for vtgate traffic mirroring (queryserving) [#15992](https://github.com/vitessio/vitess/pull/15992)
+ * rpc: retrieve unresolved transactions [#16356](https://github.com/vitessio/vitess/pull/16356)
+ * Transaction watcher and notifier [#16363](https://github.com/vitessio/vitess/pull/16363)
+ * Distributed Transaction Resolver [#16381](https://github.com/vitessio/vitess/pull/16381)
+ * Support recursive CTEs [#16427](https://github.com/vitessio/vitess/pull/16427)
+ * Query to read transaction state [#16431](https://github.com/vitessio/vitess/pull/16431)
+ * Modify distributed transaction commit flow [#16468](https://github.com/vitessio/vitess/pull/16468)
+ * vttablet api distributed transaction changes [#16506](https://github.com/vitessio/vitess/pull/16506)
+ * Atomic Transactions correctness with PRS, ERS and MySQL & Vttablet Restarts [#16553](https://github.com/vitessio/vitess/pull/16553)
+ * Reject atomic distributed transaction on a network connection [#16584](https://github.com/vitessio/vitess/pull/16584)
+ * Atomic Transactions handling with Online DDL [#16585](https://github.com/vitessio/vitess/pull/16585)
+ * Multiple changes on Distributed Transaction user apis [#16788](https://github.com/vitessio/vitess/pull/16788)
+ * Distributed Transaction: Action on commit prepared or redo prepared failure [#16803](https://github.com/vitessio/vitess/pull/16803)
+#### VTAdmin
+ * VTAdmin: Show throttled status in workflows [#16308](https://github.com/vitessio/vitess/pull/16308)
+#### vtctldclient
+ * add support for vtgate traffic mirroring [#15945](https://github.com/vitessio/vitess/pull/15945)
+ * Add Unresolved Transactions command in vtctld service [#16679](https://github.com/vitessio/vitess/pull/16679)
+ * Add conclude transaction command to vtctld service [#16693](https://github.com/vitessio/vitess/pull/16693)
+### Internal Cleanup
+#### Backup and Restore
+ * builtinbackup: log during restore as restore, not as backup [#16483](https://github.com/vitessio/vitess/pull/16483)
+ * Migrate the S3 SDK from v1 to v2 [#16664](https://github.com/vitessio/vitess/pull/16664)
+#### Build/CI
+ * Add `release-20.0` to the list of branches to upgrade the Go version on [#16053](https://github.com/vitessio/vitess/pull/16053)
+ * Use new way of specifying test files to the vitess-tester [#16233](https://github.com/vitessio/vitess/pull/16233)
+ * Remove unnecessary node install step in local/region examples workflow [#16293](https://github.com/vitessio/vitess/pull/16293)
+ * fix: fixed the pinned-dependencies [#16612](https://github.com/vitessio/vitess/pull/16612)
+ * Fix go.mod files [#16625](https://github.com/vitessio/vitess/pull/16625)
+ * Move from 4-cores larger runners to `ubuntu-latest` [#16714](https://github.com/vitessio/vitess/pull/16714)
+#### CLI
+ * SetShardTabletControl: Improve flag help output [#16376](https://github.com/vitessio/vitess/pull/16376)
+ * Move concurrent connection dial limit out of `healthcheck`. [#16378](https://github.com/vitessio/vitess/pull/16378)
+#### Cluster management
+ * Remove unused parameters in reparent code and add CheckLockShard calls [#16312](https://github.com/vitessio/vitess/pull/16312)
+#### Docker
+ * Remove unnecessary Docker build workflows [#16196](https://github.com/vitessio/vitess/pull/16196)
+ * Remove mysql57/percona57 bootstrap images [#16620](https://github.com/vitessio/vitess/pull/16620)
+#### Documentation
+ * Update eol-process.md [#16249](https://github.com/vitessio/vitess/pull/16249)
+ * Add a note on `QueryCacheHits` and `QueryCacheMisses` in the release notes [#16299](https://github.com/vitessio/vitess/pull/16299)
+ * Add release notes for the new connection drain (+ use dashes instead of underscore) [#16334](https://github.com/vitessio/vitess/pull/16334)
+ * Remove specific Kubernetes version instructions and link to the Vites… [#16610](https://github.com/vitessio/vitess/pull/16610)
+#### Examples
+ * Remove docker_local from Makefile [#16335](https://github.com/vitessio/vitess/pull/16335)
+#### General
+ * Deprecated metrics deletion [#16086](https://github.com/vitessio/vitess/pull/16086)
+ * No usage of math/rand [#16264](https://github.com/vitessio/vitess/pull/16264)
+ * [cleanup] Protos: Use UnmarshalPB() when unmarshalling a proto object [#16311](https://github.com/vitessio/vitess/pull/16311)
+ * Update golangci-lint to newer faster version [#16636](https://github.com/vitessio/vitess/pull/16636)
+ * Remove the vitess-mixin [#16657](https://github.com/vitessio/vitess/pull/16657)
+ * bug: fix slice init length [#16674](https://github.com/vitessio/vitess/pull/16674)
+ * Fix generated proto [#16702](https://github.com/vitessio/vitess/pull/16702)
+ * Update part of codebase to use new for := range syntax [#16738](https://github.com/vitessio/vitess/pull/16738)
+ * Remove former maintainer from areas of expertise section [#16801](https://github.com/vitessio/vitess/pull/16801)
+#### Governance
+ * Add `timvaillancourt` to some `CODEOWNERS` paths [#16107](https://github.com/vitessio/vitess/pull/16107)
+ * Fix the email in `pom.xml` [#16111](https://github.com/vitessio/vitess/pull/16111)
+#### Online DDL
+ * Online DDL internal cleanup: using formal statements as opposed to textual SQL [#16230](https://github.com/vitessio/vitess/pull/16230)
+ * Online DDL: remove legacy (and ancient) 'REVERT ' syntax [#16301](https://github.com/vitessio/vitess/pull/16301)
+#### Query Serving
+ * refactor: cleaner cloning API [#16079](https://github.com/vitessio/vitess/pull/16079)
+ * `schemadiff` small internal refactor: formalizing column charset/collation [#16239](https://github.com/vitessio/vitess/pull/16239)
+ * sqlparser: Remove unneeded escaping [#16255](https://github.com/vitessio/vitess/pull/16255)
+ * Fix codegen [#16257](https://github.com/vitessio/vitess/pull/16257)
+ * deprecate queryserver-enable-settings-pool flag [#16280](https://github.com/vitessio/vitess/pull/16280)
+ * Cleanup: Health Stream removed db pool usage [#16336](https://github.com/vitessio/vitess/pull/16336)
+ * Remove JSON annotations [#16437](https://github.com/vitessio/vitess/pull/16437)
+ * Remove some unused MySQL 5.6 code [#16465](https://github.com/vitessio/vitess/pull/16465)
+ * Small internal cleanups [#16467](https://github.com/vitessio/vitess/pull/16467)
+ * vindex function: error when keyspace not selected [#16534](https://github.com/vitessio/vitess/pull/16534)
+ * Planner cleaning: cleanup and refactor [#16569](https://github.com/vitessio/vitess/pull/16569)
+ * Add resultsObserver to ScatterConn [#16638](https://github.com/vitessio/vitess/pull/16638)
+ * Fix error code received from vttablets on context expiration [#16685](https://github.com/vitessio/vitess/pull/16685)
+#### Throttler
+ * Throttler code: some refactoring and cleanup [#16368](https://github.com/vitessio/vitess/pull/16368)
+#### Topology
+ * Topology Server Locking Refactor [#16005](https://github.com/vitessio/vitess/pull/16005)
+#### VReplication
+ * VReplication: Improve table plan builder errors [#16588](https://github.com/vitessio/vitess/pull/16588)
+ * VReplication: Improve replication plan builder and event application errors [#16596](https://github.com/vitessio/vitess/pull/16596)
+#### VTAdmin
+ * Remove unused `formatRelativeTime` import [#16549](https://github.com/vitessio/vitess/pull/16549)
+ * VTAdmin: Upgrade deps to address security vulns [#16843](https://github.com/vitessio/vitess/pull/16843)
+#### VTGate
+ * Support passing filters to `discovery.NewHealthCheck(...)` [#16170](https://github.com/vitessio/vitess/pull/16170)
+#### VTTablet
+ * `txthrottler`: move `ThrottlerInterface` to `go/vt/throttler`, use `slices` pkg, add stats [#16248](https://github.com/vitessio/vitess/pull/16248)
+ * Deprecate vttablet metrics `QueryCacheXX` and rename to `QueryPlanCacheXX` [#16289](https://github.com/vitessio/vitess/pull/16289)
+#### schema management
+ * `schemadiff`/Online DDL internal refactor [#16767](https://github.com/vitessio/vitess/pull/16767)
+#### vtctldclient
+ * VReplication: Add custom logger support to Workflow Server [#16547](https://github.com/vitessio/vitess/pull/16547)
+### Performance
+#### Backup and Restore
+ * mysqlctl: open backup files with fadvise(2) and FADV_SEQUENTIAL [#16441](https://github.com/vitessio/vitess/pull/16441)
+#### Online DDL
+ * Online DDL: avoid SQL's `CONVERT(...)`, convert programmatically if needed [#16597](https://github.com/vitessio/vitess/pull/16597)
+#### Performance
+ * go/mysql: use clear builtin for zerofill [#16348](https://github.com/vitessio/vitess/pull/16348)
+ * go/mysql: improve GTID encoding for OK packet [#16361](https://github.com/vitessio/vitess/pull/16361)
+#### Query Serving
+ * go/mysql: performance optimizations in protocol encoding [#16341](https://github.com/vitessio/vitess/pull/16341)
+ * go/vt/sqlparser: improve performance in TrackedBuffer formatting [#16364](https://github.com/vitessio/vitess/pull/16364)
+ * `schemadiff`: optimize permutation evaluation [#16435](https://github.com/vitessio/vitess/pull/16435)
+ * Performance improvements - Planner [#16631](https://github.com/vitessio/vitess/pull/16631)
+ * Optimize Operator Input Handling [#16689](https://github.com/vitessio/vitess/pull/16689)
+ * Small fix to decrease memory allocation [#16791](https://github.com/vitessio/vitess/pull/16791)
+### Regression
+#### Query Serving
+ * fix: order by subquery planning [#16049](https://github.com/vitessio/vitess/pull/16049)
+ * feat: add a LIMIT 1 on EXISTS subqueries to limit network overhead [#16153](https://github.com/vitessio/vitess/pull/16153)
+ * bugfix: Allow cross-keyspace joins [#16520](https://github.com/vitessio/vitess/pull/16520)
+ * [release-21.0] [Direct PR] fix: route engine to handle column truncation for execute after lookup (#16981) [#16986](https://github.com/vitessio/vitess/pull/16986)
+ * [release-21.0] Add support for `MultiEqual` opcode for lookup vindexes. (#16975) [#17041](https://github.com/vitessio/vitess/pull/17041)
+### Release
+#### Build/CI
+ * [release-21.0] Fix the release workflow (#16964) [#17020](https://github.com/vitessio/vitess/pull/17020)
+#### General
+ * [main] Copy `v20.0.0-RC1` release notes [#16140](https://github.com/vitessio/vitess/pull/16140)
+ * [main] Copy `v20.0.0-RC2` release notes [#16234](https://github.com/vitessio/vitess/pull/16234)
+ * [main] Copy `v20.0.0` release notes [#16273](https://github.com/vitessio/vitess/pull/16273)
+ * [main] Copy `v18.0.6` release notes [#16453](https://github.com/vitessio/vitess/pull/16453)
+ * [main] Copy `v19.0.5` release notes [#16455](https://github.com/vitessio/vitess/pull/16455)
+ * [main] Copy `v20.0.1` release notes [#16457](https://github.com/vitessio/vitess/pull/16457)
+ * [main] Copy `v18.0.7` release notes [#16746](https://github.com/vitessio/vitess/pull/16746)
+ * [main] Copy `v19.0.6` release notes [#16752](https://github.com/vitessio/vitess/pull/16752)
+ * [main] Copy `v20.0.2` release notes [#16755](https://github.com/vitessio/vitess/pull/16755)
+ * [release-21.0] Code Freeze for `v21.0.0-RC1` [#16912](https://github.com/vitessio/vitess/pull/16912)
+ * [release-21.0] Release of `v21.0.0-RC1` [#16950](https://github.com/vitessio/vitess/pull/16950)
+ * [release-21.0] Bump to `v21.0.0-SNAPSHOT` after the `v21.0.0-RC1` release [#16955](https://github.com/vitessio/vitess/pull/16955)
+ * [release-21.0] Release of `v21.0.0-RC2` [#17022](https://github.com/vitessio/vitess/pull/17022)
+ * [release-21.0] Bump to `v21.0.0-SNAPSHOT` after the `v21.0.0-RC2` release [#17049](https://github.com/vitessio/vitess/pull/17049)
+ * [release-21.0] Add release notes for known issue in v21.0.0 [#17067](https://github.com/vitessio/vitess/pull/17067)
+### Testing
+#### Build/CI
+ * Online DDL flow CI: Update golang version to 1.22.4 [#16066](https://github.com/vitessio/vitess/pull/16066)
+ * Run the static checks workflow if the file changes [#16659](https://github.com/vitessio/vitess/pull/16659)
+ * Fix error contain checks in vtgate package [#16672](https://github.com/vitessio/vitess/pull/16672)
+ * Don't show skipped tests in summary action [#16859](https://github.com/vitessio/vitess/pull/16859)
+#### Cluster management
+ * Add semi-sync plugin test in main [#16372](https://github.com/vitessio/vitess/pull/16372)
+ * [release-21.0] Flaky test fixes (#16940) [#16960](https://github.com/vitessio/vitess/pull/16960)
+#### General
+ * CI Summary Addition [#16143](https://github.com/vitessio/vitess/pull/16143)
+ * Add Summary in unit-race workflow [#16164](https://github.com/vitessio/vitess/pull/16164)
+ * Allow for MySQL 8.4 in endtoend tests [#16885](https://github.com/vitessio/vitess/pull/16885)
+#### Query Serving
+ * `schemadiff`: adding a FK dependency unit test [#16069](https://github.com/vitessio/vitess/pull/16069)
+ * Adding Distributed Transaction Test [#16114](https://github.com/vitessio/vitess/pull/16114)
+ * Vitess tester workflow [#16127](https://github.com/vitessio/vitess/pull/16127)
+ * fix flaky test TestQueryTimeoutWithShardTargeting [#16150](https://github.com/vitessio/vitess/pull/16150)
+ * test: Remove unreachable test skipping [#16265](https://github.com/vitessio/vitess/pull/16265)
+ * Make sure end to end test actually tests the fix [#16277](https://github.com/vitessio/vitess/pull/16277)
+ * Skip running vtadmin build for vitess tester workflow [#16459](https://github.com/vitessio/vitess/pull/16459)
+ * Fuzzer testing for 2PC transactions [#16476](https://github.com/vitessio/vitess/pull/16476)
+ * Move tables with atomic transactions [#16676](https://github.com/vitessio/vitess/pull/16676)
+ * Replace ErrorContains checks with Error checks before running upgrade downgrade [#16688](https://github.com/vitessio/vitess/pull/16688)
+ * Fix upgrade test in release-20 by skipping tests [#16705](https://github.com/vitessio/vitess/pull/16705)
+ * Reduce flakiness in TwoPC testing [#16712](https://github.com/vitessio/vitess/pull/16712)
+ * fix distributed transactions disruptions test with move table [#16765](https://github.com/vitessio/vitess/pull/16765)
+ * Add a test to verify we respect the overall query timeout [#16800](https://github.com/vitessio/vitess/pull/16800)
+ * flaky test fix for query timeout change [#16821](https://github.com/vitessio/vitess/pull/16821)
+ * Fix error message check on query timeout [#16827](https://github.com/vitessio/vitess/pull/16827)
+ * upgrade vitess-tester to latest version [#16884](https://github.com/vitessio/vitess/pull/16884)
+ * Relax vexplain test for upcoming changes [#17035](https://github.com/vitessio/vitess/pull/17035)
+#### Throttler
+ * Throttler flaky test: explicitly disabling throttler so as to ensure it does not re-enable [#16369](https://github.com/vitessio/vitess/pull/16369)
+#### VReplication
+ * Multi-tenant Movetables: add e2e test for vdiff [#16309](https://github.com/vitessio/vitess/pull/16309)
+ * VReplication workflow package: unit tests for StreamMigrator, Mount et al [#16498](https://github.com/vitessio/vitess/pull/16498)
+ * CI: Temporarily skip flaky TestMoveTablesUnsharded [#16812](https://github.com/vitessio/vitess/pull/16812)
+#### VTCombo
+ * Fix flaky tests that use vtcombo [#16178](https://github.com/vitessio/vitess/pull/16178)
+#### vtexplain
+ * Fix flakiness in `vtexplain` unit test case. [#16159](https://github.com/vitessio/vitess/pull/16159)
+#### vttestserver
+ * Flaky test fix `TestCanGetKeyspaces` [#16214](https://github.com/vitessio/vitess/pull/16214)
+
diff --git a/changelog/21.0/21.0.0/release_notes.md b/changelog/21.0/21.0.0/release_notes.md
new file mode 100644
index 00000000000..6fe295fbb3b
--- /dev/null
+++ b/changelog/21.0/21.0.0/release_notes.md
@@ -0,0 +1,263 @@
+# Release of Vitess v21.0.0
+## Summary
+
+### Table of Contents
+
+- **[Known Issues](#known-issues)**
+ - **[Backup reports itself as successful despite failures](#backup-reports-as-successful)**
+- **[Major Changes](#major-changes)**
+ - **[Deprecations and Deletions](#deprecations-and-deletions)**
+ - [Deprecated VTTablet Flags](#vttablet-flags)
+ - [Deletion of deprecated metrics](#metric-deletion)
+ - [Deprecated Metrics](#deprecations-metrics)
+ - **[Traffic Mirroring](#traffic-mirroring)**
+ - **[Atomic Distributed Transaction Support](#atomic-transaction)**
+ - **[New VTGate Shutdown Behavior](#new-vtgate-shutdown-behavior)**
+ - **[Tablet Throttler: Multi-Metric support](#tablet-throttler)**
+ - **[Allow Cross Cell Promotion in PRS](#allow-cross-cell)**
+ - **[Support for recursive CTEs](#recursive-cte)**
+ - **[VTGate Tablet Balancer](#tablet-balancer)**
+ - **[Query Timeout Override](#query-timeout)**
+ - **[New Backup Engine](#new-backup-engine)**
+ - **[Dynamic VReplication Configuration](#dynamic-vreplication-configuration)**
+ - **[Reference Table Materialization](#reference-table-materialization)**
+ - **[New VEXPLAIN Modes: TRACE and KEYS](#new-vexplain-modes)**
+ - **[Automatically Replace MySQL auto_increment Clauses with Vitess Sequences](#auto-replace-mysql-autoinc-with-seq)**
+ - **[Experimental MySQL 8.4 support](#experimental-mysql-84)**
+ - **[Current Errant GTIDs Count Metric](#errant-gtid-metric)**
+ - **[vtctldclient ChangeTabletTags](#vtctldclient-changetablettags)**
+ - **[Support for specifying expected primary in reparents](#reparents-expectedprimary)**
+
+## Known Issues
+
+### Backup reports itself as successful despite failures
+
+In this release, we have identified an issue where a backup may succeed even if one of the underlying files fails to be backed up.
+The underlying errors are ignored and the backup action reports success.
+This issue exists only with the `builtin` backup engine, and it can occur only when the engine has already started backing up all files.
+Please refer to https://github.com/vitessio/vitess/issues/17063 for more details.
+
+## Major Changes
+
+### Deprecations and Deletions
+
+#### Deprecated VTTablet Flags
+
+- `queryserver-enable-settings-pool` flag, added in `v15`, has been on by default since `v17`.
+ It is now deprecated and will be removed in a future release.
+
+#### Deletion of deprecated metrics
+
+The following VTOrc metrics were deprecated in `v20`. They have now been deleted.
+
+| Metric Name |
+|:--------------------------------------------:|
+| `analysis.change.write` |
+| `audit.write` |
+| `discoveries.attempt` |
+| `discoveries.fail` |
+| `discoveries.instance_poll_seconds_exceeded` |
+| `discoveries.queue_length` |
+| `discoveries.recent_count` |
+| `instance.read` |
+| `instance.read_topology` |
+| `emergency_reparent_counts` |
+| `planned_reparent_counts` |
+| `reparent_shard_operation_timings` |
+
+#### Deprecated Metrics
+
+The following metrics are now deprecated and will be deleted in a future release, please use their replacements.
+
+| Component | Metric Name | Replaced By |
+|------------|:---------------------:|:-------------------------------:|
+| `vttablet` | `QueryCacheLength` | `QueryEnginePlanCacheLength` |
+| `vttablet` | `QueryCacheSize` | `QueryEnginePlanCacheSize` |
+| `vttablet` | `QueryCacheCapacity` | `QueryEnginePlanCacheCapacity` |
+| `vttablet` | `QueryCacheEvictions` | `QueryEnginePlanCacheEvictions` |
+| `vttablet` | `QueryCacheHits` | `QueryEnginePlanCacheHits` |
+| `vttablet` | `QueryCacheMisses` | `QueryEnginePlanCacheMisses` |
+
+### Traffic Mirroring
+
+Traffic mirroring is intended to help reduce some of the uncertainty inherent to `MoveTables SwitchTraffic`. When
+traffic mirroring is enabled, VTGate will mirror a percentage of traffic from one keyspace to another.
+
+Mirror rules may be enabled through `vtctldclient` with `MoveTables MirrorTraffic`. For example:
+
+```bash
+$ vtctldclient --server :15999 MoveTables --target-keyspace customer --workflow commerce2customer MirrorTraffic --percent 5.0
+```
+
+Mirror rules can be inspected with `GetMirrorRules`.
+
+### Atomic Distributed Transaction Support
+
+We have introduced atomic distributed transactions as an experimental feature.
+Users can now run multi-shard transactions with stronger guarantees.
+Vitess now provides two modes of transactional guarantees for multi-shard transactions: Best Effort and Atomic.
+These can be selected based on the user’s requirements and the trade-offs they are willing to make.
+
+Follow the documentation to enable [Atomic Distributed Transaction](https://vitess.io/docs/21.0/reference/features/distributed-transaction/)
+
+For more details on the implementation and trade-offs, please refer to the [RFC](https://github.com/vitessio/vitess/issues/16245)
+
+### New VTGate Shutdown Behavior
+
+We added a new option to VTGate to disallow new connections while VTGate is shutting down,
+while allowing existing connections to finish their work until they manually disconnect or until
+the `--onterm_timeout` is reached, without getting a `Server shutdown in progress` error.
+
+This new behavior can be enabled by specifying the new `--mysql-server-drain-onterm` flag to VTGate.
+
+You can find more information about this option in the [RFC](https://github.com/vitessio/vitess/issues/15971).
+
+### Tablet Throttler: Multi-Metric support
+
+Up until `v20`, the tablet throttler would only monitor and use a single metric. That would be replication lag, by
+default, or could be the result of a custom query. In this release, we introduce a major redesign so that the throttler
+monitors and uses multiple metrics at the same time, including the above two.
+
+The default behavior now is to monitor all metrics, but only use `lag` (if the custom query is undefined) or the `custom`
+metric (if the custom query is defined). This is backwards-compatible with `v20`. A `v20` `PRIMARY` is compatible with
+a `v21` `REPLICA`, and a `v21` `PRIMARY` is compatible with a `v20` `REPLICA`.
+
+However, it is now possible to assign any combination of one or more metrics for a given app. The throttler
+would then accept or reject the app's requests based on the health of _all_ assigned metrics. We have provided a pre-defined
+list of metrics:
+
+- `lag`: replication lag based on heartbeat injection.
+- `threads_running`: concurrent active threads on the MySQL server.
+- `loadavg`: per core load average measured on the tablet instance/pod.
+- `custom`: the result of a custom query executed on the MySQL server.
+
+Each metric has a default threshold which can be overridden by the `UpdateThrottlerConfig` command.
+
+The throttler also supports the catch-all `"all"` app name, and it is thus possible to assign metrics to **all** apps.
+Explicit app to metric assignments will override the catch-all configuration.
+
+Metrics are assigned a default _scope_, which could be `self` (isolated to the tablet) or `shard` (max, aka **worst**
+value among shard tablets). It is further possible to require a different scope for each metric.
+
+### Allow Cross Cell Promotion in PRS
+
+Up until now if the users wanted to promote a replica in a different cell from the current primary
+using `PlannedReparentShard`, they had to specify the new primary with the `--new-primary` flag.
+
+We have now added a new flag `--allow-cross-cell-promotion` that lets `PlannedReparentShard` choose a primary in a
+different cell even if no new primary is provided explicitly.
+
+### Experimental support for recursive CTEs
+
+We have added experimental support for recursive CTEs in Vitess. We are marking it as experimental because it is not yet
+fully tested and may have some limitations. We are looking for feedback from the community to improve this feature.
+
+### VTGate Tablet Balancer
+
+When a VTGate routes a query and has multiple available tablets for a given shard / tablet type (e.g. REPLICA), the
+current default behavior routes the query with local cell affinity and round robin policy. The VTGate Tablet Balancer
+provides an alternate mechanism that routes queries to maintain an even distribution of query load to each tablet, while
+preferentially routing to tablets in the same cell as the VTGate.
+
+The tablet balancer is enabled by a new flag `--enable-balancer` and configured by `--balancer-vtgate-cells`
+and `--balancer-keyspaces`.
+
+See the [RFC ](https://github.com/vitessio/vitess/issues/12241) for more details on the design and configuration of this feature.
+
+### Query Timeout Override
+
+VTGate sends an authoritative query timeout to VTTablet when the `QUERY_TIMEOUT_MS` comment directive,
+`query_timeout` session system variable, or `query-timeout` flag is set.
+The order of precedence is: comment directive > session variable > VTGate flag.
+VTTablet overrides its default query timeout with the value received from VTGate.
+All timeouts are specified in milliseconds.
+
+When a query is executed inside a transaction, there is an additional nuance. The actual timeout used will be the smaller
+of the transaction timeout and the query timeout.
+
+A query can also be set to have no timeout by using the `QUERY_TIMEOUT_MS` comment directive with a value of `0`.
+
+Example usage:
+`select /*vt+ QUERY_TIMEOUT_MS=30 */ col from tbl`
+
+### New Backup Engine (EXPERIMENTAL)
+
+We are introducing a new backup engine for logical backups in order to support use cases that require something other
+than physical backups. This feature is experimental and is based on [MySQL Shell](https://dev.mysql.com/doc/mysql-shell/8.0/en/).
+
+The new engine is enabled by using `--backup_engine_implementation=mysqlshell`. There are other options that are required,
+so please read the [documentation](https://vitess.io/docs/21.0/user-guides/operating-vitess/backup-and-restore/creating-a-backup/) to learn which options are required and how to configure them.
+
+### Dynamic VReplication Configuration
+
+Previously, many of the configuration options for VReplication Workflows had to be provided using VTTablet flags. This
+meant that any change to VReplication configuration required restarting VTTablets. We now allow these to be overridden
+while creating a workflow or dynamically after the workflow is already in progress.
+
+### Reference Table Materialization
+
+There is a new option in [`Materialize` workflows](https://vitess.io/docs/reference/vreplication/materialize/) to keep a synced copy of [reference or lookup tables](https://vitess.io/docs/reference/vreplication/reference_tables/)
+(countries, states, zip codes, etc) from an unsharded keyspace, which holds the source of truth for the reference
+table, to all shards in a sharded keyspace.
+
+### New VEXPLAIN Modes: TRACE and KEYS
+
+#### VEXPLAIN TRACE
+
+The new `TRACE` mode for `VEXPLAIN` provides a detailed execution trace of queries, showing how they're processed through various
+operators and interactions with tablets. This mode is particularly useful for:
+
+- Identifying performance bottlenecks
+- Understanding query execution patterns
+- Optimizing complex queries
+- Debugging unexpected query behavior
+
+`TRACE` mode runs the query and logs all interactions, returning a JSON representation of the query execution plan with additional
+statistics like number of calls, average rows processed, and number of shards queried.
+
+#### VEXPLAIN KEYS
+
+The `KEYS` mode for `VEXPLAIN` offers a concise summary of query structure, highlighting columns used in joins, filters, and
+grouping operations. This information is crucial for:
+
+- Identifying potential sharding key candidates
+- Optimizing query performance
+- Analyzing query patterns to inform database design decisions
+
+`KEYS` mode analyzes the query structure without executing it, providing JSON output that includes grouping columns, join columns,
+filter columns (potential candidates for indexes, primary keys, or sharding keys), and the statement type.
+
+These new `VEXPLAIN` modes enhance Vitess's query analysis capabilities, allowing for more informed decisions about sharding
+strategies and query optimization.
+
+### Automatically Replace MySQL auto_increment Clauses with Vitess Sequences
+
+In https://github.com/vitessio/vitess/pull/16860 we added support for replacing MySQL `auto_increment` clauses with [Vitess Sequences](https://vitess.io/docs/reference/features/vitess-sequences/), performing all of the setup and initialization
+work automatically during the [`MoveTables`](https://vitess.io/docs/reference/vreplication/movetables/) workflow. As part of that work we have deprecated the
+[`--remove-sharded-auto-increment` boolean flag](https://vitess.io/docs/20.0/reference/programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_create/) and you should begin using the new
+[`--sharded-auto-increment-handling` flag](https://vitess.io/docs/21.0/reference/programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_create/) instead. Please see the new
+[`MoveTables` Auto Increment Handling](https://vitess.io/docs/21.0/reference/vreplication/movetables/#auto-increment-handling) documentation for additional details.
+
+### Experimental MySQL 8.4 support
+
+We have added experimental support for MySQL 8.4. It passes the Vitess test suite, but it is otherwise not yet tested. We are looking for feedback from the community to improve this to move support out of the experimental phase in a future release.
+
+### Current Errant GTIDs Count Metric
+A new metric called `CurrentErrantGTIDCount` has been added to the `VTOrc` component.
+This metric shows the current count of the errant GTIDs in the tablets.
+
+### `vtctldclient ChangeTabletTags` command
+
+The `vtctldclient` command `ChangeTabletTags` was added to allow the tags of a tablet to be changed dynamically.
+
+### Support specifying expected primary in reparents
+
+The `EmergencyReparentShard` and `PlannedReparentShard` commands and RPCs now support specifying a primary we expect to still be the current primary in order for a reparent operation to be processed. This allows reparents to be conditional on a specific state being true.
+
+------------
+The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/21.0/21.0.0/changelog.md).
+
+The release includes 364 merged Pull Requests.
+
+Thanks to all our contributors: @GrahamCampbell, @GuptaManan100, @Utkar5hM, @anshikavashistha, @app/dependabot, @app/vitess-bot, @arthurschreiber, @beingnoble03, @brendar, @cameronmccord2, @chrism1001, @cuishuang, @dbussink, @deepthi, @demmer, @frouioui, @harshit-gangal, @harshitasao, @icyflame, @kirtanchandak, @mattlord, @mattrobenolt, @maxenglander, @mcrauwel, @notfelineit, @perminov, @rafer, @rohit-nayak-ps, @runewake2, @rvrangel, @shanth96, @shlomi-noach, @systay, @timvaillancourt, @vitess-bot
+
diff --git a/changelog/21.0/21.0.0/summary.md b/changelog/21.0/21.0.0/summary.md
index d237f24fe5c..1c34f5ad81a 100644
--- a/changelog/21.0/21.0.0/summary.md
+++ b/changelog/21.0/21.0.0/summary.md
@@ -2,12 +2,16 @@
### Table of Contents
+- **[Known Issues](#known-issues)**
+ - **[Backup reports itself as successful despite failures](#backup-reports-as-successful)**
- **[Major Changes](#major-changes)**
- **[Deprecations and Deletions](#deprecations-and-deletions)**
+ - [Deprecated VTTablet Flags](#vttablet-flags)
- [Deletion of deprecated metrics](#metric-deletion)
- - [VTTablet Flags](#vttablet-flags)
- - [Metrics](#deprecations-metrics)
+ - [Deprecated Metrics](#deprecations-metrics)
+ - **[RPC Changes](#rpc-changes)**
- **[Traffic Mirroring](#traffic-mirroring)**
+ - **[Atomic Distributed Transaction Support](#atomic-transaction)**
- **[New VTGate Shutdown Behavior](#new-vtgate-shutdown-behavior)**
- **[Tablet Throttler: Multi-Metric support](#tablet-throttler)**
- **[Allow Cross Cell Promotion in PRS](#allow-cross-cell)**
@@ -18,15 +22,33 @@
- **[Dynamic VReplication Configuration](#dynamic-vreplication-configuration)**
- **[Reference Table Materialization](#reference-table-materialization)**
- **[New VEXPLAIN Modes: TRACE and KEYS](#new-vexplain-modes)**
- - **[Errant GTID Detection on Vttablets](#errant-gtid-vttablet)**
+ - **[Automatically Replace MySQL auto_increment Clauses with Vitess Sequences](#auto-replace-mysql-autoinc-with-seq)**
+ - **[Experimental MySQL 8.4 support](#experimental-mysql-84)**
+ - **[Current Errant GTIDs Count Metric](#errant-gtid-metric)**
+ - **[vtctldclient ChangeTabletTags](#vtctldclient-changetablettags)**
+ - **[Support for specifying expected primary in reparents](#reparents-expectedprimary)**
-## Major Changes
+## Known Issues
-### Deprecations and Deletions
+### Backup reports itself as successful despite failures
-#### Deletion of deprecated metrics
+In this release, we have identified an issue where a backup may succeed even if one of the underlying files fails to be backed up.
+The underlying errors are ignored and the backup action reports success.
+This issue exists only with the `builtin` backup engine, and it can occur only when the engine has already started backing up all files.
+Please refer to https://github.com/vitessio/vitess/issues/17063 for more details.
-The following metrics that were deprecated in the previous release, have now been deleted.
+## Major Changes
+
+### Deprecations and Deletions
+
+#### Deprecated VTTablet Flags
+
+- `queryserver-enable-settings-pool` flag, added in `v15`, has been on by default since `v17`.
+ It is now deprecated and will be removed in a future release.
+
+#### Deletion of deprecated metrics
+
+The following VTOrc metrics were deprecated in `v20`. They have now been deleted.
| Metric Name |
|:--------------------------------------------:|
@@ -43,14 +65,9 @@ The following metrics that were deprecated in the previous release, have now bee
| `planned_reparent_counts` |
| `reparent_shard_operation_timings` |
-#### VTTablet Flags
+#### Deprecated Metrics
-- `queryserver-enable-settings-pool` flag, added in v15, has been on by default since v17.
- It is now deprecated and will be removed in a future release.
-
-#### Metrics
-
-The following metrics are now deprecated, if provided please use their replacement.
+The following metrics are now deprecated and will be deleted in a future release, please use their replacements.
| Component | Metric Name | Replaced By |
|------------|:---------------------:|:-------------------------------:|
@@ -61,7 +78,13 @@ The following metrics are now deprecated, if provided please use their replaceme
| `vttablet` | `QueryCacheHits` | `QueryEnginePlanCacheHits` |
| `vttablet` | `QueryCacheMisses` | `QueryEnginePlanCacheMisses` |
-### Traffic Mirroring
+### RPC Changes
+
+These are the RPC changes made in this release -
+1. `ReadReparentJournalInfo` RPC has been added in TabletManagerClient interface, that is going to be used in EmergencyReparentShard for better errant GTID detection.
+2. `PrimaryStatus` RPC in TabletManagerClient interface has been updated to also return the server UUID of the primary. This is going to be used in the vttablets so that they can do their own errant GTID detection in `SetReplicationSource`.
+
+### Traffic Mirroring
Traffic mirroring is intended to help reduce some of the uncertainty inherent to `MoveTables SwitchTraffic`. When
traffic mirroring is enabled, VTGate will mirror a percentage of traffic from one keyspace to another.
@@ -74,60 +97,68 @@ $ vtctldclient --server :15999 MoveTables --target-keyspace customer --workflow
Mirror rules can be inspected with `GetMirrorRules`.
-### New VTGate Shutdown Behavior
+### Atomic Distributed Transaction Support
-We added a new option to affect the VTGate shutdown process in v21 by using a connection drain timeout rather than the
-older activity drain timeout.
-The goal of this new behavior, connection draining option, is to disallow new connections when VTGate is shutting down,
-but continue allowing existing connections to finish their work until they manually disconnect or until
-the `--onterm_timeout` timeout is reached,
-without getting a `Server shutdown in progress` error.
+We have introduced atomic distributed transactions as an experimental feature.
+Users can now run multi-shard transactions with stronger guarantees.
+Vitess now provides two modes of transactional guarantees for multi-shard transactions: Best Effort and Atomic.
+These can be selected based on the user’s requirements and the trade-offs they are willing to make.
+
+Follow the documentation to enable [Atomic Distributed Transaction](https://vitess.io/docs/21.0/reference/features/distributed-transaction/)
+
+For more details on the implementation and trade-offs, please refer to the [RFC](https://github.com/vitessio/vitess/issues/16245)
+
+### New VTGate Shutdown Behavior
+
+We added a new option to VTGate to disallow new connections while VTGate is shutting down,
+while allowing existing connections to finish their work until they manually disconnect or until
+the `--onterm_timeout` is reached, without getting a `Server shutdown in progress` error.
This new behavior can be enabled by specifying the new `--mysql-server-drain-onterm` flag to VTGate.
-See more information about this change by [reading its RFC](https://github.com/vitessio/vitess/issues/15971).
+You can find more information about this option in the [RFC](https://github.com/vitessio/vitess/issues/15971).
-### Tablet Throttler: Multi-Metric support
+### Tablet Throttler: Multi-Metric support
-Up till `v20`, the tablet throttler would only monitor and use a single metric. That would be replication lag, by
-default, or could be the result of a custom query. `v21` introduces a major redesign where the throttler monitors and
-uses multiple metrics at the same time, including the above two.
+Up until `v20`, the tablet throttler would only monitor and use a single metric. That would be replication lag, by
+default, or could be the result of a custom query. In this release, we introduce a major redesign so that the throttler
+monitors and uses multiple metrics at the same time, including the above two.
-Backwards compatible with `v20`, the default behavior in `v21` is to monitor all metrics, but only use `lag` (if the
-cutsom query is undefined) or the `cutsom` metric (if the custom query is defined). A `v20` `PRIMARY` is compatible with
+The default behavior now is to monitor all metrics, but only use `lag` (if the custom query is undefined) or the `custom`
+metric (if the custom query is defined). This is backwards-compatible with `v20`. A `v20` `PRIMARY` is compatible with
a `v21` `REPLICA`, and a `v21` `PRIMARY` is compatible with a `v20` `REPLICA`.
-However, with `v21` it is possible to assign any combination of metrics (one or more) for a given app. The throttler
-would then accept or reject the app's requests based on the health of _all_ assigned metrics. `v21` comes with a preset
-list metrics, expected to be expanded:
+However, it is now possible to assign any combination of one or more metrics for a given app. The throttler
+would then accept or reject the app's requests based on the health of _all_ assigned metrics. We have provided a pre-defined
+list of metrics:
- `lag`: replication lag based on heartbeat injection.
- `threads_running`: concurrent active threads on the MySQL server.
- `loadavg`: per core load average measured on the tablet instance/pod.
- `custom`: the result of a custom query executed on the MySQL server.
-Each metric has a factory threshold which can be overridden by the `UpdateThrottlerConfig` command.
+Each metric has a default threshold which can be overridden by the `UpdateThrottlerConfig` command.
-The throttler also supports the catch-all `"all"` app name, and it is thus possible to assign metrics to _all_ apps.
+The throttler also supports the catch-all `"all"` app name, and it is thus possible to assign metrics to **all** apps.
Explicit app to metric assignments will override the catch-all configuration.
-Metrics are assigned a default _scope_, which could be `self` (isolated to the tablet) or `shard` (max, aka _worst_
+Metrics are assigned a default _scope_, which could be `self` (isolated to the tablet) or `shard` (max, aka **worst**
value among shard tablets). It is further possible to require a different scope for each metric.
-### Allow Cross Cell Promotion in PRS
+### Allow Cross Cell Promotion in PRS
-Up until now if the users wanted to promote a replica in a different cell than the current primary
+Up until now if the users wanted to promote a replica in a different cell from the current primary
using `PlannedReparentShard`, they had to specify the new primary with the `--new-primary` flag.
We have now added a new flag `--allow-cross-cell-promotion` that lets `PlannedReparentShard` choose a primary in a
different cell even if no new primary is provided explicitly.
-### Experimental support for recursive CTEs
+### Experimental support for recursive CTEs
We have added experimental support for recursive CTEs in Vitess. We are marking it as experimental because it is not yet
fully tested and may have some limitations. We are looking for feedback from the community to improve this feature.
-### VTGate Tablet Balancer
+### VTGate Tablet Balancer
When a VTGate routes a query and has multiple available tablets for a given shard / tablet type (e.g. REPLICA), the
current default behavior routes the query with local cell affinity and round robin policy. The VTGate Tablet Balancer
@@ -137,72 +168,94 @@ preferentially routing to tablets in the same cell as the VTGate.
The tablet balancer is enabled by a new flag `--enable-balancer` and configured by `--balancer-vtgate-cells`
and `--balancer-keyspaces`.
-See [RFC for details](https://github.com/vitessio/vitess/issues/12241).
+See the [RFC ](https://github.com/vitessio/vitess/issues/12241) for more details on the design and configuration of this feature.
-### Query Timeout Override
+### Query Timeout Override
VTGate sends an authoritative query timeout to VTTablet when the `QUERY_TIMEOUT_MS` comment directive,
`query_timeout` session system variable, or `query-timeout` flag is set.
-The order of precedence is: `QUERY_TIMEOUT_MS` > `query_timeout` > `query-timeout`.
+The order of precedence is: comment directive > session variable > VTGate flag.
VTTablet overrides its default query timeout with the value received from VTGate.
All timeouts are specified in milliseconds.
-When a query is executed inside a transaction, this behavior does not apply; instead,
-the smaller of the transaction timeout or the query timeout from VTGate is used.
+When a query is executed inside a transaction, there is an additional nuance. The actual timeout used will be the smaller
+of the transaction timeout and the query timeout.
A query can also be set to have no timeout by using the `QUERY_TIMEOUT_MS` comment directive with a value of `0`.
Example usage:
`select /*vt+ QUERY_TIMEOUT_MS=30 */ col from tbl`
-### New Backup Engine (EXPERIMENTAL)
+### New Backup Engine (EXPERIMENTAL)
-We are introducing a backup engine supporting logical backups starting on v21 to support use cases that require something else besides physical backups. This is experimental and is based on the
-[MySQL Shell](https://dev.mysql.com/doc/mysql-shell/8.0/en/).
+We are introducing a new backup engine for logical backups in order to support use cases that require something other
+than physical backups. This feature is experimental and is based on [MySQL Shell](https://dev.mysql.com/doc/mysql-shell/8.0/en/).
-The new engine is enabled by using `--backup_engine_implementation=mysqlshell`. There are other options that are required, so [check the docs](https://vitess.io/docs/21.0/user-guides/operating-vitess/backup-and-restore/creating-a-backup/) on which options are required and how to use it.
+The new engine is enabled by using `--backup_engine_implementation=mysqlshell`. There are other options that are required,
+so please read the [documentation](https://vitess.io/docs/21.0/user-guides/operating-vitess/backup-and-restore/creating-a-backup/) to learn which options are required and how to configure them.
-### Dynamic VReplication Configuration
+### Dynamic VReplication Configuration
-Currently many of the configuration options for VReplication Workflows are vttablet flags. This means that any change
-requires restarts of vttablets. We now allow these to be overridden while creating a workflow or dynamically once
-the workflow is in progress. See https://github.com/vitessio/vitess/pull/16583 for details.
+Previously, many of the configuration options for VReplication Workflows had to be provided using VTTablet flags. This
+meant that any change to VReplication configuration required restarting VTTablets. We now allow these to be overridden
+while creating a workflow or dynamically after the workflow is already in progress.
-### Reference Table Materialization
+### Reference Table Materialization
-There is a new option in [`Materialize` workflows](https://vitess.io/docs/reference/vreplication/materialize/) to keep
-a synced copy of [reference or lookup tables](https://vitess.io/docs/reference/vreplication/reference_tables/)
-(countries, states, zip_codes, etc) from an unsharded keyspace, which holds the source of truth for the reference
+There is a new option in [`Materialize` workflows](https://vitess.io/docs/reference/vreplication/materialize/) to keep a synced copy of [reference or lookup tables](https://vitess.io/docs/reference/vreplication/reference_tables/)
+(countries, states, zip codes, etc) from an unsharded keyspace, which holds the source of truth for the reference
table, to all shards in a sharded keyspace.
-### New VEXPLAIN Modes: TRACE and KEYS
+
+### New VEXPLAIN Modes: TRACE and KEYS
#### VEXPLAIN TRACE
-The new TRACE mode for VEXPLAIN provides a detailed execution trace of queries, showing how they're processed through various operators and interactions with tablets. This mode is particularly useful for:
+The new `TRACE` mode for `VEXPLAIN` provides a detailed execution trace of queries, showing how they're processed through various
+operators and interactions with tablets. This mode is particularly useful for:
- Identifying performance bottlenecks
- Understanding query execution patterns
- Optimizing complex queries
- Debugging unexpected query behavior
-TRACE mode runs the query and logs all interactions, returning a JSON representation of the query execution plan with additional statistics like number of calls, average rows processed, and number of shards queried.
+`TRACE` mode runs the query and logs all interactions, returning a JSON representation of the query execution plan with additional
+statistics like number of calls, average rows processed, and number of shards queried.
#### VEXPLAIN KEYS
-The KEYS mode for VEXPLAIN offers a concise summary of query structure, highlighting columns used in joins, filters, and grouping operations. This information is crucial for:
+The `KEYS` mode for `VEXPLAIN` offers a concise summary of query structure, highlighting columns used in joins, filters, and
+grouping operations. This information is crucial for:
- Identifying potential sharding key candidates
- Optimizing query performance
- Analyzing query patterns to inform database design decisions
-KEYS mode analyzes the query structure without executing it, providing JSON output that includes grouping columns, join columns, filter columns (potential candidates for indexes, primary keys, or sharding keys), and the statement type.
+`KEYS` mode analyzes the query structure without executing it, providing JSON output that includes grouping columns, join columns,
+filter columns (potential candidates for indexes, primary keys, or sharding keys), and the statement type.
+
+These new `VEXPLAIN` modes enhance Vitess's query analysis capabilities, allowing for more informed decisions about sharding
+strategies and query optimization.
+
+### Automatically Replace MySQL auto_increment Clauses with Vitess Sequences
+
+In https://github.com/vitessio/vitess/pull/16860 we added support for replacing MySQL `auto_increment` clauses with [Vitess Sequences](https://vitess.io/docs/reference/features/vitess-sequences/), performing all of the setup and initialization
+work automatically during the [`MoveTables`](https://vitess.io/docs/reference/vreplication/movetables/) workflow. As part of that work we have deprecated the
+[`--remove-sharded-auto-increment` boolean flag](https://vitess.io/docs/20.0/reference/programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_create/) and you should begin using the new
+[`--sharded-auto-increment-handling` flag](https://vitess.io/docs/21.0/reference/programs/vtctldclient/vtctldclient_movetables/vtctldclient_movetables_create/) instead. Please see the new
+[`MoveTables` Auto Increment Handling](https://vitess.io/docs/21.0/reference/vreplication/movetables/#auto-increment-handling) documentation for additional details.
+
+### Experimental MySQL 8.4 support
+
+We have added experimental support for MySQL 8.4. It passes the Vitess test suite, but it is otherwise not yet tested. We are looking for feedback from the community to improve this to move support out of the experimental phase in a future release.
+
+### Current Errant GTIDs Count Metric
+A new metric called `CurrentErrantGTIDCount` has been added to the `VTOrc` component.
+This metric shows the current count of the errant GTIDs in the tablets.
-These new VEXPLAIN modes enhance Vitess's query analysis capabilities, allowing for more informed decisions about sharding strategies and query optimization.
+### `vtctldclient ChangeTabletTags` command
-### Errant GTID Detection on Vttablets
+The `vtctldclient` command `ChangeTabletTags` was added to allow the tags of a tablet to be changed dynamically.
-Vttablets now run an errant GTID detection logic before they join the replication stream. So, if a replica has an errant GTID, it will
-not start replicating from the primary. It will fail the call the set its replication source because of the errant GTID. This prevents us
-from running into situations from which recovery is very hard.
+### Support specifying expected primary in reparents
-For users running with the vitess operator on kubernetes, this change means that the replicas with errant GTIDs will have broken replication and will report as unready. The users will need to manually clean up these errant replica tablets.
+The `EmergencyReparentShard` and `PlannedReparentShard` commands and RPCs now support specifying a primary we expect to still be the current primary in order for a reparent operation to be processed. This allows reparents to be conditional on a specific state being true.
diff --git a/changelog/21.0/21.0.1/changelog.md b/changelog/21.0/21.0.1/changelog.md
new file mode 100644
index 00000000000..1410591c3d5
--- /dev/null
+++ b/changelog/21.0/21.0.1/changelog.md
@@ -0,0 +1,57 @@
+# Changelog of Vitess v21.0.1
+
+### Bug fixes
+#### Backup and Restore
+ * [release-21.0] Fix how we cancel the context in the builtin backup engine (#17285) [#17291](https://github.com/vitessio/vitess/pull/17291)
+ * [release-21.0] S3: optional endpoint resolver and correct retrier [#17307](https://github.com/vitessio/vitess/pull/17307)
+#### Cluster management
+ * [release-21.0] Fix panic in vttablet when closing topo server twice (#17094) [#17122](https://github.com/vitessio/vitess/pull/17122)
+#### Online DDL
+ * [release-21.0] Online DDL: fix defer function, potential connection pool exhaustion (#17207) [#17210](https://github.com/vitessio/vitess/pull/17210)
+#### Query Serving
+ * [release-21.0] bugfix: treat EXPLAIN like SELECT (#17054) [#17058](https://github.com/vitessio/vitess/pull/17058)
+ * [release-21.0] Delegate Column Availability Checks to MySQL for Single-Route Queries (#17077) [#17087](https://github.com/vitessio/vitess/pull/17087)
+ * [release-21.0] bugfix: Handle CTEs with columns named in the CTE def (#17179) [#17181](https://github.com/vitessio/vitess/pull/17181)
+ * [release-21.0] Use proper keyspace when updating the query graph of a reference DML (#17226) [#17258](https://github.com/vitessio/vitess/pull/17258)
+#### Topology
+ * [release-21.0] Close zookeeper topo connection on disconnect (#17136) [#17193](https://github.com/vitessio/vitess/pull/17193)
+#### VReplication
+ * [release-21.0] VReplication: Qualify and SQL escape tables in created AutoIncrement VSchema definitions (#17174) [#17176](https://github.com/vitessio/vitess/pull/17176)
+#### VTTablet
+ * [release-21.0] Fix deadlock in messager and health streamer (#17230) [#17235](https://github.com/vitessio/vitess/pull/17235)
+ * [release-21.0] Fix potential deadlock in health streamer (#17261) [#17270](https://github.com/vitessio/vitess/pull/17270)
+### CI/Build
+#### Build/CI
+ * [release-21.0] Specify Ubuntu 24.04 for all jobs (#17278) [#17282](https://github.com/vitessio/vitess/pull/17282)
+#### Cluster management
+ * [release-21.0] Fix flakiness in `TestListenerShutdown` (#17024) [#17189](https://github.com/vitessio/vitess/pull/17189)
+#### General
+ * [release-21.0] Upgrade the Golang version to `go1.23.3` [#17211](https://github.com/vitessio/vitess/pull/17211)
+### Dependencies
+#### Java
+ * [release-21.0] java package updates for grpc and protobuf and release plugins (#17100) [#17105](https://github.com/vitessio/vitess/pull/17105)
+### Documentation
+#### Documentation
+ * [Direct PR][release-21.0] Add RPC changes segment in the summary doc [#17034](https://github.com/vitessio/vitess/pull/17034)
+### Enhancement
+#### Online DDL
+ * [release-21.0] Improve Schema Engine's TablesWithSize80 query (#17066) [#17091](https://github.com/vitessio/vitess/pull/17091)
+#### Query Serving
+ * [release-21.0] Fix to prevent stopping buffering prematurely (#17013) [#17205](https://github.com/vitessio/vitess/pull/17205)
+#### VReplication
+ * [release-21.0] Binlog: Improve ZstdInMemoryDecompressorMaxSize management (#17220) [#17241](https://github.com/vitessio/vitess/pull/17241)
+### Internal Cleanup
+#### Build/CI
+ * [release-21.0] Change the name of the vitess-tester repository (#16917) [#17030](https://github.com/vitessio/vitess/pull/17030)
+### Regression
+#### Backup and Restore
+ * [release-21.0] Fix unreachable errors when taking a backup (#17062) [#17112](https://github.com/vitessio/vitess/pull/17112)
+### Release
+#### General
+ * [release-21.0] Bump to `v21.0.1-SNAPSHOT` after the `v21.0.0` release [#17098](https://github.com/vitessio/vitess/pull/17098)
+### Testing
+#### Build/CI
+ * [release-21.0] Flakes: Address flakiness in TestZkConnClosedOnDisconnect (#17194) [#17197](https://github.com/vitessio/vitess/pull/17197)
+#### Query Serving
+ * [release-21.0] fix: flaky test on twopc transaction (#17068) [#17070](https://github.com/vitessio/vitess/pull/17070)
+
diff --git a/changelog/21.0/21.0.1/release_notes.md b/changelog/21.0/21.0.1/release_notes.md
new file mode 100644
index 00000000000..e42d16379a6
--- /dev/null
+++ b/changelog/21.0/21.0.1/release_notes.md
@@ -0,0 +1,7 @@
+# Release of Vitess v21.0.1
+The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/21.0/21.0.1/changelog.md).
+
+The release includes 25 merged Pull Requests.
+
+Thanks to all our contributors: @GuptaManan100, @app/vitess-bot, @frouioui, @vitess-bot
+
diff --git a/changelog/21.0/README.md b/changelog/21.0/README.md
index bade1b597f8..f3a98feb55a 100644
--- a/changelog/21.0/README.md
+++ b/changelog/21.0/README.md
@@ -1,2 +1,8 @@
## v21.0
+* **[21.0.1](21.0.1)**
+ * [Changelog](21.0.1/changelog.md)
+ * [Release Notes](21.0.1/release_notes.md)
+
* **[21.0.0](21.0.0)**
+ * [Changelog](21.0.0/changelog.md)
+ * [Release Notes](21.0.0/release_notes.md)
diff --git a/changelog/22.0/22.0.0/changelog.md b/changelog/22.0/22.0.0/changelog.md
new file mode 100644
index 00000000000..03f2f714b7f
--- /dev/null
+++ b/changelog/22.0/22.0.0/changelog.md
@@ -0,0 +1,5 @@
+# Changelog of Vitess v22.0.0
+
+### Enhancement
+#### Cluster management
+ * Prefer not promoting replicas that are taking backups [#16997](https://github.com/vitessio/vitess/pull/16997)
diff --git a/changelog/22.0/22.0.0/summary.md b/changelog/22.0/22.0.0/summary.md
new file mode 100644
index 00000000000..cb8372cd60e
--- /dev/null
+++ b/changelog/22.0/22.0.0/summary.md
@@ -0,0 +1,75 @@
+## Summary
+
+### Table of Contents
+
+- **[Major Changes](#major-changes)**
+ - **[Deprecations and Deletions](#deprecations-and-deletions)**
+ - [Deprecated VTTablet Flags](#vttablet-flags)
+ - **[RPC Changes](#rpc-changes)**
+ - **[Prefer not promoting a replica that is currently taking a backup](#reparents-prefer-not-backing-up)**
+ - **[VTOrc Config File Changes](#vtorc-config-file-changes)**
+- **[Minor Changes](#minor-changes)**
+ - **[VTTablet Flags](#flags-vttablet)**
+ - **[Topology read concurrency behaviour changes](#topo-read-concurrency-changes)**
+
+## Major Changes
+
+### RPC Changes
+
+These are the RPC changes made in this release -
+
+1. `GetTransactionInfo` RPC has been added to both `VtctldServer`, and `TabletManagerClient` interface. These RPCs are used to fecilitate the users in reading the state of an unresolved distributed transaction. This can be useful in debugging what went wrong and how to fix the problem.
+
+### Deprecations and Deletions
+
+#### Deprecated VTTablet Flags
+
+- `twopc_enable` flag is deprecated. Usage of TwoPC commit will be determined by the `transaction_mode` set on VTGate via flag or session variable.
+
+### Prefer not promoting a replica that is currently taking a backup
+
+Emergency reparents now prefer not promoting replicas that are currently taking backups with a backup engine other than
+`builtin`. Note that if there's only one suitable replica to promote, and it is taking a backup, it will still be
+promoted.
+
+For planned reparents, hosts taking backups with a backup engine other than `builtin` are filtered out of the list of
+valid candidates. This means they will never get promoted - not even if there's no other candidates.
+
+Note that behavior for `builtin` backups remains unchanged: a replica that is currently taking a `builtin` backup will
+never be promoted, neither by planned nor by emergency reparents.
+
+### VTOrc Config File Changes
+
+The configuration file for VTOrc has been updated to now support dynamic fields. The old `--config` parameter has been removed. The alternative is to use the `--config-file` parameter. The configuration can now be provided in json, yaml or any other format that [viper](https://github.com/spf13/viper) supports.
+
+The following fields can be dynamically changed -
+1. `instance-poll-time`
+2. `prevent-cross-cell-failover`
+3. `snapshot-topology-interval`
+4. `reasonable-replication-lag`
+5. `audit-to-backend`
+6. `audit-to-syslog`
+7. `audit-purge-duration`
+8. `wait-replicas-timeout`
+9. `tolerable-replication-lag`
+10. `topo-information-refresh-duration`
+11. `recovery-poll-duration`
+12. `allow-emergency-reparent`
+13. `change-tablets-with-errant-gtid-to-drained`
+
+To upgrade to the newer version of the configuration file, first switch to using the flags in your current deployment before upgrading. Then you can switch to using the configuration file in the newer release.
+
+
+## Minor Changes
+
+#### VTTablet Flags
+
+- `twopc_abandon_age` flag now supports values in the time.Duration format (e.g., 1s, 2m, 1h).
+While the flag will continue to accept float values (interpreted as seconds) for backward compatibility,
+**float inputs are deprecated** and will be removed in a future release.
+
+### `--topo_read_concurrency` behaviour changes
+
+The `--topo_read_concurrency` flag was added to all components that access the topology and the provided limit is now applied separately for each global or local cell _(default `32`)_.
+
+All topology read calls _(`Get`, `GetVersion`, `List` and `ListDir`)_ now respect this per-cell limit. Previous to this version a single limit was applied to all cell calls and it was not respected by many topology calls.
diff --git a/changelog/22.0/README.md b/changelog/22.0/README.md
new file mode 100644
index 00000000000..755f7e29563
--- /dev/null
+++ b/changelog/22.0/README.md
@@ -0,0 +1,3 @@
+## v22.0
+* **[22.0.0](22.0.0)**
+ * [Changelog](22.0.0/changelog.md)
diff --git a/changelog/README.md b/changelog/README.md
index 9feda6440c6..7cade673d26 100644
--- a/changelog/README.md
+++ b/changelog/README.md
@@ -1,4 +1,5 @@
## Releases
+* [22.0](22.0)
* [21.0](21.0)
* [20.0](20.0)
* [19.0](19.0)
diff --git a/config/mycnf/default.cnf b/config/mycnf/default.cnf
index c17165f9959..25e5398c87a 100644
--- a/config/mycnf/default.cnf
+++ b/config/mycnf/default.cnf
@@ -16,10 +16,6 @@ secure-file-priv = {{.SecureFilePriv}}
server-id = {{.ServerID}}
-# all db instances should skip starting replication threads - that way we can do any
-# additional configuration (like enabling semi-sync) before we connect to
-# the source.
-skip_slave_start
socket = {{.SocketFile}}
tmpdir = {{.TmpDir}}
diff --git a/config/mycnf/mariadb10.cnf b/config/mycnf/mariadb10.cnf
index 120bd7b7d00..fb0becb7dcd 100644
--- a/config/mycnf/mariadb10.cnf
+++ b/config/mycnf/mariadb10.cnf
@@ -1,5 +1,10 @@
# This file is auto-included when MariaDB 10 is detected.
+# all db instances should skip starting replication threads - that way we can do any
+# additional configuration (like enabling semi-sync) before we connect to
+# the source.
+skip_slave_start
+
# Semi-sync replication is required for automated unplanned failover
# (when the primary goes away). Here we just load the plugin so it's
# available if desired, but it's disabled at startup.
diff --git a/config/mycnf/mysql57.cnf b/config/mycnf/mysql57.cnf
index 44c462749a7..485904bb2bd 100644
--- a/config/mycnf/mysql57.cnf
+++ b/config/mycnf/mysql57.cnf
@@ -1,5 +1,10 @@
# This file is auto-included when MySQL 5.7 is detected.
+# all db instances should skip starting replication threads - that way we can do any
+# additional configuration (like enabling semi-sync) before we connect to
+# the source.
+skip_slave_start
+
# MySQL 5.7 does not enable the binary log by default, and
# info repositories default to file
diff --git a/config/mycnf/mysql80.cnf b/config/mycnf/mysql80.cnf
index 13447a7de0a..3f4297ba400 100644
--- a/config/mycnf/mysql80.cnf
+++ b/config/mycnf/mysql80.cnf
@@ -1,5 +1,10 @@
# This file is auto-included when MySQL 8.0 is detected.
+# all db instances should skip starting replication threads - that way we can do any
+# additional configuration (like enabling semi-sync) before we connect to
+# the source.
+skip_slave_start
+
# MySQL 8.0 enables binlog by default with sync_binlog and TABLE info repositories
# It does not enable GTIDs or enforced GTID consistency
diff --git a/config/mycnf/mysql8026.cnf b/config/mycnf/mysql8026.cnf
index c7755be488f..df63a589918 100644
--- a/config/mycnf/mysql8026.cnf
+++ b/config/mycnf/mysql8026.cnf
@@ -1,5 +1,10 @@
# This file is auto-included when MySQL 8.0.26 or later is detected.
+# all db instances should skip starting replication threads - that way we can do any
+# additional configuration (like enabling semi-sync) before we connect to
+# the source.
+skip_replica_start
+
# MySQL 8.0 enables binlog by default with sync_binlog and TABLE info repositories
# It does not enable GTIDs or enforced GTID consistency
diff --git a/config/mycnf/mysql84.cnf b/config/mycnf/mysql84.cnf
index 93e4bd571e1..e75c885af39 100644
--- a/config/mycnf/mysql84.cnf
+++ b/config/mycnf/mysql84.cnf
@@ -1,5 +1,10 @@
# This file is auto-included when MySQL 8.4.0 or later is detected.
+# all db instances should skip starting replication threads - that way we can do any
+# additional configuration (like enabling semi-sync) before we connect to
+# the source.
+skip_replica_start
+
# MySQL 8.0 enables binlog by default with sync_binlog and TABLE info repositories
# It does not enable GTIDs or enforced GTID consistency
diff --git a/config/mycnf/sbr.cnf b/config/mycnf/sbr.cnf
deleted file mode 100644
index 5808e0430f3..00000000000
--- a/config/mycnf/sbr.cnf
+++ /dev/null
@@ -1,3 +0,0 @@
-# This file is used to allow legacy tests to pass
-# In theory it should not be required
-binlog_format=statement
diff --git a/config/vtorc/default.json b/config/vtorc/default.json
index 8fc7ab3747d..0a234473d32 100644
--- a/config/vtorc/default.json
+++ b/config/vtorc/default.json
@@ -1,8 +1,4 @@
{
"Debug": true,
- "MySQLTopologyUser": "orc_client_user",
- "MySQLTopologyPassword": "orc_client_user_password",
- "MySQLReplicaUser": "vt_repl",
- "MySQLReplicaPassword": "",
"RecoveryPeriodBlockSeconds": 5
}
diff --git a/doc/design-docs/AtomicDistributedTransaction.md b/doc/design-docs/AtomicDistributedTransaction.md
new file mode 100644
index 00000000000..ea5ea358d72
--- /dev/null
+++ b/doc/design-docs/AtomicDistributedTransaction.md
@@ -0,0 +1,736 @@
+# Design Document: Atomic Distributed Transaction
+
+# Objective
+
+Provide a mechanism to support atomic commits for distributed transactions across multiple Vitess databases. Transactions should either complete successfully or rollback completely.
+
+# Background
+
+Vitess distributed transactions have so far been Best Effort Commit (BEC). An application is allowed to send DMLs that go to different shards or keyspaces in a single transaction. When a commit is issued, Vitess tries to individually commit each db transaction that was initiated. However, if a database goes down in the middle of a commit, that part of the transaction is lost. Moreover, with the support of lookup vindexes, VTGates could themselves open distributed transactions from single statements issued by the app.
+
+Two Phase Commit (2PC) is the de facto protocol for atomically committing distributed transactions. Unfortunately, this has been considered impractical, and has predominantly failed in the industry. There are a few reasons:
+
+* A database that goes down in the middle of a 2PC commit would hold transactions in other databases hostage till it was recovered. This is now a solved problem due to replication and fast failovers.
+* The ACID requirements of relational databases were too demanding and contentious for a pure implementation to practically scale.
+* The industry standard distributed transaction protocol (XA) overreached on flexibility and became too chatty.
+* Subpar schemes for transaction management: Some added too much additional overhead, and some paid lip service and defeated the reliability of 2PC.
+
+This document intends to address the above concerns with some practical trade-offs.
+
+Although MySQL supports the XA protocol, it’s been unusable due to bugs. There have been multiple fixes made on 8.0, but still there are many open bugs. Also, it's usage in production is hardly known.
+
+The most critical component of the 2PC protocol is the `Prepare` functionality. There is actually a way to implement Prepare on top of a transactional system. This is explained in a [Vitess Blog](https://vitess.io/blog/2016-06-07-distributed-transactions-in-vitess/), which will be used as foundation for this design.
+
+Familiarity with the blog and the [2PC algorithm](http://c2.com/cgi/wiki?TwoPhaseCommit) are required to understand the rest of the document.
+
+# Overview
+
+Vitess will add a few variations to the traditional 2PC algorithm:
+
+* There is a presumption that the Resource Managers (aka participants) must know upfront that they are involved in a 2PC transaction. Many APIs force the application to make this choice at the beginning of a transaction, but this is not actually required. In the case of Vitess, a distributed transaction will start off as usual, with a normal Begin. It will be converted only if the application requests a 2PC commit. This approach allows optimization of some common use cases.
+* The 2PC algorithm does not specify how the Transaction Manager maintains the metadata. If you work through all the failure modes, it becomes evident that the manager must also be a highly available (HA) transactional system that survives failures without data loss. Since the VTTablets are already built to be HA, there’s no reason to build yet another system. So, we will split the role of the Transaction Manager into two:
+ - The Coordinator will be stateless and will orchestrate the work. VTGates are the perfect fit for this role.
+ - One of the VTTablets will be designated as the Metadata Manager (MM). It will store the metadata and perform the necessary state transitions.
+* If we designate one of the participant VTTablets to be the MM, that database can avoid the prepare phase. If you assume there are N participants, the typical process is to perform prepares from 1 to N, followed by commits from 1 to N. Instead, we could go from 1->N for prepare, and N->1 for commit. Then, the Nth database would perform a Prepare->Decide to Commit->Commit. Instead, we execute the DML needed to transition the metadata state to "Decide to Commit" as part of the app transaction and commit it. If the commit fails, it is treated as the prepare having failed. If the commit succeeds, it is treated as all three operations having succeeded.
+* The Prepare functionality will be implemented as explained in the [blog](https://vitess.io/blog/2016-06-07-distributed-transactions-in-vitess/).
+
+Combining the above changes allows us to keep the most common use case efficient. A transaction that affects only one database incurs no additional cost due to 2PC.
+
+In the case of multi-database transactions, we can choose the participant with the highest number of statements to be the MM. That database will not incur the cost of going through the Prepare phase, and we also avoid requiring a separate transaction to persist the commit decision.
+
+## ACID trade-offs
+
+The core 2PC algorithm only guarantees Atomicity: either the entire transaction commits, or it’s rolled back completely.
+
+Consistency is an orthogonal property because it primarily ensures that the values in the database do not violate relational rules.
+
+Durability is guaranteed by each database, and the collective durability is inherited by the 2PC process.
+
+Isolation requires additional work. If a client tries to read data in the middle of a distributed commit, it could see partial commits. To prevent this, databases place read locks on rows involved in a 2PC. Consequently, anyone attempting to read them must wait until the transaction is resolved. This type of locking is so contentious that it often defeats the purpose of distributing the data.
+
+In reality, this level of Isolation guarantee is overkill for most application code paths. Therefore, it is more practical to relax this for the sake of scalability and allow the application to use explicit locks where it deems better Isolation is required.
+
+On the other hand, Atomicity is critical. Non-atomic transactions can result in partial commits, effectively corrupting the data. As mentioned earlier, Atomicity is guaranteed by 2PC.
+
+# Life of a 2PC transaction
+
+* The application issues a Begin to VTGate. At this time, the session is updated to indicate that it’s in a transaction.
+* The application sends DMLs to VTGate. As these DMLs are received, VTGate starts transactions against various VTTablets. The transaction id for each VTTablet (VTID) is stored in the session.
+* The application requests a 2PC commit. Until this point, there is no difference between a BEC and a 2PC. In the case of BEC, VTGate just sends the commit to all participating VTTablets. For 2PC, VTGate initiates and executes the workflow described in the subsequent steps.
+
+## Prepare
+
+* Generate a Distributed Transaction Identifier (DTID).
+* The VTTablet at the first position in the session transaction list is singled out as the MM. To this VTTablet, issue a CreateTransaction command with the DTID. This information will be monitored by the transaction resolution watcher.
+* Issue a Prepare to all other VTTablets. Send the DTID as part of the prepare request.
+
+## Commit
+
+* Execute the 3-in-1 action of Prepare->Decide->Commit (StartCommit) for the MM VTTablet. This will change the metadata state to ‘Commit’.
+* Issue a CommitPrepared commands to all the prepared VTTablets using the DTID.
+* Delete the transaction in the MM with ConcludeTransaction.
+
+## Rollback
+
+Any form of failure until the point of saving the commit decision will result in a decision to rollback.
+
+* Transition the metadata state to ‘Rollback’.
+* Issue RollbackPrepared commands to the prepared transactions using the DTID.
+* If the original VTGate is still orchestrating, rollback the unprepared transactions using their VTIDs. Otherwise, any unprepared transactions will be rolled back by the transaction killer.
+* Delete the transaction in the MM with ConcludeTransaction.
+
+## Transaction Resolution Watcher
+
+A Transaction Resolution watcher will kick in if a transaction remains unresolved for too long in the MM. If such a transaction is found, it will be in one of three states:
+
+1. Prepare
+2. Rollback
+3. Commit
+
+For #1 and #2, the Rollback workflow is initiated. For #3, the commit workflow is resumed.
+
+The following diagrams illustrates the life-cycle of a 2PC transaction in Metadata Manager (MM) and Resource Manager (RM).
+
+```mermaid
+---
+title: State Changes for Transaction Record in MM
+---
+stateDiagram-v2
+ classDef action font-style:italic,font-weight:bold,fill:white
+ state "Prepare" as p
+ state "Commit" as c
+ state "Rollback" as r
+
+ [*] --> p: Start Transaction
+ p --> c: Prepare Success
+ p --> r: Prepare Failed
+ c --> [*]: Conclude Transaction
+ r --> [*]: Conclude Transaction
+```
+
+```mermaid
+---
+title: State Changes for Redo Record in RM
+---
+stateDiagram-v2
+ classDef action font-style:italic,font-weight:bold,fill:white
+ state "Redo Prepared Logs" as rpl
+ state "Delete Redo Logs" as drl
+ state "Check Type of Failure" as ctf
+
+ state "Prepared" as p
+ state "Failure" as f
+ state commitRPC <>
+ state failureType <>
+ state redoSuccess <>
+
+ [*] --> p: Commit redo logs Prepare Call Succeeds
+ drl --> [*]
+ p --> drl:::action: Receive Rollback Rollback transaction
+ p --> commitRPC: Receive CommitRPC
+ commitRPC --> drl: If commit succeeds
+ ctf --> failureType
+ commitRPC --> ctf:::action: If commit fails
+ failureType --> f: Unretriable failure Wait for user intervention
+ f --> drl: User calls ConcludeTransaction
+ failureType --> rpl:::action: Failure because of MySQL restart
+ rpl --> redoSuccess: Check if redo prepare fails
+ redoSuccess --> p: Redo prepare succeeds
+ redoSuccess --> ctf: Redo prepare fails
+```
+
+A transaction generally begins as a single DB transaction, and a 2PC commit on a single DB transaction is treated as a normal commit. A transaction becomes a distributed transaction as soon as more than one VTTablet is involved. If an app issues a rollback, all participants are simply rolled back.
+A 2PC commit on a distributed transaction initiates the new commit flow. The transaction record is stored in the 'Prepare' state and remains so while Prepares are issued to the RMs.
+If the Prepares are successful, the state transitions to 'Commit'. In the Commit state, only commits are allowed. By the guarantee provided by the Prepare contract, all databases will eventually accept the commits.
+Any failure during the Prepare state results in the state transitioning to 'Rollback'. In this state, only rollbacks are allowed.
+# Component interactions
+
+Any error in the commit phase is indicated to the application with a warning flag. If an application's transaction receives a warning signal, it can execute a `show warnings` to know the distributed transaction ID for that transaction. It can watch the transaction status with `show transaction status for `.
+
+Case 1: All components respond with success.
+```mermaid
+sequenceDiagram
+ participant App as App
+ participant G as VTGate
+ participant MM as VTTablet/MM
+ participant RM1 as VTTablet/RM1
+ participant RM2 as VTTablet/RM2
+
+ App ->>+ G: Commit
+ G ->> MM: Create Transaction Record
+ MM -->> G: Success
+ par
+ G ->> RM1: Prepare Transaction
+ G ->> RM2: Prepare Transaction
+ RM1 -->> G: Success
+ RM2 -->> G: Success
+ end
+ G ->> MM: Store Commit Decision
+ MM -->> G: Success
+ par
+ G ->> RM1: Commit Prepared Transaction
+ G ->> RM2: Commit Prepared Transaction
+ RM1 -->> G: Success
+ RM2 -->> G: Success
+ end
+ opt Any failure here does not impact the reponse to the application
+ G ->> MM: Delete Transaction Record
+ end
+ G ->>- App: OK Packet
+```
+
+Case 2: When the Commit Prepared Transaction from the RM responds with an error. In this case, the watcher service needs to resolve the transaction and commit the pending prepared transactions.
+```mermaid
+sequenceDiagram
+ participant App as App
+ participant G as VTGate
+ participant MM as VTTablet/MM
+ participant RM1 as VTTablet/RM1
+ participant RM2 as VTTablet/RM2
+
+ App ->>+ G: Commit
+ G ->> MM: Create Transaction Record
+ MM -->> G: Success
+ par
+ G ->> RM1: Prepare Transaction
+ G ->> RM2: Prepare Transaction
+ RM1 -->> G: Success
+ RM2 -->> G: Success
+ end
+ G ->> MM: Store Commit Decision
+ MM -->> G: Success
+ par
+ G ->> RM1: Commit Prepared Transaction
+ G ->> RM2: Commit Prepared Transaction
+ RM1 -->> G: Success
+ RM2 -->> G: Failure
+ end
+ G ->>- App: Err Packet
+```
+
+Case 3: When the Commit Decision from MM responds with an error. In this case, the watcher service needs to resolve the transaction as it is not certain whether the commit decision persisted or not.
+```mermaid
+sequenceDiagram
+ participant App as App
+ participant G as VTGate
+ participant MM as VTTablet/MM
+ participant RM1 as VTTablet/RM1
+ participant RM2 as VTTablet/RM2
+
+ App ->>+ G: Commit
+ G ->> MM: Create Transaction Record
+ MM -->> G: Success
+ par
+ G ->> RM1: Prepare Transaction
+ G ->> RM2: Prepare Transaction
+ RM1 -->> G: Success
+ RM2 -->> G: Success
+ end
+ G ->> MM: Store Commit Decision
+ MM -->> G: Failure
+ G ->>- App: Err Packet
+```
+
+Case 4: When a Prepare Transaction fails. TM will decide to roll back the transaction. If any rollback returns a failure, the watcher service will resolve the transaction.
+```mermaid
+sequenceDiagram
+ participant App as App
+ participant G as VTGate
+ participant MM as VTTablet/MM
+ participant RM1 as VTTablet/RM1
+ participant RM2 as VTTablet/RM2
+
+ App ->>+ G: Commit
+ G ->> MM: Create Transaction Record
+ MM -->> G: Success
+ par
+ G ->> RM1: Prepare Transaction
+ G ->> RM2: Prepare Transaction
+ RM1 -->> G: Failure
+ RM2 -->> G: Success
+ end
+ par
+ G ->> MM: Store Rollback Decision
+ G ->> RM1: Rollback Prepared Transaction
+ G ->> RM2: Rollback Prepared Transaction
+ MM -->> G: Success / Failure
+ RM1 -->> G: Success / Failure
+ RM2 -->> G: Success / Failure
+ end
+ opt Rollback success on MM and RMs
+ G ->> MM: Delete Transaction Record
+ end
+ G ->>- App: Err Packet
+```
+
+Case 5: When Create Transaction Record fails. TM will roll back the transaction.
+```mermaid
+sequenceDiagram
+ participant App as App
+ participant G as VTGate
+ participant MM as VTTablet/MM
+ participant RM1 as VTTablet/RM1
+ participant RM2 as VTTablet/RM2
+
+ App ->>+ G: Commit
+ G ->> MM: Create Transaction Record
+ MM -->> G: Failure
+ par
+ G ->> RM1: Rollback Transaction
+ G ->> RM2: Rollback Transaction
+ RM1 -->> G: Success / Failure
+ RM2 -->> G: Success / Failure
+ end
+ G ->>- App: Err Packet
+```
+
+## Transaction Resolution Watcher
+
+```mermaid
+sequenceDiagram
+ participant G1 as VTGate
+ participant G2 as VTGate
+ participant MM as VTTablet/MM
+ participant RM1 as VTTablet/RM1
+ participant RM2 as VTTablet/RM2
+
+ MM -) G1: Unresolved Transaction
+ MM -) G2: Unresolved Transaction
+ Note over G1,MM: MM sends this over health stream.
+ loop till no more unresolved transactions
+ G1 ->> MM: Provide Transaction details
+ G2 ->> MM: Provide Transaction details
+ MM -->> G2: Distributed Transaction ID details
+ Note over G2,MM: This VTGate recieves the transaction to resolve.
+ end
+ alt Transaction State: Commit
+ G2 ->> RM1: Commit Prepared Transaction
+ G2 ->> RM2: Commit Prepared Transaction
+ else Transaction State: Rollback
+ G2 ->> RM1: Rollback Prepared Transaction
+ G2 ->> RM2: Rollback Prepared Transaction
+ else Transaction State: Prepare
+ G2 ->> MM: Store Rollback Decision
+ MM -->> G2: Success
+ opt Only when Rollback Decision is stored
+ G2 ->> RM1: Rollback Prepared Transaction
+ G2 ->> RM2: Rollback Prepared Transaction
+ end
+ end
+ opt Commit / Rollback success on MM and RMs
+ G2 ->> MM: Delete Transaction Record
+ end
+```
+
+# Detailed Design
+
+The detailed design explains all the functionalities and interactions.
+
+## DTID generation
+
+Currently, transaction ids are issued by VTTablets (VTID), and those ids are considered local.
+In order to coordinate distributed transactions, a new system is needed to identify and track them.
+This is needed mainly so that the watchdog process can pick up an orphaned transaction and resolve it to completion.
+
+The DTID will be generated by taking the VTID of the MM and prefixing it with the keyspace and shard info to prevent collisions.
+If the MM’s VTID is ‘1234’ for keyspace ‘order’ and shard ‘40-80’, then the DTID will be ‘order:40-80:1234’.
+A collision could still happen if there is a failover and the new VTTablet’s starting VTID had overlaps with the previous instance.
+To prevent this, the starting VTID of the VTTablet will be adjusted to a value higher than any used by the prepared DTIDs.
+
+## Prepare API
+
+The Prepare API will be provided by VTTablet, and will follow the guidelines of the [blog](https://vitess.io/blog/2016-06-07-distributed-transactions-in-vitess/).
+It’s essentially three functions: Prepare, CommitPrepared and RollbackPrepared.
+
+### Statement list and state
+
+Every transaction will have to remember its DML statement list. VTTablet already records queries against each transaction (RecordQuery).
+However, it’s currently the original queries of the request. This has to be changed to the DMLs that are sent to the database.
+The current RecordQuery functionality is mainly for troubleshooting and diagnostics. So, it’s not very material if we changed it to record actual DMLs. It would remain equally useful.
+
+### Schema
+
+The tables will be in the sidecar database. All timestamps are represented as unix nanoseconds.
+
+The redo_state table needs to support the following use cases:
+
+* Prepare: Create row.
+* Recover & repair tool: Fetch all transactions: full joined table scan.
+* Resolve: Transition state for a DTID: update where dtid = :dtid and state = :prepared.
+* Watchdog: Count unresolved transactions that are older than X: select where time_created < X.
+* Delete a resolved transaction: delete where dtid = :dtid.
+
+```
+create table redo_state(
+ dtid varbinary(512),
+ state bigint, // state can be 0: Failed, 1: Prepared.
+ time_created bigint,
+ message text, // record any error message.
+ primary key(dtid)
+)
+```
+
+The redo_statement table is a detail of redo_log_transaction table.
+It needs the ability to read the statements of a dtid in the correct order (by id), and the ability to delete all statements for a given dtid.
+
+```
+create table redo_statement(
+ dtid varbinary(512),
+ id bigint,
+ statement mediumblob,
+ primary key(dtid, id)
+)
+```
+
+### Prepare
+
+This function is proposed to take a DTID and a VTID as input.
+
+* The function will retrieve the active transaction connection and move it to the prepared pool. If the prepared pool is full, the transaction will be rolled back, and an error will be returned.
+* Metadata will be saved to the redo logs as a separate transaction. If this step fails, the main transaction will also be rolled back, and an error will be returned.
+
+If VTTablet is being shut down or transitioned to a non-primary, the transaction pool handler will internally, rollback the prepared transactions and return them to the transaction pool.
+The rollback of prepared transactions must happen only after all the open transactions are resolved (rollback or commited).
+If a pending transaction is waiting on a lock held by a prepared transaction, it will eventually time out and get rolled back.
+
+Eventually, a different VTTablet will be transitioned to become the primary. At that point, it will recreate the unresolved transactions from redo logs.
+If the replays fail, we’ll raise an alert and start the query service anyway. Typically, a replay is not expected to fail because VTTablet does not allow writing to the database until the replays are done. Also, no external agent should be allowed to perform writes to MySQL, which is a loosely enforced Vitess requirement. Other vitess processes do write to MySQL directly, but they’re not the kind that interfere with the normal flow of transactions.
+
+VTTablet always execute DMLs with BEGIN-COMMIT. This will ensure that no autocommit statements can slip through if connections are inadvertently closed out of sequence.
+
+### CommitPrepared
+
+This function commits the prepared transaction for the given DTID.
+
+* Extract the transaction from the Prepare pool.
+ * If transaction is in the failed pool, return an error.
+ * If the transaction is not found, return success (it was already resolved).
+* As part of the current transaction, transition the state in redo_log to Committed and commit the transaction.
+ * On failure, log the error message in redo_state and move it to the failed pool for non-retryable error. Subsequent commits will permanently fail.
+* Return the connection to the transaction pool.
+
+### RollbackPrepared
+
+This function rolls back the prepared/un-prepared transaction for the given DTID and VTID.
+
+* Delete the redo log entries for the dtid in a separate transaction.
+* Extract the transaction from the Prepare pool.
+ * If present, rollback and return the connection to the transaction pool.
+* If VTID is provided, rollback the original transaction.
+
+## Metadata Manager API
+
+The MM functionality is provided by VTTablet. This could be implemented as a separate service, but designating one of the
+participants to act as the manager gives us some optimization opportunities.
+The supported functions are CreateTransaction, StartCommit, SetRollback, and ConcludeTransaction.
+
+### Schema
+
+The transaction metadata will consist of two tables. It will need to fulfil the following use cases:
+
+* CreateTransaction: Store transaction record metadata.
+* Transition state: update where dtid = :dtid and state = :prepare.
+* Resolve flow: select dt_state & dt_participant where dtid = :dtid.
+* Transaction Resolver Watcher: full table scan where time_created < X.
+* Delete a resolved transaction: delete where dtid = :dtid.
+
+```
+create table dt_state(
+ dtid varbinary(512),
+ state bigint, // state PREPARE, COMMIT, ROLLBACK
+ time_created bigint,
+ primary key(dtid),
+ key (time_created)
+)
+```
+
+```
+create table dt_participant(
+ dtid varbinary(512),
+ id bigint,
+ keyspace varchar(256),
+ shard varchar(256),
+ primary key (dtid, id)
+)
+```
+
+### CreateTransaction
+
+This function stores the transaction metadata record. The initial state will be `PREPARE`.
+A successful create starts the 2PC process. This will be followed by VTGate issuing prepares to the rest of the participants.
+
+### StartCommit
+
+This function will be called when transaction coordinator have taken a `COMMIT` decision.
+A transaction resolution on recovery cannot will not make a `StartCommit` call. So, we can assume the original transaction VTID for this VTTablet is still active.
+
+* Extract the connection for the given VTID.
+* Update the transaction state from PREPARE to COMMIT as part of the participant’s transaction (VTID).
+* Issue a commit and release the transaction back to transaction pool.
+
+If successful, VTGate will execute the commit decision on rest of the participants.
+If not successful, VTGate at this point will leave the transaction resolution to the watcher.
+
+### SetRollback
+
+This function transitions the state from PREPARE to ROLLBACK using an independent transaction.
+When this function is called, the MM’s transaction (VTID) may still be alive.
+So, it infers the transaction id from the dtid and perform the best effort rollback.
+If the transaction is not found, it’s a no-op.
+
+### ConcludeTransaction
+
+This function removes the transaction metadata record for the given DTID.
+
+### ReadTransaction
+
+This function returns the transaction metadata for the given DTID.
+
+### UnresolvedTransactions
+
+This function returns all unresolved transaction metadata older than certain age either provided in the request or the default set on the VTTablet.
+
+### ReadTwopcInflight
+
+This function returns all transaction metadata and the redo statement log.
+
+## Transaction Coordinator
+
+VTGate is already responsible for Best Effort Commit, aka `transaction_mode=MULTI`, it can naturally be extended to act as the coordinator for 2PC.
+It needs to support commit with `transaction_mode=twopc`.
+
+VTGate also has to listen on the VTTablet health stream to receive unresolved transaction signals and act on them to resolve them.
+
+### Commit(transaction_mode=twopc)
+
+This call is issued on an active transaction, whose Session info is known. The function will perform the workflow described in the life of a transaction:
+
+* Identify a VTTablet as MM, and generate a DTID based on the identity of the MM.
+* CreateTransaction on the MM
+* Prepare on all other participants
+* StartCommit on the MM
+* CommitPrepared on all other participants
+* ResolveTransaction on the MM
+
+Any failure before StartCommit will trigger the rollback workflow:
+
+* SetRollback on the MM
+* RollbackPrepared on all participants for which Prepare was sent
+* Rollback on all other participants
+* ResolveTransaction on the MM
+
+### Unresolved Transaction Signal
+
+This signal is received by VTGate from MM when there are unresolved transactions.
+
+The function starts off with calling UnresolvedTransactions on the VTTablet to read the transaction metadata.
+Based on the state, it performs the following actions:
+
+* Prepare: SetRollback and initiate rollback workflow.
+* Rollback: Initiate rollback workflow.
+* Commit: Initiate commit workflow.
+
+Commit workflow:
+
+* CommitPrepared on all participants.
+* ResolveTransaction on the MM
+
+Rollback workflow:
+
+* RollbackPrepared on all participants.
+* ResolveTransaction on the MM.
+
+## Transaction Resolution Watcher
+
+The stateless VTGates are considered ephemeral and can fail at any time, which means that transactions could be abandoned in the middle of a distributed commit.
+To mitigate this, every primary VTTablet will poll its dt_state table for distributed transactions that are lingering.
+If any such transaction is found, it will signal this to VTGate via health stream to resolve them.
+
+## Client API
+
+The client have to modify the `transaction_mode`.
+Default is `Multi`, they would need to set to `twopc` either as a VTGate flag or on the session with `SET` statement.
+
+# Production support
+
+Beyond the functionality, additional work is needed to make 2PC viable for production.
+The areas of concern are disruptions, monitoring, tooling and configuration.
+
+# Disruptions
+
+The atomic transactions should be resilient to the disruptions. Let us cover the different disruptions that can happen in a running cluster and how atomic transactions are engineered to handle them without breaking the Atomicity guarantee.
+
+### `PlannedReparentShard` and `EmergencyReparentShard`
+
+For both Planned and Emergency reparents, we call `DemotePrimary` on the primary tablet. For Planned reparent, this call has to succeed, while on Emergency reparent, if the primary is unreachable then this call can fail, and we would still proceed further.
+
+As part of the `DemotePrimary` flow, when we transition the tablet to a non-serving state, we wait for all the transactions to have completed (in `TxEngine.shutdownLocked()` we have `te.txPool.WaitForEmpty()`). If the user has specified a shutdown grace-period, then after that much time elapses, we go ahead and forcefully kill all running queries. We then also rollback the prepared transactions. It is crucial that we rollback the prepared transactions only after all other writes have been killed, because when we rollback a prepared transaction, it lets go of the locks it was holding. If there were some other conflicting write in progress that hadn't been killed, then it could potentially go through and cause data corruption since we won't be able to prepare the transaction again. All the code to kill queries can be found in `stateManager.terminateAllQueries()`.
+
+The above outlined steps ensure that we either wait for all prepared transactions to conclude or we rollback them safely so that they can be prepared again on the new primary.
+
+On the new primary, when we call `PromoteReplica`, we redo all the prepared transactions before we allow any new writes to go through. This ensures that the new primary is in the same state as the old primary was before the reparent. The code for redoing the prepared transactions can be found in `TxEngine.RedoPreparedTransactions()`.
+
+If everything goes as described above, there is no reason for redoing of prepared transactions to fail. But in case, something unexpected happens and preparing transactions fails, we still allow the VTTablet to accept new writes because we decided availability of the tablet is more important. We will however, build tooling and metrics for the users to be notified of these failures and let them handle this in the way they see fit.
+
+While Planned reparent is an operation where all the processes are running fine, Emergency reparent is called when something has gone wrong with the cluster. Because we call `DemotePrimary` in parallel with `StopReplicationAndBuildStatusMap`, we can run into a case wherein the primary tries to write something to the binlog after all the replicas have stopped replicating. If we were to run without semi-sync, then the primary could potentially commit a prepared transaction, and return a success to the VTGate trying to commit this transaction. The VTGate can then conclude that the transaction is safe to conclude and remove all the metadata information. However, on the new primary since the transaction commit didn't get replicated, it would re-prepare the transaction and would wait for a coordinator to either commit or rollback it, but that would never happen. Essentially we would have a transaction stuck in prepared state on a shard indefinitely. To avoid this situation, it is essential that we run with semi-sync, because this ensures that any write that is acknowledged as a success to the caller, would necessarily have to be replicated to at least one replica. This ensures that the transaction would also already be committed on the new primary.
+
+### MySQL Restarts
+
+When MySQL restarts, it loses all the ongoing transactions which includes all the prepared transactions. This is because the transaction logs are not persistent across restarts. This is a MySQL limitation and there is no way to get around this. However, at the Vitess level we must ensure that we can commit the prepared transactions even in case of MySQL restarts without any failures.
+
+Vttablet has the code to detect MySQL failures and call `stateManager.checkMySQL()` which transitions the tablet to a NotConnected state. This prevents any writes from going through until the VTTablet has transitioned back to a serving state.
+
+However, we cannot rely on `checkMySQL` to ensure that no conflicting writes go through. This is because the time between MySQL restart and the VTTablet transitioning to a NotConnected state can be large. During this time, the VTTablet would still be accepting writes and some of them could potentially conflict with the prepared transactions.
+
+To handle this, we rely on the fact that when MySQL restarts, it starts with super-read-only turned on. This means that no writes can go through. It is VTOrc that registers this as an issue and fixes it by calling `UndoDemotePrimary`. As part of that call, before we set MySQL to read-write, we ensure that all the prepared transactions are redone in the read_only state. We use the dba pool (that has admin permissions) to prepare the transactions. This is safe because we know that no conflicting writes can go through until we set MySQL to read-write. The code to set MySQL to read-write after redoing prepared transactions can be found in `TabletManager.redoPreparedTransactionsAndSetReadWrite()`.
+
+Handling MySQL restarts is the only reason we needed to add the code to redo prepared transactions whenever MySQL transitions from super-read-only to read-write state. Even though, we only need to do this in `UndoDemotePrimary`, it not necessary that it is `UndoDemotePrimary` that sets MySQL to read-write. If the user notices that the tablet is in a read-only state before VTOrc has a chance to fix it, they can manually call `SetReadWrite` on the tablet.
+Therefore, the safest option was to always check if we need to redo the prepared transactions whenever MySQL transitions from super-read-only to read-write state.
+
+### VTTablet Restarts
+
+When Vttabet restarts, all the previous connections are dropped. It starts in a non-serving state, and then after reading the shard and tablet records from the topo, it transitions to a serving state.
+As part of this transition we need to ensure that we redo the prepared transactions before we start accepting any writes. This is done as part of the `TxEngine.transition` function when we transition to an `AcceptingReadWrite` state. We call the same code for redoing the prepared transactions that we called for MySQL restarts, PRS and ERS.
+
+### VTGate Restarts
+
+There is no additional work needed for VTGate restarts. The atomic transaction will resume based on the last known state in the MM based and will kick of the unresolved transaction workflow.
+
+### Online DDL
+
+During an Online DDL cutover, we need to ensure that all the prepared transactions on the online DDL table needs to be completed before we can proceed with the cutover.
+This is because the cutover involves a schema change, and we cannot have any prepared transactions that are dependent on the old schema.
+
+As part of the cut-over process, Online DDL adds query rules to buffer new queries on the table.
+It then checks for any open prepared transaction on the table and waits for up to 100ms if found, then checks again.
+If it finds no prepared transaction of the table, it moves forward with the cut-over, otherwise it fails. The Online DDL mechanism will later retry the cut-over.
+
+In the Prepare code, we check the query rules before adding the transaction to the prepared list and re-check the rules before storing the transaction logs in the transaction redo table.
+Any transaction that went past the first check will fail the second check if the cutover proceeds.
+
+The check on both sides prevents either the cutover from proceeding or the transaction from being prepared.
+
+### MoveTables
+
+The only step of a `MoveTables` workflow that needs to synchronize with atomic transactions is `SwitchTraffic` for writes. As part of this step, we want to disallow writes to only the tables involved. We use `DeniedTables` in `ShardInfo` to accomplish this. After we update the topo server with the new `DeniedTables`, we make all the VTTablets refresh their topo to ensure that they've registered the change.
+
+On VTTablet, the `DeniedTables` are used to add query rules very similar to the ones in Online DDL. The only difference is that in Online DDL, we buffer the queries, but for `SwitchTraffic` we fail them altogether. Addition of these query rules, prevents any new atomic transactions from being prepared.
+
+Next, we try locking the tables to ensure no existing write is pending. This step blocks until all open prepared transactions have succeeded.
+
+After this step, `SwitchTraffic` can proceed without any issues, since we are guaranteed to reject any new atomic transactions until the `DeniedTables` has been reset, and having acquired the table lock, we know no write is currently in progress.
+
+
+## Monitoring
+
+To facilitate monitoring, new metrics will be published.
+
+### VTTablet
+
+* The Transactions hierarchy will be extended to report CommitPrepared and RollbackPrepared stats, which includes histograms. Since Prepare is an intermediate step, it will not be rolled up in this variable.
+* For Prepare, two new variables will be created:
+ * Prepare histogram will report prepare timings.
+ * PrepareStatements histogram will report the number of statements for each Prepare.
+* `UnresolvedTransaction` is a gauge that reports current number of open unresolved transactions in `ResourceManager` or `MetadataManager`.
+* Any CommitPrepared or RedoPrepared failure will raise the counter in respective `CommitPreparedFail` or `RedoPreparedFail` with retyable or non-retryable error. Alert should be raised for non-retryable error.
+* Any unexpected errors during a 2PC will increment a counter for InternalErrors, which should already be set to raise an alert.
+
+### VTGate
+
+* Transactions will report Commit mode timing histogram `Single`, `Multi` and `TwoPC` for single shard, best-effort multi shard and 2PC multi shard transactions.
+* 2PC transactions will report
+ * `CommitUnresolved` count on a failure after transactions is prepared on all RMs.
+ * `Participant` count to determine the average number of shards involved in a multi shard transaction.
+
+## Tooling
+
+On VTAdmin, `Transactions` tab will list all the unresolved TwoPC transactions. It will have option to change the abandon age time to limit the unresolved transactions older than the select time.
+The current action that can be done on these transactions is `Conclude`. It will clear out the state in all the shards about the selected transaction.
+Currently, the user have to take the corrective actions for the transactions that are lingering from long time and transaction resolver is not able to complete them.
+
+# Data Guarantees
+
+Although the above workflows are foolproof, they do rely on the data guarantees provided by the underlying systems and the fact that prepared transactions can get killed only together with VTTablet.
+In all the scenarios below, there is as possibility of irrecoverable data loss. But the system needs to alert correctly, and we must be able to make the best effort recovery and move on.
+For now, these scenarios require operator intervention, but the system could be made to automatically perform these as we gain confidence.
+
+## Prepared transaction gets killed
+
+It is possible for an external agent to kill the connection of a prepared transaction. If this happened, MySQL will roll it back. If the system is serving live traffic, it may make forward progress in such a way that the transaction may not be replayable, or may replay with different outcome.
+This is a very unlikely occurrence. But if something like this happen, then an alert will be raised when the coordinator finds that the transaction is missing. That transaction will be marked as Failed until an operator resolves it.
+But if there’s a failover before the transaction is marked as failed, it will be resurrected over future transaction possibly with incorrect changes. A failure like this will be undetectable.
+
+## Transaction Recovery Redo Reliability
+
+The current implementation stores the transaction recovery logs as DML statements.
+On transaction recovery, while applying the statements from these logs it is not expected to fail as the current shutdown and startup workflow ensure that no other DMLs leak into the database.
+Still, there remains a risk of statement failure during the redo log application, potentially resulting in lost modifications without clear tracking of modified rows.
+If something like this happen, then an alert will be raised which the operator have to look into.
+
+# Testing Plan
+
+The main workflow of 2PC is fairly straightforward and easy to test. What makes it complicated are the failure modes. We will classify these tests into different tests.
+
+## Basic Tests
+Commit or rollback of transactions, and handling prepare failures leading to transaction rollbacks.
+
+## Reliability tests
+This test should run over an extended period, potentially lasting a few days or a week, and must endure various scenarios including:
+
+* Failure of different components (e.g., VTGate, VTTablets, MySQL)
+* Reparenting (PRS & ERS)
+* Resharding
+* Online DDL operations
+
+### Fuzzy tests
+A fuzzy test suite, running continuous stream of multi-shard transactions and expecting events to be in specific sequence on terminating the long-running test.
+
+### Stress Tests
+A continuous stream of transactions (single and distributed) will be executed, with all successful commits recorded along with the expected rows.
+The binary log events will be streamed continuously and validated against the ordering of the change stream and the successful transactions.
+
+
+# Innovation
+This design has a bunch of innovative ideas. However, it’s possible that they’ve been used before under other circumstances, or even 2PC itself. Here’s a summary of all the new ideas in this document, some with more merit than others:
+
+* Moving away from the heavyweight XA standard.
+* Implementing Prepare functionality on top of a system that does not inherently support it.
+* Storing the Metadata in a transactional engine and making the coordinator stateless.
+* Storing the Metadata with one of the participants and avoiding the cost of a Prepare for that participant.
+* Choosing to relax Isolation guarantees while maintaining Atomicity.
+
+
+# Future Enhancements
+
+## Read Isolation Guarantee
+The current system lacks isolation guarantees, placing the burden on the application to manage it. Implementing read isolation will enable true cross-shard ACID transactions.
+
+## Distributed Deadlock Avoidance
+The current system can encounter cross-shard deadlocks, which are only resolved when one of the transactions times out and is rolled back. Implementing distributed deadlock avoidance will address this issue more efficiently.
+
+# Appendix
+
+## Glossary
+
+* Distributed Transaction: Any transaction that spans multiple databases is a distributed transaction. It does not imply any commit protocol.
+* Best Effort Commit (BEC): This protocol is what’s currently supported by Vitess, where commits are sent to all participants. This could result in partial commits if there are failures during the process.
+* Two-Phase Commit (2PC): This is the protocol that guarantees Atomic distributed commits.
+* Coordinator: This is a stateless process that is responsible for initiating, resuming and completing a 2PC transaction. This role is fulfilled by the VTGates.
+* Resource Manager (RM) aka Participant: Any database that’s involved in a distributed transaction. Only VTTablets can be participants.
+* Metadata Manager (MM): The database responsible for storing the metadata and performing its state transitions. In Vitess, one of the participants will be designated as the MM.
+* Watchdog: The watchdog looks for abandoned transactions and initiates the process to get them resolved.
+* Distributed Transaction ID (DTID): A unique identifier for a 2PC transaction.
+* VTTablet transaction id (VTID): This is the individual transaction ID for each VTTablet participant that contains the application’s statements to be committed/rolled back.
+* Decision: This is the irreversible decision to either commit or rollback the transaction. Although confusing, this is also referred to as the ‘Commit Decision’. We’ll also indirectly refer to this as ‘Metadata state transition’. This is because a transaction undergoes many state changes. The Decision is a critical transition. So, it warrants its own name.
+
+## Reworked Design
+This design is updated based on the new work carried on the Atomic Distributed Transactions.
+More details about the recent changes are present in the [RFC](https://github.com/vitessio/vitess/issues/16245).
+
+## Exploratory Work
+MySQL XA was considered as an alternative to having RMs manage the transaction recovery logs and hold up the row locks until a commit or rollback occurs.
+
+There are currently over 20 open bugs on XA. On MySQL 8.0.33, reproduction steps were followed for all these bugs, and 8 still persist. Out of these 8 bugs, 4 have patches attached that resolve the issues when applied.
+For the remaining 4 issues, changes will need to be made either in the code or the workflow to ensure they are resolved.
+
+MySQL’s XA seems a probable candidate if we encounter issues with our implementation of handling distributed transactions that XA can resolve. XA's chatty API and no known big production deployment have kept us away from using it.
\ No newline at end of file
diff --git a/doc/design-docs/AtomicTransactionsWithDisruptions.md b/doc/design-docs/AtomicTransactionsWithDisruptions.md
deleted file mode 100644
index 7b3e050ae0d..00000000000
--- a/doc/design-docs/AtomicTransactionsWithDisruptions.md
+++ /dev/null
@@ -1,61 +0,0 @@
-# Handling disruptions in atomic transactions
-
-## Overview
-
-This document describes how to make atomic transactions resilient in the face of disruptions. The basic design and components involved in an atomic transaction are described in [here](./TwoPhaseCommitDesign.md) The document describes each of the disruptions that can happen in a running cluster and how atomic transactions are engineered to handle them without breaking their guarantee of being atomic.
-
-## `PlannedReparentShard` and `EmergencyReparentShard`
-
-For both Planned and Emergency reparents, we call `DemotePrimary` on the primary tablet. For Planned reparent, this call has to succeed, while on Emergency reparent, if the primary is unreachable then this call can fail, and we would still proceed further.
-
-As part of the `DemotePrimary` flow, when we transition the tablet to a non-serving state, we wait for all the transactions to have completed (in `TxEngine.shutdownLocked()` we have `te.txPool.WaitForEmpty()`). If the user has specified a shutdown grace-period, then after that much time elapses, we go ahead and forcefully kill all running queries. We then also rollback the prepared transactions. It is crucial that we rollback the prepared transactions only after all other writes have been killed, because when we rollback a prepared transaction, it lets go of the locks it was holding. If there were some other conflicting write in progress that hadn't been killed, then it could potentially go through and cause data corruption since we won't be able to prepare the transaction again. All the code to kill queries can be found in `stateManager.terminateAllQueries()`.
-
-The above outlined steps ensure that we either wait for all prepared transactions to conclude or we rollback them safely so that they can be prepared again on the new primary.
-
-On the new primary, when we call `PromoteReplica`, we redo all the prepared transactions before we allow any new writes to go through. This ensures that the new primary is in the same state as the old primary was before the reparent. The code for redoing the prepared transactions can be found in `TxEngine.RedoPreparedTransactions()`.
-
-If everything goes as described above, there is no reason for redoing of prepared transactions to fail. But in case, something unexpected happens and preparing transactions fails, we still allow the vttablet to accept new writes because we decided availability of the tablet is more important. We will however, build tooling and metrics for the users to be notified of these failures and let them handle this in the way they see fit.
-
-While Planned reparent is an operation where all the processes are running fine, Emergency reparent is called when something has gone wrong with the cluster. Because we call `DemotePrimary` in parallel with `StopReplicationAndBuildStatusMap`, we can run into a case wherein the primary tries to write something to the binlog after all the replicas have stopped replicating. If we were to run without semi-sync, then the primary could potentially commit a prepared transaction, and return a success to the vtgate trying to commit this transaction. The vtgate can then conclude that the transaction is safe to conclude and remove all the metadata information. However, on the new primary since the transaction commit didn't get replicated, it would re-prepare the transaction and would wait for a coordinator to either commit or rollback it, but that would never happen. Essentially we would have a transaction stuck in prepared state on a shard indefinitely. To avoid this situation, it is essential that we run with semi-sync, because this ensures that any write that is acknowledged as a success to the caller, would necessarily have to be replicated to at least one replica. This ensures that the transaction would also already be committed on the new primary.
-
-## MySQL Restarts
-
-When MySQL restarts, it loses all the ongoing transactions which includes all the prepared transactions. This is because the transaction logs are not persistent across restarts. This is a MySQL limitation and there is no way to get around this. However, at the Vitess level we must ensure that we can commit the prepared transactions even in case of MySQL restarts without any failures.
-
-Vttablet has the code to detect MySQL failures and call `stateManager.checkMySQL()` which transitions the tablet to a NotConnected state. This prevents any writes from going through until the vttablet has transitioned back to a serving state.
-
-However, we cannot rely on `checkMySQL` to ensure that no conflicting writes go through. This is because the time between MySQL restart and the vttablet transitioning to a NotConnected state can be large. During this time, the vttablet would still be accepting writes and some of them could potentially conflict with the prepared transactions.
-
-To handle this, we rely on the fact that when MySQL restarts, it starts with super-read-only turned on. This means that no writes can go through. It is VTOrc that registers this as an issue and fixes it by calling `UndoDemotePrimary`. As part of that call, before we set MySQL to read-write, we ensure that all the prepared transactions are redone in the read_only state. We use the dba pool (that has admin permissions) to prepare the transactions. This is safe because we know that no conflicting writes can go through until we set MySQL to read-write. The code to set MySQL to read-write after redoing prepared transactions can be found in `TabletManager.redoPreparedTransactionsAndSetReadWrite()`.
-
-Handling MySQL restarts is the only reason we needed to add the code to redo prepared transactions whenever MySQL transitions from super-read-only to read-write state. Even though, we only need to do this in `UndoDemotePrimary`, it not necessary that it is `UndoDemotePrimary` that sets MySQL to read-write. If the user notices that the tablet is in a read-only state before VTOrc has a chance to fix it, they can manually call `SetReadWrite` on the tablet.
-Therefore, the safest option was to always check if we need to redo the prepared transactions whenever MySQL transitions from super-read-only to read-write state.
-
-## Vttablet Restarts
-
-When Vttabet restarts, all the previous connections are dropped. It starts in a non-serving state, and then after reading the shard and tablet records from the topo, it transitions to a serving state.
-As part of this transition we need to ensure that we redo the prepared transactions before we start accepting any writes. This is done as part of the `TxEngine.transition` function when we transition to an `AcceptingReadWrite` state. We call the same code for redoing the prepared transactions that we called for MySQL restarts, PRS and ERS.
-
-## Online DDL
-
-During an Online DDL cutover, we need to ensure that all the prepared transactions on the online DDL table needs to be completed before we can proceed with the cutover.
-This is because the cutover involves a schema change and we cannot have any prepared transactions that are dependent on the old schema.
-
-As part of the cut-over process, Online DDL adds query rules to buffer new queries on the table.
-It then checks for any open prepared transaction on the table and waits for up to 100ms if found, then checks again.
-If it finds no prepared transaction of the table, it moves forward with the cut-over, otherwise it fails. The Online DDL mechanism will later retry the cut-over.
-
-In the Prepare code, we check the query rules before adding the transaction to the prepared list and re-check the rules before storing the transaction logs in the transaction redo table.
-Any transaction that went past the first check will fail the second check if the cutover proceeds.
-
-The check on both sides prevents either the cutover from proceeding or the transaction from being prepared.
-
-## MoveTables
-
-The only step of a `MoveTables` workflow that needs to synchronize with atomic transactions is `SwitchTraffic` for writes. As part of this step, we want to disallow writes to only the tables involved. We use `DeniedTables` in `ShardInfo` to accomplish this. After we update the topo server with the new `DeniedTables`, we make all the vttablets refresh their topo to ensure that they've registered the change.
-
-On vttablet, the `DeniedTables` are used to add query rules very similar to the ones in Online DDL. The only difference is that in Online DDL, we buffer the queries, but for `SwitchTraffic` we fail them altogether. Addition of these query rules, prevents any new atomic transactions from being prepared.
-
-Next, we try locking the tables to ensure no existing write is pending. This step blocks until all open prepared transactions have succeeded.
-
-After this step, `SwitchTraffic` can proceed without any issues, since we are guaranteed to reject any new atomic transactions until the `DeniedTables` has been reset, and having acquired the table lock, we know no write is currently in progress.
diff --git a/doc/design-docs/TwoPhaseCommitDesign.md b/doc/design-docs/TwoPhaseCommitDesign.md
deleted file mode 100644
index e1376985a4a..00000000000
--- a/doc/design-docs/TwoPhaseCommitDesign.md
+++ /dev/null
@@ -1,417 +0,0 @@
-# Design doc: 2PC in Vitess
-
-# Objective
-
-Provide a mechanism to support atomic commits for distributed transactions across multiple Vitess databases. Transactions should either complete successfully or rollback completely.
-
-# Background
-
-Vitess distributed transactions have so far been Best Effort Commit (BEC). An application is allowed to send DMLs that go to different shards or keyspaces in a single transaction. When a commit is issued, Vitess tries to individually commit each db transaction that was initiated. However, if a database goes down in the middle of a commit, that part of the transaction is lost. Moreover, with the support of lookup vindexes, VTGates could themselves open distributed transactions from single statements issued by the app.
-
-2PC is the de facto protocol for atomically committing distributed transactions. Unfortunately, this has been considered impractical, and has predominantly failed in the industry. There are a few reasons:
-
-* A database that goes down in the middle of a 2PC commit would hold transactions in other databases hostage till it was recovered. This is now a solved problem due to replication and fast failovers.
-* The ACID requirements of relational databases were too demanding and contentious for a pure implementation to practically scale.
-* The industry standard distributed transaction protocol (XA) overreached on flexibility and became too chatty.
-* Subpar schemes for transaction management: Some added too much additional overhead, and some paid lip service and defeated the reliability of 2PC.
-
-This document intends to address the above concerns with some practical trade-offs.
-
-Although MySQL supports the XA protocol, it’s been unusable due to bugs. Version 5.7 claims to have fixed them all, but the more common versions in use are 5.6 and below, and we need to make 2PC work for those versions also. Even at 5.7, we still have to contend with the chattiness of XA, and the fact that it’s unused code.
-
-The most critical component of the 2PC protocol is the `Prepare` functionality. There is actually a way to implement Prepare on top of a transactional system. This is explained in a [Vitess Blog](https://vitess.io/blog/2016-06-07-distributed-transactions-in-vitess/), which will be used as foundation for this design.
-
-Familiarity with the blog and the [2PC algorithm](http://c2.com/cgi/wiki?TwoPhaseCommit) are required to understand the rest of the document.
-
-# Overview
-
-Vitess will add a few variations to the traditional 2PC algorithm:
-
-* There is a presumption that the Resource Managers (aka participants) have to know upfront that they’re involved in a 2PC transaction. Many of the APIs force the application to make this choice at the beginning of a transaction. This is actually not required. In the case of Vitess, a distributed transaction will start off just like before, with a normal Begin. It will be converted only if the application requests a 2PC commit. This approach allows us to optimize some common use cases.
-* The 2PC algorithm does not specify how the Transaction Manager maintains the metadata. If you work through all the failure modes, it will become evident that the manager must also be an HA transactional system that must survive failures without data loss. Since the VTTablets are already built to be HA, there’s no reason to build yet another system. So, we’ll split the role of the Transaction Manager into two:
- * The Coordinator will be stateless and will orchestrate the work. VTGates are the perfect fit for this role.
- * One of the VTTablets will be designated as the Metadata Manager (MM). It will be used to store the metadata and perform the necessary state transitions.
-* If we designate one of the participant VTTablets to be the MM, then that database can avoid the prepare phase: If you assume there are N participants, the typical explanation says that you perform prepares from 1->N, and then commit from 1->N. If we instead went from 1->N for prepare, and N->1 for commit. Then the N’th database would perform a Prepare->Decide to commit->Commit. Instead, we execute the DML needed to transition the metadata state to ‘Decide to Commit’ as part of the app transaction, and commit it. If the commit fails, then it’s treated as the prepare having failed. If the commit succeeds, then it’s treated as all three operations having succeeded.
-* The Prepare functionality will be implemented as explained in the [blog](https://vitess.io/blog/2016-06-07-distributed-transactions-in-vitess/).
-
-Combining the above changes allows us to keep the most common use case efficient: A transaction that affects only one database incurs no additional cost due to 2PC.
-
-In the case of multi-db transactions, we can choose the participant with the highest number of statements to be the MM; That database will not incur the cost of going through the Prepare phase, and we also avoid requiring a separate transaction to persist the commit decision.
-
-## ACID trade-offs
-
-The core 2PC algorithm only guarantees Atomicity. Either the entire transaction commits, or it’s rolled back completely.
-
-Consistency is an orthogonal property because it’s mainly related to making sure the values in the database don’t break relational rules.
-
-Durability is guaranteed by each database, and the collective durability is inherited by the 2PC process.
-
-Isolation requires additional work. If a client tries to read data in the middle of a distributed commit, it could see partial commits. In order to prevent this, databases put read locks on rows that are involved in a 2PC. So, anyone that tries to read them will have to wait till the transaction is resolved. This type of locking is so contentious that it often defeats the purpose of distributing the data.
-
-In reality, this level of Isolation guarantee is overkill for most code paths of an application. So, it’s more practical to relax this for the sake of scalability, and let the application use explicit locks where it thinks better Isolation is required.
-
-On the other hand, Atomicity is critical; Non-atomic transactions can result in partial commits, which is effectively corrupt data. As stated earlier, this is what we get from 2PC.
-
-# Glossary
-
-We introduced many terms in the previous sections. It’s time for a quick recap:
-
-* Distributed Transaction: Any transaction that spans multiple databases is a distributed transaction. It does not imply any commit protocol.
-* Best Effort Commit (BEC): This protocol is what’s currently supported by Vitess, where commits are sent to all participants. This could result in partial commits if there are failures during the process.
-* Two-Phase Commit (2PC): This is the protocol that guarantees Atomic distributed commits.
-* Coordinator: This is a stateless process that is responsible for initiating, resuming and completing a 2PC transaction. This role is fulfilled by the VTGates.
-* Resource Manager aka Participant: Any database that’s involved in a distributed transaction. Only VTTablets can be participants.
-* Metadata Manager (MM): The database responsible for storing the metadata and performing its state transitions. In Vitess, one of the participants will be designated as the MM.
-* Watchdog: The watchdog looks for abandoned transactions and initiates the process to get them resolved.
-* Distributed Transaction ID (DTID): A unique identifier for a 2PC transaction.
-* VTTablet transaction id (VTID): This is the individual transaction ID for each VTTablet participant that contains the application’s statements to be committed/rolled back.
-* Decision: This is the irreversible decision to either commit or rollback the transaction. Although confusing, this is also referred to as the ‘Commit Decision’. We’ll also indirectly refer to this as ‘Metadata state transition’. This is because a transaction undergoes many state changes. The Decision is a critical transition. So, it warrants its own name.
-
-# Life of a 2PC transaction
-
-* The application issues a Begin to VTGate. At this time, the Session proto is just updated to indicate that it’s in a transaction.
-* The application sends DMLs to VTGate. As these DMLs are received, VTGate starts transactions against various VTTablets. The transaction id for each VTTablet (VTID) is stored in the Session proto.
-* The application requests a 2PC. Until this point, there is no difference between a BEC and a 2PC. In the case of BEC, VTGate just sends the commit to all participating VTTablets. For 2PC, VTGate initiates and executes the workflow described in the subsequent steps.
-
-## Prepare
-
-* Generate a DTID.
-* The VTTablet with the most DMLs is singled out as the MM. To this VTTablet, issue a CreateTransaction command with the DTID. This information will be monitored by the watchdogs.
-* Issue a Prepare to all other VTTablets. Send the DTID as part of the prepare request.
-
-## Commit
-
-* Execute the 3-in-1 action of Prepare->Decide->Commit (StartCommit) for the MM VTTablet. This will change the metadata state to ‘Commit’.
-* Issue a CommitPrepared commands to all the prepared VTTablets using the DTID.
-* Delete the transaction in the MM (ConcludeTransaction).
-
-## Rollback
-
-Any form of failure until the point of saving the commit decision will result in a decision to rollback.
-
-* Transition the metadata state to ‘Rollback’.
-* Issue RollbackPrepared commands to the prepared transactions using the DTID.
-* If the original VTGate is still orchestrating, rollback the unprepared transactions using their VTIDs. The initial version will just execute RollbackPrepared on all participants with the assumption that any unprepared transactions will be rolled back by the transaction killer.
-* Delete the transaction in the MM (ConcludeTransaction).
-
-## Watchdog
-
-A watchdog will kick in if a transaction remains unresolved for too long. If such a transaction is found, it will be in one of three states:
-
-1. Prepare
-2. Rollback
-3. Commit
-
-For #1 and #2, the Rollback workflow is initiated. For #3, the commit is resumed.
-
-The following diagram illustrates the life-cycle of a Vitess transaction.
-
-![](https://raw.githubusercontent.com/vitessio/vitess/main/doc/design-docs/TxLifecycle.png)
-
-A transaction generally starts off as a single DB transaction. It becomes a distributed transaction as soon as more than one VTTablet is affected. If the app issues a rollback, then all participants are simply rolled back. If a BEC is issued, then all transactions are individually committed. These actions are the same irrespective of single or distributed transactions.
-
-In the case of a single DB transactions, a 2PC is also a BEC.
-
-If a 2PC is issued to a distributed transaction, the new machinery kicks in. Actual metadata is created. The state starts off as ‘Prepare’ and remains so while Prepares are issued. In this state, only Prepares are allowed.
-
-If Prepares are successful, then the state is transitioned to ‘Commit’. In the Commit state, only commits are allowed. By the guarantee given by the Prepare contract, all databases will eventually accept the commits.
-
-Any failure during the Prepare state will result in the state being transitioned to ‘Rollback’. In this state, only rollbacks are allowed.
-
-# Component interactions
-
-In order to make 2PC work, the following pieces of functionality have to be built:
-
-* DTID generation
-* Prepare API
-* Metadata Manager API
-* Coordinator
-* Watchdogs
-* Client API
-* Production support
-
-The diagram below show how the various components interact.
-
-![](https://raw.githubusercontent.com/vitessio/vitess/main/doc/design-docs/TxInteractions.png)
-
-The detailed design explains all the functionalities and interactions.
-
-# Detailed Design
-
-## DTID generation
-
-Currently, transaction ids are issued by VTTablets (VTID), and those ids are considered local. In order to coordinate distributed transactions, a new system is needed to identify and track them. This is needed mainly so that the watchdog process can pick up an orphaned transaction and resolve it to completion.
-
-The DTID will be generated by taking the VTID of the MM and prefixing it with the keyspace, shard info and a sequence to prevent collisions. If the MM’s VTID was ‘1234’ for keyspace ‘order’ and shard ‘40-80’, then the DTID would be ‘order:40-80:1234’. A collision could still happen if there is a failover and the new vttablet’s starting VTID had overlaps with the previous instance. To prevent this, the starting VTID of the vttablet will be adjusted to a value higher than any used by the prepared GTIDs.
-
-## Prepare API
-
-The Prepare API will be provided by VTTablet, and will follow the guidelines of the [blog](https://vitess.io/blog/2016-06-07-distributed-transactions-in-vitess/). It’s essentially three functions: Prepare, CommitPrepared and RollbackPrepared.
-
-### Statement list and state
-
-Every transaction will have to remember its statement list. VTTablet already records queries against each transaction (RecordQuery). However, it’s currently the original queries of the request. This has to be changed to the DMLs that are sent to the database.
-
-The current RecordQuery functionality is mainly for troubleshooting and diagnostics. So, it’s not very material if we changed it to record actual DMLs. It would remain equally useful.
-
-### Schema
-
-The tables will be in the \_vt database. All time stamps are represented as unix nanoseconds.
-
-The redo_state table needs to support the following use cases:
-
-* Prepare: Create row.
-* Recover & repair tool: Fetch all transactions: full joined table scan.
-* Resolve: Transition state for a DTID: update where dtid = :dtid and state = :prepared.
-* Watchdog: Count unresolved transactions that are older than X: select where time_created < X.
-* Delete a resolved transaction: delete where dtid = :dtid.
-
-```
-create table redo_state(
- dtid varbinary(512),
- state bigint, // state can be 0: Failed, 1: Prepared.
- time_created bigint,
- primary key(dtid)
-)
-```
-
-The redo_statement table is a detail of redo_log_transaction table. It needs the ability to read the statements of a dtid in the correct order (by id), and the ability to delete all statements for a given dtid:
-
-```
-create table redo_statement(
- dtid varbinary(512),
- id bigint,
- statement mediumblob,
- primary key(dtid, id)
-)
-```
-
-### Prepare
-
-This function will take a DTID and a VTID as input.
-
-* Get the tx conn for use, and move it to the prepared pool. If the prepared pool is full, rollback the transaction and return an error.
-* Save the metadata into the redo logs as a separate transaction. If this step fails, the main transaction is also rolled back and an error is returned.
-
-If VTTablet is asked to shut down or change state from primary, the code that waits for tx pool must internally rollback the prepared transactions and return them to the tx pool. Note that the rollback must happen only after the currently pending (non-prepared) transactions are resolved. If a pending transaction is waiting on a lock held by a prepared transaction, it will eventually timeout and get rolled back.
-
-Eventually, a different VTTablet will be transitioned to become the primary. At that point, it will recreate the unresolved transactions from redo logs. If the replays fail, we’ll raise an alert and start the query service anyway.
-
-Typically, a replay is not expected to fail because vttablet does not allow writing to the database until the replays are done. Also, no external agent should be allowed to perform writes to MySQL, which is a loosely enforced Vitess requirement. Other vitess processes do write to MySQL directly, but they’re not the kind that interfere with the normal flow of transactions.
-
-*Unresolved issue: If a resharding happens in the middle of a prepare, such a transaction potentially becomes multiple different transactions in a target shard. For now, this means that a resharding failover has to wait for all prepared transactions to be resolved. Special code has to be written in vttablet to handle this specific workflow.*
-
-VTTablet always brackets DMLs with BEGIN-COMMIT. This will ensure that no autocommit statements can slip through if connections are inadvertently closed out of sequence.
-
-### CommitPrepared
-
-* Extract the transaction from the Prepare pool.
- * If transaction is in the failed pool, return an error.
- * If not found, return success (it was already resolved).
-* As part of the current transaction (VTID), transition the state in redo_log to Committed and commit it.
- * On failure, move it to the failed pool. Subsequent commits will permanently fail.
-* Return the conn to the tx pool.
-
-### RollbackPrepared
-
-* Delete the redo log entries for the dtid in a separate transaction.
-* Extract the transaction from the Prepare pool, rollback and return the conn to the tx pool.
-
-## Metadata Manager API
-
-The MM functionality is provided by VTTablet. This could be implemented as a separate service, but designating one of the
-participants to act as the manager gives us some optimization opportunities. The supported functions are CreateTransaction, StartCommit, SetRollback, and ConcludeTransaction.
-
-### Schema
-
-The transaction metadata will consist of two tables. It will need to fulfil the following use cases:
-
-* CreateTransaction: Create row.
-* Transition state: update where dtid = :dtid and state = :prepare.
-* Resolve flow: select dt_state & dt_participant where dtid = :dtid.
-* Watchdog: full joined table scan where time_created < X.
-* Delete a resolved transaction: delete where dtid = :dtid.
-
-```
-create table dt_state(
- dtid varbinary(512),
- state bigint, // state PREPARE, COMMIT, ROLLBACK as defined in the protobuf for TransactionMetadata.
- time_created bigint,
- primary key(dtid)
-)
-```
-
-```
-create table dt_participant(
- dtid varbinary(512),
- id bigint,
- keyspace varchar(256),
- shard varchar(256),
- primary key (dtid, id)
-)
-```
-
-### CreateTransaction
-
-This statement creates a row in transaction. The initial state will be PREPARE. A successful create begins the 2PC process. This will be followed by VTGate issuing prepares to the rest of the participants.
-
-### StartCommit
-
-This function can only be called for a transaction that’s not been abandoned. A watchdog that initiates a recovery will never make a decision to commit. This means that we can assume that the participant’s transaction (VTID) is still alive.
-
-The function will issue a DML that will transition the state from PREPARE to COMMIT as part of the participant’s transaction (VTID). If not successful, it returns an error, which will be treated as failure to prepare, and will cause VTGate to rollback the rest of the transactions.
-
-If successful, a commit is issued, which will also finalize the decision to commit the rest of the transactions.
-
-### SetRollback
-
-SetRollback transitions the state from PREPARE to ROLLBACK using an independent transaction. When this function is called, the MM’s transaction (VTID) may still be alive. So, we infer the transaction id from the dtid and perform a best effort rollback. If the transaction is not found, it’s a no-op.
-
-### ConcludeTransaction
-
-This function just deletes the row.
-
-### ReadTransaction
-
-This function returns the transaction info given the dtid.
-
-### ReadTwopcInflight
-
-This function returns all transaction metadata including the info in the redo logs.
-
-## Coordinator
-
-VTGate is already responsible for BEC, aka Commit(Atomic=false), it can naturally be extended to act as the coordinator for 2PC. It needs to support Commit(Atomic=true), and ResolveTransaction.
-
-If there are operational errors before the commit decision, the transaction is rolled back. If the rollback fails, or if a failure happens after the commit decision, we give up. The watchdog will later pick it up and try to resolve it.
-
-### Commit(Atomic=true)
-
-This call is issued on an active transaction, whose Session info is known. The function will perform the workflow described in the life of a transaction:
-
-* Identify a VTTablet as MM, and generate a DTID based on the identity of the MM.
-* CreateTransaction on the MM
-* Prepare on all other participants
-* StartCommit on the MM
-* CommitPrepared on all other participants
-* ResolveTransaction on the MM
-
-Any non-operational failure before StartCommit will trigger the rollback workflow:
-
-* SetRollback on the MM
-* RollbackPrepared on all participants for which Prepare was sent
-* Rollback on all other participants
-* ResolveTransaction on the MM
-
-### ResolveTransaction
-
-This function is called by a watchdog if a VTGate had failed to complete a transaction. It could be due to VTGate crashing, or other unrecoverable errors.
-
-The function starts off with a ReadTransaction, and based on the state, it performs the following actions:
-
-* Prepare: SetRollback and initiate rollback workflow.
-* Rollback: initiate rollback workflow.
-* Commit: initiate commit workflow.
-
-Commit workflow:
-
-* CommitPrepared on all participants.
-* ResolveTransaction on the MM
-
-Rollback workflow:
-
-* RollbackPrepared on all participants.
-* ResolveTransaction on the MM.
-
-## Watchdogs
-
-The stateless VTGates are considered ephemeral and can fail at any time, which means that transactions could be abandoned in the middle of a distributed commit. To mitigate this, every primary vttablet will poll its dt_state table for distributed transactions that are lingering. If any such transaction is found, it invokes VTGate with that dtid for a Resolve to be retried.
-
-_This is not a clean design because it introduces a backward dependency from VTTablet to VTGate. However, it saves us the need to create yet another server that will add to the overall complexity of the deployment. It was decided that this is a worthy trade-off._
-
-## Client API
-
-The client API change will be an additional flag to the Commit call, where the app can set Atomic to true or false.
-
-## Production support
-
-Beyond the basic functionality, additional work is needed to make 2PC viable for production. The areas of concern are monitoring, tooling and configuration.
-
-### Monitoring
-
-To facilitate monitoring, new variables have to be exported.
-
-VTTablet
-
-* The Transactions hierarchy will be extended to report CommitPrepared and RollbackPrepared stats, which includes histograms. Since Prepare is an intermediate step, it will not be rolled up in this variable.
-* For Prepare, two new variables will be created:
- * Prepare histogram will report prepare timings.
- * PrepareStatements histogram will report the number of statements for each Prepare.
-* New histogram variables will be exported for all the new MM functions.
-* LingeringCount is a gauge that reports if a transaction has been unresolved for too long. This most likely means that it’s repeatedly failing. So, an alert should be raised. This applies to prepared transactions also.
-* Any unexpected errors during a 2PC will increment a counter for InternalErrors, which should already be set to raise an alert.
-
-VTGate
-
-* TwoPCTransactions will report Commit, Rollback, ResolveCommit and ResolveRollback stats. The Resolve subvars are for the ResolveTransaction function.
-* TwoPCParticipants will report the transaction count and the ParticipantCount. This is a way to track the average number of participants per 2PC transaction.
-
-### Tooling
-
-For vttablet, a new URL, /twopcz, will display unresolved twopc transactions and transactions that are in the Prepare state. It will also provide buttons to force the following actions:
-
-* Discard a Prepare that failed to commit.
-* Force a commit or rollback of a prepared transaction.
-* Resolve a distributed transaction.
-
-# Data guarantees
-
-Although the above workflows are foolproof, they do rely on the data guarantees provided by the underlying systems and the fact that prepared transactions can get killed only together with vttablet. Of these, one failure mode has to be visited: It’s possible that there’s data loss when a primary goes down and a new replica gets elected as the new primary. This loss is highly mitigated with semi-sync turned on, but it’s still possible. In such situations, we have to describe how 2PC will behave.
-
-In all of the scenarios below, there is irrecoverable data loss. But the system needs to alert correctly, and we must be able to make best effort recovery and move on. For now, these scenarios require operator intervention, but the system could be made to automatically perform these as we gain confidence.
-
-## Loss of MM’s transaction and metadata
-
-Scenario: An MM VTTablet experiences a network partition, and the coordinator continues to commit transactions. Eventually, there’s a reparent and all these transactions are lost.
-
-In this situation, it’s possible that the participants are in a prepared state, but if you looked for their metadata, you’ll not find it because it’s lost. These transactions will remain in the prepared state forever, holding locks. If this happened, a Lingering alert will be raised. An operator will then realize that there was data loss, and can manually rollback these transactions from the /twopcz dashboard.
-
-## Loss of a Prepared transaction
-
-The previous scenario could happen to one of the participants instead. If so, the 2PC transaction will become unresolvable because an attempt to commit the prepared transaction will repeatedly fail on the participant that lost the prepared transaction.
-
-This situation will raise a 2PC Lingering transaction alert. The operator can force the 2PC transaction as resolved.
-
-## Loss of MM’s transaction after commit decision
-
-Scenario: Network partition happened after metadata was created. VTGate performs a StartCommit, succeeds in a few commits and crashes. Now, some transactions are in the prepared state. After the recovery, the metadata of the 2PC transaction is also in the Prepared state.
-
-The watchdog will grab this transaction and invoke a ResolveTransaction. The VTGate will then make a decision to rollback, because all it sees is a 2PC in Prepare state. It will attempt to rollback all participants, while some might have already committed. A failure like this will be undetectable.
-
-## Prepared transaction gets killed
-
-It is possible for an external agent to kill the connection of a prepared transaction. If this happened, MySQL will roll it back. If the system is serving live traffic, it may make forward progress in such a way that the transaction may not be replayable, or may replay with different outcome.
-
-This is a very unlikely occurrence. But if something like this happen, then an alert will be raised when the coordinator finds that the transaction is missing. That transaction will be marked as Failed until an operator resolves it.
-
-But if there’s a failover before the transaction is marked as failed, it will be resurrected over future transaction possibly with incorrect changes. A failure like this will be undetectable.
-
-# Testing Plan
-
-The main workflow of 2PC is fairly straightforward and easy to test. What makes it complicated are the failure modes. But those have to be tested thoroughly. Otherwise, we’ll not be able to gain the confidence to take this to production.
-
-Some important failure scenarios that must be tested are:
-
-* Correct shutdown of vttablet when it has prepared transactions.
-* Resurrection of prepared transactions when a vttablet becomes a primary.
-* A reparent of a VTTablet that has prepared transactions. This is effectively tested by the previous two steps, but it will be nice as an integration test. It will be even nicer if we could go a step further and see if VTGate can still complete a transaction if a reparent happened in the middle of a commit.
-
-# Innovation
-
-This design has a bunch of innovative ideas. However, it’s possible that they’ve been used before under other circumstances, or even 2PC itself. Here’s a summary of all the new ideas in this document, some with more merit than others:
-
-* Moving away from the heavyweight XA standard.
-* Implementing Prepare functionality on top of a system that does not inherently support it.
-* Storing the Metadata in a transactional engine and making the coordinator stateless.
-* Storing the Metadata with one of the participants and avoiding the cost of a Prepare for that participant.
-* Choosing to relax Isolation guarantees while maintaining Atomicity.
diff --git a/doc/internal/release/eol-process.md b/doc/internal/release/eol-process.md
index 98af2218d68..0ec20d30cd9 100644
--- a/doc/internal/release/eol-process.md
+++ b/doc/internal/release/eol-process.md
@@ -9,5 +9,7 @@ To properly deprecate a major of Vitess follow the following steps:
> - Add a redirect from the old URL to the new URL in `./layouts/index.redirects` under the `Redirect archived docs` section.
- **Delete the `Backport To: ...` label**
> - Delete the corresponding label for the EOL version, we do not want to motivate anymore backport to the EOL release branch.
+- **Update the Golang Upgrade GitHub Action Workflow**
+ > - The `Update Golang Version` workflow must be updated to stop upgrading the version we are EOLing.
- **Make proper announcement on Slack**
> - Notify the community of this deprecation.
diff --git a/docker/bootstrap/CHANGELOG.md b/docker/bootstrap/CHANGELOG.md
index c9847c6b7eb..b52783d0c30 100644
--- a/docker/bootstrap/CHANGELOG.md
+++ b/docker/bootstrap/CHANGELOG.md
@@ -141,4 +141,16 @@ List of changes between bootstrap image versions.
## [36] - 2024-09-05
### Changes
-- Update build to golang 1.23.1
\ No newline at end of file
+- Update build to golang 1.23.1
+
+## [37] - 2024-10-04
+### Changes
+- Update build to golang 1.23.2
+
+## [38] - 2024-11-10
+### Changes
+- Update build to golang 1.23.3
+
+## [39] - 2024-12-04
+### Changes
+- Update build to golang 1.23.4
\ No newline at end of file
diff --git a/docker/bootstrap/Dockerfile.common b/docker/bootstrap/Dockerfile.common
index 3685548b7a1..3ace19543f1 100644
--- a/docker/bootstrap/Dockerfile.common
+++ b/docker/bootstrap/Dockerfile.common
@@ -1,4 +1,4 @@
-FROM --platform=linux/amd64 golang:1.23.1-bullseye
+FROM --platform=linux/amd64 golang:1.23.4-bullseye
# Install Vitess build dependencies
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
diff --git a/docker/lite/Dockerfile b/docker/lite/Dockerfile
index 9d2b90efda2..fff1414fab6 100644
--- a/docker/lite/Dockerfile
+++ b/docker/lite/Dockerfile
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-FROM --platform=linux/amd64 golang:1.23.1-bullseye AS builder
+FROM --platform=linux/amd64 golang:1.23.4-bullseye AS builder
# Allows docker builds to set the BUILD_NUMBER
ARG BUILD_NUMBER
diff --git a/docker/lite/Dockerfile.percona80 b/docker/lite/Dockerfile.percona80
index c556c40673d..a839fb35514 100644
--- a/docker/lite/Dockerfile.percona80
+++ b/docker/lite/Dockerfile.percona80
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-FROM --platform=linux/amd64 golang:1.23.1-bullseye AS builder
+FROM --platform=linux/amd64 golang:1.23.4-bullseye AS builder
# Allows docker builds to set the BUILD_NUMBER
ARG BUILD_NUMBER
diff --git a/docker/vttestserver/Dockerfile.mysql80 b/docker/vttestserver/Dockerfile.mysql80
index 69bc16bea3b..74b9564ef48 100644
--- a/docker/vttestserver/Dockerfile.mysql80
+++ b/docker/vttestserver/Dockerfile.mysql80
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-FROM --platform=linux/amd64 golang:1.23.1-bullseye AS builder
+FROM --platform=linux/amd64 golang:1.23.4-bullseye AS builder
# Allows docker builds to set the BUILD_NUMBER
ARG BUILD_NUMBER
diff --git a/docker/vttestserver/README.md b/docker/vttestserver/README.md
new file mode 100644
index 00000000000..1567cf30340
--- /dev/null
+++ b/docker/vttestserver/README.md
@@ -0,0 +1,17 @@
+## vttestserver docker image
+
+### How to build manually during a release
+
+If for whatever reason the automatic build did not happen for `vttestserver` during a release, or if it has failed,
+there is a way of building it by hand. Here is how it goes:
+
+```bash
+docker login
+
+# we first checkout to the git tag of the release we want to build
+# we assume in this example that we are releasing v21.0.0-rc1, but replace this by any other tag
+git checkout v21.0.0-rc1
+
+docker build -f docker/vtttestserver/Dockerfile.mysql80 -t vitess/vttestserver:v21.0.0-rc1-mysql80 .
+docker push vitess/vttestserver:v21.0.0-rc1-mysql80
+```
\ No newline at end of file
diff --git a/examples/common/scripts/vtctld-up.sh b/examples/common/scripts/vtctld-up.sh
index 6902a851997..4a4b2587c4f 100755
--- a/examples/common/scripts/vtctld-up.sh
+++ b/examples/common/scripts/vtctld-up.sh
@@ -33,6 +33,7 @@ vtctld \
--port $vtctld_web_port \
--grpc_port $grpc_port \
--pid_file $VTDATAROOT/tmp/vtctld.pid \
+ --pprof-http \
> $VTDATAROOT/tmp/vtctld.out 2>&1 &
for _ in {0..300}; do
diff --git a/examples/common/scripts/vtgate-up.sh b/examples/common/scripts/vtgate-up.sh
index dbaaad02367..fd7860cf6ba 100755
--- a/examples/common/scripts/vtgate-up.sh
+++ b/examples/common/scripts/vtgate-up.sh
@@ -41,6 +41,7 @@ vtgate \
--pid_file $VTDATAROOT/tmp/vtgate.pid \
--enable_buffer \
--mysql_auth_server_impl none \
+ --pprof-http \
> $VTDATAROOT/tmp/vtgate.out 2>&1 &
# Block waiting for vtgate to be listening
diff --git a/examples/common/scripts/vtorc-up.sh b/examples/common/scripts/vtorc-up.sh
index 23ca4e62b48..807f522b1f7 100755
--- a/examples/common/scripts/vtorc-up.sh
+++ b/examples/common/scripts/vtorc-up.sh
@@ -11,7 +11,9 @@ vtorc \
$TOPOLOGY_FLAGS \
--logtostderr \
--alsologtostderr \
- --config="${script_dir}/../vtorc/config.json" \
+ --config-path="${script_dir}/../vtorc/" \
+ --config-name="config.yaml" \
+ --config-type="yml" \
--port $port \
> "${log_dir}/vtorc.out" 2>&1 &
diff --git a/examples/common/scripts/vttablet-up.sh b/examples/common/scripts/vttablet-up.sh
index daa40aee894..282cd0553ea 100755
--- a/examples/common/scripts/vttablet-up.sh
+++ b/examples/common/scripts/vttablet-up.sh
@@ -54,6 +54,7 @@ vttablet \
--service_map 'grpc-queryservice,grpc-tabletmanager,grpc-updatestream' \
--pid_file $VTDATAROOT/$tablet_dir/vttablet.pid \
--heartbeat_on_demand_duration=5s \
+ --pprof-http \
> $VTDATAROOT/$tablet_dir/vttablet.out 2>&1 &
# Block waiting for the tablet to be listening
diff --git a/examples/common/vtorc/config.json b/examples/common/vtorc/config.json
deleted file mode 100644
index e1f27ee5762..00000000000
--- a/examples/common/vtorc/config.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "MySQLTopologyUser": "orc_client_user",
- "MySQLTopologyPassword": "orc_client_user_password",
- "MySQLReplicaUser": "vt_repl",
- "MySQLReplicaPassword": "",
- "RecoveryPeriodBlockSeconds": 1,
- "InstancePollSeconds": 1
-}
\ No newline at end of file
diff --git a/examples/common/vtorc/config.yaml b/examples/common/vtorc/config.yaml
new file mode 100644
index 00000000000..26af59afac8
--- /dev/null
+++ b/examples/common/vtorc/config.yaml
@@ -0,0 +1,13 @@
+instance-poll-time: 1s
+prevent-cross-cell-failover: false
+snapshot-topology-interval: 0h
+reasonable-replication-lag: 10s
+audit-to-backend: false
+audit-to-syslog: false
+audit-purge-duration: 168h
+wait-replicas-timeout: 30s
+tolerable-replication-lag: 0s
+topo-information-refresh-duration: 15s
+recovery-poll-duration: 1s
+allow-emergency-reparent: true
+change-tablets-with-errant-gtid-to-drained: false
diff --git a/examples/compose/vtorc-up.sh b/examples/compose/vtorc-up.sh
index 7a7394dfc86..a4b03ede7d0 100755
--- a/examples/compose/vtorc-up.sh
+++ b/examples/compose/vtorc-up.sh
@@ -27,10 +27,6 @@ if [ $external = 1 ] ; then
# This can be overridden by passing VTORC_CONFIG env variable
echo "Updating $config..."
cp /vt/vtorc/default.json /vt/vtorc/tmp.json
- sed -i '/MySQLTopologyUser/c\ \"MySQLTopologyUser\" : \"'"$DB_USER"'\",' /vt/vtorc/tmp.json
- sed -i '/MySQLTopologyPassword/c\ \"MySQLTopologyPassword\" : \"'"$DB_PASS"'\",' /vt/vtorc/tmp.json
- sed -i '/MySQLReplicaUser/c\ \"MySQLReplicaUser\" : \"'"$DB_USER"'\",' /vt/vtorc/tmp.json
- sed -i '/MySQLReplicaPassword/c\ \"MySQLReplicaPassword\" : \"'"$DB_PASS"'\",' /vt/vtorc/tmp.json
cat /vt/vtorc/tmp.json
cp /vt/vtorc/tmp.json /vt/vtorc/config.json
else
diff --git a/examples/compose/vtorc/default.json b/examples/compose/vtorc/default.json
index e0a03884c99..58513568044 100644
--- a/examples/compose/vtorc/default.json
+++ b/examples/compose/vtorc/default.json
@@ -1,10 +1,6 @@
{
"Debug": true,
"EnableSyslog": false,
- "MySQLTopologyUser": "orc_client_user",
- "MySQLTopologyPassword": "orc_client_user_password",
- "MySQLReplicaUser": "vt_repl",
- "MySQLReplicaPassword": "",
"BackendDB": "sqlite",
"SQLite3DataFile": "/tmp/vtorc.sqlite3",
"RecoverMasterClusterFilters": ["*"],
diff --git a/examples/operator/101_initial_cluster.yaml b/examples/operator/101_initial_cluster.yaml
index c26219254f1..c044141dd4b 100644
--- a/examples/operator/101_initial_cluster.yaml
+++ b/examples/operator/101_initial_cluster.yaml
@@ -15,7 +15,7 @@ spec:
vtbackup: vitess/lite:latest
vtorc: vitess/lite:latest
mysqld:
- mysql80Compatible: vitess/lite:latest
+ mysql80Compatible: mysql:8.0.30
mysqldExporter: prom/mysqld-exporter:v0.11.0
cells:
- name: zone1
@@ -79,7 +79,7 @@ spec:
cpu: 100m
memory: 128Mi
extraFlags:
- recovery-period-block-duration: 5s
+ instance-poll-time: 1s
partitionings:
- equal:
parts: 1
@@ -155,23 +155,6 @@ stringData:
# Vitess defaults
###############################################################################
- # Vitess-internal database.
- CREATE DATABASE IF NOT EXISTS _vt;
- # Note that definitions of local_metadata and shard_metadata should be the same
- # as in production which is defined in go/vt/mysqlctl/metadata_tables.go.
- CREATE TABLE IF NOT EXISTS _vt.local_metadata (
- name VARCHAR(255) NOT NULL,
- value VARCHAR(255) NOT NULL,
- db_name VARBINARY(255) NOT NULL,
- PRIMARY KEY (db_name, name)
- ) ENGINE=InnoDB;
- CREATE TABLE IF NOT EXISTS _vt.shard_metadata (
- name VARCHAR(255) NOT NULL,
- value MEDIUMBLOB NOT NULL,
- db_name VARBINARY(255) NOT NULL,
- PRIMARY KEY (db_name, name)
- ) ENGINE=InnoDB;
-
# Admin user with all privileges.
CREATE USER 'vt_dba'@'localhost';
GRANT ALL ON *.* TO 'vt_dba'@'localhost';
@@ -200,12 +183,10 @@ stringData:
ON *.* TO 'vt_allprivs'@'localhost';
# User for slave replication connections.
- # TODO: Should we set a password on this since it allows remote connections?
CREATE USER 'vt_repl'@'%';
GRANT REPLICATION SLAVE ON *.* TO 'vt_repl'@'%';
- # User for Vitess filtered replication (binlog player).
- # Same permissions as vt_app.
+ # User for Vitess VReplication (base vstreamers and vplayer).
CREATE USER 'vt_filtered'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, FILE,
REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES,
@@ -213,6 +194,13 @@ stringData:
SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER
ON *.* TO 'vt_filtered'@'localhost';
+ # User for general MySQL monitoring.
+ CREATE USER 'vt_monitoring'@'localhost';
+ GRANT SELECT, PROCESS, SUPER, REPLICATION CLIENT, RELOAD
+ ON *.* TO 'vt_monitoring'@'localhost';
+ GRANT SELECT, UPDATE, DELETE, DROP
+ ON performance_schema.* TO 'vt_monitoring'@'localhost';
+
# custom sql is used to add custom scripts like creating users/passwords. We use it in our tests
# {{custom_sql}}
diff --git a/examples/operator/201_customer_tablets.yaml b/examples/operator/201_customer_tablets.yaml
index 5800a5e05df..a16723ade57 100644
--- a/examples/operator/201_customer_tablets.yaml
+++ b/examples/operator/201_customer_tablets.yaml
@@ -75,7 +75,7 @@ spec:
cpu: 100m
memory: 128Mi
extraFlags:
- recovery-period-block-duration: 5s
+ instance-poll-time: 1s
partitionings:
- equal:
parts: 1
diff --git a/examples/operator/302_new_shards.yaml b/examples/operator/302_new_shards.yaml
index 2e15bc40d28..b954dab7beb 100644
--- a/examples/operator/302_new_shards.yaml
+++ b/examples/operator/302_new_shards.yaml
@@ -75,7 +75,7 @@ spec:
cpu: 100m
memory: 128Mi
extraFlags:
- recovery-period-block-duration: 5s
+ instance-poll-time: 1s
partitionings:
- equal:
parts: 1
diff --git a/examples/operator/306_down_shard_0.yaml b/examples/operator/306_down_shard_0.yaml
index 4bdb694d678..7206d1b4e64 100644
--- a/examples/operator/306_down_shard_0.yaml
+++ b/examples/operator/306_down_shard_0.yaml
@@ -75,7 +75,7 @@ spec:
cpu: 100m
memory: 128Mi
extraFlags:
- recovery-period-block-duration: 5s
+ instance-poll-time: 1s
partitionings:
- equal:
parts: 1
diff --git a/examples/operator/401_scheduled_backups.yaml b/examples/operator/401_scheduled_backups.yaml
index 0e74ada8478..9e8ed29aa9f 100644
--- a/examples/operator/401_scheduled_backups.yaml
+++ b/examples/operator/401_scheduled_backups.yaml
@@ -116,7 +116,7 @@ spec:
cpu: 100m
memory: 128Mi
extraFlags:
- recovery-period-block-duration: 5s
+ instance-poll-time: 1s
partitionings:
- equal:
parts: 1
diff --git a/examples/operator/operator.yaml b/examples/operator/operator.yaml
index 6795f37becd..4b1b64df1ac 100644
--- a/examples/operator/operator.yaml
+++ b/examples/operator/operator.yaml
@@ -2,8 +2,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
- controller-gen.kubebuilder.io/version: v0.11.3
- creationTimestamp: null
+ controller-gen.kubebuilder.io/version: v0.16.1
name: etcdlockservers.planetscale.com
spec:
group: planetscale.com
@@ -61,6 +60,7 @@ spec:
items:
type: string
type: array
+ x-kubernetes-list-type: atomic
dataSource:
properties:
apiGroup:
@@ -90,18 +90,6 @@ spec:
type: object
resources:
properties:
- claims:
- items:
- properties:
- name:
- type: string
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
limits:
additionalProperties:
anyOf:
@@ -132,11 +120,13 @@ spec:
items:
type: string
type: array
+ x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
+ x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@@ -145,6 +135,8 @@ spec:
x-kubernetes-map-type: atomic
storageClassName:
type: string
+ volumeAttributesClassName:
+ type: string
volumeMode:
type: string
volumeName:
@@ -164,6 +156,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -202,6 +195,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -233,6 +227,8 @@ spec:
type: string
readOnly:
type: boolean
+ recursiveReadOnly:
+ type: string
subPath:
type: string
subPathExpr:
@@ -252,6 +248,7 @@ spec:
items:
properties:
name:
+ default: ""
type: string
type: object
x-kubernetes-map-type: atomic
@@ -279,6 +276,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -330,8 +329,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
- controller-gen.kubebuilder.io/version: v0.11.3
- creationTimestamp: null
+ controller-gen.kubebuilder.io/version: v0.16.1
name: vitessbackups.planetscale.com
spec:
group: planetscale.com
@@ -383,8 +381,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
- controller-gen.kubebuilder.io/version: v0.11.3
- creationTimestamp: null
+ controller-gen.kubebuilder.io/version: v0.16.1
name: vitessbackupschedules.planetscale.com
spec:
group: planetscale.com
@@ -449,6 +446,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -554,8 +553,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
- controller-gen.kubebuilder.io/version: v0.11.3
- creationTimestamp: null
+ controller-gen.kubebuilder.io/version: v0.16.1
name: vitessbackupstorages.planetscale.com
spec:
group: planetscale.com
@@ -720,8 +718,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
- controller-gen.kubebuilder.io/version: v0.11.3
- creationTimestamp: null
+ controller-gen.kubebuilder.io/version: v0.16.1
name: vitesscells.planetscale.com
spec:
group: planetscale.com
@@ -779,893 +776,1264 @@ spec:
type: object
type: object
type: object
- extraEnv:
- items:
- properties:
- name:
- type: string
- value:
- type: string
- valueFrom:
- properties:
- configMapKeyRef:
- properties:
- key:
- type: string
- name:
- type: string
- optional:
- type: boolean
- required:
- - key
- type: object
- x-kubernetes-map-type: atomic
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- required:
- - fieldPath
- type: object
- x-kubernetes-map-type: atomic
- resourceFieldRef:
- properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
- type: string
- required:
- - resource
- type: object
- x-kubernetes-map-type: atomic
- secretKeyRef:
- properties:
- key:
- type: string
- name:
- type: string
- optional:
- type: boolean
- required:
- - key
- type: object
- x-kubernetes-map-type: atomic
- type: object
- required:
- - name
- type: object
- type: array
- extraFlags:
- additionalProperties:
- type: string
- type: object
- extraLabels:
- additionalProperties:
- type: string
- type: object
- extraVolumeMounts:
- items:
- properties:
- mountPath:
- type: string
- mountPropagation:
- type: string
- name:
- type: string
- readOnly:
- type: boolean
- subPath:
- type: string
- subPathExpr:
- type: string
- required:
- - mountPath
- - name
- type: object
- type: array
- extraVolumes:
- x-kubernetes-preserve-unknown-fields: true
- initContainers:
- x-kubernetes-preserve-unknown-fields: true
- lifecycle:
+ autoscaler:
properties:
- postStart:
+ behavior:
properties:
- exec:
- properties:
- command:
- items:
- type: string
- type: array
- type: object
- httpGet:
+ scaleDown:
properties:
- host:
- type: string
- httpHeaders:
+ policies:
items:
properties:
- name:
+ periodSeconds:
+ format: int32
+ type: integer
+ type:
type: string
value:
- type: string
+ format: int32
+ type: integer
required:
- - name
+ - periodSeconds
+ - type
- value
type: object
type: array
- path:
- type: string
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- scheme:
- type: string
- required:
- - port
- type: object
- tcpSocket:
- properties:
- host:
+ x-kubernetes-list-type: atomic
+ selectPolicy:
type: string
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- required:
- - port
- type: object
- type: object
- preStop:
- properties:
- exec:
- properties:
- command:
- items:
- type: string
- type: array
+ stabilizationWindowSeconds:
+ format: int32
+ type: integer
type: object
- httpGet:
+ scaleUp:
properties:
- host:
- type: string
- httpHeaders:
+ policies:
items:
properties:
- name:
+ periodSeconds:
+ format: int32
+ type: integer
+ type:
type: string
value:
- type: string
+ format: int32
+ type: integer
required:
- - name
+ - periodSeconds
+ - type
- value
type: object
type: array
- path:
- type: string
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- scheme:
- type: string
- required:
- - port
- type: object
- tcpSocket:
- properties:
- host:
+ x-kubernetes-list-type: atomic
+ selectPolicy:
type: string
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- required:
- - port
+ stabilizationWindowSeconds:
+ format: int32
+ type: integer
type: object
type: object
- type: object
- replicas:
- format: int32
- minimum: 0
- type: integer
- resources:
- properties:
- claims:
+ maxReplicas:
+ format: int32
+ minimum: 0
+ type: integer
+ metrics:
items:
properties:
- name:
- type: string
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- limits:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- requests:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- type: object
- secureTransport:
- properties:
- required:
- type: boolean
- tls:
- properties:
- certSecret:
- properties:
- key:
- type: string
- name:
- type: string
- volumeName:
- type: string
- required:
- - key
- type: object
- clientCACertSecret:
- properties:
- key:
- type: string
- name:
- type: string
- volumeName:
- type: string
- required:
- - key
- type: object
- keySecret:
- properties:
- key:
- type: string
- name:
- type: string
- volumeName:
- type: string
- required:
- - key
- type: object
- type: object
- type: object
- service:
- properties:
- annotations:
- additionalProperties:
- type: string
- type: object
- clusterIP:
- type: string
- type: object
- sidecarContainers:
- x-kubernetes-preserve-unknown-fields: true
- terminationGracePeriodSeconds:
- format: int64
- type: integer
- tolerations:
- x-kubernetes-preserve-unknown-fields: true
- topologySpreadConstraints:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- globalLockserver:
- properties:
- address:
- type: string
- implementation:
- type: string
- rootPath:
- type: string
- required:
- - address
- - implementation
- - rootPath
- type: object
- imagePullPolicies:
- properties:
- mysqld:
- type: string
- mysqldExporter:
- type: string
- vtadmin:
- type: string
- vtbackup:
- type: string
- vtctld:
- type: string
- vtgate:
- type: string
- vtorc:
- type: string
- vttablet:
- type: string
- type: object
- imagePullSecrets:
- items:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- type: array
- images:
- properties:
- vtgate:
- type: string
- type: object
- lockserver:
- properties:
- cellInfoAddress:
- type: string
- etcd:
- properties:
- advertisePeerURLs:
- items:
- type: string
- maxItems: 3
- minItems: 3
- type: array
- affinity:
- x-kubernetes-preserve-unknown-fields: true
- annotations:
- additionalProperties:
- type: string
- type: object
- clientService:
- properties:
- annotations:
- additionalProperties:
- type: string
- type: object
- clusterIP:
- type: string
- type: object
- createClientService:
- type: boolean
- createPDB:
- type: boolean
- createPeerService:
- type: boolean
- dataVolumeClaimTemplate:
- properties:
- accessModes:
- items:
- type: string
- type: array
- dataSource:
- properties:
- apiGroup:
- type: string
- kind:
- type: string
- name:
- type: string
- required:
- - kind
- - name
- type: object
- x-kubernetes-map-type: atomic
- dataSourceRef:
- properties:
- apiGroup:
- type: string
- kind:
- type: string
- name:
- type: string
- namespace:
- type: string
- required:
- - kind
- - name
- type: object
- resources:
- properties:
- claims:
- items:
+ containerResource:
+ properties:
+ container:
+ type: string
+ name:
+ type: string
+ target:
+ properties:
+ averageUtilization:
+ format: int32
+ type: integer
+ averageValue:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type:
+ type: string
+ value:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ required:
+ - type
+ type: object
+ required:
+ - container
+ - name
+ - target
+ type: object
+ external:
+ properties:
+ metric:
properties:
name:
type: string
+ selector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
required:
- name
type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- limits:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- requests:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- type: object
- selector:
- properties:
- matchExpressions:
- items:
+ target:
properties:
- key:
- type: string
- operator:
+ averageUtilization:
+ format: int32
+ type: integer
+ averageValue:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type:
type: string
- values:
- items:
- type: string
- type: array
+ value:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
required:
- - key
- - operator
+ - type
type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- x-kubernetes-map-type: atomic
- storageClassName:
- type: string
- volumeMode:
- type: string
- volumeName:
- type: string
- type: object
- extraEnv:
- items:
- properties:
- name:
- type: string
- value:
- type: string
- valueFrom:
+ required:
+ - metric
+ - target
+ type: object
+ object:
properties:
- configMapKeyRef:
+ describedObject:
properties:
- key:
+ apiVersion:
+ type: string
+ kind:
type: string
name:
type: string
- optional:
- type: boolean
required:
- - key
+ - kind
+ - name
type: object
- x-kubernetes-map-type: atomic
- fieldRef:
+ metric:
properties:
- apiVersion:
- type: string
- fieldPath:
+ name:
type: string
+ selector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
required:
- - fieldPath
+ - name
type: object
- x-kubernetes-map-type: atomic
- resourceFieldRef:
+ target:
properties:
- containerName:
+ averageUtilization:
+ format: int32
+ type: integer
+ averageValue:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type:
type: string
- divisor:
+ value:
anyOf:
- type: integer
- type: string
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
- resource:
+ required:
+ - type
+ type: object
+ required:
+ - describedObject
+ - metric
+ - target
+ type: object
+ pods:
+ properties:
+ metric:
+ properties:
+ name:
type: string
+ selector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
required:
- - resource
+ - name
type: object
- x-kubernetes-map-type: atomic
- secretKeyRef:
+ target:
properties:
- key:
+ averageUtilization:
+ format: int32
+ type: integer
+ averageValue:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type:
type: string
- name:
+ value:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ required:
+ - type
+ type: object
+ required:
+ - metric
+ - target
+ type: object
+ resource:
+ properties:
+ name:
+ type: string
+ target:
+ properties:
+ averageUtilization:
+ format: int32
+ type: integer
+ averageValue:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type:
type: string
- optional:
- type: boolean
+ value:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
required:
- - key
+ - type
type: object
- x-kubernetes-map-type: atomic
+ required:
+ - name
+ - target
type: object
- required:
- - name
- type: object
- type: array
- extraFlags:
- additionalProperties:
- type: string
- type: object
- extraLabels:
- additionalProperties:
- type: string
- type: object
- extraVolumeMounts:
- items:
- properties:
- mountPath:
- type: string
- mountPropagation:
- type: string
- name:
- type: string
- readOnly:
- type: boolean
- subPath:
- type: string
- subPathExpr:
+ type:
type: string
required:
- - mountPath
- - name
- type: object
- type: array
- extraVolumes:
- x-kubernetes-preserve-unknown-fields: true
- image:
- type: string
- imagePullPolicy:
- type: string
- imagePullSecrets:
- items:
- properties:
- name:
- type: string
+ - type
type: object
- x-kubernetes-map-type: atomic
type: array
- initContainers:
- x-kubernetes-preserve-unknown-fields: true
- localMemberIndex:
+ x-kubernetes-list-type: atomic
+ minReplicas:
format: int32
- maximum: 3
- minimum: 1
+ minimum: 0
type: integer
- peerService:
- properties:
- annotations:
- additionalProperties:
- type: string
- type: object
- clusterIP:
- type: string
- type: object
- resources:
- properties:
- claims:
- items:
+ type: object
+ extraEnv:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ valueFrom:
+ properties:
+ configMapKeyRef:
properties:
+ key:
+ type: string
name:
+ default: ""
type: string
+ optional:
+ type: boolean
required:
- - name
+ - key
type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- limits:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- requests:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- type: object
- sidecarContainers:
- x-kubernetes-preserve-unknown-fields: true
- tolerations:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- external:
- properties:
- address:
- type: string
- implementation:
- type: string
- rootPath:
- type: string
- required:
- - address
- - implementation
- - rootPath
- type: object
- type: object
- name:
- maxLength: 63
- minLength: 1
- pattern: ^[A-Za-z0-9]([_.A-Za-z0-9]*[A-Za-z0-9])?$
- type: string
- topologyReconciliation:
- properties:
- pruneCells:
- type: boolean
- pruneKeyspaces:
- type: boolean
- pruneShardCells:
- type: boolean
- pruneShards:
- type: boolean
- pruneSrvKeyspaces:
- type: boolean
- pruneTablets:
- type: boolean
- registerCells:
- type: boolean
- registerCellsAliases:
- type: boolean
- type: object
- zone:
- type: string
- required:
- - allCells
- - globalLockserver
- - name
- type: object
- status:
- properties:
- gateway:
- properties:
- available:
- type: string
- serviceName:
- type: string
- type: object
- idle:
- type: string
- keyspaces:
- additionalProperties:
- type: object
- type: object
- lockserver:
- properties:
- etcd:
- properties:
- available:
- type: string
- clientServiceName:
- type: string
- observedGeneration:
- format: int64
- type: integer
- type: object
- type: object
- observedGeneration:
- format: int64
- type: integer
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.11.3
- creationTimestamp: null
- name: vitessclusters.planetscale.com
-spec:
- group: planetscale.com
- names:
- kind: VitessCluster
- listKind: VitessClusterList
- plural: vitessclusters
- shortNames:
- - vt
- singular: vitesscluster
- scope: Namespaced
- versions:
- - name: v2
- schema:
- openAPIV3Schema:
- properties:
- apiVersion:
- type: string
- kind:
- type: string
- metadata:
- type: object
- spec:
- properties:
- backup:
- properties:
- engine:
- enum:
- - builtin
- - xtrabackup
- - mysqlshell
- type: string
- locations:
- items:
- properties:
- annotations:
- additionalProperties:
- type: string
- type: object
- azblob:
- properties:
- account:
- minLength: 1
- type: string
- authSecret:
- properties:
- key:
- type: string
- name:
- type: string
- volumeName:
- type: string
- required:
- - key
- type: object
- container:
- minLength: 1
- type: string
- keyPrefix:
- maxLength: 256
- pattern: ^[^\r\n]*$
- type: string
- required:
- - account
- - authSecret
- - container
- type: object
- ceph:
- properties:
- authSecret:
+ x-kubernetes-map-type: atomic
+ fieldRef:
properties:
- key:
- type: string
- name:
+ apiVersion:
type: string
- volumeName:
+ fieldPath:
type: string
required:
- - key
+ - fieldPath
type: object
- required:
- - authSecret
- type: object
- gcs:
- properties:
- authSecret:
+ x-kubernetes-map-type: atomic
+ resourceFieldRef:
properties:
- key:
- type: string
- name:
+ containerName:
type: string
- volumeName:
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
type: string
required:
- - key
+ - resource
type: object
- bucket:
- minLength: 1
- type: string
- keyPrefix:
- maxLength: 256
- pattern: ^[^\r\n]*$
- type: string
- required:
- - bucket
- type: object
- name:
- maxLength: 63
- pattern: ^[A-Za-z0-9]([A-Za-z0-9-_.]*[A-Za-z0-9])?$
- type: string
- s3:
- properties:
- authSecret:
+ x-kubernetes-map-type: atomic
+ secretKeyRef:
properties:
key:
type: string
name:
+ default: ""
type: string
- volumeName:
- type: string
+ optional:
+ type: boolean
required:
- key
type: object
- bucket:
- minLength: 1
- type: string
- endpoint:
- type: string
- forcePathStyle:
- type: boolean
- keyPrefix:
- maxLength: 256
- pattern: ^[^\r\n]*$
- type: string
- region:
- minLength: 1
- type: string
- required:
- - bucket
- - region
+ x-kubernetes-map-type: atomic
type: object
- volume:
- x-kubernetes-preserve-unknown-fields: true
- volumeSubPath:
- type: string
+ required:
+ - name
type: object
- minItems: 1
type: array
- schedules:
+ extraFlags:
+ additionalProperties:
+ type: string
+ type: object
+ extraLabels:
+ additionalProperties:
+ type: string
+ type: object
+ extraVolumeMounts:
items:
properties:
- affinity:
- x-kubernetes-preserve-unknown-fields: true
- allowedMissedRun:
- minimum: 0
- type: integer
- annotations:
- additionalProperties:
- type: string
- type: object
- concurrencyPolicy:
- enum:
- - Allow
- - Forbid
- example: Forbid
+ mountPath:
type: string
- failedJobsHistoryLimit:
- format: int32
- minimum: 0
- type: integer
- jobTimeoutMinute:
- default: 10
- format: int32
+ mountPropagation:
+ type: string
+ name:
+ type: string
+ readOnly:
+ type: boolean
+ recursiveReadOnly:
+ type: string
+ subPath:
+ type: string
+ subPathExpr:
+ type: string
+ required:
+ - mountPath
+ - name
+ type: object
+ type: array
+ extraVolumes:
+ x-kubernetes-preserve-unknown-fields: true
+ initContainers:
+ x-kubernetes-preserve-unknown-fields: true
+ lifecycle:
+ properties:
+ postStart:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ path:
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ x-kubernetes-int-or-string: true
+ scheme:
+ type: string
+ required:
+ - port
+ type: object
+ sleep:
+ properties:
+ seconds:
+ format: int64
+ type: integer
+ required:
+ - seconds
+ type: object
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ x-kubernetes-int-or-string: true
+ required:
+ - port
+ type: object
+ type: object
+ preStop:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ path:
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ x-kubernetes-int-or-string: true
+ scheme:
+ type: string
+ required:
+ - port
+ type: object
+ sleep:
+ properties:
+ seconds:
+ format: int64
+ type: integer
+ required:
+ - seconds
+ type: object
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ anyOf:
+ - type: integer
+ - type: string
+ x-kubernetes-int-or-string: true
+ required:
+ - port
+ type: object
+ type: object
+ type: object
+ replicas:
+ format: int32
+ minimum: 0
+ type: integer
+ resources:
+ properties:
+ claims:
+ items:
+ properties:
+ name:
+ type: string
+ request:
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ type: object
+ secureTransport:
+ properties:
+ required:
+ type: boolean
+ tls:
+ properties:
+ certSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ volumeName:
+ type: string
+ required:
+ - key
+ type: object
+ clientCACertSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ volumeName:
+ type: string
+ required:
+ - key
+ type: object
+ keySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ volumeName:
+ type: string
+ required:
+ - key
+ type: object
+ type: object
+ type: object
+ service:
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ type: object
+ clusterIP:
+ type: string
+ type: object
+ sidecarContainers:
+ x-kubernetes-preserve-unknown-fields: true
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ tolerations:
+ x-kubernetes-preserve-unknown-fields: true
+ topologySpreadConstraints:
+ x-kubernetes-preserve-unknown-fields: true
+ type: object
+ globalLockserver:
+ properties:
+ address:
+ type: string
+ implementation:
+ type: string
+ rootPath:
+ type: string
+ required:
+ - address
+ - implementation
+ - rootPath
+ type: object
+ imagePullPolicies:
+ properties:
+ mysqld:
+ type: string
+ mysqldExporter:
+ type: string
+ vtadmin:
+ type: string
+ vtbackup:
+ type: string
+ vtctld:
+ type: string
+ vtgate:
+ type: string
+ vtorc:
+ type: string
+ vttablet:
+ type: string
+ type: object
+ imagePullSecrets:
+ items:
+ properties:
+ name:
+ default: ""
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ type: array
+ images:
+ properties:
+ vtgate:
+ type: string
+ type: object
+ lockserver:
+ properties:
+ cellInfoAddress:
+ type: string
+ etcd:
+ properties:
+ advertisePeerURLs:
+ items:
+ type: string
+ maxItems: 3
+ minItems: 3
+ type: array
+ affinity:
+ x-kubernetes-preserve-unknown-fields: true
+ annotations:
+ additionalProperties:
+ type: string
+ type: object
+ clientService:
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ type: object
+ clusterIP:
+ type: string
+ type: object
+ createClientService:
+ type: boolean
+ createPDB:
+ type: boolean
+ createPeerService:
+ type: boolean
+ dataVolumeClaimTemplate:
+ properties:
+ accessModes:
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ dataSource:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ x-kubernetes-map-type: atomic
+ dataSourceRef:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ resources:
+ properties:
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ type: object
+ selector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ storageClassName:
+ type: string
+ volumeAttributesClassName:
+ type: string
+ volumeMode:
+ type: string
+ volumeName:
+ type: string
+ type: object
+ extraEnv:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ valueFrom:
+ properties:
+ configMapKeyRef:
+ properties:
+ key:
+ type: string
+ name:
+ default: ""
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ required:
+ - fieldPath
+ type: object
+ x-kubernetes-map-type: atomic
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
+ type: string
+ required:
+ - resource
+ type: object
+ x-kubernetes-map-type: atomic
+ secretKeyRef:
+ properties:
+ key:
+ type: string
+ name:
+ default: ""
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ extraFlags:
+ additionalProperties:
+ type: string
+ type: object
+ extraLabels:
+ additionalProperties:
+ type: string
+ type: object
+ extraVolumeMounts:
+ items:
+ properties:
+ mountPath:
+ type: string
+ mountPropagation:
+ type: string
+ name:
+ type: string
+ readOnly:
+ type: boolean
+ recursiveReadOnly:
+ type: string
+ subPath:
+ type: string
+ subPathExpr:
+ type: string
+ required:
+ - mountPath
+ - name
+ type: object
+ type: array
+ extraVolumes:
+ x-kubernetes-preserve-unknown-fields: true
+ image:
+ type: string
+ imagePullPolicy:
+ type: string
+ imagePullSecrets:
+ items:
+ properties:
+ name:
+ default: ""
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ type: array
+ initContainers:
+ x-kubernetes-preserve-unknown-fields: true
+ localMemberIndex:
+ format: int32
+ maximum: 3
+ minimum: 1
+ type: integer
+ peerService:
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ type: object
+ clusterIP:
+ type: string
+ type: object
+ resources:
+ properties:
+ claims:
+ items:
+ properties:
+ name:
+ type: string
+ request:
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ type: object
+ sidecarContainers:
+ x-kubernetes-preserve-unknown-fields: true
+ tolerations:
+ x-kubernetes-preserve-unknown-fields: true
+ type: object
+ external:
+ properties:
+ address:
+ type: string
+ implementation:
+ type: string
+ rootPath:
+ type: string
+ required:
+ - address
+ - implementation
+ - rootPath
+ type: object
+ type: object
+ name:
+ maxLength: 63
+ minLength: 1
+ pattern: ^[A-Za-z0-9]([_.A-Za-z0-9]*[A-Za-z0-9])?$
+ type: string
+ topologyReconciliation:
+ properties:
+ pruneCells:
+ type: boolean
+ pruneKeyspaces:
+ type: boolean
+ pruneShardCells:
+ type: boolean
+ pruneShards:
+ type: boolean
+ pruneSrvKeyspaces:
+ type: boolean
+ pruneTablets:
+ type: boolean
+ registerCells:
+ type: boolean
+ registerCellsAliases:
+ type: boolean
+ type: object
+ zone:
+ type: string
+ required:
+ - allCells
+ - globalLockserver
+ - name
+ type: object
+ status:
+ properties:
+ gateway:
+ properties:
+ available:
+ type: string
+ labelSelector:
+ type: string
+ replicas:
+ format: int32
+ minimum: 0
+ type: integer
+ serviceName:
+ type: string
+ type: object
+ idle:
+ type: string
+ keyspaces:
+ additionalProperties:
+ type: object
+ type: object
+ lockserver:
+ properties:
+ etcd:
+ properties:
+ available:
+ type: string
+ clientServiceName:
+ type: string
+ observedGeneration:
+ format: int64
+ type: integer
+ type: object
+ type: object
+ observedGeneration:
+ format: int64
+ type: integer
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ scale:
+ labelSelectorPath: .status.gateway.labelSelector
+ specReplicasPath: .spec.gateway.replicas
+ statusReplicasPath: .status.gateway.replicas
+ status: {}
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.16.1
+ name: vitessclusters.planetscale.com
+spec:
+ group: planetscale.com
+ names:
+ kind: VitessCluster
+ listKind: VitessClusterList
+ plural: vitessclusters
+ shortNames:
+ - vt
+ singular: vitesscluster
+ scope: Namespaced
+ versions:
+ - name: v2
+ schema:
+ openAPIV3Schema:
+ properties:
+ apiVersion:
+ type: string
+ kind:
+ type: string
+ metadata:
+ type: object
+ spec:
+ properties:
+ backup:
+ properties:
+ engine:
+ enum:
+ - builtin
+ - xtrabackup
+ - mysqlshell
+ type: string
+ locations:
+ items:
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ type: object
+ azblob:
+ properties:
+ account:
+ minLength: 1
+ type: string
+ authSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ volumeName:
+ type: string
+ required:
+ - key
+ type: object
+ container:
+ minLength: 1
+ type: string
+ keyPrefix:
+ maxLength: 256
+ pattern: ^[^\r\n]*$
+ type: string
+ required:
+ - account
+ - authSecret
+ - container
+ type: object
+ ceph:
+ properties:
+ authSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ volumeName:
+ type: string
+ required:
+ - key
+ type: object
+ required:
+ - authSecret
+ type: object
+ gcs:
+ properties:
+ authSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ volumeName:
+ type: string
+ required:
+ - key
+ type: object
+ bucket:
+ minLength: 1
+ type: string
+ keyPrefix:
+ maxLength: 256
+ pattern: ^[^\r\n]*$
+ type: string
+ required:
+ - bucket
+ type: object
+ name:
+ maxLength: 63
+ pattern: ^[A-Za-z0-9]([A-Za-z0-9-_.]*[A-Za-z0-9])?$
+ type: string
+ s3:
+ properties:
+ authSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ volumeName:
+ type: string
+ required:
+ - key
+ type: object
+ bucket:
+ minLength: 1
+ type: string
+ endpoint:
+ type: string
+ forcePathStyle:
+ type: boolean
+ keyPrefix:
+ maxLength: 256
+ pattern: ^[^\r\n]*$
+ type: string
+ region:
+ minLength: 1
+ type: string
+ required:
+ - bucket
+ - region
+ type: object
+ volume:
+ x-kubernetes-preserve-unknown-fields: true
+ volumeSubPath:
+ type: string
+ type: object
+ minItems: 1
+ type: array
+ schedules:
+ items:
+ properties:
+ affinity:
+ x-kubernetes-preserve-unknown-fields: true
+ allowedMissedRun:
+ minimum: 0
+ type: integer
+ annotations:
+ additionalProperties:
+ type: string
+ type: object
+ concurrencyPolicy:
+ enum:
+ - Allow
+ - Forbid
+ example: Forbid
+ type: string
+ failedJobsHistoryLimit:
+ format: int32
+ minimum: 0
+ type: integer
+ jobTimeoutMinute:
+ default: 10
+ format: int32
minimum: 0
type: integer
name:
@@ -1675,115 +2043,452 @@ spec:
type: string
resources:
properties:
- claims:
+ claims:
+ items:
+ properties:
+ name:
+ type: string
+ request:
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ type: object
+ schedule:
+ example: 0 0 * * *
+ minLength: 0
+ type: string
+ startingDeadlineSeconds:
+ format: int64
+ minimum: 0
+ type: integer
+ strategies:
+ items:
+ properties:
+ extraFlags:
+ additionalProperties:
+ type: string
+ type: object
+ keyspace:
+ example: commerce
+ type: string
+ name:
+ enum:
+ - BackupShard
+ type: string
+ shard:
+ example: '-'
+ type: string
+ required:
+ - keyspace
+ - name
+ - shard
+ type: object
+ minItems: 1
+ type: array
+ successfulJobsHistoryLimit:
+ format: int32
+ minimum: 0
+ type: integer
+ suspend:
+ type: boolean
+ required:
+ - name
+ - resources
+ - schedule
+ - strategies
+ type: object
+ type: array
+ subcontroller:
+ properties:
+ serviceAccountName:
+ type: string
+ type: object
+ required:
+ - locations
+ type: object
+ cells:
+ items:
+ properties:
+ gateway:
+ properties:
+ affinity:
+ x-kubernetes-preserve-unknown-fields: true
+ annotations:
+ additionalProperties:
+ type: string
+ type: object
+ authentication:
+ properties:
+ static:
+ properties:
+ secret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ volumeName:
+ type: string
+ required:
+ - key
+ type: object
+ type: object
+ type: object
+ autoscaler:
+ properties:
+ behavior:
+ properties:
+ scaleDown:
+ properties:
+ policies:
+ items:
+ properties:
+ periodSeconds:
+ format: int32
+ type: integer
+ type:
+ type: string
+ value:
+ format: int32
+ type: integer
+ required:
+ - periodSeconds
+ - type
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ selectPolicy:
+ type: string
+ stabilizationWindowSeconds:
+ format: int32
+ type: integer
+ type: object
+ scaleUp:
+ properties:
+ policies:
+ items:
+ properties:
+ periodSeconds:
+ format: int32
+ type: integer
+ type:
+ type: string
+ value:
+ format: int32
+ type: integer
+ required:
+ - periodSeconds
+ - type
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ selectPolicy:
+ type: string
+ stabilizationWindowSeconds:
+ format: int32
+ type: integer
+ type: object
+ type: object
+ maxReplicas:
+ format: int32
+ minimum: 0
+ type: integer
+ metrics:
items:
properties:
- name:
+ containerResource:
+ properties:
+ container:
+ type: string
+ name:
+ type: string
+ target:
+ properties:
+ averageUtilization:
+ format: int32
+ type: integer
+ averageValue:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type:
+ type: string
+ value:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ required:
+ - type
+ type: object
+ required:
+ - container
+ - name
+ - target
+ type: object
+ external:
+ properties:
+ metric:
+ properties:
+ name:
+ type: string
+ selector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - name
+ type: object
+ target:
+ properties:
+ averageUtilization:
+ format: int32
+ type: integer
+ averageValue:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type:
+ type: string
+ value:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ required:
+ - type
+ type: object
+ required:
+ - metric
+ - target
+ type: object
+ object:
+ properties:
+ describedObject:
+ properties:
+ apiVersion:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ metric:
+ properties:
+ name:
+ type: string
+ selector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - name
+ type: object
+ target:
+ properties:
+ averageUtilization:
+ format: int32
+ type: integer
+ averageValue:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type:
+ type: string
+ value:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ required:
+ - type
+ type: object
+ required:
+ - describedObject
+ - metric
+ - target
+ type: object
+ pods:
+ properties:
+ metric:
+ properties:
+ name:
+ type: string
+ selector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - name
+ type: object
+ target:
+ properties:
+ averageUtilization:
+ format: int32
+ type: integer
+ averageValue:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type:
+ type: string
+ value:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ required:
+ - type
+ type: object
+ required:
+ - metric
+ - target
+ type: object
+ resource:
+ properties:
+ name:
+ type: string
+ target:
+ properties:
+ averageUtilization:
+ format: int32
+ type: integer
+ averageValue:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type:
+ type: string
+ value:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ required:
+ - type
+ type: object
+ required:
+ - name
+ - target
+ type: object
+ type:
type: string
required:
- - name
+ - type
type: object
type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- limits:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- requests:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- type: object
- schedule:
- example: 0 0 * * *
- minLength: 0
- type: string
- startingDeadlineSeconds:
- format: int64
- minimum: 0
- type: integer
- strategies:
- items:
- properties:
- extraFlags:
- additionalProperties:
- type: string
- type: object
- keyspace:
- example: commerce
- type: string
- name:
- enum:
- - BackupShard
- type: string
- shard:
- example: '-'
- type: string
- required:
- - keyspace
- - name
- - shard
- type: object
- minItems: 1
- type: array
- successfulJobsHistoryLimit:
- format: int32
- minimum: 0
- type: integer
- suspend:
- type: boolean
- required:
- - name
- - resources
- - schedule
- - strategies
- type: object
- type: array
- subcontroller:
- properties:
- serviceAccountName:
- type: string
- type: object
- required:
- - locations
- type: object
- cells:
- items:
- properties:
- gateway:
- properties:
- affinity:
- x-kubernetes-preserve-unknown-fields: true
- annotations:
- additionalProperties:
- type: string
- type: object
- authentication:
- properties:
- static:
- properties:
- secret:
- properties:
- key:
- type: string
- name:
- type: string
- volumeName:
- type: string
- required:
- - key
- type: object
- type: object
+ x-kubernetes-list-type: atomic
+ minReplicas:
+ format: int32
+ minimum: 0
+ type: integer
type: object
extraEnv:
items:
@@ -1799,6 +2504,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -1837,6 +2543,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -1868,6 +2575,8 @@ spec:
type: string
readOnly:
type: boolean
+ recursiveReadOnly:
+ type: string
subPath:
type: string
subPathExpr:
@@ -1891,6 +2600,7 @@ spec:
items:
type: string
type: array
+ x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@@ -1908,6 +2618,7 @@ spec:
- value
type: object
type: array
+ x-kubernetes-list-type: atomic
path:
type: string
port:
@@ -1920,6 +2631,14 @@ spec:
required:
- port
type: object
+ sleep:
+ properties:
+ seconds:
+ format: int64
+ type: integer
+ required:
+ - seconds
+ type: object
tcpSocket:
properties:
host:
@@ -1941,6 +2660,7 @@ spec:
items:
type: string
type: array
+ x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@@ -1958,6 +2678,7 @@ spec:
- value
type: object
type: array
+ x-kubernetes-list-type: atomic
path:
type: string
port:
@@ -1970,6 +2691,14 @@ spec:
required:
- port
type: object
+ sleep:
+ properties:
+ seconds:
+ format: int64
+ type: integer
+ required:
+ - seconds
+ type: object
tcpSocket:
properties:
host:
@@ -1995,6 +2724,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -2118,6 +2849,7 @@ spec:
items:
type: string
type: array
+ x-kubernetes-list-type: atomic
dataSource:
properties:
apiGroup:
@@ -2147,18 +2879,6 @@ spec:
type: object
resources:
properties:
- claims:
- items:
- properties:
- name:
- type: string
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
limits:
additionalProperties:
anyOf:
@@ -2189,11 +2909,13 @@ spec:
items:
type: string
type: array
+ x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
+ x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@@ -2202,6 +2924,8 @@ spec:
x-kubernetes-map-type: atomic
storageClassName:
type: string
+ volumeAttributesClassName:
+ type: string
volumeMode:
type: string
volumeName:
@@ -2221,6 +2945,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -2259,6 +2984,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -2290,6 +3016,8 @@ spec:
type: string
readOnly:
type: boolean
+ recursiveReadOnly:
+ type: string
subPath:
type: string
subPathExpr:
@@ -2309,6 +3037,7 @@ spec:
items:
properties:
name:
+ default: ""
type: string
type: object
x-kubernetes-map-type: atomic
@@ -2336,6 +3065,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -2442,6 +3173,7 @@ spec:
items:
type: string
type: array
+ x-kubernetes-list-type: atomic
dataSource:
properties:
apiGroup:
@@ -2471,18 +3203,6 @@ spec:
type: object
resources:
properties:
- claims:
- items:
- properties:
- name:
- type: string
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
limits:
additionalProperties:
anyOf:
@@ -2513,11 +3233,13 @@ spec:
items:
type: string
type: array
+ x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
+ x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@@ -2526,6 +3248,8 @@ spec:
x-kubernetes-map-type: atomic
storageClassName:
type: string
+ volumeAttributesClassName:
+ type: string
volumeMode:
type: string
volumeName:
@@ -2545,6 +3269,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -2583,6 +3308,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -2614,6 +3340,8 @@ spec:
type: string
readOnly:
type: boolean
+ recursiveReadOnly:
+ type: string
subPath:
type: string
subPathExpr:
@@ -2633,6 +3361,7 @@ spec:
items:
properties:
name:
+ default: ""
type: string
type: object
x-kubernetes-map-type: atomic
@@ -2660,6 +3389,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -2726,6 +3457,7 @@ spec:
items:
properties:
name:
+ default: ""
type: string
type: object
x-kubernetes-map-type: atomic
@@ -2847,6 +3579,7 @@ spec:
items:
type: string
type: array
+ x-kubernetes-list-type: atomic
dataSource:
properties:
apiGroup:
@@ -2876,18 +3609,6 @@ spec:
type: object
resources:
properties:
- claims:
- items:
- properties:
- name:
- type: string
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
limits:
additionalProperties:
anyOf:
@@ -2918,11 +3639,13 @@ spec:
items:
type: string
type: array
+ x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
+ x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@@ -2931,6 +3654,8 @@ spec:
x-kubernetes-map-type: atomic
storageClassName:
type: string
+ volumeAttributesClassName:
+ type: string
volumeMode:
type: string
volumeName:
@@ -2992,6 +3717,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -3030,6 +3756,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -3057,6 +3784,8 @@ spec:
type: string
readOnly:
type: boolean
+ recursiveReadOnly:
+ type: string
subPath:
type: string
subPathExpr:
@@ -3081,6 +3810,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -3117,6 +3848,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -3180,6 +3913,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -3285,6 +4020,7 @@ spec:
items:
type: string
type: array
+ x-kubernetes-list-type: atomic
dataSource:
properties:
apiGroup:
@@ -3314,18 +4050,6 @@ spec:
type: object
resources:
properties:
- claims:
- items:
- properties:
- name:
- type: string
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
limits:
additionalProperties:
anyOf:
@@ -3356,11 +4080,13 @@ spec:
items:
type: string
type: array
+ x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
+ x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@@ -3369,6 +4095,8 @@ spec:
x-kubernetes-map-type: atomic
storageClassName:
type: string
+ volumeAttributesClassName:
+ type: string
volumeMode:
type: string
volumeName:
@@ -3430,6 +4158,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -3468,6 +4197,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -3495,6 +4225,8 @@ spec:
type: string
readOnly:
type: boolean
+ recursiveReadOnly:
+ type: string
subPath:
type: string
subPathExpr:
@@ -3519,6 +4251,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -3555,6 +4289,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -3618,6 +4354,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -3697,6 +4435,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -3735,6 +4474,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -3766,6 +4506,8 @@ spec:
type: string
readOnly:
type: boolean
+ recursiveReadOnly:
+ type: string
subPath:
type: string
subPathExpr:
@@ -3786,6 +4528,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -3898,6 +4642,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -3936,6 +4681,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -3967,6 +4713,8 @@ spec:
type: string
readOnly:
type: boolean
+ recursiveReadOnly:
+ type: string
subPath:
type: string
subPathExpr:
@@ -3990,6 +4738,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -4047,6 +4797,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -4089,6 +4841,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -4127,6 +4880,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -4158,6 +4912,8 @@ spec:
type: string
readOnly:
type: boolean
+ recursiveReadOnly:
+ type: string
subPath:
type: string
subPathExpr:
@@ -4207,6 +4963,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -4350,8 +5108,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
- controller-gen.kubebuilder.io/version: v0.11.3
- creationTimestamp: null
+ controller-gen.kubebuilder.io/version: v0.16.1
name: vitesskeyspaces.planetscale.com
spec:
group: planetscale.com
@@ -4541,6 +5298,7 @@ spec:
items:
properties:
name:
+ default: ""
type: string
type: object
x-kubernetes-map-type: atomic
@@ -4635,6 +5393,7 @@ spec:
items:
type: string
type: array
+ x-kubernetes-list-type: atomic
dataSource:
properties:
apiGroup:
@@ -4664,18 +5423,6 @@ spec:
type: object
resources:
properties:
- claims:
- items:
- properties:
- name:
- type: string
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
limits:
additionalProperties:
anyOf:
@@ -4706,11 +5453,13 @@ spec:
items:
type: string
type: array
+ x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
+ x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@@ -4719,6 +5468,8 @@ spec:
x-kubernetes-map-type: atomic
storageClassName:
type: string
+ volumeAttributesClassName:
+ type: string
volumeMode:
type: string
volumeName:
@@ -4780,6 +5531,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -4818,6 +5570,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -4845,6 +5598,8 @@ spec:
type: string
readOnly:
type: boolean
+ recursiveReadOnly:
+ type: string
subPath:
type: string
subPathExpr:
@@ -4869,6 +5624,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -4905,6 +5662,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -4968,6 +5727,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -5073,6 +5834,7 @@ spec:
items:
type: string
type: array
+ x-kubernetes-list-type: atomic
dataSource:
properties:
apiGroup:
@@ -5102,18 +5864,6 @@ spec:
type: object
resources:
properties:
- claims:
- items:
- properties:
- name:
- type: string
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
limits:
additionalProperties:
anyOf:
@@ -5144,11 +5894,13 @@ spec:
items:
type: string
type: array
+ x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
+ x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@@ -5157,6 +5909,8 @@ spec:
x-kubernetes-map-type: atomic
storageClassName:
type: string
+ volumeAttributesClassName:
+ type: string
volumeMode:
type: string
volumeName:
@@ -5218,6 +5972,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -5256,6 +6011,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -5283,6 +6039,8 @@ spec:
type: string
readOnly:
type: boolean
+ recursiveReadOnly:
+ type: string
subPath:
type: string
subPathExpr:
@@ -5307,6 +6065,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -5343,6 +6103,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -5406,6 +6168,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -5519,6 +6283,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -5557,6 +6322,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -5588,6 +6354,8 @@ spec:
type: string
readOnly:
type: boolean
+ recursiveReadOnly:
+ type: string
subPath:
type: string
subPathExpr:
@@ -5608,6 +6376,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -5785,8 +6555,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
- controller-gen.kubebuilder.io/version: v0.11.3
- creationTimestamp: null
+ controller-gen.kubebuilder.io/version: v0.16.1
name: vitessshards.planetscale.com
spec:
group: planetscale.com
@@ -5985,6 +6754,7 @@ spec:
items:
properties:
name:
+ default: ""
type: string
type: object
x-kubernetes-map-type: atomic
@@ -6053,6 +6823,7 @@ spec:
items:
type: string
type: array
+ x-kubernetes-list-type: atomic
dataSource:
properties:
apiGroup:
@@ -6082,18 +6853,6 @@ spec:
type: object
resources:
properties:
- claims:
- items:
- properties:
- name:
- type: string
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
limits:
additionalProperties:
anyOf:
@@ -6124,11 +6883,13 @@ spec:
items:
type: string
type: array
+ x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
+ x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@@ -6137,6 +6898,8 @@ spec:
x-kubernetes-map-type: atomic
storageClassName:
type: string
+ volumeAttributesClassName:
+ type: string
volumeMode:
type: string
volumeName:
@@ -6198,6 +6961,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -6236,6 +7000,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -6263,6 +7028,8 @@ spec:
type: string
readOnly:
type: boolean
+ recursiveReadOnly:
+ type: string
subPath:
type: string
subPathExpr:
@@ -6287,6 +7054,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -6323,6 +7092,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -6386,6 +7157,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -6484,6 +7257,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -6522,6 +7296,7 @@ spec:
key:
type: string
name:
+ default: ""
type: string
optional:
type: boolean
@@ -6553,6 +7328,8 @@ spec:
type: string
readOnly:
type: boolean
+ recursiveReadOnly:
+ type: string
subPath:
type: string
subPathExpr:
@@ -6573,6 +7350,8 @@ spec:
properties:
name:
type: string
+ request:
+ type: string
required:
- name
type: object
@@ -6818,6 +7597,12 @@ rules:
- jobs
verbs:
- '*'
+ - apiGroups:
+ - autoscaling
+ resources:
+ - horizontalpodautoscalers
+ verbs:
+ - '*'
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
diff --git a/go.mod b/go.mod
index 26daaa0f15c..6fd800b80ab 100644
--- a/go.mod
+++ b/go.mod
@@ -1,9 +1,9 @@
module vitess.io/vitess
-go 1.23.1
+go 1.23.4
require (
- cloud.google.com/go/storage v1.43.0
+ cloud.google.com/go/storage v1.46.0
github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6
github.com/Azure/azure-pipeline-go v0.2.3
github.com/Azure/azure-storage-blob-go v0.15.0
@@ -15,10 +15,10 @@ require (
github.com/corpix/uarand v0.1.1 // indirect
github.com/dave/jennifer v1.7.1
github.com/evanphx/json-patch v5.9.0+incompatible
- github.com/fsnotify/fsnotify v1.7.0
+ github.com/fsnotify/fsnotify v1.8.0
github.com/go-sql-driver/mysql v1.7.1
- github.com/golang/glog v1.2.2
- github.com/golang/protobuf v1.5.4
+ github.com/golang/glog v1.2.3
+ github.com/golang/protobuf v1.5.4 // indirect
github.com/golang/snappy v0.0.4
github.com/google/go-cmp v0.6.0
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
@@ -27,28 +27,28 @@ require (
github.com/gorilla/mux v1.8.1
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0
- github.com/hashicorp/consul/api v1.29.4
+ github.com/hashicorp/consul/api v1.30.0
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
github.com/hashicorp/serf v0.10.1 // indirect
github.com/icrowley/fake v0.0.0-20180203215853-4178557ae428
- github.com/klauspost/compress v1.17.9
+ github.com/klauspost/compress v1.17.11
github.com/klauspost/pgzip v1.2.6
github.com/krishicks/yaml-patch v0.0.10
github.com/magiconair/properties v1.8.7 // indirect
github.com/minio/minio-go v0.0.0-20190131015406-c8a261de75c1
github.com/montanaflynn/stats v0.7.1
github.com/olekukonko/tablewriter v0.0.5
- github.com/opentracing-contrib/go-grpc v0.0.0-20240724223109-9dec25a38fa8
+ github.com/opentracing-contrib/go-grpc v0.1.0
github.com/opentracing/opentracing-go v1.2.0
github.com/patrickmn/go-cache v2.1.0+incompatible
- github.com/philhofer/fwd v1.1.3-0.20240612014219-fbbf4953d986 // indirect
+ github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect
github.com/pierrec/lz4 v2.6.1+incompatible
- github.com/pires/go-proxyproto v0.7.0
+ github.com/pires/go-proxyproto v0.8.0
github.com/pkg/errors v0.9.1
github.com/planetscale/pargzip v0.0.0-20201116224723-90c7fc03ea8a
- github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10
- github.com/prometheus/client_golang v1.20.3
- github.com/prometheus/common v0.59.1
+ github.com/planetscale/vtprotobuf v0.6.1-0.20241011083415-71c992bc3c87
+ github.com/prometheus/client_golang v1.20.5
+ github.com/prometheus/common v0.60.1
github.com/sjmudd/stopwatch v0.1.1
github.com/soheilhy/cmux v0.1.5
github.com/spf13/cobra v1.8.1
@@ -56,32 +56,32 @@ require (
github.com/spf13/viper v1.19.0
github.com/stretchr/testify v1.9.0
github.com/tchap/go-patricia v2.3.0+incompatible
- github.com/tidwall/gjson v1.17.3
- github.com/tinylib/msgp v1.2.1 // indirect
+ github.com/tidwall/gjson v1.18.0
+ github.com/tinylib/msgp v1.2.4 // indirect
github.com/uber/jaeger-client-go v2.30.0+incompatible
github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82
github.com/z-division/go-zookeeper v1.0.0
- go.etcd.io/etcd/api/v3 v3.5.16
- go.etcd.io/etcd/client/pkg/v3 v3.5.16
- go.etcd.io/etcd/client/v3 v3.5.16
+ go.etcd.io/etcd/api/v3 v3.5.17
+ go.etcd.io/etcd/client/pkg/v3 v3.5.17
+ go.etcd.io/etcd/client/v3 v3.5.17
go.uber.org/mock v0.2.0
- golang.org/x/crypto v0.27.0 // indirect
- golang.org/x/mod v0.21.0 // indirect
- golang.org/x/net v0.29.0
- golang.org/x/oauth2 v0.23.0
- golang.org/x/sys v0.25.0
- golang.org/x/term v0.24.0
- golang.org/x/text v0.18.0 // indirect
- golang.org/x/time v0.6.0
- golang.org/x/tools v0.25.0
- google.golang.org/api v0.197.0
- google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 // indirect
- google.golang.org/grpc v1.66.2
+ golang.org/x/crypto v0.31.0 // indirect
+ golang.org/x/mod v0.22.0 // indirect
+ golang.org/x/net v0.31.0
+ golang.org/x/oauth2 v0.24.0
+ golang.org/x/sys v0.28.0
+ golang.org/x/term v0.27.0
+ golang.org/x/text v0.21.0 // indirect
+ golang.org/x/time v0.8.0
+ golang.org/x/tools v0.27.0
+ google.golang.org/api v0.205.0
+ google.golang.org/genproto v0.0.0-20241113202542-65e8d215514f // indirect
+ google.golang.org/grpc v1.68.0
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0
google.golang.org/grpc/examples v0.0.0-20210430044426-28078834f35b
- google.golang.org/protobuf v1.34.2
- gopkg.in/DataDog/dd-trace-go.v1 v1.67.1
+ google.golang.org/protobuf v1.35.1
+ gopkg.in/DataDog/dd-trace-go.v1 v1.69.1
gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d // indirect
gopkg.in/ldap.v2 v2.5.1
sigs.k8s.io/yaml v1.4.0
@@ -89,12 +89,12 @@ require (
require (
github.com/DataDog/datadog-go/v5 v5.5.0
- github.com/Shopify/toxiproxy/v2 v2.9.0
- github.com/aws/aws-sdk-go-v2 v1.30.4
- github.com/aws/aws-sdk-go-v2/config v1.27.31
- github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.15
- github.com/aws/aws-sdk-go-v2/service/s3 v1.60.1
- github.com/aws/smithy-go v1.20.4
+ github.com/Shopify/toxiproxy/v2 v2.11.0
+ github.com/aws/aws-sdk-go-v2 v1.32.4
+ github.com/aws/aws-sdk-go-v2/config v1.28.3
+ github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.37
+ github.com/aws/aws-sdk-go-v2/service/s3 v1.66.3
+ github.com/aws/smithy-go v1.22.0
github.com/bndr/gotabulate v1.1.2
github.com/gammazero/deque v0.2.1
github.com/google/safehtml v0.1.0
@@ -107,48 +107,58 @@ require (
github.com/spf13/jwalterweatherman v1.1.0
github.com/xlab/treeprint v1.2.0
go.uber.org/goleak v1.3.0
- golang.org/x/exp v0.0.0-20240909161429-701f63a606c0
- golang.org/x/sync v0.8.0
+ golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f
+ golang.org/x/sync v0.10.0
gonum.org/v1/gonum v0.14.0
modernc.org/sqlite v1.33.1
)
require (
- cloud.google.com/go v0.115.1 // indirect
- cloud.google.com/go/auth v0.9.4 // indirect
- cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect
- cloud.google.com/go/compute/metadata v0.5.1 // indirect
- cloud.google.com/go/iam v1.2.1 // indirect
- github.com/DataDog/appsec-internal-go v1.7.0 // indirect
- github.com/DataDog/datadog-agent/pkg/obfuscate v0.57.0 // indirect
- github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.57.0 // indirect
- github.com/DataDog/go-libddwaf/v3 v3.4.0 // indirect
- github.com/DataDog/go-sqllexer v0.0.14 // indirect
+ cel.dev/expr v0.18.0 // indirect
+ cloud.google.com/go v0.116.0 // indirect
+ cloud.google.com/go/auth v0.10.2 // indirect
+ cloud.google.com/go/auth/oauth2adapt v0.2.5 // indirect
+ cloud.google.com/go/compute/metadata v0.5.2 // indirect
+ cloud.google.com/go/iam v1.2.2 // indirect
+ cloud.google.com/go/monitoring v1.21.2 // indirect
+ github.com/DataDog/appsec-internal-go v1.9.0 // indirect
+ github.com/DataDog/datadog-agent/pkg/obfuscate v0.59.0 // indirect
+ github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.59.0 // indirect
+ github.com/DataDog/go-libddwaf/v3 v3.5.1 // indirect
+ github.com/DataDog/go-sqllexer v0.0.17 // indirect
github.com/DataDog/go-tuf v1.1.0-0.5.2 // indirect
github.com/DataDog/sketches-go v1.4.6 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.49.0 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.49.0 // indirect
github.com/Microsoft/go-winio v0.6.2 // indirect
- github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4 // indirect
- github.com/aws/aws-sdk-go-v2/credentials v1.17.30 // indirect
- github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12 // indirect
- github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16 // indirect
- github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.16 // indirect
+ github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.6 // indirect
+ github.com/aws/aws-sdk-go-v2/credentials v1.17.44 // indirect
+ github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.19 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.23 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.23 // indirect
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect
- github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.16 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.18 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.16 // indirect
- github.com/aws/aws-sdk-go-v2/service/sso v1.22.5 // indirect
- github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5 // indirect
- github.com/aws/aws-sdk-go-v2/service/sts v1.30.5 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.23 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.0 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.4 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.4 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.4 // indirect
+ github.com/aws/aws-sdk-go-v2/service/sso v1.24.5 // indirect
+ github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.4 // indirect
+ github.com/aws/aws-sdk-go-v2/service/sts v1.32.4 // indirect
github.com/beorn7/perks v1.0.1 // indirect
+ github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect
+ github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 // indirect
github.com/coreos/go-semver v0.3.1 // indirect
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
- github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect
+ github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
- github.com/ebitengine/purego v0.7.1 // indirect
- github.com/fatih/color v1.17.0 // indirect
+ github.com/eapache/queue/v2 v2.0.0-20230407133247-75960ed334e4 // indirect
+ github.com/ebitengine/purego v0.8.1 // indirect
+ github.com/envoyproxy/go-control-plane v0.13.1 // indirect
+ github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect
+ github.com/fatih/color v1.18.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
@@ -156,15 +166,18 @@ require (
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/google/s2a-go v0.1.8 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect
- github.com/googleapis/gax-go/v2 v2.13.0 // indirect
+ github.com/googleapis/gax-go/v2 v2.14.0 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/go-hclog v1.6.3 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/hashicorp/go-rootcerts v1.0.2 // indirect
+ github.com/hashicorp/go-secure-stdlib/parseutil v0.1.8 // indirect
+ github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect
+ github.com/hashicorp/go-sockaddr v1.0.7 // indirect
github.com/hashicorp/golang-lru v1.0.2 // indirect
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
- github.com/hashicorp/hcl v1.0.1-vault-5 // indirect
+ github.com/hashicorp/hcl v1.0.1-vault-7 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-ieproxy v0.0.12 // indirect
@@ -182,8 +195,9 @@ require (
github.com/prometheus/procfs v0.15.1 // indirect
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
github.com/rivo/uniseg v0.4.7 // indirect
- github.com/rogpeppe/go-internal v1.12.0 // indirect
+ github.com/rogpeppe/go-internal v1.13.1 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
+ github.com/ryanuber/go-glob v1.0.0 // indirect
github.com/sagikazarmark/locafero v0.6.0 // indirect
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
github.com/secure-systems-lab/go-securesystemslib v0.8.0 // indirect
@@ -193,22 +207,26 @@ require (
github.com/tidwall/match v1.1.1 // indirect
github.com/tidwall/pretty v1.2.1 // indirect
go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.55.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 // indirect
- go.opentelemetry.io/otel v1.30.0 // indirect
- go.opentelemetry.io/otel/metric v1.30.0 // indirect
- go.opentelemetry.io/otel/trace v1.30.0 // indirect
+ go.opentelemetry.io/contrib/detectors/gcp v1.32.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.57.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.57.0 // indirect
+ go.opentelemetry.io/otel v1.32.0 // indirect
+ go.opentelemetry.io/otel/metric v1.32.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.32.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.32.0 // indirect
+ go.opentelemetry.io/otel/trace v1.32.0 // indirect
go.uber.org/atomic v1.11.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20241113202542-65e8d215514f // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20241113202542-65e8d215514f // indirect
+ google.golang.org/grpc/stats/opentelemetry v0.0.0-20241028142157-ada6787961b3 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
- modernc.org/gc/v3 v3.0.0-20240801135723-a856999a2e4a // indirect
- modernc.org/libc v1.60.1 // indirect
+ modernc.org/gc/v3 v3.0.0-20241004144649-1aea3fae8852 // indirect
+ modernc.org/libc v1.61.0 // indirect
modernc.org/mathutil v1.6.0 // indirect
modernc.org/memory v1.8.0 // indirect
modernc.org/strutil v1.2.0 // indirect
diff --git a/go.sum b/go.sum
index 5258e8f05fa..3a7c5e07599 100644
--- a/go.sum
+++ b/go.sum
@@ -1,19 +1,27 @@
+cel.dev/expr v0.18.0 h1:CJ6drgk+Hf96lkLikr4rFf19WrU0BOWEihyZnI2TAzo=
+cel.dev/expr v0.18.0/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw=
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.115.1 h1:Jo0SM9cQnSkYfp44+v+NQXHpcHqlnRJk2qxh6yvxxxQ=
-cloud.google.com/go v0.115.1/go.mod h1:DuujITeaufu3gL68/lOFIirVNJwQeyf5UXyi+Wbgknc=
-cloud.google.com/go/auth v0.9.4 h1:DxF7imbEbiFu9+zdKC6cKBko1e8XeJnipNqIbWZ+kDI=
-cloud.google.com/go/auth v0.9.4/go.mod h1:SHia8n6//Ya940F1rLimhJCjjx7KE17t0ctFEci3HkA=
-cloud.google.com/go/auth/oauth2adapt v0.2.4 h1:0GWE/FUsXhf6C+jAkWgYm7X9tK8cuEIfy19DBn6B6bY=
-cloud.google.com/go/auth/oauth2adapt v0.2.4/go.mod h1:jC/jOpwFP6JBxhB3P5Rr0a9HLMC/Pe3eaL4NmdvqPtc=
-cloud.google.com/go/compute/metadata v0.5.1 h1:NM6oZeZNlYjiwYje+sYFjEpP0Q0zCan1bmQW/KmIrGs=
-cloud.google.com/go/compute/metadata v0.5.1/go.mod h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k=
-cloud.google.com/go/iam v1.2.1 h1:QFct02HRb7H12J/3utj0qf5tobFh9V4vR6h9eX5EBRU=
-cloud.google.com/go/iam v1.2.1/go.mod h1:3VUIJDPpwT6p/amXRC5GY8fCCh70lxPygguVtI0Z4/g=
-cloud.google.com/go/longrunning v0.6.0 h1:mM1ZmaNsQsnb+5n1DNPeL0KwQd9jQRqSqSDEkBZr+aI=
-cloud.google.com/go/longrunning v0.6.0/go.mod h1:uHzSZqW89h7/pasCWNYdUpwGz3PcVWhrWupreVPYLts=
-cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyXFs=
-cloud.google.com/go/storage v1.43.0/go.mod h1:ajvxEa7WmZS1PxvKRq4bq0tFT3vMd502JwstCcYv0Q0=
+cloud.google.com/go v0.116.0 h1:B3fRrSDkLRt5qSHWe40ERJvhvnQwdZiHu0bJOpldweE=
+cloud.google.com/go v0.116.0/go.mod h1:cEPSRWPzZEswwdr9BxE6ChEn01dWlTaF05LiC2Xs70U=
+cloud.google.com/go/auth v0.10.2 h1:oKF7rgBfSHdp/kuhXtqU/tNDr0mZqhYbEh+6SiqzkKo=
+cloud.google.com/go/auth v0.10.2/go.mod h1:xxA5AqpDrvS+Gkmo9RqrGGRh6WSNKKOXhY3zNOr38tI=
+cloud.google.com/go/auth/oauth2adapt v0.2.5 h1:2p29+dePqsCHPP1bqDJcKj4qxRyYCcbzKpFyKGt3MTk=
+cloud.google.com/go/auth/oauth2adapt v0.2.5/go.mod h1:AlmsELtlEBnaNTL7jCj8VQFLy6mbZv0s4Q7NGBeQ5E8=
+cloud.google.com/go/compute/metadata v0.5.2 h1:UxK4uu/Tn+I3p2dYWTfiX4wva7aYlKixAHn3fyqngqo=
+cloud.google.com/go/compute/metadata v0.5.2/go.mod h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k=
+cloud.google.com/go/iam v1.2.2 h1:ozUSofHUGf/F4tCNy/mu9tHLTaxZFLOUiKzjcgWHGIA=
+cloud.google.com/go/iam v1.2.2/go.mod h1:0Ys8ccaZHdI1dEUilwzqng/6ps2YB6vRsjIe00/+6JY=
+cloud.google.com/go/logging v1.12.0 h1:ex1igYcGFd4S/RZWOCU51StlIEuey5bjqwH9ZYjHibk=
+cloud.google.com/go/logging v1.12.0/go.mod h1:wwYBt5HlYP1InnrtYI0wtwttpVU1rifnMT7RejksUAM=
+cloud.google.com/go/longrunning v0.6.2 h1:xjDfh1pQcWPEvnfjZmwjKQEcHnpz6lHjfy7Fo0MK+hc=
+cloud.google.com/go/longrunning v0.6.2/go.mod h1:k/vIs83RN4bE3YCswdXC5PFfWVILjm3hpEUlSko4PiI=
+cloud.google.com/go/monitoring v1.21.2 h1:FChwVtClH19E7pJ+e0xUhJPGksctZNVOk2UhMmblmdU=
+cloud.google.com/go/monitoring v1.21.2/go.mod h1:hS3pXvaG8KgWTSz+dAdyzPrGUYmi2Q+WFX8g2hqVEZU=
+cloud.google.com/go/storage v1.46.0 h1:OTXISBpFd8KaA2ClT3K3oRk8UGOcTHtrZ1bW88xKiic=
+cloud.google.com/go/storage v1.46.0/go.mod h1:lM+gMAW91EfXIeMTBmixRsKL/XCxysytoAgduVikjMk=
+cloud.google.com/go/trace v1.11.2 h1:4ZmaBdL8Ng/ajrgKqY5jfvzqMXbrDcBsUGXOT9aqTtI=
+cloud.google.com/go/trace v1.11.2/go.mod h1:bn7OwXd4pd5rFuAnTrzBuoZ4ax2XQeG3qNgYmfCy0Io=
github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 h1:He8afgbRMd7mFxO99hRNu+6tazq8nFF9lIwo9JFroBk=
github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8=
github.com/Azure/azure-pipeline-go v0.2.3 h1:7U9HBg1JFK3jHl5qmo4CTZKFTVgMwdFHMVtCdfBE21U=
@@ -32,25 +40,33 @@ github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZ
github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo=
github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/DataDog/appsec-internal-go v1.7.0 h1:iKRNLih83dJeVya3IoUfK+6HLD/hQsIbyBlfvLmAeb0=
-github.com/DataDog/appsec-internal-go v1.7.0/go.mod h1:wW0cRfWBo4C044jHGwYiyh5moQV2x0AhnwqMuiX7O/g=
-github.com/DataDog/datadog-agent/pkg/obfuscate v0.57.0 h1:5hk3X9Ymna7RqYzoR3K15AZNgASJ89LvJY48tpTsjj0=
-github.com/DataDog/datadog-agent/pkg/obfuscate v0.57.0/go.mod h1:Po5HwoDd4FmT/EqgrE9x7Zz4LjxtGBSIuNY1C1lppBQ=
-github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.57.0 h1:LplNAmMgZvGU7kKA0+4c1xWOjz828xweW5TCi8Mw9Q0=
-github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.57.0/go.mod h1:4Vo3SJ24uzfKHUHLoFa8t8o+LH+7TCQ7sPcZDtOpSP4=
+github.com/DataDog/appsec-internal-go v1.9.0 h1:cGOneFsg0JTRzWl5U2+og5dbtyW3N8XaYwc5nXe39Vw=
+github.com/DataDog/appsec-internal-go v1.9.0/go.mod h1:wW0cRfWBo4C044jHGwYiyh5moQV2x0AhnwqMuiX7O/g=
+github.com/DataDog/datadog-agent/pkg/obfuscate v0.59.0 h1:uX6/XoKMS7KYXe+R+vwgw+eRdmn16xfa9PDF5dxgumE=
+github.com/DataDog/datadog-agent/pkg/obfuscate v0.59.0/go.mod h1:ATVw8kr3U1Eqz3qBz9kS6WFDKji9XyoAsHKSlj3hPTM=
+github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.59.0 h1:9C8TVNz0IiNoD6tuEKPY/vMIUjB7kN0OaLyImhatWjg=
+github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.59.0/go.mod h1:c4th0IFaP0Q1ofRa0GcPB9hJWN+cmUoEfOI1Ub0O50A=
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI6LDrKU=
github.com/DataDog/datadog-go/v5 v5.5.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw=
-github.com/DataDog/go-libddwaf/v3 v3.4.0 h1:NJ2W2vhYaOm1OWr1LJCbdgp7ezG/XLJcQKBmjFwhSuM=
-github.com/DataDog/go-libddwaf/v3 v3.4.0/go.mod h1:n98d9nZ1gzenRSk53wz8l6d34ikxS+hs62A31Fqmyi4=
-github.com/DataDog/go-sqllexer v0.0.14 h1:xUQh2tLr/95LGxDzLmttLgTo/1gzFeOyuwrQa/Iig4Q=
-github.com/DataDog/go-sqllexer v0.0.14/go.mod h1:KwkYhpFEVIq+BfobkTC1vfqm4gTi65skV/DpDBXtexc=
+github.com/DataDog/go-libddwaf/v3 v3.5.1 h1:GWA4ln4DlLxiXm+X7HA/oj0ZLcdCwOS81KQitegRTyY=
+github.com/DataDog/go-libddwaf/v3 v3.5.1/go.mod h1:n98d9nZ1gzenRSk53wz8l6d34ikxS+hs62A31Fqmyi4=
+github.com/DataDog/go-sqllexer v0.0.17 h1:u47fJAVg/+5DA74ZW3w0Qu+3qXHd3GtnA8ZBYixdPrM=
+github.com/DataDog/go-sqllexer v0.0.17/go.mod h1:KwkYhpFEVIq+BfobkTC1vfqm4gTi65skV/DpDBXtexc=
github.com/DataDog/go-tuf v1.1.0-0.5.2 h1:4CagiIekonLSfL8GMHRHcHudo1fQnxELS9g4tiAupQ4=
github.com/DataDog/go-tuf v1.1.0-0.5.2/go.mod h1:zBcq6f654iVqmkk8n2Cx81E1JnNTMOAx1UEO/wZR+P0=
github.com/DataDog/gostackparse v0.7.0 h1:i7dLkXHvYzHV308hnkvVGDL3BR4FWl7IsXNPz/IGQh4=
github.com/DataDog/gostackparse v0.7.0/go.mod h1:lTfqcJKqS9KnXQGnyQMCugq3u1FP6UZMfWR0aitKFMM=
github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I=
github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 h1:3c8yed4lgqTt+oTQ+JNMDo+F4xprBf+O/il4ZC0nRLw=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0/go.mod h1:obipzmGjfSjam60XLwGfqUkJsfiheAl+TUjG+4yzyPM=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.49.0 h1:o90wcURuxekmXrtxmYWTyNla0+ZEHhud6DI1ZTxd1vI=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.49.0/go.mod h1:6fTWu4m3jocfUZLYF5KsZC1TUfRvEjs7lM4crme/irw=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.49.0 h1:jJKWl98inONJAr/IZrdFQUWcwUO95DLY1XMD1ZIut+g=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.49.0/go.mod h1:l2fIqmwB+FKSfvn3bAD/0i+AXAxhIZjTK2svT/mgUXs=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.49.0 h1:GYUJLfvd++4DMuMhCFLgLXvFwofIxh/qOwoGuS/LTew=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.49.0/go.mod h1:wRbFgBQUVm1YXrvWKofAEmq9HNJTDphbAaJSSX01KUI=
github.com/HdrHistogram/hdrhistogram-go v0.9.0 h1:dpujRju0R4M/QZzcnR1LH1qm+TVG3UzkWdp5tH1WMcg=
github.com/HdrHistogram/hdrhistogram-go v0.9.0/go.mod h1:nxrse8/Tzg2tg3DZcZjm6qEclQKK70g0KxO61gFFZD4=
github.com/Masterminds/glide v0.13.2/go.mod h1:STyF5vcenH/rUqTEv+/hBXlSTo7KYwg2oc2f4tzPWic=
@@ -59,8 +75,8 @@ github.com/Masterminds/vcs v1.13.0/go.mod h1:N09YCmOQr6RLxC6UNHzuVwAdodYbbnycGHS
github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
-github.com/Shopify/toxiproxy/v2 v2.9.0 h1:DIaDZG2/r/kv3Em6UxYBUVnnWl1mHlYTGFv+sTPV7VI=
-github.com/Shopify/toxiproxy/v2 v2.9.0/go.mod h1:2uPRyxR46fsx2yUr9i8zcejzdkWfK7p6G23jV/X6YNs=
+github.com/Shopify/toxiproxy/v2 v2.11.0 h1:iXm78nBN50T2BTs1Z8w1fdC0Y1kltkJZQEyMcYyCgGQ=
+github.com/Shopify/toxiproxy/v2 v2.11.0/go.mod h1:EPnGLFvhpcwVKCsbFZwyOq4PxnGg9cFbhMrVT3ROBEo=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
@@ -73,44 +89,44 @@ github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJ
github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4=
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
-github.com/aws/aws-sdk-go-v2 v1.30.4 h1:frhcagrVNrzmT95RJImMHgabt99vkXGslubDaDagTk8=
-github.com/aws/aws-sdk-go-v2 v1.30.4/go.mod h1:CT+ZPWXbYrci8chcARI3OmI/qgd+f6WtuLOoaIA8PR0=
-github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4 h1:70PVAiL15/aBMh5LThwgXdSQorVr91L127ttckI9QQU=
-github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4/go.mod h1:/MQxMqci8tlqDH+pjmoLu1i0tbWCUP1hhyMRuFxpQCw=
-github.com/aws/aws-sdk-go-v2/config v1.27.31 h1:kxBoRsjhT3pq0cKthgj6RU6bXTm/2SgdoUMyrVw0rAI=
-github.com/aws/aws-sdk-go-v2/config v1.27.31/go.mod h1:z04nZdSWFPaDwK3DdJOG2r+scLQzMYuJeW0CujEm9FM=
-github.com/aws/aws-sdk-go-v2/credentials v1.17.30 h1:aau/oYFtibVovr2rDt8FHlU17BTicFEMAi29V1U+L5Q=
-github.com/aws/aws-sdk-go-v2/credentials v1.17.30/go.mod h1:BPJ/yXV92ZVq6G8uYvbU0gSl8q94UB63nMT5ctNO38g=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12 h1:yjwoSyDZF8Jth+mUk5lSPJCkMC0lMy6FaCD51jm6ayE=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12/go.mod h1:fuR57fAgMk7ot3WcNQfb6rSEn+SUffl7ri+aa8uKysI=
-github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.15 h1:ijB7hr56MngOiELJe0C5aQRaBQ11LveNgWFyG02AUto=
-github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.15/go.mod h1:0QEmQSSWMVfiAk93l1/ayR9DQ9+jwni7gHS2NARZXB0=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16 h1:TNyt/+X43KJ9IJJMjKfa3bNTiZbUP7DeCxfbTROESwY=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16/go.mod h1:2DwJF39FlNAUiX5pAc0UNeiz16lK2t7IaFcm0LFHEgc=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.16 h1:jYfy8UPmd+6kJW5YhY0L1/KftReOGxI/4NtVSTh9O/I=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.16/go.mod h1:7ZfEPZxkW42Afq4uQB8H2E2e6ebh6mXTueEpYzjCzcs=
+github.com/aws/aws-sdk-go-v2 v1.32.4 h1:S13INUiTxgrPueTmrm5DZ+MiAo99zYzHEFh1UNkOxNE=
+github.com/aws/aws-sdk-go-v2 v1.32.4/go.mod h1:2SK5n0a2karNTv5tbP1SjsX0uhttou00v/HpXKM1ZUo=
+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.6 h1:pT3hpW0cOHRJx8Y0DfJUEQuqPild8jRGmSFmBgvydr0=
+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.6/go.mod h1:j/I2++U0xX+cr44QjHay4Cvxj6FUbnxrgmqN3H1jTZA=
+github.com/aws/aws-sdk-go-v2/config v1.28.3 h1:kL5uAptPcPKaJ4q0sDUjUIdueO18Q7JDzl64GpVwdOM=
+github.com/aws/aws-sdk-go-v2/config v1.28.3/go.mod h1:SPEn1KA8YbgQnwiJ/OISU4fz7+F6Fe309Jf0QTsRCl4=
+github.com/aws/aws-sdk-go-v2/credentials v1.17.44 h1:qqfs5kulLUHUEXlHEZXLJkgGoF3kkUeFUTVA585cFpU=
+github.com/aws/aws-sdk-go-v2/credentials v1.17.44/go.mod h1:0Lm2YJ8etJdEdw23s+q/9wTpOeo2HhNE97XcRa7T8MA=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.19 h1:woXadbf0c7enQ2UGCi8gW/WuKmE0xIzxBF/eD94jMKQ=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.19/go.mod h1:zminj5ucw7w0r65bP6nhyOd3xL6veAUMc3ElGMoLVb4=
+github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.37 h1:jHKR76E81sZvz1+x1vYYrHMxphG5LFBJPhSqEr4CLlE=
+github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.37/go.mod h1:iMkyPkmoJWQKzSOtaX+8oEJxAuqr7s8laxcqGDSHeII=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.23 h1:A2w6m6Tmr+BNXjDsr7M90zkWjsu4JXHwrzPg235STs4=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.23/go.mod h1:35EVp9wyeANdujZruvHiQUAo9E3vbhnIO1mTCAxMlY0=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.23 h1:pgYW9FCabt2M25MoHYCfMrVY2ghiiBKYWUVXfwZs+sU=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.23/go.mod h1:c48kLgzO19wAu3CPkDWC28JbaJ+hfQlsdl7I2+oqIbk=
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ=
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc=
-github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.16 h1:mimdLQkIX1zr8GIPY1ZtALdBQGxcASiBd2MOp8m/dMc=
-github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.16/go.mod h1:YHk6owoSwrIsok+cAH9PENCOGoH5PU2EllX4vLtSrsY=
-github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 h1:KypMCbLPPHEmf9DgMGw51jMj77VfGPAN2Kv4cfhlfgI=
-github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4/go.mod h1:Vz1JQXliGcQktFTN/LN6uGppAIRoLBR2bMvIMP0gOjc=
-github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.18 h1:GckUnpm4EJOAio1c8o25a+b3lVfwVzC9gnSBqiiNmZM=
-github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.18/go.mod h1:Br6+bxfG33Dk3ynmkhsW2Z/t9D4+lRqdLDNCKi85w0U=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18 h1:tJ5RnkHCiSH0jyd6gROjlJtNwov0eGYNz8s8nFcR0jQ=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18/go.mod h1:++NHzT+nAF7ZPrHPsA+ENvsXkOO8wEu+C6RXltAG4/c=
-github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.16 h1:jg16PhLPUiHIj8zYIW6bqzeQSuHVEiWnGA0Brz5Xv2I=
-github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.16/go.mod h1:Uyk1zE1VVdsHSU7096h/rwnXDzOzYQVl+FNPhPw7ShY=
-github.com/aws/aws-sdk-go-v2/service/s3 v1.60.1 h1:mx2ucgtv+MWzJesJY9Ig/8AFHgoE5FwLXwUVgW/FGdI=
-github.com/aws/aws-sdk-go-v2/service/s3 v1.60.1/go.mod h1:BSPI0EfnYUuNHPS0uqIo5VrRwzie+Fp+YhQOUs16sKI=
-github.com/aws/aws-sdk-go-v2/service/sso v1.22.5 h1:zCsFCKvbj25i7p1u94imVoO447I/sFv8qq+lGJhRN0c=
-github.com/aws/aws-sdk-go-v2/service/sso v1.22.5/go.mod h1:ZeDX1SnKsVlejeuz41GiajjZpRSWR7/42q/EyA/QEiM=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5 h1:SKvPgvdvmiTWoi0GAJ7AsJfOz3ngVkD/ERbs5pUnHNI=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5/go.mod h1:20sz31hv/WsPa3HhU3hfrIet2kxM4Pe0r20eBZ20Tac=
-github.com/aws/aws-sdk-go-v2/service/sts v1.30.5 h1:OMsEmCyz2i89XwRwPouAJvhj81wINh+4UK+k/0Yo/q8=
-github.com/aws/aws-sdk-go-v2/service/sts v1.30.5/go.mod h1:vmSqFK+BVIwVpDAGZB3CoCXHzurt4qBE8lf+I/kRTh0=
-github.com/aws/smithy-go v1.20.4 h1:2HK1zBdPgRbjFOHlfeQZfpC4r72MOb9bZkiFwggKO+4=
-github.com/aws/smithy-go v1.20.4/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg=
+github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.23 h1:1SZBDiRzzs3sNhOMVApyWPduWYGAX0imGy06XiBnCAM=
+github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.23/go.mod h1:i9TkxgbZmHVh2S0La6CAXtnyFhlCX/pJ0JsOvBAS6Mk=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.0 h1:TToQNkvGguu209puTojY/ozlqy2d/SFNcoLIqTFi42g=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.0/go.mod h1:0jp+ltwkf+SwG2fm/PKo8t4y8pJSgOCO4D8Lz3k0aHQ=
+github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.4 h1:aaPpoG15S2qHkWm4KlEyF01zovK1nW4BBbyXuHNSE90=
+github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.4/go.mod h1:eD9gS2EARTKgGr/W5xwgY/ik9z/zqpW+m/xOQbVxrMk=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.4 h1:tHxQi/XHPK0ctd/wdOw0t7Xrc2OxcRCnVzv8lwWPu0c=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.4/go.mod h1:4GQbF1vJzG60poZqWatZlhP31y8PGCCVTvIGPdaaYJ0=
+github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.4 h1:E5ZAVOmI2apR8ADb72Q63KqwwwdW1XcMeXIlrZ1Psjg=
+github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.4/go.mod h1:wezzqVUOVVdk+2Z/JzQT4NxAU0NbhRe5W8pIE72jsWI=
+github.com/aws/aws-sdk-go-v2/service/s3 v1.66.3 h1:neNOYJl72bHrz9ikAEED4VqWyND/Po0DnEx64RW6YM4=
+github.com/aws/aws-sdk-go-v2/service/s3 v1.66.3/go.mod h1:TMhLIyRIyoGVlaEMAt+ITMbwskSTpcGsCPDq91/ihY0=
+github.com/aws/aws-sdk-go-v2/service/sso v1.24.5 h1:HJwZwRt2Z2Tdec+m+fPjvdmkq2s9Ra+VR0hjF7V2o40=
+github.com/aws/aws-sdk-go-v2/service/sso v1.24.5/go.mod h1:wrMCEwjFPms+V86TCQQeOxQF/If4vT44FGIOFiMC2ck=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.4 h1:zcx9LiGWZ6i6pjdcoE9oXAB6mUdeyC36Ia/QEiIvYdg=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.4/go.mod h1:Tp/ly1cTjRLGBBmNccFumbZ8oqpZlpdhFf80SrRh4is=
+github.com/aws/aws-sdk-go-v2/service/sts v1.32.4 h1:yDxvkz3/uOKfxnv8YhzOi9m+2OGIxF+on3KOISbK5IU=
+github.com/aws/aws-sdk-go-v2/service/sts v1.32.4/go.mod h1:9XEUty5v5UAsMiFOBJrNibZgwCeOma73jgGwwhgffa8=
+github.com/aws/smithy-go v1.22.0 h1:uunKnWlcoL3zO7q+gG2Pk53joueEOsnNB28QdMsmiMM=
+github.com/aws/smithy-go v1.22.0/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg=
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
@@ -122,6 +138,8 @@ github.com/bndr/gotabulate v1.1.2/go.mod h1:0+8yUgaPTtLRTjf49E8oju7ojpU11YmXyvq1
github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs=
github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g=
+github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
@@ -129,6 +147,8 @@ github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6D
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 h1:QVw89YDxXxEe+l8gU8ETbOasdwEV+avkR75ZzsVV9WI=
+github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
github.com/codegangsta/cli v1.20.0/go.mod h1:/qJNoX69yVSKu5o4jLyXAENLRyk1uhi7zkbQ3slBdOA=
github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4=
github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec=
@@ -136,8 +156,9 @@ github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/corpix/uarand v0.1.1 h1:RMr1TWc9F4n5jiPDzFHtmaUXLKLNUFK0SgCLo4BhX/U=
github.com/corpix/uarand v0.1.1/go.mod h1:SFKZvkcRoLqVRFZ4u25xPmp6m9ktANfbpXZ7SJ0/FNU=
-github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4=
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
+github.com/cpuguy83/go-md2man/v2 v2.0.5 h1:ZtcqGrnekaHpVLArFSe4HK5DoKx1T0rq2DwVB0alcyc=
+github.com/cpuguy83/go-md2man/v2 v2.0.5/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/dave/jennifer v1.7.1 h1:B4jJJDHelWcDhlRQxWeo0Npa/pYKBLrirAQoTN45txo=
github.com/dave/jennifer v1.7.1/go.mod h1:nXbxhEmQfOZhWml3D1cDK5M1FLnMSozpbFN/m3RmGZc=
@@ -150,22 +171,25 @@ github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUn
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
-github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc=
github.com/eapache/queue/v2 v2.0.0-20230407133247-75960ed334e4 h1:8EXxF+tCLqaVk8AOC29zl2mnhQjwyLxxOTuhUazWRsg=
github.com/eapache/queue/v2 v2.0.0-20230407133247-75960ed334e4/go.mod h1:I5sHm0Y0T1u5YjlyqC5GVArM7aNZRUYtTjmJ8mPJFds=
-github.com/ebitengine/purego v0.7.1 h1:6/55d26lG3o9VCZX8lping+bZcmShseiqlh2bnUDiPA=
-github.com/ebitengine/purego v0.7.1/go.mod h1:ah1In8AOtksoNK6yk5z1HTJeUkC1Ez4Wk2idgGslMwQ=
+github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE=
+github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
+github.com/envoyproxy/go-control-plane v0.13.1 h1:vPfJZCkob6yTMEgS+0TwfTUfbHjfy/6vOJ8hUWX/uXE=
+github.com/envoyproxy/go-control-plane v0.13.1/go.mod h1:X45hY0mufo6Fd0KW3rqsGvQMw58jvjymeCzBU3mWyHw=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM=
+github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4=
github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls=
github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
-github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4=
-github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI=
+github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
+github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/form3tech-oss/jwt-go v3.2.2+incompatible h1:TcekIExNqud5crz4xD2pavyTgWiPvpYe4Xau31I0PRk=
@@ -174,12 +198,10 @@ github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHk
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
-github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
-github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
+github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M=
+github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
github.com/gammazero/deque v0.2.1 h1:qSdsbG6pgp6nL7A0+K/B7s12mcCY/5l5SIUpMOl+dC0=
github.com/gammazero/deque v0.2.1/go.mod h1:LFroj8x4cMYCukHJDbxFCkT+r9AndaJnFMuZDV34tuU=
-github.com/glebarez/go-sqlite v1.22.0 h1:uAcMJhaA6r3LHMTFgP0SifzgXg46yJkgxqyuyec+ruQ=
-github.com/glebarez/go-sqlite v1.22.0/go.mod h1:PlBIdHe0+aUEFn+r2/uthrWq4FxbzugL0L8Li6yQJbc=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
@@ -200,8 +222,8 @@ github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7a
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/glog v1.2.2 h1:1+mZ9upx1Dh6FmUTFR1naJ77miKiXgALjWOZ3NVFPmY=
-github.com/golang/glog v1.2.2/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
+github.com/golang/glog v1.2.3 h1:oDTdz9f5VGVVNGu/Q7UXKWYsD0873HXLHdJUNBsSEKM=
+github.com/golang/glog v1.2.3/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -254,8 +276,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw=
github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA=
-github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s=
-github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A=
+github.com/googleapis/gax-go/v2 v2.14.0 h1:f+jMrjBPl+DL9nI4IQzLUxMq7XrAqFYB7hBPqMNIe8o=
+github.com/googleapis/gax-go/v2 v2.14.0/go.mod h1:lhBCnjdLrWRaPvLWhmc8IS24m9mr07qSYnHncrgo+zk=
github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE=
github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w=
@@ -265,10 +287,8 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDa
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8=
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho=
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
-github.com/hashicorp/consul/api v1.29.4 h1:P6slzxDLBOxUSj3fWo2o65VuKtbtOXFi7TSSgtXutuE=
-github.com/hashicorp/consul/api v1.29.4/go.mod h1:HUlfw+l2Zy68ceJavv2zAyArl2fqhGWnMycyt56sBgg=
-github.com/hashicorp/consul/proto-public v0.6.2 h1:+DA/3g/IiKlJZb88NBn0ZgXrxJp2NlvCZdEyl+qxvL0=
-github.com/hashicorp/consul/proto-public v0.6.2/go.mod h1:cXXbOg74KBNGajC+o8RlA502Esf0R9prcoJgiOX/2Tg=
+github.com/hashicorp/consul/api v1.30.0 h1:ArHVMMILb1nQv8vZSGIwwQd2gtc+oSQZ6CalyiyH2XQ=
+github.com/hashicorp/consul/api v1.30.0/go.mod h1:B2uGchvaXVW2JhFoS8nqTxMD5PBykr4ebY4JWHTTeLM=
github.com/hashicorp/consul/sdk v0.16.1 h1:V8TxTnImoPD5cj0U9Spl0TUxcytjcbbJeADFF07KdHg=
github.com/hashicorp/consul/sdk v0.16.1/go.mod h1:fSXvwxB2hmh1FMZCNl6PwX0Q/1wdWtHJcZ7Ea5tns0s=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
@@ -292,13 +312,13 @@ github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9
github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc=
github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
-github.com/hashicorp/go-secure-stdlib/parseutil v0.1.7 h1:UpiO20jno/eV1eVZcxqWnUohyKRe1g8FPV/xH1s/2qs=
-github.com/hashicorp/go-secure-stdlib/parseutil v0.1.7/go.mod h1:QmrqtbKuxxSWTN3ETMPuB+VtEiBJ/A9XhoYGv8E1uD8=
+github.com/hashicorp/go-secure-stdlib/parseutil v0.1.8 h1:iBt4Ew4XEGLfh6/bPk4rSYmuZJGizr6/x/AEizP0CQc=
+github.com/hashicorp/go-secure-stdlib/parseutil v0.1.8/go.mod h1:aiJI+PIApBRQG7FZTEBx5GiiX+HbOHilUdNxUZi4eV0=
github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 h1:kes8mmyCpxJsI7FTwtzRqEy9CdjCtrXrXGuOpxEA7Ts=
github.com/hashicorp/go-secure-stdlib/strutil v0.1.2/go.mod h1:Gou2R9+il93BqX25LAKCLuM+y9U2T4hlwvT1yprcna4=
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
-github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc=
-github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A=
+github.com/hashicorp/go-sockaddr v1.0.7 h1:G+pTkSO01HpR5qCxg7lxfsFEZaG+C0VssTy/9dbT+Fw=
+github.com/hashicorp/go-sockaddr v1.0.7/go.mod h1:FZQbEYa1pxkQ7WLpyXJ6cbjpT8q0YgQaK/JakXqGyWw=
github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
@@ -311,8 +331,8 @@ github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iP
github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
-github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM=
-github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM=
+github.com/hashicorp/hcl v1.0.1-vault-7 h1:ag5OxFVy3QYTFTJODRzTKVZ6xvdfLLCA1cy/Y6xGI0I=
+github.com/hashicorp/hcl v1.0.1-vault-7/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM=
github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc=
github.com/hashicorp/memberlist v0.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM=
@@ -330,8 +350,8 @@ github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVY
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
-github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
+github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc=
+github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0=
github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU=
github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
@@ -411,8 +431,8 @@ github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7J
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
github.com/onsi/gomega v1.23.0 h1:/oxKu9c2HVap+F3PfKort2Hw5DEU+HGlW8n+tguWsys=
github.com/onsi/gomega v1.23.0/go.mod h1:Z/NWtiqwBrwUt4/2loMmHL63EDLnYHmVbuBpDr2vQAg=
-github.com/opentracing-contrib/go-grpc v0.0.0-20240724223109-9dec25a38fa8 h1:gHTSPFezGeYzTWCvpPM6lBanwXfuksik5Hy5MEHtvUA=
-github.com/opentracing-contrib/go-grpc v0.0.0-20240724223109-9dec25a38fa8/go.mod h1:z1k3YVSdAPSXtMUPS1TBWG5DaNWlT+VCbB0Qm3QJe74=
+github.com/opentracing-contrib/go-grpc v0.1.0 h1:9JHDtQXv6UL0tFF8KJB/4ApJgeOcaHp1h07d0PJjESc=
+github.com/opentracing-contrib/go-grpc v0.1.0/go.mod h1:i3/jx/TvJZ/HKidtT4XGIi/NosUEpzS9xjVJctbKZzI=
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs=
github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
@@ -425,12 +445,12 @@ github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaR
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M=
github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc=
-github.com/philhofer/fwd v1.1.3-0.20240612014219-fbbf4953d986 h1:jYi87L8j62qkXzaYHAQAhEapgukhenIMZRBKTNRLHJ4=
-github.com/philhofer/fwd v1.1.3-0.20240612014219-fbbf4953d986/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM=
+github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c h1:dAMKvw0MlJT1GshSTtih8C2gDs04w8dReiOGXrGLNoY=
+github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM=
github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM=
github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
-github.com/pires/go-proxyproto v0.7.0 h1:IukmRewDQFWC7kfnb66CSomk2q/seBuilHBYFwyq0Hs=
-github.com/pires/go-proxyproto v0.7.0/go.mod h1:Vz/1JPY/OACxWGQNIRY2BeyDmpoaWmEP40O9LbuiFR4=
+github.com/pires/go-proxyproto v0.8.0 h1:5unRmEAPbHXHuLjDg01CxJWf91cw3lKHc/0xzKpXEe0=
+github.com/pires/go-proxyproto v0.8.0/go.mod h1:iknsfgnH8EkjrMeMyvfKByp9TiBZCKZM0jx2xmKqnVY=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -438,8 +458,8 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/planetscale/pargzip v0.0.0-20201116224723-90c7fc03ea8a h1:y0OpQ4+5tKxeh9+H+2cVgASl9yMZYV9CILinKOiKafA=
github.com/planetscale/pargzip v0.0.0-20201116224723-90c7fc03ea8a/go.mod h1:GJFUzQuXIoB2Kjn1ZfDhJr/42D5nWOqRcIQVgCxTuIE=
-github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo=
-github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
+github.com/planetscale/vtprotobuf v0.6.1-0.20241011083415-71c992bc3c87 h1:ejBLlgnQdFWS/QGVdGYBRKsorfWl8rOysCC6aUOlCZc=
+github.com/planetscale/vtprotobuf v0.6.1-0.20241011083415-71c992bc3c87/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
@@ -448,8 +468,8 @@ github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSg
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
-github.com/prometheus/client_golang v1.20.3 h1:oPksm4K8B+Vt35tUhw6GbSNSgVlVSBH0qELP/7u83l4=
-github.com/prometheus/client_golang v1.20.3/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE=
+github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y=
+github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
@@ -458,8 +478,8 @@ github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p
github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
-github.com/prometheus/common v0.59.1 h1:LXb1quJHWm1P6wq/U824uxYi4Sg0oGvNeUm1z5dJoX0=
-github.com/prometheus/common v0.59.1/go.mod h1:GpWM7dewqmVYcd7SmRaiWVe9SSqjf0UrwnYnpEZNuT0=
+github.com/prometheus/common v0.60.1 h1:FUas6GcOw66yB/73KC+BOZoFJmbo/1pojoILArPAaSc=
+github.com/prometheus/common v0.60.1/go.mod h1:h0LYf1R1deLSKtD4Vdg8gy4RuOvENW2J/h19V5NADQw=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
@@ -473,8 +493,8 @@ github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
-github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
-github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
+github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
+github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
@@ -534,15 +554,15 @@ github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/tchap/go-patricia v2.3.0+incompatible h1:GkY4dP3cEfEASBPPkWd+AmjYxhmDkqO9/zg7R0lSQRs=
github.com/tchap/go-patricia v2.3.0+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I=
-github.com/tidwall/gjson v1.17.3 h1:bwWLZU7icoKRG+C+0PNwIKC6FCJO/Q3p2pZvuP0jN94=
-github.com/tidwall/gjson v1.17.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
+github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY=
+github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4=
github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
-github.com/tinylib/msgp v1.2.1 h1:6ypy2qcCznxpP4hpORzhtXyTqrBs7cfM9MCCWY8zsmU=
-github.com/tinylib/msgp v1.2.1/go.mod h1:2vIGs3lcUo8izAATNobrCHevYZC/LMsJtw4JPiYPHro=
+github.com/tinylib/msgp v1.2.4 h1:yLFeUGostXXSGW5vxfT5dXG/qzkn4schv2I7at5+hVU=
+github.com/tinylib/msgp v1.2.4/go.mod h1:ykjzy2wzgrlvpDCRc4LA8UXy6D8bzMSuAF3WD57Gok0=
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o=
github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
@@ -557,26 +577,30 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/z-division/go-zookeeper v1.0.0 h1:ULsCj0nP6+U1liDFWe+2oEF6o4amixoDcDlwEUghVUY=
github.com/z-division/go-zookeeper v1.0.0/go.mod h1:6X4UioQXpvyezJJl4J9NHAJKsoffCwy5wCaaTktXjOA=
-go.etcd.io/etcd/api/v3 v3.5.16 h1:WvmyJVbjWqK4R1E+B12RRHz3bRGy9XVfh++MgbN+6n0=
-go.etcd.io/etcd/api/v3 v3.5.16/go.mod h1:1P4SlIP/VwkDmGo3OlOD7faPeP8KDIFhqvciH5EfN28=
-go.etcd.io/etcd/client/pkg/v3 v3.5.16 h1:ZgY48uH6UvB+/7R9Yf4x574uCO3jIx0TRDyetSfId3Q=
-go.etcd.io/etcd/client/pkg/v3 v3.5.16/go.mod h1:V8acl8pcEK0Y2g19YlOV9m9ssUe6MgiDSobSoaBAM0E=
-go.etcd.io/etcd/client/v3 v3.5.16 h1:sSmVYOAHeC9doqi0gv7v86oY/BTld0SEFGaxsU9eRhE=
-go.etcd.io/etcd/client/v3 v3.5.16/go.mod h1:X+rExSGkyqxvu276cr2OwPLBaeqFu1cIl4vmRjAD/50=
+go.etcd.io/etcd/api/v3 v3.5.17 h1:cQB8eb8bxwuxOilBpMJAEo8fAONyrdXTHUNcMd8yT1w=
+go.etcd.io/etcd/api/v3 v3.5.17/go.mod h1:d1hvkRuXkts6PmaYk2Vrgqbv7H4ADfAKhyJqHNLJCB4=
+go.etcd.io/etcd/client/pkg/v3 v3.5.17 h1:XxnDXAWq2pnxqx76ljWwiQ9jylbpC4rvkAeRVOUKKVw=
+go.etcd.io/etcd/client/pkg/v3 v3.5.17/go.mod h1:4DqK1TKacp/86nJk4FLQqo6Mn2vvQFBmruW3pP14H/w=
+go.etcd.io/etcd/client/v3 v3.5.17 h1:o48sINNeWz5+pjy/Z0+HKpj/xSnBkuVhVvXkjEXbqZY=
+go.etcd.io/etcd/client/v3 v3.5.17/go.mod h1:j2d4eXTHWkT2ClBgnnEPm/Wuu7jsqku41v9DZ3OtjQo=
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.55.0 h1:hCq2hNMwsegUvPzI7sPOvtO9cqyy5GbWt/Ybp2xrx8Q=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.55.0/go.mod h1:LqaApwGx/oUmzsbqxkzuBvyoPpkxk3JQWnqfVrJ3wCA=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 h1:ZIg3ZT/aQ7AfKqdwp7ECpOK6vHqquXXuyTjIO8ZdmPs=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0/go.mod h1:DQAwmETtZV00skUwgD6+0U89g80NKsJE3DCKeLLPQMI=
-go.opentelemetry.io/otel v1.30.0 h1:F2t8sK4qf1fAmY9ua4ohFS/K+FUuOPemHUIXHtktrts=
-go.opentelemetry.io/otel v1.30.0/go.mod h1:tFw4Br9b7fOS+uEao81PJjVMjW/5fvNCbpsDIXqP0pc=
-go.opentelemetry.io/otel/metric v1.30.0 h1:4xNulvn9gjzo4hjg+wzIKG7iNFEaBMX00Qd4QIZs7+w=
-go.opentelemetry.io/otel/metric v1.30.0/go.mod h1:aXTfST94tswhWEb+5QjlSqG+cZlmyXy/u8jFpor3WqQ=
-go.opentelemetry.io/otel/sdk v1.29.0 h1:vkqKjk7gwhS8VaWb0POZKmIEDimRCMsopNYnriHyryo=
-go.opentelemetry.io/otel/sdk v1.29.0/go.mod h1:pM8Dx5WKnvxLCb+8lG1PRNIDxu9g9b9g59Qr7hfAAok=
-go.opentelemetry.io/otel/trace v1.30.0 h1:7UBkkYzeg3C7kQX8VAidWh2biiQbtAKjyIML8dQ9wmc=
-go.opentelemetry.io/otel/trace v1.30.0/go.mod h1:5EyKqTzzmyqB9bwtCCq6pDLktPK6fmGf/Dph+8VI02o=
+go.opentelemetry.io/contrib/detectors/gcp v1.32.0 h1:P78qWqkLSShicHmAzfECaTgvslqHxblNE9j62Ws1NK8=
+go.opentelemetry.io/contrib/detectors/gcp v1.32.0/go.mod h1:TVqo0Sda4Cv8gCIixd7LuLwW4EylumVWfhjZJjDD4DU=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.57.0 h1:qtFISDHKolvIxzSs0gIaiPUPR0Cucb0F2coHC7ZLdps=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.57.0/go.mod h1:Y+Pop1Q6hCOnETWTW4NROK/q1hv50hM7yDaUTjG8lp8=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.57.0 h1:DheMAlT6POBP+gh8RUH19EOTnQIor5QE0uSRPtzCpSw=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.57.0/go.mod h1:wZcGmeVO9nzP67aYSLDqXNWK87EZWhi7JWj1v7ZXf94=
+go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U=
+go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg=
+go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M=
+go.opentelemetry.io/otel/metric v1.32.0/go.mod h1:jH7CIbbK6SH2V2wE16W05BHCtIDzauciCRLoc/SyMv8=
+go.opentelemetry.io/otel/sdk v1.32.0 h1:RNxepc9vK59A8XsgZQouW8ue8Gkb4jpWtJm9ge5lEG4=
+go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJCAP9LlJXEjU=
+go.opentelemetry.io/otel/sdk/metric v1.32.0 h1:rZvFnvmvawYb0alrYkjraqJq0Z4ZUJAiyYCU9snn1CU=
+go.opentelemetry.io/otel/sdk/metric v1.32.0/go.mod h1:PWeZlq0zt9YkYAp3gjKZ0eicRYvOh1Gd+X99x6GHpCQ=
+go.opentelemetry.io/otel/trace v1.32.0 h1:WIC9mYrXf8TmY/EXuULKc8hR17vE+Hjv2cssQDe03fM=
+go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
@@ -600,11 +624,11 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A=
-golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70=
+golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
+golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk=
-golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY=
+golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo=
+golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
@@ -612,8 +636,8 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHl
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0=
-golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
+golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4=
+golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -636,12 +660,12 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8=
golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo=
-golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0=
+golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo=
+golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
-golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
+golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE=
+golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -649,8 +673,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
-golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
+golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -688,19 +712,19 @@ golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34=
-golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
+golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/term v0.24.0 h1:Mh5cbb+Zk2hqqXNO7S1iTjEphVL+jb8ZWaqh/g+JWkM=
-golang.org/x/term v0.24.0/go.mod h1:lOBK/LVxemqiMij05LGJ0tzNr8xlmwBRJ81PX6wVLH8=
+golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=
+golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224=
-golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
-golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
-golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
+golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
+golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
+golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg=
+golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
@@ -713,8 +737,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-golang.org/x/tools v0.25.0 h1:oFU9pkj/iJgs+0DT+VMHrx+oBKs/LJMV+Uvg78sl+fE=
-golang.org/x/tools v0.25.0/go.mod h1:/vtpO8WL1N9cQC3FN5zPqb//fRXskFHbLKk4OW1Q7rg=
+golang.org/x/tools v0.27.0 h1:qEKojBykQkQ4EynWy4S8Weg69NumxKdn40Fce3uc/8o=
+golang.org/x/tools v0.27.0/go.mod h1:sUi0ZgbwW9ZPAq26Ekut+weQPR5eIM6GQLQ1Yjm1H0Q=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -723,8 +747,8 @@ golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhS
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0=
gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU=
-google.golang.org/api v0.197.0 h1:x6CwqQLsFiA5JKAiGyGBjc2bNtHtLddhJCE2IKuhhcQ=
-google.golang.org/api v0.197.0/go.mod h1:AuOuo20GoQ331nq7DquGHlU6d+2wN2fZ8O0ta60nRNw=
+google.golang.org/api v0.205.0 h1:LFaxkAIpDb/GsrWV20dMMo5MR0h8UARTbn24LmD+0Pg=
+google.golang.org/api v0.205.0/go.mod h1:NrK1EMqO8Xk6l6QwRAmrXXg2v6dzukhlOyvkYtnvUuc=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
@@ -732,12 +756,12 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98
google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 h1:BulPr26Jqjnd4eYDVe+YvyR7Yc2vJGkO5/0UxD0/jZU=
-google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:hL97c3SYopEHblzpxRL4lSs523++l8DYxGM1FQiYmb4=
-google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1:hjSy6tcFQZ171igDaN5QHOw2n6vx40juYbC/x67CEhc=
-google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU=
+google.golang.org/genproto v0.0.0-20241113202542-65e8d215514f h1:zDoHYmMzMacIdjNe+P2XiTmPsLawi/pCbSPfxt6lTfw=
+google.golang.org/genproto v0.0.0-20241113202542-65e8d215514f/go.mod h1:Q5m6g8b5KaFFzsQFIGdJkSJDGeJiybVenoYFMMa3ohI=
+google.golang.org/genproto/googleapis/api v0.0.0-20241113202542-65e8d215514f h1:M65LEviCfuZTfrfzwwEoxVtgvfkFkBUbFnRbxCXuXhU=
+google.golang.org/genproto/googleapis/api v0.0.0-20241113202542-65e8d215514f/go.mod h1:Yo94eF2nj7igQt+TiJ49KxjIH8ndLYPZMIRSiRcEbg0=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20241113202542-65e8d215514f h1:C1QccEa9kUwvMgEUORqQD9S17QesQijxjZ84sO82mfo=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20241113202542-65e8d215514f/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
@@ -745,12 +769,14 @@ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.66.2 h1:3QdXkuq3Bkh7w+ywLdLvM56cmGvQHUMZpiCzt6Rqaoo=
-google.golang.org/grpc v1.66.2/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y=
+google.golang.org/grpc v1.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0=
+google.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA=
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 h1:rNBFJjBCOgVr9pWD7rs/knKL4FRTKgpZmsRfV214zcA=
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0/go.mod h1:Dk1tviKTvMCz5tvh7t+fh94dhmQVHuCt2OzJB3CTW9Y=
google.golang.org/grpc/examples v0.0.0-20210430044426-28078834f35b h1:D/GTYPo6I1oEo08Bfpuj3xl5XE+UGHj7//5fVyKxhsQ=
google.golang.org/grpc/examples v0.0.0-20210430044426-28078834f35b/go.mod h1:Ly7ZA/ARzg8fnPU9TyZIxoz33sEUuWX7txiqs8lPTgE=
+google.golang.org/grpc/stats/opentelemetry v0.0.0-20241028142157-ada6787961b3 h1:hUfOButuEtpc0UvYiaYRbNwxVYr0mQQOWq6X8beJ9Gc=
+google.golang.org/grpc/stats/opentelemetry v0.0.0-20241028142157-ada6787961b3/go.mod h1:jzYlkSMbKypzuu6xoAEijsNVo9ZeDF1u/zCfFgsx7jg=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -761,10 +787,10 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
-google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
-gopkg.in/DataDog/dd-trace-go.v1 v1.67.1 h1:frgcpZ18wmpj+/TwyDJM8057M65aOdgaxLiZ8pb1PFU=
-gopkg.in/DataDog/dd-trace-go.v1 v1.67.1/go.mod h1:6DdiJPKOeJfZyd/IUGCAd5elY8qPGkztK6wbYYsMjag=
+google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
+google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
+gopkg.in/DataDog/dd-trace-go.v1 v1.69.1 h1:grTElrPaCfxUsrJjyPLHlVPbmlKVzWMxVdcBrGZSzEk=
+gopkg.in/DataDog/dd-trace-go.v1 v1.69.1/go.mod h1:U9AOeBHNAL95JXcd/SPf4a7O5GNeF/yD13sJtli/yaU=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d h1:TxyelI5cVkbREznMhfzycHdkp5cLA7DpE+GKjSslYhM=
gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw=
@@ -803,10 +829,10 @@ modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE=
modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ=
modernc.org/gc/v2 v2.5.0 h1:bJ9ChznK1L1mUtAQtxi0wi5AtAs5jQuw4PrPHO5pb6M=
modernc.org/gc/v2 v2.5.0/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU=
-modernc.org/gc/v3 v3.0.0-20240801135723-a856999a2e4a h1:CfbpOLEo2IwNzJdMvE8aiRbPMxoTpgAJeyePh0SmO8M=
-modernc.org/gc/v3 v3.0.0-20240801135723-a856999a2e4a/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4=
-modernc.org/libc v1.60.1 h1:at373l8IFRTkJIkAU85BIuUoBM4T1b51ds0E1ovPG2s=
-modernc.org/libc v1.60.1/go.mod h1:xJuobKuNxKH3RUatS7GjR+suWj+5c2K7bi4m/S5arOY=
+modernc.org/gc/v3 v3.0.0-20241004144649-1aea3fae8852 h1:IYXPPTTjjoSHvUClZIYexDiO7g+4x+XveKT4gCIAwiY=
+modernc.org/gc/v3 v3.0.0-20241004144649-1aea3fae8852/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4=
+modernc.org/libc v1.61.0 h1:eGFcvWpqlnoGwzZeZe3PWJkkKbM/3SUGyk1DVZQ0TpE=
+modernc.org/libc v1.61.0/go.mod h1:DvxVX89wtGTu+r72MLGhygpfi3aUGgZRdAYGCAVVud0=
modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4=
modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo=
modernc.org/memory v1.8.0 h1:IqGTL6eFMaDZZhEWwcREgeMXYwmW83LYW8cROZYkg+E=
diff --git a/go/cmd/vtctldclient/cli/tablets.go b/go/cmd/vtctldclient/cli/tablets.go
index a2962c42b45..efd729a16ce 100644
--- a/go/cmd/vtctldclient/cli/tablets.go
+++ b/go/cmd/vtctldclient/cli/tablets.go
@@ -17,9 +17,11 @@ limitations under the License.
package cli
import (
- "vitess.io/vitess/go/vt/topo/topoproto"
+ "fmt"
+ "strings"
topodatapb "vitess.io/vitess/go/vt/proto/topodata"
+ "vitess.io/vitess/go/vt/topo/topoproto"
)
// TabletAliasesFromPosArgs takes a list of positional (non-flag) arguments and
@@ -38,3 +40,22 @@ func TabletAliasesFromPosArgs(args []string) ([]*topodatapb.TabletAlias, error)
return aliases, nil
}
+
+// TabletTagsFromPosArgs takes a list of positional (non-flag) arguements and
+// converts them to a map of tablet tags.
+func TabletTagsFromPosArgs(args []string) (map[string]string, error) {
+ if len(args) == 0 {
+ return nil, fmt.Errorf("no tablet tags specified")
+ }
+
+ tags := make(map[string]string, len(args))
+ for _, kvPair := range args {
+ if !strings.Contains(kvPair, "=") {
+ return nil, fmt.Errorf("invalid tablet tag %q specified. tablet tags must be specified in key=value format", kvPair)
+ }
+ fields := strings.SplitN(kvPair, "=", 2)
+ tags[fields[0]] = fields[1]
+ }
+
+ return tags, nil
+}
diff --git a/go/cmd/vtctldclient/cli/tablets_test.go b/go/cmd/vtctldclient/cli/tablets_test.go
new file mode 100644
index 00000000000..4e5a7f74df5
--- /dev/null
+++ b/go/cmd/vtctldclient/cli/tablets_test.go
@@ -0,0 +1,48 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package cli
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestTabletTagsFromPosArgs(t *testing.T) {
+ t.Parallel()
+
+ {
+ tags, err := TabletTagsFromPosArgs([]string{"fail"})
+ assert.Error(t, err)
+ assert.Nil(t, tags)
+ }
+ {
+ tags, err := TabletTagsFromPosArgs([]string{"hello=world"})
+ assert.NoError(t, err)
+ assert.Equal(t, map[string]string{
+ "hello": "world",
+ }, tags)
+ }
+ {
+ tags, err := TabletTagsFromPosArgs([]string{"hello=world", "test=123"})
+ assert.NoError(t, err)
+ assert.Equal(t, map[string]string{
+ "hello": "world",
+ "test": "123",
+ }, tags)
+ }
+}
diff --git a/go/cmd/vtctldclient/command/reparents.go b/go/cmd/vtctldclient/command/reparents.go
index 8888c5a48cd..0043c6f7aa9 100644
--- a/go/cmd/vtctldclient/command/reparents.go
+++ b/go/cmd/vtctldclient/command/reparents.go
@@ -92,6 +92,7 @@ var emergencyReparentShardOptions = struct {
Force bool
WaitReplicasTimeout time.Duration
NewPrimaryAliasStr string
+ ExpectedPrimaryAliasStr string
IgnoreReplicaAliasStrList []string
PreventCrossCellPromotion bool
WaitForAllTablets bool
@@ -105,6 +106,7 @@ func commandEmergencyReparentShard(cmd *cobra.Command, args []string) error {
var (
newPrimaryAlias *topodatapb.TabletAlias
+ expectedPrimaryAlias *topodatapb.TabletAlias
ignoreReplicaAliases = make([]*topodatapb.TabletAlias, len(emergencyReparentShardOptions.IgnoreReplicaAliasStrList))
)
@@ -115,6 +117,13 @@ func commandEmergencyReparentShard(cmd *cobra.Command, args []string) error {
}
}
+ if emergencyReparentShardOptions.ExpectedPrimaryAliasStr != "" {
+ expectedPrimaryAlias, err = topoproto.ParseTabletAlias(emergencyReparentShardOptions.ExpectedPrimaryAliasStr)
+ if err != nil {
+ return err
+ }
+ }
+
for i, aliasStr := range emergencyReparentShardOptions.IgnoreReplicaAliasStrList {
alias, err := topoproto.ParseTabletAlias(aliasStr)
if err != nil {
@@ -130,6 +139,7 @@ func commandEmergencyReparentShard(cmd *cobra.Command, args []string) error {
Keyspace: keyspace,
Shard: shard,
NewPrimary: newPrimaryAlias,
+ ExpectedPrimary: expectedPrimaryAlias,
IgnoreReplicas: ignoreReplicaAliases,
WaitReplicasTimeout: protoutil.DurationToProto(emergencyReparentShardOptions.WaitReplicasTimeout),
PreventCrossCellPromotion: emergencyReparentShardOptions.PreventCrossCellPromotion,
@@ -185,6 +195,7 @@ func commandInitShardPrimary(cmd *cobra.Command, args []string) error {
var plannedReparentShardOptions = struct {
NewPrimaryAliasStr string
AvoidPrimaryAliasStr string
+ ExpectedPrimaryAliasStr string
WaitReplicasTimeout time.Duration
TolerableReplicationLag time.Duration
AllowCrossCellPromotion bool
@@ -197,8 +208,9 @@ func commandPlannedReparentShard(cmd *cobra.Command, args []string) error {
}
var (
- newPrimaryAlias *topodatapb.TabletAlias
- avoidPrimaryAlias *topodatapb.TabletAlias
+ newPrimaryAlias *topodatapb.TabletAlias
+ avoidPrimaryAlias *topodatapb.TabletAlias
+ expectedPrimaryAlias *topodatapb.TabletAlias
)
if plannedReparentShardOptions.NewPrimaryAliasStr != "" {
@@ -215,6 +227,13 @@ func commandPlannedReparentShard(cmd *cobra.Command, args []string) error {
}
}
+ if plannedReparentShardOptions.ExpectedPrimaryAliasStr != "" {
+ expectedPrimaryAlias, err = topoproto.ParseTabletAlias(plannedReparentShardOptions.ExpectedPrimaryAliasStr)
+ if err != nil {
+ return err
+ }
+ }
+
cli.FinishedParsing(cmd)
resp, err := client.PlannedReparentShard(commandCtx, &vtctldatapb.PlannedReparentShardRequest{
@@ -222,6 +241,7 @@ func commandPlannedReparentShard(cmd *cobra.Command, args []string) error {
Shard: shard,
NewPrimary: newPrimaryAlias,
AvoidPrimary: avoidPrimaryAlias,
+ ExpectedPrimary: expectedPrimaryAlias,
WaitReplicasTimeout: protoutil.DurationToProto(plannedReparentShardOptions.WaitReplicasTimeout),
TolerableReplicationLag: protoutil.DurationToProto(plannedReparentShardOptions.TolerableReplicationLag),
AllowCrossCellPromotion: plannedReparentShardOptions.AllowCrossCellPromotion,
@@ -286,6 +306,7 @@ func commandTabletExternallyReparented(cmd *cobra.Command, args []string) error
func init() {
EmergencyReparentShard.Flags().DurationVar(&emergencyReparentShardOptions.WaitReplicasTimeout, "wait-replicas-timeout", topo.RemoteOperationTimeout, "Time to wait for replicas to catch up in reparenting.")
EmergencyReparentShard.Flags().StringVar(&emergencyReparentShardOptions.NewPrimaryAliasStr, "new-primary", "", "Alias of a tablet that should be the new primary. If not specified, the vtctld will select the best candidate to promote.")
+ EmergencyReparentShard.Flags().StringVar(&emergencyReparentShardOptions.ExpectedPrimaryAliasStr, "expected-primary", "", "Alias of a tablet that must be the current primary in order for the reparent to be processed.")
EmergencyReparentShard.Flags().BoolVar(&emergencyReparentShardOptions.PreventCrossCellPromotion, "prevent-cross-cell-promotion", false, "Only promotes a new primary from the same cell as the previous primary.")
EmergencyReparentShard.Flags().BoolVar(&emergencyReparentShardOptions.WaitForAllTablets, "wait-for-all-tablets", false, "Should ERS wait for all the tablets to respond. Useful when all the tablets are reachable.")
EmergencyReparentShard.Flags().StringSliceVarP(&emergencyReparentShardOptions.IgnoreReplicaAliasStrList, "ignore-replicas", "i", nil, "Comma-separated, repeated list of replica tablet aliases to ignore during the emergency reparent.")
@@ -299,6 +320,7 @@ func init() {
PlannedReparentShard.Flags().DurationVar(&plannedReparentShardOptions.TolerableReplicationLag, "tolerable-replication-lag", 0, "Amount of replication lag that is considered acceptable for a tablet to be eligible for promotion when Vitess makes the choice of a new primary.")
PlannedReparentShard.Flags().StringVar(&plannedReparentShardOptions.NewPrimaryAliasStr, "new-primary", "", "Alias of a tablet that should be the new primary.")
PlannedReparentShard.Flags().StringVar(&plannedReparentShardOptions.AvoidPrimaryAliasStr, "avoid-primary", "", "Alias of a tablet that should not be the primary; i.e. \"reparent to any other tablet if this one is the primary\".")
+ PlannedReparentShard.Flags().StringVar(&plannedReparentShardOptions.ExpectedPrimaryAliasStr, "expected-primary", "", "Alias of a tablet that must be the current primary in order for the reparent to be processed.")
PlannedReparentShard.Flags().BoolVar(&plannedReparentShardOptions.AllowCrossCellPromotion, "allow-cross-cell-promotion", false, "Allow cross cell promotion")
Root.AddCommand(PlannedReparentShard)
diff --git a/go/cmd/vtctldclient/command/tablets.go b/go/cmd/vtctldclient/command/tablets.go
index 3e1c1114133..bb468fbd7ff 100644
--- a/go/cmd/vtctldclient/command/tablets.go
+++ b/go/cmd/vtctldclient/command/tablets.go
@@ -34,6 +34,17 @@ import (
)
var (
+ // ChangeTabletTags makes a ChangeTabletTags gRPC call to a vtctld.
+ ChangeTabletTags = &cobra.Command{
+ Use: "ChangeTabletTags [ ... ]",
+ Short: "Changes the tablet tags for the specified tablet, if possible.",
+ Long: `Changes the tablet tags for the specified tablet, if possible.
+
+Tags must be specified as key=value pairs.`,
+ DisableFlagsInUseLine: true,
+ Args: cobra.MinimumNArgs(2),
+ RunE: commandChangeTabletTags,
+ }
// ChangeTabletType makes a ChangeTabletType gRPC call to a vtctld.
ChangeTabletType = &cobra.Command{
Use: "ChangeTabletType [--dry-run] ",
@@ -212,6 +223,40 @@ Note that, in the SleepTablet implementation, the value should be positively-sig
}
)
+var changeTabletTagsOptions = struct {
+ Replace bool
+}{}
+
+func commandChangeTabletTags(cmd *cobra.Command, args []string) error {
+ allArgs := cmd.Flags().Args()
+
+ alias, err := topoproto.ParseTabletAlias(allArgs[0])
+ if err != nil {
+ return err
+ }
+
+ tags, err := cli.TabletTagsFromPosArgs(allArgs[1:])
+ if err != nil {
+ return err
+ }
+
+ cli.FinishedParsing(cmd)
+
+ resp, err := client.ChangeTabletTags(commandCtx, &vtctldatapb.ChangeTabletTagsRequest{
+ TabletAlias: alias,
+ Tags: tags,
+ Replace: changeTabletTagsOptions.Replace,
+ })
+ if err != nil {
+ return err
+ }
+
+ fmt.Printf("- %v\n", cli.MarshalMapAWK(resp.BeforeTags))
+ fmt.Printf("+ %v\n", cli.MarshalMapAWK(resp.AfterTags))
+
+ return nil
+}
+
var changeTabletTypeOptions = struct {
DryRun bool
}{}
@@ -629,6 +674,9 @@ func commandStopReplication(cmd *cobra.Command, args []string) error {
}
func init() {
+ ChangeTabletTags.Flags().BoolVarP(&changeTabletTagsOptions.Replace, "replace", "r", false, "Replace all tablet tags with the tags provided. By default tags are merged/updated.")
+ Root.AddCommand(ChangeTabletTags)
+
ChangeTabletType.Flags().BoolVarP(&changeTabletTypeOptions.DryRun, "dry-run", "d", false, "Shows the proposed change without actually executing it.")
Root.AddCommand(ChangeTabletType)
diff --git a/go/cmd/vtctldclient/command/transactions.go b/go/cmd/vtctldclient/command/transactions.go
index c576acf2041..93d31196fbe 100644
--- a/go/cmd/vtctldclient/command/transactions.go
+++ b/go/cmd/vtctldclient/command/transactions.go
@@ -64,6 +64,21 @@ var (
DisableFlagsInUseLine: true,
}
+
+ getTransactionInfoOptions = struct {
+ Dtid string
+ }{}
+
+ // GetTransactionInfo makes a GetTransactionInfo gRPC call to a vtctld.
+ GetTransactionInfo = &cobra.Command{
+ Use: "get-info --dtid ",
+ Short: "Reads the state of the unresolved transaction by querying each participating shard.",
+ Aliases: []string{"Read"},
+ Args: cobra.NoArgs,
+ RunE: commandGetTransactionInfo,
+
+ DisableFlagsInUseLine: true,
+ }
)
type ConcludeTransactionOutput struct {
@@ -72,6 +87,12 @@ type ConcludeTransactionOutput struct {
Error string `json:"error,omitempty"`
}
+type GetTransactionInfoOutput struct {
+ Dtid string `json:"dtid"`
+ Message string `json:"message"`
+ Error string `json:"error,omitempty"`
+}
+
const (
concludeSuccess = "Successfully concluded the distributed transaction"
concludeFailure = "Failed to conclude the distributed transaction"
@@ -86,11 +107,13 @@ func commandGetUnresolvedTransactions(cmd *cobra.Command, args []string) error {
AbandonAge: unresolvedTransactionsOptions.AbandonAge,
})
if err != nil {
+ prettyPrintError(err)
return err
}
data, err := cli.MarshalJSON(resp.Transactions)
if err != nil {
+ prettyPrintError(err)
return err
}
fmt.Println(string(data))
@@ -120,6 +143,36 @@ func commandConcludeTransaction(cmd *cobra.Command, args []string) (err error) {
return err
}
+func commandGetTransactionInfo(cmd *cobra.Command, args []string) error {
+ cli.FinishedParsing(cmd)
+
+ rts, err := client.GetTransactionInfo(commandCtx,
+ &vtctldatapb.GetTransactionInfoRequest{
+ Dtid: getTransactionInfoOptions.Dtid,
+ })
+
+ if err != nil || rts == nil {
+ prettyPrintError(err)
+ return err
+ }
+
+ fmt.Println(string(rts.String()))
+ return nil
+}
+
+func prettyPrintError(err error) {
+ if err == nil {
+ return
+ }
+ st := struct {
+ Error string `json:"error"`
+ }{
+ Error: err.Error(),
+ }
+ data, _ := cli.MarshalJSON(st)
+ fmt.Println(string(data))
+}
+
func init() {
GetUnresolvedTransactions.Flags().StringVarP(&unresolvedTransactionsOptions.Keyspace, "keyspace", "k", "", "unresolved transactions list for the given keyspace.")
GetUnresolvedTransactions.Flags().Int64VarP(&unresolvedTransactionsOptions.AbandonAge, "abandon-age", "a", 0, "unresolved transactions list which are older than the specified age(in seconds).")
@@ -128,5 +181,8 @@ func init() {
ConcludeTransaction.Flags().StringVarP(&concludeTransactionOptions.Dtid, "dtid", "d", "", "conclude transaction for the given distributed transaction ID.")
DistributedTransaction.AddCommand(ConcludeTransaction)
+ GetTransactionInfo.Flags().StringVarP(&getTransactionInfoOptions.Dtid, "dtid", "d", "", "read transaction state for the given distributed transaction ID.")
+ DistributedTransaction.AddCommand(GetTransactionInfo)
+
Root.AddCommand(DistributedTransaction)
}
diff --git a/go/cmd/vtctldclient/command/vreplication/common/cancel.go b/go/cmd/vtctldclient/command/vreplication/common/cancel.go
index 838a95faad9..6b664a190bc 100644
--- a/go/cmd/vtctldclient/command/vreplication/common/cancel.go
+++ b/go/cmd/vtctldclient/command/vreplication/common/cancel.go
@@ -21,6 +21,8 @@ import (
"sort"
"github.com/spf13/cobra"
+ "google.golang.org/grpc/codes"
+ "google.golang.org/grpc/status"
"vitess.io/vitess/go/cmd/vtctldclient/cli"
@@ -31,6 +33,7 @@ var CancelOptions = struct {
KeepData bool
KeepRoutingRules bool
Shards []string
+ DeleteBatchSize int64
}{}
func GetCancelCommand(opts *SubCommandsOpts) *cobra.Command {
@@ -60,9 +63,13 @@ func commandCancel(cmd *cobra.Command, args []string) error {
KeepData: CancelOptions.KeepData,
KeepRoutingRules: CancelOptions.KeepRoutingRules,
Shards: CancelOptions.Shards,
+ DeleteBatchSize: CancelOptions.DeleteBatchSize,
}
resp, err := GetClient().WorkflowDelete(GetCommandCtx(), req)
if err != nil {
+ if grpcerr, ok := status.FromError(err); ok && (grpcerr.Code() == codes.DeadlineExceeded) {
+ return fmt.Errorf("Cancel action timed out. Please try again and the work will pick back up where it left off. Note that you can control the timeout using the --action_timeout flag and the delete batch size with --delete-batch-size.")
+ }
return err
}
diff --git a/go/cmd/vtctldclient/command/vreplication/common/utils.go b/go/cmd/vtctldclient/command/vreplication/common/utils.go
index e4fff6aa3b8..5ab3f43d627 100644
--- a/go/cmd/vtctldclient/command/vreplication/common/utils.go
+++ b/go/cmd/vtctldclient/command/vreplication/common/utils.go
@@ -19,6 +19,7 @@ package common
import (
"bytes"
"context"
+ "encoding/json"
"fmt"
"strings"
"time"
@@ -27,6 +28,7 @@ import (
"vitess.io/vitess/go/cmd/vtctldclient/cli"
"vitess.io/vitess/go/vt/key"
+ "vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/topo"
"vitess.io/vitess/go/vt/topo/topoproto"
"vitess.io/vitess/go/vt/vtctl/vtctldclient"
@@ -143,6 +145,50 @@ func ParseTabletTypes(cmd *cobra.Command) error {
return nil
}
+func ParseTableMaterializeSettings(tableSettings string, parser *sqlparser.Parser) ([]*vtctldatapb.TableMaterializeSettings, error) {
+ tableMaterializeSettings := make([]*vtctldatapb.TableMaterializeSettings, 0)
+ err := json.Unmarshal([]byte(tableSettings), &tableMaterializeSettings)
+ if err != nil {
+ return tableMaterializeSettings, fmt.Errorf("table-settings is not valid JSON")
+ }
+ if len(tableMaterializeSettings) == 0 {
+ return tableMaterializeSettings, fmt.Errorf("empty table-settings")
+ }
+
+ // Validate the provided queries.
+ seenSourceTables := make(map[string]bool)
+ for _, tms := range tableMaterializeSettings {
+ if tms.TargetTable == "" || tms.SourceExpression == "" {
+ return tableMaterializeSettings, fmt.Errorf("missing target_table or source_expression")
+ }
+ // Validate that the query is valid.
+ stmt, err := parser.Parse(tms.SourceExpression)
+ if err != nil {
+ return tableMaterializeSettings, fmt.Errorf("invalid source_expression: %q", tms.SourceExpression)
+ }
+ // Validate that each source-expression uses a different table.
+ // If any of them query the same table the materialize workflow
+ // will fail.
+ err = sqlparser.Walk(func(node sqlparser.SQLNode) (kontinue bool, err error) {
+ switch node := node.(type) {
+ case sqlparser.TableName:
+ if node.Name.NotEmpty() {
+ if seenSourceTables[node.Name.String()] {
+ return false, fmt.Errorf("multiple source_expression queries use the same table: %q", node.Name.String())
+ }
+ seenSourceTables[node.Name.String()] = true
+ }
+ }
+ return true, nil
+ }, stmt)
+ if err != nil {
+ return tableMaterializeSettings, err
+ }
+ }
+
+ return tableMaterializeSettings, nil
+}
+
func validateOnDDL(cmd *cobra.Command) error {
if _, ok := binlogdatapb.OnDDLAction_value[strings.ToUpper(CreateOptions.OnDDL)]; !ok {
return fmt.Errorf("invalid on-ddl value: %s", CreateOptions.OnDDL)
@@ -287,7 +333,7 @@ func AddCommonSwitchTrafficFlags(cmd *cobra.Command, initializeTargetSequences b
cmd.Flags().BoolVar(&SwitchTrafficOptions.DryRun, "dry-run", false, "Print the actions that would be taken and report any known errors that would have occurred.")
cmd.Flags().BoolVar(&SwitchTrafficOptions.Force, "force", false, "Force the traffic switch even if some potentially non-critical actions cannot be performed; for example the tablet refresh fails on some tablets in the keyspace. WARNING: this should be used with extreme caution and only in emergency situations!")
if initializeTargetSequences {
- cmd.Flags().BoolVar(&SwitchTrafficOptions.InitializeTargetSequences, "initialize-target-sequences", false, "When moving tables from an unsharded keyspace to a sharded keyspace, initialize any sequences that are being used on the target when switching writes.")
+ cmd.Flags().BoolVar(&SwitchTrafficOptions.InitializeTargetSequences, "initialize-target-sequences", false, "When moving tables from an unsharded keyspace to a sharded keyspace, initialize any sequences that are being used on the target when switching writes. If the sequence table is not found, and the sequence table reference was fully qualified OR a value was specified for --global-keyspace, then we will attempt to create the sequence table in that keyspace.")
}
}
diff --git a/go/cmd/vtctldclient/command/vreplication/materialize/create.go b/go/cmd/vtctldclient/command/vreplication/materialize/create.go
index 65ab29b40b0..04f20410f46 100644
--- a/go/cmd/vtctldclient/command/vreplication/materialize/create.go
+++ b/go/cmd/vtctldclient/command/vreplication/materialize/create.go
@@ -162,47 +162,9 @@ func (ts *tableSettings) String() string {
}
func (ts *tableSettings) Set(v string) error {
- ts.val = make([]*vtctldatapb.TableMaterializeSettings, 0)
- err := json.Unmarshal([]byte(v), &ts.val)
- if err != nil {
- return fmt.Errorf("table-settings is not valid JSON")
- }
- if len(ts.val) == 0 {
- return fmt.Errorf("empty table-settings")
- }
-
- // Validate the provided queries.
- seenSourceTables := make(map[string]bool)
- for _, tms := range ts.val {
- if tms.TargetTable == "" || tms.SourceExpression == "" {
- return fmt.Errorf("missing target_table or source_expression")
- }
- // Validate that the query is valid.
- stmt, err := ts.parser.Parse(tms.SourceExpression)
- if err != nil {
- return fmt.Errorf("invalid source_expression: %q", tms.SourceExpression)
- }
- // Validate that each source-expression uses a different table.
- // If any of them query the same table the materialize workflow
- // will fail.
- err = sqlparser.Walk(func(node sqlparser.SQLNode) (kontinue bool, err error) {
- switch node := node.(type) {
- case sqlparser.TableName:
- if node.Name.NotEmpty() {
- if seenSourceTables[node.Name.String()] {
- return false, fmt.Errorf("multiple source_expression queries use the same table: %q", node.Name.String())
- }
- seenSourceTables[node.Name.String()] = true
- }
- }
- return true, nil
- }, stmt)
- if err != nil {
- return err
- }
- }
-
- return nil
+ var err error
+ ts.val, err = common.ParseTableMaterializeSettings(v, ts.parser)
+ return err
}
func (ts *tableSettings) Type() string {
diff --git a/go/cmd/vtctldclient/command/vreplication/movetables/create.go b/go/cmd/vtctldclient/command/vreplication/movetables/create.go
index 817571902c5..71d812e99e6 100644
--- a/go/cmd/vtctldclient/command/vreplication/movetables/create.go
+++ b/go/cmd/vtctldclient/command/vreplication/movetables/create.go
@@ -40,6 +40,8 @@ var (
NoRoutingRules bool
AtomicCopy bool
WorkflowOptions vtctldatapb.WorkflowOptions
+ // This maps to a WorkflowOptions.ShardedAutoIncrementHandling ENUM value.
+ ShardedAutoIncrementHandlingStr string
}{}
// create makes a MoveTablesCreate gRPC call to a vtctld.
@@ -87,6 +89,20 @@ var (
return fmt.Errorf("cannot specify both --tenant-id (i.e. a multi-tenant migration) and --source-shards (i.e. a shard-by-shard migration)")
}
+ // createOptions.ShardedAutoIncrementHandlingStr is the CLI flag value
+ // provided and we need to map that to the ENUM value for
+ // createOptions.WorkflowOptions.ShardedAutoIncrementHandling which
+ // gets saved in the _vt.vreplication record's options column.
+ createOptions.ShardedAutoIncrementHandlingStr = strings.ToUpper(createOptions.ShardedAutoIncrementHandlingStr)
+ val, ok := vtctldatapb.ShardedAutoIncrementHandling_value[createOptions.ShardedAutoIncrementHandlingStr]
+ if !ok {
+ return fmt.Errorf("invalid value provided for --sharded-auto-increment-handling, valid values are: %s", shardedAutoIncHandlingStrOptions)
+ }
+ createOptions.WorkflowOptions.ShardedAutoIncrementHandling = vtctldatapb.ShardedAutoIncrementHandling(val)
+ if val == int32(vtctldatapb.ShardedAutoIncrementHandling_REPLACE) && createOptions.WorkflowOptions.GlobalKeyspace == "" {
+ fmt.Println("WARNING: no global-keyspace value provided so all sequence table references not fully qualified must be created manually before switching traffic")
+ }
+
return nil
},
RunE: commandCreate,
diff --git a/go/cmd/vtctldclient/command/vreplication/movetables/movetables.go b/go/cmd/vtctldclient/command/vreplication/movetables/movetables.go
index 4d8f9eaf3f0..969c05ec08d 100644
--- a/go/cmd/vtctldclient/command/vreplication/movetables/movetables.go
+++ b/go/cmd/vtctldclient/command/vreplication/movetables/movetables.go
@@ -17,12 +17,21 @@ limitations under the License.
package movetables
import (
+ "fmt"
+ "strings"
+
"github.com/spf13/cobra"
"vitess.io/vitess/go/cmd/vtctldclient/command/vreplication/common"
"vitess.io/vitess/go/vt/topo/topoproto"
+
+ vtctldatapb "vitess.io/vitess/go/vt/proto/vtctldata"
)
+// The default batch size to use when deleting tenant data
+// if a multi-tenant migration is canceled or deleted.
+const DefaultDeleteBatchSize = 1000
+
var (
// base is the base command for all actions related to MoveTables.
base = &cobra.Command{
@@ -32,6 +41,7 @@ var (
Aliases: []string{"movetables"},
Args: cobra.ExactArgs(1),
}
+ shardedAutoIncHandlingStrOptions string
)
func registerCommands(root *cobra.Command) {
@@ -49,8 +59,16 @@ func registerCommands(root *cobra.Command) {
create.Flags().BoolVar(&createOptions.NoRoutingRules, "no-routing-rules", false, "(Advanced) Do not create routing rules while creating the workflow. See the reference documentation for limitations if you use this flag.")
create.Flags().BoolVar(&createOptions.AtomicCopy, "atomic-copy", false, "(EXPERIMENTAL) A single copy phase is run for all tables from the source. Use this, for example, if your source keyspace has tables which use foreign key constraints.")
create.Flags().StringVar(&createOptions.WorkflowOptions.TenantId, "tenant-id", "", "(EXPERIMENTAL: Multi-tenant migrations only) The tenant ID to use for the MoveTables workflow into a multi-tenant keyspace.")
- create.Flags().BoolVar(&createOptions.WorkflowOptions.StripShardedAutoIncrement, "remove-sharded-auto-increment", true, "If moving the table(s) to a sharded keyspace, remove any auto_increment clauses when copying the schema to the target as sharded keyspaces should rely on either user/application generated values or Vitess sequences to ensure uniqueness.")
create.Flags().StringSliceVar(&createOptions.WorkflowOptions.Shards, "shards", nil, "(EXPERIMENTAL: Multi-tenant migrations only) Specify that vreplication streams should only be created on this subset of target shards. Warning: you should first ensure that all rows on the source route to the specified subset of target shards using your VIndex of choice or you could lose data during the migration.")
+ create.Flags().StringVar(&createOptions.WorkflowOptions.GlobalKeyspace, "global-keyspace", "", "If specified, then attempt to create any global resources here such as sequence tables needed to replace auto_increment table clauses that are removed due to --sharded-auto-increment-handling=REPLACE. The value must be an unsharded keyspace that already exists.")
+ create.Flags().StringVar(&createOptions.ShardedAutoIncrementHandlingStr, "sharded-auto-increment-handling", vtctldatapb.ShardedAutoIncrementHandling_REMOVE.String(),
+ fmt.Sprintf("If moving the table(s) to a sharded keyspace, remove any MySQL auto_increment clauses when copying the schema to the target as sharded keyspaces should rely on either user/application generated values or Vitess sequences to ensure uniqueness. If REPLACE is specified then they are automatically replaced by Vitess sequence definitions. (options are: %s)",
+ shardedAutoIncHandlingStrOptions))
+ // This flag was deprecated in v21 so can be removed in v22+.
+ create.Flags().StringVar(&createOptions.ShardedAutoIncrementHandlingStr, "remove-sharded-auto-increment", vtctldatapb.ShardedAutoIncrementHandling_REMOVE.String(),
+ fmt.Sprintf("If moving the table(s) to a sharded keyspace, remove any MySQL auto_increment clauses when copying the schema to the target as sharded keyspaces should rely on either user/application generated values or Vitess sequences to ensure uniqueness. If REPLACE is specified then they are automatically replaced by Vitess sequence definitions. (options are: %s)",
+ shardedAutoIncHandlingStrOptions))
+ create.Flags().MarkDeprecated("remove-sharded-auto-increment", "please use --sharded-auto-increment-handling instead.")
base.AddCommand(create)
opts := &common.SubCommandsOpts{
@@ -94,10 +112,24 @@ func registerCommands(root *cobra.Command) {
cancel := common.GetCancelCommand(opts)
cancel.Flags().BoolVar(&common.CancelOptions.KeepData, "keep-data", false, "Keep the partially copied table data from the MoveTables workflow in the target keyspace.")
cancel.Flags().BoolVar(&common.CancelOptions.KeepRoutingRules, "keep-routing-rules", false, "Keep the routing rules created for the MoveTables workflow.")
+ cancel.Flags().Int64Var(&common.CancelOptions.DeleteBatchSize, "delete-batch-size", DefaultDeleteBatchSize, "When cleaning up the migrated data in tables moved as part of a multi-tenant workflow, delete the records in batches of this size.")
common.AddShardSubsetFlag(cancel, &common.CancelOptions.Shards)
base.AddCommand(cancel)
}
func init() {
common.RegisterCommandHandler("MoveTables", registerCommands)
+
+ sb := strings.Builder{}
+ strvals := make([]string, len(vtctldatapb.ShardedAutoIncrementHandling_name))
+ for enumval, strval := range vtctldatapb.ShardedAutoIncrementHandling_name {
+ strvals[enumval] = strval
+ }
+ for i, v := range strvals {
+ if i > 0 {
+ sb.WriteByte(',')
+ }
+ sb.WriteString(v)
+ }
+ shardedAutoIncHandlingStrOptions = sb.String()
}
diff --git a/go/cmd/vtctldclient/command/vreplication/vdiff/vdiff.go b/go/cmd/vtctldclient/command/vreplication/vdiff/vdiff.go
index 1a0443a45c2..54b2eec0840 100644
--- a/go/cmd/vtctldclient/command/vreplication/vdiff/vdiff.go
+++ b/go/cmd/vtctldclient/command/vreplication/vdiff/vdiff.go
@@ -46,7 +46,7 @@ import (
)
var (
- tabletTypesDefault = []topodatapb.TabletType{
+ TabletTypesDefault = []topodatapb.TabletType{
topodatapb.TabletType_RDONLY,
topodatapb.TabletType_REPLICA,
topodatapb.TabletType_PRIMARY,
@@ -102,7 +102,7 @@ var (
createOptions.UUID = uuid.New()
}
if !cmd.Flags().Lookup("tablet-types").Changed {
- createOptions.TabletTypes = tabletTypesDefault
+ createOptions.TabletTypes = TabletTypesDefault
}
if cmd.Flags().Lookup("source-cells").Changed {
for i, cell := range createOptions.SourceCells {
@@ -417,12 +417,14 @@ type summary struct {
RowsCompared int64
HasMismatch bool
Shards string
- StartedAt string `json:"StartedAt,omitempty"`
- CompletedAt string `json:"CompletedAt,omitempty"`
- TableSummaryMap map[string]tableSummary `json:"TableSummary,omitempty"`
- Reports map[string]map[string]vdiff.DiffReport `json:"Reports,omitempty"`
- Errors map[string]string `json:"Errors,omitempty"`
- Progress *vdiff.ProgressReport `json:"Progress,omitempty"`
+ StartedAt string `json:"StartedAt,omitempty"`
+ CompletedAt string `json:"CompletedAt,omitempty"`
+ TableSummaryMap map[string]tableSummary `json:"TableSummary,omitempty"`
+ // This is keyed by table name and then by shard name.
+ Reports map[string]map[string]vdiff.DiffReport `json:"Reports,omitempty"`
+ // This is keyed by shard name.
+ Errors map[string]string `json:"Errors,omitempty"`
+ Progress *vdiff.ProgressReport `json:"Progress,omitempty"`
}
const summaryTextTemplate = `
@@ -790,7 +792,7 @@ func buildSingleSummary(keyspace, workflow, uuid string, resp *vtctldatapb.VDiff
// If the vdiff has been started then we can calculate the progress.
if summary.State == vdiff.StartedState {
- buildProgressReport(summary, totalRowsToCompare)
+ summary.Progress = BuildProgressReport(summary.RowsCompared, totalRowsToCompare, summary.StartedAt)
}
sort.Strings(shards) // Sort for predictable output
@@ -809,17 +811,17 @@ func buildSingleSummary(keyspace, workflow, uuid string, resp *vtctldatapb.VDiff
return summary, nil
}
-func buildProgressReport(summary *summary, rowsToCompare int64) {
+func BuildProgressReport(rowsCompared int64, rowsToCompare int64, startedAt string) *vdiff.ProgressReport {
report := &vdiff.ProgressReport{}
- if summary.RowsCompared >= 1 {
+ if rowsCompared >= 1 {
// Round to 2 decimal points.
- report.Percentage = math.Round(math.Min((float64(summary.RowsCompared)/float64(rowsToCompare))*100, 100.00)*100) / 100
+ report.Percentage = math.Round(math.Min((float64(rowsCompared)/float64(rowsToCompare))*100, 100.00)*100) / 100
}
if math.IsNaN(report.Percentage) {
report.Percentage = 0
}
pctToGo := math.Abs(report.Percentage - 100.00)
- startTime, _ := time.Parse(vdiff.TimestampFormat, summary.StartedAt)
+ startTime, _ := time.Parse(vdiff.TimestampFormat, startedAt)
curTime := time.Now().UTC()
runTime := curTime.Unix() - startTime.Unix()
if report.Percentage >= 1 {
@@ -830,7 +832,7 @@ func buildProgressReport(summary *summary, rowsToCompare int64) {
report.ETA = eta.Format(vdiff.TimestampFormat)
}
}
- summary.Progress = report
+ return report
}
func commandShow(cmd *cobra.Command, args []string) error {
@@ -892,7 +894,7 @@ func registerCommands(root *cobra.Command) {
create.Flags().Int64Var(&createOptions.Limit, "limit", math.MaxInt64, "Max rows to stop comparing after.")
create.Flags().BoolVar(&createOptions.DebugQuery, "debug-query", false, "Adds a mysql query to the report that can be used for further debugging.")
create.Flags().Int64Var(&createOptions.MaxReportSampleRows, "max-report-sample-rows", 10, "Maximum number of row differences to report (0 for all differences). NOTE: when increasing this value it is highly recommended to also specify --only-pks")
- create.Flags().BoolVar(&createOptions.OnlyPKs, "only-pks", false, "When reporting missing rows, only show primary keys in the report.")
+ create.Flags().BoolVar(&createOptions.OnlyPKs, "only-pks", false, "When reporting row differences, only show primary keys in the report.")
create.Flags().StringSliceVar(&createOptions.Tables, "tables", nil, "Only run vdiff for these tables in the workflow.")
create.Flags().Int64Var(&createOptions.MaxExtraRowsToCompare, "max-extra-rows-to-compare", 1000, "If there are collation differences between the source and target, you can have rows that are identical but simply returned in a different order from MySQL. We will do a second pass to compare the rows for any actual differences in this case and this flag allows you to control the resources used for this operation.")
create.Flags().BoolVar(&createOptions.Wait, "wait", false, "When creating or resuming a vdiff, wait for it to finish before exiting.")
diff --git a/go/cmd/vtctldclient/command/vreplication/vdiff/vdiff_test.go b/go/cmd/vtctldclient/command/vreplication/vdiff/vdiff_test.go
index 8742d22abd0..8fbff03433d 100644
--- a/go/cmd/vtctldclient/command/vreplication/vdiff/vdiff_test.go
+++ b/go/cmd/vtctldclient/command/vreplication/vdiff/vdiff_test.go
@@ -772,7 +772,7 @@ func TestBuildProgressReport(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- buildProgressReport(tt.args.summary, tt.args.rowsToCompare)
+ tt.args.summary.Progress = BuildProgressReport(tt.args.summary.RowsCompared, tt.args.rowsToCompare, tt.args.summary.StartedAt)
// We always check the percentage
require.Equal(t, int(tt.want.Percentage), int(tt.args.summary.Progress.Percentage))
diff --git a/go/cmd/vtctldclient/command/vreplication/workflow/delete.go b/go/cmd/vtctldclient/command/vreplication/workflow/delete.go
index 3739979ff5f..6d78c3b4077 100644
--- a/go/cmd/vtctldclient/command/vreplication/workflow/delete.go
+++ b/go/cmd/vtctldclient/command/vreplication/workflow/delete.go
@@ -32,6 +32,7 @@ var (
deleteOptions = struct {
KeepData bool
KeepRoutingRules bool
+ DeleteBatchSize int64
}{}
// delete makes a WorkflowDelete gRPC call to a vtctld.
@@ -55,6 +56,7 @@ func commandDelete(cmd *cobra.Command, args []string) error {
KeepData: deleteOptions.KeepData,
KeepRoutingRules: deleteOptions.KeepRoutingRules,
Shards: baseOptions.Shards,
+ DeleteBatchSize: deleteOptions.DeleteBatchSize,
}
resp, err := common.GetClient().WorkflowDelete(common.GetCommandCtx(), req)
if err != nil {
diff --git a/go/cmd/vtctldclient/command/vreplication/workflow/workflow.go b/go/cmd/vtctldclient/command/vreplication/workflow/workflow.go
index 2961b8010be..63de3b70cee 100644
--- a/go/cmd/vtctldclient/command/vreplication/workflow/workflow.go
+++ b/go/cmd/vtctldclient/command/vreplication/workflow/workflow.go
@@ -20,6 +20,7 @@ import (
"github.com/spf13/cobra"
"vitess.io/vitess/go/cmd/vtctldclient/command/vreplication/common"
+ "vitess.io/vitess/go/cmd/vtctldclient/command/vreplication/movetables"
"vitess.io/vitess/go/vt/topo/topoproto"
)
@@ -60,6 +61,7 @@ func registerCommands(root *cobra.Command) {
delete.MarkFlagRequired("workflow")
delete.Flags().BoolVar(&deleteOptions.KeepData, "keep-data", false, "Keep the partially copied table data from the workflow in the target keyspace.")
delete.Flags().BoolVar(&deleteOptions.KeepRoutingRules, "keep-routing-rules", false, "Keep the routing rules created for the workflow.")
+ delete.Flags().Int64Var(&deleteOptions.DeleteBatchSize, "delete-batch-size", movetables.DefaultDeleteBatchSize, "When cleaning up the migrated data in tables moved as part of a multi-tenant MoveTables workflow, delete the records in batches of this size.")
common.AddShardSubsetFlag(delete, &baseOptions.Shards)
base.AddCommand(delete)
diff --git a/go/cmd/vtorc/cli/cli.go b/go/cmd/vtorc/cli/cli.go
index 1233c1e2ac2..b79793c6492 100644
--- a/go/cmd/vtorc/cli/cli.go
+++ b/go/cmd/vtorc/cli/cli.go
@@ -20,6 +20,7 @@ import (
"github.com/spf13/cobra"
"vitess.io/vitess/go/acl"
+ "vitess.io/vitess/go/viperutil/debug"
"vitess.io/vitess/go/vt/log"
"vitess.io/vitess/go/vt/servenv"
"vitess.io/vitess/go/vt/vtorc/config"
@@ -29,8 +30,7 @@ import (
)
var (
- configFile string
- Main = &cobra.Command{
+ Main = &cobra.Command{
Use: "vtorc",
Short: "VTOrc is the automated fault detection and repair tool in Vitess.",
Example: `vtorc \
@@ -51,22 +51,16 @@ var (
func run(cmd *cobra.Command, args []string) {
servenv.Init()
- config.UpdateConfigValuesFromFlags()
inst.RegisterStats()
log.Info("starting vtorc")
- if len(configFile) > 0 {
- config.ForceRead(configFile)
- } else {
- config.Read("/etc/vtorc.conf.json", "conf/vtorc.conf.json", "vtorc.conf.json")
- }
- if config.Config.AuditToSyslog {
+ if config.GetAuditToSyslog() {
inst.EnableAuditSyslog()
}
config.MarkConfigurationLoaded()
// Log final config values to debug if something goes wrong.
- config.LogConfigValues()
+ log.Infof("Running with Configuration - %v", debug.AllSettings())
server.StartVTOrcDiscovery()
server.RegisterVTOrcAPIEndpoints()
@@ -96,7 +90,5 @@ func init() {
servenv.MoveFlagsToCobraCommand(Main)
logic.RegisterFlags(Main.Flags())
- config.RegisterFlags(Main.Flags())
acl.RegisterFlags(Main.Flags())
- Main.Flags().StringVar(&configFile, "config", "", "config file name")
}
diff --git a/go/cmd/vttablet/cli/cli.go b/go/cmd/vttablet/cli/cli.go
index 3fb1e98877f..3b77b43d9cb 100644
--- a/go/cmd/vttablet/cli/cli.go
+++ b/go/cmd/vttablet/cli/cli.go
@@ -143,7 +143,6 @@ func run(cmd *cobra.Command, args []string) error {
qsc, err := createTabletServer(ctx, env, config, ts, tabletAlias, srvTopoCounts)
if err != nil {
- ts.Close()
return err
}
@@ -172,7 +171,6 @@ func run(cmd *cobra.Command, args []string) error {
VDiffEngine: vdiff.NewEngine(ts, tablet, env.CollationEnv(), env.Parser()),
}
if err := tm.Start(tablet, config); err != nil {
- ts.Close()
return fmt.Errorf("failed to parse --tablet-path or initialize DB credentials: %w", err)
}
servenv.OnClose(func() {
diff --git a/go/cmd/vttablet/cli/cli_test.go b/go/cmd/vttablet/cli/cli_test.go
new file mode 100644
index 00000000000..c88ebd1b8ae
--- /dev/null
+++ b/go/cmd/vttablet/cli/cli_test.go
@@ -0,0 +1,58 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package cli
+
+import (
+ "context"
+ "os"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+
+ "vitess.io/vitess/go/vt/topo"
+ "vitess.io/vitess/go/vt/topo/memorytopo"
+)
+
+// TestRunFailsToStartTabletManager tests the code path in 'run' where we fail to start the TabletManager
+// this is done by starting vttablet without a cnf file but requesting it to restore from backup.
+// When starting, the TabletManager checks if it needs to restore, in tm.handleRestore but this step will
+// fail if we do not provide a cnf file and if the flag --restore_from_backup is provided.
+func TestRunFailsToStartTabletManager(t *testing.T) {
+ ts, factory := memorytopo.NewServerAndFactory(context.Background(), "cell")
+ topo.RegisterFactory("test", factory)
+
+ args := append([]string{}, os.Args...)
+ t.Cleanup(func() {
+ ts.Close()
+ tabletPath = ""
+ os.Args = append([]string{}, args...)
+ })
+
+ os.Args = []string{"vttablet",
+ "--topo_implementation", "test", "--topo_global_server_address", "localhost", "--topo_global_root", "cell",
+ "--db_host", "localhost", "--db_port", "3306",
+ "--tablet-path", "cell-1", "--init_keyspace", "ks", "--init_shard", "0", "--init_tablet_type", "replica",
+ "--restore_from_backup",
+ }
+
+ // Creating and canceling the context so that pending tasks in tm_init gets canceled before we close the topo server
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+
+ err := Main.ExecuteContext(ctx)
+ require.ErrorContains(t, err, "you cannot enable --restore_from_backup without a my.cnf file")
+}
diff --git a/go/flags/endtoend/mysqlctld.txt b/go/flags/endtoend/mysqlctld.txt
index d60a91ae65e..594329ce073 100644
--- a/go/flags/endtoend/mysqlctld.txt
+++ b/go/flags/endtoend/mysqlctld.txt
@@ -61,6 +61,7 @@ Flags:
--db_tls_min_version string Configures the minimal TLS version negotiated when SSL is enabled. Defaults to TLSv1.2. Options: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3.
--dba_idle_timeout duration Idle timeout for dba connections (default 1m0s)
--dba_pool_size int Size of the connection pool for dba connections (default 20)
+ --grpc-dial-concurrency-limit int Maximum concurrency of grpc dial operations. This should be less than the golang max thread limit of 10000. (default 1024)
--grpc_auth_mode string Which auth plugin implementation to use (eg: static)
--grpc_auth_mtls_allowed_substrings string List of substrings of at least one of the client certificate names (separated by colon).
--grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server.
diff --git a/go/flags/endtoend/vtbackup.txt b/go/flags/endtoend/vtbackup.txt
index fba7c794fc0..b4405960711 100644
--- a/go/flags/endtoend/vtbackup.txt
+++ b/go/flags/endtoend/vtbackup.txt
@@ -128,6 +128,7 @@ Flags:
--file_backup_storage_root string Root directory for the file backup storage.
--gcs_backup_storage_bucket string Google Cloud Storage bucket to use for backups.
--gcs_backup_storage_root string Root prefix for all backup-related object names.
+ --grpc-dial-concurrency-limit int Maximum concurrency of grpc dial operations. This should be less than the golang max thread limit of 10000. (default 1024)
--grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server.
--grpc_compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy
--grpc_enable_tracing Enable gRPC tracing.
@@ -230,6 +231,7 @@ Flags:
--topo_global_root string the path of the global topology data in the global topology server
--topo_global_server_address string the address of the global topology server
--topo_implementation string the topology implementation to use
+ --topo_read_concurrency int Maximum concurrency of topo reads per global or local cell. (default 32)
--topo_zk_auth_file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass
--topo_zk_base_timeout duration zk base timeout (see zk.Connect) (default 30s)
--topo_zk_max_concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64)
diff --git a/go/flags/endtoend/vtcombo.txt b/go/flags/endtoend/vtcombo.txt
index 4d1b92ce0d5..5a1e4000fea 100644
--- a/go/flags/endtoend/vtcombo.txt
+++ b/go/flags/endtoend/vtcombo.txt
@@ -21,6 +21,7 @@ Flags:
--backup_storage_compress if set, the backup files will be compressed. (default true)
--backup_storage_number_blocks int if backup_storage_compress is true, backup_storage_number_blocks sets the number of blocks that can be processed, in parallel, before the writer blocks, during compression (default is 2). It should be equal to the number of CPUs available for compression. (default 2)
--bind-address string Bind address for the server. If empty, the server will listen on all available unicast and anycast IP addresses of the local system.
+ --binlog-in-memory-decompressor-max-size uint This value sets the uncompressed transaction payload size at which we switch from in-memory buffer based decompression to the slower streaming mode. (default 134217728)
--binlog_host string PITR restore parameter: hostname/IP of binlog server.
--binlog_password string PITR restore parameter: password of binlog server.
--binlog_player_protocol string the protocol to download binlogs from a vttablet (default "grpc")
@@ -167,7 +168,6 @@ Flags:
--grpc_server_keepalive_timeout duration After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s)
--grpc_use_effective_callerid If set, and SSL is not used, will set the immediate caller id from the effective caller id's principal.
--health_check_interval duration Interval between health checks (default 20s)
- --healthcheck-dial-concurrency int Maximum concurrency of new healthcheck connections. This should be less than the golang max thread limit of 10000. (default 1024)
--healthcheck_retry_delay duration health check retry delay (default 2ms)
--healthcheck_timeout duration the health check timeout period (default 1m0s)
--heartbeat_enable If true, vttablet records (if master) or checks (if replica) the current time of a replication heartbeat in the sidecar database's heartbeat table. The result is used to inform the serving state of the vttablet via healthchecks.
@@ -374,7 +374,7 @@ Flags:
--topo_global_root string the path of the global topology data in the global topology server
--topo_global_server_address string the address of the global topology server
--topo_implementation string the topology implementation to use
- --topo_read_concurrency int Concurrency of topo reads. (default 32)
+ --topo_read_concurrency int Maximum concurrency of topo reads per global or local cell. (default 32)
--topo_zk_auth_file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass
--topo_zk_base_timeout duration zk base timeout (see zk.Connect) (default 30s)
--topo_zk_max_concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64)
@@ -395,8 +395,7 @@ Flags:
--transaction_limit_per_user float Maximum number of transactions a single user is allowed to use at any time, represented as fraction of -transaction_cap. (default 0.4)
--transaction_mode string SINGLE: disallow multi-db transactions, MULTI: allow multi-db transactions with best effort commit, TWOPC: allow multi-db transactions with 2pc commit (default "MULTI")
--truncate-error-len int truncate errors sent to client if they are longer than this value (0 means do not truncate)
- --twopc_abandon_age float time in seconds. Any unresolved transaction older than this time will be sent to the coordinator to be resolved.
- --twopc_enable if the flag is on, 2pc is enabled. Other 2pc flags must be supplied.
+ --twopc_abandon_age time.Duration Any unresolved transaction older than this time will be sent to the coordinator to be resolved. NOTE: Providing time as seconds (float64) is deprecated. Use time.Duration format (e.g., '1s', '2m', '1h'). (default 15m0s)
--tx-throttler-config string Synonym to -tx_throttler_config (default "target_replication_lag_sec:2 max_replication_lag_sec:10 initial_rate:100 max_increase:1 emergency_decrease:0.5 min_duration_between_increases_sec:40 max_duration_between_increases_sec:62 min_duration_between_decreases_sec:20 spread_backlog_across_sec:20 age_bad_rate_after_sec:180 bad_rate_increase:0.1 max_rate_approach_threshold:0.9")
--tx-throttler-default-priority int Default priority assigned to queries that lack priority information (default 100)
--tx-throttler-dry-run If present, the transaction throttler only records metrics about requests received and throttled, but does not actually throttle any requests.
@@ -414,7 +413,7 @@ Flags:
--vreplication_copy_phase_duration duration Duration for each copy phase loop (before running the next catchup: default 1h) (default 1h0m0s)
--vreplication_copy_phase_max_innodb_history_list_length int The maximum InnoDB transaction history that can exist on a vstreamer (source) before starting another round of copying rows. This helps to limit the impact on the source tablet. (default 1000000)
--vreplication_copy_phase_max_mysql_replication_lag int The maximum MySQL replication lag (in seconds) that can exist on a vstreamer (source) before starting another round of copying rows. This helps to limit the impact on the source tablet. (default 43200)
- --vreplication_experimental_flags int (Bitmask) of experimental features in vreplication to enable (default 3)
+ --vreplication_experimental_flags int (Bitmask) of experimental features in vreplication to enable (default 7)
--vreplication_heartbeat_update_interval int Frequency (in seconds, default 1, max 60) at which the time_updated column of a vreplication stream when idling (default 1)
--vreplication_max_time_to_retry_on_error duration stop automatically retrying when we've had consecutive failures with the same error for this long after the first occurrence
--vreplication_net_read_timeout int Session value of net_read_timeout for vreplication, in seconds (default 300)
diff --git a/go/flags/endtoend/vtctlclient.txt b/go/flags/endtoend/vtctlclient.txt
index 3c9c0a3cbb0..e7402c0eefd 100644
--- a/go/flags/endtoend/vtctlclient.txt
+++ b/go/flags/endtoend/vtctlclient.txt
@@ -9,6 +9,7 @@ Usage of vtctlclient:
--config-type string Config file type (omit to infer config type from file extension).
--datadog-agent-host string host to send spans to. if empty, no tracing will be done
--datadog-agent-port string port to send spans to. if empty, no tracing will be done
+ --grpc-dial-concurrency-limit int Maximum concurrency of grpc dial operations. This should be less than the golang max thread limit of 10000. (default 1024)
--grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server.
--grpc_compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy
--grpc_enable_tracing Enable gRPC tracing.
diff --git a/go/flags/endtoend/vtctld.txt b/go/flags/endtoend/vtctld.txt
index f8e680da0f0..be0f5114e79 100644
--- a/go/flags/endtoend/vtctld.txt
+++ b/go/flags/endtoend/vtctld.txt
@@ -57,6 +57,7 @@ Flags:
--file_backup_storage_root string Root directory for the file backup storage.
--gcs_backup_storage_bucket string Google Cloud Storage bucket to use for backups.
--gcs_backup_storage_root string Root prefix for all backup-related object names.
+ --grpc-dial-concurrency-limit int Maximum concurrency of grpc dial operations. This should be less than the golang max thread limit of 10000. (default 1024)
--grpc_auth_mode string Which auth plugin implementation to use (eg: static)
--grpc_auth_mtls_allowed_substrings string List of substrings of at least one of the client certificate names (separated by colon).
--grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server.
@@ -85,7 +86,6 @@ Flags:
--grpc_server_keepalive_enforcement_policy_permit_without_stream gRPC server permit client keepalive pings even when there are no active streams (RPCs)
--grpc_server_keepalive_time duration After a duration of this time, if the server doesn't see any activity, it pings the client to see if the transport is still alive. (default 10s)
--grpc_server_keepalive_timeout duration After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s)
- --healthcheck-dial-concurrency int Maximum concurrency of new healthcheck connections. This should be less than the golang max thread limit of 10000. (default 1024)
-h, --help help for vtctld
--jaeger-agent-host string host and port to send spans to. if empty, no tracing will be done
--keep_logs duration keep logs for this long (using ctime) (zero to keep forever)
@@ -164,7 +164,7 @@ Flags:
--topo_global_root string the path of the global topology data in the global topology server
--topo_global_server_address string the address of the global topology server
--topo_implementation string the topology implementation to use
- --topo_read_concurrency int Concurrency of topo reads. (default 32)
+ --topo_read_concurrency int Maximum concurrency of topo reads per global or local cell. (default 32)
--topo_zk_auth_file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass
--topo_zk_base_timeout duration zk base timeout (see zk.Connect) (default 30s)
--topo_zk_max_concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64)
diff --git a/go/flags/endtoend/vtctldclient.txt b/go/flags/endtoend/vtctldclient.txt
index df32f456602..5ff2a7b21da 100644
--- a/go/flags/endtoend/vtctldclient.txt
+++ b/go/flags/endtoend/vtctldclient.txt
@@ -18,6 +18,7 @@ Available Commands:
ApplyVSchema Applies the VTGate routing schema to the provided keyspace. Shows the result after application.
Backup Uses the BackupStorage service on the given tablet to create and store a new backup.
BackupShard Finds the most up-to-date REPLICA, RDONLY, or SPARE tablet in the given shard and uses the BackupStorage service on that tablet to create and store a new backup.
+ ChangeTabletTags Changes the tablet tags for the specified tablet, if possible.
ChangeTabletType Changes the db type for the specified tablet, if possible.
CheckThrottler Issue a throttler check on the given tablet.
CreateKeyspace Creates the specified keyspace in the topology.
diff --git a/go/flags/endtoend/vtgate.txt b/go/flags/endtoend/vtgate.txt
index 37bfadd4938..fde17f89c49 100644
--- a/go/flags/endtoend/vtgate.txt
+++ b/go/flags/endtoend/vtgate.txt
@@ -67,6 +67,7 @@ Flags:
--foreign_key_mode string This is to provide how to handle foreign key constraint in create/alter table. Valid values are: allow, disallow (default "allow")
--gate_query_cache_memory int gate server query cache size in bytes, maximum amount of memory to be cached. vtgate analyzes every incoming query and generate a query plan, these plans are being cached in a lru cache. This config controls the capacity of the lru cache. (default 33554432)
--gateway_initial_tablet_timeout duration At startup, the tabletGateway will wait up to this duration to get at least one tablet per keyspace/shard/tablet type (default 30s)
+ --grpc-dial-concurrency-limit int Maximum concurrency of grpc dial operations. This should be less than the golang max thread limit of 10000. (default 1024)
--grpc-send-session-in-streaming If set, will send the session as last packet in streaming api to support transactions in streaming
--grpc-use-effective-groups If set, and SSL is not used, will set the immediate caller's security groups from the effective caller id's groups.
--grpc-use-static-authentication-callerid If set, will set the immediate caller id to the username authenticated by the static auth plugin.
@@ -99,7 +100,6 @@ Flags:
--grpc_server_keepalive_time duration After a duration of this time, if the server doesn't see any activity, it pings the client to see if the transport is still alive. (default 10s)
--grpc_server_keepalive_timeout duration After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen even after that the connection is closed. (default 10s)
--grpc_use_effective_callerid If set, and SSL is not used, will set the immediate caller id from the effective caller id's principal.
- --healthcheck-dial-concurrency int Maximum concurrency of new healthcheck connections. This should be less than the golang max thread limit of 10000. (default 1024)
--healthcheck_retry_delay duration health check retry delay (default 2ms)
--healthcheck_timeout duration the health check timeout period (default 1m0s)
-h, --help help for vtgate
@@ -223,7 +223,7 @@ Flags:
--topo_global_root string the path of the global topology data in the global topology server
--topo_global_server_address string the address of the global topology server
--topo_implementation string the topology implementation to use
- --topo_read_concurrency int Concurrency of topo reads. (default 32)
+ --topo_read_concurrency int Maximum concurrency of topo reads per global or local cell. (default 32)
--topo_zk_auth_file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass
--topo_zk_base_timeout duration zk base timeout (see zk.Connect) (default 30s)
--topo_zk_max_concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64)
diff --git a/go/flags/endtoend/vtgateclienttest.txt b/go/flags/endtoend/vtgateclienttest.txt
index e7d8fc5e177..8a2f18b6b5a 100644
--- a/go/flags/endtoend/vtgateclienttest.txt
+++ b/go/flags/endtoend/vtgateclienttest.txt
@@ -14,6 +14,7 @@ Flags:
--config-persistence-min-interval duration minimum interval between persisting dynamic config changes back to disk (if no change has occurred, nothing is done). (default 1s)
--config-type string Config file type (omit to infer config type from file extension).
--default_tablet_type topodatapb.TabletType The default tablet type to set for queries, when one is not explicitly selected. (default PRIMARY)
+ --grpc-dial-concurrency-limit int Maximum concurrency of grpc dial operations. This should be less than the golang max thread limit of 10000. (default 1024)
--grpc_auth_mode string Which auth plugin implementation to use (eg: static)
--grpc_auth_mtls_allowed_substrings string List of substrings of at least one of the client certificate names (separated by colon).
--grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server.
diff --git a/go/flags/endtoend/vtorc.txt b/go/flags/endtoend/vtorc.txt
index 841cfc8b556..c2799a72dc1 100644
--- a/go/flags/endtoend/vtorc.txt
+++ b/go/flags/endtoend/vtorc.txt
@@ -25,7 +25,6 @@ Flags:
--catch-sigpipe catch and ignore SIGPIPE on stdout and stderr if specified
--change-tablets-with-errant-gtid-to-drained Whether VTOrc should be changing the type of tablets with errant GTIDs to DRAINED
--clusters_to_watch strings Comma-separated list of keyspaces or keyspace/shards that this instance will monitor and repair. Defaults to all clusters in the topology. Example: "ks1,ks2/-80"
- --config string config file name
--config-file string Full path of the config file (with extension) to use. If set, --config-path, --config-type, and --config-name are ignored.
--config-file-not-found-handling ConfigFileNotFoundHandling Behavior when a config file is not found. (Options: error, exit, ignore, warn) (default warn)
--config-name string Name of the config file (without extension) to search for. (default "vtconfig")
@@ -34,6 +33,7 @@ Flags:
--config-type string Config file type (omit to infer config type from file extension).
--consul_auth_static_file string JSON File to read the topos/tokens from.
--emit_stats If set, emit stats to push-based monitoring and stats backends
+ --grpc-dial-concurrency-limit int Maximum concurrency of grpc dial operations. This should be less than the golang max thread limit of 10000. (default 1024)
--grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server.
--grpc_compression string Which protocol to use for compressing gRPC. Default: nothing. Supported: snappy
--grpc_enable_tracing Enable gRPC tracing.
@@ -98,6 +98,7 @@ Flags:
--topo_global_root string the path of the global topology data in the global topology server
--topo_global_server_address string the address of the global topology server
--topo_implementation string the topology implementation to use
+ --topo_read_concurrency int Maximum concurrency of topo reads per global or local cell. (default 32)
--topo_zk_auth_file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass
--topo_zk_base_timeout duration zk base timeout (see zk.Connect) (default 30s)
--topo_zk_max_concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64)
diff --git a/go/flags/endtoend/vttablet.txt b/go/flags/endtoend/vttablet.txt
index 4709fd27870..132c2d06344 100644
--- a/go/flags/endtoend/vttablet.txt
+++ b/go/flags/endtoend/vttablet.txt
@@ -56,6 +56,7 @@ Flags:
--backup_storage_implementation string Which backup storage implementation to use for creating and restoring backups.
--backup_storage_number_blocks int if backup_storage_compress is true, backup_storage_number_blocks sets the number of blocks that can be processed, in parallel, before the writer blocks, during compression (default is 2). It should be equal to the number of CPUs available for compression. (default 2)
--bind-address string Bind address for the server. If empty, the server will listen on all available unicast and anycast IP addresses of the local system.
+ --binlog-in-memory-decompressor-max-size uint This value sets the uncompressed transaction payload size at which we switch from in-memory buffer based decompression to the slower streaming mode. (default 134217728)
--binlog_host string PITR restore parameter: hostname/IP of binlog server.
--binlog_password string PITR restore parameter: password of binlog server.
--binlog_player_grpc_ca string the server ca to use to validate servers when connecting
@@ -166,6 +167,7 @@ Flags:
--gcs_backup_storage_bucket string Google Cloud Storage bucket to use for backups.
--gcs_backup_storage_root string Root prefix for all backup-related object names.
--gh-ost-path string override default gh-ost binary full path (default "gh-ost")
+ --grpc-dial-concurrency-limit int Maximum concurrency of grpc dial operations. This should be less than the golang max thread limit of 10000. (default 1024)
--grpc_auth_mode string Which auth plugin implementation to use (eg: static)
--grpc_auth_mtls_allowed_substrings string List of substrings of at least one of the client certificate names (separated by colon).
--grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server.
@@ -374,6 +376,7 @@ Flags:
--topo_global_root string the path of the global topology data in the global topology server
--topo_global_server_address string the address of the global topology server
--topo_implementation string the topology implementation to use
+ --topo_read_concurrency int Maximum concurrency of topo reads per global or local cell. (default 32)
--topo_zk_auth_file string auth to use when connecting to the zk topo server, file contents should be :, e.g., digest:user:pass
--topo_zk_base_timeout duration zk base timeout (see zk.Connect) (default 30s)
--topo_zk_max_concurrency int maximum number of pending requests to send to a Zookeeper server. (default 64)
@@ -393,8 +396,7 @@ Flags:
--transaction_limit_by_subcomponent Include CallerID.subcomponent when considering who the user is for the purpose of transaction limit.
--transaction_limit_by_username Include VTGateCallerID.username when considering who the user is for the purpose of transaction limit. (default true)
--transaction_limit_per_user float Maximum number of transactions a single user is allowed to use at any time, represented as fraction of -transaction_cap. (default 0.4)
- --twopc_abandon_age float time in seconds. Any unresolved transaction older than this time will be sent to the coordinator to be resolved.
- --twopc_enable if the flag is on, 2pc is enabled. Other 2pc flags must be supplied.
+ --twopc_abandon_age time.Duration Any unresolved transaction older than this time will be sent to the coordinator to be resolved. NOTE: Providing time as seconds (float64) is deprecated. Use time.Duration format (e.g., '1s', '2m', '1h'). (default 15m0s)
--tx-throttler-config string Synonym to -tx_throttler_config (default "target_replication_lag_sec:2 max_replication_lag_sec:10 initial_rate:100 max_increase:1 emergency_decrease:0.5 min_duration_between_increases_sec:40 max_duration_between_increases_sec:62 min_duration_between_decreases_sec:20 spread_backlog_across_sec:20 age_bad_rate_after_sec:180 bad_rate_increase:0.1 max_rate_approach_threshold:0.9")
--tx-throttler-default-priority int Default priority assigned to queries that lack priority information (default 100)
--tx-throttler-dry-run If present, the transaction throttler only records metrics about requests received and throttled, but does not actually throttle any requests.
@@ -412,7 +414,7 @@ Flags:
--vreplication_copy_phase_duration duration Duration for each copy phase loop (before running the next catchup: default 1h) (default 1h0m0s)
--vreplication_copy_phase_max_innodb_history_list_length int The maximum InnoDB transaction history that can exist on a vstreamer (source) before starting another round of copying rows. This helps to limit the impact on the source tablet. (default 1000000)
--vreplication_copy_phase_max_mysql_replication_lag int The maximum MySQL replication lag (in seconds) that can exist on a vstreamer (source) before starting another round of copying rows. This helps to limit the impact on the source tablet. (default 43200)
- --vreplication_experimental_flags int (Bitmask) of experimental features in vreplication to enable (default 3)
+ --vreplication_experimental_flags int (Bitmask) of experimental features in vreplication to enable (default 7)
--vreplication_heartbeat_update_interval int Frequency (in seconds, default 1, max 60) at which the time_updated column of a vreplication stream when idling (default 1)
--vreplication_max_time_to_retry_on_error duration stop automatically retrying when we've had consecutive failures with the same error for this long after the first occurrence
--vreplication_net_read_timeout int Session value of net_read_timeout for vreplication, in seconds (default 300)
diff --git a/go/flags/endtoend/vttestserver.txt b/go/flags/endtoend/vttestserver.txt
index 0aa69dfb204..042ffd37643 100644
--- a/go/flags/endtoend/vttestserver.txt
+++ b/go/flags/endtoend/vttestserver.txt
@@ -43,6 +43,7 @@ Flags:
--external_topo_implementation string the topology implementation to use for vtcombo process
--extra_my_cnf string extra files to add to the config, separated by ':'
--foreign_key_mode string This is to provide how to handle foreign key constraint in create/alter table. Valid values are: allow, disallow (default "allow")
+ --grpc-dial-concurrency-limit int Maximum concurrency of grpc dial operations. This should be less than the golang max thread limit of 10000. (default 1024)
--grpc_auth_mode string Which auth plugin implementation to use (eg: static)
--grpc_auth_mtls_allowed_substrings string List of substrings of at least one of the client certificate names (separated by colon).
--grpc_auth_static_client_creds string When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server.
diff --git a/go/flagutil/float_to_duration.go b/go/flagutil/float_to_duration.go
new file mode 100644
index 00000000000..fe07d42bfaa
--- /dev/null
+++ b/go/flagutil/float_to_duration.go
@@ -0,0 +1,71 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package flagutil
+
+import (
+ "errors"
+ "strconv"
+ "time"
+
+ "github.com/spf13/pflag"
+)
+
+// FloatOrDuration is a flag that can be set with either a float64 (interpreted as seconds) or a time.Duration
+// The parsed value is stored in the Duration field, and the target pointer is updated with the parsed value
+type FloatOrDuration struct {
+ Target *time.Duration // Pointer to the external duration
+ Duration time.Duration // Stores the current parsed value
+}
+
+// String returns the current value as a string
+func (f *FloatOrDuration) String() string {
+ return f.Duration.String()
+}
+
+// Set parses the input and updates the duration
+func (f *FloatOrDuration) Set(value string) error {
+ // Try to parse as float64 first (interpreted as seconds)
+ if floatVal, err := strconv.ParseFloat(value, 64); err == nil {
+ f.Duration = time.Duration(floatVal * float64(time.Second))
+ *f.Target = f.Duration // Update the target pointer
+ return nil
+ }
+
+ // Try to parse as time.Duration
+ if duration, err := time.ParseDuration(value); err == nil {
+ f.Duration = duration
+ *f.Target = f.Duration // Update the target pointer
+ return nil
+ }
+
+ return errors.New("value must be either a float64 (interpreted as seconds) or a valid time.Duration")
+}
+
+// Type returns the type description
+func (f *FloatOrDuration) Type() string {
+ return "time.Duration"
+}
+
+// FloatDuration defines a flag with the specified name, default value, and usage string and binds it to a time.Duration variable.
+func FloatDuration(fs *pflag.FlagSet, p *time.Duration, name string, defaultValue time.Duration, usage string) {
+ *p = defaultValue
+ fd := FloatOrDuration{
+ Target: p,
+ Duration: defaultValue,
+ }
+ fs.Var(&fd, name, usage)
+}
diff --git a/go/flagutil/float_to_duration_test.go b/go/flagutil/float_to_duration_test.go
new file mode 100644
index 00000000000..50b3a36e94a
--- /dev/null
+++ b/go/flagutil/float_to_duration_test.go
@@ -0,0 +1,104 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package flagutil
+
+import (
+ "testing"
+ "time"
+
+ "github.com/spf13/pflag"
+ "github.com/stretchr/testify/assert"
+)
+
+// TestFloatOrDuration_ValidFloat64Input verifies that a float64 input
+// (representing seconds) is correctly converted to a time.Duration.
+func TestFloatOrDuration_ValidFloat64Input(t *testing.T) {
+ var duration time.Duration
+ fs := pflag.NewFlagSet("test", pflag.ContinueOnError)
+
+ FloatDuration(fs, &duration, "test_flag", 10*time.Second, "Test flag")
+ err := fs.Parse([]string{"--test_flag=2"})
+ assert.NoError(t, err)
+ assert.Equal(t, 2*time.Second, duration)
+}
+
+// TestFloatOrDuration_ValidDurationInput verifies that a valid time.Duration
+// input (e.g., "1m30s") is parsed and stored correctly.
+func TestFloatOrDuration_ValidDurationInput(t *testing.T) {
+ var duration time.Duration
+ fs := pflag.NewFlagSet("test", pflag.ContinueOnError)
+
+ FloatDuration(fs, &duration, "test_flag", 10*time.Second, "Test flag")
+ err := fs.Parse([]string{"--test_flag=1m30s"})
+ assert.NoError(t, err)
+ assert.Equal(t, 90*time.Second, duration)
+}
+
+// TestFloatOrDuration_DefaultValue ensures that the default value is correctly
+// assigned to the duration when the flag is not provided.
+func TestFloatOrDuration_DefaultValue(t *testing.T) {
+ var duration time.Duration
+ fs := pflag.NewFlagSet("test", pflag.ContinueOnError)
+
+ defaultValue := 15 * time.Second
+ FloatDuration(fs, &duration, "test_flag", defaultValue, "Test flag")
+ err := fs.Parse([]string{})
+ assert.NoError(t, err)
+ assert.Equal(t, defaultValue, duration)
+}
+
+// TestFloatOrDuration_InvalidInput verifies that an invalid input string
+// results in an appropriate error.
+func TestFloatOrDuration_InvalidInput(t *testing.T) {
+ var duration time.Duration
+ fs := pflag.NewFlagSet("test", pflag.ContinueOnError)
+
+ FloatDuration(fs, &duration, "test_flag", 10*time.Second, "Test flag")
+ err := fs.Parse([]string{"--test_flag=invalid"})
+ assert.Error(t, err)
+ assert.Contains(t, err.Error(), "value must be either a float64 (interpreted as seconds) or a valid time.Duration")
+}
+
+// TestFloatOrDuration_MultipleFlags ensures that multiple FloatDuration flags
+// can coexist and maintain independent values.
+func TestFloatOrDuration_MultipleFlags(t *testing.T) {
+ var duration1, duration2 time.Duration
+ fs := pflag.NewFlagSet("test", pflag.ContinueOnError)
+
+ FloatDuration(fs, &duration1, "flag1", 10*time.Second, "First test flag")
+ FloatDuration(fs, &duration2, "flag2", 20*time.Second, "Second test flag")
+
+ err := fs.Parse([]string{"--flag1=2.5", "--flag2=1m"})
+ assert.NoError(t, err)
+ assert.Equal(t, 2500*time.Millisecond, duration1)
+ assert.Equal(t, 1*time.Minute, duration2)
+}
+
+// TestFloatOrDuration_HelpMessage verifies that the help message includes
+// the correct flag name, description, and default value.
+func TestFloatOrDuration_HelpMessage(t *testing.T) {
+ var duration time.Duration
+ fs := pflag.NewFlagSet("test", pflag.ContinueOnError)
+
+ defaultValue := 10 * time.Second
+ FloatDuration(fs, &duration, "test_flag", defaultValue, "Test flag with default value")
+
+ helpOutput := fs.FlagUsages()
+ assert.Contains(t, helpOutput, "--test_flag time.Duration")
+ assert.Contains(t, helpOutput, "Test flag with default value")
+ assert.Contains(t, helpOutput, "(default 10s)")
+}
diff --git a/go/ioutil/writer.go b/go/ioutil/writer.go
index 4aac07ba501..759ae1b7ab6 100644
--- a/go/ioutil/writer.go
+++ b/go/ioutil/writer.go
@@ -22,6 +22,7 @@ wrappers around WriteCloser and Writer.
package ioutil
import (
+ "bytes"
"io"
"time"
)
@@ -87,3 +88,16 @@ func NewMeteredWriter(tw io.Writer, fns ...func(int, time.Duration)) MeteredWrit
func (tw *meteredWriter) Write(p []byte) (int, error) {
return tw.meter.measure(tw.Writer.Write, p)
}
+
+// BytesBufferWriter implements io.WriteCloser using an in-memory buffer.
+type BytesBufferWriter struct {
+ *bytes.Buffer
+}
+
+func (m BytesBufferWriter) Close() error {
+ return nil
+}
+
+func NewBytesBufferWriter() BytesBufferWriter {
+ return BytesBufferWriter{bytes.NewBuffer(nil)}
+}
diff --git a/go/mysql/auth_server_clientcert_test.go b/go/mysql/auth_server_clientcert_test.go
index eff92053d94..72a1ecce87c 100644
--- a/go/mysql/auth_server_clientcert_test.go
+++ b/go/mysql/auth_server_clientcert_test.go
@@ -27,13 +27,24 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
+ "vitess.io/vitess/go/test/utils"
"vitess.io/vitess/go/vt/tlstest"
"vitess.io/vitess/go/vt/vttls"
)
const clientCertUsername = "Client Cert"
+// The listener's Accept() loop actually only ends on a connection
+// error, which will occur when trying to connect after the listener
+// has been closed. So this function closes the listener and then
+// calls Connect to trigger the error which ends that work.
+var cleanupListener = func(ctx context.Context, l *Listener, params *ConnParams) {
+ l.Close()
+ _, _ = Connect(ctx, params)
+}
+
func TestValidCert(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
th := &testHandler{}
authServer := newAuthServerClientCert(string(MysqlClearPassword))
@@ -52,21 +63,6 @@ func TestValidCert(t *testing.T) {
tlstest.CreateSignedCert(root, tlstest.CA, "02", "client", clientCertUsername)
tlstest.CreateCRL(root, tlstest.CA)
- // Create the server with TLS config.
- serverConfig, err := vttls.ServerConfig(
- path.Join(root, "server-cert.pem"),
- path.Join(root, "server-key.pem"),
- path.Join(root, "ca-cert.pem"),
- path.Join(root, "ca-crl.pem"),
- "",
- tls.VersionTLS12)
- require.NoError(t, err, "TLSServerConfig failed: %v", err)
-
- l.TLSConfig.Store(serverConfig)
- go func() {
- l.Accept()
- }()
-
// Setup the right parameters.
params := &ConnParams{
Host: host,
@@ -81,7 +77,20 @@ func TestValidCert(t *testing.T) {
ServerName: "server.example.com",
}
- ctx := context.Background()
+ // Create the server with TLS config.
+ serverConfig, err := vttls.ServerConfig(
+ path.Join(root, "server-cert.pem"),
+ path.Join(root, "server-key.pem"),
+ path.Join(root, "ca-cert.pem"),
+ path.Join(root, "ca-crl.pem"),
+ "",
+ tls.VersionTLS12)
+ require.NoError(t, err, "TLSServerConfig failed: %v", err)
+
+ l.TLSConfig.Store(serverConfig)
+ go l.Accept()
+ defer cleanupListener(ctx, l, params)
+
conn, err := Connect(ctx, params)
require.NoError(t, err, "Connect failed: %v", err)
@@ -103,6 +112,7 @@ func TestValidCert(t *testing.T) {
}
func TestNoCert(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
th := &testHandler{}
authServer := newAuthServerClientCert(string(MysqlClearPassword))
@@ -120,6 +130,17 @@ func TestNoCert(t *testing.T) {
tlstest.CreateSignedCert(root, tlstest.CA, "01", "server", "server.example.com")
tlstest.CreateCRL(root, tlstest.CA)
+ // Setup the right parameters.
+ params := &ConnParams{
+ Host: host,
+ Port: port,
+ Uname: "user1",
+ Pass: "",
+ SslMode: vttls.VerifyIdentity,
+ SslCa: path.Join(root, "ca-cert.pem"),
+ ServerName: "server.example.com",
+ }
+
// Create the server with TLS config.
serverConfig, err := vttls.ServerConfig(
path.Join(root, "server-cert.pem"),
@@ -131,22 +152,9 @@ func TestNoCert(t *testing.T) {
require.NoError(t, err, "TLSServerConfig failed: %v", err)
l.TLSConfig.Store(serverConfig)
- go func() {
- l.Accept()
- }()
-
- // Setup the right parameters.
- params := &ConnParams{
- Host: host,
- Port: port,
- Uname: "user1",
- Pass: "",
- SslMode: vttls.VerifyIdentity,
- SslCa: path.Join(root, "ca-cert.pem"),
- ServerName: "server.example.com",
- }
+ go l.Accept()
+ defer cleanupListener(ctx, l, params)
- ctx := context.Background()
conn, err := Connect(ctx, params)
assert.Error(t, err, "Connect() should have errored due to no client cert")
diff --git a/go/mysql/auth_server_static.go b/go/mysql/auth_server_static.go
index d9e6decf5e5..46302bcabe1 100644
--- a/go/mysql/auth_server_static.go
+++ b/go/mysql/auth_server_static.go
@@ -50,8 +50,10 @@ type AuthServerStatic struct {
// entries contains the users, passwords and user data.
entries map[string][]*AuthServerStaticEntry
+ // Signal handling related fields.
sigChan chan os.Signal
ticker *time.Ticker
+ done chan struct{} // Tell the signal related goroutines to stop
}
// AuthServerStaticEntry stores the values for a given user.
@@ -267,11 +269,17 @@ func (a *AuthServerStatic) installSignalHandlers() {
return
}
+ a.done = make(chan struct{})
a.sigChan = make(chan os.Signal, 1)
signal.Notify(a.sigChan, syscall.SIGHUP)
go func() {
- for range a.sigChan {
- a.reload()
+ for {
+ select {
+ case <-a.done:
+ return
+ case <-a.sigChan:
+ a.reload()
+ }
}
}()
@@ -279,14 +287,22 @@ func (a *AuthServerStatic) installSignalHandlers() {
if a.reloadInterval > 0 {
a.ticker = time.NewTicker(a.reloadInterval)
go func() {
- for range a.ticker.C {
- a.sigChan <- syscall.SIGHUP
+ for {
+ select {
+ case <-a.done:
+ return
+ case <-a.ticker.C:
+ a.sigChan <- syscall.SIGHUP
+ }
}
}()
}
}
func (a *AuthServerStatic) close() {
+ if a.done != nil {
+ close(a.done)
+ }
if a.ticker != nil {
a.ticker.Stop()
}
diff --git a/go/mysql/auth_server_static_test.go b/go/mysql/auth_server_static_test.go
index 12ae74e0d60..a808ce9b66b 100644
--- a/go/mysql/auth_server_static_test.go
+++ b/go/mysql/auth_server_static_test.go
@@ -25,6 +25,8 @@ import (
"time"
"github.com/stretchr/testify/require"
+
+ "vitess.io/vitess/go/test/utils"
)
// getEntries is a test-only method for AuthServerStatic.
@@ -35,6 +37,7 @@ func (a *AuthServerStatic) getEntries() map[string][]*AuthServerStaticEntry {
}
func TestJsonConfigParser(t *testing.T) {
+ _ = utils.LeakCheckContext(t)
// works with legacy format
config := make(map[string][]*AuthServerStaticEntry)
jsonConfig := "{\"mysql_user\":{\"Password\":\"123\", \"UserData\":\"dummy\"}, \"mysql_user_2\": {\"Password\": \"123\", \"UserData\": \"mysql_user_2\"}}"
@@ -67,6 +70,7 @@ func TestJsonConfigParser(t *testing.T) {
}
func TestValidateHashGetter(t *testing.T) {
+ _ = utils.LeakCheckContext(t)
jsonConfig := `{"mysql_user": [{"Password": "password", "UserData": "user.name", "Groups": ["user_group"]}]}`
auth := NewAuthServerStatic("", jsonConfig, 0)
@@ -90,6 +94,7 @@ func TestValidateHashGetter(t *testing.T) {
}
func TestHostMatcher(t *testing.T) {
+ _ = utils.LeakCheckContext(t)
ip := net.ParseIP("192.168.0.1")
addr := &net.TCPAddr{IP: ip, Port: 9999}
match := MatchSourceHost(net.Addr(addr), "")
@@ -105,9 +110,9 @@ func TestHostMatcher(t *testing.T) {
}
func TestStaticConfigHUP(t *testing.T) {
+ _ = utils.LeakCheckContext(t)
tmpFile, err := os.CreateTemp("", "mysql_auth_server_static_file.json")
require.NoError(t, err, "couldn't create temp file: %v", err)
-
defer os.Remove(tmpFile.Name())
oldStr := "str5"
@@ -125,14 +130,19 @@ func TestStaticConfigHUP(t *testing.T) {
mu.Lock()
defer mu.Unlock()
- // delete registered Auth server
- clear(authServers)
+ // Delete registered Auth servers.
+ for k, v := range authServers {
+ if s, ok := v.(*AuthServerStatic); ok {
+ s.close()
+ }
+ delete(authServers, k)
+ }
}
func TestStaticConfigHUPWithRotation(t *testing.T) {
+ _ = utils.LeakCheckContext(t)
tmpFile, err := os.CreateTemp("", "mysql_auth_server_static_file.json")
require.NoError(t, err, "couldn't create temp file: %v", err)
-
defer os.Remove(tmpFile.Name())
oldStr := "str1"
@@ -147,6 +157,16 @@ func TestStaticConfigHUPWithRotation(t *testing.T) {
hupTestWithRotation(t, aStatic, tmpFile, oldStr, "str4")
hupTestWithRotation(t, aStatic, tmpFile, "str4", "str5")
+
+ mu.Lock()
+ defer mu.Unlock()
+ // Delete registered Auth servers.
+ for k, v := range authServers {
+ if s, ok := v.(*AuthServerStatic); ok {
+ s.close()
+ }
+ delete(authServers, k)
+ }
}
func hupTest(t *testing.T, aStatic *AuthServerStatic, tmpFile *os.File, oldStr, newStr string) {
@@ -178,6 +198,7 @@ func hupTestWithRotation(t *testing.T, aStatic *AuthServerStatic, tmpFile *os.Fi
}
func TestStaticPasswords(t *testing.T) {
+ _ = utils.LeakCheckContext(t)
jsonConfig := `
{
"user01": [{ "Password": "user01" }],
diff --git a/go/mysql/binlog_event_compression.go b/go/mysql/binlog_event_compression.go
index 378698bc64b..37d28431087 100644
--- a/go/mysql/binlog_event_compression.go
+++ b/go/mysql/binlog_event_compression.go
@@ -25,7 +25,6 @@ import (
"github.com/klauspost/compress/zstd"
"vitess.io/vitess/go/stats"
- "vitess.io/vitess/go/vt/log"
"vitess.io/vitess/go/vt/vterrors"
vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc"
@@ -59,11 +58,6 @@ const (
// Length of the binlog event header for internal events within
// the transaction payload.
headerLen = binlogEventLenOffset + eventLenBytes
-
- // At what size should we switch from the in-memory buffer
- // decoding to streaming mode which is much slower, but does
- // not require everything be done in memory.
- zstdInMemoryDecompressorMaxSize = 128 << (10 * 2) // 128MiB
)
var (
@@ -76,39 +70,27 @@ var (
compressedTrxPayloadsInMem = stats.NewCounter("CompressedTransactionPayloadsInMemory", "The number of compressed binlog transaction payloads that were processed in memory")
compressedTrxPayloadsUsingStream = stats.NewCounter("CompressedTransactionPayloadsViaStream", "The number of compressed binlog transaction payloads that were processed using a stream")
+ // At what size should we switch from the in-memory buffer
+ // decoding to streaming mode which is much slower, but does
+ // not require everything be done in memory all at once.
+ ZstdInMemoryDecompressorMaxSize = uint64(128 << (10 * 2)) // 128MiB
+
// A concurrent stateless decoder that caches decompressors. This is
// used for smaller payloads that we want to handle entirely using
// in-memory buffers via DecodeAll.
statelessDecoder *zstd.Decoder
// A pool of stateful decoders for larger payloads that we want to
- // stream. The number of large (> zstdInMemoryDecompressorMaxSize)
+ // stream. The number of large (> ZstdInMemoryDecompressorMaxSize)
// payloads should typically be relatively low, but there may be times
// where there are many of them -- and users like vstreamer may have
// N concurrent streams per tablet which could lead to a lot of
// allocations and GC overhead so this pool allows us to handle
// concurrent cases better while still scaling to 0 when there's no
// usage.
- statefulDecoderPool sync.Pool
+ statefulDecoderPool = &decoderPool{}
)
-func init() {
- var err error
- statelessDecoder, err = zstd.NewReader(nil, zstd.WithDecoderConcurrency(0))
- if err != nil { // Should only happen e.g. due to ENOMEM
- log.Errorf("Error creating stateless decoder: %v", err)
- }
- statefulDecoderPool = sync.Pool{
- New: func() any {
- d, err := zstd.NewReader(nil, zstd.WithDecoderMaxMemory(zstdInMemoryDecompressorMaxSize))
- if err != nil { // Should only happen e.g. due to ENOMEM
- log.Errorf("Error creating stateful decoder: %v", err)
- }
- return d
- },
- }
-}
-
type TransactionPayload struct {
size uint64
compressionType uint64
@@ -116,6 +98,11 @@ type TransactionPayload struct {
payload []byte
reader io.Reader
iterator func() (BinlogEvent, error)
+ // StreamingContents tells the consumer that we are streaming the
+ // decompressed payload and they should also stream the events.
+ // This ensures that neither the producer nor the consumer are
+ // holding the entire payload's contents in memory.
+ StreamingContents bool
}
// IsTransactionPayload returns true if a compressed transaction
@@ -289,7 +276,7 @@ func (tp *TransactionPayload) decode() error {
}
// decompress decompresses the payload. If the payload is larger than
-// zstdInMemoryDecompressorMaxSize then we stream the decompression via
+// ZstdInMemoryDecompressorMaxSize then we stream the decompression via
// the package's pool of zstd.Decoders, otherwise we use in-memory
// buffers with the package's concurrent statelessDecoder.
// In either case, we setup the reader that can be used within the
@@ -302,23 +289,26 @@ func (tp *TransactionPayload) decompress() error {
// Switch to slower but less memory intensive stream mode for
// larger payloads.
- if tp.uncompressedSize > zstdInMemoryDecompressorMaxSize {
+ if tp.uncompressedSize > ZstdInMemoryDecompressorMaxSize {
in := bytes.NewReader(tp.payload)
- streamDecoder := statefulDecoderPool.Get().(*zstd.Decoder)
- if streamDecoder == nil {
- return vterrors.New(vtrpcpb.Code_INTERNAL, "failed to create stateful stream decoder")
- }
- if err := streamDecoder.Reset(in); err != nil {
- return vterrors.Wrap(err, "error resetting stateful stream decoder")
+ streamDecoder, err := statefulDecoderPool.Get(in)
+ if err != nil {
+ return err
}
compressedTrxPayloadsUsingStream.Add(1)
tp.reader = streamDecoder
+ // Signal the consumer to also stream the contents.
+ tp.StreamingContents = true
return nil
}
// Process smaller payloads using only in-memory buffers.
- if statelessDecoder == nil { // Should never happen
- return vterrors.New(vtrpcpb.Code_INTERNAL, "failed to create stateless decoder")
+ if statelessDecoder == nil { // Should only need to be done once
+ var err error
+ statelessDecoder, err = zstd.NewReader(nil, zstd.WithDecoderConcurrency(0))
+ if err != nil { // Should only happen e.g. due to ENOMEM
+ return vterrors.Wrap(err, "failed to create stateless decoder")
+ }
}
decompressedBytes := make([]byte, 0, tp.uncompressedSize) // Perform a single pre-allocation
decompressedBytes, err := statelessDecoder.DecodeAll(tp.payload, decompressedBytes[:0])
@@ -340,11 +330,8 @@ func (tp *TransactionPayload) decompress() error {
func (tp *TransactionPayload) Close() {
switch reader := tp.reader.(type) {
case *zstd.Decoder:
- if err := reader.Reset(nil); err == nil || err == io.EOF {
- readersPool.Put(reader)
- }
+ statefulDecoderPool.Put(reader)
default:
- reader = nil
}
tp.iterator = nil
}
@@ -368,3 +355,41 @@ func (tp *TransactionPayload) GetNextEvent() (BinlogEvent, error) {
//func (tp *TransactionPayload) Events() iter.Seq[BinlogEvent] {
// return tp.iterator
//}
+
+// decoderPool manages a sync.Pool of *zstd.Decoders.
+type decoderPool struct {
+ pool sync.Pool
+}
+
+// Get gets a pooled OR new *zstd.Decoder.
+func (dp *decoderPool) Get(reader io.Reader) (*zstd.Decoder, error) {
+ var (
+ decoder *zstd.Decoder
+ ok bool
+ )
+ if pooled := dp.pool.Get(); pooled != nil {
+ decoder, ok = pooled.(*zstd.Decoder)
+ if !ok {
+ return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "[BUG] expected *zstd.Decoder but got %T", pooled)
+ }
+ } else {
+ // Use the minimum amount of memory we can in processing the transaction by
+ // setting lowMem to true and limiting the decoder concurrency to 1 so that
+ // there's no async decoding of multiple windows or blocks.
+ d, err := zstd.NewReader(nil, zstd.WithDecoderLowmem(true), zstd.WithDecoderConcurrency(1))
+ if err != nil { // Should only happen e.g. due to ENOMEM
+ return nil, vterrors.Wrap(err, "failed to create stateful stream decoder")
+ }
+ decoder = d
+ }
+ if err := decoder.Reset(reader); err != nil {
+ return nil, vterrors.Wrap(err, "error resetting stateful stream decoder")
+ }
+ return decoder, nil
+}
+
+func (dp *decoderPool) Put(decoder *zstd.Decoder) {
+ if err := decoder.Reset(nil); err == nil || err == io.EOF {
+ dp.pool.Put(decoder)
+ }
+}
diff --git a/go/mysql/binlog_event_compression_test.go b/go/mysql/binlog_event_compression_test.go
new file mode 100644
index 00000000000..4c6418a1aa0
--- /dev/null
+++ b/go/mysql/binlog_event_compression_test.go
@@ -0,0 +1,75 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package mysql
+
+import (
+ "bytes"
+ "io"
+ "testing"
+
+ "github.com/klauspost/compress/zstd"
+ "github.com/stretchr/testify/require"
+)
+
+func TestDecoderPool(t *testing.T) {
+ validateDecoder := func(t *testing.T, err error, decoder *zstd.Decoder) {
+ require.NoError(t, err)
+ require.NotNil(t, decoder)
+ require.IsType(t, &zstd.Decoder{}, decoder)
+ }
+ tests := []struct {
+ name string
+ reader io.Reader
+ wantErr bool
+ }{
+ {
+ name: "happy path",
+ reader: bytes.NewReader([]byte{0x68, 0x61, 0x70, 0x70, 0x79}),
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ // It's not guaranteed that we get the same decoder back from the pool
+ // that we just put in, so we use a loop and ensure that it worked at
+ // least one of the times. Without doing this the test would be flaky.
+ poolingUsed := false
+
+ for i := 0; i < 20; i++ {
+ decoder, err := statefulDecoderPool.Get(tt.reader)
+ validateDecoder(t, err, decoder)
+ statefulDecoderPool.Put(decoder)
+
+ decoder2, err := statefulDecoderPool.Get(tt.reader)
+ validateDecoder(t, err, decoder2)
+ if decoder2 == decoder {
+ poolingUsed = true
+ }
+ statefulDecoderPool.Put(decoder2)
+
+ decoder3, err := statefulDecoderPool.Get(tt.reader)
+ validateDecoder(t, err, decoder3)
+ if decoder3 == decoder || decoder3 == decoder2 {
+ poolingUsed = true
+ }
+ statefulDecoderPool.Put(decoder3)
+ }
+
+ require.True(t, poolingUsed)
+ })
+ }
+}
diff --git a/go/mysql/binlog_event_mysql56_test.go b/go/mysql/binlog_event_mysql56_test.go
index f173e27e4af..5844779de63 100644
--- a/go/mysql/binlog_event_mysql56_test.go
+++ b/go/mysql/binlog_event_mysql56_test.go
@@ -141,6 +141,12 @@ func TestMysql56DecodeTransactionPayload(t *testing.T) {
},
}
+ // Ensure that we can process events where the *uncompressed* size is
+ // larger than ZstdInMemoryDecompressorMaxSize. The *compressed* size
+ // of the payload in large_compressed_trx_payload.bin is 16KiB so we
+ // set the max to 2KiB to test this.
+ ZstdInMemoryDecompressorMaxSize = 2048
+
for _, tc := range testCases {
memDecodingCnt := compressedTrxPayloadsInMem.Get()
streamDecodingCnt := compressedTrxPayloadsUsingStream.Get()
@@ -180,9 +186,11 @@ func TestMysql56DecodeTransactionPayload(t *testing.T) {
}
}
if tc.inMemory {
+ require.False(t, tp.StreamingContents)
require.Equal(t, memDecodingCnt+1, compressedTrxPayloadsInMem.Get())
require.Equal(t, tc.want, eventStrs)
} else {
+ require.True(t, tp.StreamingContents)
require.Equal(t, streamDecodingCnt+1, compressedTrxPayloadsUsingStream.Get())
require.Len(t, eventStrs, len(tc.want))
totalSize := 0
@@ -191,7 +199,7 @@ func TestMysql56DecodeTransactionPayload(t *testing.T) {
totalSize += len(eventStr)
require.True(t, strings.HasPrefix(eventStr, want))
}
- require.Greater(t, totalSize, zstdInMemoryDecompressorMaxSize)
+ require.Greater(t, uint64(totalSize), ZstdInMemoryDecompressorMaxSize)
}
}
}
diff --git a/go/mysql/collations/charset/filename.go b/go/mysql/collations/charset/filename.go
new file mode 100644
index 00000000000..50395645f98
--- /dev/null
+++ b/go/mysql/collations/charset/filename.go
@@ -0,0 +1,375 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package charset
+
+import (
+ "strings"
+ "unicode"
+)
+
+/*
+*s++ = MY_FILENAME_ESCAPE;
+if ((wc >= 0x00C0 && wc <= 0x05FF && (code = uni_0C00_05FF[wc - 0x00C0])) ||
+ (wc >= 0x1E00 && wc <= 0x1FFF && (code = uni_1E00_1FFF[wc - 0x1E00])) ||
+ (wc >= 0x2160 && wc <= 0x217F && (code = uni_2160_217F[wc - 0x2160])) ||
+ (wc >= 0x24B0 && wc <= 0x24EF && (code = uni_24B0_24EF[wc - 0x24B0])) ||
+ (wc >= 0xFF20 && wc <= 0xFF5F && (code = uni_FF20_FF5F[wc - 0xFF20]))) {
+ *s++ = (code / 80) + 0x30;
+ *s++ = (code % 80) + 0x30;
+ return 3;
+}
+*/
+
+// TablenameToFilename is a rewrite of MySQL's `tablename_to_filename` utility function.
+// InnoDB table names are in the form of schema_name/table_name, except each of the tokens are encoded using this function.
+// For simple characters there is no change, but special characters get encoded. Thus, the table `tbl-fts` in `test` db
+// will be encoded as `test/tbl@002dfts`
+//
+// Original encoding function:
+//
+// https://github.com/mysql/mysql-server/blob/89e1c722476deebc3ddc8675e779869f6da654c0/strings/ctype-utf8.cc#L6961-L6984
+//
+// static int my_wc_mb_filename(const CHARSET_INFO *cs [[maybe_unused]],
+// my_wc_t wc, uchar *s, uchar *e) {
+// int code;
+// char hex[] = "0123456789abcdef";
+//
+// if (s >= e) return MY_CS_TOOSMALL;
+//
+// if (wc < 128 && filename_safe_char[wc]) {
+// *s = (uchar)wc;
+// return 1;
+// }
+//
+// if (s + 3 > e) return MY_CS_TOOSMALL3;
+//
+// *s++ = MY_FILENAME_ESCAPE;
+// if ((wc >= 0x00C0 && wc <= 0x05FF && (code = uni_0C00_05FF[wc - 0x00C0])) ||
+// (wc >= 0x1E00 && wc <= 0x1FFF && (code = uni_1E00_1FFF[wc - 0x1E00])) ||
+// (wc >= 0x2160 && wc <= 0x217F && (code = uni_2160_217F[wc - 0x2160])) ||
+// (wc >= 0x24B0 && wc <= 0x24EF && (code = uni_24B0_24EF[wc - 0x24B0])) ||
+// (wc >= 0xFF20 && wc <= 0xFF5F && (code = uni_FF20_FF5F[wc - 0xFF20]))) {
+// *s++ = (code / 80) + 0x30;
+// *s++ = (code % 80) + 0x30;
+// return 3;
+// }
+//
+// /* Non letter */
+// if (s + 5 > e) return MY_CS_TOOSMALL5;
+//
+// *s++ = hex[(wc >> 12) & 15];
+// *s++ = hex[(wc >> 8) & 15];
+// *s++ = hex[(wc >> 4) & 15];
+// *s++ = hex[(wc)&15];
+// return 5;
+// }
+//
+// See also MySQL docs: https://dev.mysql.com/doc/refman/8.0/en/identifier-mapping.html
+func TablenameToFilename(name string) string {
+ var b strings.Builder
+ for _, wc := range name {
+ if wc < 128 && filename_safe_char[wc] == 1 {
+ b.WriteRune(wc)
+ continue
+ }
+
+ b.WriteRune('@')
+
+ var code uint16
+ switch {
+ case wc >= 0x00C0 && wc <= 0x05FF:
+ code = uni_0C00_05FF[wc-0x00C0]
+ case wc >= 0x1E00 && wc <= 0x1FFF:
+ code = uni_1E00_1FFF[wc-0x1E00]
+ case wc >= 0x2160 && wc <= 0x217F:
+ code = uni_2160_217F[wc-0x2160]
+ case wc >= 0x24B0 && wc <= 0x24EF:
+ code = uni_24B0_24EF[wc-0x24B0]
+ case wc >= 0xFF20 && wc <= 0xFF5F:
+ code = uni_FF20_FF5F[wc-0xFF20]
+ }
+ if code != 0 {
+ // One of specifically addressed character sets
+ b.WriteRune(unicode.ToLower(rune(code/80) + 0x30))
+ b.WriteRune(unicode.ToLower(rune(code%80) + 0x30))
+ continue
+ }
+ // Other characters
+ b.WriteByte(hexSequence[(wc>>12)&15])
+ b.WriteByte(hexSequence[(wc>>8)&15])
+ b.WriteByte(hexSequence[(wc>>4)&15])
+ b.WriteByte(hexSequence[(wc)&15])
+ }
+ return b.String()
+}
+
+var (
+ hexSequence = "0123456789abcdef"
+
+ filename_safe_char = []byte{
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ................ */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ................ */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* !"#$%&'()*+,-./ */
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, /* 0123456789:;<=>? */
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* @ABCDEFGHIJKLMNO */
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, /* PQRSTUVWXYZ[\]^_ */
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* `abcdefghijklmno */
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* pqrstuvwxyz{|}~. */
+ }
+
+ /* 00C0-05FF */
+ uni_0C00_05FF = []uint16{
+ 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028,
+ 0x0029, 0x002A, 0x0067, 0x0068, 0x0069, 0x0000, 0x006B, 0x006C, 0x006D,
+ 0x006E, 0x006F, 0x0070, 0x0071, 0x008A, 0x0037, 0x0038, 0x0039, 0x003A,
+ 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043,
+ 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x0087, 0x0088,
+ 0x0089, 0x0000, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0091,
+ 0x0092, 0x0073, 0x0093, 0x0074, 0x0094, 0x0075, 0x0095, 0x0076, 0x0096,
+ 0x0077, 0x0097, 0x0078, 0x0098, 0x0079, 0x0099, 0x007A, 0x009A, 0x00B7,
+ 0x00D7, 0x00B8, 0x00D8, 0x00B9, 0x00D9, 0x00BA, 0x00DA, 0x00BB, 0x00DB,
+ 0x00BC, 0x00DC, 0x00BD, 0x00DD, 0x00BE, 0x00DE, 0x00BF, 0x00DF, 0x00C0,
+ 0x00E0, 0x00C1, 0x00E1, 0x00C2, 0x00E2, 0x00C3, 0x00E3, 0x00C4, 0x00E4,
+ 0x00C5, 0x00E5, 0x00C6, 0x00E6, 0x0000, 0x00E7, 0x00C8, 0x00E8, 0x00C9,
+ 0x00E9, 0x00CA, 0x00EA, 0x0127, 0x0108, 0x0128, 0x0109, 0x0129, 0x010A,
+ 0x012A, 0x010B, 0x012B, 0x010C, 0x012C, 0x010D, 0x012D, 0x010E, 0x012E,
+ 0x010F, 0x012F, 0x0130, 0x0111, 0x0131, 0x0112, 0x0132, 0x0113, 0x0133,
+ 0x0114, 0x0134, 0x0115, 0x0135, 0x0116, 0x0136, 0x0117, 0x0137, 0x0118,
+ 0x0138, 0x0119, 0x0139, 0x011A, 0x013A, 0x0157, 0x0177, 0x0158, 0x0178,
+ 0x0159, 0x0179, 0x015A, 0x017A, 0x015B, 0x017B, 0x015C, 0x017C, 0x015D,
+ 0x017D, 0x015E, 0x017E, 0x015F, 0x017F, 0x0160, 0x0180, 0x0161, 0x0181,
+ 0x0162, 0x0182, 0x0163, 0x0183, 0x0072, 0x0164, 0x0184, 0x0165, 0x0185,
+ 0x0166, 0x0186, 0x0187, 0x1161, 0x0A86, 0x07B1, 0x11B1, 0x0801, 0x1201,
+ 0x0AD6, 0x0851, 0x1251, 0x0B76, 0x0BC6, 0x08A1, 0x12A1, 0x12F1, 0x0D52,
+ 0x0C66, 0x0D06, 0x0941, 0x1341, 0x0857, 0x0947, 0x1391, 0x0B27, 0x0AD7,
+ 0x09E1, 0x13E1, 0x1431, 0x1481, 0x0D07, 0x07B8, 0x14D1, 0x08A8, 0x0B21,
+ 0x1521, 0x0B71, 0x1571, 0x0BC1, 0x15C1, 0x0C18, 0x0C11, 0x1611, 0x0D08,
+ 0x1661, 0x16B1, 0x0D01, 0x1701, 0x0859, 0x0D51, 0x1751, 0x08F9, 0x0949,
+ 0x0762, 0x1162, 0x07B2, 0x11B2, 0x0B79, 0x0802, 0x1202, 0x1252, 0x12A2,
+ 0x0992, 0x1392, 0x1342, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x09E2,
+ 0x0000, 0x13E2, 0x0A32, 0x0000, 0x1432, 0x0A82, 0x0000, 0x1482, 0x0AD2,
+ 0x14D2, 0x0B22, 0x1522, 0x0B72, 0x1572, 0x0BC2, 0x15C2, 0x0C12, 0x1612,
+ 0x0C62, 0x1662, 0x0CB2, 0x16B2, 0x0D02, 0x1702, 0x1752, 0x0763, 0x1163,
+ 0x07B3, 0x11B3, 0x0803, 0x1203, 0x0853, 0x1253, 0x08A3, 0x12A3, 0x08F3,
+ 0x12F3, 0x0943, 0x1343, 0x0993, 0x1393, 0x09E3, 0x13E3, 0x1433, 0x0A83,
+ 0x0000, 0x1483, 0x0AD3, 0x14D3, 0x0991, 0x0000, 0x0B23, 0x1523, 0x0B73,
+ 0x1573, 0x0BC3, 0x15C3, 0x0C13, 0x1613, 0x0C63, 0x1663, 0x0CB3, 0x16B3,
+ 0x0D03, 0x1703, 0x0D53, 0x1753, 0x0764, 0x1164, 0x07B4, 0x11B4, 0x0804,
+ 0x1204, 0x0854, 0x1254, 0x08A4, 0x12A4, 0x08F4, 0x12F4, 0x0944, 0x1344,
+ 0x0994, 0x1394, 0x09E4, 0x13E4, 0x0A34, 0x1434, 0x0A84, 0x1484, 0x0AD4,
+ 0x14D4, 0x0AD1, 0x1524, 0x0B74, 0x1574, 0x0BC4, 0x15C4, 0x0C14, 0x1614,
+ 0x0C64, 0x1664, 0x0CB4, 0x16B4, 0x0D04, 0x1704, 0x0D54, 0x1754, 0x0765,
+ 0x1165, 0x07B5, 0x11B5, 0x1205, 0x1255, 0x12A5, 0x12F5, 0x1345, 0x1395,
+ 0x09E5, 0x0A35, 0x1435, 0x0A31, 0x0A85, 0x14D5, 0x1525, 0x0C19, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x1396, 0x13E6, 0x1436, 0x1486, 0x14D6,
+ 0x1526, 0x1576, 0x15C6, 0x1616, 0x1666, 0x16B6, 0x1706, 0x1756, 0x1167,
+ 0x11B7, 0x1207, 0x1257, 0x12A7, 0x12F7, 0x1347, 0x1397, 0x13E7, 0x1437,
+ 0x1487, 0x14D7, 0x1527, 0x1577, 0x15C7, 0x1617, 0x1667, 0x16B7, 0x1707,
+ 0x1757, 0x1168, 0x11B8, 0x1208, 0x1258, 0x12A8, 0x12F8, 0x1348, 0x1398,
+ 0x13E8, 0x1438, 0x1488, 0x14D8, 0x1528, 0x1578, 0x15C8, 0x1618, 0x1668,
+ 0x16B8, 0x1708, 0x1758, 0x1169, 0x11B9, 0x1209, 0x1259, 0x12A9, 0x12F9,
+ 0x1349, 0x1399, 0x13E9, 0x1439, 0x1489, 0x14D9, 0x1529, 0x1579, 0x15C9,
+ 0x1619, 0x1669, 0x16B9, 0x1709, 0x1759, 0x116A, 0x11BA, 0x120A, 0x125A,
+ 0x12AA, 0x12FA, 0x134A, 0x139A, 0x13EA, 0x143A, 0x148A, 0x14DA, 0x152A,
+ 0x157A, 0x15CA, 0x161A, 0x166A, 0x16BA, 0x170A, 0x175A, 0x116B, 0x11BB,
+ 0x120B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01F7,
+ 0x0000, 0x01F8, 0x01F9, 0x01FA, 0x0000, 0x0253, 0x0000, 0x0254, 0x0255,
+ 0x01D9, 0x01FC, 0x0257, 0x01FE, 0x01FF, 0x0200, 0x0201, 0x0202, 0x0258,
+ 0x0204, 0x02A7, 0x0206, 0x0207, 0x0208, 0x0209, 0x020A, 0x0299, 0x0248,
+ 0x0000, 0x02A9, 0x024B, 0x024C, 0x0298, 0x024E, 0x024F, 0x0250, 0x0251,
+ 0x0252, 0x0217, 0x0218, 0x0219, 0x021A, 0x021B, 0x021C, 0x021D, 0x021E,
+ 0x021F, 0x0220, 0x0221, 0x0222, 0x0223, 0x0224, 0x0225, 0x0226, 0x0227,
+ 0x0228, 0x0229, 0x022A, 0x0267, 0x0268, 0x0269, 0x026A, 0x026B, 0x026C,
+ 0x026D, 0x026E, 0x026F, 0x0270, 0x0271, 0x0272, 0x0273, 0x0274, 0x0275,
+ 0x0000, 0x0277, 0x0278, 0x0259, 0x025A, 0x0297, 0x02B8, 0x02B9, 0x02BA,
+ 0x0000, 0x02BB, 0x029C, 0x02BC, 0x029D, 0x02BD, 0x029E, 0x02BE, 0x029F,
+ 0x02BF, 0x02A0, 0x02C0, 0x02A1, 0x02C1, 0x02A2, 0x02C2, 0x02A3, 0x02C3,
+ 0x02A4, 0x02C4, 0x02A5, 0x02C5, 0x02A6, 0x02C6, 0x02C7, 0x02C8, 0x02C9,
+ 0x02CA, 0x0000, 0x0307, 0x0308, 0x0000, 0x0309, 0x0000, 0x0000, 0x030A,
+ 0x030B, 0x02EC, 0x02ED, 0x02EE, 0x0AF1, 0x0B41, 0x0B91, 0x0BE1, 0x0C31,
+ 0x0C81, 0x0CD1, 0x0D21, 0x0732, 0x0782, 0x07D2, 0x0822, 0x0872, 0x08C2,
+ 0x0912, 0x0962, 0x0730, 0x0780, 0x07D0, 0x0820, 0x0870, 0x08C0, 0x0910,
+ 0x0960, 0x09B0, 0x0A00, 0x0A50, 0x0AA0, 0x0AF0, 0x0B40, 0x0B90, 0x0BE0,
+ 0x0C30, 0x0C80, 0x0CD0, 0x0D20, 0x0731, 0x0781, 0x07D1, 0x0821, 0x0871,
+ 0x08C1, 0x0911, 0x0961, 0x09B1, 0x0A01, 0x0A51, 0x0AA1, 0x1130, 0x1180,
+ 0x11D0, 0x1220, 0x1270, 0x12C0, 0x1310, 0x1360, 0x13B0, 0x1400, 0x1450,
+ 0x14A0, 0x14F0, 0x1540, 0x1590, 0x15E0, 0x1630, 0x1680, 0x16D0, 0x1720,
+ 0x1131, 0x1181, 0x11D1, 0x1221, 0x1271, 0x12C1, 0x1311, 0x1361, 0x13B1,
+ 0x1401, 0x1451, 0x14A1, 0x14F1, 0x1541, 0x1591, 0x15E1, 0x1631, 0x1681,
+ 0x16D1, 0x1721, 0x1132, 0x1182, 0x11D2, 0x1222, 0x1272, 0x12C2, 0x1312,
+ 0x1362, 0x09B2, 0x13B2, 0x0A02, 0x1402, 0x0A52, 0x1452, 0x0AA2, 0x14A2,
+ 0x0AF2, 0x14F2, 0x0B42, 0x1542, 0x0B92, 0x1592, 0x0BE2, 0x15E2, 0x0C32,
+ 0x1632, 0x0C82, 0x1682, 0x0CD2, 0x16D2, 0x0D22, 0x1722, 0x0733, 0x1133,
+ 0x0783, 0x1183, 0x07D3, 0x11D3, 0x0823, 0x1223, 0x0873, 0x1273, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0913, 0x1313,
+ 0x0963, 0x1363, 0x09B3, 0x13B3, 0x0A03, 0x1403, 0x0A53, 0x1453, 0x0AA3,
+ 0x14A3, 0x0AF3, 0x14F3, 0x0B43, 0x1543, 0x0B93, 0x1593, 0x0BE3, 0x15E3,
+ 0x0C33, 0x1633, 0x0C83, 0x1683, 0x0CD3, 0x16D3, 0x0D23, 0x1723, 0x0734,
+ 0x1134, 0x0784, 0x1184, 0x07D4, 0x11D4, 0x0824, 0x1224, 0x0874, 0x1274,
+ 0x08C4, 0x12C4, 0x0914, 0x1314, 0x0964, 0x1364, 0x09B4, 0x13B4, 0x0A04,
+ 0x1404, 0x0A54, 0x1454, 0x0AA4, 0x14A4, 0x0AF4, 0x14F4, 0x0B44, 0x0B94,
+ 0x1594, 0x0BE4, 0x15E4, 0x0C34, 0x1634, 0x0C84, 0x1684, 0x0CD4, 0x16D4,
+ 0x0D24, 0x1724, 0x0735, 0x1135, 0x0000, 0x07D5, 0x11D5, 0x0825, 0x1225,
+ 0x0875, 0x1275, 0x08C5, 0x12C5, 0x0915, 0x1315, 0x0965, 0x1365, 0x09B5,
+ 0x13B5, 0x0A05, 0x1405, 0x0A55, 0x1455, 0x0AA5, 0x14A5, 0x0AF5, 0x14F5,
+ 0x0B45, 0x1545, 0x0B95, 0x1595, 0x0BE5, 0x15E5, 0x0C35, 0x1635, 0x0C85,
+ 0x1685, 0x0CD5, 0x16D5, 0x0D25, 0x1725, 0x0736, 0x1136, 0x0786, 0x1186,
+ 0x07D6, 0x11D6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0A06,
+ 0x1406, 0x0A56, 0x1456, 0x0AA6, 0x14A6, 0x0AF6, 0x14F6, 0x0B46, 0x1546,
+ 0x0B96, 0x1596, 0x0BE6, 0x15E6, 0x0C36, 0x1636, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0787, 0x07D7, 0x0827, 0x0877, 0x08C7, 0x0917,
+ 0x0967, 0x09B7, 0x0A07, 0x0A57, 0x0AA7, 0x0AF7, 0x0B47, 0x0B97, 0x0BE7,
+ 0x0C37, 0x0C87, 0x0CD7, 0x0D27, 0x0738, 0x0788, 0x07D8, 0x0828, 0x0878,
+ 0x08C8, 0x0918, 0x0968, 0x09B8, 0x0A08, 0x0A58, 0x0AA8, 0x0AF8, 0x0B48,
+ 0x0B98, 0x0BE8, 0x0C38, 0x0C88, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1187, 0x11D7, 0x1227,
+ 0x1277, 0x12C7, 0x1317, 0x1367, 0x13B7, 0x1407, 0x1457, 0x14A7, 0x14F7,
+ 0x1547, 0x1597, 0x15E7, 0x1637, 0x1687, 0x16D7, 0x1727, 0x1138, 0x1188,
+ 0x11D8, 0x1228, 0x1278, 0x12C8, 0x1318, 0x1368, 0x13B8, 0x1408, 0x1458,
+ 0x14A8, 0x14F8, 0x1548, 0x1598, 0x15E8, 0x1638, 0x1688, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000}
+
+ /* 1E00-1FFF */
+ uni_1E00_1FFF = []uint16{
+ 0x076C, 0x116C, 0x07BC, 0x11BC, 0x080C, 0x120C, 0x085C, 0x125C, 0x08AC,
+ 0x12AC, 0x08FC, 0x12FC, 0x094C, 0x134C, 0x099C, 0x139C, 0x09EC, 0x13EC,
+ 0x0A3C, 0x143C, 0x0A8C, 0x148C, 0x0ADC, 0x14DC, 0x0B2C, 0x152C, 0x0B7C,
+ 0x157C, 0x0BCC, 0x15CC, 0x0C1C, 0x161C, 0x0C6C, 0x166C, 0x0CBC, 0x16BC,
+ 0x0D0C, 0x170C, 0x0D5C, 0x175C, 0x076D, 0x116D, 0x07BD, 0x11BD, 0x080D,
+ 0x120D, 0x085D, 0x125D, 0x08AD, 0x12AD, 0x08FD, 0x12FD, 0x094D, 0x134D,
+ 0x099D, 0x139D, 0x09ED, 0x13ED, 0x0A3D, 0x143D, 0x0A8D, 0x148D, 0x0ADD,
+ 0x14DD, 0x0B2D, 0x152D, 0x0B7D, 0x157D, 0x0BCD, 0x15CD, 0x0C1D, 0x161D,
+ 0x0C6D, 0x166D, 0x0CBD, 0x16BD, 0x0D0D, 0x170D, 0x0D5D, 0x175D, 0x076E,
+ 0x116E, 0x07BE, 0x11BE, 0x080E, 0x120E, 0x085E, 0x125E, 0x08AE, 0x12AE,
+ 0x08FE, 0x12FE, 0x094E, 0x134E, 0x099E, 0x139E, 0x0770, 0x13EE, 0x0A3E,
+ 0x143E, 0x0A8E, 0x148E, 0x0ADE, 0x14DE, 0x0B2E, 0x152E, 0x0B7E, 0x157E,
+ 0x0BCE, 0x15CE, 0x0C1E, 0x161E, 0x0C6E, 0x166E, 0x0CBE, 0x16BE, 0x0D0E,
+ 0x170E, 0x0D5E, 0x175E, 0x076F, 0x116F, 0x07BF, 0x11BF, 0x080F, 0x120F,
+ 0x085F, 0x125F, 0x08AF, 0x12AF, 0x08FF, 0x12FF, 0x094F, 0x134F, 0x099F,
+ 0x139F, 0x09EF, 0x13EF, 0x0A3F, 0x143F, 0x0A8F, 0x148F, 0x0ADF, 0x14DF,
+ 0x0B2F, 0x152F, 0x0B7F, 0x157F, 0x0BCF, 0x15CF, 0x161F, 0x166F, 0x16BF,
+ 0x170F, 0x175F, 0x1170, 0x0000, 0x0000, 0x0000, 0x0000, 0x0900, 0x1300,
+ 0x0950, 0x1350, 0x09A0, 0x13A0, 0x09F0, 0x13F0, 0x0A40, 0x1440, 0x0A90,
+ 0x1490, 0x0AE0, 0x14E0, 0x0B30, 0x1530, 0x0B80, 0x1580, 0x0BD0, 0x15D0,
+ 0x0C20, 0x1620, 0x0C70, 0x1670, 0x0CC0, 0x16C0, 0x0D10, 0x1710, 0x0D60,
+ 0x1760, 0x0771, 0x1171, 0x07C1, 0x11C1, 0x0811, 0x1211, 0x0861, 0x1261,
+ 0x08B1, 0x12B1, 0x0901, 0x1301, 0x0951, 0x1351, 0x09A1, 0x13A1, 0x09F1,
+ 0x13F1, 0x0A41, 0x1441, 0x0A91, 0x1491, 0x0AE1, 0x14E1, 0x0B31, 0x1531,
+ 0x0B81, 0x1581, 0x0BD1, 0x15D1, 0x0C21, 0x1621, 0x0C71, 0x1671, 0x0CC1,
+ 0x16C1, 0x0D11, 0x1711, 0x0D61, 0x1761, 0x0772, 0x1172, 0x07C2, 0x11C2,
+ 0x0812, 0x1212, 0x0862, 0x1262, 0x08B2, 0x12B2, 0x0902, 0x1302, 0x0952,
+ 0x1352, 0x09A2, 0x13A2, 0x09F2, 0x13F2, 0x0A42, 0x1442, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x1173, 0x11C3, 0x1213, 0x1263, 0x12B3,
+ 0x1303, 0x1353, 0x13A3, 0x0773, 0x07C3, 0x0813, 0x0863, 0x08B3, 0x0903,
+ 0x0953, 0x09A3, 0x13F3, 0x1443, 0x1493, 0x14E3, 0x1533, 0x1583, 0x0000,
+ 0x0000, 0x09F3, 0x0A43, 0x0A93, 0x0AE3, 0x0B33, 0x0B83, 0x0000, 0x0000,
+ 0x1713, 0x1763, 0x1174, 0x11C4, 0x1214, 0x1264, 0x12B4, 0x1304, 0x0D13,
+ 0x0D63, 0x0774, 0x07C4, 0x0814, 0x0864, 0x08B4, 0x0904, 0x1354, 0x13A4,
+ 0x13F4, 0x1444, 0x1494, 0x14E4, 0x1534, 0x1584, 0x0954, 0x09A4, 0x09F4,
+ 0x0A44, 0x0A94, 0x0AE4, 0x0B34, 0x0B84, 0x15D4, 0x1624, 0x1674, 0x16C4,
+ 0x1714, 0x1764, 0x0000, 0x0000, 0x0BD4, 0x0C24, 0x0C74, 0x0CC4, 0x0D14,
+ 0x0D64, 0x0000, 0x0000, 0x12B5, 0x1305, 0x1355, 0x13A5, 0x13F5, 0x1445,
+ 0x1495, 0x14E5, 0x0000, 0x0905, 0x0000, 0x09A5, 0x0000, 0x0A45, 0x0000,
+ 0x0AE5, 0x1675, 0x16C5, 0x1715, 0x1765, 0x1176, 0x11C6, 0x1216, 0x1266,
+ 0x0C75, 0x0CC5, 0x0D15, 0x0D65, 0x0776, 0x07C6, 0x0816, 0x0866, 0x12B6,
+ 0x1306, 0x1356, 0x13A6, 0x13F6, 0x1446, 0x1496, 0x14E6, 0x1536, 0x1586,
+ 0x15D6, 0x1626, 0x1676, 0x16C6, 0x0000, 0x0000, 0x1177, 0x11C7, 0x1217,
+ 0x1267, 0x12B7, 0x1307, 0x1357, 0x13A7, 0x0777, 0x07C7, 0x0817, 0x0867,
+ 0x08B7, 0x0907, 0x0957, 0x09A7, 0x13F7, 0x1447, 0x1497, 0x14E7, 0x1537,
+ 0x1587, 0x15D7, 0x1627, 0x09F7, 0x0A47, 0x0A97, 0x0AE7, 0x0B37, 0x0B87,
+ 0x0BD7, 0x0C27, 0x1677, 0x16C7, 0x1717, 0x1767, 0x1178, 0x11C8, 0x1218,
+ 0x1268, 0x0C77, 0x0CC7, 0x0D17, 0x0D67, 0x0778, 0x07C8, 0x0818, 0x0868,
+ 0x12B8, 0x1308, 0x1358, 0x13A8, 0x13F8, 0x0000, 0x1498, 0x14E8, 0x08B8,
+ 0x0908, 0x08B6, 0x0906, 0x09A8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1538, 0x1588, 0x15D8, 0x0000, 0x1678, 0x16C8, 0x0956, 0x09A6, 0x09F6,
+ 0x0A46, 0x0B88, 0x0000, 0x0000, 0x0000, 0x1718, 0x1768, 0x1179, 0x11C9,
+ 0x0000, 0x0000, 0x12B9, 0x1309, 0x0D18, 0x0D68, 0x0A96, 0x0AE6, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x13A9, 0x13F9, 0x1449, 0x1499, 0x14E9, 0x1539,
+ 0x1589, 0x15D9, 0x09A9, 0x09F9, 0x0BD6, 0x0C26, 0x0B39, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x16C9, 0x1719, 0x0000, 0x0000, 0x11CA, 0x121A,
+ 0x0B36, 0x0B86, 0x0C76, 0x0CC6, 0x0D19, 0x0000, 0x0000, 0x0000}
+
+ /* 2160-217F */
+ uni_2160_217F = []uint16{
+ 0x0739, 0x0789, 0x07D9, 0x0829, 0x0879, 0x08C9, 0x0919, 0x0969,
+ 0x09B9, 0x0A09, 0x0A59, 0x0AA9, 0x0AF9, 0x0B49, 0x0B99, 0x0BE9,
+ 0x1139, 0x1189, 0x11D9, 0x1229, 0x1279, 0x12C9, 0x1319, 0x1369,
+ 0x13B9, 0x1409, 0x1459, 0x14A9, 0x14F9, 0x1549, 0x1599, 0x15E9}
+
+ /* 24B0-24EF */
+ uni_24B0_24EF = []uint16{
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0511, 0x0512,
+ 0x0513, 0x0514, 0x0515, 0x0516, 0x0517, 0x0518, 0x0519, 0x051A,
+ 0x051B, 0x051C, 0x051D, 0x051E, 0x051F, 0x0520, 0x0521, 0x0522,
+ 0x0523, 0x0524, 0x0525, 0x0526, 0x0527, 0x0528, 0x0529, 0x052A,
+ 0x0531, 0x0532, 0x0533, 0x0534, 0x0535, 0x0536, 0x0537, 0x0538,
+ 0x0539, 0x053A, 0x053B, 0x053C, 0x053D, 0x053E, 0x053F, 0x0540,
+ 0x0541, 0x0542, 0x0543, 0x0544, 0x0545, 0x0546, 0x0547, 0x0548,
+ 0x0549, 0x054A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}
+
+ /* FF20-FF5F */
+ uni_FF20_FF5F = []uint16{
+ 0x0000, 0x0560, 0x05B0, 0x0600, 0x0650, 0x06A0, 0x06F0, 0x0740,
+ 0x0790, 0x07E0, 0x0830, 0x0880, 0x08D0, 0x0920, 0x0970, 0x09C0,
+ 0x0A10, 0x0A60, 0x0AB0, 0x0B00, 0x0B50, 0x0BA0, 0x0BF0, 0x0C40,
+ 0x0C90, 0x0CE0, 0x0D30, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0F60, 0x0FB0, 0x1000, 0x1050, 0x10A0, 0x10F0, 0x1140,
+ 0x1190, 0x11E0, 0x1230, 0x1280, 0x12D0, 0x1320, 0x1370, 0x13C0,
+ 0x1410, 0x1460, 0x14B0, 0x1500, 0x1550, 0x15A0, 0x15F0, 0x1640,
+ 0x1690, 0x16E0, 0x1730, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}
+)
diff --git a/go/mysql/collations/charset/filename_test.go b/go/mysql/collations/charset/filename_test.go
new file mode 100644
index 00000000000..a6f52cbf530
--- /dev/null
+++ b/go/mysql/collations/charset/filename_test.go
@@ -0,0 +1,62 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package charset
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestTablenameToFilename(t *testing.T) {
+ testCases := []struct {
+ tablename string
+ filename string
+ }{
+ {
+ tablename: "my_table123",
+ filename: "my_table123",
+ },
+ {
+ tablename: "my-table",
+ filename: "my@002dtable",
+ },
+ {
+ tablename: "my$table",
+ filename: "my@0024table",
+ },
+ {
+ tablename: "myát",
+ filename: "my@0ht",
+ },
+ {
+ tablename: "myÃt",
+ filename: "my@0jt",
+ },
+ {
+ tablename: "myאt",
+ filename: "my@05d0t",
+ },
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc.tablename, func(t *testing.T) {
+ filename := TablenameToFilename(tc.tablename)
+ assert.Equal(t, tc.filename, filename, "original bytes: %x", []byte(tc.tablename))
+ })
+ }
+}
diff --git a/go/mysql/config/config.go b/go/mysql/config/config.go
index cc08107f0a3..6070d0d6248 100644
--- a/go/mysql/config/config.go
+++ b/go/mysql/config/config.go
@@ -2,3 +2,4 @@ package config
const DefaultSQLMode = "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
const DefaultMySQLVersion = "8.0.30"
+const LegacyMySQLVersion = "5.7.31"
diff --git a/go/mysql/fakesqldb/server.go b/go/mysql/fakesqldb/server.go
index cd1080c862c..cc53ee19008 100644
--- a/go/mysql/fakesqldb/server.go
+++ b/go/mysql/fakesqldb/server.go
@@ -166,6 +166,11 @@ type ExpectedExecuteFetch struct {
// New creates a server, and starts listening.
func New(t testing.TB) *DB {
+ return NewWithEnv(t, vtenv.NewTestEnv())
+}
+
+// NewWithEnv creates a server, and starts listening.
+func NewWithEnv(t testing.TB, env *vtenv.Environment) *DB {
// Pick a path for our socket.
socketDir, err := os.MkdirTemp("", "fakesqldb")
if err != nil {
@@ -185,7 +190,7 @@ func New(t testing.TB) *DB {
queryPatternUserCallback: make(map[*regexp.Regexp]func(string)),
patternData: make(map[string]exprResult),
lastErrorMu: sync.Mutex{},
- env: vtenv.NewTestEnv(),
+ env: env,
}
db.Handler = db
diff --git a/go/mysql/flavor.go b/go/mysql/flavor.go
index a0f9e8cc4b1..4baccc78c28 100644
--- a/go/mysql/flavor.go
+++ b/go/mysql/flavor.go
@@ -151,6 +151,7 @@ type flavor interface {
baseShowTables() string
baseShowTablesWithSizes() string
+ baseShowInnodbTableSizes() string
supportsCapability(capability capabilities.FlavorCapability) (bool, error)
}
@@ -454,6 +455,11 @@ func (c *Conn) BaseShowTablesWithSizes() string {
return c.flavor.baseShowTablesWithSizes()
}
+// BaseShowInnodbTableSizes returns a query that shows innodb-internal FULLTEXT index tables and their sizes
+func (c *Conn) BaseShowInnodbTableSizes() string {
+ return c.flavor.baseShowInnodbTableSizes()
+}
+
// SupportsCapability checks if the database server supports the given capability
func (c *Conn) SupportsCapability(capability capabilities.FlavorCapability) (bool, error) {
return c.flavor.supportsCapability(capability)
diff --git a/go/mysql/flavor_filepos.go b/go/mysql/flavor_filepos.go
index 01d748c66f3..03d745468be 100644
--- a/go/mysql/flavor_filepos.go
+++ b/go/mysql/flavor_filepos.go
@@ -366,6 +366,10 @@ func (*filePosFlavor) baseShowTablesWithSizes() string {
return TablesWithSize56
}
+func (filePosFlavor) baseShowInnodbTableSizes() string {
+ return ""
+}
+
// supportsCapability is part of the Flavor interface.
func (f *filePosFlavor) supportsCapability(capability capabilities.FlavorCapability) (bool, error) {
switch capability {
diff --git a/go/mysql/flavor_mariadb_binlog_playback.go b/go/mysql/flavor_mariadb_binlog_playback.go
index b7fa18e434f..55655e01498 100644
--- a/go/mysql/flavor_mariadb_binlog_playback.go
+++ b/go/mysql/flavor_mariadb_binlog_playback.go
@@ -22,6 +22,10 @@ func (mariadbFlavor) baseShowTables() string {
return mysqlFlavor{}.baseShowTables()
}
+func (mariadbFlavor) baseShowInnodbTableSizes() string {
+ return ""
+}
+
// baseShowTablesWithSizes is part of the Flavor interface.
func (mariadbFlavor101) baseShowTablesWithSizes() string {
return TablesWithSize56
diff --git a/go/mysql/flavor_mysql.go b/go/mysql/flavor_mysql.go
index 5d92694e9f2..b109e5ca385 100644
--- a/go/mysql/flavor_mysql.go
+++ b/go/mysql/flavor_mysql.go
@@ -412,29 +412,67 @@ const BaseShowTables = `SELECT t.table_name,
t.table_schema = database()
`
-// TablesWithSize80 is a query to select table along with size for mysql 8.0
+// InnoDBTableSizes: a query to return file/allocated sizes for InnoDB tables.
+// File sizes and allocated sizes are found in information_schema.innodb_tablespaces
+// Table names in information_schema.innodb_tablespaces match those in information_schema.tables, even for table names
+// with special characters. This, a innodb_tablespaces.name could be `my-db/my-table`.
+// These tablespaces will have one entry for every InnoDB table, hidden or internal. This means:
+// - One entry for every partition in a partitioned table.
+// - Several entries for any FULLTEXT index (FULLTEXT indexes are not BTREEs and are implemented using multiple hidden tables)
+// So a single table wih a FULLTEXT index will have one entry for the "normal" table, plus multiple more entries for
+// every FTS index hidden tables.
+// Thankfully FULLTEXT does not work with Partitioning so this does not explode too much.
+// Next thing is that FULLTEXT hidden table names do not resemble the original table name, and could look like:
+// `a-b/fts_000000000000075e_00000000000005f9_index_2`.
+// To unlock the identify of this table we turn to information_schema.innodb_tables. These table similarly has one entry for
+// every InnoDB table, normal or hidden. It also has a `TABLE_ID` value. Given some table with FULLTEXT keys, its TABLE_ID
+// is encoded in the names of the hidden tables in information_schema.innodb_tablespaces: `000000000000075e` in the
+// example above.
//
-// Note the following:
-// - We use a single query to fetch both partitioned and non-partitioned tables. This is because
-// accessing `information_schema.innodb_tablespaces` is expensive on servers with many tablespaces,
-// and every query that loads the table needs to perform full table scans on it. Doing a single
-// table scan is more efficient than doing more than one.
-// - We utilize `INFORMATION_SCHEMA`.`TABLES`.`CREATE_OPTIONS` column to do early pruning before the JOIN.
-// - `TABLES`.`TABLE_NAME` has `utf8mb4_0900_ai_ci` collation. `INNODB_TABLESPACES`.`NAME` has `utf8mb3_general_ci`.
-// We normalize the collation to get better query performance (we force the casting at the time of our choosing)
-const TablesWithSize80 = `SELECT t.table_name,
- t.table_type,
- UNIX_TIMESTAMP(t.create_time),
- t.table_comment,
- SUM(i.file_size),
- SUM(i.allocated_size)
- FROM information_schema.tables t
- LEFT JOIN information_schema.innodb_tablespaces i
- ON i.name LIKE CONCAT(t.table_schema, '/', t.table_name, IF(t.create_options <=> 'partitioned', '#p#%', '')) COLLATE utf8mb3_general_ci
- WHERE
- t.table_schema = database()
- GROUP BY
- t.table_schema, t.table_name, t.table_type, t.create_time, t.table_comment
+// The query below is a two part:
+// 1. Finding the "normal" tables only, those that the user created. We note their file size and allocated size.
+// 2. Finding the hidden tables only, those that implement FTS keys. We aggregate their file size and allocated size grouping
+// by the original table name with which they're associated.
+//
+// A table that has a FULLTEXT index will have two entries in the result set:
+// - one for the "normal" table size (actual rows, texts, etc.)
+// - and one for the aggregated hidden table size
+// The code that reads the results of this query will need to add the two.
+// Similarly, the code will need to know how to aggregate the sizes of partitioned tables, which could appear as:
+// - `mydb/tbl_part#p#p0`
+// - `mydb/tbl_part#p#p1`
+// - `mydb/tbl_part#p#p2`
+// - `mydb/tbl_part#p#p3`
+//
+// Lastly, we note that table name in information_schema.innodb_tables are encoded. A table that shows as
+// `my-db/my-table` in information_schema.innodb_tablespaces will show as `my@002ddb/my@002dtable` in information_schema.innodb_tables.
+// So this query returns InnoDB-encoded table names. The golang code reading those will have to decode the names.
+const InnoDBTableSizes = `
+ SELECT
+ it.name,
+ its.file_size as normal_tables_sum_file_size,
+ its.allocated_size as normal_tables_sum_allocated_size
+ FROM
+ information_schema.innodb_tables it
+ JOIN information_schema.innodb_tablespaces its
+ ON (its.space = it.space)
+ WHERE
+ its.name LIKE CONCAT(database(), '/%')
+ AND its.name NOT LIKE CONCAT(database(), '/fts_%')
+ UNION ALL
+ SELECT
+ it.name,
+ SUM(its.file_size) as hidden_tables_sum_file_size,
+ SUM(its.allocated_size) as hidden_tables_sum_allocated_size
+ FROM
+ information_schema.innodb_tables it
+ JOIN information_schema.innodb_tablespaces its
+ ON (
+ its.name LIKE CONCAT(database(), '/fts_', CONVERT(LPAD(HEX(table_id), 16, '0') USING utf8mb3) COLLATE utf8mb3_general_ci, '_%')
+ )
+ WHERE
+ its.name LIKE CONCAT(database(), '/fts_%')
+ GROUP BY it.name
`
// baseShowTablesWithSizes is part of the Flavor interface.
@@ -442,6 +480,11 @@ func (mysqlFlavor57) baseShowTablesWithSizes() string {
return TablesWithSize57
}
+// baseShowInnodbTableSizes is part of the Flavor interface.
+func (mysqlFlavor57) baseShowInnodbTableSizes() string {
+ return ""
+}
+
// supportsCapability is part of the Flavor interface.
func (f mysqlFlavor) supportsCapability(capability capabilities.FlavorCapability) (bool, error) {
return capabilities.MySQLVersionHasCapability(f.serverVersion, capability)
@@ -449,7 +492,12 @@ func (f mysqlFlavor) supportsCapability(capability capabilities.FlavorCapability
// baseShowTablesWithSizes is part of the Flavor interface.
func (mysqlFlavor) baseShowTablesWithSizes() string {
- return TablesWithSize80
+ return "" // Won't be used, as InnoDBTableSizes is defined, and schema.Engine will use that, instead.
+}
+
+// baseShowInnodbTableSizes is part of the Flavor interface.
+func (mysqlFlavor) baseShowInnodbTableSizes() string {
+ return InnoDBTableSizes
}
func (mysqlFlavor) setReplicationSourceCommand(params *ConnParams, host string, port int32, heartbeatInterval float64, connectRetry int) string {
diff --git a/go/mysql/flavor_mysql_legacy.go b/go/mysql/flavor_mysql_legacy.go
index a5639cc944e..2263a9bff11 100644
--- a/go/mysql/flavor_mysql_legacy.go
+++ b/go/mysql/flavor_mysql_legacy.go
@@ -72,12 +72,13 @@ GROUP BY table_name,
// We join with a subquery that materializes the data from `information_schema.innodb_sys_tablespaces`
// early for performance reasons. This effectively causes only a single read of `information_schema.innodb_sys_tablespaces`
// per query.
+// Note that 5.7 has NULL for a VIEW's create_time, so we use IFNULL to make it 1 (non NULL and non zero).
const TablesWithSize57 = `SELECT t.table_name,
t.table_type,
- UNIX_TIMESTAMP(t.create_time),
+ IFNULL(UNIX_TIMESTAMP(t.create_time), 1),
t.table_comment,
- IFNULL(SUM(i.file_size), SUM(t.data_length + t.index_length)),
- IFNULL(SUM(i.allocated_size), SUM(t.data_length + t.index_length))
+ IFNULL(SUM(i.file_size), SUM(t.data_length + t.index_length)) AS file_size,
+ IFNULL(SUM(i.allocated_size), SUM(t.data_length + t.index_length)) AS allocated_size
FROM information_schema.tables t
LEFT OUTER JOIN (
SELECT space, file_size, allocated_size, name
diff --git a/go/mysql/flavor_mysqlgr.go b/go/mysql/flavor_mysqlgr.go
index 98516e9cc9f..9cb9f887e39 100644
--- a/go/mysql/flavor_mysqlgr.go
+++ b/go/mysql/flavor_mysqlgr.go
@@ -254,7 +254,12 @@ func (mysqlGRFlavor) baseShowTables() string {
}
func (mysqlGRFlavor) baseShowTablesWithSizes() string {
- return TablesWithSize80
+ return "" // Won't be used, as InnoDBTableSizes is defined, and schema.Engine will use that, instead.
+}
+
+// baseShowInnodbTableSizes is part of the Flavor interface.
+func (mysqlGRFlavor) baseShowInnodbTableSizes() string {
+ return InnoDBTableSizes
}
// supportsCapability is part of the Flavor interface.
diff --git a/go/mysql/handshake_test.go b/go/mysql/handshake_test.go
index 284189c30e8..13ed1099e58 100644
--- a/go/mysql/handshake_test.go
+++ b/go/mysql/handshake_test.go
@@ -37,6 +37,7 @@ import (
// This file tests the handshake scenarios between our client and our server.
func TestClearTextClientAuth(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
th := &testHandler{}
authServer := NewAuthServerStaticWithAuthMethodDescription("", "", 0, MysqlClearPassword)
@@ -51,10 +52,6 @@ func TestClearTextClientAuth(t *testing.T) {
defer l.Close()
host := l.Addr().(*net.TCPAddr).IP.String()
port := l.Addr().(*net.TCPAddr).Port
- go func() {
- l.Accept()
- }()
-
// Setup the right parameters.
params := &ConnParams{
Host: host,
@@ -63,9 +60,10 @@ func TestClearTextClientAuth(t *testing.T) {
Pass: "password1",
SslMode: vttls.Disabled,
}
+ go l.Accept()
+ defer cleanupListener(ctx, l, params)
// Connection should fail, as server requires SSL for clear text auth.
- ctx := context.Background()
_, err = Connect(ctx, params)
if err == nil || !strings.Contains(err.Error(), "Cannot use clear text authentication over non-SSL connections") {
t.Fatalf("unexpected connection error: %v", err)
@@ -92,6 +90,7 @@ func TestClearTextClientAuth(t *testing.T) {
// TestSSLConnection creates a server with TLS support, a client that
// also has SSL support, and connects them.
func TestSSLConnection(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
th := &testHandler{}
authServer := NewAuthServerStaticWithAuthMethodDescription("", "", 0, MysqlClearPassword)
@@ -103,7 +102,6 @@ func TestSSLConnection(t *testing.T) {
// Create the listener, so we can get its host.
l, err := NewListener("tcp", "127.0.0.1:", authServer, th, 0, 0, false, false, 0, 0)
require.NoError(t, err, "NewListener failed: %v", err)
- defer l.Close()
host := l.Addr().(*net.TCPAddr).IP.String()
port := l.Addr().(*net.TCPAddr).Port
@@ -122,12 +120,6 @@ func TestSSLConnection(t *testing.T) {
"",
tls.VersionTLS12)
require.NoError(t, err, "TLSServerConfig failed: %v", err)
-
- l.TLSConfig.Store(serverConfig)
- go func() {
- l.Accept()
- }()
-
// Setup the right parameters.
params := &ConnParams{
Host: host,
@@ -141,20 +133,22 @@ func TestSSLConnection(t *testing.T) {
SslKey: path.Join(root, "client-key.pem"),
ServerName: "server.example.com",
}
+ l.TLSConfig.Store(serverConfig)
+ go l.Accept()
+ defer cleanupListener(ctx, l, params)
t.Run("Basics", func(t *testing.T) {
- testSSLConnectionBasics(t, params)
+ testSSLConnectionBasics(t, ctx, params)
})
// Make sure clear text auth works over SSL.
t.Run("ClearText", func(t *testing.T) {
- testSSLConnectionClearText(t, params)
+ testSSLConnectionClearText(t, ctx, params)
})
}
-func testSSLConnectionClearText(t *testing.T, params *ConnParams) {
+func testSSLConnectionClearText(t *testing.T, ctx context.Context, params *ConnParams) {
// Create a client connection, connect.
- ctx := context.Background()
conn, err := Connect(ctx, params)
require.NoError(t, err, "Connect failed: %v", err)
@@ -170,9 +164,8 @@ func testSSLConnectionClearText(t *testing.T, params *ConnParams) {
conn.writeComQuit()
}
-func testSSLConnectionBasics(t *testing.T, params *ConnParams) {
+func testSSLConnectionBasics(t *testing.T, ctx context.Context, params *ConnParams) {
// Create a client connection, connect.
- ctx := context.Background()
conn, err := Connect(ctx, params)
require.NoError(t, err, "Connect failed: %v", err)
diff --git a/go/mysql/query.go b/go/mysql/query.go
index 46060a39c94..26582cecbd9 100644
--- a/go/mysql/query.go
+++ b/go/mysql/query.go
@@ -713,7 +713,11 @@ func (c *Conn) parseStmtArgs(data []byte, typ querypb.Type, pos int) (sqltypes.V
}
switch size {
case 0x00:
- return sqltypes.NewVarChar(" "), pos, ok
+ out := []byte("0000-00-00")
+ if typ != sqltypes.Date {
+ out = append(out, []byte(" 00:00:00")...)
+ }
+ return sqltypes.MakeTrusted(typ, out), pos, ok
case 0x0b:
year, pos, ok := readUint16(data, pos)
if !ok {
@@ -743,15 +747,22 @@ func (c *Conn) parseStmtArgs(data []byte, typ querypb.Type, pos int) (sqltypes.V
if !ok {
return sqltypes.NULL, 0, false
}
- val := strconv.Itoa(int(year)) + "-" +
- strconv.Itoa(int(month)) + "-" +
- strconv.Itoa(int(day)) + " " +
- strconv.Itoa(int(hour)) + ":" +
- strconv.Itoa(int(minute)) + ":" +
- strconv.Itoa(int(second)) + "." +
- fmt.Sprintf("%06d", microSecond)
-
- return sqltypes.NewVarChar(val), pos, ok
+ val := strconv.AppendInt(nil, int64(year), 10)
+ val = append(val, '-')
+ val = strconv.AppendInt(val, int64(month), 10)
+ val = append(val, '-')
+ val = strconv.AppendInt(val, int64(day), 10)
+ if typ != sqltypes.Date {
+ val = append(val, ' ')
+ val = strconv.AppendInt(val, int64(hour), 10)
+ val = append(val, ':')
+ val = strconv.AppendInt(val, int64(minute), 10)
+ val = append(val, ':')
+ val = strconv.AppendInt(val, int64(second), 10)
+ val = append(val, '.')
+ val = append(val, fmt.Sprintf("%06d", microSecond)...)
+ }
+ return sqltypes.MakeTrusted(typ, val), pos, ok
case 0x07:
year, pos, ok := readUint16(data, pos)
if !ok {
@@ -777,14 +788,21 @@ func (c *Conn) parseStmtArgs(data []byte, typ querypb.Type, pos int) (sqltypes.V
if !ok {
return sqltypes.NULL, 0, false
}
- val := strconv.Itoa(int(year)) + "-" +
- strconv.Itoa(int(month)) + "-" +
- strconv.Itoa(int(day)) + " " +
- strconv.Itoa(int(hour)) + ":" +
- strconv.Itoa(int(minute)) + ":" +
- strconv.Itoa(int(second))
-
- return sqltypes.NewVarChar(val), pos, ok
+ val := strconv.AppendInt(nil, int64(year), 10)
+ val = append(val, '-')
+ val = strconv.AppendInt(val, int64(month), 10)
+ val = append(val, '-')
+ val = strconv.AppendInt(val, int64(day), 10)
+ if typ != sqltypes.Date {
+ val = append(val, ' ')
+ val = strconv.AppendInt(val, int64(hour), 10)
+ val = append(val, ':')
+ val = strconv.AppendInt(val, int64(minute), 10)
+ val = append(val, ':')
+ val = strconv.AppendInt(val, int64(second), 10)
+ }
+
+ return sqltypes.MakeTrusted(typ, val), pos, ok
case 0x04:
year, pos, ok := readUint16(data, pos)
if !ok {
@@ -798,11 +816,16 @@ func (c *Conn) parseStmtArgs(data []byte, typ querypb.Type, pos int) (sqltypes.V
if !ok {
return sqltypes.NULL, 0, false
}
- val := strconv.Itoa(int(year)) + "-" +
- strconv.Itoa(int(month)) + "-" +
- strconv.Itoa(int(day))
+ val := strconv.AppendInt(nil, int64(year), 10)
+ val = append(val, '-')
+ val = strconv.AppendInt(val, int64(month), 10)
+ val = append(val, '-')
+ val = strconv.AppendInt(val, int64(day), 10)
+ if typ != sqltypes.Date {
+ val = append(val, []byte(" 00:00:00")...)
+ }
- return sqltypes.NewVarChar(val), pos, ok
+ return sqltypes.MakeTrusted(typ, val), pos, ok
default:
return sqltypes.NULL, 0, false
}
@@ -813,7 +836,7 @@ func (c *Conn) parseStmtArgs(data []byte, typ querypb.Type, pos int) (sqltypes.V
}
switch size {
case 0x00:
- return sqltypes.NewVarChar("00:00:00"), pos, ok
+ return sqltypes.NewTime("00:00:00"), pos, ok
case 0x0c:
isNegative, pos, ok := readByte(data, pos)
if !ok {
@@ -852,7 +875,7 @@ func (c *Conn) parseStmtArgs(data []byte, typ querypb.Type, pos int) (sqltypes.V
strconv.Itoa(int(second)) + "." +
fmt.Sprintf("%06d", microSecond)
- return sqltypes.NewVarChar(val), pos, ok
+ return sqltypes.NewTime(val), pos, ok
case 0x08:
isNegative, pos, ok := readByte(data, pos)
if !ok {
@@ -886,14 +909,14 @@ func (c *Conn) parseStmtArgs(data []byte, typ querypb.Type, pos int) (sqltypes.V
strconv.Itoa(int(minute)) + ":" +
strconv.Itoa(int(second))
- return sqltypes.NewVarChar(val), pos, ok
+ return sqltypes.NewTime(val), pos, ok
default:
return sqltypes.NULL, 0, false
}
case sqltypes.Decimal, sqltypes.Text, sqltypes.Blob, sqltypes.VarChar, sqltypes.VarBinary, sqltypes.Year, sqltypes.Char,
sqltypes.Bit, sqltypes.Enum, sqltypes.Set, sqltypes.Geometry, sqltypes.Binary, sqltypes.TypeJSON, sqltypes.Vector:
val, pos, ok := readLenEncStringAsBytesCopy(data, pos)
- return sqltypes.MakeTrusted(sqltypes.VarBinary, val), pos, ok
+ return sqltypes.MakeTrusted(typ, val), pos, ok
default:
return sqltypes.NULL, pos, false
}
diff --git a/go/mysql/replication/mysql56_gtid_set.go b/go/mysql/replication/mysql56_gtid_set.go
index 918a6ec3b6b..77142272c6a 100644
--- a/go/mysql/replication/mysql56_gtid_set.go
+++ b/go/mysql/replication/mysql56_gtid_set.go
@@ -468,7 +468,7 @@ func (set Mysql56GTIDSet) SIDBlock() []byte {
}
// ErrantGTIDsOnReplica gets the errant GTIDs on the replica by comparing against the primary position and UUID.
-func ErrantGTIDsOnReplica(replicaPosition Position, primaryPosition Position) (string, error) {
+func ErrantGTIDsOnReplica(replicaPosition Position, primaryPosition Position, primarySid SID) (string, error) {
replicaGTIDSet, replicaOk := replicaPosition.GTIDSet.(Mysql56GTIDSet)
primaryGTIDSet, primaryOk := primaryPosition.GTIDSet.(Mysql56GTIDSet)
@@ -478,7 +478,13 @@ func ErrantGTIDsOnReplica(replicaPosition Position, primaryPosition Position) (s
}
// Calculate the difference between the replica and primary GTID sets.
- diffSet := replicaGTIDSet.Difference(primaryGTIDSet)
+ // We discount the writes from the primary server first. This is required because sometimes
+ // the replica might advertise itself as more advanced than the primary, and we don't want to
+ // incorrectly mark GTIDs errant.
+ // For example, it is perfectly valid to see the replica GTID set be `ff8ecd9a-8f92-11ef-b369-733dd679dde6:1-33`
+ // while that of the primary be `ff8ecd9a-8f92-11ef-b369-733dd679dde6:1-29` when `ff8ecd9a-8f92-11ef-b369-733dd679dde6`
+ // is the primary server UUID. In this case, the replica is not errant.
+ diffSet := replicaGTIDSet.RemoveUUID(primarySid).Difference(primaryGTIDSet)
return diffSet.String(), nil
}
@@ -715,3 +721,18 @@ func Subtract(lhs, rhs string) (string, error) {
diffSet := lhsSet.Difference(rhsSet)
return diffSet.String(), nil
}
+
+// GTIDCount returns the number of GTIDs in a GTID set.
+func GTIDCount(gtidStr string) (int64, error) {
+ gtidSet, err := ParseMysql56GTIDSet(gtidStr)
+ if err != nil {
+ return 0, err
+ }
+ var count int64
+ for _, intervals := range gtidSet {
+ for _, intvl := range intervals {
+ count = count + intvl.end - intvl.start + 1
+ }
+ }
+ return count, nil
+}
diff --git a/go/mysql/replication/mysql56_gtid_set_test.go b/go/mysql/replication/mysql56_gtid_set_test.go
index bff23679afb..bc5d5a6d6ec 100644
--- a/go/mysql/replication/mysql56_gtid_set_test.go
+++ b/go/mysql/replication/mysql56_gtid_set_test.go
@@ -705,11 +705,58 @@ func BenchmarkMySQL56GTIDParsing(b *testing.B) {
}
}
+func TestGTIDCount(t *testing.T) {
+ tests := []struct {
+ name string
+ gtidStr string
+ wantCount int64
+ wantErr string
+ }{
+ {
+ name: "Empty GTID String",
+ gtidStr: "",
+ wantCount: 0,
+ }, {
+ name: "Single GTID",
+ gtidStr: "00010203-0405-0607-0809-0a0b0c0d0e0f:12",
+ wantCount: 1,
+ }, {
+ name: "Single GTID Interval",
+ gtidStr: "00010203-0405-0607-0809-0a0b0c0d0e0f:1-5",
+ wantCount: 5,
+ }, {
+ name: "Single UUID",
+ gtidStr: "00010203-0405-0607-0809-0a0b0c0d0e0f:1-5:11-20",
+ wantCount: 15,
+ }, {
+ name: "Multiple UUIDs",
+ gtidStr: "00010203-0405-0607-0809-0a0b0c0d0e0f:1-5:10-20,00010203-0405-0607-0809-0a0b0c0d0eff:1-5:50",
+ wantCount: 22,
+ }, {
+ name: "Parsing error",
+ gtidStr: "incorrect set",
+ wantErr: "invalid MySQL 5.6 GTID set",
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ count, err := GTIDCount(tt.gtidStr)
+ require.EqualValues(t, tt.wantCount, count)
+ if tt.wantErr != "" {
+ require.ErrorContains(t, err, tt.wantErr)
+ } else {
+ require.NoError(t, err)
+ }
+ })
+ }
+}
+
func TestErrantGTIDsOnReplica(t *testing.T) {
tests := []struct {
name string
replicaPosition string
primaryPosition string
+ primarySID string
errantGtidWanted string
wantErr string
}{
@@ -717,27 +764,43 @@ func TestErrantGTIDsOnReplica(t *testing.T) {
name: "Empty replica position",
replicaPosition: "MySQL56/",
primaryPosition: "MySQL56/8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-8",
+ primarySID: "8bc65c84-3fe4-11ed-a912-257f0fcdd6c9",
errantGtidWanted: "",
}, {
name: "Empty primary position",
replicaPosition: "MySQL56/8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-8",
primaryPosition: "MySQL56/",
+ primarySID: "8bc65cca-3fe4-11ed-bbfb-091034d48b3e",
errantGtidWanted: "8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-8",
+ }, {
+ name: "Primary seen as lagging for its own writes",
+ replicaPosition: "MySQL56/8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-33",
+ primaryPosition: "MySQL56/8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-29",
+ primarySID: "8bc65c84-3fe4-11ed-a912-257f0fcdd6c9",
}, {
name: "Empty primary position - with multiple errant gtids",
replicaPosition: "MySQL56/8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-8,8bc65cca-3fe4-11ed-bbfb-091034d48b3e:1",
primaryPosition: "MySQL56/",
+ primarySID: "8bc65cca-3fe4-11ed-bbfb-091034d49c4f",
errantGtidWanted: "8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-8,8bc65cca-3fe4-11ed-bbfb-091034d48b3e:1",
}, {
name: "Single errant GTID",
replicaPosition: "MySQL56/8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-8,8bc65cca-3fe4-11ed-bbfb-091034d48b3e:1,8bc65cca-3fe4-11ed-bbfb-091034d48bd3:34",
primaryPosition: "MySQL56/8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-50,8bc65cca-3fe4-11ed-bbfb-091034d48b3e:1-30",
+ primarySID: "8bc65c84-3fe4-11ed-a912-257f0fcdd6c9",
errantGtidWanted: "8bc65cca-3fe4-11ed-bbfb-091034d48bd3:34",
}, {
name: "Multiple errant GTID",
replicaPosition: "MySQL56/8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-8,8bc65cca-3fe4-11ed-bbfb-091034d48b3e:1-32,8bc65cca-3fe4-11ed-bbfb-091034d48bd3:3-35",
primaryPosition: "MySQL56/8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-50,8bc65cca-3fe4-11ed-bbfb-091034d48b3e:1-30,8bc65cca-3fe4-11ed-bbfb-091034d48bd3:34",
+ primarySID: "8bc65c84-3fe4-11ed-a912-257f0fcdd6c9",
errantGtidWanted: "8bc65cca-3fe4-11ed-bbfb-091034d48b3e:31-32,8bc65cca-3fe4-11ed-bbfb-091034d48bd3:3-33:35",
+ }, {
+ name: "Multiple errant GTID after discounting primary writes",
+ replicaPosition: "MySQL56/8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-10,8bc65cca-3fe4-11ed-bbfb-091034d48b3e:1-32,8bc65cca-3fe4-11ed-bbfb-091034d48bd3:3-35",
+ primaryPosition: "MySQL56/8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-8,8bc65cca-3fe4-11ed-bbfb-091034d48b3e:1-30,8bc65cca-3fe4-11ed-bbfb-091034d48bd3:34",
+ primarySID: "8bc65cca-3fe4-11ed-bbfb-091034d48b3e",
+ errantGtidWanted: "8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:9-10,8bc65cca-3fe4-11ed-bbfb-091034d48bd3:3-33:35",
},
}
for _, tt := range tests {
@@ -746,7 +809,9 @@ func TestErrantGTIDsOnReplica(t *testing.T) {
require.NoError(t, err)
primaryPos, err := DecodePosition(tt.primaryPosition)
require.NoError(t, err)
- errantGTIDs, err := ErrantGTIDsOnReplica(replPos, primaryPos)
+ primarySID, err := ParseSID(tt.primarySID)
+ require.NoError(t, err)
+ errantGTIDs, err := ErrantGTIDsOnReplica(replPos, primaryPos, primarySID)
if tt.wantErr != "" {
require.ErrorContains(t, err, tt.wantErr)
} else {
diff --git a/go/mysql/replication/primary_status.go b/go/mysql/replication/primary_status.go
index 511777a5a4a..220fce3cfde 100644
--- a/go/mysql/replication/primary_status.go
+++ b/go/mysql/replication/primary_status.go
@@ -30,6 +30,8 @@ type PrimaryStatus struct {
Position Position
// FilePosition represents the server's file based position.
FilePosition Position
+ // ServerUUID is the UUID of the server.
+ ServerUUID string
}
// PrimaryStatusToProto translates a PrimaryStatus to proto3.
@@ -37,6 +39,7 @@ func PrimaryStatusToProto(s PrimaryStatus) *replicationdatapb.PrimaryStatus {
return &replicationdatapb.PrimaryStatus{
Position: EncodePosition(s.Position),
FilePosition: EncodePosition(s.FilePosition),
+ ServerUuid: s.ServerUUID,
}
}
diff --git a/go/mysql/replication/replication_status.go b/go/mysql/replication/replication_status.go
index 751eccb6633..b79ae3dc262 100644
--- a/go/mysql/replication/replication_status.go
+++ b/go/mysql/replication/replication_status.go
@@ -178,41 +178,33 @@ func ProtoToReplicationStatus(s *replicationdatapb.Status) ReplicationStatus {
}
// FindErrantGTIDs can be used to find errant GTIDs in the receiver's relay log, by comparing it against all known replicas,
-// provided as a list of ReplicationStatus's. This method only works if the flavor for all retrieved ReplicationStatus's is MySQL.
+// provided as a list of Positions. This method only works if the flavor for all retrieved Positions is MySQL.
// The result is returned as a Mysql56GTIDSet, each of whose elements is a found errant GTID.
// This function is best effort in nature. If it marks something as errant, then it is for sure errant. But there may be cases of errant GTIDs, which aren't caught by this function.
-func (s *ReplicationStatus) FindErrantGTIDs(otherReplicaStatuses []*ReplicationStatus) (Mysql56GTIDSet, error) {
- if len(otherReplicaStatuses) == 0 {
+func FindErrantGTIDs(position Position, sourceUUID SID, otherPositions []Position) (Mysql56GTIDSet, error) {
+ if len(otherPositions) == 0 {
// If there is nothing to compare this replica against, then we must assume that its GTID set is the correct one.
return nil, nil
}
- relayLogSet, ok := s.RelayLogPosition.GTIDSet.(Mysql56GTIDSet)
+ gtidSet, ok := position.GTIDSet.(Mysql56GTIDSet)
if !ok {
return nil, fmt.Errorf("errant GTIDs can only be computed on the MySQL flavor")
}
- otherSets := make([]Mysql56GTIDSet, 0, len(otherReplicaStatuses))
- for _, status := range otherReplicaStatuses {
- otherSet, ok := status.RelayLogPosition.GTIDSet.(Mysql56GTIDSet)
+ otherSets := make([]Mysql56GTIDSet, 0, len(otherPositions))
+ for _, pos := range otherPositions {
+ otherSet, ok := pos.GTIDSet.(Mysql56GTIDSet)
if !ok {
panic("The receiver ReplicationStatus contained a Mysql56GTIDSet in its relay log, but a replica's ReplicationStatus is of another flavor. This should never happen.")
}
otherSets = append(otherSets, otherSet)
}
- if len(otherSets) == 1 {
- // If there is only one replica to compare against, and one is a subset of the other, then we consider them not to be errant.
- // It simply means that one replica might be behind on replication.
- if relayLogSet.Contains(otherSets[0]) || otherSets[0].Contains(relayLogSet) {
- return nil, nil
- }
- }
-
// Copy set for final diffSet so we don't mutate receiver.
- diffSet := make(Mysql56GTIDSet, len(relayLogSet))
- for sid, intervals := range relayLogSet {
- if sid == s.SourceUUID {
+ diffSet := make(Mysql56GTIDSet, len(gtidSet))
+ for sid, intervals := range gtidSet {
+ if sid == sourceUUID {
continue
}
diffSet[sid] = intervals
diff --git a/go/mysql/replication/replication_status_test.go b/go/mysql/replication/replication_status_test.go
index 659da9f9273..8b458f76803 100644
--- a/go/mysql/replication/replication_status_test.go
+++ b/go/mysql/replication/replication_status_test.go
@@ -86,14 +86,14 @@ func TestFindErrantGTIDs(t *testing.T) {
}
testcases := []struct {
- mainRepStatus *ReplicationStatus
- otherRepStatuses []*ReplicationStatus
- want Mysql56GTIDSet
+ mainRepStatus *ReplicationStatus
+ otherPositions []Position
+ want Mysql56GTIDSet
}{{
mainRepStatus: &ReplicationStatus{SourceUUID: sourceSID, RelayLogPosition: Position{GTIDSet: set1}},
- otherRepStatuses: []*ReplicationStatus{
- {SourceUUID: sourceSID, RelayLogPosition: Position{GTIDSet: set2}},
- {SourceUUID: sourceSID, RelayLogPosition: Position{GTIDSet: set3}},
+ otherPositions: []Position{
+ {GTIDSet: set2},
+ {GTIDSet: set3},
},
want: Mysql56GTIDSet{
sid1: []interval{{39, 39}, {40, 49}, {71, 75}},
@@ -101,25 +101,27 @@ func TestFindErrantGTIDs(t *testing.T) {
sid4: []interval{{1, 30}},
},
}, {
- mainRepStatus: &ReplicationStatus{SourceUUID: sourceSID, RelayLogPosition: Position{GTIDSet: set1}},
- otherRepStatuses: []*ReplicationStatus{{SourceUUID: sid1, RelayLogPosition: Position{GTIDSet: set1}}},
+ mainRepStatus: &ReplicationStatus{SourceUUID: sourceSID, RelayLogPosition: Position{GTIDSet: set1}},
+ otherPositions: []Position{{GTIDSet: set1}},
// servers with the same GTID sets should not be diagnosed with errant GTIDs
want: nil,
}, {
- mainRepStatus: &ReplicationStatus{SourceUUID: sourceSID, RelayLogPosition: Position{GTIDSet: set2}},
- otherRepStatuses: []*ReplicationStatus{{SourceUUID: sid1, RelayLogPosition: Position{GTIDSet: set3}}},
+ mainRepStatus: &ReplicationStatus{SourceUUID: sourceSID, RelayLogPosition: Position{GTIDSet: set2}},
+ otherPositions: []Position{{GTIDSet: set3}},
// set2 is a strict subset of set3
want: nil,
}, {
- mainRepStatus: &ReplicationStatus{SourceUUID: sourceSID, RelayLogPosition: Position{GTIDSet: set3}},
- otherRepStatuses: []*ReplicationStatus{{SourceUUID: sid1, RelayLogPosition: Position{GTIDSet: set2}}},
+ mainRepStatus: &ReplicationStatus{SourceUUID: sourceSID, RelayLogPosition: Position{GTIDSet: set3}},
+ otherPositions: []Position{{GTIDSet: set2}},
// set3 is a strict superset of set2
- want: nil,
+ want: Mysql56GTIDSet{
+ sid1: []interval{{38, 38}, {61, 70}},
+ },
}}
for _, testcase := range testcases {
t.Run("", func(t *testing.T) {
- got, err := testcase.mainRepStatus.FindErrantGTIDs(testcase.otherRepStatuses)
+ got, err := FindErrantGTIDs(testcase.mainRepStatus.RelayLogPosition, testcase.mainRepStatus.SourceUUID, testcase.otherPositions)
require.NoError(t, err)
require.Equal(t, testcase.want, got)
})
diff --git a/go/mysql/replication_test.go b/go/mysql/replication_test.go
index c397bc71b45..c9a54485497 100644
--- a/go/mysql/replication_test.go
+++ b/go/mysql/replication_test.go
@@ -23,10 +23,13 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
+ "vitess.io/vitess/go/test/utils"
+
binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata"
)
func TestComBinlogDump(t *testing.T) {
+ _ = utils.LeakCheckContext(t)
listener, sConn, cConn := createSocketPair(t)
defer func() {
listener.Close()
@@ -72,6 +75,7 @@ func TestComBinlogDump(t *testing.T) {
}
func TestComBinlogDumpGTID(t *testing.T) {
+ _ = utils.LeakCheckContext(t)
listener, sConn, cConn := createSocketPair(t)
defer func() {
listener.Close()
@@ -161,6 +165,7 @@ func TestComBinlogDumpGTID(t *testing.T) {
}
func TestSendSemiSyncAck(t *testing.T) {
+ _ = utils.LeakCheckContext(t)
listener, sConn, cConn := createSocketPair(t)
defer func() {
listener.Close()
diff --git a/go/mysql/schema.go b/go/mysql/schema.go
index 03d558d2637..6863e1fb988 100644
--- a/go/mysql/schema.go
+++ b/go/mysql/schema.go
@@ -93,6 +93,29 @@ var BaseShowTablesWithSizesFields = append(BaseShowTablesFields, &querypb.Field{
Charset: collations.CollationBinaryID,
Flags: uint32(querypb.MySqlFlag_BINARY_FLAG | querypb.MySqlFlag_NUM_FLAG),
})
+var BaseInnoDBTableSizesFields = []*querypb.Field{{
+ Name: "it.name",
+ Type: querypb.Type_VARCHAR,
+ Table: "tables",
+ OrgTable: "TABLES",
+ Database: "information_schema",
+ OrgName: "TABLE_NAME",
+ ColumnLength: 192,
+ Charset: uint32(collations.SystemCollation.Collation),
+ Flags: uint32(querypb.MySqlFlag_NOT_NULL_FLAG),
+}, {
+ Name: "i.file_size",
+ Type: querypb.Type_INT64,
+ ColumnLength: 11,
+ Charset: collations.CollationBinaryID,
+ Flags: uint32(querypb.MySqlFlag_BINARY_FLAG | querypb.MySqlFlag_NUM_FLAG),
+}, {
+ Name: "i.allocated_size",
+ Type: querypb.Type_INT64,
+ ColumnLength: 11,
+ Charset: collations.CollationBinaryID,
+ Flags: uint32(querypb.MySqlFlag_BINARY_FLAG | querypb.MySqlFlag_NUM_FLAG),
+}}
// BaseShowTablesRow returns the fields from a BaseShowTables or
// BaseShowTablesForTable command.
@@ -116,6 +139,14 @@ func BaseShowTablesWithSizesRow(tableName string, isView bool, comment string) [
)
}
+func BaseInnoDBTableSizesRow(dbName string, tableName string) []sqltypes.Value {
+ return []sqltypes.Value{
+ sqltypes.MakeTrusted(sqltypes.VarChar, []byte(dbName+"/"+tableName)),
+ sqltypes.MakeTrusted(sqltypes.Int64, []byte("100")), // file_size
+ sqltypes.MakeTrusted(sqltypes.Int64, []byte("150")), // allocated_size
+ }
+}
+
// ShowPrimaryFields contains the fields for a BaseShowPrimary.
var ShowPrimaryFields = []*querypb.Field{{
Name: "table_name",
diff --git a/go/mysql/server_test.go b/go/mysql/server_test.go
index 082a176e3af..b301e956ef4 100644
--- a/go/mysql/server_test.go
+++ b/go/mysql/server_test.go
@@ -267,6 +267,7 @@ func getHostPort(t *testing.T, a net.Addr) (string, int) {
}
func TestConnectionFromListener(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
th := &testHandler{}
authServer := NewAuthServerStatic("", "", 0)
@@ -282,9 +283,6 @@ func TestConnectionFromListener(t *testing.T) {
l, err := NewFromListener(listener, authServer, th, 0, 0, false, 0, 0)
require.NoError(t, err, "NewListener failed")
- defer l.Close()
- go l.Accept()
-
host, port := getHostPort(t, l.Addr())
fmt.Printf("host: %s, port: %d\n", host, port)
// Setup the right parameters.
@@ -294,13 +292,16 @@ func TestConnectionFromListener(t *testing.T) {
Uname: "user1",
Pass: "password1",
}
+ go l.Accept()
+ defer cleanupListener(ctx, l, params)
- c, err := Connect(context.Background(), params)
+ c, err := Connect(ctx, params)
require.NoError(t, err, "Should be able to connect to server")
c.Close()
}
func TestConnectionWithoutSourceHost(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
th := &testHandler{}
authServer := NewAuthServerStatic("", "", 0)
@@ -309,13 +310,10 @@ func TestConnectionWithoutSourceHost(t *testing.T) {
UserData: "userData1",
}}
defer authServer.close()
+
l, err := NewListener("tcp", "127.0.0.1:", authServer, th, 0, 0, false, false, 0, 0)
require.NoError(t, err, "NewListener failed")
- defer l.Close()
- go l.Accept()
-
host, port := getHostPort(t, l.Addr())
-
// Setup the right parameters.
params := &ConnParams{
Host: host,
@@ -323,13 +321,16 @@ func TestConnectionWithoutSourceHost(t *testing.T) {
Uname: "user1",
Pass: "password1",
}
+ go l.Accept()
+ defer cleanupListener(ctx, l, params)
- c, err := Connect(context.Background(), params)
+ c, err := Connect(ctx, params)
require.NoError(t, err, "Should be able to connect to server")
c.Close()
}
func TestConnectionWithSourceHost(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
th := &testHandler{}
authServer := NewAuthServerStatic("", "", 0)
@@ -344,11 +345,7 @@ func TestConnectionWithSourceHost(t *testing.T) {
l, err := NewListener("tcp", "127.0.0.1:", authServer, th, 0, 0, false, false, 0, 0)
require.NoError(t, err, "NewListener failed")
- defer l.Close()
- go l.Accept()
-
host, port := getHostPort(t, l.Addr())
-
// Setup the right parameters.
params := &ConnParams{
Host: host,
@@ -356,13 +353,16 @@ func TestConnectionWithSourceHost(t *testing.T) {
Uname: "user1",
Pass: "password1",
}
+ go l.Accept()
+ defer cleanupListener(ctx, l, params)
- _, err = Connect(context.Background(), params)
+ _, err = Connect(ctx, params)
// target is localhost, should not work from tcp connection
require.EqualError(t, err, "Access denied for user 'user1' (errno 1045) (sqlstate 28000)", "Should not be able to connect to server")
}
func TestConnectionUseMysqlNativePasswordWithSourceHost(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
th := &testHandler{}
authServer := NewAuthServerStatic("", "", 0)
@@ -377,11 +377,7 @@ func TestConnectionUseMysqlNativePasswordWithSourceHost(t *testing.T) {
l, err := NewListener("tcp", "127.0.0.1:", authServer, th, 0, 0, false, false, 0, 0)
require.NoError(t, err, "NewListener failed")
- defer l.Close()
- go l.Accept()
-
host, port := getHostPort(t, l.Addr())
-
// Setup the right parameters.
params := &ConnParams{
Host: host,
@@ -389,13 +385,16 @@ func TestConnectionUseMysqlNativePasswordWithSourceHost(t *testing.T) {
Uname: "user1",
Pass: "mysql_password",
}
+ go l.Accept()
+ defer cleanupListener(ctx, l, params)
- _, err = Connect(context.Background(), params)
+ _, err = Connect(ctx, params)
// target is localhost, should not work from tcp connection
require.EqualError(t, err, "Access denied for user 'user1' (errno 1045) (sqlstate 28000)", "Should not be able to connect to server")
}
func TestConnectionUnixSocket(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
th := &testHandler{}
authServer := NewAuthServerStatic("", "", 0)
@@ -415,22 +414,22 @@ func TestConnectionUnixSocket(t *testing.T) {
l, err := NewListener("unix", unixSocket.Name(), authServer, th, 0, 0, false, false, 0, 0)
require.NoError(t, err, "NewListener failed")
- defer l.Close()
- go l.Accept()
-
// Setup the right parameters.
params := &ConnParams{
UnixSocket: unixSocket.Name(),
Uname: "user1",
Pass: "password1",
}
+ go l.Accept()
+ defer cleanupListener(ctx, l, params)
- c, err := Connect(context.Background(), params)
+ c, err := Connect(ctx, params)
require.NoError(t, err, "Should be able to connect to server")
c.Close()
}
func TestClientFoundRows(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
th := &testHandler{}
authServer := NewAuthServerStatic("", "", 0)
@@ -439,13 +438,10 @@ func TestClientFoundRows(t *testing.T) {
UserData: "userData1",
}}
defer authServer.close()
+
l, err := NewListener("tcp", "127.0.0.1:", authServer, th, 0, 0, false, false, 0, 0)
require.NoError(t, err, "NewListener failed")
- defer l.Close()
- go l.Accept()
-
host, port := getHostPort(t, l.Addr())
-
// Setup the right parameters.
params := &ConnParams{
Host: host,
@@ -453,9 +449,11 @@ func TestClientFoundRows(t *testing.T) {
Uname: "user1",
Pass: "password1",
}
+ go l.Accept()
+ defer cleanupListener(ctx, l, params)
// Test without flag.
- c, err := Connect(context.Background(), params)
+ c, err := Connect(ctx, params)
require.NoError(t, err, "Connect failed")
foundRows := th.LastConn().Capabilities & CapabilityClientFoundRows
assert.Equal(t, uint32(0), foundRows, "FoundRows flag: %x, second bit must be 0", th.LastConn().Capabilities)
@@ -464,7 +462,7 @@ func TestClientFoundRows(t *testing.T) {
// Test with flag.
params.Flags |= CapabilityClientFoundRows
- c, err = Connect(context.Background(), params)
+ c, err = Connect(ctx, params)
require.NoError(t, err, "Connect failed")
foundRows = th.LastConn().Capabilities & CapabilityClientFoundRows
assert.NotZero(t, foundRows, "FoundRows flag: %x, second bit must be set", th.LastConn().Capabilities)
@@ -472,6 +470,7 @@ func TestClientFoundRows(t *testing.T) {
}
func TestConnCounts(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
th := &testHandler{}
user := "anotherNotYetConnectedUser1"
@@ -483,13 +482,10 @@ func TestConnCounts(t *testing.T) {
UserData: "userData1",
}}
defer authServer.close()
+
l, err := NewListener("tcp", "127.0.0.1:", authServer, th, 0, 0, false, false, 0, 0)
require.NoError(t, err, "NewListener failed")
- defer l.Close()
- go l.Accept()
-
host, port := getHostPort(t, l.Addr())
-
// Test with one new connection.
params := &ConnParams{
Host: host,
@@ -497,14 +493,16 @@ func TestConnCounts(t *testing.T) {
Uname: user,
Pass: passwd,
}
+ go l.Accept()
+ defer cleanupListener(ctx, l, params)
- c, err := Connect(context.Background(), params)
+ c, err := Connect(ctx, params)
require.NoError(t, err, "Connect failed")
checkCountsForUser(t, user, 1)
// Test with a second new connection.
- c2, err := Connect(context.Background(), params)
+ c2, err := Connect(ctx, params)
require.NoError(t, err)
checkCountsForUser(t, user, 2)
@@ -529,6 +527,7 @@ func checkCountsForUser(t assert.TestingT, user string, expected int64) {
}
func TestServer(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
th := &testHandler{}
authServer := NewAuthServerStatic("", "", 0)
@@ -537,14 +536,10 @@ func TestServer(t *testing.T) {
UserData: "userData1",
}}
defer authServer.close()
+
l, err := NewListener("tcp", "127.0.0.1:", authServer, th, 0, 0, false, false, 0, 0)
require.NoError(t, err)
- l.SlowConnectWarnThreshold.Store(time.Nanosecond.Nanoseconds())
- defer l.Close()
- go l.Accept()
-
host, port := getHostPort(t, l.Addr())
-
// Setup the right parameters.
params := &ConnParams{
Host: host,
@@ -552,6 +547,9 @@ func TestServer(t *testing.T) {
Uname: "user1",
Pass: "password1",
}
+ l.SlowConnectWarnThreshold.Store(time.Nanosecond.Nanoseconds())
+ go l.Accept()
+ defer cleanupListener(ctx, l, params)
// Run a 'select rows' command with results.
output, err := runMysqlWithErr(t, params, "select rows")
@@ -629,6 +627,7 @@ func TestServer(t *testing.T) {
}
func TestServerStats(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
th := &testHandler{}
authServer := NewAuthServerStatic("", "", 0)
@@ -637,14 +636,10 @@ func TestServerStats(t *testing.T) {
UserData: "userData1",
}}
defer authServer.close()
+
l, err := NewListener("tcp", "127.0.0.1:", authServer, th, 0, 0, false, false, 0, 0)
require.NoError(t, err)
- l.SlowConnectWarnThreshold.Store(time.Nanosecond.Nanoseconds())
- defer l.Close()
- go l.Accept()
-
host, port := getHostPort(t, l.Addr())
-
// Setup the right parameters.
params := &ConnParams{
Host: host,
@@ -652,10 +647,13 @@ func TestServerStats(t *testing.T) {
Uname: "user1",
Pass: "password1",
}
+ l.SlowConnectWarnThreshold.Store(time.Nanosecond.Nanoseconds())
+ go l.Accept()
+ defer cleanupListener(ctx, l, params)
timings.Reset()
- connAccept.Reset()
connCount.Reset()
+ connAccept.Reset()
connSlow.Reset()
connRefuse.Reset()
@@ -667,9 +665,23 @@ func TestServerStats(t *testing.T) {
assert.Contains(t, output, "ERROR 1047 (08S01)")
assert.Contains(t, output, "forced query error", "Unexpected output for 'error': %v", output)
- assert.EqualValues(t, 0, connCount.Get(), "connCount")
+ // Accept starts a goroutine to handle each incoming connection.
+ // It's in that goroutine where live stats/gauges such as the
+ // current connection counts are updated when the handle function
+ // ends (e.g. connCount.Add(-1)).
+ // So we wait for the expected value to avoid races and flakiness.
+ // 1 second should be enough, but no reason to fail the test or
+ // a CI workflow if the test is CPU starved.
+ conditionWait := 10 * time.Second
+ conditionTick := 10 * time.Millisecond
+ assert.Eventually(t, func() bool {
+ return connCount.Get() == int64(0)
+ }, conditionWait, conditionTick, "connCount")
+ assert.Eventually(t, func() bool {
+ return connSlow.Get() == int64(1)
+ }, conditionWait, conditionTick, "connSlow")
+
assert.EqualValues(t, 1, connAccept.Get(), "connAccept")
- assert.EqualValues(t, 1, connSlow.Get(), "connSlow")
assert.EqualValues(t, 0, connRefuse.Get(), "connRefuse")
expectedTimingDeltas := map[string]int64{
@@ -703,6 +715,7 @@ func TestServerStats(t *testing.T) {
// TestClearTextServer creates a Server that needs clear text
// passwords from the client.
func TestClearTextServer(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
th := &testHandler{}
authServer := NewAuthServerStaticWithAuthMethodDescription("", "", 0, MysqlClearPassword)
@@ -711,16 +724,10 @@ func TestClearTextServer(t *testing.T) {
UserData: "userData1",
}}
defer authServer.close()
+
l, err := NewListener("tcp", "127.0.0.1:", authServer, th, 0, 0, false, false, 0, 0)
require.NoError(t, err)
- defer l.Close()
- go l.Accept()
-
host, port := getHostPort(t, l.Addr())
-
- version, _ := runMysql(t, nil, "--version")
- isMariaDB := strings.Contains(version, "MariaDB")
-
// Setup the right parameters.
params := &ConnParams{
Host: host,
@@ -728,6 +735,11 @@ func TestClearTextServer(t *testing.T) {
Uname: "user1",
Pass: "password1",
}
+ go l.Accept()
+ defer cleanupListener(ctx, l, params)
+
+ version, _ := runMysql(t, nil, "--version")
+ isMariaDB := strings.Contains(version, "MariaDB")
// Run a 'select rows' command with results. This should fail
// as clear text is not enabled by default on the client
@@ -776,6 +788,7 @@ func TestClearTextServer(t *testing.T) {
// TestDialogServer creates a Server that uses the dialog plugin on the client.
func TestDialogServer(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
th := &testHandler{}
authServer := NewAuthServerStaticWithAuthMethodDescription("", "", 0, MysqlDialog)
@@ -784,14 +797,11 @@ func TestDialogServer(t *testing.T) {
UserData: "userData1",
}}
defer authServer.close()
+
l, err := NewListener("tcp", "127.0.0.1:", authServer, th, 0, 0, false, false, 0, 0)
require.NoError(t, err)
l.AllowClearTextWithoutTLS.Store(true)
- defer l.Close()
- go l.Accept()
-
host, port := getHostPort(t, l.Addr())
-
// Setup the right parameters.
params := &ConnParams{
Host: host,
@@ -800,6 +810,9 @@ func TestDialogServer(t *testing.T) {
Pass: "password1",
SslMode: vttls.Disabled,
}
+ go l.Accept()
+ defer cleanupListener(ctx, l, params)
+
sql := "select rows"
output, ok := runMysql(t, params, sql)
if strings.Contains(output, "No such file or directory") || strings.Contains(output, "Authentication plugin 'dialog' cannot be loaded") {
@@ -815,6 +828,7 @@ func TestDialogServer(t *testing.T) {
// TestTLSServer creates a Server with TLS support, then uses mysql
// client to connect to it.
func TestTLSServer(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
th := &testHandler{}
authServer := NewAuthServerStatic("", "", 0)
@@ -823,46 +837,20 @@ func TestTLSServer(t *testing.T) {
}}
defer authServer.close()
+ // Create the certs.
+ root := t.TempDir()
+ tlstest.CreateCA(root)
+ tlstest.CreateSignedCert(root, tlstest.CA, "01", "server", "server.example.com")
+ tlstest.CreateSignedCert(root, tlstest.CA, "02", "client", "Client Cert")
+
// Create the listener, so we can get its host.
// Below, we are enabling --ssl-verify-server-cert, which adds
// a check that the common name of the certificate matches the
// server host name we connect to.
l, err := NewListener("tcp", "127.0.0.1:", authServer, th, 0, 0, false, false, 0, 0)
require.NoError(t, err)
- defer l.Close()
-
host := l.Addr().(*net.TCPAddr).IP.String()
port := l.Addr().(*net.TCPAddr).Port
-
- // Create the certs.
- root := t.TempDir()
- tlstest.CreateCA(root)
- tlstest.CreateSignedCert(root, tlstest.CA, "01", "server", "server.example.com")
- tlstest.CreateSignedCert(root, tlstest.CA, "02", "client", "Client Cert")
-
- // Create the server with TLS config.
- serverConfig, err := vttls.ServerConfig(
- path.Join(root, "server-cert.pem"),
- path.Join(root, "server-key.pem"),
- path.Join(root, "ca-cert.pem"),
- "",
- "",
- tls.VersionTLS12)
- require.NoError(t, err)
- l.TLSConfig.Store(serverConfig)
-
- var wg sync.WaitGroup
- wg.Add(1)
- go func(l *Listener) {
- wg.Done()
- l.Accept()
- }(l)
- // This is ensure the listener is called
- wg.Wait()
- // Sleep so that the Accept function is called as well.'
- time.Sleep(3 * time.Second)
-
- connCountByTLSVer.ResetAll()
// Setup the right parameters.
params := &ConnParams{
Host: host,
@@ -876,9 +864,23 @@ func TestTLSServer(t *testing.T) {
SslKey: path.Join(root, "client-key.pem"),
ServerName: "server.example.com",
}
+ // Create the server with TLS config.
+ serverConfig, err := vttls.ServerConfig(
+ path.Join(root, "server-cert.pem"),
+ path.Join(root, "server-key.pem"),
+ path.Join(root, "ca-cert.pem"),
+ "",
+ "",
+ tls.VersionTLS12)
+ require.NoError(t, err)
+ l.TLSConfig.Store(serverConfig)
+ go l.Accept()
+ defer cleanupListener(ctx, l, params)
+
+ connCountByTLSVer.ResetAll()
// Run a 'select rows' command with results.
- conn, err := Connect(context.Background(), params)
+ conn, err := Connect(ctx, params)
// output, ok := runMysql(t, params, "select rows")
require.NoError(t, err)
results, err := conn.ExecuteFetch("select rows", 1000, true)
@@ -913,25 +915,9 @@ func TestTLSServer(t *testing.T) {
// TestTLSRequired creates a Server with TLS required, then tests that an insecure mysql
// client is rejected
func TestTLSRequired(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
th := &testHandler{}
- authServer := NewAuthServerStatic("", "", 0)
- authServer.entries["user1"] = []*AuthServerStaticEntry{{
- Password: "password1",
- }}
- defer authServer.close()
-
- // Create the listener, so we can get its host.
- // Below, we are enabling --ssl-verify-server-cert, which adds
- // a check that the common name of the certificate matches the
- // server host name we connect to.
- l, err := NewListener("tcp", "127.0.0.1:", authServer, th, 0, 0, false, false, 0, 0)
- require.NoError(t, err)
- defer l.Close()
-
- host := l.Addr().(*net.TCPAddr).IP.String()
- port := l.Addr().(*net.TCPAddr).Port
-
// Create the certs.
root := t.TempDir()
tlstest.CreateCA(root)
@@ -940,6 +926,13 @@ func TestTLSRequired(t *testing.T) {
tlstest.CreateSignedCert(root, tlstest.CA, "03", "revoked-client", "Revoked Client Cert")
tlstest.RevokeCertAndRegenerateCRL(root, tlstest.CA, "revoked-client")
+ params := &ConnParams{
+ Uname: "user1",
+ Pass: "password1",
+ SslMode: vttls.Disabled, // TLS is disabled at first
+ ServerName: "server.example.com",
+ }
+
// Create the server with TLS config.
serverConfig, err := vttls.ServerConfig(
path.Join(root, "server-cert.pem"),
@@ -949,34 +942,49 @@ func TestTLSRequired(t *testing.T) {
"",
tls.VersionTLS12)
require.NoError(t, err)
- l.TLSConfig.Store(serverConfig)
- l.RequireSecureTransport = true
-
- var wg sync.WaitGroup
- wg.Add(1)
- go func(l *Listener) {
- wg.Done()
- l.Accept()
- }(l)
- // This is ensure the listener is called
- wg.Wait()
- // Sleep so that the Accept function is called as well.'
- time.Sleep(3 * time.Second)
-
- // Setup conn params without SSL.
- params := &ConnParams{
- Host: host,
- Port: port,
- Uname: "user1",
- Pass: "password1",
- SslMode: vttls.Disabled,
- ServerName: "server.example.com",
+
+ authServer := NewAuthServerStatic("", "", 0)
+ authServer.entries["user1"] = []*AuthServerStaticEntry{{
+ Password: "password1",
+ }}
+ defer authServer.close()
+
+ var l *Listener
+ setupServer := func() {
+ // Create the listener, so we can get its host.
+ // Below, we are enabling --ssl-verify-server-cert, which adds
+ // a check that the common name of the certificate matches the
+ // server host name we connect to.
+ l, err = NewListener("tcp", "127.0.0.1:", authServer, th, 0, 0, false, false, 0, 0)
+ require.NoError(t, err)
+ host := l.Addr().(*net.TCPAddr).IP.String()
+ port := l.Addr().(*net.TCPAddr).Port
+ l.TLSConfig.Store(serverConfig)
+ l.RequireSecureTransport = true
+ go l.Accept()
+ params.Host = host
+ params.Port = port
+ }
+ setupServer()
+
+ defer cleanupListener(ctx, l, params)
+
+ // This test calls Connect multiple times so we add handling for when the
+ // listener goes away for any reason.
+ connectWithGoneServerHandling := func() (*Conn, error) {
+ conn, err := Connect(ctx, params)
+ if sqlErr, ok := sqlerror.NewSQLErrorFromError(err).(*sqlerror.SQLError); ok && sqlErr.Num == sqlerror.CRConnHostError {
+ cleanupListener(ctx, l, params)
+ setupServer()
+ conn, err = Connect(ctx, params)
+ }
+ return conn, err
}
- conn, err := Connect(context.Background(), params)
- require.NotNil(t, err)
- require.Contains(t, err.Error(), "Code: UNAVAILABLE")
- require.Contains(t, err.Error(), "server does not allow insecure connections, client must use SSL/TLS")
- require.Contains(t, err.Error(), "(errno 1105) (sqlstate HY000)")
+
+ conn, err := connectWithGoneServerHandling()
+ require.ErrorContains(t, err, "Code: UNAVAILABLE")
+ require.ErrorContains(t, err, "server does not allow insecure connections, client must use SSL/TLS")
+ require.ErrorContains(t, err, "(errno 1105) (sqlstate HY000)")
if conn != nil {
conn.Close()
}
@@ -987,7 +995,7 @@ func TestTLSRequired(t *testing.T) {
params.SslCert = path.Join(root, "client-cert.pem")
params.SslKey = path.Join(root, "client-key.pem")
- conn, err = Connect(context.Background(), params)
+ conn, err = connectWithGoneServerHandling()
require.NoError(t, err)
if conn != nil {
conn.Close()
@@ -996,15 +1004,15 @@ func TestTLSRequired(t *testing.T) {
// setup conn params with TLS, but with a revoked client certificate
params.SslCert = path.Join(root, "revoked-client-cert.pem")
params.SslKey = path.Join(root, "revoked-client-key.pem")
- conn, err = Connect(context.Background(), params)
- require.NotNil(t, err)
- require.Contains(t, err.Error(), "remote error: tls: bad certificate")
+ conn, err = connectWithGoneServerHandling()
+ require.ErrorContains(t, err, "remote error: tls: bad certificate")
if conn != nil {
conn.Close()
}
}
func TestCachingSha2PasswordAuthWithTLS(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
th := &testHandler{}
authServer := NewAuthServerStaticWithAuthMethodDescription("", "", 0, CachingSha2Password)
@@ -1013,19 +1021,17 @@ func TestCachingSha2PasswordAuthWithTLS(t *testing.T) {
}
defer authServer.close()
- // Create the listener, so we can get its host.
- l, err := NewListener("tcp", "127.0.0.1:", authServer, th, 0, 0, false, false, 0, 0)
- require.NoError(t, err, "NewListener failed: %v", err)
- defer l.Close()
- host := l.Addr().(*net.TCPAddr).IP.String()
- port := l.Addr().(*net.TCPAddr).Port
-
// Create the certs.
root := t.TempDir()
tlstest.CreateCA(root)
tlstest.CreateSignedCert(root, tlstest.CA, "01", "server", "server.example.com")
tlstest.CreateSignedCert(root, tlstest.CA, "02", "client", "Client Cert")
+ // Create the listener, so we can get its host.
+ l, err := NewListener("tcp", "127.0.0.1:", authServer, th, 0, 0, false, false, 0, 0)
+ require.NoError(t, err, "NewListener failed: %v", err)
+ host := l.Addr().(*net.TCPAddr).IP.String()
+ port := l.Addr().(*net.TCPAddr).Port
// Create the server with TLS config.
serverConfig, err := vttls.ServerConfig(
path.Join(root, "server-cert.pem"),
@@ -1035,12 +1041,6 @@ func TestCachingSha2PasswordAuthWithTLS(t *testing.T) {
"",
tls.VersionTLS12)
require.NoError(t, err, "TLSServerConfig failed: %v", err)
-
- l.TLSConfig.Store(serverConfig)
- go func() {
- l.Accept()
- }()
-
// Setup the right parameters.
params := &ConnParams{
Host: host,
@@ -1054,10 +1054,11 @@ func TestCachingSha2PasswordAuthWithTLS(t *testing.T) {
SslKey: path.Join(root, "client-key.pem"),
ServerName: "server.example.com",
}
+ l.TLSConfig.Store(serverConfig)
+ go l.Accept()
+ defer cleanupListener(ctx, l, params)
// Connection should fail, as server requires SSL for caching_sha2_password.
- ctx := context.Background()
-
conn, err := Connect(ctx, params)
require.NoError(t, err, "unexpected connection error: %v", err)
@@ -1093,12 +1094,11 @@ func newAuthServerAlwaysFallback(file, jsonConfig string, reloadInterval time.Du
authMethod := NewSha2CachingAuthMethod(&alwaysFallbackAuth{}, a, a)
a.methods = []AuthMethod{authMethod}
- a.reload()
- a.installSignalHandlers()
return a
}
func TestCachingSha2PasswordAuthWithMoreData(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
th := &testHandler{}
authServer := newAuthServerAlwaysFallback("", "", 0)
@@ -1107,19 +1107,17 @@ func TestCachingSha2PasswordAuthWithMoreData(t *testing.T) {
}
defer authServer.close()
- // Create the listener, so we can get its host.
- l, err := NewListener("tcp", "127.0.0.1:", authServer, th, 0, 0, false, false, 0, 0)
- require.NoError(t, err, "NewListener failed: %v", err)
- defer l.Close()
- host := l.Addr().(*net.TCPAddr).IP.String()
- port := l.Addr().(*net.TCPAddr).Port
-
// Create the certs.
root := t.TempDir()
tlstest.CreateCA(root)
tlstest.CreateSignedCert(root, tlstest.CA, "01", "server", "server.example.com")
tlstest.CreateSignedCert(root, tlstest.CA, "02", "client", "Client Cert")
+ // Create the listener, so we can get its host.
+ l, err := NewListener("tcp", "127.0.0.1:", authServer, th, 0, 0, false, false, 0, 0)
+ require.NoError(t, err, "NewListener failed: %v", err)
+ host := l.Addr().(*net.TCPAddr).IP.String()
+ port := l.Addr().(*net.TCPAddr).Port
// Create the server with TLS config.
serverConfig, err := vttls.ServerConfig(
path.Join(root, "server-cert.pem"),
@@ -1129,12 +1127,6 @@ func TestCachingSha2PasswordAuthWithMoreData(t *testing.T) {
"",
tls.VersionTLS12)
require.NoError(t, err, "TLSServerConfig failed: %v", err)
-
- l.TLSConfig.Store(serverConfig)
- go func() {
- l.Accept()
- }()
-
// Setup the right parameters.
params := &ConnParams{
Host: host,
@@ -1148,10 +1140,11 @@ func TestCachingSha2PasswordAuthWithMoreData(t *testing.T) {
SslKey: path.Join(root, "client-key.pem"),
ServerName: "server.example.com",
}
+ l.TLSConfig.Store(serverConfig)
+ go l.Accept()
+ defer cleanupListener(ctx, l, params)
// Connection should fail, as server requires SSL for caching_sha2_password.
- ctx := context.Background()
-
conn, err := Connect(ctx, params)
require.NoError(t, err, "unexpected connection error: %v", err)
@@ -1168,6 +1161,7 @@ func TestCachingSha2PasswordAuthWithMoreData(t *testing.T) {
}
func TestCachingSha2PasswordAuthWithoutTLS(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
th := &testHandler{}
authServer := NewAuthServerStaticWithAuthMethodDescription("", "", 0, CachingSha2Password)
@@ -1179,13 +1173,8 @@ func TestCachingSha2PasswordAuthWithoutTLS(t *testing.T) {
// Create the listener.
l, err := NewListener("tcp", "127.0.0.1:", authServer, th, 0, 0, false, false, 0, 0)
require.NoError(t, err, "NewListener failed: %v", err)
- defer l.Close()
host := l.Addr().(*net.TCPAddr).IP.String()
port := l.Addr().(*net.TCPAddr).Port
- go func() {
- l.Accept()
- }()
-
// Setup the right parameters.
params := &ConnParams{
Host: host,
@@ -1194,9 +1183,10 @@ func TestCachingSha2PasswordAuthWithoutTLS(t *testing.T) {
Pass: "password1",
SslMode: vttls.Disabled,
}
+ go l.Accept()
+ defer cleanupListener(ctx, l, params)
// Connection should fail, as server requires SSL for caching_sha2_password.
- ctx := context.Background()
_, err = Connect(ctx, params)
if err == nil || !strings.Contains(err.Error(), "No authentication methods available for authentication") {
t.Fatalf("unexpected connection error: %v", err)
@@ -1211,6 +1201,7 @@ func checkCountForTLSVer(t *testing.T, version string, expected int64) {
}
func TestErrorCodes(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
th := &testHandler{}
authServer := NewAuthServerStatic("", "", 0)
@@ -1219,13 +1210,10 @@ func TestErrorCodes(t *testing.T) {
UserData: "userData1",
}}
defer authServer.close()
+
l, err := NewListener("tcp", "127.0.0.1:", authServer, th, 0, 0, false, false, 0, 0)
require.NoError(t, err)
- defer l.Close()
- go l.Accept()
-
host, port := getHostPort(t, l.Addr())
-
// Setup the right parameters.
params := &ConnParams{
Host: host,
@@ -1233,8 +1221,9 @@ func TestErrorCodes(t *testing.T) {
Uname: "user1",
Pass: "password1",
}
+ go l.Accept()
+ defer cleanupListener(ctx, l, params)
- ctx := context.Background()
client, err := Connect(ctx, params)
require.NoError(t, err)
@@ -1390,6 +1379,7 @@ func binaryPath(root, binary string) (string, error) {
}
func TestListenerShutdown(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
th := &testHandler{}
authServer := NewAuthServerStatic("", "", 0)
authServer.entries["user1"] = []*AuthServerStaticEntry{{
@@ -1397,13 +1387,10 @@ func TestListenerShutdown(t *testing.T) {
UserData: "userData1",
}}
defer authServer.close()
+
l, err := NewListener("tcp", "127.0.0.1:", authServer, th, 0, 0, false, false, 0, 0)
require.NoError(t, err)
- defer l.Close()
- go l.Accept()
-
host, port := getHostPort(t, l.Addr())
-
// Setup the right parameters.
params := &ConnParams{
Host: host,
@@ -1411,9 +1398,12 @@ func TestListenerShutdown(t *testing.T) {
Uname: "user1",
Pass: "password1",
}
+ go l.Accept()
+ defer cleanupListener(ctx, l, params)
+
connRefuse.Reset()
- ctx, cancel := context.WithCancel(context.Background())
+ ctx, cancel := context.WithCancel(ctx)
defer cancel()
conn, err := Connect(ctx, params)
@@ -1424,7 +1414,9 @@ func TestListenerShutdown(t *testing.T) {
l.Shutdown()
- assert.EqualValues(t, 1, connRefuse.Get(), "connRefuse")
+ require.Eventually(t, func() bool {
+ return connRefuse.Get() == 1
+ }, 1*time.Minute, 100*time.Millisecond, "could not reach the desired connRefuse value")
err = conn.Ping()
require.EqualError(t, err, "Server shutdown in progress (errno 1053) (sqlstate 08S01)")
@@ -1465,21 +1457,21 @@ func TestParseConnAttrs(t *testing.T) {
}
func TestServerFlush(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
mysqlServerFlushDelay := 10 * time.Millisecond
th := &testHandler{}
l, err := NewListener("tcp", "127.0.0.1:", NewAuthServerNone(), th, 0, 0, false, false, 0, mysqlServerFlushDelay)
require.NoError(t, err)
- defer l.Close()
- go l.Accept()
-
host, port := getHostPort(t, l.Addr())
params := &ConnParams{
Host: host,
Port: port,
}
+ go l.Accept()
+ defer cleanupListener(ctx, l, params)
- c, err := Connect(context.Background(), params)
+ c, err := Connect(ctx, params)
require.NoError(t, err)
defer c.Close()
@@ -1513,20 +1505,21 @@ func TestServerFlush(t *testing.T) {
}
func TestTcpKeepAlive(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
th := &testHandler{}
+
l, err := NewListener("tcp", "127.0.0.1:", NewAuthServerNone(), th, 0, 0, false, false, 0, 0)
require.NoError(t, err)
- defer l.Close()
- go l.Accept()
-
host, port := getHostPort(t, l.Addr())
params := &ConnParams{
Host: host,
Port: port,
}
+ go l.Accept()
+ defer cleanupListener(ctx, l, params)
// on connect, the tcp method should be called.
- c, err := Connect(context.Background(), params)
+ c, err := Connect(ctx, params)
require.NoError(t, err)
defer c.Close()
require.True(t, th.lastConn.keepAliveOn, "tcp property method not called")
diff --git a/go/mysql/sqlerror/constants.go b/go/mysql/sqlerror/constants.go
index a61239ce17b..5fedf567998 100644
--- a/go/mysql/sqlerror/constants.go
+++ b/go/mysql/sqlerror/constants.go
@@ -123,6 +123,7 @@ const (
ErSPNotVarArg = ErrorCode(1414)
ERRowIsReferenced2 = ErrorCode(1451)
ErNoReferencedRow2 = ErrorCode(1452)
+ ERInnodbIndexCorrupt = ErrorCode(1817)
ERDupIndex = ErrorCode(1831)
ERInnodbReadOnly = ErrorCode(1874)
@@ -202,6 +203,7 @@ const (
ERBlobKeyWithoutLength = ErrorCode(1170)
ERPrimaryCantHaveNull = ErrorCode(1171)
ERTooManyRows = ErrorCode(1172)
+ ERErrorDuringCommit = ErrorCode(1180)
ERLockOrActiveTransaction = ErrorCode(1192)
ERUnknownSystemVariable = ErrorCode(1193)
ERSetConstantsOnly = ErrorCode(1204)
@@ -246,6 +248,7 @@ const (
ERNoSuchUser = ErrorCode(1449)
ERForbidSchemaChange = ErrorCode(1450)
ERWrongValue = ErrorCode(1525)
+ ERWrongParamcountToNativeFct = ErrorCode(1582)
ERDataOutOfRange = ErrorCode(1690)
ERInvalidJSONText = ErrorCode(3140)
ERInvalidJSONTextInParams = ErrorCode(3141)
@@ -299,6 +302,195 @@ const (
ERServerIsntAvailable = ErrorCode(3168)
)
+// HandlerErrorCode is for errors thrown by the handler, and which are then embedded in other errors.
+// See https://github.com/mysql/mysql-server/blob/trunk/include/my_base.h
+type HandlerErrorCode uint16
+
+func (e HandlerErrorCode) ToString() string {
+ return strconv.FormatUint(uint64(e), 10)
+}
+
+const (
+ // Didn't find key on read or update
+ HaErrKeyNotFound = HandlerErrorCode(120)
+ // Duplicate key on write
+ HaErrFoundDuppKey = HandlerErrorCode(121)
+ // Internal error
+ HaErrInternalError = HandlerErrorCode(122)
+ // Uppdate with is recoverable
+ HaErrRecordChanged = HandlerErrorCode(123)
+ // Wrong index given to function
+ HaErrWrongIndex = HandlerErrorCode(124)
+ // Transaction has been rolled back
+ HaErrRolledBack = HandlerErrorCode(125)
+ // Indexfile is crashed
+ HaErrCrashed = HandlerErrorCode(126)
+ // Record-file is crashed
+ HaErrWrongInRecord = HandlerErrorCode(127)
+ // Record-file is crashed
+ HaErrOutOfMem = HandlerErrorCode(128)
+ // not a MYI file - no signature
+ HaErrNotATable = HandlerErrorCode(130)
+ // Command not supported
+ HaErrWrongCommand = HandlerErrorCode(131)
+ // old database file
+ HaErrOldFile = HandlerErrorCode(132)
+ // No record read in update()
+ HaErrNoActiveRecord = HandlerErrorCode(133)
+ // A record is not there
+ HaErrRecordDeleted = HandlerErrorCode(134)
+ // No more room in file
+ HaErrRecordFileFull = HandlerErrorCode(135)
+ // No more room in file
+ HaErrIndexFileFull = HandlerErrorCode(136)
+ // end in next/prev/first/last
+ HaErrEndOfFile = HandlerErrorCode(137)
+ // unsupported extension used
+ HaErrUnsupported = HandlerErrorCode(138)
+ // Too big row
+ HaErrTooBigRow = HandlerErrorCode(139)
+ // Wrong create option
+ HaWrongCreateOption = HandlerErrorCode(140)
+ // Duplicate unique on write
+ HaErrFoundDuppUnique = HandlerErrorCode(141)
+ // Can't open charset
+ HaErrUnknownCharset = HandlerErrorCode(142)
+ // conflicting tables in MERGE
+ HaErrWrongMrgTableDef = HandlerErrorCode(143)
+ // Last (automatic?) repair failed
+ HaErrCrashedOnRepair = HandlerErrorCode(144)
+ // Table must be repaired
+ HaErrCrashedOnUsage = HandlerErrorCode(145)
+ // Lock wait timeout
+ HaErrLockWaitTimeout = HandlerErrorCode(146)
+ // Lock table is full
+ HaErrLockTableFull = HandlerErrorCode(147)
+ // Updates not allowed
+ HaErrReadOnlyTransaction = HandlerErrorCode(148)
+ // Deadlock found when trying to get lock
+ HaErrLockDeadlock = HandlerErrorCode(149)
+ // Cannot add a foreign key constr.
+ HaErrCannotAddForeign = HandlerErrorCode(150)
+ // Cannot add a child row
+ HaErrNoReferencedRow = HandlerErrorCode(151)
+ // Cannot delete a parent row
+ HaErrRowIsReferenced = HandlerErrorCode(152)
+ // No savepoint with that name
+ HaErrNoSavepoint = HandlerErrorCode(153)
+ // Non unique key block size
+ HaErrNonUniqueBlockSize = HandlerErrorCode(154)
+ // The table does not exist in engine
+ HaErrNoSuchTable = HandlerErrorCode(155)
+ // The table existed in storage engine
+ HaErrTableExist = HandlerErrorCode(156)
+ // Could not connect to storage engine
+ HaErrNoConnection = HandlerErrorCode(157)
+ // NULLs are not supported in spatial index
+ HaErrNullInSpatial = HandlerErrorCode(158)
+ // The table changed in storage engine
+ HaErrTableDefChanged = HandlerErrorCode(159)
+ // There's no partition in table for given value
+ HaErrNoPartitionFound = HandlerErrorCode(160)
+ // Row-based binlogging of row failed
+ HaErrRbrLoggingFailed = HandlerErrorCode(161)
+ // Index needed in foreign key constraint
+ HaErrDropIndexFk = HandlerErrorCode(162)
+ // Upholding foreign key constraints would lead to a duplicate key error in some other table.
+ HaErrForeignDuplicateKey = HandlerErrorCode(163)
+ // The table changed in storage engine
+ HaErrTableNeedsUpgrade = HandlerErrorCode(164)
+ // The table is not writable
+ HaErrTableReadonly = HandlerErrorCode(165)
+ // Failed to get next autoinc value
+ HaErrAutoincReadFailed = HandlerErrorCode(166)
+ // Failed to set row autoinc value
+ HaErrAutoincErange = HandlerErrorCode(167)
+ // Generic error
+ HaErrGeneric = HandlerErrorCode(168)
+ // row not actually updated: new values same as the old values
+ HaErrRecordIsTheSame = HandlerErrorCode(169)
+ // It is not possible to log this statement
+ HaErrLoggingImpossible = HandlerErrorCode(170)
+ // The event was corrupt, leading to illegal data being read
+ HaErrCorruptEvent = HandlerErrorCode(171)
+ // New file format
+ HaErrNewFile = HandlerErrorCode(172)
+ // The event could not be processed no other handler error happened
+ HaErrRowsEventApply = HandlerErrorCode(173)
+ // Error during initialization
+ HaErrInitialization = HandlerErrorCode(174)
+ // File too short
+ HaErrFileTooShort = HandlerErrorCode(175)
+ // Wrong CRC on page
+ HaErrWrongCrc = HandlerErrorCode(176)
+ // Too many active concurrent transactions
+ HaErrTooManyConcurrentTrxs = HandlerErrorCode(177)
+ // There's no explicitly listed partition in table for the given value
+ HaErrNotInLockPartitions = HandlerErrorCode(178)
+ // Index column length exceeds limit
+ HaErrIndexColTooLong = HandlerErrorCode(179)
+ // InnoDB index corrupted
+ HaErrIndexCorrupt = HandlerErrorCode(180)
+ // Undo log record too big
+ HaErrUndoRecTooBig = HandlerErrorCode(181)
+ // Invalid InnoDB Doc ID
+ HaFtsInvalidDocid = HandlerErrorCode(182)
+ // Table being used in foreign key check
+ HaErrTableInFkCheck = HandlerErrorCode(183)
+ // The tablespace existed in storage engine
+ HaErrTablespaceExists = HandlerErrorCode(184)
+ // Table has too many columns
+ HaErrTooManyFields = HandlerErrorCode(185)
+ // Row in wrong partition
+ HaErrRowInWrongPartition = HandlerErrorCode(186)
+ // InnoDB is in read only mode.
+ HaErrInnodbReadOnly = HandlerErrorCode(187)
+ // FTS query exceeds result cache limit
+ HaErrFtsExceedResultCacheLimit = HandlerErrorCode(188)
+ // Temporary file write failure
+ HaErrTempFileWriteFailure = HandlerErrorCode(189)
+ // Innodb is in force recovery mode
+ HaErrInnodbForcedRecovery = HandlerErrorCode(190)
+ // Too many words in a phrase
+ HaErrFtsTooManyWordsInPhrase = HandlerErrorCode(191)
+ // FK cascade depth exceeded
+ HaErrFkDepthExceeded = HandlerErrorCode(192)
+ // Option Missing during Create
+ HaMissingCreateOption = HandlerErrorCode(193)
+ // Out of memory in storage engine
+ HaErrSeOutOfMemory = HandlerErrorCode(194)
+ // Table/Clustered index is corrupted.
+ HaErrTableCorrupt = HandlerErrorCode(195)
+ // The query was interrupted
+ HaErrQueryInterrupted = HandlerErrorCode(196)
+ // Missing Tablespace
+ HaErrTablespaceMissing = HandlerErrorCode(197)
+ // Tablespace is not empty
+ HaErrTablespaceIsNotEmpty = HandlerErrorCode(198)
+ // Invalid Filename
+ HaErrWrongFileName = HandlerErrorCode(199)
+ // Operation is not allowed
+ HaErrNotAllowedCommand = HandlerErrorCode(200)
+ // Compute generated column value failed
+ HaErrComputeFailed = HandlerErrorCode(201)
+ // Table's row format has changed in the storage engine. Information in the data-dictionary needs to be updated.
+ HaErrRowFormatChanged = HandlerErrorCode(202)
+ // Don't wait for record lock
+ HaErrNoWaitLock = HandlerErrorCode(203)
+ // No more room in disk
+ HaErrDiskFullNowait = HandlerErrorCode(204)
+ // No session temporary space available
+ HaErrNoSessionTemp = HandlerErrorCode(205)
+ // Wrong or Invalid table name
+ HaErrWrongTableName = HandlerErrorCode(206)
+ // Path is too long for the OS
+ HaErrTooLongPath = HandlerErrorCode(207)
+ // Histogram sampling initialization failed
+ HaErrSamplingInitFailed = HandlerErrorCode(208)
+ // Too many sub-expression in search string
+ HaErrFtsTooManyNestedExp = HandlerErrorCode(209)
+)
+
// Sql states for errors.
// Originally found in include/mysql/sql_state.h
const (
diff --git a/go/mysql/sqlerror/sql_error.go b/go/mysql/sqlerror/sql_error.go
index f2a5fb46388..4600f0927cc 100644
--- a/go/mysql/sqlerror/sql_error.go
+++ b/go/mysql/sqlerror/sql_error.go
@@ -53,6 +53,18 @@ func NewSQLError(number ErrorCode, sqlState string, msg string) *SQLError {
}
}
+var handlerErrExtract = regexp.MustCompile(`Got error ([0-9]*) [-] .* (from storage engine|during COMMIT|during ROLLBACK)`)
+
+func (se *SQLError) HaErrorCode() HandlerErrorCode {
+ match := handlerErrExtract.FindStringSubmatch(se.Message)
+ if len(match) >= 1 {
+ if code, err := strconv.ParseUint(match[1], 10, 16); err == nil {
+ return HandlerErrorCode(code)
+ }
+ }
+ return 0
+}
+
// Error implements the error interface
func (se *SQLError) Error() string {
var buf strings.Builder
diff --git a/go/mysql/sqlerror/sql_error_test.go b/go/mysql/sqlerror/sql_error_test.go
index b38cec26388..9e73138d60f 100644
--- a/go/mysql/sqlerror/sql_error_test.go
+++ b/go/mysql/sqlerror/sql_error_test.go
@@ -57,6 +57,7 @@ func TestNewSQLErrorFromError(t *testing.T) {
var tCases = []struct {
err error
num ErrorCode
+ ha HandlerErrorCode
ss string
}{
{
@@ -179,6 +180,24 @@ func TestNewSQLErrorFromError(t *testing.T) {
num: ERDupEntry,
ss: SSConstraintViolation,
},
+ {
+ err: fmt.Errorf("ERROR HY000: Got error 204 - 'No more room in disk' during COMMIT"),
+ num: ERUnknownError,
+ ss: SSUnknownSQLState,
+ ha: HaErrDiskFullNowait,
+ },
+ {
+ err: fmt.Errorf("COMMIT failed w/ error: Got error 204 - 'No more room in disk' during COMMIT (errno 1180) (sqlstate HY000) during query: commit"),
+ num: ERErrorDuringCommit,
+ ss: SSUnknownSQLState,
+ ha: HaErrDiskFullNowait,
+ },
+ {
+ err: fmt.Errorf("COMMIT failed w/ error: Got error 149 - 'Lock deadlock; Retry transaction' during COMMIT (errno 1180) (sqlstate HY000) during query: commit"),
+ num: ERErrorDuringCommit,
+ ss: SSUnknownSQLState,
+ ha: HaErrLockDeadlock,
+ },
}
for _, tc := range tCases {
@@ -187,6 +206,8 @@ func TestNewSQLErrorFromError(t *testing.T) {
require.ErrorAs(t, NewSQLErrorFromError(tc.err), &err)
assert.Equal(t, tc.num, err.Number())
assert.Equal(t, tc.ss, err.SQLState())
+ ha := err.HaErrorCode()
+ assert.Equal(t, tc.ha, ha)
})
}
}
diff --git a/go/osutil/loadavg.go b/go/osutil/loadavg.go
new file mode 100644
index 00000000000..0c71f9e18b1
--- /dev/null
+++ b/go/osutil/loadavg.go
@@ -0,0 +1,33 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package osutil
+
+import (
+ "fmt"
+ "strconv"
+ "strings"
+)
+
+// parseLoadAvg parses the load average from the content of /proc/loadavg or sysctl output.
+// Input such as "1.00 0.99 0.98 1/1 1", "2.83 3.01 3.36"
+func parseLoadAvg(content string) (float64, error) {
+ fields := strings.Fields(content)
+ if len(fields) == 0 {
+ return 0, fmt.Errorf("unexpected loadavg content: %s", content)
+ }
+ return strconv.ParseFloat(fields[0], 64)
+}
diff --git a/go/osutil/loadavg_darwin.go b/go/osutil/loadavg_darwin.go
new file mode 100644
index 00000000000..f7b5b6e492a
--- /dev/null
+++ b/go/osutil/loadavg_darwin.go
@@ -0,0 +1,40 @@
+//go:build darwin
+
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package osutil
+
+import (
+ "fmt"
+ "os/exec"
+)
+
+// LoadAvg returns the past 1 minute system load average. This works on linux and darwin systems.
+// On other systems, it returns 0 with no error.
+func LoadAvg() (float64, error) {
+ cmd := exec.Command("sysctl", "-n", "vm.loadavg")
+ // Sample output: `{ 2.83 3.01 3.36 }`
+ output, err := cmd.CombinedOutput()
+ if err != nil {
+ return 0, err
+ }
+ if len(output) < 1 {
+ return 0, fmt.Errorf("unexpected sysctl output: %q", output)
+ }
+ output = output[1:] // Remove the leading `{ `
+ return parseLoadAvg(string(output))
+}
diff --git a/go/osutil/loadavg_linux.go b/go/osutil/loadavg_linux.go
new file mode 100644
index 00000000000..7663bf60ab7
--- /dev/null
+++ b/go/osutil/loadavg_linux.go
@@ -0,0 +1,33 @@
+//go:build linux
+
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package osutil
+
+import (
+ "os"
+)
+
+// LoadAvg returns the past 1 minute system load average. This works on linux and darwin systems.
+// On other systems, it returns 0 with no error.
+func LoadAvg() (float64, error) {
+ content, err := os.ReadFile("/proc/loadavg")
+ if err != nil {
+ return 0, err
+ }
+ return parseLoadAvg(string(content))
+}
diff --git a/go/osutil/loadavg_other.go b/go/osutil/loadavg_other.go
new file mode 100644
index 00000000000..a516cb46a66
--- /dev/null
+++ b/go/osutil/loadavg_other.go
@@ -0,0 +1,25 @@
+//go:build !linux && !darwin
+
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package osutil
+
+// LoadAvg returns the past 1 minute system load average. This works on linux and darwin systems.
+// On other systems, it returns 0 with no error.
+func LoadAvg() (float64, error) {
+ return 0, nil
+}
diff --git a/go/osutil/loadavg_test.go b/go/osutil/loadavg_test.go
new file mode 100644
index 00000000000..5f3831648c6
--- /dev/null
+++ b/go/osutil/loadavg_test.go
@@ -0,0 +1,77 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package osutil
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestLoadAvgValue(t *testing.T) {
+ tcases := []struct {
+ input string
+ loadavg float64
+ isError bool
+ }{
+ {
+ input: "",
+ isError: true,
+ },
+ {
+ input: "{}",
+ isError: true,
+ },
+ {
+ input: "{ x y z }",
+ isError: true,
+ },
+ {
+ input: "1",
+ loadavg: 1.0,
+ },
+ {
+ input: "0.00 0.00 0.00 1/1 1",
+ loadavg: 0.0,
+ },
+ {
+ input: "2.72 2.89 3.17",
+ loadavg: 2.72,
+ },
+ {
+ input: " 2.72 2.89 3.17",
+ loadavg: 2.72,
+ },
+ }
+ for _, tcase := range tcases {
+ t.Run(tcase.input, func(t *testing.T) {
+ loadavg, err := parseLoadAvg(tcase.input)
+ if tcase.isError {
+ assert.Error(t, err)
+ } else {
+ assert.NoError(t, err)
+ assert.Equal(t, tcase.loadavg, loadavg)
+ }
+ })
+ }
+}
+
+func TestLoadAvg(t *testing.T) {
+ loadavg, err := LoadAvg()
+ assert.NoError(t, err)
+ assert.GreaterOrEqual(t, loadavg, 0.0)
+}
diff --git a/go/pools/smartconnpool/waitlist.go b/go/pools/smartconnpool/waitlist.go
index d4abeade0ac..f16215f4b14 100644
--- a/go/pools/smartconnpool/waitlist.go
+++ b/go/pools/smartconnpool/waitlist.go
@@ -88,11 +88,14 @@ func (wl *waitlist[C]) expire(force bool) {
// or remove everything if force is true
for e := wl.list.Front(); e != nil; e = e.Next() {
if force || e.Value.ctx.Err() != nil {
- wl.list.Remove(e)
expired = append(expired, e)
continue
}
}
+ // remove the expired waiters from the waitlist after traversing it
+ for _, e := range expired {
+ wl.list.Remove(e)
+ }
wl.mu.Unlock()
// once all the expired waiters have been removed from the waitlist, wake them up one by one
diff --git a/go/pools/smartconnpool/waitlist_test.go b/go/pools/smartconnpool/waitlist_test.go
new file mode 100644
index 00000000000..1486aa989b6
--- /dev/null
+++ b/go/pools/smartconnpool/waitlist_test.go
@@ -0,0 +1,68 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package smartconnpool
+
+import (
+ "context"
+ "sync/atomic"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+)
+
+func TestWaitlistExpireWithMultipleWaiters(t *testing.T) {
+ wait := waitlist[*TestConn]{}
+ wait.init()
+
+ ctx, cancel := context.WithTimeout(context.Background(), 10*time.Millisecond)
+ defer cancel()
+
+ waiterCount := 2
+ expireCount := atomic.Int32{}
+
+ for i := 0; i < waiterCount; i++ {
+ go func() {
+ _, err := wait.waitForConn(ctx, nil)
+ if err != nil {
+ expireCount.Add(1)
+ }
+ }()
+ }
+
+ // Wait for the context to expire
+ <-ctx.Done()
+
+ // Expire the waiters
+ wait.expire(false)
+
+ // Wait for the notified goroutines to finish
+ timeout := time.After(1 * time.Second)
+ ticker := time.NewTicker(10 * time.Millisecond)
+ defer ticker.Stop()
+ for expireCount.Load() != int32(waiterCount) {
+ select {
+ case <-timeout:
+ require.Failf(t, "Timed out waiting for all waiters to expire", "Wanted %d, got %d", waiterCount, expireCount.Load())
+ case <-ticker.C:
+ // try again
+ }
+ }
+
+ assert.Equal(t, int32(waiterCount), expireCount.Load())
+}
diff --git a/go/sqltypes/value.go b/go/sqltypes/value.go
index 4dde979066b..7fb6fa80396 100644
--- a/go/sqltypes/value.go
+++ b/go/sqltypes/value.go
@@ -19,7 +19,6 @@ package sqltypes
import (
"bytes"
- "encoding/base64"
"encoding/hex"
"encoding/json"
"errors"
@@ -27,6 +26,7 @@ import (
"math/big"
"strconv"
"strings"
+ "time"
"google.golang.org/protobuf/encoding/protowire"
@@ -436,11 +436,107 @@ func (v Value) String() string {
return fmt.Sprintf("%v(%s)", Type(v.typ), v.val)
}
+// ToTime returns the value as a time.Time in UTC.
+// NULL values are returned as zero time.
+func (v Value) ToTime() (time.Time, error) {
+ return v.ToTimeInLocation(time.UTC)
+}
+
+// ToTimeInLocation returns the value as a time.Time in the provided location.
+// NULL values are returned as zero time.
+func (v Value) ToTimeInLocation(loc *time.Location) (time.Time, error) {
+ if v.Type() == Null {
+ return time.Time{}, nil
+ }
+ switch v.Type() {
+ case Datetime, Timestamp:
+ return datetimeToNative(v, loc)
+ case Date:
+ return dateToNative(v, loc)
+ default:
+ return time.Time{}, ErrIncompatibleTypeCast
+ }
+}
+
+// ErrInvalidTime is returned when we fail to parse a datetime
+// string from MySQL. This should never happen unless things are
+// seriously messed up.
+var ErrInvalidTime = errors.New("invalid MySQL time string")
+
+var isoTimeFormat = "2006-01-02 15:04:05.999999"
+var isoNullTime = "0000-00-00 00:00:00.000000"
+var isoTimeLength = len(isoTimeFormat)
+
+// parseISOTime pases a time string in MySQL's textual datetime format.
+// This is very similar to ISO8601, with some differences:
+//
+// - There is no T separator between the date and time sections;
+// a space is used instead.
+// - There is never a timezone section in the string, as these datetimes
+// are not timezone-aware. There isn't a Z value for UTC times for
+// the same reason.
+//
+// Note that this function can handle both DATE (which should _always_ have
+// a length of 10) and DATETIME strings (which have a variable length, 18+
+// depending on the number of decimal sub-second places).
+//
+// Also note that this function handles the case where MySQL returns a NULL
+// time (with a string where all sections are zeroes) by returning a zeroed
+// out time.Time object. NULL time strings are not considered a parsing error.
+//
+// See: isoTimeFormat
+func parseISOTime(tstr string, loc *time.Location, minLen, maxLen int) (t time.Time, err error) {
+ tlen := len(tstr)
+ if tlen < minLen || tlen > maxLen {
+ err = ErrInvalidTime
+ return
+ }
+
+ if tstr == isoNullTime[:tlen] {
+ // This is what MySQL would send when the date is NULL,
+ // so return an empty time.Time instead.
+ // This is not a parsing error
+ return
+ }
+
+ if loc == nil {
+ loc = time.UTC
+ }
+
+ // Since the time format returned from MySQL never has a Timezone
+ // section, ParseInLocation will initialize the time.Time struct
+ // with the default `loc` we're passing here.
+ return time.ParseInLocation(isoTimeFormat[:tlen], tstr, loc)
+}
+
+// datetimeToNative converts a Datetime Value into a time.Time
+func datetimeToNative(v Value, loc *time.Location) (time.Time, error) {
+ // Valid format string offsets for a DATETIME
+ // |DATETIME |19+
+ // |------------------|------|
+ // "2006-01-02 15:04:05.999999"
+ return parseISOTime(v.ToString(), loc, 19, isoTimeLength)
+}
+
+// dateToNative converts a Date Value into a time.Time.
+// Note that there's no specific type in the Go stdlib to represent
+// dates without time components, so the returned Time will have
+// their hours/mins/seconds zeroed out.
+func dateToNative(v Value, loc *time.Location) (time.Time, error) {
+ // Valid format string offsets for a DATE
+ // |DATE |10
+ // |---------|
+ // "2006-01-02 00:00:00.000000"
+ return parseISOTime(v.ToString(), loc, 10, 10)
+}
+
// EncodeSQL encodes the value into an SQL statement. Can be binary.
func (v Value) EncodeSQL(b BinWriter) {
switch {
case v.Type() == Null:
b.Write(NullBytes)
+ case v.IsBinary():
+ encodeBinarySQL(v.val, b)
case v.IsQuoted():
encodeBytesSQL(v.val, b)
case v.Type() == Bit:
@@ -456,6 +552,8 @@ func (v Value) EncodeSQLStringBuilder(b *strings.Builder) {
switch {
case v.Type() == Null:
b.Write(NullBytes)
+ case v.IsBinary():
+ encodeBinarySQLStringBuilder(v.val, b)
case v.IsQuoted():
encodeBytesSQLStringBuilder(v.val, b)
case v.Type() == Bit:
@@ -482,6 +580,8 @@ func (v Value) EncodeSQLBytes2(b *bytes2.Buffer) {
switch {
case v.Type() == Null:
b.Write(NullBytes)
+ case v.IsBinary():
+ encodeBinarySQLBytes2(v.val, b)
case v.IsQuoted():
encodeBytesSQLBytes2(v.val, b)
case v.Type() == Bit:
@@ -491,18 +591,6 @@ func (v Value) EncodeSQLBytes2(b *bytes2.Buffer) {
}
}
-// EncodeASCII encodes the value using 7-bit clean ascii bytes.
-func (v Value) EncodeASCII(b BinWriter) {
- switch {
- case v.Type() == Null:
- b.Write(NullBytes)
- case v.IsQuoted() || v.Type() == Bit:
- encodeBytesASCII(v.val, b)
- default:
- b.Write(v.val)
- }
-}
-
// IsNull returns true if Value is null.
func (v Value) IsNull() bool {
return v.Type() == Null
@@ -758,6 +846,22 @@ func (v Value) TinyWeight() uint32 {
return v.tinyweight
}
+func encodeBinarySQL(val []byte, b BinWriter) {
+ buf := &bytes2.Buffer{}
+ encodeBinarySQLBytes2(val, buf)
+ b.Write(buf.Bytes())
+}
+
+func encodeBinarySQLBytes2(val []byte, buf *bytes2.Buffer) {
+ buf.Write([]byte("_binary"))
+ encodeBytesSQLBytes2(val, buf)
+}
+
+func encodeBinarySQLStringBuilder(val []byte, buf *strings.Builder) {
+ buf.Write([]byte("_binary"))
+ encodeBytesSQLStringBuilder(val, buf)
+}
+
func encodeBytesSQL(val []byte, b BinWriter) {
buf := &bytes2.Buffer{}
encodeBytesSQLBytes2(val, buf)
@@ -838,16 +942,6 @@ func encodeBytesSQLBits(val []byte, b BinWriter) {
fmt.Fprint(b, "'")
}
-func encodeBytesASCII(val []byte, b BinWriter) {
- buf := &bytes2.Buffer{}
- buf.WriteByte('\'')
- encoder := base64.NewEncoder(base64.StdEncoding, buf)
- encoder.Write(val)
- encoder.Close()
- buf.WriteByte('\'')
- b.Write(buf.Bytes())
-}
-
// SQLEncodeMap specifies how to escape binary data with '\'.
// Complies to https://dev.mysql.com/doc/refman/5.7/en/string-literals.html
// Handling escaping of % and _ is different than other characters.
diff --git a/go/sqltypes/value_test.go b/go/sqltypes/value_test.go
index c7bdf1234dd..99f8566472e 100644
--- a/go/sqltypes/value_test.go
+++ b/go/sqltypes/value_test.go
@@ -18,8 +18,10 @@ package sqltypes
import (
"math"
+ "reflect"
"strings"
"testing"
+ "time"
"github.com/stretchr/testify/assert"
@@ -367,34 +369,28 @@ func TestEncode(t *testing.T) {
outSQL string
outASCII string
}{{
- in: NULL,
- outSQL: "null",
- outASCII: "null",
+ in: NULL,
+ outSQL: "null",
}, {
- in: TestValue(Int64, "1"),
- outSQL: "1",
- outASCII: "1",
+ in: TestValue(Int64, "1"),
+ outSQL: "1",
}, {
- in: TestValue(VarChar, "foo"),
- outSQL: "'foo'",
- outASCII: "'Zm9v'",
+ in: TestValue(VarChar, "foo"),
+ outSQL: "'foo'",
+ }, {
+ in: TestValue(VarChar, "\x00'\"\b\n\r\t\x1A\\"),
+ outSQL: "'\\0\\'\"\\b\\n\\r\\t\\Z\\\\'",
}, {
- in: TestValue(VarChar, "\x00'\"\b\n\r\t\x1A\\"),
- outSQL: "'\\0\\'\"\\b\\n\\r\\t\\Z\\\\'",
- outASCII: "'ACciCAoNCRpc'",
+ in: TestValue(VarBinary, "\x00'\"\b\n\r\t\x1A\\"),
+ outSQL: "_binary'\\0\\'\"\\b\\n\\r\\t\\Z\\\\'",
}, {
- in: TestValue(Bit, "a"),
- outSQL: "b'01100001'",
- outASCII: "'YQ=='",
+ in: TestValue(Bit, "a"),
+ outSQL: "b'01100001'",
}}
for _, tcase := range testcases {
var buf strings.Builder
tcase.in.EncodeSQL(&buf)
assert.Equal(t, tcase.outSQL, buf.String())
-
- buf.Reset()
- tcase.in.EncodeASCII(&buf)
- assert.Equal(t, tcase.outASCII, buf.String())
}
}
@@ -617,6 +613,155 @@ func TestToUint32(t *testing.T) {
}
}
+var randomLocation = time.FixedZone("Nowhere", 3*60*60)
+
+func DatetimeValue(str string) Value {
+ return TestValue(Datetime, str)
+}
+
+func DateValue(str string) Value {
+ return TestValue(Date, str)
+}
+
+func TestDatetimeToNative(t *testing.T) {
+ tcases := []struct {
+ val Value
+ loc *time.Location
+ out time.Time
+ err bool
+ }{{
+ val: DatetimeValue("1899-08-24 17:20:00"),
+ out: time.Date(1899, 8, 24, 17, 20, 0, 0, time.UTC),
+ }, {
+ val: DatetimeValue("1952-03-11 01:02:03"),
+ loc: time.Local,
+ out: time.Date(1952, 3, 11, 1, 2, 3, 0, time.Local),
+ }, {
+ val: DatetimeValue("1952-03-11 01:02:03"),
+ loc: randomLocation,
+ out: time.Date(1952, 3, 11, 1, 2, 3, 0, randomLocation),
+ }, {
+ val: DatetimeValue("1952-03-11 01:02:03"),
+ loc: time.UTC,
+ out: time.Date(1952, 3, 11, 1, 2, 3, 0, time.UTC),
+ }, {
+ val: DatetimeValue("1899-08-24 17:20:00.000000"),
+ out: time.Date(1899, 8, 24, 17, 20, 0, 0, time.UTC),
+ }, {
+ val: DatetimeValue("1899-08-24 17:20:00.000001"),
+ out: time.Date(1899, 8, 24, 17, 20, 0, int(1*time.Microsecond), time.UTC),
+ }, {
+ val: DatetimeValue("1899-08-24 17:20:00.123456"),
+ out: time.Date(1899, 8, 24, 17, 20, 0, int(123456*time.Microsecond), time.UTC),
+ }, {
+ val: DatetimeValue("1899-08-24 17:20:00.222"),
+ out: time.Date(1899, 8, 24, 17, 20, 0, int(222*time.Millisecond), time.UTC),
+ }, {
+ val: DatetimeValue("1899-08-24 17:20:00.1234567"),
+ err: true,
+ }, {
+ val: DatetimeValue("1899-08-24 17:20:00.1"),
+ out: time.Date(1899, 8, 24, 17, 20, 0, int(100*time.Millisecond), time.UTC),
+ }, {
+ val: DatetimeValue("0000-00-00 00:00:00"),
+ out: time.Time{},
+ }, {
+ val: DatetimeValue("0000-00-00 00:00:00.0"),
+ out: time.Time{},
+ }, {
+ val: DatetimeValue("0000-00-00 00:00:00.000"),
+ out: time.Time{},
+ }, {
+ val: DatetimeValue("0000-00-00 00:00:00.000000"),
+ out: time.Time{},
+ }, {
+ val: DatetimeValue("0000-00-00 00:00:00.0000000"),
+ err: true,
+ }, {
+ val: DatetimeValue("1899-08-24T17:20:00.000000"),
+ err: true,
+ }, {
+ val: DatetimeValue("1899-02-31 17:20:00.000000"),
+ err: true,
+ }, {
+ val: DatetimeValue("1899-08-24 17:20:00."),
+ out: time.Date(1899, 8, 24, 17, 20, 0, 0, time.UTC),
+ }, {
+ val: DatetimeValue("0000-00-00 00:00:00.000001"),
+ err: true,
+ }, {
+ val: DatetimeValue("1899-08-24 17:20:00 +02:00"),
+ err: true,
+ }, {
+ val: DatetimeValue("1899-08-24"),
+ err: true,
+ }, {
+ val: DatetimeValue("This is not a valid timestamp"),
+ err: true,
+ }}
+
+ for _, tcase := range tcases {
+ got, err := datetimeToNative(tcase.val, tcase.loc)
+ if tcase.err && err == nil {
+ t.Errorf("datetimeToNative(%v, %#v) succeeded; expected error", tcase.val, tcase.loc)
+ }
+ if !tcase.err && err != nil {
+ t.Errorf("datetimeToNative(%v, %#v) failed: %v", tcase.val, tcase.loc, err)
+ }
+ if !reflect.DeepEqual(got, tcase.out) {
+ t.Errorf("datetimeToNative(%v, %#v): %v, want %v", tcase.val, tcase.loc, got, tcase.out)
+ }
+ }
+}
+
+func TestDateToNative(t *testing.T) {
+ tcases := []struct {
+ val Value
+ loc *time.Location
+ out time.Time
+ err bool
+ }{{
+ val: DateValue("1899-08-24"),
+ out: time.Date(1899, 8, 24, 0, 0, 0, 0, time.UTC),
+ }, {
+ val: DateValue("1952-03-11"),
+ loc: time.Local,
+ out: time.Date(1952, 3, 11, 0, 0, 0, 0, time.Local),
+ }, {
+ val: DateValue("1952-03-11"),
+ loc: randomLocation,
+ out: time.Date(1952, 3, 11, 0, 0, 0, 0, randomLocation),
+ }, {
+ val: DateValue("0000-00-00"),
+ out: time.Time{},
+ }, {
+ val: DateValue("1899-02-31"),
+ err: true,
+ }, {
+ val: DateValue("1899-08-24 17:20:00"),
+ err: true,
+ }, {
+ val: DateValue("0000-00-00 00:00:00"),
+ err: true,
+ }, {
+ val: DateValue("This is not a valid timestamp"),
+ err: true,
+ }}
+
+ for _, tcase := range tcases {
+ got, err := dateToNative(tcase.val, tcase.loc)
+ if tcase.err && err == nil {
+ t.Errorf("dateToNative(%v, %#v) succeeded; expected error", tcase.val, tcase.loc)
+ }
+ if !tcase.err && err != nil {
+ t.Errorf("dateToNative(%v, %#v) failed: %v", tcase.val, tcase.loc, err)
+ }
+ if !reflect.DeepEqual(got, tcase.out) {
+ t.Errorf("dateToNative(%v, %#v): %v, want %v", tcase.val, tcase.loc, got, tcase.out)
+ }
+ }
+}
+
func TestEncodeSQLStringBuilder(t *testing.T) {
testcases := []struct {
in Value
@@ -639,6 +784,9 @@ func TestEncodeSQLStringBuilder(t *testing.T) {
}, {
in: TestTuple(TestValue(Int64, "1"), TestValue(VarChar, "foo")),
outSQL: "(1, 'foo')",
+ }, {
+ in: TestValue(VarBinary, "foo"),
+ outSQL: "_binary'foo'",
}}
for _, tcase := range testcases {
var buf strings.Builder
diff --git a/go/stats/export.go b/go/stats/export.go
index 58be67e13f9..dee087dd3c5 100644
--- a/go/stats/export.go
+++ b/go/stats/export.go
@@ -384,19 +384,76 @@ func IsDimensionCombined(name string) bool {
// them apart later. The function also replaces specific label values with "all"
// if a dimenstion is marked as true in combinedLabels.
func safeJoinLabels(labels []string, combinedLabels []bool) string {
- sanitizedLabels := make([]string, len(labels))
+ // fast path that potentially requires 0 allocations
+ switch len(labels) {
+ case 0:
+ return ""
+ case 1:
+ if combinedLabels == nil || !combinedLabels[0] {
+ return safeLabel(labels[0])
+ }
+ return StatsAllStr
+ }
+
+ var b strings.Builder
+ size := len(labels) - 1 // number of separators
for idx, label := range labels {
if combinedLabels != nil && combinedLabels[idx] {
- sanitizedLabels[idx] = StatsAllStr
+ size += len(StatsAllStr)
+ } else {
+ size += len(label)
+ }
+ }
+ b.Grow(size)
+
+ for idx, label := range labels {
+ if idx > 0 {
+ b.WriteByte('.')
+ }
+ if combinedLabels != nil && combinedLabels[idx] {
+ b.WriteString(StatsAllStr)
+ } else {
+ appendSafeLabel(&b, label)
+ }
+ }
+ return b.String()
+}
+
+// appendSafeLabel is a more efficient version equivalent
+// to strings.ReplaceAll(label, ".", "_"), but appends into
+// a strings.Builder.
+func appendSafeLabel(b *strings.Builder, label string) {
+ // first quickly check if there are any periods to be replaced
+ found := false
+ for i := 0; i < len(label); i++ {
+ if label[i] == '.' {
+ found = true
+ break
+ }
+ }
+ // if there are none, we can just write the label as-is into the
+ // Builder.
+ if !found {
+ b.WriteString(label)
+ return
+ }
+
+ for i := 0; i < len(label); i++ {
+ if label[i] == '.' {
+ b.WriteByte('_')
} else {
- sanitizedLabels[idx] = safeLabel(label)
+ b.WriteByte(label[i])
}
}
- return strings.Join(sanitizedLabels, ".")
}
func safeLabel(label string) string {
- return strings.Replace(label, ".", "_", -1)
+ // XXX: strings.ReplaceAll is optimal in the case where '.' does not
+ // exist in the label name, and will return the string as-is without
+ // allocations. So if we are working with a single label, it's preferrable
+ // over appendSafeLabel, since appendSafeLabel is required to allocate
+ // into a strings.Builder.
+ return strings.ReplaceAll(label, ".", "_")
}
func isVarDropped(name string) bool {
diff --git a/go/stats/export_test.go b/go/stats/export_test.go
index e6160f77184..797d5c556d9 100644
--- a/go/stats/export_test.go
+++ b/go/stats/export_test.go
@@ -19,6 +19,7 @@ package stats
import (
"expvar"
"reflect"
+ "strings"
"testing"
"github.com/stretchr/testify/require"
@@ -189,3 +190,73 @@ func TestStringMapWithMultiLabels(t *testing.T) {
require.Equal(t, c.ValueLabel(), "ccc")
}
+
+func TestSafeJoinLabels(t *testing.T) {
+ cases := []struct {
+ labels []string
+ combined []bool
+ want string
+ }{
+ {
+ labels: []string{},
+ want: "",
+ },
+ {
+ labels: []string{"foo"},
+ want: "foo",
+ },
+ {
+ labels: []string{"foo.bar"},
+ want: "foo_bar",
+ },
+ {
+ labels: []string{"foo"},
+ combined: []bool{true},
+ want: "all",
+ },
+ {
+ labels: []string{"foo", "bar"},
+ want: "foo.bar",
+ },
+ {
+ labels: []string{"foo", "bar"},
+ combined: []bool{true, false},
+ want: "all.bar",
+ },
+ {
+ labels: []string{"foo", "bar"},
+ combined: []bool{true, true},
+ want: "all.all",
+ },
+ {
+ labels: []string{"foo", "bar"},
+ combined: []bool{false, true},
+ want: "foo.all",
+ },
+ {
+ labels: []string{"foo.bar", "bar.baz"},
+ want: "foo_bar.bar_baz",
+ },
+ }
+ for _, tc := range cases {
+ t.Run(strings.Join(tc.labels, ","), func(t *testing.T) {
+ require.Equal(t, tc.want, safeJoinLabels(tc.labels, tc.combined))
+ })
+ }
+}
+func BenchmarkSafeJoinLabels(b *testing.B) {
+ labels := [5]string{"foo:bar", "foo.bar", "c1a", "testing", "testing.a.b"}
+ combined := [5]bool{true, true, true, true, true}
+ b.Run("no combined", func(b *testing.B) {
+ b.ReportAllocs()
+ for i := 0; i < b.N; i++ {
+ _ = safeJoinLabels(labels[:], nil)
+ }
+ })
+ b.Run("combined", func(b *testing.B) {
+ b.ReportAllocs()
+ for i := 0; i < b.N; i++ {
+ _ = safeJoinLabels(labels[:], combined[:])
+ }
+ })
+}
diff --git a/go/test/endtoend/backup/s3/s3_builtin_test.go b/go/test/endtoend/backup/s3/s3_builtin_test.go
new file mode 100644
index 00000000000..9c83e5f8fec
--- /dev/null
+++ b/go/test/endtoend/backup/s3/s3_builtin_test.go
@@ -0,0 +1,434 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package s3
+
+import (
+ "context"
+ "io"
+ "os"
+ "os/exec"
+ "path"
+ "strconv"
+ "strings"
+ "testing"
+ "time"
+
+ "log"
+
+ "github.com/minio/minio-go"
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+
+ "vitess.io/vitess/go/mysql/fakesqldb"
+ "vitess.io/vitess/go/mysql/replication"
+ "vitess.io/vitess/go/vt/logutil"
+ "vitess.io/vitess/go/vt/mysqlctl"
+ "vitess.io/vitess/go/vt/mysqlctl/backupstats"
+ "vitess.io/vitess/go/vt/mysqlctl/blackbox"
+ "vitess.io/vitess/go/vt/mysqlctl/s3backupstorage"
+)
+
+/*
+ These tests use Minio to emulate AWS S3. It allows us to run the tests on
+ GitHub Actions without having the security burden of carrying out AWS secrets
+ in our GitHub repo.
+
+ Minio is almost a drop-in replacement for AWS S3, if you want to run these
+ tests against a true AWS S3 Bucket, you can do so by not running the TestMain
+ and setting the 'AWS_*' environment variables to your own values.
+
+ This package and file are named 'endtoend', but it's more an integration test.
+ However, we don't want our CI infra to mistake this for a regular unit-test,
+ hence the rename to 'endtoend'.
+*/
+
+func TestMain(m *testing.M) {
+ f := func() int {
+ minioPath, err := exec.LookPath("minio")
+ if err != nil {
+ log.Fatalf("minio binary not found: %v", err)
+ }
+
+ dataDir, err := os.MkdirTemp("", "")
+ if err != nil {
+ log.Fatalf("could not create temporary directory: %v", err)
+ }
+ err = os.MkdirAll(dataDir, 0755)
+ if err != nil {
+ log.Fatalf("failed to create MinIO data directory: %v", err)
+ }
+
+ cmd := exec.Command(minioPath, "server", dataDir, "--console-address", ":9001")
+ cmd.Stdout = os.Stdout
+ cmd.Stderr = os.Stderr
+
+ err = cmd.Start()
+ if err != nil {
+ log.Fatalf("failed to start MinIO: %v", err)
+ }
+ defer func() {
+ cmd.Process.Kill()
+ }()
+
+ // Local MinIO credentials
+ accessKey := "minioadmin"
+ secretKey := "minioadmin"
+ minioEndpoint := "http://localhost:9000"
+ bucketName := "test-bucket"
+ region := "us-east-1"
+
+ client, err := minio.New("localhost:9000", accessKey, secretKey, false)
+ if err != nil {
+ log.Fatalf("failed to create MinIO client: %v", err)
+ }
+ waitForMinio(client)
+
+ err = client.MakeBucket(bucketName, region)
+ if err != nil {
+ log.Fatalf("failed to create test bucket: %v", err)
+ }
+
+ // Same env variables that are used between AWS S3 and Minio
+ os.Setenv("AWS_ACCESS_KEY_ID", accessKey)
+ os.Setenv("AWS_SECRET_ACCESS_KEY", secretKey)
+ os.Setenv("AWS_BUCKET", bucketName)
+ os.Setenv("AWS_ENDPOINT", minioEndpoint)
+ os.Setenv("AWS_REGION", region)
+
+ return m.Run()
+ }
+
+ os.Exit(f())
+}
+
+func waitForMinio(client *minio.Client) {
+ for i := 0; i < 60; i++ {
+ _, err := client.ListBuckets()
+ if err == nil {
+ return
+ }
+ time.Sleep(1 * time.Second)
+ }
+ log.Fatalf("MinIO server did not become ready in time")
+}
+
+func checkEnvForS3(t *testing.T) {
+ // We never want to skip the tests if we are running on CI.
+ // We will always run these tests on CI with the TestMain and Minio.
+ // There should not be a need to skip the tests due to missing ENV vars.
+ if os.Getenv("GITHUB_ACTIONS") != "" {
+ return
+ }
+
+ envRequired := []string{
+ "AWS_ACCESS_KEY_ID",
+ "AWS_SECRET_ACCESS_KEY",
+ "AWS_BUCKET",
+ "AWS_ENDPOINT",
+ "AWS_REGION",
+ }
+
+ var missing []string
+ for _, s := range envRequired {
+ if os.Getenv(s) == "" {
+ missing = append(missing, s)
+ }
+ }
+ if len(missing) > 0 {
+ t.Skipf("missing AWS secrets to run this test: please set: %s", strings.Join(missing, ", "))
+ }
+}
+
+type backupTestConfig struct {
+ concurrency int
+ addFileReturnFn func(s3 *s3backupstorage.S3BackupHandle, ctx context.Context, filename string, filesize int64, firstAdd bool) (io.WriteCloser, error)
+ checkCleanupError bool
+ expectedResult mysqlctl.BackupResult
+ expectedStats blackbox.StatSummary
+}
+
+func runBackupTest(t *testing.T, cfg backupTestConfig) {
+ checkEnvForS3(t)
+ s3backupstorage.InitFlag(s3backupstorage.FakeConfig{
+ Region: os.Getenv("AWS_REGION"),
+ Endpoint: os.Getenv("AWS_ENDPOINT"),
+ Bucket: os.Getenv("AWS_BUCKET"),
+ ForcePath: true,
+ })
+
+ ctx := context.Background()
+ backupRoot, keyspace, shard, ts := blackbox.SetupCluster(ctx, t, 2, 2)
+
+ be := &mysqlctl.BuiltinBackupEngine{}
+
+ // Configure a tight deadline to force a timeout
+ oldDeadline := blackbox.SetBuiltinBackupMysqldDeadline(time.Second)
+ defer blackbox.SetBuiltinBackupMysqldDeadline(oldDeadline)
+
+ fakeStats := backupstats.NewFakeStats()
+ logger := logutil.NewMemoryLogger()
+
+ bh, err := s3backupstorage.NewFakeS3BackupHandle(ctx, t.Name(), time.Now().Format(mysqlctl.BackupTimestampFormat), logger, fakeStats)
+ require.NoError(t, err)
+ t.Cleanup(func() {
+ err := bh.AbortBackup(ctx)
+ if cfg.checkCleanupError {
+ require.NoError(t, err)
+ }
+ })
+ bh.AddFileReturnF = cfg.addFileReturnFn
+
+ // Spin up a fake daemon to be used in backups. It needs to be allowed to receive:
+ // "STOP REPLICA", "START REPLICA", in that order.
+ fakedb := fakesqldb.New(t)
+ defer fakedb.Close()
+ mysqld := mysqlctl.NewFakeMysqlDaemon(fakedb)
+ defer mysqld.Close()
+ mysqld.ExpectedExecuteSuperQueryList = []string{"STOP REPLICA", "START REPLICA"}
+
+ backupResult, err := be.ExecuteBackup(ctx, mysqlctl.BackupParams{
+ Logger: logger,
+ Mysqld: mysqld,
+ Cnf: &mysqlctl.Mycnf{
+ InnodbDataHomeDir: path.Join(backupRoot, "innodb"),
+ InnodbLogGroupHomeDir: path.Join(backupRoot, "log"),
+ DataDir: path.Join(backupRoot, "datadir"),
+ },
+ Concurrency: cfg.concurrency,
+ HookExtraEnv: map[string]string{},
+ TopoServer: ts,
+ Keyspace: keyspace,
+ Shard: shard,
+ Stats: fakeStats,
+ MysqlShutdownTimeout: blackbox.MysqlShutdownTimeout,
+ }, bh)
+
+ require.Equal(t, cfg.expectedResult, backupResult)
+ switch cfg.expectedResult {
+ case mysqlctl.BackupUsable:
+ require.NoError(t, err)
+ case mysqlctl.BackupUnusable, mysqlctl.BackupEmpty:
+ require.Error(t, err)
+ }
+
+ ss := blackbox.GetStats(fakeStats)
+ require.Equal(t, cfg.expectedStats.DestinationCloseStats, ss.DestinationCloseStats)
+ require.Equal(t, cfg.expectedStats.DestinationOpenStats, ss.DestinationOpenStats)
+ require.Equal(t, cfg.expectedStats.DestinationWriteStats, ss.DestinationWriteStats)
+ require.Equal(t, cfg.expectedStats.SourceCloseStats, ss.SourceCloseStats)
+ require.Equal(t, cfg.expectedStats.SourceOpenStats, ss.SourceOpenStats)
+ require.Equal(t, cfg.expectedStats.SourceReadStats, ss.SourceReadStats)
+}
+
+func TestExecuteBackupS3FailEachFileOnce(t *testing.T) {
+ runBackupTest(t, backupTestConfig{
+ concurrency: 2,
+
+ // Modify the fake S3 storage to always fail when trying to write a file for the first time
+ addFileReturnFn: s3backupstorage.FailFirstWrite,
+ checkCleanupError: true,
+ expectedResult: mysqlctl.BackupUsable,
+
+ // Even though we have 4 files, we expect '8' for all the values below as we re-do every file once.
+ expectedStats: blackbox.StatSummary{
+ DestinationCloseStats: 8,
+ DestinationOpenStats: 8,
+ DestinationWriteStats: 8,
+ SourceCloseStats: 8,
+ SourceOpenStats: 8,
+ SourceReadStats: 8,
+ },
+ })
+}
+
+func TestExecuteBackupS3FailEachFileTwice(t *testing.T) {
+ runBackupTest(t, backupTestConfig{
+ concurrency: 1,
+
+ // Modify the fake S3 storage to always fail when trying to write a file for the first time
+ addFileReturnFn: s3backupstorage.FailAllWrites,
+
+ // If the code works as expected by this test, no files will be created on S3 and AbortBackup will
+ // fail, for this reason, let's not check the error return.
+ // We still call AbortBackup anyway in the event that the code is not behaving as expected and some
+ // files were created by mistakes, we delete them.
+ checkCleanupError: false,
+ expectedResult: mysqlctl.BackupUnusable,
+
+ // All stats here must be equal to 5, we have four files, we go each of them, they all fail.
+ // The logic decides to retry each file once, we retry the first failed file, it fails again
+ // but since it has reached the limit of retries, the backup will fail anyway, thus we don't
+ // retry the other 3 files.
+ expectedStats: blackbox.StatSummary{
+ DestinationCloseStats: 5,
+ DestinationOpenStats: 5,
+ DestinationWriteStats: 5,
+ SourceCloseStats: 5,
+ SourceOpenStats: 5,
+ SourceReadStats: 5,
+ },
+ })
+}
+
+type restoreTestConfig struct {
+ readFileReturnFn func(s3 *s3backupstorage.S3BackupHandle, ctx context.Context, filename string, firstRead bool) (io.ReadCloser, error)
+ expectSuccess bool
+ expectedStats blackbox.StatSummary
+}
+
+func runRestoreTest(t *testing.T, cfg restoreTestConfig) {
+ checkEnvForS3(t)
+ s3backupstorage.InitFlag(s3backupstorage.FakeConfig{
+ Region: os.Getenv("AWS_REGION"),
+ Endpoint: os.Getenv("AWS_ENDPOINT"),
+ Bucket: os.Getenv("AWS_BUCKET"),
+ ForcePath: true,
+ })
+
+ ctx := context.Background()
+ backupRoot, keyspace, shard, ts := blackbox.SetupCluster(ctx, t, 2, 2)
+
+ fakeStats := backupstats.NewFakeStats()
+ logger := logutil.NewMemoryLogger()
+
+ be := &mysqlctl.BuiltinBackupEngine{}
+ dirName := time.Now().Format(mysqlctl.BackupTimestampFormat)
+ name := t.Name() + "-" + strconv.Itoa(int(time.Now().Unix()))
+ bh, err := s3backupstorage.NewFakeS3BackupHandle(ctx, name, dirName, logger, fakeStats)
+ require.NoError(t, err)
+ t.Cleanup(func() {
+ require.NoError(t, bh.AbortBackup(ctx))
+ })
+
+ // Spin up a fake daemon to be used in backups. It needs to be allowed to receive:
+ // "STOP REPLICA", "START REPLICA", in that order.
+ fakedb := fakesqldb.New(t)
+ defer fakedb.Close()
+ mysqld := mysqlctl.NewFakeMysqlDaemon(fakedb)
+ defer mysqld.Close()
+ mysqld.ExpectedExecuteSuperQueryList = []string{"STOP REPLICA", "START REPLICA"}
+
+ backupResult, err := be.ExecuteBackup(ctx, mysqlctl.BackupParams{
+ Logger: logutil.NewConsoleLogger(),
+ Mysqld: mysqld,
+ Cnf: &mysqlctl.Mycnf{
+ InnodbDataHomeDir: path.Join(backupRoot, "innodb"),
+ InnodbLogGroupHomeDir: path.Join(backupRoot, "log"),
+ DataDir: path.Join(backupRoot, "datadir"),
+ },
+ Stats: backupstats.NewFakeStats(),
+ Concurrency: 1,
+ HookExtraEnv: map[string]string{},
+ TopoServer: ts,
+ Keyspace: keyspace,
+ Shard: shard,
+ MysqlShutdownTimeout: blackbox.MysqlShutdownTimeout,
+ }, bh)
+
+ require.NoError(t, err)
+ require.Equal(t, mysqlctl.BackupUsable, backupResult)
+
+ // Backup is done, let's move on to the restore now
+
+ restoreBh, err := s3backupstorage.NewFakeS3RestoreHandle(ctx, name, logger, fakeStats)
+ require.NoError(t, err)
+ restoreBh.ReadFileReturnF = cfg.readFileReturnFn
+
+ fakedb = fakesqldb.New(t)
+ defer fakedb.Close()
+ mysqld = mysqlctl.NewFakeMysqlDaemon(fakedb)
+ defer mysqld.Close()
+ mysqld.ExpectedExecuteSuperQueryList = []string{"STOP REPLICA", "START REPLICA"}
+
+ restoreParams := mysqlctl.RestoreParams{
+ Cnf: &mysqlctl.Mycnf{
+ InnodbDataHomeDir: path.Join(backupRoot, "innodb"),
+ InnodbLogGroupHomeDir: path.Join(backupRoot, "log"),
+ DataDir: path.Join(backupRoot, "datadir"),
+ BinLogPath: path.Join(backupRoot, "binlog"),
+ RelayLogPath: path.Join(backupRoot, "relaylog"),
+ RelayLogIndexPath: path.Join(backupRoot, "relaylogindex"),
+ RelayLogInfoPath: path.Join(backupRoot, "relayloginfo"),
+ },
+ Logger: logger,
+ Mysqld: mysqld,
+ Concurrency: 1,
+ HookExtraEnv: map[string]string{},
+ DeleteBeforeRestore: false,
+ DbName: "test",
+ Keyspace: "test",
+ Shard: "-",
+ StartTime: time.Now(),
+ RestoreToPos: replication.Position{},
+ RestoreToTimestamp: time.Time{},
+ DryRun: false,
+ Stats: fakeStats,
+ MysqlShutdownTimeout: blackbox.MysqlShutdownTimeout,
+ }
+
+ // Successful restore.
+ bm, err := be.ExecuteRestore(ctx, restoreParams, restoreBh)
+
+ if cfg.expectSuccess {
+ assert.NoError(t, err)
+ assert.NotNil(t, bm)
+ } else {
+ assert.Error(t, err)
+ }
+
+ ss := blackbox.GetStats(fakeStats)
+ require.Equal(t, cfg.expectedStats.DestinationCloseStats, ss.DestinationCloseStats)
+ require.Equal(t, cfg.expectedStats.DestinationOpenStats, ss.DestinationOpenStats)
+ require.Equal(t, cfg.expectedStats.DestinationWriteStats, ss.DestinationWriteStats)
+ require.Equal(t, cfg.expectedStats.SourceCloseStats, ss.SourceCloseStats)
+ require.Equal(t, cfg.expectedStats.SourceOpenStats, ss.SourceOpenStats)
+ require.Equal(t, cfg.expectedStats.SourceReadStats, ss.SourceReadStats)
+}
+
+func TestExecuteRestoreS3FailEachFileOnce(t *testing.T) {
+ runRestoreTest(t, restoreTestConfig{
+ readFileReturnFn: s3backupstorage.FailFirstRead,
+ expectSuccess: true,
+ expectedStats: blackbox.StatSummary{
+ DestinationCloseStats: 8,
+ DestinationOpenStats: 8,
+ DestinationWriteStats: 4, // 4, because on the first attempt, we fail to read before writing to the filesystem
+ SourceCloseStats: 8,
+ SourceOpenStats: 8,
+ SourceReadStats: 8,
+ },
+ })
+}
+
+func TestExecuteRestoreS3FailEachFileTwice(t *testing.T) {
+ runRestoreTest(t, restoreTestConfig{
+ readFileReturnFn: s3backupstorage.FailAllReadExpectManifest,
+ expectSuccess: false,
+
+ // Everything except destination writes must be equal to 5:
+ // +1 for every file on the first attempt (= 4), and +1 for the first file we try for the second time.
+ // Since we fail early as soon as a second-attempt-file fails, we won't see a value above 5.
+ expectedStats: blackbox.StatSummary{
+ DestinationCloseStats: 5,
+ DestinationOpenStats: 5,
+ DestinationWriteStats: 0, // 0, because on the both attempts, we fail to read before writing to the filesystem
+ SourceCloseStats: 5,
+ SourceOpenStats: 5,
+ SourceReadStats: 5,
+ },
+ })
+}
diff --git a/go/test/endtoend/backup/vtbackup/backup_only_test.go b/go/test/endtoend/backup/vtbackup/backup_only_test.go
index 4e018986100..c7a09c70d13 100644
--- a/go/test/endtoend/backup/vtbackup/backup_only_test.go
+++ b/go/test/endtoend/backup/vtbackup/backup_only_test.go
@@ -58,7 +58,6 @@ func TestTabletInitialBackup(t *testing.T) {
// - Take a Second Backup
// - Bring up a second replica, and restore from the second backup
// - list the backups, remove them
- defer cluster.PanicHandler(t)
waitForReplicationToCatchup([]cluster.Vttablet{*replica1, *replica2})
@@ -102,7 +101,6 @@ func TestTabletBackupOnly(t *testing.T) {
// - Take a Second Backup
// - Bring up a second replica, and restore from the second backup
// - list the backups, remove them
- defer cluster.PanicHandler(t)
// Reset the tablet object values in order on init tablet in the next step.
primary.VttabletProcess.ServingStatus = "NOT_SERVING"
diff --git a/go/test/endtoend/backup/vtbackup/main_test.go b/go/test/endtoend/backup/vtbackup/main_test.go
index 367956c9827..6e1840b2979 100644
--- a/go/test/endtoend/backup/vtbackup/main_test.go
+++ b/go/test/endtoend/backup/vtbackup/main_test.go
@@ -52,7 +52,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode, err := func() (int, error) {
diff --git a/go/test/endtoend/backup/vtctlbackup/backup_utils.go b/go/test/endtoend/backup/vtctlbackup/backup_utils.go
index 7c03b776c74..86b2612a044 100644
--- a/go/test/endtoend/backup/vtctlbackup/backup_utils.go
+++ b/go/test/endtoend/backup/vtctlbackup/backup_utils.go
@@ -405,7 +405,6 @@ func TestBackup(t *testing.T, setupType int, streamMode string, stripes int, cDe
}, //
}
- defer cluster.PanicHandler(t)
// setup cluster for the testing
code, err := LaunchCluster(setupType, streamMode, stripes, cDetails)
require.Nilf(t, err, "setup failed with status code %d", code)
@@ -1507,7 +1506,6 @@ func getLastBackup(t *testing.T) string {
func TestBackupEngineSelector(t *testing.T) {
defer setDefaultCommonArgs()
- defer cluster.PanicHandler(t)
// launch the custer with xtrabackup as the default engine
code, err := LaunchCluster(XtraBackup, "xbstream", 0, &CompressionDetails{CompressorEngineName: "pgzip"})
@@ -1548,7 +1546,6 @@ func TestBackupEngineSelector(t *testing.T) {
func TestRestoreAllowedBackupEngines(t *testing.T) {
defer setDefaultCommonArgs()
- defer cluster.PanicHandler(t)
backupMsg := "right after xtrabackup backup"
diff --git a/go/test/endtoend/backup/vtctlbackup/pitr_test_framework.go b/go/test/endtoend/backup/vtctlbackup/pitr_test_framework.go
index 4c84c3e63bc..1b04dbc7aab 100644
--- a/go/test/endtoend/backup/vtctlbackup/pitr_test_framework.go
+++ b/go/test/endtoend/backup/vtctlbackup/pitr_test_framework.go
@@ -95,7 +95,6 @@ func waitForReplica(t *testing.T, replicaIndex int) int {
// in between, it makes writes to the database, and takes notes: what data was available in what backup.
// It then restores each and every one of those backups, in random order, and expects to find the specific data associated with the backup.
func ExecTestIncrementalBackupAndRestoreToPos(t *testing.T, tcase *PITRTestCase) {
- defer cluster.PanicHandler(t)
t.Run(tcase.Name, func(t *testing.T) {
// setup cluster for the testing
@@ -339,7 +338,6 @@ func ExecTestIncrementalBackupAndRestoreToPos(t *testing.T, tcase *PITRTestCase)
// ExecTestIncrementalBackupAndRestoreToPos
func ExecTestIncrementalBackupAndRestoreToTimestamp(t *testing.T, tcase *PITRTestCase) {
- defer cluster.PanicHandler(t)
var lastInsertedRowTimestamp time.Time
insertRowOnPrimary := func(t *testing.T, hint string) {
@@ -605,7 +603,6 @@ func ExecTestIncrementalBackupAndRestoreToTimestamp(t *testing.T, tcase *PITRTes
// Specifically, it's designed to test how incremental backups are taken by interleaved replicas, so that they successfully build on
// one another.
func ExecTestIncrementalBackupOnTwoTablets(t *testing.T, tcase *PITRTestCase) {
- defer cluster.PanicHandler(t)
t.Run(tcase.Name, func(t *testing.T) {
// setup cluster for the testing
diff --git a/go/test/endtoend/cellalias/cell_alias_test.go b/go/test/endtoend/cellalias/cell_alias_test.go
index 07e8d687f4e..6e8f901a245 100644
--- a/go/test/endtoend/cellalias/cell_alias_test.go
+++ b/go/test/endtoend/cellalias/cell_alias_test.go
@@ -90,7 +90,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitcode, err := func() (int, error) {
@@ -232,7 +231,6 @@ func TestMain(m *testing.M) {
}
func TestAlias(t *testing.T) {
- defer cluster.PanicHandler(t)
insertInitialValues(t)
defer deleteInitialValues(t)
@@ -296,7 +294,6 @@ func TestAlias(t *testing.T) {
}
func TestAddAliasWhileVtgateUp(t *testing.T) {
- defer cluster.PanicHandler(t)
insertInitialValues(t)
defer deleteInitialValues(t)
diff --git a/go/test/endtoend/cluster/cluster_process.go b/go/test/endtoend/cluster/cluster_process.go
index bf810a5a319..2ac46a8d145 100644
--- a/go/test/endtoend/cluster/cluster_process.go
+++ b/go/test/endtoend/cluster/cluster_process.go
@@ -104,6 +104,7 @@ type LocalProcessCluster struct {
VtctlclientProcess VtctlClientProcess
VtctldClientProcess VtctldClientProcess
VtctlProcess VtctlProcess
+ VtadminProcess VtAdminProcess
// background executable processes
TopoProcess TopoProcess
@@ -170,6 +171,17 @@ func (shard *Shard) PrimaryTablet() *Vttablet {
return shard.Vttablets[0]
}
+// FindPrimaryTablet finds the primary tablet in the shard.
+func (shard *Shard) FindPrimaryTablet() *Vttablet {
+ for _, vttablet := range shard.Vttablets {
+ tabletType := vttablet.VttabletProcess.GetTabletType()
+ if tabletType == "primary" {
+ return vttablet
+ }
+ }
+ return nil
+}
+
// Rdonly get the last tablet which is rdonly
func (shard *Shard) Rdonly() *Vttablet {
for idx, tablet := range shard.Vttablets {
@@ -1031,7 +1043,6 @@ func (cluster *LocalProcessCluster) StreamTabletHealthUntil(ctx context.Context,
// Teardown brings down the cluster by invoking teardown for individual processes
func (cluster *LocalProcessCluster) Teardown() {
- PanicHandler(nil)
cluster.mx.Lock()
defer cluster.mx.Unlock()
if cluster.teardownCompleted {
@@ -1050,6 +1061,10 @@ func (cluster *LocalProcessCluster) Teardown() {
}
}
+ if err := cluster.VtadminProcess.TearDown(); err != nil {
+ log.Errorf("Error in vtadmin teardown: %v", err)
+ }
+
var mysqlctlProcessList []*exec.Cmd
var mysqlctlTabletUIDs []int
for _, keyspace := range cluster.Keyspaces {
@@ -1285,11 +1300,23 @@ func (cluster *LocalProcessCluster) NewVTOrcProcess(config VTOrcConfiguration) *
VtctlProcess: *base,
LogDir: cluster.TmpDirectory,
Config: config,
- WebPort: cluster.GetAndReservePort(),
Port: cluster.GetAndReservePort(),
}
}
+// NewVTAdminProcess creates a new VTAdminProcess object
+func (cluster *LocalProcessCluster) NewVTAdminProcess() {
+ cluster.VtadminProcess = VtAdminProcess{
+ Binary: "vtadmin",
+ Port: cluster.GetAndReservePort(),
+ LogDir: cluster.TmpDirectory,
+ VtGateGrpcPort: cluster.VtgateProcess.GrpcPort,
+ VtGateWebPort: cluster.VtgateProcess.Port,
+ VtctldWebPort: cluster.VtctldProcess.Port,
+ VtctldGrpcPort: cluster.VtctldProcess.GrpcPort,
+ }
+}
+
// VtprocessInstanceFromVttablet creates a new vttablet object
func (cluster *LocalProcessCluster) VtprocessInstanceFromVttablet(tablet *Vttablet, shardName string, ksName string) *VttabletProcess {
return VttabletProcessInstance(
diff --git a/go/test/endtoend/cluster/cluster_util.go b/go/test/endtoend/cluster/cluster_util.go
index 061e632dde7..cfc2071a746 100644
--- a/go/test/endtoend/cluster/cluster_util.go
+++ b/go/test/endtoend/cluster/cluster_util.go
@@ -126,15 +126,6 @@ func VerifyRowsInTablet(t *testing.T, vttablet *Vttablet, ksName string, expecte
VerifyRowsInTabletForTable(t, vttablet, ksName, expectedRows, "vt_insert_test")
}
-// PanicHandler handles the panic in the testcase.
-func PanicHandler(t testing.TB) {
- err := recover()
- if t == nil {
- return
- }
- require.Nilf(t, err, "panic occured in testcase %v", t.Name())
-}
-
// ListBackups Lists back preset in shard
func (cluster LocalProcessCluster) ListBackups(shardKsName string) ([]string, error) {
output, err := cluster.VtctldClientProcess.ExecuteCommandWithOutput("GetBackups", shardKsName)
diff --git a/go/test/endtoend/cluster/reshard.go b/go/test/endtoend/cluster/reshard.go
index af36d4543c8..3cec8c14e4d 100644
--- a/go/test/endtoend/cluster/reshard.go
+++ b/go/test/endtoend/cluster/reshard.go
@@ -95,7 +95,7 @@ func (rw *ReshardWorkflow) WaitForVreplCatchup(timeToWait time.Duration) {
if !slices.Contains(targetShards, shard.Name) {
continue
}
- vttablet := shard.PrimaryTablet().VttabletProcess
+ vttablet := shard.FindPrimaryTablet().VttabletProcess
vttablet.WaitForVReplicationToCatchup(rw.t, rw.workflowName, fmt.Sprintf("vt_%s", vttablet.Keyspace), "", timeToWait)
}
}
diff --git a/go/test/endtoend/cluster/vtadmin_process.go b/go/test/endtoend/cluster/vtadmin_process.go
new file mode 100644
index 00000000000..f9b7481dda8
--- /dev/null
+++ b/go/test/endtoend/cluster/vtadmin_process.go
@@ -0,0 +1,235 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+package cluster
+
+import (
+ "fmt"
+ "io"
+ "net/http"
+ "os"
+ "os/exec"
+ "path"
+ "strings"
+ "syscall"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+
+ "vitess.io/vitess/go/vt/log"
+)
+
+// VtAdminProcess is a test struct for running
+// vtorc as a separate process for testing
+type VtAdminProcess struct {
+ Binary string
+ Port int
+ LogDir string
+ ExtraArgs []string
+ VtGateGrpcPort int
+ VtGateWebPort int
+ VtctldGrpcPort int
+ VtctldWebPort int
+ proc *exec.Cmd
+ exit chan error
+}
+
+// Setup starts orc process with required arguements
+func (vp *VtAdminProcess) Setup() (err error) {
+ // create the configuration file
+ timeNow := time.Now().UnixNano()
+ err = os.MkdirAll(vp.LogDir, 0755)
+ if err != nil {
+ log.Errorf("cannot create log directory for vtadmin: %v", err)
+ return err
+ }
+ rbacFile, err := vp.CreateAndWriteFile("rbac", `rules:
+ - resource: "*"
+ actions: ["*"]
+ subjects: ["*"]
+ clusters: ["*"]
+`, "yaml")
+ if err != nil {
+ return err
+ }
+
+ discoveryFile, err := vp.CreateAndWriteFile("discovery", fmt.Sprintf(`
+{
+ "vtctlds": [
+ {
+ "host": {
+ "fqdn": "localhost:%d",
+ "hostname": "localhost:%d"
+ }
+ }
+ ],
+ "vtgates": [
+ {
+ "host": {
+ "fqdn": "localhost:%d",
+ "hostname": "localhost:%d"
+ }
+ }
+ ]
+}
+`, vp.VtctldWebPort, vp.VtctldGrpcPort, vp.VtGateWebPort, vp.VtGateGrpcPort), "json")
+ if err != nil {
+ return err
+ }
+
+ vp.proc = exec.Command(
+ vp.Binary,
+ "--addr", vp.Address(),
+ "--http-tablet-url-tmpl", `"http://{{ .Tablet.Hostname }}:15{{ .Tablet.Alias.Uid }}"`,
+ "--tracer", `"opentracing-jaeger"`,
+ "--grpc-tracing",
+ "--http-tracing",
+ "--logtostderr",
+ "--alsologtostderr",
+ "--rbac",
+ "--rbac-config", rbacFile,
+ "--cluster", fmt.Sprintf(`id=local,name=local,discovery=staticfile,discovery-staticfile-path=%s,tablet-fqdn-tmpl=http://{{ .Tablet.Hostname }}:15{{ .Tablet.Alias.Uid }},schema-cache-default-expiration=1m`, discoveryFile),
+ )
+
+ if *isCoverage {
+ vp.proc.Args = append(vp.proc.Args, "--test.coverprofile="+getCoveragePath("vp.out"))
+ }
+
+ vp.proc.Args = append(vp.proc.Args, vp.ExtraArgs...)
+ vp.proc.Args = append(vp.proc.Args, "--alsologtostderr")
+
+ logFile := fmt.Sprintf("vtadmin-stderr-%d.txt", timeNow)
+ errFile, err := os.Create(path.Join(vp.LogDir, logFile))
+ if err != nil {
+ log.Errorf("cannot create error log file for vtadmin: %v", err)
+ return err
+ }
+ vp.proc.Stderr = errFile
+
+ vp.proc.Env = append(vp.proc.Env, os.Environ()...)
+ vp.proc.Env = append(vp.proc.Env, DefaultVttestEnv)
+
+ log.Infof("Running vtadmin with command: %v", strings.Join(vp.proc.Args, " "))
+
+ err = vp.proc.Start()
+ if err != nil {
+ return
+ }
+
+ vp.exit = make(chan error)
+ go func() {
+ if vp.proc != nil {
+ exitErr := vp.proc.Wait()
+ if exitErr != nil {
+ log.Errorf("vtadmin process exited with error: %v", exitErr)
+ data, _ := os.ReadFile(logFile)
+ log.Errorf("vtadmin stderr - %s", string(data))
+ }
+ vp.exit <- exitErr
+ close(vp.exit)
+ }
+ }()
+
+ return nil
+}
+
+// CreateAndWriteFile creates a file and writes the content to it.
+func (vp *VtAdminProcess) CreateAndWriteFile(prefix string, content string, extension string) (string, error) {
+ timeNow := time.Now().UnixNano()
+ file, err := os.Create(path.Join(vp.LogDir, fmt.Sprintf("%s-%d.%s", prefix, timeNow, extension)))
+ if err != nil {
+ log.Errorf("cannot create file for vtadmin: %v", err)
+ return "", err
+ }
+
+ _, err = file.WriteString(content)
+ if err != nil {
+ return "", err
+ }
+ fileName := file.Name()
+ err = file.Close()
+ if err != nil {
+ return "", err
+ }
+ return fileName, nil
+}
+
+// Address returns the address of the running vtadmin service.
+func (vp *VtAdminProcess) Address() string {
+ return fmt.Sprintf("localhost:%d", vp.Port)
+}
+
+// TearDown shuts down the running vtorc service
+func (vp *VtAdminProcess) TearDown() error {
+ if vp.proc == nil || vp.exit == nil {
+ return nil
+ }
+ // Attempt graceful shutdown with SIGTERM first
+ _ = vp.proc.Process.Signal(syscall.SIGTERM)
+
+ select {
+ case <-vp.exit:
+ vp.proc = nil
+ return nil
+
+ case <-time.After(30 * time.Second):
+ _ = vp.proc.Process.Kill()
+ err := <-vp.exit
+ vp.proc = nil
+ return err
+ }
+}
+
+// MakeAPICall makes an API call on the given endpoint of VTOrc
+func (vp *VtAdminProcess) MakeAPICall(endpoint string) (status int, response string, err error) {
+ url := fmt.Sprintf("http://%s/%s", vp.Address(), endpoint)
+ resp, err := http.Get(url)
+ if err != nil {
+ if resp != nil {
+ status = resp.StatusCode
+ }
+ return status, "", err
+ }
+ defer func() {
+ if resp != nil && resp.Body != nil {
+ resp.Body.Close()
+ }
+ }()
+
+ respByte, _ := io.ReadAll(resp.Body)
+ return resp.StatusCode, string(respByte), err
+}
+
+// MakeAPICallRetry is used to make an API call and retries until success
+func (vp *VtAdminProcess) MakeAPICallRetry(t *testing.T, url string) string {
+ t.Helper()
+ timeout := time.After(10 * time.Second)
+ for {
+ select {
+ case <-timeout:
+ require.FailNow(t, "timed out waiting for api to work")
+ return ""
+ default:
+ status, resp, err := vp.MakeAPICall(url)
+ if err == nil && status == 200 {
+ return resp
+ }
+ time.Sleep(100 * time.Millisecond)
+ }
+ }
+}
diff --git a/go/test/endtoend/cluster/vtctldclient_process.go b/go/test/endtoend/cluster/vtctldclient_process.go
index 55f04e021c9..8b401f59070 100644
--- a/go/test/endtoend/cluster/vtctldclient_process.go
+++ b/go/test/endtoend/cluster/vtctldclient_process.go
@@ -41,6 +41,7 @@ type VtctldClientProcess struct {
TempDirectory string
ZoneName string
VtctldClientMajorVersion int
+ Quiet bool
}
// ExecuteCommand executes any vtctldclient command
@@ -72,7 +73,9 @@ func (vtctldclient *VtctldClientProcess) ExecuteCommandWithOutput(args ...string
filterDoubleDashArgs(pArgs, vtctldclient.VtctldClientMajorVersion)...,
)
msg := binlogplayer.LimitString(strings.Join(tmpProcess.Args, " "), 256) // limit log line length
- log.Infof("Executing vtctldclient with command: %v (attempt %d of %d)", msg, i+1, retries)
+ if !vtctldclient.Quiet {
+ log.Infof("Executing vtctldclient with command: %v (attempt %d of %d)", msg, i+1, retries)
+ }
resultByte, err = tmpProcess.CombinedOutput()
resultStr = string(resultByte)
if err == nil || !shouldRetry(resultStr) {
@@ -195,7 +198,9 @@ func (vtctldclient *VtctldClientProcess) PlannedReparentShard(Keyspace string, S
output, err := vtctldclient.ExecuteCommandWithOutput(
"PlannedReparentShard",
fmt.Sprintf("%s/%s", Keyspace, Shard),
- "--new-primary", alias)
+ "--new-primary", alias,
+ "--wait-replicas-timeout", "30s",
+ )
if err != nil {
log.Errorf("error in PlannedReparentShard output %s, err %s", output, err.Error())
}
diff --git a/go/test/endtoend/cluster/vtgate_process.go b/go/test/endtoend/cluster/vtgate_process.go
index d7f5dc3dc01..1290156a1cd 100644
--- a/go/test/endtoend/cluster/vtgate_process.go
+++ b/go/test/endtoend/cluster/vtgate_process.go
@@ -132,6 +132,7 @@ func (vtgate *VtgateProcess) Setup() (err error) {
return err
}
vtgate.proc.Stderr = errFile
+ vtgate.ErrorLog = errFile.Name()
vtgate.proc.Env = append(vtgate.proc.Env, os.Environ()...)
vtgate.proc.Env = append(vtgate.proc.Env, DefaultVttestEnv)
@@ -309,11 +310,11 @@ func VtgateProcessInstance(
}
// GetVars returns map of vars
-func (vtgate *VtgateProcess) GetVars() (map[string]any, error) {
+func (vtgate *VtgateProcess) GetVars() map[string]any {
resultMap := make(map[string]any)
resp, err := http.Get(vtgate.VerifyURL)
if err != nil {
- return nil, fmt.Errorf("error getting response from %s", vtgate.VerifyURL)
+ return nil
}
defer resp.Body.Close()
@@ -321,11 +322,11 @@ func (vtgate *VtgateProcess) GetVars() (map[string]any, error) {
respByte, _ := io.ReadAll(resp.Body)
err := json.Unmarshal(respByte, &resultMap)
if err != nil {
- return nil, fmt.Errorf("not able to parse response body")
+ return nil
}
- return resultMap, nil
+ return resultMap
}
- return nil, fmt.Errorf("unsuccessful response")
+ return nil
}
// ReadVSchema reads the vschema from the vtgate endpoint for it and returns
diff --git a/go/test/endtoend/cluster/vtorc_process.go b/go/test/endtoend/cluster/vtorc_process.go
index 31cf03606e5..af101a8bebd 100644
--- a/go/test/endtoend/cluster/vtorc_process.go
+++ b/go/test/endtoend/cluster/vtorc_process.go
@@ -43,24 +43,28 @@ type VTOrcProcess struct {
ExtraArgs []string
ConfigPath string
Config VTOrcConfiguration
- WebPort int
+ NoOverride bool
proc *exec.Cmd
exit chan error
}
type VTOrcConfiguration struct {
- Debug bool
- ListenAddress string
- MySQLTopologyUser string
- MySQLTopologyPassword string
- MySQLReplicaUser string
- MySQLReplicaPassword string
- RecoveryPeriodBlockSeconds int
- TopologyRefreshSeconds int `json:",omitempty"`
- PreventCrossDataCenterPrimaryFailover bool `json:",omitempty"`
- LockShardTimeoutSeconds int `json:",omitempty"`
- ReplicationLagQuery string `json:",omitempty"`
- FailPrimaryPromotionOnLagMinutes int `json:",omitempty"`
+ InstancePollTime string `json:"instance-poll-time,omitempty"`
+ SnapshotTopologyInterval string `json:"snapshot-topology-interval,omitempty"`
+ PreventCrossCellFailover bool `json:"prevent-cross-cell-failover,omitempty"`
+ ReasonableReplicationLag string `json:"reasonable-replication-lag,omitempty"`
+ AuditToBackend bool `json:"audit-to-backend,omitempty"`
+ AuditToSyslog bool `json:"audit-to-syslog,omitempty"`
+ AuditPurgeDuration string `json:"audit-purge-duration,omitempty"`
+ WaitReplicasTimeout string `json:"wait-replicas-timeout,omitempty"`
+ TolerableReplicationLag string `json:"tolerable-replication-lag,omitempty"`
+ TopoInformationRefreshDuration string `json:"topo-information-refresh-duration,omitempty"`
+ RecoveryPollDuration string `json:"recovery-poll-duration,omitempty"`
+ AllowEmergencyReparent string `json:"allow-emergency-reparent,omitempty"`
+ ChangeTabletsWithErrantGtidToDrained bool `json:"change-tablets-with-errant-gtid-to-drained,omitempty"`
+ LockShardTimeoutSeconds int `json:",omitempty"`
+ ReplicationLagQuery string `json:",omitempty"`
+ FailPrimaryPromotionOnLagMinutes int `json:",omitempty"`
}
// ToJSONString will marshal this configuration as JSON
@@ -69,16 +73,12 @@ func (config *VTOrcConfiguration) ToJSONString() string {
return string(b)
}
-func (config *VTOrcConfiguration) AddDefaults(webPort int) {
- config.Debug = true
- config.MySQLTopologyUser = "orc_client_user"
- config.MySQLTopologyPassword = "orc_client_user_password"
- config.MySQLReplicaUser = "vt_repl"
- config.MySQLReplicaPassword = ""
- if config.RecoveryPeriodBlockSeconds == 0 {
- config.RecoveryPeriodBlockSeconds = 1
- }
- config.ListenAddress = fmt.Sprintf(":%d", webPort)
+func (config *VTOrcConfiguration) addValuesToCheckOverride() {
+ config.InstancePollTime = "10h"
+}
+
+func (orc *VTOrcProcess) RewriteConfiguration() error {
+ return os.WriteFile(orc.ConfigPath, []byte(orc.Config.ToJSONString()), 0644)
}
// Setup starts orc process with required arguements
@@ -99,7 +99,9 @@ func (orc *VTOrcProcess) Setup() (err error) {
orc.ConfigPath = configFile.Name()
// Add the default configurations and print them out
- orc.Config.AddDefaults(orc.WebPort)
+ if !orc.NoOverride {
+ orc.Config.addValuesToCheckOverride()
+ }
log.Errorf("configuration - %v", orc.Config.ToJSONString())
_, err = configFile.WriteString(orc.Config.ToJSONString())
if err != nil {
@@ -119,15 +121,18 @@ func (orc *VTOrcProcess) Setup() (err error) {
"--topo_implementation", orc.TopoImplementation,
"--topo_global_server_address", orc.TopoGlobalAddress,
"--topo_global_root", orc.TopoGlobalRoot,
- "--config", orc.ConfigPath,
+ "--config-file", orc.ConfigPath,
"--port", fmt.Sprintf("%d", orc.Port),
- // This parameter is overriden from the config file, added here to just verify that we indeed use the config file paramter over the flag
- "--recovery-period-block-duration", "10h",
- "--instance-poll-time", "1s",
- // Faster topo information refresh speeds up the tests. This doesn't add any significant load either
- "--topo-information-refresh-duration", "3s",
"--bind-address", "127.0.0.1",
)
+ if !orc.NoOverride {
+ orc.proc.Args = append(orc.proc.Args,
+ // This parameter is overriden from the config file. This verifies that we indeed use the flag value over the config file.
+ "--instance-poll-time", "1s",
+ // Faster topo information refresh speeds up the tests. This doesn't add any significant load either.
+ "--topo-information-refresh-duration", "3s",
+ )
+ }
if *isCoverage {
orc.proc.Args = append(orc.proc.Args, "--test.coverprofile="+getCoveragePath("orc.out"))
diff --git a/go/test/endtoend/cluster/vttablet_process.go b/go/test/endtoend/cluster/vttablet_process.go
index 6c7a85ec533..6bc6e6b8d7f 100644
--- a/go/test/endtoend/cluster/vttablet_process.go
+++ b/go/test/endtoend/cluster/vttablet_process.go
@@ -459,6 +459,16 @@ func (vttablet *VttabletProcess) QueryTablet(query string, keyspace string, useD
return executeQuery(conn, query)
}
+// MultiQueryTablet lets you execute a query in this tablet and get the result
+func (vttablet *VttabletProcess) MultiQueryTablet(sql string, keyspace string, useDb bool) error {
+ conn, err := vttablet.TabletConn(keyspace, useDb)
+ if err != nil {
+ return err
+ }
+ defer conn.Close()
+ return executeMultiQuery(conn, sql)
+}
+
// SemiSyncExtensionLoaded returns what type of semi-sync extension is loaded
func (vttablet *VttabletProcess) SemiSyncExtensionLoaded() (mysql.SemiSyncType, error) {
conn, err := vttablet.TabletConn("", false)
diff --git a/go/test/endtoend/clustertest/add_keyspace_test.go b/go/test/endtoend/clustertest/add_keyspace_test.go
index edee87d035e..b8422b52eb3 100644
--- a/go/test/endtoend/clustertest/add_keyspace_test.go
+++ b/go/test/endtoend/clustertest/add_keyspace_test.go
@@ -61,7 +61,6 @@ primary key (id)
)
func TestAddKeyspace(t *testing.T) {
- defer cluster.PanicHandler(t)
if err := clusterInstance.StartKeyspace(*testKeyspace, []string{"-80", "80-"}, 0, false); err != nil {
log.Errorf("failed to AddKeyspace %v: %v", *testKeyspace, err)
t.Fatal(err)
diff --git a/go/test/endtoend/clustertest/etcd_test.go b/go/test/endtoend/clustertest/etcd_test.go
index 5239d960c47..f47a002a3cf 100644
--- a/go/test/endtoend/clustertest/etcd_test.go
+++ b/go/test/endtoend/clustertest/etcd_test.go
@@ -24,12 +24,9 @@ import (
"github.com/stretchr/testify/require"
clientv3 "go.etcd.io/etcd/client/v3"
-
- "vitess.io/vitess/go/test/endtoend/cluster"
)
func TestEtcdServer(t *testing.T) {
- defer cluster.PanicHandler(t)
// Confirm the basic etcd cluster health.
etcdHealthURL := fmt.Sprintf("http://%s:%d/health", clusterInstance.Hostname, clusterInstance.TopoPort)
diff --git a/go/test/endtoend/clustertest/main_test.go b/go/test/endtoend/clustertest/main_test.go
index 35da40a3edb..3fc2524208b 100644
--- a/go/test/endtoend/clustertest/main_test.go
+++ b/go/test/endtoend/clustertest/main_test.go
@@ -60,7 +60,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/clustertest/vtctld_test.go b/go/test/endtoend/clustertest/vtctld_test.go
index c61f7820bb7..18d06cf3299 100644
--- a/go/test/endtoend/clustertest/vtctld_test.go
+++ b/go/test/endtoend/clustertest/vtctld_test.go
@@ -30,8 +30,6 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
-
- "vitess.io/vitess/go/test/endtoend/cluster"
)
var (
@@ -44,7 +42,6 @@ var (
)
func TestVtctldProcess(t *testing.T) {
- defer cluster.PanicHandler(t)
url := fmt.Sprintf("http://%s:%d/api/keyspaces/", clusterInstance.Hostname, clusterInstance.VtctldHTTPPort)
testURL(t, url, "keyspace url")
diff --git a/go/test/endtoend/clustertest/vtgate_test.go b/go/test/endtoend/clustertest/vtgate_test.go
index 2f72682a391..264b292f482 100644
--- a/go/test/endtoend/clustertest/vtgate_test.go
+++ b/go/test/endtoend/clustertest/vtgate_test.go
@@ -32,11 +32,9 @@ import (
"github.com/stretchr/testify/require"
"vitess.io/vitess/go/mysql"
- "vitess.io/vitess/go/test/endtoend/cluster"
)
func TestVtgateProcess(t *testing.T) {
- defer cluster.PanicHandler(t)
verifyVtgateVariables(t, clusterInstance.VtgateProcess.VerifyURL)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
diff --git a/go/test/endtoend/clustertest/vttablet_test.go b/go/test/endtoend/clustertest/vttablet_test.go
index 5e7d5e27182..86fc2a6983c 100644
--- a/go/test/endtoend/clustertest/vttablet_test.go
+++ b/go/test/endtoend/clustertest/vttablet_test.go
@@ -25,12 +25,9 @@ import (
"testing"
"github.com/stretchr/testify/require"
-
- "vitess.io/vitess/go/test/endtoend/cluster"
)
func TestVttabletProcess(t *testing.T) {
- defer cluster.PanicHandler(t)
firstTabletPort := clusterInstance.Keyspaces[0].Shards[0].Vttablets[0].HTTPPort
testURL(t, fmt.Sprintf("http://localhost:%d/debug/vars/", firstTabletPort), "tablet debug var url")
resp, err := http.Get(fmt.Sprintf("http://localhost:%d/debug/vars", firstTabletPort))
@@ -48,7 +45,6 @@ func TestVttabletProcess(t *testing.T) {
}
func TestDeleteTablet(t *testing.T) {
- defer cluster.PanicHandler(t)
primary := clusterInstance.Keyspaces[0].Shards[0].PrimaryTablet()
require.NotNil(t, primary)
_, err := clusterInstance.VtctldClientProcess.ExecuteCommandWithOutput("DeleteTablets", "--allow-primary", primary.Alias)
diff --git a/go/test/endtoend/encryption/encryptedreplication/encrypted_replication_test.go b/go/test/endtoend/encryption/encryptedreplication/encrypted_replication_test.go
index 7dea6cf525f..460ae310d7f 100644
--- a/go/test/endtoend/encryption/encryptedreplication/encrypted_replication_test.go
+++ b/go/test/endtoend/encryption/encryptedreplication/encrypted_replication_test.go
@@ -42,7 +42,6 @@ var (
// This test makes sure that we can use SSL replication with Vitess
func TestSecure(t *testing.T) {
- defer cluster.PanicHandler(t)
testReplicationBase(t, true)
testReplicationBase(t, false)
}
diff --git a/go/test/endtoend/encryption/encryptedtransport/encrypted_transport_test.go b/go/test/endtoend/encryption/encryptedtransport/encrypted_transport_test.go
index 1363e07b2cd..86c847125a7 100644
--- a/go/test/endtoend/encryption/encryptedtransport/encrypted_transport_test.go
+++ b/go/test/endtoend/encryption/encryptedtransport/encrypted_transport_test.go
@@ -102,7 +102,6 @@ var (
)
func TestSecureTransport(t *testing.T) {
- defer cluster.PanicHandler(t)
flag.Parse()
// initialize cluster
diff --git a/go/test/endtoend/keyspace/keyspace_test.go b/go/test/endtoend/keyspace/keyspace_test.go
index 2a665c66214..f65301b9bb4 100644
--- a/go/test/endtoend/keyspace/keyspace_test.go
+++ b/go/test/endtoend/keyspace/keyspace_test.go
@@ -81,7 +81,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -167,7 +166,6 @@ func checkDurabilityPolicy(t *testing.T, durabilityPolicy string) {
}
func TestGetSrvKeyspaceNames(t *testing.T) {
- defer cluster.PanicHandler(t)
data, err := clusterForKSTest.VtctldClientProcess.ExecuteCommandWithOutput("GetSrvKeyspaceNames", cell)
require.Nil(t, err)
@@ -180,7 +178,6 @@ func TestGetSrvKeyspaceNames(t *testing.T) {
}
func TestGetSrvKeyspacePartitions(t *testing.T) {
- defer cluster.PanicHandler(t)
shardedSrvKeyspace := getSrvKeyspace(t, cell, keyspaceShardedName)
otherShardRefFound := false
for _, partition := range shardedSrvKeyspace.Partitions {
@@ -209,20 +206,17 @@ func TestGetSrvKeyspacePartitions(t *testing.T) {
}
func TestShardNames(t *testing.T) {
- defer cluster.PanicHandler(t)
output, err := clusterForKSTest.VtctldClientProcess.GetSrvKeyspaces(keyspaceShardedName, cell)
require.NoError(t, err)
require.NotNil(t, output[cell], "no srvkeyspace for cell %s", cell)
}
func TestGetKeyspace(t *testing.T) {
- defer cluster.PanicHandler(t)
_, err := clusterForKSTest.VtctldClientProcess.GetKeyspace(keyspaceUnshardedName)
require.Nil(t, err)
}
func TestDeleteKeyspace(t *testing.T) {
- defer cluster.PanicHandler(t)
_ = clusterForKSTest.VtctldClientProcess.CreateKeyspace("test_delete_keyspace", sidecar.DefaultName)
_ = clusterForKSTest.VtctldClientProcess.ExecuteCommand("CreateShard", "test_delete_keyspace/0")
_ = clusterForKSTest.InitTablet(&cluster.Vttablet{
@@ -353,7 +347,6 @@ func TestDeleteKeyspace(t *testing.T) {
} */
func TestShardCountForAllKeyspaces(t *testing.T) {
- defer cluster.PanicHandler(t)
testShardCountForKeyspace(t, keyspaceUnshardedName, 1)
testShardCountForKeyspace(t, keyspaceShardedName, 2)
}
@@ -370,7 +363,6 @@ func testShardCountForKeyspace(t *testing.T, keyspace string, count int) {
}
func TestShardNameForAllKeyspaces(t *testing.T) {
- defer cluster.PanicHandler(t)
testShardNameForKeyspace(t, keyspaceUnshardedName, []string{"test_ks_unsharded"})
testShardNameForKeyspace(t, keyspaceShardedName, []string{"-80", "80-"})
}
@@ -389,7 +381,6 @@ func testShardNameForKeyspace(t *testing.T, keyspace string, shardNames []string
}
func TestKeyspaceToShardName(t *testing.T) {
- defer cluster.PanicHandler(t)
var id []byte
srvKeyspace := getSrvKeyspace(t, cell, keyspaceShardedName)
diff --git a/go/test/endtoend/messaging/main_test.go b/go/test/endtoend/messaging/main_test.go
index 49477ebe631..c654869316b 100644
--- a/go/test/endtoend/messaging/main_test.go
+++ b/go/test/endtoend/messaging/main_test.go
@@ -104,7 +104,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitcode, err := func() (int, error) {
diff --git a/go/test/endtoend/messaging/message_test.go b/go/test/endtoend/messaging/message_test.go
index 7e1190c16bb..e91a8dcc335 100644
--- a/go/test/endtoend/messaging/message_test.go
+++ b/go/test/endtoend/messaging/message_test.go
@@ -375,7 +375,6 @@ func TestUnsharded(t *testing.T) {
// TestReparenting checks the client connection count after reparenting.
func TestReparenting(t *testing.T) {
- defer cluster.PanicHandler(t)
name := "sharded_message"
ctx := context.Background()
@@ -435,7 +434,6 @@ func TestReparenting(t *testing.T) {
// TestConnection validate the connection count and message streaming.
func TestConnection(t *testing.T) {
- defer cluster.PanicHandler(t)
name := "sharded_message"
@@ -494,7 +492,6 @@ func TestConnection(t *testing.T) {
}
func testMessaging(t *testing.T, name, ks string) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
stream, err := VtgateGrpcConn(ctx, clusterInstance)
require.Nil(t, err)
diff --git a/go/test/endtoend/mysqlctl/mysqlctl_test.go b/go/test/endtoend/mysqlctl/mysqlctl_test.go
index f93724fa4a8..070114da420 100644
--- a/go/test/endtoend/mysqlctl/mysqlctl_test.go
+++ b/go/test/endtoend/mysqlctl/mysqlctl_test.go
@@ -40,7 +40,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -139,7 +138,6 @@ func initCluster(shardNames []string, totalTabletsRequired int) {
}
func TestRestart(t *testing.T) {
- defer cluster.PanicHandler(t)
err := primaryTablet.MysqlctlProcess.Stop()
require.NoError(t, err)
primaryTablet.MysqlctlProcess.CleanupFiles(primaryTablet.TabletUID)
@@ -148,7 +146,6 @@ func TestRestart(t *testing.T) {
}
func TestAutoDetect(t *testing.T) {
- defer cluster.PanicHandler(t)
err := clusterInstance.Keyspaces[0].Shards[0].Vttablets[0].VttabletProcess.Setup()
require.NoError(t, err)
diff --git a/go/test/endtoend/mysqlctld/mysqlctld_test.go b/go/test/endtoend/mysqlctld/mysqlctld_test.go
index beb155830e2..432beb0c6d5 100644
--- a/go/test/endtoend/mysqlctld/mysqlctld_test.go
+++ b/go/test/endtoend/mysqlctld/mysqlctld_test.go
@@ -44,7 +44,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -141,7 +140,6 @@ func initCluster(shardNames []string, totalTabletsRequired int) error {
}
func TestRestart(t *testing.T) {
- defer cluster.PanicHandler(t)
err := primaryTablet.MysqlctldProcess.Stop()
require.Nil(t, err)
require.Truef(t, primaryTablet.MysqlctldProcess.WaitForMysqlCtldShutdown(), "Mysqlctld has not stopped...")
@@ -151,7 +149,6 @@ func TestRestart(t *testing.T) {
}
func TestAutoDetect(t *testing.T) {
- defer cluster.PanicHandler(t)
err := clusterInstance.Keyspaces[0].Shards[0].Vttablets[0].VttabletProcess.Setup()
require.Nil(t, err, "error should be nil")
diff --git a/go/test/endtoend/mysqlserver/main_test.go b/go/test/endtoend/mysqlserver/main_test.go
index 18b169e33d7..20da69e18e8 100644
--- a/go/test/endtoend/mysqlserver/main_test.go
+++ b/go/test/endtoend/mysqlserver/main_test.go
@@ -61,7 +61,6 @@ END;
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
// setting grpc max size
diff --git a/go/test/endtoend/mysqlserver/mysql_server_test.go b/go/test/endtoend/mysqlserver/mysql_server_test.go
index 6b691582c66..ee6e973593b 100644
--- a/go/test/endtoend/mysqlserver/mysql_server_test.go
+++ b/go/test/endtoend/mysqlserver/mysql_server_test.go
@@ -35,14 +35,12 @@ import (
"vitess.io/vitess/go/mysql/sqlerror"
"vitess.io/vitess/go/mysql"
- "vitess.io/vitess/go/test/endtoend/cluster"
_ "github.com/go-sql-driver/mysql"
)
// TestMultiStmt checks that multiStatements=True and multiStatements=False work properly.
func TestMultiStatement(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
// connect database with multiStatements=True
@@ -70,7 +68,6 @@ func TestMultiStatement(t *testing.T) {
// TestLargeComment add large comment in insert stmt and validate the insert process.
func TestLargeComment(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
@@ -89,7 +86,6 @@ func TestLargeComment(t *testing.T) {
// TestInsertLargerThenGrpcLimit insert blob larger then grpc limit and verify the error.
func TestInsertLargerThenGrpcLimit(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
@@ -109,7 +105,6 @@ func TestInsertLargerThenGrpcLimit(t *testing.T) {
// TestTimeout executes sleep(5) with query_timeout of 1 second, and verifies the error.
func TestTimeout(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
@@ -125,7 +120,6 @@ func TestTimeout(t *testing.T) {
// TestInvalidField tries to fetch invalid column and verifies the error.
func TestInvalidField(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
@@ -141,7 +135,6 @@ func TestInvalidField(t *testing.T) {
// TestWarnings validates the behaviour of SHOW WARNINGS.
func TestWarnings(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
@@ -183,7 +176,6 @@ func TestWarnings(t *testing.T) {
// TestSelectWithUnauthorizedUser verifies that an unauthorized user
// is not able to read from the table.
func TestSelectWithUnauthorizedUser(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
tmpVtParam := vtParams
@@ -202,7 +194,6 @@ func TestSelectWithUnauthorizedUser(t *testing.T) {
// TestPartitionedTable validates that partitioned tables are recognized by schema engine
func TestPartitionedTable(t *testing.T) {
- defer cluster.PanicHandler(t)
tablet := clusterInstance.Keyspaces[0].Shards[0].PrimaryTablet()
diff --git a/go/test/endtoend/onlineddl/flow/onlineddl_flow_test.go b/go/test/endtoend/onlineddl/flow/onlineddl_flow_test.go
index c442c042f8a..ee8141860f4 100644
--- a/go/test/endtoend/onlineddl/flow/onlineddl_flow_test.go
+++ b/go/test/endtoend/onlineddl/flow/onlineddl_flow_test.go
@@ -63,7 +63,6 @@ import (
"vitess.io/vitess/go/test/endtoend/throttler"
"vitess.io/vitess/go/vt/log"
"vitess.io/vitess/go/vt/schema"
- vttablet "vitess.io/vitess/go/vt/vttablet/common"
throttlebase "vitess.io/vitess/go/vt/vttablet/tabletserver/throttle/base"
"vitess.io/vitess/go/vt/vttablet/tabletserver/throttle/throttlerapp"
)
@@ -121,7 +120,6 @@ const (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitcode, err := func() (int, error) {
@@ -145,9 +143,6 @@ func TestMain(m *testing.M) {
"--heartbeat_on_demand_duration", "5s",
"--migration_check_interval", "2s",
"--watch_replication_stream",
- // Test VPlayer batching mode.
- fmt.Sprintf("--vreplication_experimental_flags=%d",
- vttablet.VReplicationExperimentalFlagAllowNoBlobBinlogRowImage|vttablet.VReplicationExperimentalFlagOptimizeInserts|vttablet.VReplicationExperimentalFlagVPlayerBatching),
}
clusterInstance.VtGateExtraArgs = []string{
"--ddl_strategy", "online",
@@ -201,7 +196,6 @@ func TestMain(m *testing.M) {
}
func TestOnlineDDLFlow(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
require.NotNil(t, clusterInstance)
diff --git a/go/test/endtoend/onlineddl/revert/onlineddl_revert_test.go b/go/test/endtoend/onlineddl/revert/onlineddl_revert_test.go
index af88806fb26..a13077ef87b 100644
--- a/go/test/endtoend/onlineddl/revert/onlineddl_revert_test.go
+++ b/go/test/endtoend/onlineddl/revert/onlineddl_revert_test.go
@@ -137,7 +137,6 @@ type revertibleTestCase struct {
}
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitcode, err := func() (int, error) {
@@ -204,7 +203,6 @@ func TestMain(m *testing.M) {
}
func TestRevertSchemaChanges(t *testing.T) {
- defer cluster.PanicHandler(t)
shards = clusterInstance.Keyspaces[0].Shards
require.Equal(t, 1, len(shards))
diff --git a/go/test/endtoend/onlineddl/scheduler/onlineddl_scheduler_test.go b/go/test/endtoend/onlineddl/scheduler/onlineddl_scheduler_test.go
index b7e18e9af7c..5f6423b2556 100644
--- a/go/test/endtoend/onlineddl/scheduler/onlineddl_scheduler_test.go
+++ b/go/test/endtoend/onlineddl/scheduler/onlineddl_scheduler_test.go
@@ -239,7 +239,6 @@ func waitForMessage(t *testing.T, uuid string, messageSubstring string) {
}
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitcode, err := func() (int, error) {
@@ -321,7 +320,6 @@ func TestSchedulerSchemaChanges(t *testing.T) {
}
func testScheduler(t *testing.T) {
- defer cluster.PanicHandler(t)
shards = clusterInstance.Keyspaces[0].Shards
require.Equal(t, 1, len(shards))
@@ -484,7 +482,7 @@ func testScheduler(t *testing.T) {
testTableSequentialTimes(t, t1uuid, t2uuid)
})
t.Run("Postpone launch CREATE", func(t *testing.T) {
- t1uuid = testOnlineDDLStatement(t, createParams(createT1IfNotExistsStatement, ddlStrategy+" --postpone-launch", "vtgate", "", "", true)) // skip wait
+ t1uuid = testOnlineDDLStatement(t, createParams(createT1IfNotExistsStatement, ddlStrategy+" --postpone-launch --cut-over-threshold=14s", "vtgate", "", "", true)) // skip wait
time.Sleep(2 * time.Second)
rs := onlineddl.ReadMigrations(t, &vtParams, t1uuid)
require.NotNil(t, rs)
@@ -501,6 +499,10 @@ func testScheduler(t *testing.T) {
for _, row := range rs.Named().Rows {
postponeLaunch := row.AsInt64("postpone_launch", 0)
assert.Equal(t, int64(0), postponeLaunch)
+
+ cutOverThresholdSeconds := row.AsInt64("cutover_threshold_seconds", 0)
+ // Threshold supplied in DDL strategy
+ assert.EqualValues(t, 14, cutOverThresholdSeconds)
}
status := onlineddl.WaitForMigrationStatus(t, &vtParams, shards, t1uuid, normalWaitTime, schema.OnlineDDLStatusComplete, schema.OnlineDDLStatusFailed)
fmt.Printf("# Migration status (for debug purposes): <%s>\n", status)
@@ -562,6 +564,16 @@ func testScheduler(t *testing.T) {
status := onlineddl.WaitForMigrationStatus(t, &vtParams, shards, t1uuid, normalWaitTime, schema.OnlineDDLStatusRunning)
fmt.Printf("# Migration status (for debug purposes): <%s>\n", status)
})
+
+ t.Run("wait for ready_to_complete", func(t *testing.T) {
+ waitForReadyToComplete(t, t1uuid, true)
+ rs := onlineddl.ReadMigrations(t, &vtParams, t1uuid)
+ require.NotNil(t, rs)
+ for _, row := range rs.Named().Rows {
+ assert.True(t, row["shadow_analyzed_timestamp"].IsNull())
+ }
+ })
+
t.Run("check postpone_completion", func(t *testing.T) {
rs := onlineddl.ReadMigrations(t, &vtParams, t1uuid)
require.NotNil(t, rs)
@@ -570,6 +582,9 @@ func testScheduler(t *testing.T) {
assert.Equal(t, int64(1), postponeCompletion)
}
})
+ t.Run("set cut-over threshold", func(t *testing.T) {
+ onlineddl.CheckSetMigrationCutOverThreshold(t, &vtParams, shards, t1uuid, 17700*time.Millisecond, "")
+ })
t.Run("complete", func(t *testing.T) {
onlineddl.CheckCompleteMigration(t, &vtParams, shards, t1uuid, true)
status := onlineddl.WaitForMigrationStatus(t, &vtParams, shards, t1uuid, normalWaitTime, schema.OnlineDDLStatusComplete, schema.OnlineDDLStatusFailed)
@@ -582,6 +597,12 @@ func testScheduler(t *testing.T) {
for _, row := range rs.Named().Rows {
postponeCompletion := row.AsInt64("postpone_completion", 0)
assert.Equal(t, int64(0), postponeCompletion)
+
+ cutOverThresholdSeconds := row.AsInt64("cutover_threshold_seconds", 0)
+ // Expect 17800*time.Millisecond to be truncated to 17 seconds
+ assert.EqualValues(t, 17, cutOverThresholdSeconds)
+
+ assert.False(t, row["shadow_analyzed_timestamp"].IsNull())
}
})
})
@@ -1051,6 +1072,10 @@ func testScheduler(t *testing.T) {
for _, row := range rs.Named().Rows {
retries := row.AsInt64("retries", 0)
assert.Greater(t, retries, int64(0))
+
+ cutOverThresholdSeconds := row.AsInt64("cutover_threshold_seconds", 0)
+ // No explicit cut-over threshold given. Expect the default 10s
+ assert.EqualValues(t, 10, cutOverThresholdSeconds)
}
})
})
@@ -1077,6 +1102,13 @@ func testScheduler(t *testing.T) {
executedUUID := testOnlineDDLStatement(t, createParams(trivialAlterT1Statement, ddlStrategy, "vtctl", "", "", true)) // skip wait
require.Equal(t, uuid, executedUUID)
+ t.Run("set low cut-over threshold", func(t *testing.T) {
+ onlineddl.CheckSetMigrationCutOverThreshold(t, &vtParams, shards, uuid, 2*time.Second, "cut-over min value")
+ })
+ t.Run("set high cut-over threshold", func(t *testing.T) {
+ onlineddl.CheckSetMigrationCutOverThreshold(t, &vtParams, shards, uuid, 2000*time.Second, "cut-over max value")
+ })
+
// expect it to complete
status := onlineddl.WaitForMigrationStatus(t, &vtParams, shards, uuid, normalWaitTime, schema.OnlineDDLStatusComplete, schema.OnlineDDLStatusFailed)
fmt.Printf("# Migration status (for debug purposes): <%s>\n", status)
@@ -1087,6 +1119,10 @@ func testScheduler(t *testing.T) {
for _, row := range rs.Named().Rows {
retries := row.AsInt64("retries", 0)
assert.Greater(t, retries, int64(0))
+
+ cutOverThresholdSeconds := row.AsInt64("cutover_threshold_seconds", 0)
+ // Teh default remains unchanged.
+ assert.EqualValues(t, 10, cutOverThresholdSeconds)
}
})
})
@@ -1555,7 +1591,6 @@ func testScheduler(t *testing.T) {
}
func testSingleton(t *testing.T) {
- defer cluster.PanicHandler(t)
shards = clusterInstance.Keyspaces[0].Shards
require.Equal(t, 1, len(shards))
@@ -1674,7 +1709,7 @@ DROP TABLE IF EXISTS stress_test
t.Run("terminate throttled migration", func(t *testing.T) {
onlineddl.CheckMigrationStatus(t, &vtParams, shards, openEndedUUID, schema.OnlineDDLStatusRunning)
onlineddl.CheckCancelMigration(t, &vtParams, shards, openEndedUUID, true)
- status := onlineddl.WaitForMigrationStatus(t, &vtParams, shards, openEndedUUID, 20*time.Second, schema.OnlineDDLStatusFailed, schema.OnlineDDLStatusCancelled)
+ status := onlineddl.WaitForMigrationStatus(t, &vtParams, shards, openEndedUUID, normalWaitTime, schema.OnlineDDLStatusFailed, schema.OnlineDDLStatusCancelled)
fmt.Printf("# Migration status (for debug purposes): <%s>\n", status)
onlineddl.CheckMigrationStatus(t, &vtParams, shards, openEndedUUID, schema.OnlineDDLStatusCancelled)
})
@@ -1707,6 +1742,21 @@ DROP TABLE IF EXISTS stress_test
checkTable(t, tableName, true)
})
+ // singleton-table
+ t.Run("fail singleton-table same table single submission", func(t *testing.T) {
+ _ = testOnlineDDLStatement(t, createParams(multiAlterTableThrottlingStatement, "vitess --singleton-table", "vtctl", "", "hint_col", "singleton-table migration rejected", false))
+ // The first of those migrations will make it, the other two will be rejected
+ onlineddl.CheckCancelAllMigrations(t, &vtParams, 1)
+ })
+ t.Run("fail singleton-table same table multi submission", func(t *testing.T) {
+ uuid := testOnlineDDLStatement(t, createParams(alterTableThrottlingStatement, "vitess --singleton-table --postpone-completion", "vtctl", "", "hint_col", "", false))
+ uuids = append(uuids, uuid)
+ onlineddl.WaitForMigrationStatus(t, &vtParams, shards, uuid, normalWaitTime, schema.OnlineDDLStatusRunning)
+
+ _ = testOnlineDDLStatement(t, createParams(alterTableThrottlingStatement, "vitess --singleton-table --postpone-completion", "vtctl", "", "hint_col", "singleton-table migration rejected", false))
+ onlineddl.CheckCancelAllMigrations(t, &vtParams, 1)
+ })
+
var throttledUUIDs []string
// singleton-context
t.Run("postponed migrations, singleton-context", func(t *testing.T) {
@@ -1763,35 +1813,34 @@ DROP TABLE IF EXISTS stress_test
uuids = append(uuids, uuid)
_ = testOnlineDDLStatement(t, createParams(dropNonexistentTableStatement, "vitess --singleton", "vtgate", "", "hint_col", "rejected", true))
onlineddl.CheckCompleteAllMigrations(t, &vtParams, len(shards))
- status := onlineddl.WaitForMigrationStatus(t, &vtParams, shards, uuid, 20*time.Second, schema.OnlineDDLStatusComplete, schema.OnlineDDLStatusFailed)
+ status := onlineddl.WaitForMigrationStatus(t, &vtParams, shards, uuid, normalWaitTime, schema.OnlineDDLStatusComplete, schema.OnlineDDLStatusFailed)
fmt.Printf("# Migration status (for debug purposes): <%s>\n", status)
onlineddl.CheckMigrationStatus(t, &vtParams, shards, uuid, schema.OnlineDDLStatusComplete)
})
t.Run("fail concurrent singleton-context with revert", func(t *testing.T) {
revertUUID := testRevertMigration(t, createRevertParams(uuids[len(uuids)-1], "vitess --allow-concurrent --postpone-completion --singleton-context", "vtctl", "rev:ctx", "", false))
- onlineddl.WaitForMigrationStatus(t, &vtParams, shards, revertUUID, 20*time.Second, schema.OnlineDDLStatusRunning)
+ onlineddl.WaitForMigrationStatus(t, &vtParams, shards, revertUUID, normalWaitTime, schema.OnlineDDLStatusRunning)
// revert is running
_ = testOnlineDDLStatement(t, createParams(dropNonexistentTableStatement, "vitess --allow-concurrent --singleton-context", "vtctl", "migrate:ctx", "", "rejected", true))
onlineddl.CheckCancelMigration(t, &vtParams, shards, revertUUID, true)
- status := onlineddl.WaitForMigrationStatus(t, &vtParams, shards, revertUUID, 20*time.Second, schema.OnlineDDLStatusFailed, schema.OnlineDDLStatusCancelled)
+ status := onlineddl.WaitForMigrationStatus(t, &vtParams, shards, revertUUID, normalWaitTime, schema.OnlineDDLStatusFailed, schema.OnlineDDLStatusCancelled)
fmt.Printf("# Migration status (for debug purposes): <%s>\n", status)
onlineddl.CheckMigrationStatus(t, &vtParams, shards, revertUUID, schema.OnlineDDLStatusCancelled)
})
t.Run("success concurrent singleton-context with no-context revert", func(t *testing.T) {
revertUUID := testRevertMigration(t, createRevertParams(uuids[len(uuids)-1], "vitess --allow-concurrent --postpone-completion", "vtctl", "rev:ctx", "", false))
- onlineddl.WaitForMigrationStatus(t, &vtParams, shards, revertUUID, 20*time.Second, schema.OnlineDDLStatusRunning)
+ onlineddl.WaitForMigrationStatus(t, &vtParams, shards, revertUUID, normalWaitTime, schema.OnlineDDLStatusRunning)
// revert is running but has no --singleton-context. Our next migration should be able to run.
uuid := testOnlineDDLStatement(t, createParams(dropNonexistentTableStatement, "vitess --allow-concurrent --singleton-context", "vtctl", "migrate:ctx", "", "", false))
uuids = append(uuids, uuid)
onlineddl.CheckMigrationStatus(t, &vtParams, shards, uuid, schema.OnlineDDLStatusComplete)
onlineddl.CheckCancelMigration(t, &vtParams, shards, revertUUID, true)
- status := onlineddl.WaitForMigrationStatus(t, &vtParams, shards, revertUUID, 20*time.Second, schema.OnlineDDLStatusFailed, schema.OnlineDDLStatusCancelled)
+ status := onlineddl.WaitForMigrationStatus(t, &vtParams, shards, revertUUID, normalWaitTime, schema.OnlineDDLStatusFailed, schema.OnlineDDLStatusCancelled)
fmt.Printf("# Migration status (for debug purposes): <%s>\n", status)
onlineddl.CheckMigrationStatus(t, &vtParams, shards, revertUUID, schema.OnlineDDLStatusCancelled)
})
}
func testDeclarative(t *testing.T) {
- defer cluster.PanicHandler(t)
shards = clusterInstance.Keyspaces[0].Shards
require.Equal(t, 1, len(shards))
@@ -2463,7 +2512,6 @@ func testDeclarative(t *testing.T) {
}
func testForeignKeys(t *testing.T) {
- defer cluster.PanicHandler(t)
var (
createStatements = []string{
diff --git a/go/test/endtoend/onlineddl/vrepl/onlineddl_vrepl_test.go b/go/test/endtoend/onlineddl/vrepl/onlineddl_vrepl_test.go
index f7bab109c05..a7c38527152 100644
--- a/go/test/endtoend/onlineddl/vrepl/onlineddl_vrepl_test.go
+++ b/go/test/endtoend/onlineddl/vrepl/onlineddl_vrepl_test.go
@@ -80,6 +80,9 @@ var (
ALTER TABLE %s
DROP PRIMARY KEY,
DROP COLUMN vrepl_col`
+ alterTableFailedVreplicationStatement = `
+ ALTER TABLE %s
+ ADD UNIQUE KEY test_val_uidx (test_val)`
// We will run this query while throttling vreplication
alterTableThrottlingStatement = `
ALTER TABLE %s
@@ -157,7 +160,6 @@ const (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitcode, err := func() (int, error) {
@@ -221,7 +223,6 @@ func TestMain(m *testing.M) {
}
func TestVreplSchemaChanges(t *testing.T) {
- defer cluster.PanicHandler(t)
shards = clusterInstance.Keyspaces[0].Shards
require.Equal(t, 2, len(shards))
@@ -301,6 +302,7 @@ func TestVreplSchemaChanges(t *testing.T) {
for _, row := range rs.Named().Rows {
retainArtifactSeconds := row.AsInt64("retain_artifacts_seconds", 0)
assert.Equal(t, int64(-1), retainArtifactSeconds)
+ assert.False(t, row["shadow_analyzed_timestamp"].IsNull())
}
})
t.Run("successful online alter, vtctl", func(t *testing.T) {
@@ -456,6 +458,19 @@ func TestVreplSchemaChanges(t *testing.T) {
onlineddl.CheckMigrationArtifacts(t, &vtParams, shards, uuid, true)
// migration will fail again
})
+ t.Run("failed migration due to vreplication", func(t *testing.T) {
+ insertRows(t, 2)
+ uuid := testOnlineDDLStatement(t, alterTableFailedVreplicationStatement, "online", providedUUID, providedMigrationContext, "vtgate", "vrepl_col", "", false)
+ onlineddl.WaitForMigrationStatus(t, &vtParams, shards, uuid, normalMigrationWait, schema.OnlineDDLStatusComplete, schema.OnlineDDLStatusFailed)
+ onlineddl.CheckMigrationStatus(t, &vtParams, shards, uuid, schema.OnlineDDLStatusFailed)
+
+ rs := onlineddl.ReadMigrations(t, &vtParams, uuid)
+ require.NotNil(t, rs)
+ for _, row := range rs.Named().Rows {
+ message := row["message"].ToString()
+ assert.Contains(t, message, "vreplication: terminal error:", "migration row: %v", row)
+ }
+ })
t.Run("cancel all migrations: nothing to cancel", func(t *testing.T) {
// no migrations pending at this time
time.Sleep(10 * time.Second)
diff --git a/go/test/endtoend/onlineddl/vrepl_stress/onlineddl_vrepl_mini_stress_test.go b/go/test/endtoend/onlineddl/vrepl_stress/onlineddl_vrepl_mini_stress_test.go
index e0dd9701cf8..f7b222c175d 100644
--- a/go/test/endtoend/onlineddl/vrepl_stress/onlineddl_vrepl_mini_stress_test.go
+++ b/go/test/endtoend/onlineddl/vrepl_stress/onlineddl_vrepl_mini_stress_test.go
@@ -38,7 +38,6 @@ import (
"vitess.io/vitess/go/test/endtoend/throttler"
"vitess.io/vitess/go/vt/log"
"vitess.io/vitess/go/vt/schema"
- vttablet "vitess.io/vitess/go/vt/vttablet/common"
)
type WriteMetrics struct {
@@ -160,7 +159,6 @@ func nextOpOrder() int64 {
}
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitcode, err := func() (int, error) {
@@ -184,9 +182,6 @@ func TestMain(m *testing.M) {
"--heartbeat_on_demand_duration", "5s",
"--migration_check_interval", "5s",
"--watch_replication_stream",
- // Test VPlayer batching mode.
- fmt.Sprintf("--vreplication_experimental_flags=%d",
- vttablet.VReplicationExperimentalFlagAllowNoBlobBinlogRowImage|vttablet.VReplicationExperimentalFlagOptimizeInserts|vttablet.VReplicationExperimentalFlagVPlayerBatching),
}
clusterInstance.VtGateExtraArgs = []string{
"--ddl_strategy", "online",
@@ -230,7 +225,6 @@ func TestMain(m *testing.M) {
}
func TestVreplMiniStressSchemaChanges(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
diff --git a/go/test/endtoend/onlineddl/vrepl_stress_suite/onlineddl_vrepl_stress_suite_test.go b/go/test/endtoend/onlineddl/vrepl_stress_suite/onlineddl_vrepl_stress_suite_test.go
index 440b921f9ba..1e52db38bd0 100644
--- a/go/test/endtoend/onlineddl/vrepl_stress_suite/onlineddl_vrepl_stress_suite_test.go
+++ b/go/test/endtoend/onlineddl/vrepl_stress_suite/onlineddl_vrepl_stress_suite_test.go
@@ -51,7 +51,6 @@ import (
"vitess.io/vitess/go/timer"
"vitess.io/vitess/go/vt/log"
"vitess.io/vitess/go/vt/schema"
- vttablet "vitess.io/vitess/go/vt/vttablet/common"
)
type testcase struct {
@@ -408,7 +407,6 @@ func mysqlParams() *mysql.ConnParams {
}
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitcode, err := func() (int, error) {
@@ -436,9 +434,6 @@ func TestMain(m *testing.M) {
"--migration_check_interval", "5s",
"--vstream_packet_size", "4096", // Keep this value small and below 10k to ensure multilple vstream iterations
"--watch_replication_stream",
- // Test VPlayer batching mode.
- fmt.Sprintf("--vreplication_experimental_flags=%d",
- vttablet.VReplicationExperimentalFlagAllowNoBlobBinlogRowImage|vttablet.VReplicationExperimentalFlagOptimizeInserts|vttablet.VReplicationExperimentalFlagVPlayerBatching),
}
clusterInstance.VtGateExtraArgs = []string{
"--ddl_strategy", "online",
@@ -482,7 +477,6 @@ func TestMain(m *testing.M) {
}
func TestVreplStressSchemaChanges(t *testing.T) {
- defer cluster.PanicHandler(t)
shards = clusterInstance.Keyspaces[0].Shards
require.Equal(t, 1, len(shards))
diff --git a/go/test/endtoend/onlineddl/vrepl_suite/onlineddl_vrepl_suite_test.go b/go/test/endtoend/onlineddl/vrepl_suite/onlineddl_vrepl_suite_test.go
index 972421c96da..4a2f7f1a3ce 100644
--- a/go/test/endtoend/onlineddl/vrepl_suite/onlineddl_vrepl_suite_test.go
+++ b/go/test/endtoend/onlineddl/vrepl_suite/onlineddl_vrepl_suite_test.go
@@ -67,7 +67,6 @@ const (
// Use $VREPL_SUITE_TEST_FILTER environment variable to filter tests by name.
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
testsFilter = os.Getenv(testFilterEnvVar)
@@ -133,7 +132,6 @@ func TestMain(m *testing.M) {
}
func TestVreplSuiteSchemaChanges(t *testing.T) {
- defer cluster.PanicHandler(t)
shards := clusterInstance.Keyspaces[0].Shards
require.Equal(t, 1, len(shards))
diff --git a/go/test/endtoend/onlineddl/vtgate_util.go b/go/test/endtoend/onlineddl/vtgate_util.go
index 639b3ce8eb4..ffb6423a346 100644
--- a/go/test/endtoend/onlineddl/vtgate_util.go
+++ b/go/test/endtoend/onlineddl/vtgate_util.go
@@ -255,6 +255,16 @@ func CheckForceMigrationCutOver(t *testing.T, vtParams *mysql.ConnParams, shards
}
}
+// CheckSetMigrationCutOverThreshold sets the cut-over threshold for a given migration.
+func CheckSetMigrationCutOverThreshold(t *testing.T, vtParams *mysql.ConnParams, shards []cluster.Shard, uuid string, threshold time.Duration, expectError string) {
+ query, err := sqlparser.ParseAndBind("alter vitess_migration %a cutover_threshold %a",
+ sqltypes.StringBindVariable(uuid),
+ sqltypes.StringBindVariable(threshold.String()),
+ )
+ require.NoError(t, err)
+ _ = VtgateExecQuery(t, vtParams, query, expectError)
+}
+
// CheckMigrationStatus verifies that the migration indicated by given UUID has the given expected status
func CheckMigrationStatus(t *testing.T, vtParams *mysql.ConnParams, shards []cluster.Shard, uuid string, expectStatuses ...schema.OnlineDDLStatus) bool {
ksName := shards[0].PrimaryTablet().VttabletProcess.Keyspace
diff --git a/go/test/endtoend/preparestmt/main_test.go b/go/test/endtoend/preparestmt/main_test.go
index 018e9d266fd..0e067062c94 100644
--- a/go/test/endtoend/preparestmt/main_test.go
+++ b/go/test/endtoend/preparestmt/main_test.go
@@ -162,7 +162,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitcode, err := func() (int, error) {
diff --git a/go/test/endtoend/preparestmt/stmt_methods_test.go b/go/test/endtoend/preparestmt/stmt_methods_test.go
index 24fb58bff81..5768c6eec7a 100644
--- a/go/test/endtoend/preparestmt/stmt_methods_test.go
+++ b/go/test/endtoend/preparestmt/stmt_methods_test.go
@@ -27,20 +27,16 @@ import (
"github.com/icrowley/fake"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
-
- "vitess.io/vitess/go/test/endtoend/cluster"
)
// TestSelect simple select the data without any condition.
func TestSelect(t *testing.T) {
- defer cluster.PanicHandler(t)
dbo := Connect(t)
defer dbo.Close()
selectWhere(t, dbo, "")
}
func TestSelectDatabase(t *testing.T) {
- defer cluster.PanicHandler(t)
dbo := Connect(t)
defer dbo.Close()
prepare, err := dbo.Prepare("select database()")
@@ -58,7 +54,6 @@ func TestSelectDatabase(t *testing.T) {
// TestInsertUpdateDelete validates all insert, update and
// delete method on prepared statements.
func TestInsertUpdateDelete(t *testing.T) {
- defer cluster.PanicHandler(t)
dbo := Connect(t)
defer dbo.Close()
// prepare insert statement
@@ -134,7 +129,6 @@ func testReplica(t *testing.T) {
// testcount validates inserted rows count with expected count.
func testcount(t *testing.T, dbo *sql.DB, except int) {
- defer cluster.PanicHandler(t)
r, err := dbo.Query("SELECT count(1) FROM " + tableName)
require.Nil(t, err)
@@ -148,7 +142,6 @@ func testcount(t *testing.T, dbo *sql.DB, except int) {
// TestAutoIncColumns test insertion of row without passing
// the value of auto increment columns (here it is id).
func TestAutoIncColumns(t *testing.T) {
- defer cluster.PanicHandler(t)
dbo := Connect(t)
defer dbo.Close()
// insert a row without id
@@ -227,7 +220,6 @@ func reconnectAndTest(t *testing.T) {
// TestColumnParameter query database using column
// parameter.
func TestColumnParameter(t *testing.T) {
- defer cluster.PanicHandler(t)
dbo := Connect(t)
defer dbo.Close()
@@ -267,7 +259,6 @@ func TestColumnParameter(t *testing.T) {
// TestWrongTableName query database using invalid
// tablename and validate error.
func TestWrongTableName(t *testing.T) {
- defer cluster.PanicHandler(t)
dbo := Connect(t)
defer dbo.Close()
execWithError(t, dbo, []uint16{1146}, "select * from teseting_table;")
@@ -319,7 +310,6 @@ func getStringToString(x sql.NullString) string {
}
func TestSelectDBA(t *testing.T) {
- defer cluster.PanicHandler(t)
dbo := Connect(t)
defer dbo.Close()
@@ -381,7 +371,6 @@ func TestSelectDBA(t *testing.T) {
}
func TestSelectLock(t *testing.T) {
- defer cluster.PanicHandler(t)
dbo := Connect(t)
defer dbo.Close()
@@ -417,7 +406,6 @@ func TestSelectLock(t *testing.T) {
}
func TestShowColumns(t *testing.T) {
- defer cluster.PanicHandler(t)
dbo := Connect(t)
defer dbo.Close()
@@ -438,7 +426,6 @@ func TestShowColumns(t *testing.T) {
}
func TestBinaryColumn(t *testing.T) {
- defer cluster.PanicHandler(t)
dbo := Connect(t, "interpolateParams=false")
defer dbo.Close()
diff --git a/go/test/endtoend/recovery/pitr/shardedpitr_test.go b/go/test/endtoend/recovery/pitr/shardedpitr_test.go
index f2a76662918..3bb2399737e 100644
--- a/go/test/endtoend/recovery/pitr/shardedpitr_test.go
+++ b/go/test/endtoend/recovery/pitr/shardedpitr_test.go
@@ -126,7 +126,6 @@ var (
// - asserting that restoring to restoreTime2 (going from 2 shards to 2 shards with past time) is working, it will assert for both shards
// - asserting that restoring to restoreTime3 is working, we should get complete data after restoring, as we have in existing shards.
func TestPITRRecovery(t *testing.T) {
- defer cluster.PanicHandler(nil)
initializeCluster(t)
defer clusterInstance.Teardown()
@@ -525,7 +524,6 @@ func launchRecoveryTablet(t *testing.T, tablet *cluster.Vttablet, binlogServer *
tablet.MysqlctlProcess = *mysqlctlProcess
extraArgs := []string{"--db-credentials-file", dbCredentialFile}
tablet.MysqlctlProcess.InitDBFile = initDBFileWithPassword
- tablet.VttabletProcess.DbPassword = mysqlPassword
tablet.MysqlctlProcess.ExtraArgs = extraArgs
err = tablet.MysqlctlProcess.Start()
require.NoError(t, err)
@@ -545,6 +543,7 @@ func launchRecoveryTablet(t *testing.T, tablet *cluster.Vttablet, binlogServer *
clusterInstance.VtTabletExtraArgs,
clusterInstance.DefaultCharset)
tablet.Alias = tablet.VttabletProcess.TabletPath
+ tablet.VttabletProcess.DbPassword = mysqlPassword
tablet.VttabletProcess.SupportsBackup = true
tablet.VttabletProcess.Keyspace = restoreKeyspaceName
tablet.VttabletProcess.ExtraArgs = []string{
diff --git a/go/test/endtoend/recovery/unshardedrecovery/recovery.go b/go/test/endtoend/recovery/unshardedrecovery/recovery.go
index 1ebb7c2647f..ae6b152271b 100644
--- a/go/test/endtoend/recovery/unshardedrecovery/recovery.go
+++ b/go/test/endtoend/recovery/unshardedrecovery/recovery.go
@@ -72,7 +72,6 @@ var (
// TestMainImpl creates cluster for unsharded recovery testing.
func TestMainImpl(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode, err := func() (int, error) {
@@ -201,7 +200,6 @@ func TestMainImpl(m *testing.M) {
//
// 7. check that vtgate queries work correctly
func TestRecoveryImpl(t *testing.T) {
- defer cluster.PanicHandler(t)
defer tabletsTeardown()
verifyInitialReplication(t)
diff --git a/go/test/endtoend/reparent/emergencyreparent/ers_test.go b/go/test/endtoend/reparent/emergencyreparent/ers_test.go
index 584bccfdfb7..0d2eb8935d2 100644
--- a/go/test/endtoend/reparent/emergencyreparent/ers_test.go
+++ b/go/test/endtoend/reparent/emergencyreparent/ers_test.go
@@ -31,7 +31,6 @@ import (
)
func TestTrivialERS(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -56,7 +55,6 @@ func TestTrivialERS(t *testing.T) {
}
func TestReparentIgnoreReplicas(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -98,7 +96,6 @@ func TestReparentIgnoreReplicas(t *testing.T) {
}
func TestReparentDownPrimary(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -134,7 +131,6 @@ func TestReparentDownPrimary(t *testing.T) {
}
func TestReparentNoChoiceDownPrimary(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -170,7 +166,6 @@ func TestReparentNoChoiceDownPrimary(t *testing.T) {
func TestSemiSyncSetupCorrectly(t *testing.T) {
t.Run("semi-sync enabled", func(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -198,7 +193,6 @@ func TestSemiSyncSetupCorrectly(t *testing.T) {
})
t.Run("semi-sync disabled", func(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "none")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -228,7 +222,6 @@ func TestSemiSyncSetupCorrectly(t *testing.T) {
// TestERSPromoteRdonly tests that we never end up promoting a rdonly instance as the primary
func TestERSPromoteRdonly(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -256,7 +249,6 @@ func TestERSPromoteRdonly(t *testing.T) {
// TestERSPreventCrossCellPromotion tests that we promote a replica in the same cell as the previous primary if prevent cross cell promotion flag is set
func TestERSPreventCrossCellPromotion(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -279,7 +271,6 @@ func TestERSPreventCrossCellPromotion(t *testing.T) {
// TestPullFromRdonly tests that if a rdonly tablet is the most advanced, then our promoted primary should have
// caught up to it by pulling transactions from it
func TestPullFromRdonly(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -351,7 +342,6 @@ func TestPullFromRdonly(t *testing.T) {
// replicas which do not have any replication status and also succeeds if the io thread
// is stopped on the primary elect.
func TestNoReplicationStatusAndIOThreadStopped(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -451,7 +441,6 @@ func TestERSForInitialization(t *testing.T) {
}
func TestRecoverWithMultipleFailures(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -479,7 +468,6 @@ func TestRecoverWithMultipleFailures(t *testing.T) {
// TestERSFailFast tests that ERS will fail fast if it cannot find any tablet which can be safely promoted instead of promoting
// a tablet and hanging while inserting a row in the reparent journal on getting semi-sync ACKs
func TestERSFailFast(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -519,7 +507,6 @@ func TestERSFailFast(t *testing.T) {
// TestReplicationStopped checks that ERS ignores the tablets that have sql thread stopped.
// If there are more than 1, we also fail.
func TestReplicationStopped(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
diff --git a/go/test/endtoend/reparent/newfeaturetest/reparent_test.go b/go/test/endtoend/reparent/newfeaturetest/reparent_test.go
index ad798d61792..a041ca04c68 100644
--- a/go/test/endtoend/reparent/newfeaturetest/reparent_test.go
+++ b/go/test/endtoend/reparent/newfeaturetest/reparent_test.go
@@ -19,7 +19,9 @@ package newfeaturetest
import (
"context"
"fmt"
+ "sync"
"testing"
+ "time"
"github.com/stretchr/testify/require"
@@ -34,7 +36,6 @@ import (
// The test takes down the vttablets of the primary and a rdonly tablet and runs ERS with the
// default values of remote_operation_timeout, lock-timeout flags and wait_replicas_timeout subflag.
func TestRecoverWithMultipleVttabletFailures(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -66,7 +67,6 @@ func TestRecoverWithMultipleVttabletFailures(t *testing.T) {
// and ERS succeeds.
func TestSingleReplicaERS(t *testing.T) {
// Set up a cluster with none durability policy
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "none")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -102,7 +102,6 @@ func TestSingleReplicaERS(t *testing.T) {
// TestTabletRestart tests that a running tablet can be restarted and everything is still fine
func TestTabletRestart(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -115,7 +114,6 @@ func TestTabletRestart(t *testing.T) {
// Tests ensures that ChangeTabletType works even when semi-sync plugins are not loaded.
func TestChangeTypeWithoutSemiSync(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "none")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -161,7 +159,6 @@ func TestChangeTypeWithoutSemiSync(t *testing.T) {
// TestERSWithWriteInPromoteReplica tests that ERS doesn't fail even if there is a
// write that happens when PromoteReplica is called.
func TestERSWithWriteInPromoteReplica(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -177,3 +174,62 @@ func TestERSWithWriteInPromoteReplica(t *testing.T) {
_, err := utils.Ers(clusterInstance, tablets[3], "60s", "30s")
require.NoError(t, err, "ERS should not fail even if there is a sidecardb change")
}
+
+func TestBufferingWithMultipleDisruptions(t *testing.T) {
+ clusterInstance := utils.SetupShardedReparentCluster(t, "semi_sync")
+ defer utils.TeardownCluster(clusterInstance)
+
+ // Stop all VTOrc instances, so that they don't interfere with the test.
+ for _, vtorc := range clusterInstance.VTOrcProcesses {
+ err := vtorc.TearDown()
+ require.NoError(t, err)
+ }
+
+ // Start by reparenting all the shards to the first tablet.
+ keyspace := clusterInstance.Keyspaces[0]
+ shards := keyspace.Shards
+ for _, shard := range shards {
+ err := clusterInstance.VtctldClientProcess.PlannedReparentShard(keyspace.Name, shard.Name, shard.Vttablets[0].Alias)
+ require.NoError(t, err)
+ }
+
+ // We simulate start of external reparent or a PRS where the healthcheck update from the tablet gets lost in transit
+ // to vtgate by just setting the primary read only. This is also why we needed to shutdown all VTOrcs, so that they don't
+ // fix this.
+ utils.RunSQL(context.Background(), t, "set global read_only=1", shards[0].Vttablets[0])
+ utils.RunSQL(context.Background(), t, "set global read_only=1", shards[1].Vttablets[0])
+
+ wg := sync.WaitGroup{}
+ rowCount := 10
+ vtParams := clusterInstance.GetVTParams(keyspace.Name)
+ // We now spawn writes for a bunch of go routines.
+ // The ones going to shard 1 and shard 2 should block, since
+ // they're in the midst of a reparenting operation (as seen by the buffering code).
+ for i := 1; i <= rowCount; i++ {
+ wg.Add(1)
+ go func(i int) {
+ defer wg.Done()
+ conn, err := mysql.Connect(context.Background(), &vtParams)
+ if err != nil {
+ return
+ }
+ defer conn.Close()
+ _, err = conn.ExecuteFetch(utils.GetInsertQuery(i), 0, false)
+ require.NoError(t, err)
+ }(i)
+ }
+
+ // Now, run a PRS call on the last shard. This shouldn't unbuffer the queries that are buffered for shards 1 and 2
+ // since the disruption on the two shards hasn't stopped.
+ err := clusterInstance.VtctldClientProcess.PlannedReparentShard(keyspace.Name, shards[2].Name, shards[2].Vttablets[1].Alias)
+ require.NoError(t, err)
+ // We wait a second just to make sure the PRS changes are processed by the buffering logic in vtgate.
+ time.Sleep(1 * time.Second)
+ // Finally, we'll now make the 2 shards healthy again by running PRS.
+ err = clusterInstance.VtctldClientProcess.PlannedReparentShard(keyspace.Name, shards[0].Name, shards[0].Vttablets[1].Alias)
+ require.NoError(t, err)
+ err = clusterInstance.VtctldClientProcess.PlannedReparentShard(keyspace.Name, shards[1].Name, shards[1].Vttablets[1].Alias)
+ require.NoError(t, err)
+ // Wait for all the writes to have succeeded.
+ wg.Wait()
+}
diff --git a/go/test/endtoend/reparent/plannedreparent/reparent_range_based_test.go b/go/test/endtoend/reparent/plannedreparent/reparent_range_based_test.go
index 2d89893569d..91471b1cebb 100644
--- a/go/test/endtoend/reparent/plannedreparent/reparent_range_based_test.go
+++ b/go/test/endtoend/reparent/plannedreparent/reparent_range_based_test.go
@@ -28,7 +28,6 @@ import (
)
func TestReparentGracefulRangeBased(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
utils.ShardName = "0000000000000000-ffffffffffffffff"
diff --git a/go/test/endtoend/reparent/plannedreparent/reparent_test.go b/go/test/endtoend/reparent/plannedreparent/reparent_test.go
index d3907b0bc5b..94e37d715f4 100644
--- a/go/test/endtoend/reparent/plannedreparent/reparent_test.go
+++ b/go/test/endtoend/reparent/plannedreparent/reparent_test.go
@@ -36,7 +36,6 @@ import (
)
func TestPrimaryToSpareStateChangeImpossible(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -48,7 +47,6 @@ func TestPrimaryToSpareStateChangeImpossible(t *testing.T) {
}
func TestReparentCrossCell(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -62,7 +60,6 @@ func TestReparentCrossCell(t *testing.T) {
}
func TestReparentGraceful(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -85,7 +82,6 @@ func TestReparentGraceful(t *testing.T) {
// TestPRSWithDrainedLaggingTablet tests that PRS succeeds even if we have a lagging drained tablet
func TestPRSWithDrainedLaggingTablet(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -112,7 +108,6 @@ func TestPRSWithDrainedLaggingTablet(t *testing.T) {
}
func TestReparentReplicaOffline(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -130,7 +125,6 @@ func TestReparentReplicaOffline(t *testing.T) {
}
func TestReparentAvoid(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -178,14 +172,12 @@ func TestReparentAvoid(t *testing.T) {
}
func TestReparentFromOutside(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
reparentFromOutside(t, clusterInstance, false)
}
func TestReparentFromOutsideWithNoPrimary(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -285,7 +277,6 @@ func reparentFromOutside(t *testing.T, clusterInstance *cluster.LocalProcessClus
}
func TestReparentWithDownReplica(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -332,7 +323,6 @@ func TestReparentWithDownReplica(t *testing.T) {
}
func TestChangeTypeSemiSync(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -399,7 +389,6 @@ func TestChangeTypeSemiSync(t *testing.T) {
// 1. When PRS is run with the cross_cell durability policy setup, then the semi-sync settings on all the tablets are as expected
// 2. Bringing up a new vttablet should have its replication and semi-sync setup correctly without any manual intervention
func TestCrossCellDurability(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "cross_cell")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
@@ -439,7 +428,6 @@ func TestCrossCellDurability(t *testing.T) {
// TestFullStatus tests that the RPC FullStatus works as intended.
func TestFullStatus(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
diff --git a/go/test/endtoend/reparent/prscomplex/main_test.go b/go/test/endtoend/reparent/prscomplex/main_test.go
index 88e3d6c09fa..c2dafb8589f 100644
--- a/go/test/endtoend/reparent/prscomplex/main_test.go
+++ b/go/test/endtoend/reparent/prscomplex/main_test.go
@@ -44,7 +44,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/reparent/prssettingspool/main_test.go b/go/test/endtoend/reparent/prssettingspool/main_test.go
index 4364836841b..c6b59fd6372 100644
--- a/go/test/endtoend/reparent/prssettingspool/main_test.go
+++ b/go/test/endtoend/reparent/prssettingspool/main_test.go
@@ -43,7 +43,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/reparent/semisync/semi_sync_test.go b/go/test/endtoend/reparent/semisync/semi_sync_test.go
index 07cf4a7abc8..df9bf192e65 100644
--- a/go/test/endtoend/reparent/semisync/semi_sync_test.go
+++ b/go/test/endtoend/reparent/semisync/semi_sync_test.go
@@ -33,7 +33,6 @@ func TestSemiSyncUpgradeDowngrade(t *testing.T) {
if ver != 21 {
t.Skip("We only want to run this test for v21 release")
}
- defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, "semi_sync")
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
diff --git a/go/test/endtoend/reparent/utils/utils.go b/go/test/endtoend/reparent/utils/utils.go
index 0d3eddc0464..2a51262557b 100644
--- a/go/test/endtoend/reparent/utils/utils.go
+++ b/go/test/endtoend/reparent/utils/utils.go
@@ -74,6 +74,53 @@ func SetupRangeBasedCluster(ctx context.Context, t *testing.T) *cluster.LocalPro
return setupCluster(ctx, t, ShardName, []string{cell1}, []int{2}, "semi_sync")
}
+// SetupShardedReparentCluster is used to setup a sharded cluster for testing
+func SetupShardedReparentCluster(t *testing.T, durability string) *cluster.LocalProcessCluster {
+ clusterInstance := cluster.NewCluster(cell1, Hostname)
+ // Start topo server
+ err := clusterInstance.StartTopo()
+ require.NoError(t, err)
+
+ clusterInstance.VtTabletExtraArgs = append(clusterInstance.VtTabletExtraArgs,
+ "--lock_tables_timeout", "5s",
+ // Fast health checks help find corner cases.
+ "--health_check_interval", "1s",
+ "--track_schema_versions=true",
+ "--queryserver_enable_online_ddl=false")
+ clusterInstance.VtGateExtraArgs = append(clusterInstance.VtGateExtraArgs,
+ "--enable_buffer",
+ // Long timeout in case failover is slow.
+ "--buffer_window", "10m",
+ "--buffer_max_failover_duration", "10m",
+ "--buffer_min_time_between_failovers", "20m",
+ )
+
+ // Start keyspace
+ keyspace := &cluster.Keyspace{
+ Name: KeyspaceName,
+ SchemaSQL: sqlSchema,
+ VSchema: `{"sharded": true, "vindexes": {"hash_index": {"type": "hash"}}, "tables": {"vt_insert_test": {"column_vindexes": [{"column": "id", "name": "hash_index"}]}}}`,
+ DurabilityPolicy: durability,
+ }
+ err = clusterInstance.StartKeyspace(*keyspace, []string{"-40", "40-80", "80-"}, 2, false)
+ require.NoError(t, err)
+
+ // Start Vtgate
+ err = clusterInstance.StartVtgate()
+ require.NoError(t, err)
+ return clusterInstance
+}
+
+// GetInsertQuery returns a built insert query to insert a row.
+func GetInsertQuery(idx int) string {
+ return fmt.Sprintf(insertSQL, idx, idx)
+}
+
+// GetSelectionQuery returns a built selection query read the data.
+func GetSelectionQuery() string {
+ return `select * from vt_insert_test`
+}
+
// TeardownCluster is used to teardown the reparent cluster. When
// run in a CI environment -- which is considered true when the
// "CI" env variable is set to "true" -- the teardown also removes
diff --git a/go/test/endtoend/schemadiff/vrepl/schemadiff_vrepl_suite_test.go b/go/test/endtoend/schemadiff/vrepl/schemadiff_vrepl_suite_test.go
index b4ecb367e8b..c850e22945c 100644
--- a/go/test/endtoend/schemadiff/vrepl/schemadiff_vrepl_suite_test.go
+++ b/go/test/endtoend/schemadiff/vrepl/schemadiff_vrepl_suite_test.go
@@ -68,7 +68,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitcode, err := func() (int, error) {
@@ -132,7 +131,6 @@ func TestMain(m *testing.M) {
}
func TestSchemadiffSchemaChanges(t *testing.T) {
- defer cluster.PanicHandler(t)
shards := clusterInstance.Keyspaces[0].Shards
require.Equal(t, 1, len(shards))
@@ -275,7 +273,6 @@ func testSingle(t *testing.T, testName string) {
}
// func TestRandomSchemaChanges(t *testing.T) {
-// defer cluster.PanicHandler(t)
// hints := &schemadiff.DiffHints{AutoIncrementStrategy: schemadiff.AutoIncrementIgnore}
// // count := 20
diff --git a/go/test/endtoend/sharded/sharded_keyspace_test.go b/go/test/endtoend/sharded/sharded_keyspace_test.go
index 192355fa6ef..3e5f2b3add7 100644
--- a/go/test/endtoend/sharded/sharded_keyspace_test.go
+++ b/go/test/endtoend/sharded/sharded_keyspace_test.go
@@ -73,7 +73,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitcode, err := func() (int, error) {
@@ -102,7 +101,6 @@ func TestMain(m *testing.M) {
}
func TestShardedKeyspace(t *testing.T) {
- defer cluster.PanicHandler(t)
shard1 := clusterInstance.Keyspaces[0].Shards[0]
shard2 := clusterInstance.Keyspaces[0].Shards[1]
diff --git a/go/test/endtoend/stress/stress_test.go b/go/test/endtoend/stress/stress_test.go
index 30a5ee69c1a..1bf716274d4 100644
--- a/go/test/endtoend/stress/stress_test.go
+++ b/go/test/endtoend/stress/stress_test.go
@@ -42,7 +42,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -84,7 +83,6 @@ func TestMain(m *testing.M) {
// The stressor is started on its own goroutine while the end-to-end test
// is executed on the same cluster.
func TestSimpleStressTest(t *testing.T) {
- defer cluster.PanicHandler(t)
cfg := stress.DefaultConfig
cfg.ConnParams = &vtParams
diff --git a/go/test/endtoend/tabletgateway/buffer/buffer_test_helpers.go b/go/test/endtoend/tabletgateway/buffer/buffer_test_helpers.go
index ca4fe5f6094..920e2193453 100644
--- a/go/test/endtoend/tabletgateway/buffer/buffer_test_helpers.go
+++ b/go/test/endtoend/tabletgateway/buffer/buffer_test_helpers.go
@@ -272,7 +272,6 @@ type BufferingTest struct {
}
func (bt *BufferingTest) Test(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance, exitCode := bt.createCluster()
if exitCode != 0 {
t.Fatal("failed to start cluster")
diff --git a/go/test/endtoend/tabletgateway/main_test.go b/go/test/endtoend/tabletgateway/main_test.go
index 354be6969d3..cf179c49845 100644
--- a/go/test/endtoend/tabletgateway/main_test.go
+++ b/go/test/endtoend/tabletgateway/main_test.go
@@ -61,7 +61,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/tabletgateway/vtgate_test.go b/go/test/endtoend/tabletgateway/vtgate_test.go
index 1f4f8758e16..d9c87fdc7f3 100644
--- a/go/test/endtoend/tabletgateway/vtgate_test.go
+++ b/go/test/endtoend/tabletgateway/vtgate_test.go
@@ -40,7 +40,6 @@ import (
)
func TestVtgateHealthCheck(t *testing.T) {
- defer cluster.PanicHandler(t)
// Healthcheck interval on tablet is set to 1s, so sleep for 2s
time.Sleep(2 * time.Second)
verifyVtgateVariables(t, clusterInstance.VtgateProcess.VerifyURL)
@@ -54,7 +53,6 @@ func TestVtgateHealthCheck(t *testing.T) {
}
func TestVtgateReplicationStatusCheck(t *testing.T) {
- defer cluster.PanicHandler(t)
// Healthcheck interval on tablet is set to 1s, so sleep for 2s
time.Sleep(2 * time.Second)
verifyVtgateVariables(t, clusterInstance.VtgateProcess.VerifyURL)
@@ -104,7 +102,6 @@ func TestVtgateReplicationStatusCheck(t *testing.T) {
}
func TestVtgateReplicationStatusCheckWithTabletTypeChange(t *testing.T) {
- defer cluster.PanicHandler(t)
// Healthcheck interval on tablet is set to 1s, so sleep for 2s
time.Sleep(2 * time.Second)
verifyVtgateVariables(t, clusterInstance.VtgateProcess.VerifyURL)
@@ -180,7 +177,6 @@ func retryNTimes(t *testing.T, maxRetries int, f func() bool) {
func TestReplicaTransactions(t *testing.T) {
// TODO(deepthi): this test seems to depend on previous test. Fix tearDown so that tests are independent
- defer cluster.PanicHandler(t)
// Healthcheck interval on tablet is set to 1s, so sleep for 2s
time.Sleep(2 * time.Second)
ctx := context.Background()
@@ -287,7 +283,6 @@ func TestReplicaTransactions(t *testing.T) {
// TestStreamingRPCStuck tests that StreamExecute calls don't get stuck on the vttablets if a client stop reading from a stream.
func TestStreamingRPCStuck(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtConn, err := mysql.Connect(ctx, &vtParams)
require.NoError(t, err)
diff --git a/go/test/endtoend/tabletmanager/commands_test.go b/go/test/endtoend/tabletmanager/commands_test.go
index d5d946a164c..67127ab740f 100644
--- a/go/test/endtoend/tabletmanager/commands_test.go
+++ b/go/test/endtoend/tabletmanager/commands_test.go
@@ -29,7 +29,6 @@ import (
"vitess.io/vitess/go/json2"
"vitess.io/vitess/go/mysql"
- "vitess.io/vitess/go/test/endtoend/cluster"
"vitess.io/vitess/go/test/endtoend/utils"
vtctldatapb "vitess.io/vitess/go/vt/proto/vtctldata"
@@ -44,7 +43,6 @@ var (
// TabletCommands tests the basic tablet commands
func TestTabletCommands(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &primaryTabletParams)
@@ -185,7 +183,6 @@ func assertExecuteMultiFetch(t *testing.T, qr string) {
func TestHook(t *testing.T) {
// test a regular program works
- defer cluster.PanicHandler(t)
runHookAndAssert(t, []string{
"ExecuteHook", primaryTablet.Alias, "test.sh", "--", "--flag1", "--param1=hello"}, 0, false, "")
@@ -226,7 +223,6 @@ func runHookAndAssert(t *testing.T, params []string, expectedStatus int64, expec
func TestShardReplicationFix(t *testing.T) {
// make sure the replica is in the replication graph, 2 nodes: 1 primary, 1 replica
- defer cluster.PanicHandler(t)
result, err := clusterInstance.VtctldClientProcess.GetShardReplication(keyspaceName, shardName, cell)
require.Nil(t, err, "error should be Nil")
require.NotNil(t, result[cell], "result should not be Nil")
@@ -250,7 +246,6 @@ func TestShardReplicationFix(t *testing.T) {
}
func TestGetSchema(t *testing.T) {
- defer cluster.PanicHandler(t)
res, err := clusterInstance.VtctldClientProcess.ExecuteCommandWithOutput("GetSchema",
"--include-views", "--tables", "t1,v1",
diff --git a/go/test/endtoend/tabletmanager/custom_rule_topo_test.go b/go/test/endtoend/tabletmanager/custom_rule_topo_test.go
index 0c6e056af36..e692bf94de4 100644
--- a/go/test/endtoend/tabletmanager/custom_rule_topo_test.go
+++ b/go/test/endtoend/tabletmanager/custom_rule_topo_test.go
@@ -33,7 +33,6 @@ import (
func TestTopoCustomRule(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &primaryTabletParams)
require.NoError(t, err)
diff --git a/go/test/endtoend/tabletmanager/lock_unlock_test.go b/go/test/endtoend/tabletmanager/lock_unlock_test.go
index 79286438698..f636f52c353 100644
--- a/go/test/endtoend/tabletmanager/lock_unlock_test.go
+++ b/go/test/endtoend/tabletmanager/lock_unlock_test.go
@@ -30,12 +30,10 @@ import (
"github.com/stretchr/testify/assert"
"vitess.io/vitess/go/mysql"
- "vitess.io/vitess/go/test/endtoend/cluster"
)
// TestLockAndUnlock tests the lock ability by locking a replica and asserting it does not see changes
func TestLockAndUnlock(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &primaryTabletParams)
@@ -76,7 +74,6 @@ func TestLockAndUnlock(t *testing.T) {
// TestStartReplicationUntilAfter tests by writing three rows, noting the gtid after each, and then replaying them one by one
func TestStartReplicationUntilAfter(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &primaryTabletParams)
@@ -130,7 +127,6 @@ func TestStartReplicationUntilAfter(t *testing.T) {
// TestLockAndTimeout tests that the lock times out and updates can be seen after timeout
func TestLockAndTimeout(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
primaryConn, err := mysql.Connect(ctx, &primaryTabletParams)
diff --git a/go/test/endtoend/tabletmanager/main_test.go b/go/test/endtoend/tabletmanager/main_test.go
index 3c2eb68df5e..b613f061522 100644
--- a/go/test/endtoend/tabletmanager/main_test.go
+++ b/go/test/endtoend/tabletmanager/main_test.go
@@ -79,7 +79,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -105,7 +104,6 @@ func TestMain(m *testing.M) {
"--heartbeat_enable",
"--health_check_interval", tabletHealthcheckRefreshInterval.String(),
"--unhealthy_threshold", tabletUnhealthyThreshold.String(),
- "--twopc_enable",
"--twopc_abandon_age", "200",
}
diff --git a/go/test/endtoend/tabletmanager/primary/tablet_test.go b/go/test/endtoend/tabletmanager/primary/tablet_test.go
index 297e5540fac..aaff0ff00a0 100644
--- a/go/test/endtoend/tabletmanager/primary/tablet_test.go
+++ b/go/test/endtoend/tabletmanager/primary/tablet_test.go
@@ -69,7 +69,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -116,7 +115,6 @@ func TestMain(m *testing.M) {
}
func TestRepeatedInitShardPrimary(t *testing.T) {
- defer cluster.PanicHandler(t)
// Test that using InitShardPrimary can go back and forth between 2 hosts.
// Make replica tablet as primary
@@ -155,7 +153,6 @@ func TestRepeatedInitShardPrimary(t *testing.T) {
}
func TestPrimaryRestartSetsPTSTimestamp(t *testing.T) {
- defer cluster.PanicHandler(t)
// Test that PTS timestamp is set when we restart the PRIMARY vttablet.
// PTS = PrimaryTermStart.
// See StreamHealthResponse.primary_term_start_timestamp for details.
diff --git a/go/test/endtoend/tabletmanager/qps_test.go b/go/test/endtoend/tabletmanager/qps_test.go
index 0611feada12..0ce41f04a63 100644
--- a/go/test/endtoend/tabletmanager/qps_test.go
+++ b/go/test/endtoend/tabletmanager/qps_test.go
@@ -24,12 +24,10 @@ import (
"github.com/stretchr/testify/require"
"vitess.io/vitess/go/mysql"
- "vitess.io/vitess/go/test/endtoend/cluster"
"vitess.io/vitess/go/test/endtoend/utils"
)
func TestQPS(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtParams := mysql.ConnParams{
diff --git a/go/test/endtoend/tabletmanager/replication_manager/tablet_test.go b/go/test/endtoend/tabletmanager/replication_manager/tablet_test.go
index 86b02244762..75c6e8d4cc8 100644
--- a/go/test/endtoend/tabletmanager/replication_manager/tablet_test.go
+++ b/go/test/endtoend/tabletmanager/replication_manager/tablet_test.go
@@ -73,7 +73,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -205,3 +204,13 @@ func TestReplicationRepairAfterPrimaryTabletChange(t *testing.T) {
// sidecardb should find the desired _vt schema and not apply any new creates or upgrades when the tablet comes up again
require.Equal(t, sidecarDDLCount, int64(0))
}
+
+func TestReparentJournalInfo(t *testing.T) {
+ ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
+ defer cancel()
+ for _, vttablet := range clusterInstance.Keyspaces[0].Shards[0].Vttablets {
+ length, err := tmClient.ReadReparentJournalInfo(ctx, getTablet(vttablet.GrpcPort))
+ require.NoError(t, err)
+ require.EqualValues(t, 1, length)
+ }
+}
diff --git a/go/test/endtoend/tabletmanager/tablegc/tablegc_test.go b/go/test/endtoend/tabletmanager/tablegc/tablegc_test.go
index 685c361cef7..b1abec3a6b7 100644
--- a/go/test/endtoend/tabletmanager/tablegc/tablegc_test.go
+++ b/go/test/endtoend/tabletmanager/tablegc/tablegc_test.go
@@ -83,7 +83,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/tabletmanager/tablet_health_test.go b/go/test/endtoend/tabletmanager/tablet_health_test.go
index bf3747fde29..061528682d2 100644
--- a/go/test/endtoend/tabletmanager/tablet_health_test.go
+++ b/go/test/endtoend/tabletmanager/tablet_health_test.go
@@ -39,7 +39,6 @@ import (
// TabletReshuffle test if a vttablet can be pointed at an existing mysql
func TestTabletReshuffle(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &primaryTabletParams)
@@ -92,7 +91,6 @@ func TestTabletReshuffle(t *testing.T) {
func TestHealthCheck(t *testing.T) {
// Add one replica that starts not initialized
- defer cluster.PanicHandler(t)
ctx := context.Background()
clusterInstance.DisableVTOrcRecoveries(t)
defer clusterInstance.EnableVTOrcRecoveries(t)
@@ -200,7 +198,6 @@ func TestHealthCheck(t *testing.T) {
// TestHealthCheckSchemaChangeSignal tests the tables and views, which report their schemas have changed in the output of a StreamHealth.
func TestHealthCheckSchemaChangeSignal(t *testing.T) {
// Add one replica that starts not initialized
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtParams := clusterInstance.GetVTParams(keyspaceName)
@@ -381,7 +378,6 @@ func TestHealthCheckDrainedStateDoesNotShutdownQueryService(t *testing.T) {
// - the query service won't be shutdown
// Wait if tablet is not in service state
- defer cluster.PanicHandler(t)
clusterInstance.DisableVTOrcRecoveries(t)
defer clusterInstance.EnableVTOrcRecoveries(t)
err := rdonlyTablet.VttabletProcess.WaitForTabletStatus("SERVING")
diff --git a/go/test/endtoend/tabletmanager/tablet_security_policy_test.go b/go/test/endtoend/tabletmanager/tablet_security_policy_test.go
index b3b11405abb..90397a737ef 100644
--- a/go/test/endtoend/tabletmanager/tablet_security_policy_test.go
+++ b/go/test/endtoend/tabletmanager/tablet_security_policy_test.go
@@ -29,7 +29,6 @@ import (
)
func TestFallbackSecurityPolicy(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
mTablet := clusterInstance.NewVttabletInstance("replica", 0, "")
@@ -84,7 +83,6 @@ func assertAllowedURLTest(t *testing.T, url string) {
}
func TestDenyAllSecurityPolicy(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
mTablet := clusterInstance.NewVttabletInstance("replica", 0, "")
@@ -116,7 +114,6 @@ func TestDenyAllSecurityPolicy(t *testing.T) {
}
func TestReadOnlySecurityPolicy(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
mTablet := clusterInstance.NewVttabletInstance("replica", 0, "")
diff --git a/go/test/endtoend/tabletmanager/tablet_test.go b/go/test/endtoend/tabletmanager/tablet_test.go
index 1d8e897a4d2..2ded055230f 100644
--- a/go/test/endtoend/tabletmanager/tablet_test.go
+++ b/go/test/endtoend/tabletmanager/tablet_test.go
@@ -31,7 +31,6 @@ import (
// TestEnsureDB tests that vttablet creates the db as needed
func TestEnsureDB(t *testing.T) {
- defer cluster.PanicHandler(t)
// Create new tablet
tablet := clusterInstance.NewVttabletInstance("replica", 0, "")
@@ -67,7 +66,6 @@ func TestEnsureDB(t *testing.T) {
// TestResetReplicationParameters tests that the RPC ResetReplicationParameters works as intended.
func TestResetReplicationParameters(t *testing.T) {
- defer cluster.PanicHandler(t)
// Create new tablet
tablet := clusterInstance.NewVttabletInstance("replica", 0, "")
diff --git a/go/test/endtoend/tabletmanager/throttler_topo/throttler_test.go b/go/test/endtoend/tabletmanager/throttler_topo/throttler_test.go
index 08cea643940..226238a46c6 100644
--- a/go/test/endtoend/tabletmanager/throttler_topo/throttler_test.go
+++ b/go/test/endtoend/tabletmanager/throttler_topo/throttler_test.go
@@ -100,7 +100,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -175,6 +174,16 @@ func throttledApps(tablet *cluster.Vttablet) (resp *http.Response, respBody stri
return resp, respBody, err
}
+func vitessThrottleCheck(tablet *cluster.Vttablet, skipRequestHeartbeats bool) (*vtctldatapb.CheckThrottlerResponse, error) {
+ flags := &throttle.CheckFlags{
+ Scope: base.ShardScope,
+ SkipRequestHeartbeats: skipRequestHeartbeats,
+ MultiMetricsEnabled: true,
+ }
+ resp, err := throttler.CheckThrottler(clusterInstance, tablet, throttlerapp.VitessName, flags)
+ return resp, err
+}
+
func throttleCheck(tablet *cluster.Vttablet, skipRequestHeartbeats bool) (*vtctldatapb.CheckThrottlerResponse, error) {
flags := &throttle.CheckFlags{
Scope: base.ShardScope,
@@ -215,7 +224,7 @@ func warmUpHeartbeat(t *testing.T) tabletmanagerdatapb.CheckThrottlerResponseCod
}
// waitForThrottleCheckStatus waits for the tablet to return the provided HTTP code in a throttle check
-func waitForThrottleCheckStatus(t *testing.T, tablet *cluster.Vttablet, wantCode tabletmanagerdatapb.CheckThrottlerResponseCode) bool {
+func waitForThrottleCheckStatus(t *testing.T, tablet *cluster.Vttablet, wantCode tabletmanagerdatapb.CheckThrottlerResponseCode) (*tabletmanagerdatapb.CheckThrottlerResponse, bool) {
_ = warmUpHeartbeat(t)
ctx, cancel := context.WithTimeout(context.Background(), onDemandHeartbeatDuration*4)
defer cancel()
@@ -229,11 +238,11 @@ func waitForThrottleCheckStatus(t *testing.T, tablet *cluster.Vttablet, wantCode
if wantCode == resp.Check.ResponseCode {
// Wait for any cached check values to be cleared and the new
// status value to be in effect everywhere before returning.
- return true
+ return resp.Check, true
}
select {
case <-ctx.Done():
- return assert.EqualValues(t, wantCode, resp.Check.StatusCode, "response: %+v", resp)
+ return resp.Check, false
case <-ticker.C:
}
}
@@ -258,7 +267,6 @@ func vtgateExec(t *testing.T, query string, expectError string) *sqltypes.Result
}
func TestInitialThrottler(t *testing.T) {
- defer cluster.PanicHandler(t)
t.Run("validating OK response from disabled throttler", func(t *testing.T) {
waitForThrottleCheckStatus(t, primaryTablet, tabletmanagerdatapb.CheckThrottlerResponseCode_OK)
@@ -305,6 +313,17 @@ func TestInitialThrottler(t *testing.T) {
waitForThrottleCheckStatus(t, primaryTablet, tabletmanagerdatapb.CheckThrottlerResponseCode_THRESHOLD_EXCEEDED)
})
t.Run("setting high threshold", func(t *testing.T) {
+ {
+ req := &vtctldatapb.UpdateThrottlerConfigRequest{MetricName: base.LoadAvgMetricName.String(), Threshold: 5555}
+ _, err := throttler.UpdateThrottlerTopoConfig(clusterInstance, req, nil, nil)
+ assert.NoError(t, err)
+ }
+ {
+ req := &vtctldatapb.UpdateThrottlerConfigRequest{MetricName: base.MysqldLoadAvgMetricName.String(), Threshold: 5555}
+ _, err := throttler.UpdateThrottlerTopoConfig(clusterInstance, req, nil, nil)
+ assert.NoError(t, err)
+ }
+
req := &vtctldatapb.UpdateThrottlerConfigRequest{Threshold: extremelyHighThreshold.Seconds()}
_, err := throttler.UpdateThrottlerTopoConfig(clusterInstance, req, nil, nil)
assert.NoError(t, err)
@@ -317,6 +336,19 @@ func TestInitialThrottler(t *testing.T) {
t.Run("validating OK response from throttler with high threshold", func(t *testing.T) {
waitForThrottleCheckStatus(t, primaryTablet, tabletmanagerdatapb.CheckThrottlerResponseCode_OK)
})
+ t.Run("validating vitess app throttler check", func(t *testing.T) {
+ resp, err := vitessThrottleCheck(primaryTablet, true)
+ require.NoError(t, err)
+ for _, metricName := range base.KnownMetricNames {
+ t.Run(metricName.String(), func(t *testing.T) {
+ assert.Contains(t, resp.Check.Metrics, metricName.String())
+ metric := resp.Check.Metrics[metricName.String()]
+ require.NotNil(t, metric)
+ assert.Equal(t, tabletmanagerdatapb.CheckThrottlerResponseCode_OK, metric.ResponseCode, "metric: %+v", metric)
+ })
+ }
+ })
+
t.Run("setting low threshold", func(t *testing.T) {
req := &vtctldatapb.UpdateThrottlerConfigRequest{Threshold: throttler.DefaultThreshold.Seconds()}
_, err := throttler.UpdateThrottlerTopoConfig(clusterInstance, req, nil, nil)
@@ -391,7 +423,6 @@ func TestInitialThrottler(t *testing.T) {
}
func TestThrottleViaApplySchema(t *testing.T) {
- defer cluster.PanicHandler(t)
t.Run("throttling via ApplySchema", func(t *testing.T) {
vtctlParams := &cluster.ApplySchemaParams{DDLStrategy: "online"}
_, err := clusterInstance.VtctldClientProcess.ApplySchemaWithOutput(
@@ -429,12 +460,11 @@ func TestThrottleViaApplySchema(t *testing.T) {
require.NotNil(t, keyspace.Keyspace.ThrottlerConfig.ThrottledApps)
// ThrottledApps will actually be empty at this point, but more specifically we want to see that "online-ddl" is not there.
appRule, ok := keyspace.Keyspace.ThrottlerConfig.ThrottledApps[throttlerapp.OnlineDDLName.String()]
- assert.True(t, ok, "app rule: %v", appRule)
+ assert.False(t, ok, "app rule: %v", appRule)
})
}
func TestThrottlerAfterMetricsCollected(t *testing.T) {
- defer cluster.PanicHandler(t)
// By this time metrics will have been collected. We expect no lag, and something like:
// {"StatusCode":200,"Value":0.282278,"Threshold":1,"Message":""}
@@ -463,7 +493,6 @@ func TestThrottlerAfterMetricsCollected(t *testing.T) {
}
func TestLag(t *testing.T) {
- defer cluster.PanicHandler(t)
// Temporarily disable VTOrc recoveries because we want to
// STOP replication specifically in order to increase the
// lag and we DO NOT want VTOrc to try and fix this.
@@ -602,7 +631,6 @@ func TestLag(t *testing.T) {
}
func TestNoReplicas(t *testing.T) {
- defer cluster.PanicHandler(t)
t.Run("changing replica to RDONLY", func(t *testing.T) {
err := clusterInstance.VtctldClientProcess.ExecuteCommand("ChangeTabletType", replicaTablet.Alias, "RDONLY")
assert.NoError(t, err)
@@ -620,7 +648,6 @@ func TestNoReplicas(t *testing.T) {
}
func TestCustomQuery(t *testing.T) {
- defer cluster.PanicHandler(t)
t.Run("enabling throttler with custom query and threshold", func(t *testing.T) {
req := &vtctldatapb.UpdateThrottlerConfigRequest{Enable: true, Threshold: customThreshold, CustomQuery: customQuery}
@@ -688,7 +715,6 @@ func TestCustomQuery(t *testing.T) {
}
func TestRestoreDefaultQuery(t *testing.T) {
- defer cluster.PanicHandler(t)
// Validate going back from custom-query to default-query (replication lag) still works.
t.Run("enabling throttler with default query and threshold", func(t *testing.T) {
@@ -779,16 +805,16 @@ func TestUpdateAppCheckedMetrics(t *testing.T) {
}
waitForThrottleCheckStatus(t, primaryTablet, tabletmanagerdatapb.CheckThrottlerResponseCode_THRESHOLD_EXCEEDED)
})
- t.Run("assigning 'loadavg' metrics to 'test' app", func(t *testing.T) {
+ t.Run("assigning 'threads_running' metrics to 'test' app", func(t *testing.T) {
{
- req := &vtctldatapb.UpdateThrottlerConfigRequest{MetricName: "loadavg", Threshold: 7777}
+ req := &vtctldatapb.UpdateThrottlerConfigRequest{MetricName: base.ThreadsRunningMetricName.String(), Threshold: 7777}
_, err := throttler.UpdateThrottlerTopoConfig(clusterInstance, req, nil, nil)
assert.NoError(t, err)
}
{
req := &vtctldatapb.UpdateThrottlerConfigRequest{}
appCheckedMetrics := map[string]*topodatapb.ThrottlerConfig_MetricNames{
- testAppName.String(): {Names: []string{"loadavg"}},
+ testAppName.String(): {Names: []string{base.ThreadsRunningMetricName.String()}},
}
_, err := throttler.UpdateThrottlerTopoConfig(clusterInstance, req, nil, appCheckedMetrics)
assert.NoError(t, err)
@@ -802,18 +828,18 @@ func TestUpdateAppCheckedMetrics(t *testing.T) {
for _, tablet := range []cluster.Vttablet{*primaryTablet, *replicaTablet} {
throttler.WaitForThrottlerStatusEnabled(t, &clusterInstance.VtctldClientProcess, &tablet, true, &throttler.Config{Query: throttler.DefaultQuery, Threshold: unreasonablyLowThreshold.Seconds()}, throttlerEnabledTimeout)
}
- t.Run("validating OK response from throttler since it's checking loadavg", func(t *testing.T) {
- if !waitForThrottleCheckStatus(t, primaryTablet, tabletmanagerdatapb.CheckThrottlerResponseCode_OK) {
+ t.Run("validating OK response from throttler since it's checking threads_running", func(t *testing.T) {
+ if _, ok := waitForThrottleCheckStatus(t, primaryTablet, tabletmanagerdatapb.CheckThrottlerResponseCode_OK); !ok {
t.Logf("throttler primary status: %+v", throttleStatus(t, primaryTablet))
t.Logf("throttler replica status: %+v", throttleStatus(t, replicaTablet))
}
})
})
- t.Run("assigning 'loadavg,lag' metrics to 'test' app", func(t *testing.T) {
+ t.Run("assigning 'threads_running,lag' metrics to 'test' app", func(t *testing.T) {
{
req := &vtctldatapb.UpdateThrottlerConfigRequest{}
appCheckedMetrics := map[string]*topodatapb.ThrottlerConfig_MetricNames{
- testAppName.String(): {Names: []string{"loadavg,lag"}},
+ testAppName.String(): {Names: []string{base.ThreadsRunningMetricName.String(), base.LagMetricName.String()}},
}
_, err := throttler.UpdateThrottlerTopoConfig(clusterInstance, req, nil, appCheckedMetrics)
assert.NoError(t, err)
@@ -831,9 +857,51 @@ func TestUpdateAppCheckedMetrics(t *testing.T) {
waitForThrottleCheckStatus(t, primaryTablet, tabletmanagerdatapb.CheckThrottlerResponseCode_THRESHOLD_EXCEEDED)
})
})
+ t.Run("assigning 'mysqld-loadavg,mysqld-datadir-used-ratio' metrics to 'test' app", func(t *testing.T) {
+ {
+ req := &vtctldatapb.UpdateThrottlerConfigRequest{MetricName: base.MysqldDatadirUsedRatioMetricName.String(), Threshold: 0.9999}
+ _, err := throttler.UpdateThrottlerTopoConfig(clusterInstance, req, nil, nil)
+ assert.NoError(t, err)
+ }
+ {
+ req := &vtctldatapb.UpdateThrottlerConfigRequest{MetricName: base.MysqldLoadAvgMetricName.String(), Threshold: 5555}
+ _, err := throttler.UpdateThrottlerTopoConfig(clusterInstance, req, nil, nil)
+ assert.NoError(t, err)
+ }
+ {
+ req := &vtctldatapb.UpdateThrottlerConfigRequest{}
+ appCheckedMetrics := map[string]*topodatapb.ThrottlerConfig_MetricNames{
+ testAppName.String(): {Names: []string{base.MysqldDatadirUsedRatioMetricName.String(), base.MysqldLoadAvgMetricName.String()}},
+ }
+ _, err := throttler.UpdateThrottlerTopoConfig(clusterInstance, req, nil, appCheckedMetrics)
+ assert.NoError(t, err)
+ }
+ {
+ req := &vtctldatapb.UpdateThrottlerConfigRequest{Threshold: extremelyHighThreshold.Seconds()}
+ _, err := throttler.UpdateThrottlerTopoConfig(clusterInstance, req, nil, nil)
+ assert.NoError(t, err)
+ }
+ // Wait for the throttler to be enabled everywhere with new config.
+ for _, tablet := range []cluster.Vttablet{*primaryTablet, *replicaTablet} {
+ throttler.WaitForThrottlerStatusEnabled(t, &clusterInstance.VtctldClientProcess, &tablet, true, &throttler.Config{Query: throttler.DefaultQuery, Threshold: extremelyHighThreshold.Seconds()}, throttlerEnabledTimeout)
+ }
+ t.Run("validating OK response from throttler since it's checking mysqld-loadavg,mysqld-datadir-used-ratio", func(t *testing.T) {
+ resp, ok := waitForThrottleCheckStatus(t, primaryTablet, tabletmanagerdatapb.CheckThrottlerResponseCode_OK)
+ if !ok {
+ t.Logf("response: %+v", resp)
+ t.Logf("throttler primary status: %+v", throttleStatus(t, primaryTablet))
+ t.Logf("throttler replica status: %+v", throttleStatus(t, replicaTablet))
+ }
+ require.Contains(t, resp.Metrics, base.MysqldDatadirUsedRatioMetricName.String())
+ require.Contains(t, resp.Metrics, base.MysqldLoadAvgMetricName.String())
+ assert.NotContains(t, resp.Metrics, base.ThreadsRunningMetricName.String())
+
+ assert.NotZero(t, resp.Metrics[base.MysqldDatadirUsedRatioMetricName.String()].Value)
+ })
+ })
t.Run("removing assignment from 'test' app and restoring defaults", func(t *testing.T) {
{
- req := &vtctldatapb.UpdateThrottlerConfigRequest{MetricName: "loadavg", Threshold: 0}
+ req := &vtctldatapb.UpdateThrottlerConfigRequest{MetricName: base.ThreadsRunningMetricName.String(), Threshold: 0}
_, err := throttler.UpdateThrottlerTopoConfig(clusterInstance, req, nil, nil)
assert.NoError(t, err)
}
diff --git a/go/test/endtoend/throttler/util.go b/go/test/endtoend/throttler/util.go
index fccad19c324..a426355e01c 100644
--- a/go/test/endtoend/throttler/util.go
+++ b/go/test/endtoend/throttler/util.go
@@ -529,7 +529,7 @@ func WaitForValidData(t *testing.T, tablet *cluster.Vttablet, timeout time.Durat
selfCheckURL := fmt.Sprintf("http://localhost:%d/throttler/check-self", tablet.HTTPPort)
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
- ticker := time.NewTicker(500 * time.Millisecond)
+ ticker := time.NewTicker(time.Second)
defer ticker.Stop()
for {
@@ -548,8 +548,10 @@ func WaitForValidData(t *testing.T, tablet *cluster.Vttablet, timeout time.Durat
}
select {
case <-ctx.Done():
- t.Errorf("timed out waiting for %s tablet's throttler to return a valid result after %v; last seen value: %+v",
- tablet.Alias, timeout, checkResp)
+ respByte, _ := io.ReadAll(checkResp.Body)
+ body := string(respByte)
+ require.Failf(t, "time out", "waiting for %s tablet's throttler to return a valid result after %v; last seen result: %+v",
+ tablet.Alias, timeout, body)
return
case <-ticker.C:
}
diff --git a/go/test/endtoend/topoconncache/main_test.go b/go/test/endtoend/topoconncache/main_test.go
index 26eb3918a0b..074bf875165 100644
--- a/go/test/endtoend/topoconncache/main_test.go
+++ b/go/test/endtoend/topoconncache/main_test.go
@@ -97,7 +97,6 @@ Topology: We create a keyspace with two shards , having 3 tablets each. Primarie
to 'zone1' and replicas/rdonly belongs to cell2.
*/
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitcode, err := func() (int, error) {
diff --git a/go/test/endtoend/topoconncache/topo_conn_cache_test.go b/go/test/endtoend/topoconncache/topo_conn_cache_test.go
index 082ecc5717f..f676af318cd 100644
--- a/go/test/endtoend/topoconncache/topo_conn_cache_test.go
+++ b/go/test/endtoend/topoconncache/topo_conn_cache_test.go
@@ -37,7 +37,6 @@ import (
4. 'ListAllTablets' should return all the new tablets.
*/
func TestVtctldListAllTablets(t *testing.T) {
- defer cluster.PanicHandler(t)
url := fmt.Sprintf("http://%s:%d/api/keyspaces/", clusterInstance.Hostname, clusterInstance.VtctldHTTPPort)
testURL(t, url, "keyspace url")
diff --git a/go/test/endtoend/topotest/consul/main_test.go b/go/test/endtoend/topotest/consul/main_test.go
index 0f6fa6ce554..c6d48f44930 100644
--- a/go/test/endtoend/topotest/consul/main_test.go
+++ b/go/test/endtoend/topotest/consul/main_test.go
@@ -63,7 +63,6 @@ CREATE TABLE t1 (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -99,7 +98,6 @@ func TestMain(m *testing.M) {
}
func TestTopoRestart(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtParams := mysql.ConnParams{
Host: "localhost",
diff --git a/go/test/endtoend/topotest/etcd2/main_test.go b/go/test/endtoend/topotest/etcd2/main_test.go
index 67b0dbbc8f7..ee2b542109b 100644
--- a/go/test/endtoend/topotest/etcd2/main_test.go
+++ b/go/test/endtoend/topotest/etcd2/main_test.go
@@ -64,7 +64,6 @@ CREATE TABLE t1 (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -99,7 +98,6 @@ func TestMain(m *testing.M) {
}
func TestTopoDownServingQuery(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtParams := mysql.ConnParams{
Host: "localhost",
diff --git a/go/test/endtoend/topotest/zk2/main_test.go b/go/test/endtoend/topotest/zk2/main_test.go
index 48636331747..c6569519a3d 100644
--- a/go/test/endtoend/topotest/zk2/main_test.go
+++ b/go/test/endtoend/topotest/zk2/main_test.go
@@ -63,7 +63,6 @@ CREATE TABLE t1 (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -99,7 +98,6 @@ func TestMain(m *testing.M) {
}
func TestTopoDownServingQuery(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtParams := mysql.ConnParams{
Host: "localhost",
diff --git a/go/test/endtoend/transaction/restart/main_test.go b/go/test/endtoend/transaction/restart/main_test.go
index 01185b5fa59..caa3111ad49 100644
--- a/go/test/endtoend/transaction/restart/main_test.go
+++ b/go/test/endtoend/transaction/restart/main_test.go
@@ -41,7 +41,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/transaction/rollback/txn_rollback_shutdown_test.go b/go/test/endtoend/transaction/rollback/txn_rollback_shutdown_test.go
index 2dff9f7b95f..c7bef098c05 100644
--- a/go/test/endtoend/transaction/rollback/txn_rollback_shutdown_test.go
+++ b/go/test/endtoend/transaction/rollback/txn_rollback_shutdown_test.go
@@ -48,7 +48,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -87,7 +86,6 @@ func TestMain(m *testing.M) {
}
func TestTransactionRollBackWhenShutDown(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
require.NoError(t, err)
@@ -122,7 +120,6 @@ func TestTransactionRollBackWhenShutDown(t *testing.T) {
}
func TestErrorInAutocommitSession(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
require.NoError(t, err)
diff --git a/go/test/endtoend/transaction/single/main_test.go b/go/test/endtoend/transaction/single/main_test.go
index ec2dbd6378a..1eab3cea276 100644
--- a/go/test/endtoend/transaction/single/main_test.go
+++ b/go/test/endtoend/transaction/single/main_test.go
@@ -46,7 +46,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/transaction/twopc/fuzz/fuzzer_test.go b/go/test/endtoend/transaction/twopc/fuzz/fuzzer_test.go
index c908a99e631..da6486242df 100644
--- a/go/test/endtoend/transaction/twopc/fuzz/fuzzer_test.go
+++ b/go/test/endtoend/transaction/twopc/fuzz/fuzzer_test.go
@@ -21,6 +21,7 @@ import (
"fmt"
"os"
"path"
+ "slices"
"strconv"
"strings"
"sync"
@@ -52,7 +53,9 @@ var (
}
insertIntoFuzzUpdate = "INSERT INTO twopc_fuzzer_update (id, col) VALUES (%d, %d)"
+ insertIntoFuzzMulti = "INSERT INTO twopc_fuzzer_multi (id) VALUES (%d)"
updateFuzzUpdate = "UPDATE twopc_fuzzer_update SET col = col + %d WHERE id = %d"
+ updateFuzzUpdateMulti = "UPDATE twopc_fuzzer_update join twopc_fuzzer_multi using (id) SET col = col + %d WHERE id = %d"
insertIntoFuzzInsert = "INSERT INTO twopc_fuzzer_insert (id, updateSet, threadId) VALUES (%d, %d, %d)"
selectFromFuzzUpdate = "SELECT col FROM twopc_fuzzer_update WHERE id = %d"
selectIdFromFuzzInsert = "SELECT threadId FROM twopc_fuzzer_insert WHERE updateSet = %d AND id = %d ORDER BY col"
@@ -126,7 +129,18 @@ func TestTwoPCFuzzTest(t *testing.T) {
fz.start(t)
// Wait for the timeForTesting so that the threads continue to run.
- time.Sleep(tt.timeForTesting)
+ timeout := time.After(tt.timeForTesting)
+ loop := true
+ for loop {
+ select {
+ case <-timeout:
+ loop = false
+ case <-time.After(1 * time.Second):
+ if t.Failed() {
+ loop = false
+ }
+ }
+ }
// Signal the fuzzer to stop.
fz.stop()
@@ -282,6 +296,10 @@ func (fz *fuzzer) initialize(t *testing.T, conn *mysql.Conn) {
for _, id := range updateSet {
_, err := conn.ExecuteFetch(fmt.Sprintf(insertIntoFuzzUpdate, id, 0), 0, false)
require.NoError(t, err)
+ // We insert the same id values in multi table as we in the update table. We use this for running
+ // multi-table updates and inserts.
+ _, err = conn.ExecuteFetch(fmt.Sprintf(insertIntoFuzzMulti, id), 0, false)
+ require.NoError(t, err)
}
}
}
@@ -302,9 +320,11 @@ func (fz *fuzzer) generateAndExecuteTransaction(threadId int) {
// for each update set ordered by the auto increment column will not be true.
// That assertion depends on all the transactions running updates first to ensure that for any given update set,
// no two transactions are running the insert queries.
- queries := []string{"begin"}
+ var queries []string
queries = append(queries, fz.generateUpdateQueries(updateSetVal, incrementVal)...)
queries = append(queries, fz.generateInsertQueries(updateSetVal, threadId)...)
+ queries = fz.addRandomSavePoints(queries)
+ queries = append([]string{"begin"}, queries...)
finalCommand := "commit"
for _, query := range queries {
_, err := conn.ExecuteFetch(query, 0, false)
@@ -317,12 +337,20 @@ func (fz *fuzzer) generateAndExecuteTransaction(threadId int) {
_, _ = conn.ExecuteFetch(finalCommand, 0, false)
}
+func getUpdateQuery(incrementVal int32, id int) string {
+ if rand.Intn(2) == 1 {
+ return fmt.Sprintf(updateFuzzUpdateMulti, incrementVal, id)
+ }
+ return fmt.Sprintf(updateFuzzUpdate, incrementVal, id)
+}
+
// generateUpdateQueries generates the queries to run updates on the twopc_fuzzer_update table.
// It takes the update set index and the value to increment the set by.
func (fz *fuzzer) generateUpdateQueries(updateSet int, incrementVal int32) []string {
var queries []string
for _, id := range fz.updateRowsVals[updateSet] {
- queries = append(queries, fmt.Sprintf(updateFuzzUpdate, incrementVal, id))
+ // Use multi table DML queries half the time.
+ queries = append(queries, getUpdateQuery(incrementVal, id))
}
rand.Shuffle(len(queries), func(i, j int) {
queries[i], queries[j] = queries[j], queries[i]
@@ -377,6 +405,45 @@ func (fz *fuzzer) runClusterDisruption(t *testing.T) {
}
}
+// addRandomSavePoints will add random savepoints and queries to the list of queries.
+// It still ensures that all the new queries added are rolledback so that the assertions of queries
+// don't change.
+func (fz *fuzzer) addRandomSavePoints(queries []string) []string {
+ savePointCount := 1
+ for {
+ shouldAddSavePoint := rand.Intn(2)
+ if shouldAddSavePoint == 0 {
+ return queries
+ }
+
+ savePointQueries := []string{"SAVEPOINT sp" + strconv.Itoa(savePointCount)}
+ randomDmlCount := rand.Intn(2) + 1
+ for i := 0; i < randomDmlCount; i++ {
+ savePointQueries = append(savePointQueries, fz.randomDML())
+ }
+ savePointQueries = append(savePointQueries, "ROLLBACK TO sp"+strconv.Itoa(savePointCount))
+ savePointCount++
+
+ savePointPosition := rand.Intn(len(queries))
+ newQueries := slices.Clone(queries[:savePointPosition])
+ newQueries = append(newQueries, savePointQueries...)
+ newQueries = append(newQueries, queries[savePointPosition:]...)
+ queries = newQueries
+ }
+}
+
+// randomDML generates a random DML to be used.
+func (fz *fuzzer) randomDML() string {
+ queryType := rand.Intn(2)
+ if queryType == 0 {
+ // Generate INSERT
+ return fmt.Sprintf(insertIntoFuzzInsert, updateRowBaseVals[rand.Intn(len(updateRowBaseVals))], rand.Intn(fz.updateSets), rand.Intn(fz.threads))
+ }
+ // Generate UPDATE
+ updateId := fz.updateRowsVals[rand.Intn(len(fz.updateRowsVals))][rand.Intn(len(updateRowBaseVals))]
+ return getUpdateQuery(rand.Int31n(100000), updateId)
+}
+
/*
Cluster Level Disruptions for the fuzzer
*/
diff --git a/go/test/endtoend/transaction/twopc/fuzz/main_test.go b/go/test/endtoend/transaction/twopc/fuzz/main_test.go
index 1b05615d51a..4d168fbdde0 100644
--- a/go/test/endtoend/transaction/twopc/fuzz/main_test.go
+++ b/go/test/endtoend/transaction/twopc/fuzz/main_test.go
@@ -48,7 +48,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitcode := func() int {
@@ -70,7 +69,6 @@ func TestMain(m *testing.M) {
"--tablet_refresh_interval", "2s",
)
clusterInstance.VtTabletExtraArgs = append(clusterInstance.VtTabletExtraArgs,
- "--twopc_enable",
"--twopc_abandon_age", "1",
"--migration_check_interval", "2s",
)
@@ -122,9 +120,9 @@ func start(t *testing.T) (*mysql.Conn, func()) {
}
func cleanup(t *testing.T) {
- cluster.PanicHandler(t)
utils.ClearOutTable(t, vtParams, "twopc_fuzzer_insert")
utils.ClearOutTable(t, vtParams, "twopc_fuzzer_update")
+ utils.ClearOutTable(t, vtParams, "twopc_fuzzer_multi")
utils.ClearOutTable(t, vtParams, "twopc_t1")
}
diff --git a/go/test/endtoend/transaction/twopc/fuzz/schema.sql b/go/test/endtoend/transaction/twopc/fuzz/schema.sql
index 5173166bfd4..b070466087d 100644
--- a/go/test/endtoend/transaction/twopc/fuzz/schema.sql
+++ b/go/test/endtoend/transaction/twopc/fuzz/schema.sql
@@ -4,6 +4,11 @@ create table twopc_fuzzer_update (
primary key (id)
) Engine=InnoDB;
+create table twopc_fuzzer_multi (
+ id bigint,
+ primary key (id)
+) Engine=InnoDB;
+
create table twopc_fuzzer_insert (
id bigint,
updateSet bigint,
diff --git a/go/test/endtoend/transaction/twopc/fuzz/vschema.json b/go/test/endtoend/transaction/twopc/fuzz/vschema.json
index 415b5958f54..83107bc96ff 100644
--- a/go/test/endtoend/transaction/twopc/fuzz/vschema.json
+++ b/go/test/endtoend/transaction/twopc/fuzz/vschema.json
@@ -3,6 +3,9 @@
"vindexes": {
"reverse_bits": {
"type": "reverse_bits"
+ },
+ "xxhash": {
+ "type": "xxhash"
}
},
"tables": {
@@ -22,6 +25,14 @@
}
]
},
+ "twopc_fuzzer_multi": {
+ "column_vindexes": [
+ {
+ "column": "id",
+ "name": "xxhash"
+ }
+ ]
+ },
"twopc_t1": {
"column_vindexes": [
{
diff --git a/go/test/endtoend/transaction/twopc/main_test.go b/go/test/endtoend/transaction/twopc/main_test.go
index 9a46562d1c7..58fe45547a5 100644
--- a/go/test/endtoend/transaction/twopc/main_test.go
+++ b/go/test/endtoend/transaction/twopc/main_test.go
@@ -24,16 +24,19 @@ import (
"fmt"
"io"
"os"
+ "strings"
"sync"
"testing"
"time"
"github.com/stretchr/testify/require"
+ "vitess.io/vitess/go/test/endtoend/utils"
+
"vitess.io/vitess/go/mysql"
"vitess.io/vitess/go/sqltypes"
"vitess.io/vitess/go/test/endtoend/cluster"
- "vitess.io/vitess/go/test/endtoend/transaction/twopc/utils"
+ twopcutil "vitess.io/vitess/go/test/endtoend/transaction/twopc/utils"
binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata"
querypb "vitess.io/vitess/go/vt/proto/query"
topodatapb "vitess.io/vitess/go/vt/proto/topodata"
@@ -42,6 +45,7 @@ import (
var (
clusterInstance *cluster.LocalProcessCluster
+ mysqlParams mysql.ConnParams
vtParams mysql.ConnParams
vtgateGrpcAddress string
keyspaceName = "ks"
@@ -57,7 +61,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitcode := func() int {
@@ -78,9 +81,10 @@ func TestMain(m *testing.M) {
"--grpc_use_effective_callerid",
)
clusterInstance.VtTabletExtraArgs = append(clusterInstance.VtTabletExtraArgs,
- "--twopc_enable",
"--twopc_abandon_age", "1",
"--queryserver-config-transaction-cap", "3",
+ "--queryserver-config-transaction-timeout", "400s",
+ "--queryserver-config-query-timeout", "9000s",
)
// Start keyspace
@@ -102,6 +106,20 @@ func TestMain(m *testing.M) {
vtParams = clusterInstance.GetVTParams(keyspaceName)
vtgateGrpcAddress = fmt.Sprintf("%s:%d", clusterInstance.Hostname, clusterInstance.VtgateGrpcPort)
+ clusterInstance.NewVTAdminProcess()
+ if err := clusterInstance.VtadminProcess.Setup(); err != nil {
+ return 1
+ }
+
+ // create mysql instance and connection parameters
+ conn, closer, err := utils.NewMySQL(clusterInstance, keyspaceName, SchemaSQL)
+ if err != nil {
+ fmt.Println(err)
+ return 1
+ }
+ defer closer()
+ mysqlParams = conn
+
return m.Run()
}()
os.Exit(exitcode)
@@ -120,9 +138,34 @@ func start(t *testing.T) (*mysql.Conn, func()) {
}
func cleanup(t *testing.T) {
- cluster.PanicHandler(t)
- utils.ClearOutTable(t, vtParams, "twopc_user")
- utils.ClearOutTable(t, vtParams, "twopc_t1")
+ twopcutil.ClearOutTable(t, vtParams, "twopc_user")
+ twopcutil.ClearOutTable(t, vtParams, "twopc_t1")
+ twopcutil.ClearOutTable(t, vtParams, "twopc_lookup")
+ twopcutil.ClearOutTable(t, vtParams, "lookup_unique")
+ twopcutil.ClearOutTable(t, vtParams, "lookup")
+ twopcutil.ClearOutTable(t, vtParams, "twopc_consistent_lookup")
+ twopcutil.ClearOutTable(t, vtParams, "consistent_lookup_unique")
+ twopcutil.ClearOutTable(t, vtParams, "consistent_lookup")
+ sm.reset()
+}
+
+func startWithMySQL(t *testing.T) (utils.MySQLCompare, func()) {
+ mcmp, err := utils.NewMySQLCompare(t, vtParams, mysqlParams)
+ require.NoError(t, err)
+
+ deleteAll := func() {
+ tables := []string{"twopc_user"}
+ for _, table := range tables {
+ _, _ = mcmp.ExecAndIgnore("delete from " + table)
+ }
+ }
+
+ deleteAll()
+
+ return mcmp, func() {
+ deleteAll()
+ mcmp.Close()
+ }
}
type extractInterestingValues func(dtidMap map[string]string, vals []sqltypes.Value) []sqltypes.Value
@@ -147,7 +190,8 @@ var tables = map[string]extractInterestingValues{
},
"ks.redo_statement": func(dtidMap map[string]string, vals []sqltypes.Value) (out []sqltypes.Value) {
dtid := getDTID(dtidMap, vals[0].ToString())
- out = append([]sqltypes.Value{sqltypes.NewVarChar(dtid)}, vals[1:]...)
+ stmt := getStatement(vals[2].ToString())
+ out = append([]sqltypes.Value{sqltypes.NewVarChar(dtid)}, vals[1], sqltypes.TestValue(sqltypes.Blob, stmt))
return
},
"ks.twopc_user": func(_ map[string]string, vals []sqltypes.Value) []sqltypes.Value { return vals },
@@ -167,25 +211,44 @@ func getDTID(dtidMap map[string]string, dtKey string) string {
return dtid
}
+func getStatement(stmt string) string {
+ var sKey string
+ var prefix string
+ switch {
+ case strings.HasPrefix(stmt, "savepoint"):
+ prefix = "savepoint-"
+ sKey = stmt[9:]
+ case strings.HasPrefix(stmt, "rollback to"):
+ prefix = "rollback-"
+ sKey = stmt[11:]
+ default:
+ return stmt
+ }
+
+ sid, exists := sm.stmt[sKey]
+ if !exists {
+ sid = fmt.Sprintf("%d", len(sm.stmt)+1)
+ sm.stmt[sKey] = sid
+ }
+ return prefix + sid
+}
+
func runVStream(t *testing.T, ctx context.Context, ch chan *binlogdatapb.VEvent, vtgateConn *vtgateconn.VTGateConn) {
- vgtid := &binlogdatapb.VGtid{
- ShardGtids: []*binlogdatapb.ShardGtid{
- {Keyspace: keyspaceName, Shard: "-40", Gtid: "current"},
- {Keyspace: keyspaceName, Shard: "40-80", Gtid: "current"},
- {Keyspace: keyspaceName, Shard: "80-", Gtid: "current"},
- }}
- filter := &binlogdatapb.Filter{
- Rules: []*binlogdatapb.Rule{{
- Match: "/.*/",
- }},
+ shards := []string{"-40", "40-80", "80-"}
+ shardGtids := make([]*binlogdatapb.ShardGtid, 0, len(shards))
+ var seen = make(map[string]bool, len(shards))
+ var wg sync.WaitGroup
+ for _, shard := range shards {
+ shardGtids = append(shardGtids, &binlogdatapb.ShardGtid{Keyspace: keyspaceName, Shard: shard, Gtid: "current"})
+ seen[shard] = false
+ wg.Add(1)
}
+ vgtid := &binlogdatapb.VGtid{ShardGtids: shardGtids}
+ filter := &binlogdatapb.Filter{Rules: []*binlogdatapb.Rule{{Match: "/.*/"}}}
+
vReader, err := vtgateConn.VStream(ctx, topodatapb.TabletType_PRIMARY, vgtid, filter, nil)
require.NoError(t, err)
- // Use a channel to signal that the first VGTID event has been processed
- firstEventProcessed := make(chan struct{})
- var once sync.Once
-
go func() {
for {
evs, err := vReader.Recv()
@@ -195,9 +258,12 @@ func runVStream(t *testing.T, ctx context.Context, ch chan *binlogdatapb.VEvent,
require.NoError(t, err)
for _, ev := range evs {
- // Signal the first event has been processed using sync.Once
+ // Mark VGTID event from each shard seen.
if ev.Type == binlogdatapb.VEventType_VGTID {
- once.Do(func() { close(firstEventProcessed) })
+ if !seen[ev.Shard] {
+ seen[ev.Shard] = true
+ wg.Done()
+ }
}
if ev.Type == binlogdatapb.VEventType_ROW || ev.Type == binlogdatapb.VEventType_FIELD {
ch <- ev
@@ -206,8 +272,8 @@ func runVStream(t *testing.T, ctx context.Context, ch chan *binlogdatapb.VEvent,
}
}()
- // Wait for the first event to be processed
- <-firstEventProcessed
+ // Wait for VGTID event from all shards
+ wg.Wait()
}
func retrieveTransitions(t *testing.T, ch chan *binlogdatapb.VEvent, tableMap map[string][]*querypb.Field, dtMap map[string]string) map[string][]string {
@@ -272,3 +338,13 @@ func prettyPrint(v interface{}) string {
}
return string(b)
}
+
+type stmtMapper struct {
+ stmt map[string]string
+}
+
+var sm = &stmtMapper{stmt: make(map[string]string)}
+
+func (sm *stmtMapper) reset() {
+ sm.stmt = make(map[string]string)
+}
diff --git a/go/test/endtoend/transaction/twopc/metric/main_test.go b/go/test/endtoend/transaction/twopc/metric/main_test.go
new file mode 100644
index 00000000000..61a43017ef9
--- /dev/null
+++ b/go/test/endtoend/transaction/twopc/metric/main_test.go
@@ -0,0 +1,114 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package transaction
+
+import (
+ "context"
+ _ "embed"
+ "flag"
+ "fmt"
+ "os"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+
+ "vitess.io/vitess/go/mysql"
+ "vitess.io/vitess/go/test/endtoend/cluster"
+ twopcutil "vitess.io/vitess/go/test/endtoend/transaction/twopc/utils"
+)
+
+var (
+ clusterInstance *cluster.LocalProcessCluster
+ vtParams mysql.ConnParams
+ vtgateGrpcAddress string
+ keyspaceName = "ks"
+ cell = "zone1"
+ hostname = "localhost"
+ sidecarDBName = "vt_ks"
+
+ //go:embed schema.sql
+ SchemaSQL string
+
+ //go:embed vschema.json
+ VSchema string
+)
+
+func TestMain(m *testing.M) {
+ flag.Parse()
+
+ exitcode := func() int {
+ clusterInstance = cluster.NewCluster(cell, hostname)
+ defer clusterInstance.Teardown()
+
+ // Start topo server
+ if err := clusterInstance.StartTopo(); err != nil {
+ return 1
+ }
+
+ // Reserve vtGate port in order to pass it to vtTablet
+ clusterInstance.VtgateGrpcPort = clusterInstance.GetAndReservePort()
+
+ // Set extra args for twopc
+ clusterInstance.VtGateExtraArgs = append(clusterInstance.VtGateExtraArgs,
+ "--transaction_mode", "TWOPC",
+ "--grpc_use_effective_callerid",
+ )
+ clusterInstance.VtTabletExtraArgs = append(clusterInstance.VtTabletExtraArgs,
+ "--twopc_abandon_age", "1",
+ "--queryserver-config-transaction-cap", "100",
+ )
+
+ // Start keyspace
+ keyspace := &cluster.Keyspace{
+ Name: keyspaceName,
+ SchemaSQL: SchemaSQL,
+ VSchema: VSchema,
+ SidecarDBName: sidecarDBName,
+ DurabilityPolicy: "semi_sync",
+ }
+ if err := clusterInstance.StartKeyspace(*keyspace, []string{"-40", "40-80", "80-"}, 2, false); err != nil {
+ return 1
+ }
+
+ // Start Vtgate
+ if err := clusterInstance.StartVtgate(); err != nil {
+ return 1
+ }
+ vtParams = clusterInstance.GetVTParams(keyspaceName)
+ vtgateGrpcAddress = fmt.Sprintf("%s:%d", clusterInstance.Hostname, clusterInstance.VtgateGrpcPort)
+
+ return m.Run()
+ }()
+ os.Exit(exitcode)
+}
+
+func start(t *testing.T) (*mysql.Conn, func()) {
+ ctx := context.Background()
+ conn, err := mysql.Connect(ctx, &vtParams)
+ require.NoError(t, err)
+ cleanup(t)
+
+ return conn, func() {
+ conn.Close()
+ cleanup(t)
+ }
+}
+
+func cleanup(t *testing.T) {
+ twopcutil.ClearOutTable(t, vtParams, "twopc_user")
+ twopcutil.ClearOutTable(t, vtParams, "twopc_t1")
+}
diff --git a/go/test/endtoend/transaction/twopc/metric/metric_test.go b/go/test/endtoend/transaction/twopc/metric/metric_test.go
new file mode 100644
index 00000000000..40645628f45
--- /dev/null
+++ b/go/test/endtoend/transaction/twopc/metric/metric_test.go
@@ -0,0 +1,396 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package transaction
+
+import (
+ "context"
+ "fmt"
+ "strings"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+
+ "vitess.io/vitess/go/test/endtoend/cluster"
+ twopcutil "vitess.io/vitess/go/test/endtoend/transaction/twopc/utils"
+ "vitess.io/vitess/go/test/endtoend/utils"
+ "vitess.io/vitess/go/vt/callerid"
+ "vitess.io/vitess/go/vt/vtgate/vtgateconn"
+)
+
+// TestTransactionModes tests transactions using twopc mode
+func TestTransactionModeMetrics(t *testing.T) {
+ conn, closer := start(t)
+ defer closer()
+
+ tcases := []struct {
+ name string
+ stmts []string
+ want commitMetric
+ }{{
+ name: "nothing to commit: so no change on vars",
+ stmts: []string{"commit"},
+ }, {
+ name: "begin commit - no dml: so no change on vars",
+ stmts: []string{"begin", "commit"},
+ }, {
+ name: "single shard",
+ stmts: []string{
+ "begin",
+ "insert into twopc_user(id) values (1)",
+ "commit",
+ },
+ want: commitMetric{TotalCount: 1, SingleCount: 1},
+ }, {
+ name: "multi shard insert",
+ stmts: []string{
+ "begin",
+ "insert into twopc_user(id) values (7),(8)",
+ "commit",
+ },
+ want: commitMetric{TotalCount: 1, MultiCount: 1, TwoPCCount: 1},
+ }, {
+ name: "multi shard delete",
+ stmts: []string{
+ "begin",
+ "delete from twopc_user",
+ "commit",
+ },
+ want: commitMetric{TotalCount: 1, MultiCount: 1, TwoPCCount: 1},
+ }}
+
+ initial := getCommitMetric(t)
+ utils.Exec(t, conn, "set transaction_mode = multi")
+ for _, tc := range tcases {
+ t.Run(tc.name, func(t *testing.T) {
+ for _, stmt := range tc.stmts {
+ utils.Exec(t, conn, stmt)
+ }
+ updatedMetric := getCommitMetric(t)
+ assert.EqualValues(t, tc.want.TotalCount, updatedMetric.TotalCount-initial.TotalCount, "TotalCount")
+ assert.EqualValues(t, tc.want.SingleCount, updatedMetric.SingleCount-initial.SingleCount, "SingleCount")
+ assert.EqualValues(t, tc.want.MultiCount, updatedMetric.MultiCount-initial.MultiCount, "MultiCount")
+ assert.Zero(t, updatedMetric.TwoPCCount-initial.TwoPCCount, "TwoPCCount")
+ initial = updatedMetric
+ })
+ }
+
+ utils.Exec(t, conn, "set transaction_mode = twopc")
+ for _, tc := range tcases {
+ t.Run(tc.name, func(t *testing.T) {
+ for _, stmt := range tc.stmts {
+ utils.Exec(t, conn, stmt)
+ }
+ updatedMetric := getCommitMetric(t)
+ assert.EqualValues(t, tc.want.TotalCount, updatedMetric.TotalCount-initial.TotalCount, "TotalCount")
+ assert.EqualValues(t, tc.want.SingleCount, updatedMetric.SingleCount-initial.SingleCount, "SingleCount")
+ assert.Zero(t, updatedMetric.MultiCount-initial.MultiCount, "MultiCount")
+ assert.EqualValues(t, tc.want.TwoPCCount, updatedMetric.TwoPCCount-initial.TwoPCCount, "TwoPCCount")
+ initial = updatedMetric
+ })
+ }
+}
+
+// TestVTGate2PCCommitMetricOnFailure tests unresolved commit metrics on VTGate.
+func TestVTGate2PCCommitMetricOnFailure(t *testing.T) {
+ defer cleanup(t)
+
+ initialCount := getVarValue[float64](t, "CommitUnresolved", clusterInstance.VtgateProcess.GetVars)
+
+ vtgateConn, err := cluster.DialVTGate(context.Background(), t.Name(), vtgateGrpcAddress, "dt_user", "")
+ require.NoError(t, err)
+ defer vtgateConn.Close()
+
+ conn := vtgateConn.Session("", nil)
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+
+ _, err = conn.Execute(ctx, "begin", nil)
+ require.NoError(t, err)
+ _, err = conn.Execute(ctx, "insert into twopc_user(id, name) values(7,'foo'), (8,'bar')", nil)
+ require.NoError(t, err)
+
+ // fail after mm commit.
+ newCtx := callerid.NewContext(ctx, callerid.NewEffectiveCallerID("MMCommitted_FailNow", "", ""), nil)
+ _, err = conn.Execute(newCtx, "commit", nil)
+ require.ErrorContains(t, err, "Fail After MM commit")
+
+ updatedCount := getVarValue[float64](t, "CommitUnresolved", clusterInstance.VtgateProcess.GetVars)
+ assert.EqualValues(t, 1, updatedCount-initialCount, "CommitUnresolved")
+
+ waitForResolve(ctx, t, conn, 5*time.Second)
+
+ _, err = conn.Execute(ctx, "begin", nil)
+ require.NoError(t, err)
+ _, err = conn.Execute(ctx, "insert into twopc_user(id, name) values(9,'foo')", nil)
+ require.NoError(t, err)
+ _, err = conn.Execute(ctx, "insert into twopc_user(id, name) values(10,'apa')", nil)
+ require.NoError(t, err)
+
+ // fail during rm commit.
+ newCtx = callerid.NewContext(ctx, callerid.NewEffectiveCallerID("RMCommit_-40_FailNow", "", ""), nil)
+ _, err = conn.Execute(newCtx, "commit", nil)
+ require.ErrorContains(t, err, "Fail During RM commit")
+
+ updatedCount = getVarValue[float64](t, "CommitUnresolved", clusterInstance.VtgateProcess.GetVars)
+ assert.EqualValues(t, 2, updatedCount-initialCount, "CommitUnresolved")
+
+ waitForResolve(ctx, t, conn, 5*time.Second)
+}
+
+// TestVTTablet2PCMetrics tests 2pc metrics on VTTablet.
+func TestVTTablet2PCMetrics(t *testing.T) {
+ defer cleanup(t)
+
+ vtgateConn, err := cluster.DialVTGate(context.Background(), t.Name(), vtgateGrpcAddress, "dt_user", "")
+ require.NoError(t, err)
+ defer vtgateConn.Close()
+
+ conn := vtgateConn.Session("", nil)
+ ctx, cancel := context.WithCancel(context.Background())
+ ctx = callerid.NewContext(ctx, callerid.NewEffectiveCallerID("MMCommitted_FailNow", "", ""), nil)
+ defer cancel()
+
+ for i := 1; i <= 20; i++ {
+ _, err = conn.Execute(ctx, "begin", nil)
+ require.NoError(t, err)
+ query := fmt.Sprintf("insert into twopc_user(id, name) values(%d,'foo'), (%d,'bar'), (%d,'baz')", i, i*101, i+53)
+ _, err = conn.Execute(ctx, query, nil)
+ require.NoError(t, err)
+
+ multi := len(conn.SessionPb().ShardSessions) > 1
+
+ // fail after mm commit.
+ _, err = conn.Execute(ctx, "commit", nil)
+ if multi {
+ assert.ErrorContains(t, err, "Fail After MM commit")
+ } else {
+ assert.NoError(t, err)
+ }
+ }
+
+ waitForResolve(ctx, t, conn, 5*time.Second)
+
+ // at least 1 unresolved transaction should be seen by the gauge.
+ unresolvedCount := getUnresolvedTxCount(t)
+ assert.Greater(t, unresolvedCount, 1.0)
+
+ // after next ticker should be become zero.
+ timeout := time.After(3 * time.Second)
+ for {
+ select {
+ case <-timeout:
+ t.Errorf("unresolved transaction not reduced to zero within the time limit")
+ return
+ case <-time.After(500 * time.Millisecond):
+ unresolvedCount = getUnresolvedTxCount(t)
+ if unresolvedCount == 0 {
+ return
+ }
+ fmt.Printf("unresolved tx count: %f\n", unresolvedCount)
+ }
+ }
+}
+
+// TestVTTablet2PCMetricsFailCommitPrepared tests 2pc metrics on VTTablet on commit prepared failure..';;/
+func TestVTTablet2PCMetricsFailCommitPrepared(t *testing.T) {
+ defer cleanup(t)
+
+ vtgateConn, err := cluster.DialVTGate(context.Background(), t.Name(), vtgateGrpcAddress, "dt_user", "")
+ require.NoError(t, err)
+ defer vtgateConn.Close()
+
+ conn := vtgateConn.Session("", nil)
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+
+ newCtx := callerid.NewContext(ctx, callerid.NewEffectiveCallerID("CP_80-_R", "", ""), nil)
+ execute(t, newCtx, conn, "begin")
+ execute(t, newCtx, conn, "insert into twopc_t1(id, col) values (4, 1)")
+ execute(t, newCtx, conn, "insert into twopc_t1(id, col) values (6, 2)")
+ execute(t, newCtx, conn, "insert into twopc_t1(id, col) values (9, 3)")
+ _, err = conn.Execute(newCtx, "commit", nil)
+ require.ErrorContains(t, err, "commit prepared: retryable error")
+ dtidRetryable := getDTIDFromWarnings(ctx, t, conn)
+ require.NotEmpty(t, dtidRetryable)
+
+ cpFail := getVarValue[map[string]any](t, "CommitPreparedFail", clusterInstance.Keyspaces[0].Shards[2].FindPrimaryTablet().VttabletProcess.GetVars)
+ require.EqualValues(t, 1, cpFail["Retryable"])
+ require.Nil(t, cpFail["NonRetryable"])
+
+ newCtx = callerid.NewContext(ctx, callerid.NewEffectiveCallerID("CP_80-_NR", "", ""), nil)
+ execute(t, newCtx, conn, "begin")
+ execute(t, newCtx, conn, "insert into twopc_t1(id, col) values (20, 11)")
+ execute(t, newCtx, conn, "insert into twopc_t1(id, col) values (22, 21)")
+ execute(t, newCtx, conn, "insert into twopc_t1(id, col) values (25, 31)")
+ _, err = conn.Execute(newCtx, "commit", nil)
+ require.ErrorContains(t, err, "commit prepared: non retryable error")
+ dtidNonRetryable := getDTIDFromWarnings(ctx, t, conn)
+ require.NotEmpty(t, dtidNonRetryable)
+
+ cpFail = getVarValue[map[string]any](t, "CommitPreparedFail", clusterInstance.Keyspaces[0].Shards[2].FindPrimaryTablet().VttabletProcess.GetVars)
+ require.EqualValues(t, 1, cpFail["Retryable"]) // old counter value
+ require.EqualValues(t, 1, cpFail["NonRetryable"])
+
+ // restart to trigger unresolved transactions
+ err = clusterInstance.Keyspaces[0].Shards[2].FindPrimaryTablet().RestartOnlyTablet()
+ require.NoError(t, err)
+
+ // dtid with retryable error should be resolved.
+ waitForDTIDResolve(ctx, t, conn, dtidRetryable, 5*time.Second)
+
+ // dtid with non retryable error should remain unresolved.
+ qr, err := conn.Execute(ctx, fmt.Sprintf(`show transaction status for '%s'`, dtidNonRetryable), nil)
+ require.NoError(t, err)
+ require.NotZero(t, qr.Rows, "should remain unresolved")
+
+ // running conclude transaction for it.
+ out, err := clusterInstance.VtctldClientProcess.ExecuteCommandWithOutput(
+ "DistributedTransaction", "conclude", "--dtid", dtidNonRetryable)
+ require.NoError(t, err)
+ require.Contains(t, out, "Successfully concluded the distributed transaction")
+ // now verifying
+ qr, err = conn.Execute(ctx, fmt.Sprintf(`show transaction status for '%s'`, dtidNonRetryable), nil)
+ require.NoError(t, err)
+ require.Empty(t, qr.Rows)
+}
+
+func execute(t *testing.T, ctx context.Context, conn *vtgateconn.VTGateSession, query string) {
+ t.Helper()
+
+ _, err := conn.Execute(ctx, query, nil)
+ require.NoError(t, err)
+}
+
+func getUnresolvedTxCount(t *testing.T) float64 {
+ unresolvedCount := 0.0
+ for _, shard := range clusterInstance.Keyspaces[0].Shards {
+ unresolvedTx := getVarValue[map[string]any](t, "UnresolvedTransaction", shard.FindPrimaryTablet().VttabletProcess.GetVars)
+ if mmCount, exists := unresolvedTx["MetadataManager"]; exists {
+ unresolvedCount += mmCount.(float64)
+ }
+ if rmCount, exists := unresolvedTx["ResourceManager"]; exists {
+ unresolvedCount += rmCount.(float64)
+ }
+ }
+ return unresolvedCount
+}
+
+type commitMetric struct {
+ TotalCount float64
+ SingleCount float64
+ MultiCount float64
+ TwoPCCount float64
+}
+
+func getCommitMetric(t *testing.T) commitMetric {
+ t.Helper()
+
+ vars := clusterInstance.VtgateProcess.GetVars()
+ require.NotNil(t, vars)
+
+ cm := commitMetric{}
+ commitVars, exists := vars["CommitModeTimings"]
+ if !exists {
+ return cm
+ }
+
+ commitMap, ok := commitVars.(map[string]any)
+ require.True(t, ok, "commit vars is not a map")
+
+ cm.TotalCount = commitMap["TotalCount"].(float64)
+
+ histogram, ok := commitMap["Histograms"].(map[string]any)
+ require.True(t, ok, "commit histogram is not a map")
+
+ if single, ok := histogram["Single"]; ok {
+ singleMap, ok := single.(map[string]any)
+ require.True(t, ok, "single histogram is not a map")
+ cm.SingleCount = singleMap["Count"].(float64)
+ }
+
+ if multi, ok := histogram["Multi"]; ok {
+ multiMap, ok := multi.(map[string]any)
+ require.True(t, ok, "multi histogram is not a map")
+ cm.MultiCount = multiMap["Count"].(float64)
+ }
+
+ if twopc, ok := histogram["TwoPC"]; ok {
+ twopcMap, ok := twopc.(map[string]any)
+ require.True(t, ok, "twopc histogram is not a map")
+ cm.TwoPCCount = twopcMap["Count"].(float64)
+ }
+
+ return cm
+}
+
+func getVarValue[T any](t *testing.T, key string, varFunc func() map[string]any) T {
+ t.Helper()
+
+ vars := varFunc()
+ require.NotNil(t, vars)
+
+ value, exists := vars[key]
+ if !exists {
+ return *new(T)
+ }
+ castValue, ok := value.(T)
+ if !ok {
+ t.Errorf("unexpected type, want: %T, got %T", new(T), value)
+ }
+ return castValue
+}
+
+func waitForResolve(ctx context.Context, t *testing.T, conn *vtgateconn.VTGateSession, waitTime time.Duration) {
+ t.Helper()
+
+ dtid := getDTIDFromWarnings(ctx, t, conn)
+ waitForDTIDResolve(ctx, t, conn, dtid, waitTime)
+}
+
+func getDTIDFromWarnings(ctx context.Context, t *testing.T, conn *vtgateconn.VTGateSession) string {
+ qr, err := conn.Execute(ctx, "show warnings", nil)
+ require.NoError(t, err)
+ require.Len(t, qr.Rows, 1)
+
+ // validate warning output
+ w := twopcutil.ToWarn(qr.Rows[0])
+ assert.Equal(t, "Warning", w.Level)
+ assert.EqualValues(t, 302, w.Code)
+
+ // extract transaction ID
+ indx := strings.Index(w.Msg, " ")
+ require.Greater(t, indx, 0)
+ return w.Msg[:indx]
+}
+
+func waitForDTIDResolve(ctx context.Context, t *testing.T, conn *vtgateconn.VTGateSession, dtid string, waitTime time.Duration) {
+ unresolved := true
+ totalTime := time.After(waitTime)
+ for unresolved {
+ select {
+ case <-totalTime:
+ t.Errorf("transaction resolution exceeded wait time of %v", waitTime)
+ unresolved = false // break the loop.
+ case <-time.After(100 * time.Millisecond):
+ qr, err := conn.Execute(ctx, fmt.Sprintf(`show transaction status for '%s'`, dtid), nil)
+ require.NoError(t, err)
+ unresolved = len(qr.Rows) != 0
+ }
+ }
+}
diff --git a/go/test/endtoend/transaction/twopc/metric/schema.sql b/go/test/endtoend/transaction/twopc/metric/schema.sql
new file mode 100644
index 00000000000..da6e5cf289a
--- /dev/null
+++ b/go/test/endtoend/transaction/twopc/metric/schema.sql
@@ -0,0 +1,13 @@
+create table twopc_user
+(
+ id bigint,
+ name varchar(64),
+ primary key (id)
+) Engine=InnoDB;
+
+create table twopc_t1
+(
+ id bigint,
+ col bigint,
+ primary key (id)
+) Engine=InnoDB;
\ No newline at end of file
diff --git a/go/test/endtoend/transaction/twopc/metric/vschema.json b/go/test/endtoend/transaction/twopc/metric/vschema.json
new file mode 100644
index 00000000000..c6be1426a87
--- /dev/null
+++ b/go/test/endtoend/transaction/twopc/metric/vschema.json
@@ -0,0 +1,29 @@
+{
+ "sharded":true,
+ "vindexes": {
+ "xxhash": {
+ "type": "xxhash"
+ },
+ "reverse_bits": {
+ "type": "reverse_bits"
+ }
+ },
+ "tables": {
+ "twopc_user":{
+ "column_vindexes": [
+ {
+ "column": "id",
+ "name": "xxhash"
+ }
+ ]
+ },
+ "twopc_t1": {
+ "column_vindexes": [
+ {
+ "column": "id",
+ "name": "reverse_bits"
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/go/test/endtoend/transaction/twopc/schema.sql b/go/test/endtoend/transaction/twopc/schema.sql
index 7c289a03c2a..ceff8c16af5 100644
--- a/go/test/endtoend/transaction/twopc/schema.sql
+++ b/go/test/endtoend/transaction/twopc/schema.sql
@@ -18,4 +18,50 @@ create table twopc_t1
id bigint,
col bigint,
primary key (id)
-) Engine=InnoDB;
\ No newline at end of file
+) Engine=InnoDB;
+
+create table twopc_lookup
+(
+ id bigint,
+ col bigint,
+ col_unique bigint,
+ primary key (id)
+) Engine=InnoDB;
+
+create table lookup
+(
+ col bigint,
+ id bigint,
+ keyspace_id varbinary(100),
+ primary key (col, id)
+) Engine = InnoDB;
+
+create table lookup_unique
+(
+ col_unique bigint,
+ keyspace_id varbinary(100),
+ primary key (col_unique)
+) Engine = InnoDB;
+
+create table twopc_consistent_lookup
+(
+ id bigint,
+ col bigint,
+ col_unique bigint,
+ primary key (id)
+) Engine=InnoDB;
+
+create table consistent_lookup
+(
+ col bigint,
+ id bigint,
+ keyspace_id varbinary(100),
+ primary key (col, id)
+) Engine = InnoDB;
+
+create table consistent_lookup_unique
+(
+ col_unique bigint,
+ keyspace_id varbinary(100),
+ primary key (col_unique)
+) Engine = InnoDB;
diff --git a/go/test/endtoend/transaction/twopc/stress/main_test.go b/go/test/endtoend/transaction/twopc/stress/main_test.go
index 782ffe1ec12..4da4f86bdff 100644
--- a/go/test/endtoend/transaction/twopc/stress/main_test.go
+++ b/go/test/endtoend/transaction/twopc/stress/main_test.go
@@ -48,7 +48,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitcode := func() int {
@@ -70,9 +69,10 @@ func TestMain(m *testing.M) {
"--tablet_refresh_interval", "2s",
)
clusterInstance.VtTabletExtraArgs = append(clusterInstance.VtTabletExtraArgs,
- "--twopc_enable",
"--twopc_abandon_age", "1",
"--migration_check_interval", "2s",
+ "--onterm_timeout", "1s",
+ "--onclose_timeout", "1s",
)
// Start keyspace
@@ -122,9 +122,6 @@ func start(t *testing.T) (*mysql.Conn, func()) {
}
func cleanup(t *testing.T) {
- cluster.PanicHandler(t)
-
- utils.ClearOutTable(t, vtParams, "twopc_fuzzer_insert")
- utils.ClearOutTable(t, vtParams, "twopc_fuzzer_update")
utils.ClearOutTable(t, vtParams, "twopc_t1")
+ utils.ClearOutTable(t, vtParams, "twopc_settings")
}
diff --git a/go/test/endtoend/transaction/twopc/stress/schema.sql b/go/test/endtoend/transaction/twopc/stress/schema.sql
index 5173166bfd4..81f28d21340 100644
--- a/go/test/endtoend/transaction/twopc/stress/schema.sql
+++ b/go/test/endtoend/transaction/twopc/stress/schema.sql
@@ -1,20 +1,11 @@
-create table twopc_fuzzer_update (
+create table twopc_t1 (
id bigint,
col bigint,
primary key (id)
) Engine=InnoDB;
-create table twopc_fuzzer_insert (
- id bigint,
- updateSet bigint,
- threadId bigint,
- col bigint auto_increment,
- key(col),
- primary key (id, col)
-) Engine=InnoDB;
-
-create table twopc_t1 (
+create table twopc_settings (
id bigint,
- col bigint,
+ col varchar(50),
primary key (id)
) Engine=InnoDB;
diff --git a/go/test/endtoend/transaction/twopc/stress/stress_test.go b/go/test/endtoend/transaction/twopc/stress/stress_test.go
index acb8146975b..f97e1558eb6 100644
--- a/go/test/endtoend/transaction/twopc/stress/stress_test.go
+++ b/go/test/endtoend/transaction/twopc/stress/stress_test.go
@@ -42,6 +42,109 @@ import (
"vitess.io/vitess/go/vt/schema"
)
+var (
+ // idVals are the primary key values to use while creating insert queries that ensures all the three shards get an insert.
+ idVals = [3]int{
+ 4, // 4 maps to 0x20 and ends up in the first shard (-40)
+ 6, // 6 maps to 0x60 and ends up in the second shard (40-80)
+ 9, // 9 maps to 0x90 and ends up in the third shard (80-)
+ }
+)
+
+func TestSettings(t *testing.T) {
+ testcases := []struct {
+ name string
+ commitDelayTime string
+ queries []string
+ verifyFunc func(t *testing.T, vtParams *mysql.ConnParams)
+ }{
+ {
+ name: "No settings changes",
+ commitDelayTime: "5",
+ queries: append([]string{"begin"}, getMultiShardInsertQueries()...),
+ verifyFunc: func(t *testing.T, vtParams *mysql.ConnParams) {
+ // There is nothing to verify.
+ },
+ },
+ {
+ name: "Settings changes before begin",
+ commitDelayTime: "5",
+ queries: append(
+ append([]string{`set @@time_zone="+10:30"`, "begin"}, getMultiShardInsertQueries()...),
+ "insert into twopc_settings(id, col) values(9, now())"),
+ verifyFunc: func(t *testing.T, vtParams *mysql.ConnParams) {
+ // We can check that the time_zone setting was taken into account by checking the diff with the time by using a different time_zone.
+ ctx := context.Background()
+ conn, err := mysql.Connect(ctx, vtParams)
+ require.NoError(t, err)
+ defer conn.Close()
+ utils.Exec(t, conn, `set @@time_zone="+7:00"`)
+ utils.AssertMatches(t, conn, `select HOUR(TIMEDIFF((select col from twopc_settings where id = 9),now()))`, `[[INT64(3)]]`)
+ },
+ },
+ {
+ name: "Settings changes during transaction",
+ commitDelayTime: "5",
+ queries: append(
+ append([]string{"begin"}, getMultiShardInsertQueries()...),
+ `set @@time_zone="+10:30"`,
+ "insert into twopc_settings(id, col) values(9, now())"),
+ verifyFunc: func(t *testing.T, vtParams *mysql.ConnParams) {
+ // We can check that the time_zone setting was taken into account by checking the diff with the time by using a different time_zone.
+ ctx := context.Background()
+ conn, err := mysql.Connect(ctx, vtParams)
+ require.NoError(t, err)
+ defer conn.Close()
+ utils.Exec(t, conn, `set @@time_zone="+7:00"`)
+ utils.AssertMatches(t, conn, `select HOUR(TIMEDIFF((select col from twopc_settings where id = 9),now()))`, `[[INT64(3)]]`)
+ },
+ },
+ {
+ name: "Settings changes before begin and during transaction",
+ commitDelayTime: "5",
+ queries: append(
+ append([]string{`set @@time_zone="+10:30"`, "begin"}, getMultiShardInsertQueries()...),
+ "insert into twopc_settings(id, col) values(9, now())",
+ `set @@time_zone="+7:00"`,
+ "insert into twopc_settings(id, col) values(25, now())"),
+ verifyFunc: func(t *testing.T, vtParams *mysql.ConnParams) {
+ // We can check that the time_zone setting was taken into account by checking the diff with the time by using a different time_zone.
+ ctx := context.Background()
+ conn, err := mysql.Connect(ctx, vtParams)
+ require.NoError(t, err)
+ defer conn.Close()
+ utils.AssertMatches(t, conn, `select HOUR(TIMEDIFF((select col from twopc_settings where id = 9),(select col from twopc_settings where id = 25)))`, `[[INT64(3)]]`)
+ },
+ },
+ }
+
+ for _, tt := range testcases {
+ t.Run(tt.name, func(t *testing.T) {
+ // Reparent all the shards to first tablet being the primary.
+ reparentToFirstTablet(t)
+ // cleanup all the old data.
+ conn, closer := start(t)
+ defer closer()
+ defer twopcutil.DeleteFile(twopcutil.DebugDelayCommitShard)
+ defer twopcutil.DeleteFile(twopcutil.DebugDelayCommitTime)
+ var wg sync.WaitGroup
+ twopcutil.RunMultiShardCommitWithDelay(t, conn, tt.commitDelayTime, &wg, tt.queries)
+ // Allow enough time for the commit to have started.
+ time.Sleep(1 * time.Second)
+ // Run the vttablet restart to ensure that the transaction needs to be redone.
+ err := vttabletRestartShard3(t)
+ require.NoError(t, err)
+ // Wait for the commit to have returned. We don't actually check for an error in the commit because the user might receive an error.
+ // But since we are waiting in CommitPrepared, the decision to commit the transaction should have already been taken.
+ wg.Wait()
+ // Wair for the data in the table to see that the transaction was committed.
+ twopcutil.WaitForResults(t, &vtParams, "select id, col from twopc_t1 where col = 4 order by id", `[[INT64(4) INT64(4)] [INT64(6) INT64(4)] [INT64(9) INT64(4)]]`, 30*time.Second)
+ tt.verifyFunc(t, &vtParams)
+ })
+ }
+
+}
+
// TestDisruptions tests that atomic transactions persevere through various disruptions.
func TestDisruptions(t *testing.T) {
testcases := []struct {
@@ -112,30 +215,10 @@ func TestDisruptions(t *testing.T) {
// cleanup all the old data.
conn, closer := start(t)
defer closer()
- // Start an atomic transaction.
- utils.Exec(t, conn, "begin")
- // Insert rows such that they go to all the three shards. Given that we have sharded the table `twopc_t1` on reverse_bits
- // it is very easy to figure out what value will end up in which shard.
- idVals := []int{4, 6, 9}
- for _, val := range idVals {
- utils.Exec(t, conn, fmt.Sprintf("insert into twopc_t1(id, col) values(%d, 4)", val))
- }
- // We want to delay the commit on one of the shards to simulate slow commits on a shard.
- twopcutil.WriteTestCommunicationFile(t, twopcutil.DebugDelayCommitShard, "80-")
defer twopcutil.DeleteFile(twopcutil.DebugDelayCommitShard)
- twopcutil.WriteTestCommunicationFile(t, twopcutil.DebugDelayCommitTime, tt.commitDelayTime)
defer twopcutil.DeleteFile(twopcutil.DebugDelayCommitTime)
- // We will execute a commit in a go routine, because we know it will take some time to complete.
- // While the commit is ongoing, we would like to run the disruption.
var wg sync.WaitGroup
- wg.Add(1)
- go func() {
- defer wg.Done()
- _, err := utils.ExecAllowError(t, conn, "commit")
- if err != nil {
- log.Errorf("Error in commit - %v", err)
- }
- }()
+ twopcutil.RunMultiShardCommitWithDelay(t, conn, tt.commitDelayTime, &wg, append([]string{"begin"}, getMultiShardInsertQueries()...))
// Allow enough time for the commit to have started.
time.Sleep(1 * time.Second)
writeCtx, writeCancel := context.WithCancel(context.Background())
@@ -167,6 +250,17 @@ func TestDisruptions(t *testing.T) {
}
}
+// getMultiShardInsertQueries gets the queries that will cause one insert on all the shards.
+func getMultiShardInsertQueries() []string {
+ var queries []string
+ // Insert rows such that they go to all the three shards. Given that we have sharded the table `twopc_t1` on reverse_bits
+ // it is very easy to figure out what value will end up in which shard.
+ for _, val := range idVals {
+ queries = append(queries, fmt.Sprintf("insert into twopc_t1(id, col) values(%d, 4)", val))
+ }
+ return queries
+}
+
func mergeShards(t *testing.T) error {
return twopcutil.RunReshard(t, clusterInstance, "TestDisruptions", keyspaceName, "40-80,80-", "40-")
}
@@ -234,7 +328,9 @@ func ersShard3(t *testing.T) error {
func vttabletRestartShard3(t *testing.T) error {
shard := clusterInstance.Keyspaces[0].Shards[2]
tablet := shard.Vttablets[0]
- return tablet.RestartOnlyTablet()
+ _ = tablet.VttabletProcess.TearDownWithTimeout(2 * time.Second)
+ tablet.VttabletProcess.ServingStatus = "SERVING"
+ return tablet.VttabletProcess.Setup()
}
// mysqlRestartShard3 restarts MySQL on the first tablet of the third shard.
diff --git a/go/test/endtoend/transaction/twopc/stress/vschema.json b/go/test/endtoend/transaction/twopc/stress/vschema.json
index 415b5958f54..6873b233e61 100644
--- a/go/test/endtoend/transaction/twopc/stress/vschema.json
+++ b/go/test/endtoend/transaction/twopc/stress/vschema.json
@@ -6,15 +6,7 @@
}
},
"tables": {
- "twopc_fuzzer_update": {
- "column_vindexes": [
- {
- "column": "id",
- "name": "reverse_bits"
- }
- ]
- },
- "twopc_fuzzer_insert": {
+ "twopc_t1": {
"column_vindexes": [
{
"column": "id",
@@ -22,7 +14,7 @@
}
]
},
- "twopc_t1": {
+ "twopc_settings": {
"column_vindexes": [
{
"column": "id",
diff --git a/go/test/endtoend/transaction/twopc/twopc_test.go b/go/test/endtoend/transaction/twopc/twopc_test.go
index cdb6b61f91a..a760cfb24b3 100644
--- a/go/test/endtoend/transaction/twopc/twopc_test.go
+++ b/go/test/endtoend/transaction/twopc/twopc_test.go
@@ -22,6 +22,7 @@ import (
"fmt"
"reflect"
"sort"
+ "strconv"
"strings"
"sync"
"testing"
@@ -38,7 +39,9 @@ import (
"vitess.io/vitess/go/vt/callerid"
binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata"
querypb "vitess.io/vitess/go/vt/proto/query"
+ tabletpb "vitess.io/vitess/go/vt/proto/topodata"
"vitess.io/vitess/go/vt/vtgate/vtgateconn"
+ "vitess.io/vitess/go/vt/vttablet/grpctmclient"
)
// TestDTCommit tests distributed transaction commit for insert, update and delete operations
@@ -47,7 +50,7 @@ func TestDTCommit(t *testing.T) {
conn, closer := start(t)
defer closer()
- vtgateConn, err := cluster.DialVTGate(context.Background(), t.Name(), vtgateGrpcAddress, "fk_user", "")
+ vtgateConn, err := cluster.DialVTGate(context.Background(), t.Name(), vtgateGrpcAddress, "dt_user", "")
require.NoError(t, err)
defer vtgateConn.Close()
@@ -61,6 +64,7 @@ func TestDTCommit(t *testing.T) {
utils.Exec(t, conn, "begin")
utils.Exec(t, conn, "insert into twopc_user(id, name) values(7,'foo')")
utils.Exec(t, conn, "insert into twopc_user(id, name) values(8,'bar')")
+ utils.Exec(t, conn, `set @@time_zone="+10:30"`)
utils.Exec(t, conn, "insert into twopc_user(id, name) values(9,'baz')")
utils.Exec(t, conn, "insert into twopc_user(id, name) values(10,'apa')")
utils.Exec(t, conn, "commit")
@@ -89,12 +93,16 @@ func TestDTCommit(t *testing.T) {
"delete:[VARCHAR(\"dtid-1\") VARCHAR(\"PREPARE\")]",
},
"ks.redo_statement:-40": {
- "insert:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"insert into twopc_user(id, `name`) values (10, 'apa')\")]",
- "delete:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"insert into twopc_user(id, `name`) values (10, 'apa')\")]",
+ "insert:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"set @@time_zone = '+10:30'\")]",
+ "insert:[VARCHAR(\"dtid-1\") INT64(2) BLOB(\"insert into twopc_user(id, `name`) values (10, 'apa')\")]",
+ "delete:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"set @@time_zone = '+10:30'\")]",
+ "delete:[VARCHAR(\"dtid-1\") INT64(2) BLOB(\"insert into twopc_user(id, `name`) values (10, 'apa')\")]",
},
"ks.redo_statement:40-80": {
"insert:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"insert into twopc_user(id, `name`) values (8, 'bar')\")]",
+ "insert:[VARCHAR(\"dtid-1\") INT64(2) BLOB(\"set @@time_zone = '+10:30'\")]",
"delete:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"insert into twopc_user(id, `name`) values (8, 'bar')\")]",
+ "delete:[VARCHAR(\"dtid-1\") INT64(2) BLOB(\"set @@time_zone = '+10:30'\")]",
},
"ks.twopc_user:-40": {
`insert:[INT64(10) VARCHAR("apa")]`,
@@ -132,8 +140,10 @@ func TestDTCommit(t *testing.T) {
"delete:[VARCHAR(\"dtid-2\") VARCHAR(\"PREPARE\")]",
},
"ks.redo_statement:40-80": {
- "insert:[VARCHAR(\"dtid-2\") INT64(1) BLOB(\"update twopc_user set `name` = 'newfoo' where id = 8 limit 10001 /* INT64 */\")]",
- "delete:[VARCHAR(\"dtid-2\") INT64(1) BLOB(\"update twopc_user set `name` = 'newfoo' where id = 8 limit 10001 /* INT64 */\")]",
+ "insert:[VARCHAR(\"dtid-2\") INT64(1) BLOB(\"set @@time_zone = '+10:30'\")]",
+ "insert:[VARCHAR(\"dtid-2\") INT64(2) BLOB(\"update twopc_user set `name` = 'newfoo' where id = 8 limit 10001 /* INT64 */\")]",
+ "delete:[VARCHAR(\"dtid-2\") INT64(1) BLOB(\"set @@time_zone = '+10:30'\")]",
+ "delete:[VARCHAR(\"dtid-2\") INT64(2) BLOB(\"update twopc_user set `name` = 'newfoo' where id = 8 limit 10001 /* INT64 */\")]",
},
"ks.twopc_user:40-80": {"update:[INT64(8) VARCHAR(\"newfoo\")]"},
"ks.twopc_user:80-": {"update:[INT64(7) VARCHAR(\"newfoo\")]"},
@@ -163,8 +173,10 @@ func TestDTCommit(t *testing.T) {
"delete:[VARCHAR(\"dtid-3\") VARCHAR(\"PREPARE\")]",
},
"ks.redo_statement:-40": {
- "insert:[VARCHAR(\"dtid-3\") INT64(1) BLOB(\"delete from twopc_user where id = 10 limit 10001 /* INT64 */\")]",
- "delete:[VARCHAR(\"dtid-3\") INT64(1) BLOB(\"delete from twopc_user where id = 10 limit 10001 /* INT64 */\")]",
+ "insert:[VARCHAR(\"dtid-3\") INT64(1) BLOB(\"set @@time_zone = '+10:30'\")]",
+ "insert:[VARCHAR(\"dtid-3\") INT64(2) BLOB(\"delete from twopc_user where id = 10 limit 10001 /* INT64 */\")]",
+ "delete:[VARCHAR(\"dtid-3\") INT64(1) BLOB(\"set @@time_zone = '+10:30'\")]",
+ "delete:[VARCHAR(\"dtid-3\") INT64(2) BLOB(\"delete from twopc_user where id = 10 limit 10001 /* INT64 */\")]",
},
"ks.twopc_user:-40": {"delete:[INT64(10) VARCHAR(\"apa\")]"},
"ks.twopc_user:80-": {"delete:[INT64(9) VARCHAR(\"baz\")]"},
@@ -183,7 +195,7 @@ func TestDTRollback(t *testing.T) {
utils.Exec(t, conn, "insert into twopc_user(id, name) values(7,'foo'), (8,'bar')")
// run vstream to stream binlogs
- vtgateConn, err := cluster.DialVTGate(context.Background(), t.Name(), vtgateGrpcAddress, "fk_user", "")
+ vtgateConn, err := cluster.DialVTGate(context.Background(), t.Name(), vtgateGrpcAddress, "dt_user", "")
require.NoError(t, err)
defer vtgateConn.Close()
@@ -232,7 +244,7 @@ func TestDTCommitDMLOnlyOnMM(t *testing.T) {
conn, closer := start(t)
defer closer()
- vtgateConn, err := cluster.DialVTGate(context.Background(), t.Name(), vtgateGrpcAddress, "fk_user", "")
+ vtgateConn, err := cluster.DialVTGate(context.Background(), t.Name(), vtgateGrpcAddress, "dt_user", "")
require.NoError(t, err)
defer vtgateConn.Close()
@@ -327,7 +339,7 @@ func TestDTCommitDMLOnlyOnRM(t *testing.T) {
conn, closer := start(t)
defer closer()
- vtgateConn, err := cluster.DialVTGate(context.Background(), t.Name(), vtgateGrpcAddress, "fk_user", "")
+ vtgateConn, err := cluster.DialVTGate(context.Background(), t.Name(), vtgateGrpcAddress, "dt_user", "")
require.NoError(t, err)
defer vtgateConn.Close()
@@ -435,7 +447,7 @@ func TestDTPrepareFailOnRM(t *testing.T) {
conn, closer := start(t)
defer closer()
- vtgateConn, err := cluster.DialVTGate(context.Background(), t.Name(), vtgateGrpcAddress, "fk_user", "")
+ vtgateConn, err := cluster.DialVTGate(context.Background(), t.Name(), vtgateGrpcAddress, "dt_user", "")
require.NoError(t, err)
defer vtgateConn.Close()
@@ -551,7 +563,11 @@ func compareMaps(t *testing.T, expected, actual map[string][]string, flexibleExp
// TestDTResolveAfterMMCommit tests that transaction is committed on recovery
// failure after MM commit.
func TestDTResolveAfterMMCommit(t *testing.T) {
- defer cleanup(t)
+ initconn, closer := start(t)
+ defer closer()
+
+ // Do an insertion into a table that has a consistent lookup vindex.
+ utils.Exec(t, initconn, "insert into twopc_consistent_lookup(id, col, col_unique) values(4, 4, 6)")
vtgateConn, err := cluster.DialVTGate(context.Background(), t.Name(), vtgateGrpcAddress, "dt_user", "")
require.NoError(t, err)
@@ -577,6 +593,10 @@ func TestDTResolveAfterMMCommit(t *testing.T) {
require.NoError(t, err)
_, err = conn.Execute(qCtx, "insert into twopc_user(id, name) values(10,'apa')", nil)
require.NoError(t, err)
+ // Also do an update to a table that has a consistent lookup vindex.
+ // We expect to see only the pre-session changes in the logs.
+ _, err = conn.Execute(qCtx, "update twopc_consistent_lookup set col = 22 where id = 4", nil)
+ require.NoError(t, err)
// The caller ID is used to simulate the failure at the desired point.
newCtx := callerid.NewContext(qCtx, callerid.NewEffectiveCallerID("MMCommitted_FailNow", "", ""), nil)
@@ -613,7 +633,9 @@ func TestDTResolveAfterMMCommit(t *testing.T) {
},
"ks.redo_statement:-40": {
"insert:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"insert into twopc_user(id, `name`) values (10, 'apa')\")]",
+ "insert:[VARCHAR(\"dtid-1\") INT64(2) BLOB(\"update twopc_consistent_lookup set col = 22 where id = 4 limit 10001 /* INT64 */\")]",
"delete:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"insert into twopc_user(id, `name`) values (10, 'apa')\")]",
+ "delete:[VARCHAR(\"dtid-1\") INT64(2) BLOB(\"update twopc_consistent_lookup set col = 22 where id = 4 limit 10001 /* INT64 */\")]",
},
"ks.redo_statement:40-80": {
"insert:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"insert into twopc_user(id, `name`) values (8, 'bar')\")]",
@@ -629,6 +651,12 @@ func TestDTResolveAfterMMCommit(t *testing.T) {
`insert:[INT64(7) VARCHAR("foo")]`,
`insert:[INT64(9) VARCHAR("baz")]`,
},
+ "ks.consistent_lookup:-40": {
+ "insert:[INT64(22) INT64(4) VARBINARY(\" \\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ },
+ "ks.twopc_consistent_lookup:-40": {
+ "update:[INT64(4) INT64(22) INT64(6)]",
+ },
}
assert.Equal(t, expectations, logTable,
"mismatch expected: \n got: %s, want: %s", prettyPrint(logTable), prettyPrint(expectations))
@@ -637,6 +665,12 @@ func TestDTResolveAfterMMCommit(t *testing.T) {
// TestDTResolveAfterRMPrepare tests that transaction is rolled back on recovery
// failure after RM prepare and before MM commit.
func TestDTResolveAfterRMPrepare(t *testing.T) {
+ initconn, closer := start(t)
+ defer closer()
+
+ // Do an insertion into a table that has a consistent lookup vindex.
+ utils.Exec(t, initconn, "insert into twopc_consistent_lookup(id, col, col_unique) values(4, 4, 6)")
+
vtgateConn, err := cluster.DialVTGate(context.Background(), t.Name(), vtgateGrpcAddress, "dt_user", "")
require.NoError(t, err)
defer vtgateConn.Close()
@@ -657,6 +691,10 @@ func TestDTResolveAfterRMPrepare(t *testing.T) {
require.NoError(t, err)
_, err = conn.Execute(qCtx, "insert into twopc_user(id, name) values(8,'bar')", nil)
require.NoError(t, err)
+ // Also do an update to a table that has a consistent lookup vindex.
+ // We expect to see only the pre-session changes in the logs.
+ _, err = conn.Execute(qCtx, "update twopc_consistent_lookup set col = 22 where id = 4", nil)
+ require.NoError(t, err)
// The caller ID is used to simulate the failure at the desired point.
newCtx := callerid.NewContext(qCtx, callerid.NewEffectiveCallerID("RMPrepared_FailNow", "", ""), nil)
@@ -679,16 +717,29 @@ func TestDTResolveAfterRMPrepare(t *testing.T) {
},
"ks.dt_participant:80-": {
"insert:[VARCHAR(\"dtid-1\") INT64(1) VARCHAR(\"ks\") VARCHAR(\"40-80\")]",
+ "insert:[VARCHAR(\"dtid-1\") INT64(2) VARCHAR(\"ks\") VARCHAR(\"-40\")]",
"delete:[VARCHAR(\"dtid-1\") INT64(1) VARCHAR(\"ks\") VARCHAR(\"40-80\")]",
+ "delete:[VARCHAR(\"dtid-1\") INT64(2) VARCHAR(\"ks\") VARCHAR(\"-40\")]",
},
"ks.redo_state:40-80": {
"insert:[VARCHAR(\"dtid-1\") VARCHAR(\"PREPARE\")]",
"delete:[VARCHAR(\"dtid-1\") VARCHAR(\"PREPARE\")]",
},
+ "ks.redo_state:-40": {
+ "insert:[VARCHAR(\"dtid-1\") VARCHAR(\"PREPARE\")]",
+ "delete:[VARCHAR(\"dtid-1\") VARCHAR(\"PREPARE\")]",
+ },
"ks.redo_statement:40-80": {
"insert:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"insert into twopc_user(id, `name`) values (8, 'bar')\")]",
"delete:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"insert into twopc_user(id, `name`) values (8, 'bar')\")]",
},
+ "ks.redo_statement:-40": {
+ "insert:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"update twopc_consistent_lookup set col = 22 where id = 4 limit 10001 /* INT64 */\")]",
+ "delete:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"update twopc_consistent_lookup set col = 22 where id = 4 limit 10001 /* INT64 */\")]",
+ },
+ "ks.consistent_lookup:-40": {
+ "insert:[INT64(22) INT64(4) VARBINARY(\" \\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ },
}
assert.Equal(t, expectations, logTable,
"mismatch expected: \n got: %s, want: %s", prettyPrint(logTable), prettyPrint(expectations))
@@ -697,6 +748,8 @@ func TestDTResolveAfterRMPrepare(t *testing.T) {
// TestDTResolveDuringRMPrepare tests that transaction is rolled back on recovery
// failure after semi RM prepare.
func TestDTResolveDuringRMPrepare(t *testing.T) {
+ defer cleanup(t)
+
vtgateConn, err := cluster.DialVTGate(context.Background(), t.Name(), vtgateGrpcAddress, "dt_user", "")
require.NoError(t, err)
defer vtgateConn.Close()
@@ -844,6 +897,8 @@ func TestDTResolveDuringRMCommit(t *testing.T) {
// TestDTResolveAfterTransactionRecord tests that transaction is rolled back on recovery
// failure after TR created and before RM prepare.
func TestDTResolveAfterTransactionRecord(t *testing.T) {
+ defer cleanup(t)
+
vtgateConn, err := cluster.DialVTGate(context.Background(), t.Name(), vtgateGrpcAddress, "dt_user", "")
require.NoError(t, err)
defer vtgateConn.Close()
@@ -893,21 +948,6 @@ func TestDTResolveAfterTransactionRecord(t *testing.T) {
"mismatch expected: \n got: %s, want: %s", prettyPrint(logTable), prettyPrint(expectations))
}
-type warn struct {
- level string
- code uint16
- msg string
-}
-
-func toWarn(row sqltypes.Row) warn {
- code, _ := row[1].ToUint16()
- return warn{
- level: row[0].ToString(),
- code: code,
- msg: row[2].ToString(),
- }
-}
-
type txStatus struct {
dtid string
state string
@@ -933,15 +973,15 @@ func testWarningAndTransactionStatus(t *testing.T, conn *vtgateconn.VTGateSessio
require.Len(t, qr.Rows, 1)
// validate warning output
- w := toWarn(qr.Rows[0])
- assert.Equal(t, "Warning", w.level)
- assert.EqualValues(t, 302, w.code)
- assert.Contains(t, w.msg, warnMsg)
+ w := twopcutil.ToWarn(qr.Rows[0])
+ assert.Equal(t, "Warning", w.Level)
+ assert.EqualValues(t, 302, w.Code)
+ assert.Contains(t, w.Msg, warnMsg)
// extract transaction ID
- indx := strings.Index(w.msg, " ")
+ indx := strings.Index(w.Msg, " ")
require.Greater(t, indx, 0)
- dtid := w.msg[:indx]
+ dtid := w.Msg[:indx]
qr, err = conn.Execute(context.Background(), fmt.Sprintf(`show transaction status for '%v'`, dtid), nil)
require.NoError(t, err)
@@ -959,6 +999,8 @@ func testWarningAndTransactionStatus(t *testing.T, conn *vtgateconn.VTGateSessio
// TestReadingUnresolvedTransactions tests the reading of unresolved transactions
func TestReadingUnresolvedTransactions(t *testing.T) {
+ defer cleanup(t)
+
testcases := []struct {
name string
queries []string
@@ -1023,24 +1065,336 @@ func TestReadingUnresolvedTransactions(t *testing.T) {
}
}
+// TestDTSavepointWithVanilaMySQL ensures that distributed transactions should work with savepoint as with vanila MySQL
+func TestDTSavepointWithVanilaMySQL(t *testing.T) {
+ mcmp, closer := startWithMySQL(t)
+ defer closer()
+
+ // internal savepoint
+ mcmp.Exec("begin")
+ mcmp.Exec("insert into twopc_user(id, name) values(7,'foo'), (8,'bar')")
+ mcmp.Exec("commit")
+ mcmp.Exec("select * from twopc_user order by id")
+
+ // external savepoint, single shard transaction.
+ mcmp.Exec("begin")
+ mcmp.Exec("savepoint a")
+ mcmp.Exec("insert into twopc_user(id, name) values(9,'baz')")
+ mcmp.Exec("savepoint b")
+ mcmp.Exec("rollback to b")
+ mcmp.Exec("commit")
+ mcmp.Exec("select * from twopc_user order by id")
+
+ // external savepoint, multi-shard transaction.
+ mcmp.Exec("begin")
+ mcmp.Exec("savepoint a")
+ mcmp.Exec("insert into twopc_user(id, name) values(10,'apa')")
+ mcmp.Exec("savepoint b")
+ mcmp.Exec("update twopc_user set name = 'temp' where id = 7")
+ mcmp.Exec("rollback to a")
+ mcmp.Exec("commit")
+ mcmp.Exec("select * from twopc_user order by id")
+
+ // external savepoint, multi-shard transaction.
+ mcmp.Exec("begin")
+ mcmp.Exec("savepoint a")
+ mcmp.Exec("insert into twopc_user(id, name) values(10,'apa')")
+ mcmp.Exec("savepoint b")
+ mcmp.Exec("update twopc_user set name = 'temp' where id = 7")
+ mcmp.Exec("rollback to b")
+ mcmp.Exec("commit")
+ mcmp.Exec("select * from twopc_user order by id")
+
+ // external savepoint, multi-shard transaction.
+ mcmp.Exec("begin")
+ mcmp.Exec("update twopc_user set name = 'temp1' where id = 10")
+ mcmp.Exec("savepoint b")
+ mcmp.Exec("update twopc_user set name = 'temp2' where id = 7")
+ mcmp.Exec("commit")
+ mcmp.Exec("select * from twopc_user order by id")
+}
+
+// TestDTSavepoint tests distributed transaction should work with savepoint.
+func TestDTSavepoint(t *testing.T) {
+ defer cleanup(t)
+
+ vtgateConn, err := cluster.DialVTGate(context.Background(), t.Name(), vtgateGrpcAddress, "dt_user", "")
+ require.NoError(t, err)
+ defer vtgateConn.Close()
+
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+
+ ch := make(chan *binlogdatapb.VEvent)
+ runVStream(t, ctx, ch, vtgateConn)
+
+ ss := vtgateConn.Session("", nil)
+
+ // internal savepoint
+ execute(ctx, t, ss, "begin")
+ execute(ctx, t, ss, "insert into twopc_user(id, name) values(7,'foo'), (8,'bar')")
+ execute(ctx, t, ss, "commit")
+
+ tableMap := make(map[string][]*querypb.Field)
+ dtMap := make(map[string]string)
+ logTable := retrieveTransitions(t, ch, tableMap, dtMap)
+ expectations := map[string][]string{
+ "ks.dt_participant:40-80": {
+ "insert:[VARCHAR(\"dtid-1\") INT64(1) VARCHAR(\"ks\") VARCHAR(\"80-\")]",
+ "delete:[VARCHAR(\"dtid-1\") INT64(1) VARCHAR(\"ks\") VARCHAR(\"80-\")]",
+ },
+ "ks.dt_state:40-80": {
+ "insert:[VARCHAR(\"dtid-1\") VARCHAR(\"PREPARE\")]",
+ "update:[VARCHAR(\"dtid-1\") VARCHAR(\"COMMIT\")]",
+ "delete:[VARCHAR(\"dtid-1\") VARCHAR(\"COMMIT\")]",
+ },
+ "ks.redo_state:80-": {
+ "insert:[VARCHAR(\"dtid-1\") VARCHAR(\"PREPARE\")]",
+ "delete:[VARCHAR(\"dtid-1\") VARCHAR(\"PREPARE\")]",
+ },
+ "ks.redo_statement:80-": {
+ "insert:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"insert into twopc_user(id, `name`) values (7, 'foo')\")]",
+ "delete:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"insert into twopc_user(id, `name`) values (7, 'foo')\")]",
+ },
+ "ks.twopc_user:40-80": {"insert:[INT64(8) VARCHAR(\"bar\")]"},
+ "ks.twopc_user:80-": {"insert:[INT64(7) VARCHAR(\"foo\")]"},
+ }
+ assert.Equal(t, expectations, logTable,
+ "mismatch expected: \n got: %s, want: %s", prettyPrint(logTable), prettyPrint(expectations))
+
+ // external savepoint, single shard transaction.
+ execute(ctx, t, ss, "begin")
+ execute(ctx, t, ss, "savepoint a")
+ execute(ctx, t, ss, "insert into twopc_user(id, name) values(9,'baz')")
+ execute(ctx, t, ss, "savepoint b")
+ execute(ctx, t, ss, "rollback to b")
+ execute(ctx, t, ss, "commit")
+
+ logTable = retrieveTransitions(t, ch, tableMap, dtMap)
+ expectations = map[string][]string{
+ "ks.twopc_user:80-": {"insert:[INT64(9) VARCHAR(\"baz\")]"}}
+ assert.Equal(t, expectations, logTable,
+ "mismatch expected: \n got: %s, want: %s", prettyPrint(logTable), prettyPrint(expectations))
+
+ // external savepoint, multi-shard transaction - rollback to a savepoint that leaves no change.
+ execute(ctx, t, ss, "begin")
+ execute(ctx, t, ss, "savepoint a")
+ execute(ctx, t, ss, "insert into twopc_user(id, name) values(10,'apa')")
+ execute(ctx, t, ss, "savepoint b")
+ execute(ctx, t, ss, "update twopc_user set name = 'temp' where id = 7")
+ execute(ctx, t, ss, "rollback to a")
+ execute(ctx, t, ss, "commit")
+
+ logTable = retrieveTransitions(t, ch, tableMap, dtMap)
+ expectations = map[string][]string{
+ "ks.dt_participant:-40": {
+ "insert:[VARCHAR(\"dtid-2\") INT64(1) VARCHAR(\"ks\") VARCHAR(\"80-\")]",
+ "delete:[VARCHAR(\"dtid-2\") INT64(1) VARCHAR(\"ks\") VARCHAR(\"80-\")]",
+ },
+ "ks.dt_state:-40": {
+ "insert:[VARCHAR(\"dtid-2\") VARCHAR(\"PREPARE\")]",
+ "update:[VARCHAR(\"dtid-2\") VARCHAR(\"COMMIT\")]",
+ "delete:[VARCHAR(\"dtid-2\") VARCHAR(\"COMMIT\")]",
+ },
+ }
+ assert.Equal(t, expectations, logTable,
+ "mismatch expected: \n got: %s, want: %s", prettyPrint(logTable), prettyPrint(expectations))
+
+ // external savepoint, multi-shard transaction - rollback to a savepoint that leaves a change.
+ execute(ctx, t, ss, "begin")
+ execute(ctx, t, ss, "savepoint a")
+ execute(ctx, t, ss, "insert into twopc_user(id, name) values(10,'apa')")
+ execute(ctx, t, ss, "savepoint b")
+ execute(ctx, t, ss, "update twopc_user set name = 'temp' where id = 7")
+ execute(ctx, t, ss, "rollback to b")
+ execute(ctx, t, ss, "commit")
+
+ logTable = retrieveTransitions(t, ch, tableMap, dtMap)
+ expectations = map[string][]string{
+ "ks.dt_participant:-40": {
+ "insert:[VARCHAR(\"dtid-3\") INT64(1) VARCHAR(\"ks\") VARCHAR(\"80-\")]",
+ "delete:[VARCHAR(\"dtid-3\") INT64(1) VARCHAR(\"ks\") VARCHAR(\"80-\")]",
+ },
+ "ks.dt_state:-40": {
+ "insert:[VARCHAR(\"dtid-3\") VARCHAR(\"PREPARE\")]",
+ "update:[VARCHAR(\"dtid-3\") VARCHAR(\"COMMIT\")]",
+ "delete:[VARCHAR(\"dtid-3\") VARCHAR(\"COMMIT\")]",
+ },
+ "ks.twopc_user:-40": {"insert:[INT64(10) VARCHAR(\"apa\")]"},
+ }
+ assert.Equal(t, expectations, logTable,
+ "mismatch expected: \n got: %s, want: %s", prettyPrint(logTable), prettyPrint(expectations))
+
+ // external savepoint, multi-shard transaction - savepoint added later and rollback to it.
+ execute(ctx, t, ss, "begin")
+ execute(ctx, t, ss, "update twopc_user set name = 'temp1' where id = 7")
+ execute(ctx, t, ss, "savepoint c")
+ execute(ctx, t, ss, "update twopc_user set name = 'temp2' where id = 8")
+ execute(ctx, t, ss, "rollback to c")
+ execute(ctx, t, ss, "commit")
+
+ logTable = retrieveTransitions(t, ch, tableMap, dtMap)
+ expectations = map[string][]string{
+ "ks.dt_participant:40-80": {
+ "insert:[VARCHAR(\"dtid-4\") INT64(1) VARCHAR(\"ks\") VARCHAR(\"80-\")]",
+ "delete:[VARCHAR(\"dtid-4\") INT64(1) VARCHAR(\"ks\") VARCHAR(\"80-\")]",
+ },
+ "ks.dt_state:40-80": {
+ "insert:[VARCHAR(\"dtid-4\") VARCHAR(\"PREPARE\")]",
+ "update:[VARCHAR(\"dtid-4\") VARCHAR(\"COMMIT\")]",
+ "delete:[VARCHAR(\"dtid-4\") VARCHAR(\"COMMIT\")]",
+ },
+ "ks.redo_state:80-": {
+ "insert:[VARCHAR(\"dtid-4\") VARCHAR(\"PREPARE\")]",
+ "delete:[VARCHAR(\"dtid-4\") VARCHAR(\"PREPARE\")]",
+ },
+ "ks.redo_statement:80-": {
+ "insert:[VARCHAR(\"dtid-4\") INT64(1) BLOB(\"update twopc_user set `name` = 'temp1' where id = 7 limit 10001 /* INT64 */\")]",
+ "delete:[VARCHAR(\"dtid-4\") INT64(1) BLOB(\"update twopc_user set `name` = 'temp1' where id = 7 limit 10001 /* INT64 */\")]",
+ },
+ "ks.twopc_user:80-": {"update:[INT64(7) VARCHAR(\"temp1\")]"},
+ }
+ assert.Equal(t, expectations, logTable,
+ "mismatch expected: \n got: %s, want: %s", prettyPrint(logTable), prettyPrint(expectations))
+}
+
+func execute(ctx context.Context, t *testing.T, ss *vtgateconn.VTGateSession, sql string) {
+ t.Helper()
+
+ err := executeReturnError(ctx, t, ss, sql)
+ require.NoError(t, err)
+}
+
+func executeReturnError(ctx context.Context, t *testing.T, ss *vtgateconn.VTGateSession, sql string) error {
+ t.Helper()
+
+ if sql == "commit" {
+ // sort by shard
+ sortShard(ss)
+ }
+ _, err := ss.Execute(ctx, sql, nil)
+ return err
+}
+
+func sortShard(ss *vtgateconn.VTGateSession) {
+ sort.Slice(ss.SessionPb().ShardSessions, func(i, j int) bool {
+ return ss.SessionPb().ShardSessions[i].Target.Shard < ss.SessionPb().ShardSessions[j].Target.Shard
+ })
+}
+
+// TestDTSavepointResolveAfterMMCommit tests that transaction is committed on recovery
+// failure after MM commit involving savepoint.
+func TestDTSavepointResolveAfterMMCommit(t *testing.T) {
+ defer cleanup(t)
+
+ vtgateConn, err := cluster.DialVTGate(context.Background(), t.Name(), vtgateGrpcAddress, "dt_user", "")
+ require.NoError(t, err)
+ defer vtgateConn.Close()
+
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+
+ ch := make(chan *binlogdatapb.VEvent)
+ runVStream(t, ctx, ch, vtgateConn)
+
+ conn := vtgateConn.Session("", nil)
+ qCtx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+
+ // initial insert
+ for i := 1; i <= 100; i++ {
+ execute(qCtx, t, conn, fmt.Sprintf("insert into twopc_user(id, name) values(%d,'foo')", 10*i))
+ }
+
+ // ignore initial change
+ tableMap := make(map[string][]*querypb.Field)
+ dtMap := make(map[string]string)
+ _ = retrieveTransitionsWithTimeout(t, ch, tableMap, dtMap, 2*time.Second)
+
+ // Insert into multiple shards
+ execute(qCtx, t, conn, "begin")
+ execute(qCtx, t, conn, "insert into twopc_user(id, name) values(7,'foo'),(8,'bar')")
+ execute(qCtx, t, conn, "savepoint a")
+ for i := 1; i <= 100; i++ {
+ execute(qCtx, t, conn, fmt.Sprintf("insert ignore into twopc_user(id, name) values(%d,'baz')", 12+i))
+ }
+ execute(qCtx, t, conn, "savepoint b")
+ execute(qCtx, t, conn, "insert into twopc_user(id, name) values(11,'apa')")
+ execute(qCtx, t, conn, "rollback to a")
+
+ // The caller ID is used to simulate the failure at the desired point.
+ newCtx := callerid.NewContext(qCtx, callerid.NewEffectiveCallerID("MMCommitted_FailNow", "", ""), nil)
+ err = executeReturnError(newCtx, t, conn, "commit")
+ require.ErrorContains(t, err, "Fail After MM commit")
+
+ testWarningAndTransactionStatus(t, conn,
+ "distributed transaction ID failed during metadata manager commit; transaction will be committed/rollbacked based on the state on recovery",
+ false, "COMMIT", "ks:40-80,ks:80-")
+
+ // 2nd session to write something on different primary key, this should continue to work.
+ conn2 := vtgateConn.Session("", nil)
+ execute(qCtx, t, conn2, "insert into twopc_user(id, name) values(190001,'mysession')")
+ execute(qCtx, t, conn2, "insert into twopc_user(id, name) values(290001,'mysession')")
+
+ // Below check ensures that the transaction is resolved by the resolver on receiving unresolved transaction signal from MM.
+ logTable := retrieveTransitionsWithTimeout(t, ch, tableMap, dtMap, 2*time.Second)
+ expectations := map[string][]string{
+ "ks.dt_participant:-40": {
+ "insert:[VARCHAR(\"dtid-1\") INT64(1) VARCHAR(\"ks\") VARCHAR(\"40-80\")]",
+ "insert:[VARCHAR(\"dtid-1\") INT64(2) VARCHAR(\"ks\") VARCHAR(\"80-\")]",
+ "delete:[VARCHAR(\"dtid-1\") INT64(1) VARCHAR(\"ks\") VARCHAR(\"40-80\")]",
+ "delete:[VARCHAR(\"dtid-1\") INT64(2) VARCHAR(\"ks\") VARCHAR(\"80-\")]",
+ },
+ "ks.dt_state:-40": {
+ "insert:[VARCHAR(\"dtid-1\") VARCHAR(\"PREPARE\")]",
+ "update:[VARCHAR(\"dtid-1\") VARCHAR(\"COMMIT\")]",
+ "delete:[VARCHAR(\"dtid-1\") VARCHAR(\"COMMIT\")]",
+ },
+ "ks.redo_state:40-80": {
+ "insert:[VARCHAR(\"dtid-1\") VARCHAR(\"PREPARE\")]",
+ "delete:[VARCHAR(\"dtid-1\") VARCHAR(\"PREPARE\")]",
+ },
+ "ks.redo_state:80-": {
+ "insert:[VARCHAR(\"dtid-1\") VARCHAR(\"PREPARE\")]",
+ "delete:[VARCHAR(\"dtid-1\") VARCHAR(\"PREPARE\")]",
+ },
+ "ks.redo_statement:40-80": {
+ "insert:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"insert into twopc_user(id, `name`) values (8, 'bar')\")]",
+ "delete:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"insert into twopc_user(id, `name`) values (8, 'bar')\")]",
+ },
+ "ks.redo_statement:80-": {
+ "insert:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"insert into twopc_user(id, `name`) values (7, 'foo')\")]",
+ "delete:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"insert into twopc_user(id, `name`) values (7, 'foo')\")]",
+ },
+ "ks.twopc_user:-40": {
+ "insert:[INT64(290001) VARCHAR(\"mysession\")]",
+ },
+ "ks.twopc_user:40-80": {
+ "insert:[INT64(190001) VARCHAR(\"mysession\")]",
+ "insert:[INT64(8) VARCHAR(\"bar\")]",
+ },
+ "ks.twopc_user:80-": {
+ "insert:[INT64(7) VARCHAR(\"foo\")]",
+ },
+ }
+ assert.Equal(t, expectations, logTable,
+ "mismatch expected: \n got: %s, want: %s", prettyPrint(logTable), prettyPrint(expectations))
+}
+
// TestSemiSyncRequiredWithTwoPC tests that semi-sync is required when using two-phase commit.
func TestSemiSyncRequiredWithTwoPC(t *testing.T) {
// cleanup all the old data.
conn, closer := start(t)
defer closer()
+ defer func() {
+ reparentAllShards(t, clusterInstance, 0)
+ }()
+ reparentAllShards(t, clusterInstance, 0)
out, err := clusterInstance.VtctldClientProcess.ExecuteCommandWithOutput("SetKeyspaceDurabilityPolicy", keyspaceName, "--durability-policy=none")
require.NoError(t, err, out)
- defer clusterInstance.VtctldClientProcess.ExecuteCommandWithOutput("SetKeyspaceDurabilityPolicy", keyspaceName, "--durability-policy=semi_sync")
-
- // After changing the durability policy for the given keyspace to none, we run PRS.
- shard := clusterInstance.Keyspaces[0].Shards[2]
- newPrimary := shard.Vttablets[1]
- _, err = clusterInstance.VtctldClientProcess.ExecuteCommandWithOutput(
- "PlannedReparentShard",
- fmt.Sprintf("%s/%s", keyspaceName, shard.Name),
- "--new-primary", newPrimary.Alias)
- require.NoError(t, err)
+ // After changing the durability policy for the given keyspace to none, we run PRS to ensure the changes have taken effect.
+ reparentAllShards(t, clusterInstance, 1)
// A new distributed transaction should fail.
utils.Exec(t, conn, "begin")
@@ -1050,4 +1404,437 @@ func TestSemiSyncRequiredWithTwoPC(t *testing.T) {
_, err = utils.ExecAllowError(t, conn, "commit")
require.Error(t, err)
require.ErrorContains(t, err, "two-pc is enabled, but semi-sync is not")
+
+ _, err = clusterInstance.VtctldClientProcess.ExecuteCommandWithOutput("SetKeyspaceDurabilityPolicy", keyspaceName, "--durability-policy=semi_sync")
+ require.NoError(t, err)
+ reparentAllShards(t, clusterInstance, 0)
+
+ // Transaction should now succeed.
+ utils.Exec(t, conn, "begin")
+ utils.Exec(t, conn, "insert into twopc_t1(id, col) values(4, 4)")
+ utils.Exec(t, conn, "insert into twopc_t1(id, col) values(6, 4)")
+ utils.Exec(t, conn, "insert into twopc_t1(id, col) values(9, 4)")
+ _, err = utils.ExecAllowError(t, conn, "commit")
+ require.NoError(t, err)
+}
+
+// reparentAllShards reparents all the shards to the given tablet index for that shard.
+func reparentAllShards(t *testing.T, clusterInstance *cluster.LocalProcessCluster, idx int) {
+ for _, shard := range clusterInstance.Keyspaces[0].Shards {
+ err := clusterInstance.VtctldClientProcess.PlannedReparentShard(keyspaceName, shard.Name, shard.Vttablets[idx].Alias)
+ require.NoError(t, err)
+ }
+}
+
+// TestReadTransactionStatus tests that read transaction state rpc works as expected.
+func TestReadTransactionStatus(t *testing.T) {
+ conn, closer := start(t)
+ defer closer()
+ defer conn.Close()
+ defer twopcutil.DeleteFile(twopcutil.DebugDelayCommitShard)
+ defer twopcutil.DeleteFile(twopcutil.DebugDelayCommitTime)
+
+ // We create a multi shard commit and delay its commit on one of the shards.
+ // This allows us to query to transaction status and actually get some data back.
+ var wg sync.WaitGroup
+ twopcutil.RunMultiShardCommitWithDelay(t, conn, "10", &wg, []string{
+ "begin",
+ "insert into twopc_t1(id, col) values(4, 4)",
+ "insert into twopc_t1(id, col) values(6, 4)",
+ "insert into twopc_t1(id, col) values(9, 4)",
+ })
+
+ // Create a tablet manager client and use it to read the transaction state.
+ tmc := grpctmclient.NewClient()
+ defer tmc.Close()
+ ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second)
+ defer cancel()
+
+ primaryTablet := getTablet(clusterInstance.Keyspaces[0].Shards[2].FindPrimaryTablet().GrpcPort)
+ // Wait for the transaction to show up in the unresolved list.
+ var unresTransaction *querypb.TransactionMetadata
+ timeout := time.After(10 * time.Second)
+ for {
+ for _, shard := range clusterInstance.Keyspaces[0].Shards {
+ urtRes, err := tmc.GetUnresolvedTransactions(ctx, getTablet(shard.FindPrimaryTablet().GrpcPort), 1)
+ require.NoError(t, err)
+ if len(urtRes) > 0 {
+ unresTransaction = urtRes[0]
+ }
+ }
+ if unresTransaction != nil {
+ break
+ }
+ select {
+ case <-timeout:
+ require.Fail(t, "timed out waiting for unresolved transaction")
+ default:
+ }
+ }
+ require.NotNil(t, unresTransaction)
+ res, err := tmc.GetTransactionInfo(ctx, primaryTablet, unresTransaction.Dtid)
+ require.NoError(t, err)
+ assert.Equal(t, "PREPARED", res.State)
+ assert.Equal(t, "", res.Message)
+ assert.Equal(t, []string{"insert into twopc_t1(id, col) values (9, 4)"}, res.Statements)
+
+ // Also try running the RPC from vtctld and verify we see the same values.
+ out, err := clusterInstance.VtctldClientProcess.ExecuteCommandWithOutput("DistributedTransaction",
+ "Read",
+ fmt.Sprintf(`--dtid=%s`, unresTransaction.Dtid),
+ )
+ require.NoError(t, err)
+ require.Contains(t, out, "insert into twopc_t1(id, col) values (9, 4)")
+ require.Contains(t, out, unresTransaction.Dtid)
+
+ // Read the data from vtadmin API, and verify that too has the same information.
+ apiRes := clusterInstance.VtadminProcess.MakeAPICallRetry(t, fmt.Sprintf("/api/transaction/local/%v/info", unresTransaction.Dtid))
+ require.Contains(t, apiRes, "insert into twopc_t1(id, col) values (9, 4)")
+ require.Contains(t, apiRes, unresTransaction.Dtid)
+ require.Contains(t, apiRes, strconv.FormatInt(res.TimeCreated, 10))
+
+ // Wait for the commit to have returned.
+ wg.Wait()
+}
+
+// TestVindexes tests that different vindexes work well with two-phase commit.
+func TestVindexes(t *testing.T) {
+ testcases := []struct {
+ name string
+ initQueries []string
+ testQueries []string
+ logExpected map[string][]string
+ }{
+ {
+ name: "Lookup Single Update",
+ initQueries: []string{
+ "insert into twopc_lookup(id, col, col_unique) values(4, 4, 6)",
+ "insert into twopc_lookup(id, col, col_unique) values(6, 4, 9)",
+ "insert into twopc_lookup(id, col, col_unique) values(9, 4, 4)",
+ },
+ testQueries: []string{
+ "begin",
+ "update twopc_lookup set col = 9 where col_unique = 9",
+ "commit",
+ },
+ logExpected: map[string][]string{
+ "ks.redo_statement:80-": {
+ "insert:[VARCHAR(\"dtid-3\") INT64(1) BLOB(\"delete from lookup where col = 4 and id = 6 and keyspace_id = _binary'`\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0' limit 10001\")]",
+ "insert:[VARCHAR(\"dtid-3\") INT64(2) BLOB(\"insert into lookup(col, id, keyspace_id) values (9, 6, _binary'`\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0')\")]",
+ "delete:[VARCHAR(\"dtid-3\") INT64(1) BLOB(\"delete from lookup where col = 4 and id = 6 and keyspace_id = _binary'`\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0' limit 10001\")]",
+ "delete:[VARCHAR(\"dtid-3\") INT64(2) BLOB(\"insert into lookup(col, id, keyspace_id) values (9, 6, _binary'`\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0')\")]",
+ },
+ "ks.twopc_lookup:40-80": {
+ "update:[INT64(6) INT64(9) INT64(9)]",
+ },
+ "ks.lookup:80-": {
+ "delete:[INT64(4) INT64(6) VARBINARY(\"`\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ "insert:[INT64(9) INT64(6) VARBINARY(\"`\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ },
+ },
+ },
+ {
+ name: "Lookup-Unique Single Update",
+ initQueries: []string{
+ "insert into twopc_lookup(id, col, col_unique) values(4, 4, 6)",
+ "insert into twopc_lookup(id, col, col_unique) values(6, 4, 9)",
+ "insert into twopc_lookup(id, col, col_unique) values(9, 4, 4)",
+ },
+ testQueries: []string{
+ "begin",
+ "update twopc_lookup set col_unique = 20 where col_unique = 9",
+ "commit",
+ },
+ logExpected: map[string][]string{
+ "ks.redo_statement:80-": {
+ "insert:[VARCHAR(\"dtid-3\") INT64(1) BLOB(\"delete from lookup_unique where col_unique = 9 and keyspace_id = _binary'`\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0' limit 10001\")]",
+ "insert:[VARCHAR(\"dtid-3\") INT64(2) BLOB(\"insert into lookup_unique(col_unique, keyspace_id) values (20, _binary'`\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0')\")]",
+ "delete:[VARCHAR(\"dtid-3\") INT64(1) BLOB(\"delete from lookup_unique where col_unique = 9 and keyspace_id = _binary'`\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0' limit 10001\")]",
+ "delete:[VARCHAR(\"dtid-3\") INT64(2) BLOB(\"insert into lookup_unique(col_unique, keyspace_id) values (20, _binary'`\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0')\")]",
+ },
+ "ks.twopc_lookup:40-80": {
+ "update:[INT64(6) INT64(4) INT64(20)]",
+ },
+ "ks.lookup_unique:80-": {
+ "delete:[INT64(9) VARBINARY(\"`\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ "insert:[INT64(20) VARBINARY(\"`\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ },
+ },
+ },
+ {
+ name: "Lookup And Lookup-Unique Single Delete",
+ initQueries: []string{
+ "insert into twopc_lookup(id, col, col_unique) values(4, 4, 6)",
+ "insert into twopc_lookup(id, col, col_unique) values(6, 4, 9)",
+ "insert into twopc_lookup(id, col, col_unique) values(9, 4, 4)",
+ },
+ testQueries: []string{
+ "begin",
+ "delete from twopc_lookup where col_unique = 9",
+ "commit",
+ },
+ logExpected: map[string][]string{
+ "ks.redo_statement:80-": {
+ "insert:[VARCHAR(\"dtid-3\") INT64(1) BLOB(\"delete from lookup where col = 4 and id = 6 and keyspace_id = _binary'`\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0' limit 10001\")]",
+ "insert:[VARCHAR(\"dtid-3\") INT64(2) BLOB(\"delete from lookup_unique where col_unique = 9 and keyspace_id = _binary'`\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0' limit 10001\")]",
+ "delete:[VARCHAR(\"dtid-3\") INT64(1) BLOB(\"delete from lookup where col = 4 and id = 6 and keyspace_id = _binary'`\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0' limit 10001\")]",
+ "delete:[VARCHAR(\"dtid-3\") INT64(2) BLOB(\"delete from lookup_unique where col_unique = 9 and keyspace_id = _binary'`\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0' limit 10001\")]",
+ },
+ "ks.twopc_lookup:40-80": {
+ "delete:[INT64(6) INT64(4) INT64(9)]",
+ },
+ "ks.lookup_unique:80-": {
+ "delete:[INT64(9) VARBINARY(\"`\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ },
+ "ks.lookup:80-": {
+ "delete:[INT64(4) INT64(6) VARBINARY(\"`\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ },
+ },
+ },
+ {
+ name: "Lookup And Lookup-Unique Single Insertion",
+ initQueries: []string{
+ "insert into twopc_lookup(id, col, col_unique) values(4, 4, 6)",
+ "insert into twopc_lookup(id, col, col_unique) values(6, 4, 9)",
+ "insert into twopc_lookup(id, col, col_unique) values(9, 4, 4)",
+ },
+ testQueries: []string{
+ "begin",
+ "insert into twopc_lookup(id, col, col_unique) values(20, 4, 22)",
+ "commit",
+ },
+ logExpected: map[string][]string{
+ "ks.redo_statement:80-": {
+ "insert:[VARCHAR(\"dtid-3\") INT64(1) BLOB(\"insert into lookup(col, id, keyspace_id) values (4, 20, _binary'(\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0')\")]",
+ "delete:[VARCHAR(\"dtid-3\") INT64(1) BLOB(\"insert into lookup(col, id, keyspace_id) values (4, 20, _binary'(\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0')\")]",
+ },
+ "ks.lookup:80-": {
+ "insert:[INT64(4) INT64(20) VARBINARY(\"(\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ },
+ "ks.lookup_unique:-40": {
+ "insert:[INT64(22) VARBINARY(\"(\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ },
+ "ks.twopc_lookup:-40": {
+ "insert:[INT64(20) INT64(4) INT64(22)]",
+ },
+ },
+ },
+ {
+ name: "Lookup And Lookup-Unique Mix",
+ initQueries: []string{
+ "insert into twopc_lookup(id, col, col_unique) values(4, 4, 6)",
+ "insert into twopc_lookup(id, col, col_unique) values(6, 4, 9)",
+ "insert into twopc_lookup(id, col, col_unique) values(9, 4, 4)",
+ },
+ testQueries: []string{
+ "begin",
+ "insert into twopc_lookup(id, col, col_unique) values(20, 4, 22)",
+ "update twopc_lookup set col = 9 where col_unique = 9",
+ "delete from twopc_lookup where id = 9",
+ "commit",
+ },
+ logExpected: map[string][]string{
+ "ks.redo_statement:80-": {
+ "insert:[VARCHAR(\"dtid-3\") INT64(1) BLOB(\"insert into lookup(col, id, keyspace_id) values (4, 20, _binary'(\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0')\")]",
+ "insert:[VARCHAR(\"dtid-3\") INT64(2) BLOB(\"delete from lookup where col = 4 and id = 6 and keyspace_id = _binary'`\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0' limit 10001\")]",
+ "insert:[VARCHAR(\"dtid-3\") INT64(3) BLOB(\"insert into lookup(col, id, keyspace_id) values (9, 6, _binary'`\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0')\")]",
+ "insert:[VARCHAR(\"dtid-3\") INT64(4) BLOB(\"delete from lookup where col = 4 and id = 9 and keyspace_id = _binary'\\x90\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0' limit 10001\")]",
+ "insert:[VARCHAR(\"dtid-3\") INT64(5) BLOB(\"delete from lookup_unique where col_unique = 4 and keyspace_id = _binary'\\x90\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0' limit 10001\")]",
+ "insert:[VARCHAR(\"dtid-3\") INT64(6) BLOB(\"delete from twopc_lookup where id = 9 limit 10001 /* INT64 */\")]",
+ "delete:[VARCHAR(\"dtid-3\") INT64(1) BLOB(\"insert into lookup(col, id, keyspace_id) values (4, 20, _binary'(\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0')\")]",
+ "delete:[VARCHAR(\"dtid-3\") INT64(2) BLOB(\"delete from lookup where col = 4 and id = 6 and keyspace_id = _binary'`\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0' limit 10001\")]",
+ "delete:[VARCHAR(\"dtid-3\") INT64(3) BLOB(\"insert into lookup(col, id, keyspace_id) values (9, 6, _binary'`\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0')\")]",
+ "delete:[VARCHAR(\"dtid-3\") INT64(4) BLOB(\"delete from lookup where col = 4 and id = 9 and keyspace_id = _binary'\\x90\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0' limit 10001\")]",
+ "delete:[VARCHAR(\"dtid-3\") INT64(5) BLOB(\"delete from lookup_unique where col_unique = 4 and keyspace_id = _binary'\\x90\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0' limit 10001\")]",
+ "delete:[VARCHAR(\"dtid-3\") INT64(6) BLOB(\"delete from twopc_lookup where id = 9 limit 10001 /* INT64 */\")]",
+ },
+ "ks.redo_statement:40-80": {
+ "insert:[VARCHAR(\"dtid-3\") INT64(1) BLOB(\"update twopc_lookup set col = 9 where col_unique = 9 limit 10001 /* INT64 */\")]",
+ "delete:[VARCHAR(\"dtid-3\") INT64(1) BLOB(\"update twopc_lookup set col = 9 where col_unique = 9 limit 10001 /* INT64 */\")]",
+ },
+ "ks.twopc_lookup:-40": {
+ "insert:[INT64(20) INT64(4) INT64(22)]",
+ },
+ "ks.twopc_lookup:40-80": {
+ "update:[INT64(6) INT64(9) INT64(9)]",
+ },
+ "ks.twopc_lookup:80-": {
+ "delete:[INT64(9) INT64(4) INT64(4)]",
+ },
+ "ks.lookup_unique:-40": {
+ "insert:[INT64(22) VARBINARY(\"(\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ },
+ "ks.lookup_unique:80-": {
+ "delete:[INT64(4) VARBINARY(\"\\x90\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ },
+ "ks.lookup:80-": {
+ "insert:[INT64(4) INT64(20) VARBINARY(\"(\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ "delete:[INT64(4) INT64(6) VARBINARY(\"`\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ "insert:[INT64(9) INT64(6) VARBINARY(\"`\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ "delete:[INT64(4) INT64(9) VARBINARY(\"\\x90\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ },
+ },
+ },
+ {
+ name: "Consistent Lookup Single Update",
+ initQueries: []string{
+ "insert into twopc_consistent_lookup(id, col, col_unique) values(4, 4, 6)",
+ "insert into twopc_consistent_lookup(id, col, col_unique) values(6, 4, 9)",
+ "insert into twopc_consistent_lookup(id, col, col_unique) values(9, 4, 4)",
+ },
+ testQueries: []string{
+ "begin",
+ "update twopc_consistent_lookup set col = 9 where col_unique = 9",
+ "commit",
+ },
+ logExpected: map[string][]string{
+ "ks.twopc_consistent_lookup:40-80": {
+ "update:[INT64(6) INT64(9) INT64(9)]",
+ },
+ "ks.consistent_lookup:80-": {
+ "insert:[INT64(9) INT64(6) VARBINARY(\"`\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ "delete:[INT64(4) INT64(6) VARBINARY(\"`\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ },
+ },
+ },
+ {
+ name: "Consistent Lookup-Unique Single Update",
+ initQueries: []string{
+ "insert into twopc_consistent_lookup(id, col, col_unique) values(4, 4, 6)",
+ "insert into twopc_consistent_lookup(id, col, col_unique) values(6, 4, 9)",
+ "insert into twopc_consistent_lookup(id, col, col_unique) values(9, 4, 4)",
+ },
+ testQueries: []string{
+ "begin",
+ "update twopc_consistent_lookup set col_unique = 20 where col_unique = 9",
+ "commit",
+ },
+ logExpected: map[string][]string{
+ "ks.twopc_consistent_lookup:40-80": {
+ "update:[INT64(6) INT64(4) INT64(20)]",
+ },
+ "ks.consistent_lookup_unique:80-": {
+ "insert:[INT64(20) VARBINARY(\"`\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ "delete:[INT64(9) VARBINARY(\"`\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ },
+ },
+ },
+ {
+ name: "Consistent Lookup And Consistent Lookup-Unique Single Delete",
+ initQueries: []string{
+ "insert into twopc_consistent_lookup(id, col, col_unique) values(4, 4, 6)",
+ "insert into twopc_consistent_lookup(id, col, col_unique) values(6, 4, 9)",
+ "insert into twopc_consistent_lookup(id, col, col_unique) values(9, 4, 4)",
+ },
+ testQueries: []string{
+ "begin",
+ "delete from twopc_consistent_lookup where col_unique = 9",
+ "commit",
+ },
+ logExpected: map[string][]string{
+ "ks.twopc_consistent_lookup:40-80": {
+ "delete:[INT64(6) INT64(4) INT64(9)]",
+ },
+ "ks.consistent_lookup_unique:80-": {
+ "delete:[INT64(9) VARBINARY(\"`\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ },
+ "ks.consistent_lookup:80-": {
+ "delete:[INT64(4) INT64(6) VARBINARY(\"`\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ },
+ },
+ },
+ {
+ name: "Consistent Lookup And Consistent Lookup-Unique Mix",
+ initQueries: []string{
+ "insert into twopc_consistent_lookup(id, col, col_unique) values(4, 4, 6)",
+ "insert into twopc_consistent_lookup(id, col, col_unique) values(6, 4, 9)",
+ "insert into twopc_consistent_lookup(id, col, col_unique) values(9, 4, 4)",
+ },
+ testQueries: []string{
+ "begin",
+ "insert into twopc_consistent_lookup(id, col, col_unique) values(20, 4, 22)",
+ "update twopc_consistent_lookup set col = 9 where col_unique = 9",
+ "delete from twopc_consistent_lookup where id = 9",
+ "commit",
+ },
+ logExpected: map[string][]string{
+ "ks.redo_statement:80-": {
+ "insert:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"delete from twopc_consistent_lookup where id = 9 limit 10001 /* INT64 */\")]",
+ "delete:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"delete from twopc_consistent_lookup where id = 9 limit 10001 /* INT64 */\")]",
+ },
+ "ks.redo_statement:40-80": {
+ "insert:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"update twopc_consistent_lookup set col = 9 where col_unique = 9 limit 10001 /* INT64 */\")]",
+ "delete:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"update twopc_consistent_lookup set col = 9 where col_unique = 9 limit 10001 /* INT64 */\")]",
+ },
+ "ks.twopc_consistent_lookup:-40": {
+ "insert:[INT64(20) INT64(4) INT64(22)]",
+ },
+ "ks.twopc_consistent_lookup:40-80": {
+ "update:[INT64(6) INT64(9) INT64(9)]",
+ },
+ "ks.twopc_consistent_lookup:80-": {
+ "delete:[INT64(9) INT64(4) INT64(4)]",
+ },
+ "ks.consistent_lookup_unique:-40": {
+ "insert:[INT64(22) VARBINARY(\"(\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ },
+ "ks.consistent_lookup_unique:80-": {
+ "delete:[INT64(4) VARBINARY(\"\\x90\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ },
+ "ks.consistent_lookup:80-": {
+ "insert:[INT64(4) INT64(20) VARBINARY(\"(\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ "insert:[INT64(9) INT64(6) VARBINARY(\"`\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ "delete:[INT64(4) INT64(6) VARBINARY(\"`\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ "delete:[INT64(4) INT64(9) VARBINARY(\"\\x90\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")]",
+ },
+ },
+ },
+ }
+
+ for _, tt := range testcases {
+ t.Run(tt.name, func(t *testing.T) {
+ defer cleanup(t)
+
+ vtgateConn, err := cluster.DialVTGate(context.Background(), t.Name(), vtgateGrpcAddress, "dt_user", "")
+ require.NoError(t, err)
+ defer vtgateConn.Close()
+
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+
+ ch := make(chan *binlogdatapb.VEvent)
+ runVStream(t, ctx, ch, vtgateConn)
+
+ conn := vtgateConn.Session("", nil)
+ qCtx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+
+ // initial insert
+ for _, query := range tt.initQueries {
+ execute(qCtx, t, conn, query)
+ }
+
+ // ignore initial change
+ tableMap := make(map[string][]*querypb.Field)
+ dtMap := make(map[string]string)
+ _ = retrieveTransitionsWithTimeout(t, ch, tableMap, dtMap, 2*time.Second)
+
+ // Insert into multiple shards
+ for _, query := range tt.testQueries {
+ execute(qCtx, t, conn, query)
+ }
+
+ // Below check ensures that the transaction is resolved by the resolver on receiving unresolved transaction signal from MM.
+ logTable := retrieveTransitionsWithTimeout(t, ch, tableMap, dtMap, 2*time.Second)
+ for key, val := range tt.logExpected {
+ assert.EqualValues(t, val, logTable[key], key)
+ }
+ })
+ }
+}
+
+func getTablet(tabletGrpcPort int) *tabletpb.Tablet {
+ portMap := make(map[string]int32)
+ portMap["grpc"] = int32(tabletGrpcPort)
+ return &tabletpb.Tablet{Hostname: hostname, PortMap: portMap}
}
diff --git a/go/test/endtoend/transaction/twopc/utils/utils.go b/go/test/endtoend/transaction/twopc/utils/utils.go
index 14f3214ae00..2bed39c2b87 100644
--- a/go/test/endtoend/transaction/twopc/utils/utils.go
+++ b/go/test/endtoend/transaction/twopc/utils/utils.go
@@ -23,6 +23,7 @@ import (
"path"
"slices"
"strings"
+ "sync"
"testing"
"time"
@@ -88,10 +89,33 @@ func ClearOutTable(t *testing.T, vtParams mysql.ConnParams, tableName string) {
// WriteTestCommunicationFile writes the content to the file with the given name.
// We use these files to coordinate with the vttablets running in the debug mode.
func WriteTestCommunicationFile(t *testing.T, fileName string, content string) {
+ // Delete the file just to make sure it doesn't exist before we write to it.
+ DeleteFile(fileName)
err := os.WriteFile(path.Join(os.Getenv("VTDATAROOT"), fileName), []byte(content), 0644)
require.NoError(t, err)
}
+// RunMultiShardCommitWithDelay runs a multi shard commit and configures it to wait for a certain amount of time in the commit phase.
+func RunMultiShardCommitWithDelay(t *testing.T, conn *mysql.Conn, commitDelayTime string, wg *sync.WaitGroup, queries []string) {
+ // Run all the queries to start the transaction.
+ for _, query := range queries {
+ utils.Exec(t, conn, query)
+ }
+ // We want to delay the commit on one of the shards to simulate slow commits on a shard.
+ WriteTestCommunicationFile(t, DebugDelayCommitShard, "80-")
+ WriteTestCommunicationFile(t, DebugDelayCommitTime, commitDelayTime)
+ // We will execute a commit in a go routine, because we know it will take some time to complete.
+ // While the commit is ongoing, we would like to run the disruption.
+ wg.Add(1)
+ go func() {
+ defer wg.Done()
+ _, err := utils.ExecAllowError(t, conn, "commit")
+ if err != nil {
+ log.Errorf("Error in commit - %v", err)
+ }
+ }()
+}
+
// DeleteFile deletes the file specified.
func DeleteFile(fileName string) {
_ = os.Remove(path.Join(os.Getenv("VTDATAROOT"), fileName))
@@ -219,5 +243,24 @@ func AddShards(t *testing.T, clusterInstance *cluster.LocalProcessCluster, keysp
shard, err := clusterInstance.AddShard(keyspaceName, shardName, 3, false, nil)
require.NoError(t, err)
clusterInstance.Keyspaces[0].Shards = append(clusterInstance.Keyspaces[0].Shards, *shard)
+ for _, vttablet := range shard.Vttablets {
+ err = vttablet.VttabletProcess.WaitForTabletStatuses([]string{"SERVING"})
+ require.NoError(t, err)
+ }
+ }
+}
+
+type Warn struct {
+ Level string
+ Code uint16
+ Msg string
+}
+
+func ToWarn(row sqltypes.Row) Warn {
+ code, _ := row[1].ToUint16()
+ return Warn{
+ Level: row[0].ToString(),
+ Code: code,
+ Msg: row[2].ToString(),
}
}
diff --git a/go/test/endtoend/transaction/twopc/vschema.json b/go/test/endtoend/transaction/twopc/vschema.json
index bca58b05c1e..e6bbbfdb9a4 100644
--- a/go/test/endtoend/transaction/twopc/vschema.json
+++ b/go/test/endtoend/transaction/twopc/vschema.json
@@ -6,6 +6,42 @@
},
"reverse_bits": {
"type": "reverse_bits"
+ },
+ "lookup_vdx": {
+ "type": "lookup",
+ "params": {
+ "table": "lookup",
+ "from": "col,id",
+ "to": "keyspace_id"
+ },
+ "owner": "twopc_lookup"
+ },
+ "lookup_unique_vdx": {
+ "type": "lookup_unique",
+ "params": {
+ "table": "lookup_unique",
+ "from": "col_unique",
+ "to": "keyspace_id"
+ },
+ "owner": "twopc_lookup"
+ },
+ "consistent_lookup_vdx": {
+ "type": "consistent_lookup",
+ "params": {
+ "table": "consistent_lookup",
+ "from": "col,id",
+ "to": "keyspace_id"
+ },
+ "owner": "twopc_consistent_lookup"
+ },
+ "consistent_lookup_unique_vdx": {
+ "type": "consistent_lookup_unique",
+ "params": {
+ "table": "consistent_lookup_unique",
+ "from": "col_unique",
+ "to": "keyspace_id"
+ },
+ "owner": "twopc_consistent_lookup"
}
},
"tables": {
@@ -32,6 +68,76 @@
"name": "reverse_bits"
}
]
+ },
+ "twopc_lookup": {
+ "column_vindexes": [
+ {
+ "column": "id",
+ "name": "reverse_bits"
+ },
+ {
+ "columns": [
+ "col",
+ "id"
+ ],
+ "name": "lookup_vdx"
+ },
+ {
+ "column": "col_unique",
+ "name": "lookup_unique_vdx"
+ }
+ ]
+ },
+ "lookup": {
+ "column_vindexes": [
+ {
+ "column": "col",
+ "name": "xxhash"
+ }
+ ]
+ },
+ "lookup_unique": {
+ "column_vindexes": [
+ {
+ "column": "col_unique",
+ "name": "xxhash"
+ }
+ ]
+ },
+ "twopc_consistent_lookup": {
+ "column_vindexes": [
+ {
+ "column": "id",
+ "name": "reverse_bits"
+ },
+ {
+ "columns": [
+ "col",
+ "id"
+ ],
+ "name": "consistent_lookup_vdx"
+ },
+ {
+ "column": "col_unique",
+ "name": "consistent_lookup_unique_vdx"
+ }
+ ]
+ },
+ "consistent_lookup": {
+ "column_vindexes": [
+ {
+ "column": "col",
+ "name": "xxhash"
+ }
+ ]
+ },
+ "consistent_lookup_unique": {
+ "column_vindexes": [
+ {
+ "column": "col_unique",
+ "name": "xxhash"
+ }
+ ]
}
}
}
\ No newline at end of file
diff --git a/go/test/endtoend/transaction/tx_test.go b/go/test/endtoend/transaction/tx_test.go
index 475b17cfa2c..89531952b13 100644
--- a/go/test/endtoend/transaction/tx_test.go
+++ b/go/test/endtoend/transaction/tx_test.go
@@ -24,12 +24,11 @@ import (
"os"
"testing"
- "vitess.io/vitess/go/test/endtoend/utils"
-
"github.com/stretchr/testify/require"
"vitess.io/vitess/go/mysql"
"vitess.io/vitess/go/test/endtoend/cluster"
+ "vitess.io/vitess/go/test/endtoend/utils"
)
var (
@@ -47,7 +46,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitcode, err := func() (int, error) {
@@ -58,7 +56,6 @@ func TestMain(m *testing.M) {
clusterInstance.VtgateGrpcPort = clusterInstance.GetAndReservePort()
// Set extra tablet args for twopc
clusterInstance.VtTabletExtraArgs = []string{
- "--twopc_enable",
"--twopc_abandon_age", "3600",
}
@@ -96,7 +93,6 @@ func TestMain(m *testing.M) {
// TestTransactionModes tests transactions using twopc mode
func TestTransactionModes(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
@@ -142,7 +138,6 @@ func TestTransactionModes(t *testing.T) {
// TestTransactionIsolation tests transaction isolation level.
func TestTransactionIsolation(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
@@ -249,6 +244,5 @@ func start(t *testing.T) func() {
return func() {
deleteAll()
- cluster.PanicHandler(t)
}
}
diff --git a/go/test/endtoend/utils/cmp.go b/go/test/endtoend/utils/cmp.go
index 3b47e1f68dc..7d94c181abd 100644
--- a/go/test/endtoend/utils/cmp.go
+++ b/go/test/endtoend/utils/cmp.go
@@ -215,6 +215,18 @@ func (mcmp *MySQLCompare) Exec(query string) *sqltypes.Result {
return vtQr
}
+// ExecAssert is the same as Exec, but it only does assertions, it won't FailNow
+func (mcmp *MySQLCompare) ExecAssert(query string) *sqltypes.Result {
+ mcmp.t.Helper()
+ vtQr, err := mcmp.VtConn.ExecuteFetch(query, 1000, true)
+ assert.NoError(mcmp.t, err, "[Vitess Error] for query: "+query)
+
+ mysqlQr, err := mcmp.MySQLConn.ExecuteFetch(query, 1000, true)
+ assert.NoError(mcmp.t, err, "[MySQL Error] for query: "+query)
+ compareVitessAndMySQLResults(mcmp.t, query, mcmp.VtConn, vtQr, mysqlQr, CompareOptions{})
+ return vtQr
+}
+
// ExecNoCompare executes the query on vitess and mysql but does not compare the result with each other.
func (mcmp *MySQLCompare) ExecNoCompare(query string) (*sqltypes.Result, *sqltypes.Result) {
mcmp.t.Helper()
diff --git a/go/test/endtoend/utils/mysql_test.go b/go/test/endtoend/utils/mysql_test.go
index d2b10f1d0a8..4d3d992e879 100644
--- a/go/test/endtoend/utils/mysql_test.go
+++ b/go/test/endtoend/utils/mysql_test.go
@@ -50,7 +50,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
exitCode := func() int {
clusterInstance = cluster.NewCluster(cell, "localhost")
@@ -233,6 +232,13 @@ func TestPrimaryStatus(t *testing.T) {
assert.NoError(t, err)
assert.True(t, res.Position.Equal(r.Position), "primary replication status should be same as replication status here")
+
+ suuid, err := mysqld.GetServerUUID(context.Background())
+ assert.NoError(t, err)
+ assert.NotEmpty(t, suuid)
+
+ // The server UUID read from primary status and GetServerUUID should match
+ assert.Equal(t, suuid, res.ServerUUID)
}
func TestReplicationConfiguration(t *testing.T) {
diff --git a/go/test/endtoend/utils/mysqlvsvitess/main_test.go b/go/test/endtoend/utils/mysqlvsvitess/main_test.go
index 8f162fae41d..f064afb895d 100644
--- a/go/test/endtoend/utils/mysqlvsvitess/main_test.go
+++ b/go/test/endtoend/utils/mysqlvsvitess/main_test.go
@@ -64,7 +64,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
exitCode := func() int {
clusterInstance = cluster.NewCluster(cell, "localhost")
diff --git a/go/test/endtoend/utils/utils.go b/go/test/endtoend/utils/utils.go
index 35404981164..baa82821306 100644
--- a/go/test/endtoend/utils/utils.go
+++ b/go/test/endtoend/utils/utils.go
@@ -32,6 +32,7 @@ import (
"vitess.io/vitess/go/mysql"
"vitess.io/vitess/go/sqltypes"
"vitess.io/vitess/go/test/endtoend/cluster"
+ "vitess.io/vitess/go/vt/vtgate/engine"
)
// AssertContains ensures the given query result contains the expected results.
@@ -160,6 +161,19 @@ func Exec(t testing.TB, conn *mysql.Conn, query string) *sqltypes.Result {
return qr
}
+// ExecTrace executes the given query with trace using the given connection. The trace result is returned.
+// The test fails if the query produces an error.
+func ExecTrace(t testing.TB, conn *mysql.Conn, query string) engine.PrimitiveDescription {
+ t.Helper()
+ qr, err := conn.ExecuteFetch(fmt.Sprintf("vexplain trace %s", query), 10000, false)
+ require.NoError(t, err, "for query: "+query)
+
+ // Extract the trace result and format it with indentation for pretty printing
+ pd, err := engine.PrimitiveDescriptionFromString(qr.Rows[0][0].ToString())
+ require.NoError(t, err)
+ return pd
+}
+
// ExecMulti executes the given (potential multi) queries using the given connection.
// The test fails if any of the queries produces an error
func ExecMulti(t testing.TB, conn *mysql.Conn, query string) error {
diff --git a/go/test/endtoend/vault/vault_test.go b/go/test/endtoend/vault/vault_test.go
index f8e19c07a0c..aab68159ca3 100644
--- a/go/test/endtoend/vault/vault_test.go
+++ b/go/test/endtoend/vault/vault_test.go
@@ -99,7 +99,6 @@ var (
)
func TestVaultAuth(t *testing.T) {
- defer cluster.PanicHandler(nil)
// Instantiate Vitess Cluster objects and start topo
initializeClusterEarly(t)
diff --git a/go/test/endtoend/versionupgrade/upgrade_test.go b/go/test/endtoend/versionupgrade/upgrade_test.go
index 181b5dfc9ad..48e552c3a7c 100644
--- a/go/test/endtoend/versionupgrade/upgrade_test.go
+++ b/go/test/endtoend/versionupgrade/upgrade_test.go
@@ -72,7 +72,6 @@ var (
// TestMain is the main entry point
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitcode, err := func() (int, error) {
@@ -131,12 +130,10 @@ func TestMain(m *testing.M) {
}
func TestShards(t *testing.T) {
- defer cluster.PanicHandler(t)
assert.Equal(t, 2, len(clusterInstance.Keyspaces[0].Shards))
}
func TestDeploySchema(t *testing.T) {
- defer cluster.PanicHandler(t)
if clusterInstance.ReusingVTDATAROOT {
// we assume data is already deployed
@@ -163,7 +160,6 @@ func TestDeploySchema(t *testing.T) {
}
func TestTablesExist(t *testing.T) {
- defer cluster.PanicHandler(t)
checkTables(t, "", totalTableCount)
}
diff --git a/go/test/endtoend/vreplication/cluster_test.go b/go/test/endtoend/vreplication/cluster_test.go
index 13268fc749c..dc5a72e5e88 100644
--- a/go/test/endtoend/vreplication/cluster_test.go
+++ b/go/test/endtoend/vreplication/cluster_test.go
@@ -30,6 +30,8 @@ import (
"testing"
"time"
+ "github.com/stretchr/testify/require"
+
"vitess.io/vitess/go/mysql"
"vitess.io/vitess/go/test/endtoend/cluster"
"vitess.io/vitess/go/test/endtoend/throttler"
@@ -37,11 +39,8 @@ import (
"vitess.io/vitess/go/vt/mysqlctl"
"vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/vtgate/planbuilder/plancontext"
- vttablet "vitess.io/vitess/go/vt/vttablet/common"
vtctldatapb "vitess.io/vitess/go/vt/proto/vtctldata"
-
- "github.com/stretchr/testify/require"
)
var (
@@ -101,18 +100,6 @@ func (cc *ClusterConfig) enableGTIDCompression() func() {
}
}
-// setAllVTTabletExperimentalFlags sets all the experimental flags for vttablet and returns a function
-// that can be used to reset them in a defer.
-func setAllVTTabletExperimentalFlags() func() {
- experimentalArgs := fmt.Sprintf("--vreplication_experimental_flags=%d",
- vttablet.VReplicationExperimentalFlagAllowNoBlobBinlogRowImage|vttablet.VReplicationExperimentalFlagOptimizeInserts|vttablet.VReplicationExperimentalFlagVPlayerBatching)
- oldArgs := extraVTTabletArgs
- extraVTTabletArgs = append(extraVTTabletArgs, experimentalArgs)
- return func() {
- extraVTTabletArgs = oldArgs
- }
-}
-
// VitessCluster represents all components within the test cluster
type VitessCluster struct {
t *testing.T
diff --git a/go/test/endtoend/vreplication/config_test.go b/go/test/endtoend/vreplication/config_test.go
index 25a4b734259..4b4bcfecc35 100644
--- a/go/test/endtoend/vreplication/config_test.go
+++ b/go/test/endtoend/vreplication/config_test.go
@@ -48,8 +48,8 @@ var (
customerTypes = []string{"'individual'", "'soho'", "'enterprise'"}
initialProductSchema = fmt.Sprintf(`
create table product(pid int, description varbinary(128), date1 datetime not null default '0000-00-00 00:00:00', date2 datetime not null default '2021-00-01 00:00:00', primary key(pid), key(date1,date2)) CHARSET=utf8mb4;
-create table customer(cid int auto_increment, name varchar(128) collate utf8mb4_bin, meta json default null, typ enum(%s), sport set('football','cricket','baseball'),
- ts timestamp not null default current_timestamp, bits bit(2) default b'11', date1 datetime not null default '0000-00-00 00:00:00',
+create table customer(cid int auto_increment, name varchar(128) collate utf8mb4_bin, meta json default null, industryCategory varchar(100) generated always as (json_extract(meta, _utf8mb4'$.industry')) virtual,
+ typ enum(%s), sport set('football','cricket','baseball'), ts timestamp not null default current_timestamp, bits bit(2) default b'11', date1 datetime not null default '0000-00-00 00:00:00',
date2 datetime not null default '2021-00-01 00:00:00', dec80 decimal(8,0), blb blob, primary key(cid,typ), key(name)) CHARSET=utf8mb4;
create table customer_seq(id int, next_id bigint, cache bigint, primary key(id)) comment 'vitess_sequence';
create table merchant(mname varchar(128), category varchar(128), primary key(mname), key(category)) CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
diff --git a/go/test/endtoend/vreplication/fk_test.go b/go/test/endtoend/vreplication/fk_test.go
index 34881cbcd1a..f977d5a74cd 100644
--- a/go/test/endtoend/vreplication/fk_test.go
+++ b/go/test/endtoend/vreplication/fk_test.go
@@ -29,7 +29,6 @@ import (
"vitess.io/vitess/go/mysql"
"vitess.io/vitess/go/sqltypes"
"vitess.io/vitess/go/vt/log"
- vttablet "vitess.io/vitess/go/vt/vttablet/common"
binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata"
)
@@ -43,9 +42,6 @@ func TestFKWorkflow(t *testing.T) {
extraVTTabletArgs = []string{
// Ensure that there are multiple copy phase cycles per table.
"--vstream_packet_size=256",
- // Test VPlayer batching mode.
- fmt.Sprintf("--vreplication_experimental_flags=%d",
- vttablet.VReplicationExperimentalFlagAllowNoBlobBinlogRowImage|vttablet.VReplicationExperimentalFlagOptimizeInserts|vttablet.VReplicationExperimentalFlagVPlayerBatching),
}
defer func() { extraVTTabletArgs = nil }()
diff --git a/go/test/endtoend/vreplication/helper_test.go b/go/test/endtoend/vreplication/helper_test.go
index 44c35d0acea..3795b6f52d5 100644
--- a/go/test/endtoend/vreplication/helper_test.go
+++ b/go/test/endtoend/vreplication/helper_test.go
@@ -331,8 +331,11 @@ func executeOnTablet(t *testing.T, conn *mysql.Conn, tablet *cluster.VttabletPro
func assertQueryExecutesOnTablet(t *testing.T, conn *mysql.Conn, tablet *cluster.VttabletProcess, ksName string, query string, matchQuery string) {
t.Helper()
+ rr, err := vc.VtctldClient.ExecuteCommandWithOutput("GetRoutingRules")
+ require.NoError(t, err)
count0, body0, count1, body1 := executeOnTablet(t, conn, tablet, ksName, query, matchQuery)
- assert.Equalf(t, count0+1, count1, "query %q did not execute in target;\ntried to match %q\nbefore:\n%s\n\nafter:\n%s\n\n", query, matchQuery, body0, body1)
+ require.Equalf(t, count0+1, count1, "query %q did not execute on destination %s (%s-%d);\ntried to match %q\nbefore:\n%s\n\nafter:\n%s\n\nrouting rules:\n%s\n\n",
+ query, ksName, tablet.Cell, tablet.TabletUID, matchQuery, body0, body1, rr)
}
func assertQueryDoesNotExecutesOnTablet(t *testing.T, conn *mysql.Conn, tablet *cluster.VttabletProcess, ksName string, query string, matchQuery string) {
diff --git a/go/test/endtoend/vreplication/lookupindex_helper_test.go b/go/test/endtoend/vreplication/lookupindex_helper_test.go
new file mode 100644
index 00000000000..864a5e0f7fc
--- /dev/null
+++ b/go/test/endtoend/vreplication/lookupindex_helper_test.go
@@ -0,0 +1,113 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package vreplication
+
+import (
+ "fmt"
+ "strings"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+ "github.com/tidwall/gjson"
+
+ "vitess.io/vitess/go/vt/sqlparser"
+
+ binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata"
+)
+
+type lookupIndex struct {
+ typ string
+ name string
+ tableKeyspace string
+ table string
+ columns []string
+ ownerTable string
+ ownerTableKeyspace string
+ ignoreNulls bool
+
+ t *testing.T
+}
+
+func (li *lookupIndex) String() string {
+ return li.typ + " " + li.name + " on " + li.tableKeyspace + "." + li.table + " (" + li.columns[0] + ")"
+}
+
+func (li *lookupIndex) create() {
+ cols := strings.Join(li.columns, ",")
+ args := []string{
+ "LookupVindex",
+ "--name", li.name,
+ "--table-keyspace=" + li.ownerTableKeyspace,
+ "create",
+ "--keyspace=" + li.tableKeyspace,
+ "--type=" + li.typ,
+ "--table-owner=" + li.ownerTable,
+ "--table-owner-columns=" + cols,
+ "--tablet-types=PRIMARY",
+ }
+ if li.ignoreNulls {
+ args = append(args, "--ignore-nulls")
+ }
+
+ err := vc.VtctldClient.ExecuteCommand(args...)
+ require.NoError(li.t, err, "error executing LookupVindex create: %v", err)
+ waitForWorkflowState(li.t, vc, fmt.Sprintf("%s.%s", li.ownerTableKeyspace, li.name), binlogdatapb.VReplicationWorkflowState_Running.String())
+ li.expectWriteOnly(true)
+}
+
+func (li *lookupIndex) cancel() {
+ panic("not implemented")
+}
+
+func (li *lookupIndex) externalize() {
+ args := []string{
+ "LookupVindex",
+ "--name", li.name,
+ "--table-keyspace=" + li.ownerTableKeyspace,
+ "externalize",
+ "--keyspace=" + li.tableKeyspace,
+ }
+ err := vc.VtctldClient.ExecuteCommand(args...)
+ require.NoError(li.t, err, "error executing LookupVindex externalize: %v", err)
+ li.expectWriteOnly(false)
+}
+
+func (li *lookupIndex) show() error {
+ return nil
+}
+
+func (li *lookupIndex) expectWriteOnly(expected bool) {
+ vschema, err := vc.VtctldClient.ExecuteCommandWithOutput("GetVSchema", li.ownerTableKeyspace)
+ require.NoError(li.t, err, "error executing GetVSchema: %v", err)
+ vdx := gjson.Get(vschema, fmt.Sprintf("vindexes.%s", li.name))
+ require.NotNil(li.t, vdx, "lookup vindex %s not found", li.name)
+ want := ""
+ if expected {
+ want = "true"
+ }
+ require.Equal(li.t, want, vdx.Get("params.write_only").String(), "expected write_only parameter to be %s", want)
+}
+
+func getNumRowsInQuery(t *testing.T, query string) int {
+ stmt, err := sqlparser.NewTestParser().Parse(query)
+ require.NoError(t, err)
+ insertStmt, ok := stmt.(*sqlparser.Insert)
+ require.True(t, ok)
+ rows, ok := insertStmt.Rows.(sqlparser.Values)
+ require.True(t, ok)
+ return len(rows)
+}
diff --git a/go/test/endtoend/vreplication/lookupindex_test.go b/go/test/endtoend/vreplication/lookupindex_test.go
new file mode 100644
index 00000000000..348a0ee5906
--- /dev/null
+++ b/go/test/endtoend/vreplication/lookupindex_test.go
@@ -0,0 +1,204 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package vreplication
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/require"
+
+ "vitess.io/vitess/go/test/endtoend/cluster"
+ vttablet "vitess.io/vitess/go/vt/vttablet/common"
+)
+
+type TestClusterSpec struct {
+ keyspaceName string
+ vschema string
+ schema string
+}
+
+var lookupClusterSpec = TestClusterSpec{
+ keyspaceName: "lookup",
+ vschema: `
+{
+ "sharded": true,
+ "vindexes": {
+ "reverse_bits": {
+ "type": "reverse_bits"
+ }
+ },
+ "tables": {
+ "t1": {
+ "column_vindexes": [
+ {
+ "column": "c1",
+ "name": "reverse_bits"
+ }
+ ]
+ }
+ }
+}
+`,
+ schema: `
+create table t1(
+ c1 int,
+ c2 int,
+ val varchar(128),
+ primary key(c1)
+);
+`,
+}
+
+func setupLookupIndexKeyspace(t *testing.T) map[string]*cluster.VttabletProcess {
+ tablets := make(map[string]*cluster.VttabletProcess)
+ if _, err := vc.AddKeyspace(t, []*Cell{vc.Cells["zone1"]}, lookupClusterSpec.keyspaceName, "-80,80-",
+ lookupClusterSpec.vschema, lookupClusterSpec.schema, defaultReplicas, defaultRdonly, 200, nil); err != nil {
+ require.NoError(t, err)
+ }
+ defaultCell := vc.Cells[vc.CellNames[0]]
+ ks := vc.Cells[defaultCell.Name].Keyspaces[lookupClusterSpec.keyspaceName]
+ targetTab1 = ks.Shards["-80"].Tablets["zone1-200"].Vttablet
+ targetTab2 = ks.Shards["80-"].Tablets["zone1-300"].Vttablet
+ tablets["-80"] = targetTab1
+ tablets["80-"] = targetTab2
+ return tablets
+}
+
+type lookupTestCase struct {
+ name string
+ li *lookupIndex
+ initQuery string
+ runningQuery string
+ postExternalizeQuery string
+ cleanupQuery string
+}
+
+func TestLookupIndex(t *testing.T) {
+ setSidecarDBName("_vt")
+ origDefaultReplicas := defaultReplicas
+ origDefaultRdonly := defaultRdonly
+ defer func() {
+ defaultReplicas = origDefaultReplicas
+ defaultRdonly = origDefaultRdonly
+ }()
+ defaultReplicas = 1
+ defaultRdonly = 0
+ vc = setupMinimalCluster(t)
+ defer vc.TearDown()
+ vttablet.InitVReplicationConfigDefaults()
+
+ _ = setupLookupIndexKeyspace(t)
+
+ initQuery := "insert into t1 (c1, c2, val) values (1, 1, 'val1'), (2, 2, 'val2'), (3, 3, 'val3')"
+ runningQuery := "insert into t1 (c1, c2, val) values (4, 4, 'val4'), (5, 5, 'val5'), (6, 6, 'val6')"
+ postExternalizeQuery := "insert into t1 (c1, c2, val) values (7, 7, 'val7'), (8, 8, 'val8'), (9, 9, 'val9')"
+ cleanupQuery := "delete from t1"
+
+ testCases := []lookupTestCase{
+ {
+ name: "non-unique lookup index, one column",
+ li: &lookupIndex{
+ typ: "consistent_lookup",
+ name: "t1_c2_lookup",
+ tableKeyspace: lookupClusterSpec.keyspaceName,
+ table: "t1",
+ columns: []string{"c2"},
+ ownerTable: "t1",
+ ownerTableKeyspace: lookupClusterSpec.keyspaceName,
+ ignoreNulls: true,
+ t: t,
+ },
+ },
+ {
+ name: "lookup index, two columns",
+ li: &lookupIndex{
+ typ: "lookup",
+ name: "t1_c2_val_lookup",
+ tableKeyspace: lookupClusterSpec.keyspaceName,
+ table: "t1",
+ columns: []string{"c2", "val"},
+ ownerTable: "t1",
+ ownerTableKeyspace: lookupClusterSpec.keyspaceName,
+ ignoreNulls: true,
+ t: t,
+ },
+ },
+ {
+ name: "unique lookup index, one column",
+ li: &lookupIndex{
+ typ: "lookup_unique",
+ name: "t1_c2_unique_lookup",
+ tableKeyspace: lookupClusterSpec.keyspaceName,
+ table: "t1",
+ columns: []string{"c2"},
+ ownerTable: "t1",
+ ownerTableKeyspace: lookupClusterSpec.keyspaceName,
+ ignoreNulls: true,
+ t: t,
+ },
+ },
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ tc.initQuery = initQuery
+ tc.runningQuery = runningQuery
+ tc.postExternalizeQuery = postExternalizeQuery
+ tc.cleanupQuery = cleanupQuery
+ testLookupVindex(t, &tc)
+ })
+ }
+}
+
+func testLookupVindex(t *testing.T, tc *lookupTestCase) {
+ vtgateConn, cancel := getVTGateConn()
+ defer cancel()
+ var totalRows int
+ li := tc.li
+
+ t.Run("init data", func(t *testing.T) {
+ totalRows += getNumRowsInQuery(t, tc.initQuery)
+ _, err := vtgateConn.ExecuteFetch(tc.initQuery, 1000, false)
+ require.NoError(t, err)
+ })
+
+ t.Run("create", func(t *testing.T) {
+ tc.li.create()
+
+ lks := li.tableKeyspace
+ vindexName := li.name
+ waitForRowCount(t, vtgateConn, lks, vindexName, totalRows)
+ totalRows += getNumRowsInQuery(t, tc.runningQuery)
+ _, err := vtgateConn.ExecuteFetch(tc.runningQuery, 1000, false)
+ require.NoError(t, err)
+ waitForRowCount(t, vtgateConn, tc.li.ownerTableKeyspace, li.name, totalRows)
+ })
+
+ t.Run("externalize", func(t *testing.T) {
+ tc.li.externalize()
+ totalRows += getNumRowsInQuery(t, tc.postExternalizeQuery)
+ _, err := vtgateConn.ExecuteFetch(tc.postExternalizeQuery, 1000, false)
+ require.NoError(t, err)
+ waitForRowCount(t, vtgateConn, tc.li.ownerTableKeyspace, li.name, totalRows)
+ })
+
+ t.Run("cleanup", func(t *testing.T) {
+ _, err := vtgateConn.ExecuteFetch(tc.cleanupQuery, 1000, false)
+ require.NoError(t, err)
+ waitForRowCount(t, vtgateConn, tc.li.ownerTableKeyspace, li.name, 0)
+ })
+}
diff --git a/go/test/endtoend/vreplication/movetables_buffering_test.go b/go/test/endtoend/vreplication/movetables_buffering_test.go
index f456c32bfd5..7ef75390fbc 100644
--- a/go/test/endtoend/vreplication/movetables_buffering_test.go
+++ b/go/test/endtoend/vreplication/movetables_buffering_test.go
@@ -12,7 +12,14 @@ import (
)
func TestMoveTablesBuffering(t *testing.T) {
- defaultRdonly = 1
+ ogReplicas := defaultReplicas
+ ogRdOnly := defaultRdonly
+ defer func() {
+ defaultReplicas = ogReplicas
+ defaultRdonly = ogRdOnly
+ }()
+ defaultRdonly = 0
+ defaultReplicas = 0
vc = setupMinimalCluster(t)
defer vc.TearDown()
@@ -32,7 +39,7 @@ func TestMoveTablesBuffering(t *testing.T) {
catchup(t, targetTab1, workflowName, "MoveTables")
catchup(t, targetTab2, workflowName, "MoveTables")
- vdiffSideBySide(t, ksWorkflow, "")
+ vdiff(t, targetKs, workflowName, "", false, true, nil)
waitForLowLag(t, "customer", workflowName)
for i := 0; i < 10; i++ {
tstWorkflowSwitchReadsAndWrites(t)
diff --git a/go/test/endtoend/vreplication/movetables_mirrortraffic_test.go b/go/test/endtoend/vreplication/movetables_mirrortraffic_test.go
index 54e648de6b4..e0e7dbfc148 100644
--- a/go/test/endtoend/vreplication/movetables_mirrortraffic_test.go
+++ b/go/test/endtoend/vreplication/movetables_mirrortraffic_test.go
@@ -25,6 +25,14 @@ import (
func testMoveTablesMirrorTraffic(t *testing.T, flavor workflowFlavor) {
setSidecarDBName("_vt")
+ ogReplicas := defaultReplicas
+ ogRdOnly := defaultRdonly
+ defer func() {
+ defaultReplicas = ogReplicas
+ defaultRdonly = ogRdOnly
+ }()
+ defaultRdonly = 0
+ defaultReplicas = 0
vc = setupMinimalCluster(t)
defer vc.TearDown()
diff --git a/go/test/endtoend/vreplication/multi_tenant_test.go b/go/test/endtoend/vreplication/multi_tenant_test.go
index b10395b08c8..6bceaeefc6e 100644
--- a/go/test/endtoend/vreplication/multi_tenant_test.go
+++ b/go/test/endtoend/vreplication/multi_tenant_test.go
@@ -196,12 +196,38 @@ func TestMultiTenantSimple(t *testing.T) {
require.Zero(t, len(getKeyspaceRoutingRules(t, vc).Rules))
- mt.Create()
- confirmKeyspacesRoutedTo(t, sourceKeyspace, "s1", "t1", nil)
- validateKeyspaceRoutingRules(t, vc, initialRules)
+ createFunc := func() {
+ mt.Create()
+ confirmKeyspacesRoutedTo(t, sourceKeyspace, "s1", "t1", nil)
+ validateKeyspaceRoutingRules(t, vc, initialRules)
- lastIndex = insertRows(lastIndex, sourceKeyspace)
- waitForWorkflowState(t, vc, fmt.Sprintf("%s.%s", targetKeyspace, mt.workflowName), binlogdatapb.VReplicationWorkflowState_Running.String())
+ lastIndex = insertRows(lastIndex, sourceKeyspace)
+ waitForWorkflowState(t, vc, fmt.Sprintf("%s.%s", targetKeyspace, mt.workflowName), binlogdatapb.VReplicationWorkflowState_Running.String())
+ }
+
+ t.Run("cancel", func(t *testing.T) {
+ // First let's test canceling the workflow to ensure that it properly
+ // cleans up all of the data.
+ createFunc()
+ mt.Cancel()
+ rowCount := getRowCount(t, vtgateConn, fmt.Sprintf("%s.%s", targetKeyspace, "t1"))
+ require.Zero(t, rowCount)
+ })
+
+ t.Run("cancel after switching reads", func(t *testing.T) {
+ // First let's test canceling the workflow after only switching reads
+ // to ensure that it properly cleans up all of the state.
+ createFunc()
+ mt.SwitchReads()
+ confirmOnlyReadsSwitched(t)
+ mt.Cancel()
+ confirmNoRoutingRules(t)
+ rowCount := getRowCount(t, vtgateConn, fmt.Sprintf("%s.%s", targetKeyspace, "t1"))
+ require.Zero(t, rowCount)
+ })
+
+ // Create again and run it to completion.
+ createFunc()
vdiff(t, targetKeyspace, workflowName, defaultCellName, false, true, nil)
mt.SwitchReads()
diff --git a/go/test/endtoend/vreplication/partial_movetables_test.go b/go/test/endtoend/vreplication/partial_movetables_test.go
index b971a05a467..7ae8f83416d 100644
--- a/go/test/endtoend/vreplication/partial_movetables_test.go
+++ b/go/test/endtoend/vreplication/partial_movetables_test.go
@@ -83,10 +83,13 @@ func testCancel(t *testing.T) {
func testPartialMoveTablesBasic(t *testing.T, flavor workflowFlavor) {
setSidecarDBName("_vt")
+ origDefaultReplicas := defaultReplicas
origDefaultRdonly := defaultRdonly
defer func() {
+ defaultReplicas = origDefaultReplicas
defaultRdonly = origDefaultRdonly
}()
+ defaultReplicas = 0
defaultRdonly = 0
origExtraVTGateArgs := extraVTGateArgs
// We need to enable shard routing for partial movetables routing.
diff --git a/go/test/endtoend/vreplication/resharding_workflows_v2_test.go b/go/test/endtoend/vreplication/resharding_workflows_v2_test.go
index 4c6dea61912..28ffc762ecd 100644
--- a/go/test/endtoend/vreplication/resharding_workflows_v2_test.go
+++ b/go/test/endtoend/vreplication/resharding_workflows_v2_test.go
@@ -22,6 +22,7 @@ import (
"fmt"
"math/rand/v2"
"net"
+ "slices"
"strconv"
"strings"
"sync"
@@ -35,9 +36,11 @@ import (
"vitess.io/vitess/go/test/endtoend/cluster"
"vitess.io/vitess/go/test/endtoend/throttler"
"vitess.io/vitess/go/vt/log"
+ "vitess.io/vitess/go/vt/topo/topoproto"
"vitess.io/vitess/go/vt/wrangler"
binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata"
+ topodatapb "vitess.io/vitess/go/vt/proto/topodata"
vtctldatapb "vitess.io/vitess/go/vt/proto/vtctldata"
)
@@ -169,9 +172,7 @@ func tstWorkflowExec(t *testing.T, cells, workflow, sourceKs, targetKs, tables,
args = append(args, "--tablet-types", tabletTypes)
}
args = append(args, "--action_timeout=10m") // At this point something is up so fail the test
- if debugMode {
- t.Logf("Executing workflow command: vtctldclient %v", strings.Join(args, " "))
- }
+ t.Logf("Executing workflow command: vtctldclient %s", strings.Join(args, " "))
output, err := vc.VtctldClient.ExecuteCommandWithOutput(args...)
lastOutput = output
if err != nil {
@@ -334,33 +335,44 @@ func tstWorkflowCancel(t *testing.T) error {
return tstWorkflowAction(t, workflowActionCancel, "", "")
}
-func validateReadsRoute(t *testing.T, tabletTypes string, tablet *cluster.VttabletProcess) {
+func validateReadsRoute(t *testing.T, tabletType string, tablet *cluster.VttabletProcess) {
if tablet == nil {
return
}
- if tabletTypes == "" {
- tabletTypes = "replica,rdonly"
- }
vtgateConn, closeConn := getVTGateConn()
defer closeConn()
- for _, tt := range []string{"replica", "rdonly"} {
- destination := fmt.Sprintf("%s:%s@%s", tablet.Keyspace, tablet.Shard, tt)
- if strings.Contains(tabletTypes, tt) {
- readQuery := "select cid from customer limit 10"
- assertQueryExecutesOnTablet(t, vtgateConn, tablet, destination, readQuery, "select cid from customer limit :vtg1")
- }
- }
+ // We do NOT want to target a shard as that goes around the routing rules and
+ // defeats the purpose here. We are using a query w/o a WHERE clause so for
+ // sharded keyspaces it should hit all shards as a SCATTER query. So all we
+ // care about is the keyspace and tablet type.
+ destination := fmt.Sprintf("%s@%s", tablet.Keyspace, strings.ToLower(tabletType))
+ readQuery := "select cid from customer limit 50"
+ assertQueryExecutesOnTablet(t, vtgateConn, tablet, destination, readQuery, "select cid from customer limit :vtg1")
}
func validateReadsRouteToSource(t *testing.T, tabletTypes string) {
- if sourceReplicaTab != nil {
- validateReadsRoute(t, tabletTypes, sourceReplicaTab)
+ tt, err := topoproto.ParseTabletTypes(tabletTypes)
+ require.NoError(t, err)
+ if slices.Contains(tt, topodatapb.TabletType_REPLICA) {
+ require.NotNil(t, sourceReplicaTab)
+ validateReadsRoute(t, topodatapb.TabletType_REPLICA.String(), sourceReplicaTab)
+ }
+ if slices.Contains(tt, topodatapb.TabletType_RDONLY) {
+ require.NotNil(t, sourceRdonlyTab)
+ validateReadsRoute(t, topodatapb.TabletType_RDONLY.String(), sourceRdonlyTab)
}
}
func validateReadsRouteToTarget(t *testing.T, tabletTypes string) {
- if targetReplicaTab1 != nil {
- validateReadsRoute(t, tabletTypes, targetReplicaTab1)
+ tt, err := topoproto.ParseTabletTypes(tabletTypes)
+ require.NoError(t, err)
+ if slices.Contains(tt, topodatapb.TabletType_REPLICA) {
+ require.NotNil(t, targetReplicaTab1)
+ validateReadsRoute(t, topodatapb.TabletType_REPLICA.String(), targetReplicaTab1)
+ }
+ if slices.Contains(tt, topodatapb.TabletType_RDONLY) {
+ require.NotNil(t, targetRdonlyTab1)
+ validateReadsRoute(t, topodatapb.TabletType_RDONLY.String(), targetRdonlyTab1)
}
}
@@ -411,6 +423,13 @@ func getCurrentStatus(t *testing.T) string {
// but CI currently fails on creating multiple clusters even after the previous ones are torn down
func TestBasicV2Workflows(t *testing.T) {
+ ogReplicas := defaultReplicas
+ ogRdOnly := defaultRdonly
+ defer func() {
+ defaultReplicas = ogReplicas
+ defaultRdonly = ogRdOnly
+ }()
+ defaultReplicas = 1
defaultRdonly = 1
extraVTTabletArgs = []string{
parallelInsertWorkers,
@@ -664,7 +683,7 @@ func testMoveTablesV2Workflow(t *testing.T) {
// If it's not then we'll get an error as the table doesn't exist in the vschema
createMoveTablesWorkflow(t, "customer,loadtest,vdiff_order,reftable,_vt_PURGE_4f9194b43b2011eb8a0104ed332e05c2_20221210194431")
waitForWorkflowState(t, vc, ksWorkflow, binlogdatapb.VReplicationWorkflowState_Running.String())
- validateReadsRouteToSource(t, "replica")
+ validateReadsRouteToSource(t, "replica,rdonly")
validateWritesRouteToSource(t)
// Verify that we've properly ignored any internal operational tables
@@ -725,6 +744,12 @@ func testPartialSwitches(t *testing.T) {
tstWorkflowSwitchReads(t, "", "")
checkStates(t, nextState, nextState) // idempotency
+ tstWorkflowReverseReads(t, "replica,rdonly", "")
+ checkStates(t, wrangler.WorkflowStateReadsSwitched, wrangler.WorkflowStateNotSwitched)
+
+ tstWorkflowSwitchReads(t, "", "")
+ checkStates(t, wrangler.WorkflowStateNotSwitched, wrangler.WorkflowStateReadsSwitched)
+
tstWorkflowSwitchWrites(t)
currentState = nextState
nextState = wrangler.WorkflowStateAllSwitched
@@ -771,12 +796,12 @@ func testRestOfWorkflow(t *testing.T) {
waitForLowLag(t, "customer", "wf1")
tstWorkflowSwitchReads(t, "", "")
checkStates(t, wrangler.WorkflowStateNotSwitched, wrangler.WorkflowStateReadsSwitched)
- validateReadsRouteToTarget(t, "replica")
+ validateReadsRouteToTarget(t, "replica,rdonly")
validateWritesRouteToSource(t)
tstWorkflowSwitchWrites(t)
checkStates(t, wrangler.WorkflowStateReadsSwitched, wrangler.WorkflowStateAllSwitched)
- validateReadsRouteToTarget(t, "replica")
+ validateReadsRouteToTarget(t, "replica,rdonly")
validateWritesRouteToTarget(t)
// this function is called for both MoveTables and Reshard, so the reverse workflows exist in different keyspaces
@@ -787,42 +812,45 @@ func testRestOfWorkflow(t *testing.T) {
waitForLowLag(t, keyspace, "wf1_reverse")
tstWorkflowReverseReads(t, "", "")
checkStates(t, wrangler.WorkflowStateAllSwitched, wrangler.WorkflowStateWritesSwitched)
- validateReadsRouteToSource(t, "replica")
+ validateReadsRouteToSource(t, "replica,rdonly")
validateWritesRouteToTarget(t)
tstWorkflowReverseWrites(t)
checkStates(t, wrangler.WorkflowStateWritesSwitched, wrangler.WorkflowStateNotSwitched)
- validateReadsRouteToSource(t, "replica")
+ validateReadsRouteToSource(t, "replica,rdonly")
validateWritesRouteToSource(t)
waitForLowLag(t, "customer", "wf1")
tstWorkflowSwitchWrites(t)
checkStates(t, wrangler.WorkflowStateNotSwitched, wrangler.WorkflowStateWritesSwitched)
- validateReadsRouteToSource(t, "replica")
+ validateReadsRouteToSource(t, "replica,rdonly")
validateWritesRouteToTarget(t)
waitForLowLag(t, keyspace, "wf1_reverse")
tstWorkflowReverseWrites(t)
- validateReadsRouteToSource(t, "replica")
+ checkStates(t, wrangler.WorkflowStateWritesSwitched, wrangler.WorkflowStateNotSwitched)
+ validateReadsRouteToSource(t, "replica,rdonly")
validateWritesRouteToSource(t)
waitForLowLag(t, "customer", "wf1")
tstWorkflowSwitchReads(t, "", "")
- validateReadsRouteToTarget(t, "replica")
+ checkStates(t, wrangler.WorkflowStateNotSwitched, wrangler.WorkflowStateReadsSwitched)
+ validateReadsRouteToTarget(t, "replica,rdonly")
validateWritesRouteToSource(t)
tstWorkflowReverseReads(t, "", "")
- validateReadsRouteToSource(t, "replica")
+ checkStates(t, wrangler.WorkflowStateReadsSwitched, wrangler.WorkflowStateNotSwitched)
+ validateReadsRouteToSource(t, "replica,rdonly")
validateWritesRouteToSource(t)
tstWorkflowSwitchReadsAndWrites(t)
- validateReadsRouteToTarget(t, "replica")
- validateReadsRoute(t, "rdonly", targetRdonlyTab1)
+ checkStates(t, wrangler.WorkflowStateNotSwitched, wrangler.WorkflowStateAllSwitched)
+ validateReadsRouteToTarget(t, "replica,rdonly")
validateWritesRouteToTarget(t)
waitForLowLag(t, keyspace, "wf1_reverse")
tstWorkflowReverseReadsAndWrites(t)
- validateReadsRoute(t, "rdonly", sourceRdonlyTab)
- validateReadsRouteToSource(t, "replica")
+ checkStates(t, wrangler.WorkflowStateAllSwitched, wrangler.WorkflowStateNotSwitched)
+ validateReadsRouteToSource(t, "replica,rdonly")
validateWritesRouteToSource(t)
// trying to complete an unswitched workflow should error
@@ -835,8 +863,7 @@ func testRestOfWorkflow(t *testing.T) {
waitForLowLag(t, "customer", "customer_name")
waitForLowLag(t, "customer", "enterprise_customer")
tstWorkflowSwitchReadsAndWrites(t)
- validateReadsRoute(t, "rdonly", targetRdonlyTab1)
- validateReadsRouteToTarget(t, "replica")
+ validateReadsRouteToTarget(t, "replica,rdonly")
validateWritesRouteToTarget(t)
err = tstWorkflowComplete(t)
@@ -899,7 +926,7 @@ func setupMinimalCluster(t *testing.T) *VitessCluster {
zone1 := vc.Cells["zone1"]
- vc.AddKeyspace(t, []*Cell{zone1}, "product", "0", initialProductVSchema, initialProductSchema, 0, 0, 100, nil)
+ vc.AddKeyspace(t, []*Cell{zone1}, "product", "0", initialProductVSchema, initialProductSchema, defaultReplicas, defaultRdonly, 100, nil)
verifyClusterHealth(t, vc)
insertInitialData(t)
@@ -912,7 +939,7 @@ func setupMinimalCluster(t *testing.T) *VitessCluster {
func setupMinimalCustomerKeyspace(t *testing.T) map[string]*cluster.VttabletProcess {
tablets := make(map[string]*cluster.VttabletProcess)
if _, err := vc.AddKeyspace(t, []*Cell{vc.Cells["zone1"]}, "customer", "-80,80-",
- customerVSchema, customerSchema, 0, 0, 200, nil); err != nil {
+ customerVSchema, customerSchema, defaultReplicas, defaultRdonly, 200, nil); err != nil {
t.Fatal(err)
}
defaultCell := vc.Cells[vc.CellNames[0]]
@@ -1048,6 +1075,7 @@ func createAdditionalCustomerShards(t *testing.T, shards string) {
targetTab2 = custKs.Shards["80-c0"].Tablets["zone1-600"].Vttablet
targetTab1 = custKs.Shards["40-80"].Tablets["zone1-500"].Vttablet
targetReplicaTab1 = custKs.Shards["-40"].Tablets["zone1-401"].Vttablet
+ targetRdonlyTab1 = custKs.Shards["-40"].Tablets["zone1-402"].Vttablet
sourceTab = custKs.Shards["-80"].Tablets["zone1-200"].Vttablet
sourceReplicaTab = custKs.Shards["-80"].Tablets["zone1-201"].Vttablet
@@ -1059,3 +1087,34 @@ func tstApplySchemaOnlineDDL(t *testing.T, sql string, keyspace string) {
"--sql", sql, keyspace)
require.NoError(t, err, fmt.Sprintf("ApplySchema Error: %s", err))
}
+
+func validateTableRoutingRule(t *testing.T, table, tabletType, fromKeyspace, toKeyspace string) {
+ tabletType = strings.ToLower(strings.TrimSpace(tabletType))
+ rr := getRoutingRules(t)
+ // We set matched = true by default because it is possible, if --no-routing-rules is set while creating
+ // a workflow, that the routing rules are empty when the workflow starts.
+ // We set it to false below when the rule is found, but before matching the routed keyspace.
+ matched := true
+ for _, r := range rr.GetRules() {
+ fromRule := fmt.Sprintf("%s.%s", fromKeyspace, table)
+ if tabletType != "" && tabletType != "primary" {
+ fromRule = fmt.Sprintf("%s@%s", fromRule, tabletType)
+ }
+ if r.FromTable == fromRule {
+ // We found the rule, so we can set matched to false here and check for the routed keyspace below.
+ matched = false
+ require.NotEmpty(t, r.ToTables)
+ toTable := r.ToTables[0]
+ // The ToTables value is of the form "routedKeyspace.table".
+ routedKeyspace, routedTable, ok := strings.Cut(toTable, ".")
+ require.True(t, ok)
+ require.Equal(t, table, routedTable)
+ if routedKeyspace == toKeyspace {
+ // We found the rule, the table and keyspace matches, so our search is done.
+ matched = true
+ break
+ }
+ }
+ }
+ require.Truef(t, matched, "routing rule for %s.%s from %s to %s not found", fromKeyspace, table, tabletType, toKeyspace)
+}
diff --git a/go/test/endtoend/vreplication/sidecardb_test.go b/go/test/endtoend/vreplication/sidecardb_test.go
index 391f7d60246..be9ce67a626 100644
--- a/go/test/endtoend/vreplication/sidecardb_test.go
+++ b/go/test/endtoend/vreplication/sidecardb_test.go
@@ -91,7 +91,7 @@ func TestSidecarDB(t *testing.T) {
prs(t, keyspace, shard)
currentPrimary = tablet101
- expectedChanges100 += numChanges
+ expectedChanges101 += numChanges
validateSidecarDBTables(t, tablet100, sidecarDBTables)
validateSidecarDBTables(t, tablet101, sidecarDBTables)
require.Equal(t, expectedChanges100, getNumExecutedDDLQueries(t, tablet100Port))
@@ -100,7 +100,7 @@ func TestSidecarDB(t *testing.T) {
t.Run("modify schema, prs, and self heal on new primary", func(t *testing.T) {
numChanges := modifySidecarDBSchema(t, vc, currentPrimary, ddls1)
- expectedChanges101 += numChanges
+ expectedChanges100 += numChanges
prs(t, keyspace, shard)
// nolint
currentPrimary = tablet100
diff --git a/go/test/endtoend/vreplication/unsharded_init_data.sql b/go/test/endtoend/vreplication/unsharded_init_data.sql
index 8af0cab6608..3e795cadcfd 100644
--- a/go/test/endtoend/vreplication/unsharded_init_data.sql
+++ b/go/test/endtoend/vreplication/unsharded_init_data.sql
@@ -1,7 +1,7 @@
-insert into customer(cid, name, typ, sport, meta) values(1, 'Jøhn "❤️" Rizzolo',1,'football,baseball','{}');
+insert into customer(cid, name, typ, sport, meta) values(1, 'Jøhn "❤️" Rizzolo',1,'football,baseball','{"industry":"IT SaaS","company":"PlanetScale"}');
insert into customer(cid, name, typ, sport, meta) values(2, 'Paül','soho','cricket',convert(x'7b7d' using utf8mb4));
-- We use a high cid value here to test the target sequence initialization.
-insert into customer(cid, name, typ, sport, blb) values(999999, 'ringo','enterprise','','blob data');
+insert into customer(cid, name, typ, sport, blb, meta) values(999999, 'ringo','enterprise','','blob data', '{"industry":"Music"}');
insert into merchant(mname, category) values('Monoprice', 'eléctronics');
insert into merchant(mname, category) values('newegg', 'elec†ronics');
insert into product(pid, description) values(1, 'keyböard ⌨️');
diff --git a/go/test/endtoend/vreplication/vdiff2_test.go b/go/test/endtoend/vreplication/vdiff2_test.go
index aaf4cae5375..612ba00236b 100644
--- a/go/test/endtoend/vreplication/vdiff2_test.go
+++ b/go/test/endtoend/vreplication/vdiff2_test.go
@@ -36,7 +36,6 @@ import (
"vitess.io/vitess/go/test/endtoend/cluster"
"vitess.io/vitess/go/vt/log"
"vitess.io/vitess/go/vt/sqlparser"
- vttablet "vitess.io/vitess/go/vt/vttablet/common"
binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata"
tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata"
@@ -140,9 +139,6 @@ func TestVDiff2(t *testing.T) {
extraVTTabletArgs = []string{
// This forces us to use multiple vstream packets even with small test tables.
"--vstream_packet_size=1",
- // Test VPlayer batching mode.
- fmt.Sprintf("--vreplication_experimental_flags=%d",
- vttablet.VReplicationExperimentalFlagAllowNoBlobBinlogRowImage|vttablet.VReplicationExperimentalFlagOptimizeInserts|vttablet.VReplicationExperimentalFlagVPlayerBatching),
}
vc = NewVitessCluster(t, &clusterOptions{cells: strings.Split(cellNames, ",")})
diff --git a/go/test/endtoend/vreplication/vdiff_helper_test.go b/go/test/endtoend/vreplication/vdiff_helper_test.go
index 561edfe8b7e..fd223d78082 100644
--- a/go/test/endtoend/vreplication/vdiff_helper_test.go
+++ b/go/test/endtoend/vreplication/vdiff_helper_test.go
@@ -35,7 +35,7 @@ import (
)
const (
- vdiffTimeout = 120 * time.Second // We can leverage auto retry on error with this longer-than-usual timeout
+ vdiffTimeout = 180 * time.Second // We can leverage auto retry on error with this longer-than-usual timeout
vdiffRetryTimeout = 30 * time.Second
vdiffStatusCheckInterval = 5 * time.Second
vdiffRetryInterval = 5 * time.Second
@@ -71,7 +71,8 @@ func doVtctlclientVDiff(t *testing.T, keyspace, workflow, cells string, want *ex
ksWorkflow := fmt.Sprintf("%s.%s", keyspace, workflow)
t.Run(fmt.Sprintf("vtctlclient vdiff %s", ksWorkflow), func(t *testing.T) {
// update-table-stats is needed in order to test progress reports.
- uuid, _ := performVDiff2Action(t, true, ksWorkflow, cells, "create", "", false, "--auto-retry", "--update-table-stats")
+ uuid, _ := performVDiff2Action(t, true, ksWorkflow, cells, "create", "", false, "--auto-retry",
+ "--update-table-stats", fmt.Sprintf("--filtered_replication_wait_time=%v", vdiffTimeout/2))
info := waitForVDiff2ToComplete(t, true, ksWorkflow, cells, uuid, time.Time{})
require.NotNil(t, info)
require.Equal(t, workflow, info.Workflow)
@@ -164,7 +165,7 @@ func doVtctldclientVDiff(t *testing.T, keyspace, workflow, cells string, want *e
ksWorkflow := fmt.Sprintf("%s.%s", keyspace, workflow)
t.Run(fmt.Sprintf("vtctldclient vdiff %s", ksWorkflow), func(t *testing.T) {
// update-table-stats is needed in order to test progress reports.
- flags := []string{"--auto-retry", "--update-table-stats"}
+ flags := []string{"--auto-retry", "--update-table-stats", fmt.Sprintf("--filtered-replication-wait-time=%v", vdiffTimeout/2)}
if len(extraFlags) > 0 {
flags = append(flags, extraFlags...)
}
diff --git a/go/test/endtoend/vreplication/vdiff_online_ddl_test.go b/go/test/endtoend/vreplication/vdiff_online_ddl_test.go
index 92977111294..0f3cda66ce6 100644
--- a/go/test/endtoend/vreplication/vdiff_online_ddl_test.go
+++ b/go/test/endtoend/vreplication/vdiff_online_ddl_test.go
@@ -23,13 +23,12 @@ func TestOnlineDDLVDiff(t *testing.T) {
setSidecarDBName("_vt")
originalRdonly := defaultRdonly
originalReplicas := defaultReplicas
- defaultRdonly = 0
- defaultReplicas = 0
defer func() {
defaultRdonly = originalRdonly
defaultReplicas = originalReplicas
}()
-
+ defaultRdonly = 0
+ defaultReplicas = 0
vc = setupMinimalCluster(t)
defer vc.TearDown()
keyspace := "product"
diff --git a/go/test/endtoend/vreplication/vreplication_test.go b/go/test/endtoend/vreplication/vreplication_test.go
index 519bf8d0ce5..d3193298a0c 100644
--- a/go/test/endtoend/vreplication/vreplication_test.go
+++ b/go/test/endtoend/vreplication/vreplication_test.go
@@ -293,7 +293,6 @@ func TestVreplicationCopyThrottling(t *testing.T) {
}
func TestBasicVreplicationWorkflow(t *testing.T) {
- defer setAllVTTabletExperimentalFlags()
sourceKsOpts["DBTypeVersion"] = "mysql-8.0"
targetKsOpts["DBTypeVersion"] = "mysql-8.0"
testBasicVreplicationWorkflow(t, "noblob")
@@ -587,12 +586,14 @@ func testVStreamCellFlag(t *testing.T) {
}
}
-// TestCellAliasVreplicationWorkflow tests replication from a cell with an alias to test the tablet picker's alias functionality
-// We also reuse the setup of this test to validate that the "vstream * from" vtgate query functionality is functional
+// TestCellAliasVreplicationWorkflow tests replication from a cell with an alias to test
+// the tablet picker's alias functionality.
+// We also reuse the setup of this test to validate that the "vstream * from" vtgate
+// query functionality is functional.
func TestCellAliasVreplicationWorkflow(t *testing.T) {
cells := []string{"zone1", "zone2"}
- defer mainClusterConfig.enableGTIDCompression()
- defer setAllVTTabletExperimentalFlags()
+ resetCompression := mainClusterConfig.enableGTIDCompression()
+ defer resetCompression()
vc = NewVitessCluster(t, &clusterOptions{cells: cells})
defer vc.TearDown()
@@ -718,12 +719,12 @@ func shardCustomer(t *testing.T, testReverse bool, cells []*Cell, sourceCellOrAl
vtgateConn := getConnection(t, vc.ClusterConfig.hostname, vc.ClusterConfig.vtgateMySQLPort)
defer vtgateConn.Close()
// Confirm that the 0 scale decimal field, dec80, is replicated correctly
- dec80Replicated := false
execVtgateQuery(t, vtgateConn, sourceKs, "update customer set dec80 = 0")
execVtgateQuery(t, vtgateConn, sourceKs, "update customer set blb = \"new blob data\" where cid=3")
execVtgateQuery(t, vtgateConn, sourceKs, "update json_tbl set j1 = null, j2 = 'null', j3 = '\"null\"'")
execVtgateQuery(t, vtgateConn, sourceKs, "insert into json_tbl(id, j1, j2, j3) values (7, null, 'null', '\"null\"')")
waitForNoWorkflowLag(t, vc, targetKs, workflow)
+ dec80Replicated := false
for _, tablet := range []*cluster.VttabletProcess{customerTab1, customerTab2} {
// Query the tablet's mysqld directly as the targets will have denied table entries.
dbc, err := tablet.TabletConn(targetKs, true)
diff --git a/go/test/endtoend/vreplication/vreplication_vtctldclient_cli_test.go b/go/test/endtoend/vreplication/vreplication_vtctldclient_cli_test.go
index 2355730ac8c..4ee977c4d74 100644
--- a/go/test/endtoend/vreplication/vreplication_vtctldclient_cli_test.go
+++ b/go/test/endtoend/vreplication/vreplication_vtctldclient_cli_test.go
@@ -31,6 +31,7 @@ import (
"vitess.io/vitess/go/json2"
"vitess.io/vitess/go/test/endtoend/cluster"
"vitess.io/vitess/go/vt/topo/topoproto"
+ "vitess.io/vitess/go/vt/wrangler"
binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata"
tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata"
@@ -45,10 +46,13 @@ import (
func TestVtctldclientCLI(t *testing.T) {
setSidecarDBName("_vt")
var err error
+ origDefaultReplicas := defaultReplicas
origDefaultRdonly := defaultRdonly
defer func() {
+ defaultReplicas = origDefaultReplicas
defaultRdonly = origDefaultRdonly
}()
+ defaultReplicas = 1
defaultRdonly = 0
vc = setupMinimalCluster(t)
vttablet.InitVReplicationConfigDefaults()
@@ -64,7 +68,19 @@ func TestVtctldclientCLI(t *testing.T) {
targetKeyspaceName := "customer"
var mt iMoveTables
workflowName := "wf1"
+
+ sourceReplicaTab = vc.Cells["zone1"].Keyspaces[sourceKeyspaceName].Shards["0"].Tablets["zone1-101"].Vttablet
+ require.NotNil(t, sourceReplicaTab)
+ sourceTab = vc.Cells["zone1"].Keyspaces[sourceKeyspaceName].Shards["0"].Tablets["zone1-100"].Vttablet
+ require.NotNil(t, sourceTab)
+
targetTabs := setupMinimalCustomerKeyspace(t)
+ targetTab1 = targetTabs["-80"]
+ require.NotNil(t, targetTab1)
+ targetTab2 = targetTabs["80-"]
+ require.NotNil(t, targetTab2)
+ targetReplicaTab1 = vc.Cells["zone1"].Keyspaces[targetKeyspaceName].Shards["-80"].Tablets["zone1-201"].Vttablet
+ require.NotNil(t, targetReplicaTab1)
t.Run("RoutingRulesApply", func(t *testing.T) {
testRoutingRulesApplyCommands(t)
@@ -95,6 +111,19 @@ func TestVtctldclientCLI(t *testing.T) {
"-40": targetKeyspace.Shards["-40"].Tablets["zone1-400"].Vttablet,
"40-80": targetKeyspace.Shards["40-80"].Tablets["zone1-500"].Vttablet,
}
+
+ sourceReplicaTab = vc.Cells["zone1"].Keyspaces[targetKeyspaceName].Shards["-80"].Tablets["zone1-201"].Vttablet
+ require.NotNil(t, sourceReplicaTab)
+ sourceTab = vc.Cells["zone1"].Keyspaces[targetKeyspaceName].Shards["-80"].Tablets["zone1-200"].Vttablet
+ require.NotNil(t, sourceTab)
+
+ targetTab1 = tablets["-40"]
+ require.NotNil(t, targetTab1)
+ targetTab2 = tablets["40-80"]
+ require.NotNil(t, targetTab2)
+ targetReplicaTab1 = vc.Cells["zone1"].Keyspaces[targetKeyspaceName].Shards["-40"].Tablets["zone1-401"].Vttablet
+ require.NotNil(t, targetReplicaTab1)
+
splitShard(t, targetKeyspaceName, reshardWorkflowName, sourceShard, newShards, tablets)
})
}
@@ -110,8 +139,8 @@ func testMoveTablesFlags1(t *testing.T, mt *iMoveTables, sourceKeyspace, targetK
createFlags := []string{"--auto-start=false", "--defer-secondary-keys=false", "--stop-after-copy",
"--no-routing-rules", "--on-ddl", "STOP", "--exclude-tables", "customer2",
"--tablet-types", "primary,rdonly", "--tablet-types-in-preference-order=true",
- "--all-cells",
- "--config-overrides", mapToCSV(overrides),
+ "--all-cells", "--config-overrides", mapToCSV(overrides),
+ "--sharded-auto-increment-handling=REPLACE", fmt.Sprintf("--global-keyspace=%s", sourceKeyspace),
}
completeFlags := []string{"--keep-routing-rules", "--keep-data"}
switchFlags := []string{}
@@ -144,6 +173,7 @@ func getMoveTablesShowResponse(mt *iMoveTables) *vtctldatapb.GetWorkflowsRespons
// Validates some of the flags created from the previous test.
func testMoveTablesFlags2(t *testing.T, mt *iMoveTables, sourceKeyspace, targetKeyspace, workflowName string, targetTabs map[string]*cluster.VttabletProcess) {
ksWorkflow := fmt.Sprintf("%s.%s", targetKeyspace, workflowName)
+ wf := (*mt).(iWorkflow)
(*mt).Start() // Need to start because we set auto-start to false.
waitForWorkflowState(t, vc, ksWorkflow, binlogdatapb.VReplicationWorkflowState_Stopped.String())
confirmNoRoutingRules(t)
@@ -163,7 +193,85 @@ func testMoveTablesFlags2(t *testing.T, mt *iMoveTables, sourceKeyspace, targetK
for _, tab := range targetTabs {
catchup(t, tab, workflowName, "MoveTables")
}
+
+ (*mt).SwitchReads()
+ validateReadsRouteToTarget(t, "replica")
+ validateTableRoutingRule(t, "customer", "replica", sourceKs, targetKs)
+ validateTableRoutingRule(t, "customer", "", targetKs, sourceKs)
+ confirmStates(t, &wf, wrangler.WorkflowStateNotSwitched, wrangler.WorkflowStateReadsSwitched)
+
+ (*mt).ReverseReads()
+ validateReadsRouteToSource(t, "replica")
+ validateTableRoutingRule(t, "customer", "replica", targetKs, sourceKs)
+ validateTableRoutingRule(t, "customer", "", targetKs, sourceKs)
+ confirmStates(t, &wf, wrangler.WorkflowStateReadsSwitched, wrangler.WorkflowStateNotSwitched)
+
+ (*mt).SwitchReadsAndWrites()
+ validateReadsRouteToTarget(t, "replica")
+ validateTableRoutingRule(t, "customer", "replica", sourceKs, targetKs)
+ validateWritesRouteToTarget(t)
+ validateTableRoutingRule(t, "customer", "", sourceKs, targetKs)
+ confirmStates(t, &wf, wrangler.WorkflowStateNotSwitched, wrangler.WorkflowStateAllSwitched)
+
+ (*mt).ReverseReadsAndWrites()
+ validateReadsRouteToSource(t, "replica")
+ validateTableRoutingRule(t, "customer", "replica", targetKs, sourceKs)
+ validateWritesRouteToSource(t)
+ validateTableRoutingRule(t, "customer", "", targetKs, sourceKs)
+ confirmStates(t, &wf, wrangler.WorkflowStateAllSwitched, wrangler.WorkflowStateNotSwitched)
+
+ (*mt).SwitchReadsAndWrites()
+ validateReadsRouteToTarget(t, "replica")
+ validateTableRoutingRule(t, "customer", "replica", sourceKs, targetKs)
+ validateWritesRouteToTarget(t)
+ validateTableRoutingRule(t, "customer", "", sourceKs, targetKs)
+ confirmStates(t, &wf, wrangler.WorkflowStateNotSwitched, wrangler.WorkflowStateAllSwitched)
+
+ (*mt).ReverseReads()
+ validateReadsRouteToSource(t, "replica")
+ validateTableRoutingRule(t, "customer", "replica", targetKs, sourceKs)
+ validateWritesRouteToTarget(t)
+ validateTableRoutingRule(t, "customer", "", sourceKs, targetKs)
+ confirmStates(t, &wf, wrangler.WorkflowStateAllSwitched, wrangler.WorkflowStateWritesSwitched)
+
+ (*mt).ReverseWrites()
+ validateReadsRouteToSource(t, "replica")
+ validateTableRoutingRule(t, "customer", "replica", targetKs, sourceKs)
+ validateWritesRouteToSource(t)
+ validateTableRoutingRule(t, "customer", "", targetKs, sourceKs)
+ confirmStates(t, &wf, wrangler.WorkflowStateWritesSwitched, wrangler.WorkflowStateNotSwitched)
+
+ (*mt).SwitchReadsAndWrites()
+ validateReadsRouteToTarget(t, "replica")
+ validateTableRoutingRule(t, "customer", "replica", sourceKs, targetKs)
+ validateWritesRouteToTarget(t)
+ validateTableRoutingRule(t, "customer", "", sourceKs, targetKs)
+ confirmStates(t, &wf, wrangler.WorkflowStateNotSwitched, wrangler.WorkflowStateAllSwitched)
+
+ (*mt).ReverseWrites()
+ validateReadsRouteToTarget(t, "replica")
+ validateTableRoutingRule(t, "customer", "replica", sourceKs, targetKs)
+ validateWritesRouteToSource(t)
+ validateTableRoutingRule(t, "customer", "", targetKs, sourceKs)
+ confirmStates(t, &wf, wrangler.WorkflowStateAllSwitched, wrangler.WorkflowStateReadsSwitched)
+
+ (*mt).ReverseReads()
+ validateReadsRouteToSource(t, "replica")
+ validateTableRoutingRule(t, "customer", "replica", targetKs, sourceKs)
+ validateWritesRouteToSource(t)
+ validateTableRoutingRule(t, "customer", "", targetKs, sourceKs)
+ confirmStates(t, &wf, wrangler.WorkflowStateReadsSwitched, wrangler.WorkflowStateNotSwitched)
+
+ // Confirm that everything is still in sync after our switch fest.
+ vdiff(t, targetKeyspace, workflowName, "zone1", false, true, nil)
+
(*mt).SwitchReadsAndWrites()
+ validateReadsRouteToTarget(t, "replica")
+ validateTableRoutingRule(t, "customer", "replica", sourceKs, targetKs)
+ validateWritesRouteToTarget(t)
+ validateTableRoutingRule(t, "customer", "", sourceKs, targetKs)
+ confirmStates(t, &wf, wrangler.WorkflowStateNotSwitched, wrangler.WorkflowStateAllSwitched)
+
(*mt).Complete()
confirmRoutingRulesExist(t)
// Confirm that --keep-data was honored.
@@ -196,6 +304,22 @@ func testMoveTablesFlags3(t *testing.T, sourceKeyspace, targetKeyspace string, t
// Confirm that the source tables were renamed.
require.True(t, checkTablesExist(t, "zone1-100", []string{"_customer2_old"}))
require.False(t, checkTablesExist(t, "zone1-100", []string{"customer2"}))
+
+ // Confirm that we can cancel a workflow after ONLY switching read traffic.
+ mt = createMoveTables(t, sourceKeyspace, targetKeyspace, workflowName, "customer", createFlags, nil, nil)
+ mt.Start() // Need to start because we set stop-after-copy to true.
+ waitForWorkflowState(t, vc, ksWorkflow, binlogdatapb.VReplicationWorkflowState_Running.String())
+ for _, tab := range targetTabs {
+ catchup(t, tab, workflowName, "MoveTables")
+ }
+ mt.SwitchReads()
+ wf := mt.(iWorkflow)
+ validateReadsRouteToTarget(t, "replica")
+ validateTableRoutingRule(t, "customer", "replica", sourceKs, targetKs)
+ validateTableRoutingRule(t, "customer", "", targetKs, sourceKs)
+ confirmStates(t, &wf, wrangler.WorkflowStateNotSwitched, wrangler.WorkflowStateReadsSwitched)
+ mt.Cancel()
+ confirmNoRoutingRules(t)
}
// Create two workflows in order to confirm that listing all workflows works.
@@ -342,6 +466,7 @@ func splitShard(t *testing.T, keyspace, workflowName, sourceShards, targetShards
"--all-cells", "--format=json",
"--config-overrides", mapToCSV(overrides),
}
+
rs := newReshard(vc, &reshardWorkflow{
workflowInfo: &workflowInfo{
vc: vc,
@@ -352,8 +477,8 @@ func splitShard(t *testing.T, keyspace, workflowName, sourceShards, targetShards
targetShards: targetShards,
createFlags: createFlags,
}, workflowFlavorVtctld)
-
ksWorkflow := fmt.Sprintf("%s.%s", keyspace, workflowName)
+ wf := rs.(iWorkflow)
rs.Create()
validateReshardResponse(rs)
validateOverrides(t, targetTabs, overrides)
@@ -381,17 +506,123 @@ func splitShard(t *testing.T, keyspace, workflowName, sourceShards, targetShards
}
vdiff(t, keyspace, workflowName, "zone1", false, true, nil)
+ shardReadsRouteToSource := func() {
+ require.True(t, getShardRoute(t, keyspace, "-80", "replica"))
+ }
+
+ shardReadsRouteToTarget := func() {
+ require.True(t, getShardRoute(t, keyspace, "-40", "replica"))
+ }
+
+ shardWritesRouteToSource := func() {
+ require.True(t, getShardRoute(t, keyspace, "-80", "primary"))
+ }
+
+ shardWritesRouteToTarget := func() {
+ require.True(t, getShardRoute(t, keyspace, "-40", "primary"))
+ }
+
rs.SwitchReadsAndWrites()
waitForLowLag(t, keyspace, workflowName+"_reverse")
vdiff(t, keyspace, workflowName+"_reverse", "zone1", true, false, nil)
+ shardReadsRouteToTarget()
+ shardWritesRouteToTarget()
+ confirmStates(t, &wf, wrangler.WorkflowStateNotSwitched, wrangler.WorkflowStateAllSwitched)
rs.ReverseReadsAndWrites()
waitForLowLag(t, keyspace, workflowName)
vdiff(t, keyspace, workflowName, "zone1", false, true, nil)
+ shardReadsRouteToSource()
+ shardWritesRouteToSource()
+ confirmStates(t, &wf, wrangler.WorkflowStateAllSwitched, wrangler.WorkflowStateNotSwitched)
+
+ rs.SwitchReads()
+ shardReadsRouteToTarget()
+ shardWritesRouteToSource()
+ confirmStates(t, &wf, wrangler.WorkflowStateNotSwitched, wrangler.WorkflowStateReadsSwitched)
+
+ rs.ReverseReads()
+ shardReadsRouteToSource()
+ shardWritesRouteToSource()
+ confirmStates(t, &wf, wrangler.WorkflowStateReadsSwitched, wrangler.WorkflowStateNotSwitched)
+
+ rs.SwitchReadsAndWrites()
+ shardReadsRouteToTarget()
+ shardWritesRouteToTarget()
+ confirmStates(t, &wf, wrangler.WorkflowStateNotSwitched, wrangler.WorkflowStateAllSwitched)
+
+ rs.ReverseReadsAndWrites()
+ shardReadsRouteToSource()
+ shardWritesRouteToSource()
+ confirmStates(t, &wf, wrangler.WorkflowStateAllSwitched, wrangler.WorkflowStateNotSwitched)
+
+ rs.SwitchReadsAndWrites()
+ shardReadsRouteToTarget()
+ shardWritesRouteToTarget()
+ confirmStates(t, &wf, wrangler.WorkflowStateNotSwitched, wrangler.WorkflowStateAllSwitched)
+
+ rs.ReverseReads()
+ shardReadsRouteToSource()
+ shardWritesRouteToTarget()
+ confirmStates(t, &wf, wrangler.WorkflowStateAllSwitched, wrangler.WorkflowStateWritesSwitched)
+
+ rs.ReverseWrites()
+ shardReadsRouteToSource()
+ shardWritesRouteToSource()
+ confirmStates(t, &wf, wrangler.WorkflowStateWritesSwitched, wrangler.WorkflowStateNotSwitched)
+
+ rs.SwitchReadsAndWrites()
+ shardReadsRouteToTarget()
+ shardWritesRouteToTarget()
+ confirmStates(t, &wf, wrangler.WorkflowStateNotSwitched, wrangler.WorkflowStateAllSwitched)
+
+ rs.ReverseWrites()
+ shardReadsRouteToTarget()
+ shardWritesRouteToSource()
+ confirmStates(t, &wf, wrangler.WorkflowStateAllSwitched, wrangler.WorkflowStateReadsSwitched)
+
+ rs.ReverseReads()
+ shardReadsRouteToSource()
+ shardWritesRouteToSource()
+ confirmStates(t, &wf, wrangler.WorkflowStateReadsSwitched, wrangler.WorkflowStateNotSwitched)
+
+ // Confirm that everything is still in sync after our switch fest.
+ vdiff(t, keyspace, workflowName, "zone1", false, true, nil)
+
rs.SwitchReadsAndWrites()
+ shardReadsRouteToTarget()
+ shardWritesRouteToTarget()
+ confirmStates(t, &wf, wrangler.WorkflowStateNotSwitched, wrangler.WorkflowStateAllSwitched)
+
rs.Complete()
}
+func getSrvKeyspace(t *testing.T, keyspace string) *topodatapb.SrvKeyspace {
+ output, err := vc.VtctldClient.ExecuteCommandWithOutput("GetSrvKeyspaces", keyspace, "zone1")
+ require.NoError(t, err)
+ var srvKeyspaces map[string]*topodatapb.SrvKeyspace
+ err = json2.Unmarshal([]byte(output), &srvKeyspaces)
+ require.NoError(t, err)
+ require.Equal(t, 1, len(srvKeyspaces))
+ return srvKeyspaces["zone1"]
+}
+
+func getShardRoute(t *testing.T, keyspace, shard string, tabletType string) bool {
+ srvKeyspace := getSrvKeyspace(t, keyspace)
+ for _, partition := range srvKeyspace.Partitions {
+ tt, err := topoproto.ParseTabletType(tabletType)
+ require.NoError(t, err)
+ if partition.ServedType == tt {
+ for _, shardReference := range partition.ShardReferences {
+ if shardReference.Name == shard {
+ return true
+ }
+ }
+ }
+ }
+ return false
+}
+
func getReshardShowResponse(rs *iReshard) *vtctldatapb.GetWorkflowsResponse {
(*rs).Show()
reshardOutput := (*rs).GetLastOutput()
@@ -554,8 +785,10 @@ func getRoutingRules(t *testing.T) *vschemapb.RoutingRules {
}
func confirmNoRoutingRules(t *testing.T) {
- routingRulesResponse := getRoutingRules(t)
- require.Zero(t, len(routingRulesResponse.Rules))
+ rrRes := getRoutingRules(t)
+ require.Zero(t, len(rrRes.Rules))
+ krrRes := getKeyspaceRoutingRules(t, vc)
+ require.Zero(t, len(krrRes.Rules))
}
func confirmRoutingRulesExist(t *testing.T) {
@@ -591,6 +824,10 @@ func validateMoveTablesWorkflow(t *testing.T, workflows []*vtctldatapb.Workflow)
require.Equalf(t, 1, len(bls.Filter.Rules), "Rules are %+v", bls.Filter.Rules) // only customer, customer2 should be excluded
require.Equal(t, binlogdatapb.OnDDLAction_STOP, bls.OnDdl)
require.True(t, bls.StopAfterCopy)
+
+ // Validate the sharded-auto-increment-handling related value handling.
+ require.Equal(t, vtctldatapb.ShardedAutoIncrementHandling_REPLACE, vtctldatapb.ShardedAutoIncrementHandling(wf.Options.ShardedAutoIncrementHandling))
+ require.Equal(t, wf.Source.Keyspace, wf.Options.GlobalKeyspace)
}
// Test that routing rules can be applied using the vtctldclient CLI for all types of routing rules.
@@ -727,3 +964,8 @@ func testOneRoutingRulesCommand(t *testing.T, typ string, rules string, validate
})
}
}
+
+func confirmStates(t *testing.T, workflow *iWorkflow, startState, endState string) {
+ require.Contains(t, (*workflow).GetLastOutput(), fmt.Sprintf("Start State: %s", startState))
+ require.Contains(t, (*workflow).GetLastOutput(), fmt.Sprintf("Current State: %s", endState))
+}
diff --git a/go/test/endtoend/vreplication/wrappers_test.go b/go/test/endtoend/vreplication/wrappers_test.go
index 96c54b89fe8..d1fff1af1c6 100644
--- a/go/test/endtoend/vreplication/wrappers_test.go
+++ b/go/test/endtoend/vreplication/wrappers_test.go
@@ -19,6 +19,7 @@ package vreplication
import (
"math/rand/v2"
"strconv"
+ "strings"
"github.com/stretchr/testify/require"
@@ -33,12 +34,15 @@ type iWorkflow interface {
SwitchReads()
SwitchWrites()
SwitchReadsAndWrites()
+ ReverseReads()
+ ReverseWrites()
ReverseReadsAndWrites()
Cancel()
Complete()
Flavor() string
GetLastOutput() string
Start()
+ Status()
Stop()
}
@@ -146,6 +150,11 @@ func (vmt *VtctlMoveTables) Show() {
panic("implement me")
}
+func (vmt *VtctlMoveTables) Status() {
+ currentWorkflowType = binlogdatapb.VReplicationWorkflowType_MoveTables
+ vmt.exec("Status")
+}
+
func (vmt *VtctlMoveTables) exec(action string) {
options := &workflowExecOptions{
deferSecondaryKeys: false,
@@ -156,13 +165,26 @@ func (vmt *VtctlMoveTables) exec(action string) {
require.NoError(vmt.vc.t, err)
}
func (vmt *VtctlMoveTables) SwitchReads() {
- // TODO implement me
- panic("implement me")
+ err := tstWorkflowExecVtctl(vmt.vc.t, "", vmt.workflowName, vmt.sourceKeyspace, vmt.targetKeyspace,
+ vmt.tables, workflowActionSwitchTraffic, "replica,rdonly", "", "", defaultWorkflowExecOptions)
+ require.NoError(vmt.vc.t, err)
}
func (vmt *VtctlMoveTables) SwitchWrites() {
- // TODO implement me
- panic("implement me")
+ err := tstWorkflowExecVtctl(vmt.vc.t, "", vmt.workflowName, vmt.sourceKeyspace, vmt.targetKeyspace,
+ vmt.tables, workflowActionSwitchTraffic, "primary", "", "", defaultWorkflowExecOptions)
+ require.NoError(vmt.vc.t, err)
+}
+func (vmt *VtctlMoveTables) ReverseReads() {
+ err := tstWorkflowExecVtctl(vmt.vc.t, "", vmt.workflowName, vmt.sourceKeyspace, vmt.targetKeyspace,
+ vmt.tables, workflowActionReverseTraffic, "replica,rdonly", "", "", defaultWorkflowExecOptions)
+ require.NoError(vmt.vc.t, err)
+}
+
+func (vmt *VtctlMoveTables) ReverseWrites() {
+ err := tstWorkflowExecVtctl(vmt.vc.t, "", vmt.workflowName, vmt.sourceKeyspace, vmt.targetKeyspace,
+ vmt.tables, workflowActionReverseTraffic, "primary", "", "", defaultWorkflowExecOptions)
+ require.NoError(vmt.vc.t, err)
}
func (vmt *VtctlMoveTables) Cancel() {
@@ -203,9 +225,9 @@ func (v VtctldMoveTables) exec(args ...string) {
args2 := []string{"MoveTables", "--workflow=" + v.workflowName, "--target-keyspace=" + v.targetKeyspace}
args2 = append(args2, args...)
var err error
- if v.lastOutput, err = vc.VtctldClient.ExecuteCommandWithOutput(args2...); err != nil {
- require.FailNowf(v.vc.t, "failed MoveTables action", "%v: %s", err, v.lastOutput)
- }
+ v.vc.t.Logf("Executing workflow command: vtctldclient %s", strings.Join(args2, " "))
+ v.lastOutput, err = vc.VtctldClient.ExecuteCommandWithOutput(args2...)
+ require.NoError(v.vc.t, err, "failed MoveTables action, error: %v: output: %s", err, v.lastOutput)
}
func (v VtctldMoveTables) Create() {
@@ -247,6 +269,10 @@ func (v VtctldMoveTables) Show() {
v.exec(args...)
}
+func (v VtctldMoveTables) Status() {
+ v.exec("Status")
+}
+
func (v VtctldMoveTables) SwitchReads() {
args := []string{"SwitchTraffic", "--tablet-types=rdonly,replica"}
args = append(args, v.switchFlags...)
@@ -259,8 +285,21 @@ func (v VtctldMoveTables) SwitchWrites() {
v.exec(args...)
}
+func (v VtctldMoveTables) ReverseReads() {
+ args := []string{"ReverseTraffic", "--tablet-types=rdonly,replica"}
+ args = append(args, v.switchFlags...)
+ v.exec(args...)
+}
+
+func (v VtctldMoveTables) ReverseWrites() {
+ args := []string{"ReverseTraffic", "--tablet-types=primary"}
+ args = append(args, v.switchFlags...)
+ v.exec(args...)
+}
+
func (v VtctldMoveTables) Cancel() {
- v.exec("Cancel")
+ args := []string{"Cancel", "--delete-batch-size=500"}
+ v.exec(args...)
}
func (v VtctldMoveTables) Complete() {
@@ -323,6 +362,16 @@ type VtctlReshard struct {
*reshardWorkflow
}
+func (vrs *VtctlReshard) ReverseReads() {
+ //TODO implement me
+ panic("implement me")
+}
+
+func (vrs *VtctlReshard) ReverseWrites() {
+ //TODO implement me
+ panic("implement me")
+}
+
func (vrs *VtctlReshard) Flavor() string {
return "vtctl"
}
@@ -341,6 +390,11 @@ func (vrs *VtctlReshard) MirrorTraffic() {
panic("implement me")
}
+func (vrs *VtctlReshard) Status() {
+ currentWorkflowType = binlogdatapb.VReplicationWorkflowType_Reshard
+ vrs.exec("Status")
+}
+
func (vrs *VtctlReshard) SwitchReadsAndWrites() {
vrs.exec(workflowActionSwitchTraffic)
}
@@ -409,9 +463,9 @@ func (v VtctldReshard) exec(args ...string) {
args2 := []string{"Reshard", "--workflow=" + v.workflowName, "--target-keyspace=" + v.targetKeyspace}
args2 = append(args2, args...)
var err error
- if v.lastOutput, err = vc.VtctldClient.ExecuteCommandWithOutput(args2...); err != nil {
- v.vc.t.Fatalf("failed to create Reshard workflow: %v: %s", err, v.lastOutput)
- }
+ v.vc.t.Logf("Executing command: vtctldclient %s", strings.Join(args2, " "))
+ v.lastOutput, err = vc.VtctldClient.ExecuteCommandWithOutput(args2...)
+ require.NoError(v.vc.t, err, "failed Reshard action, error: %v: output: %s", err, v.lastOutput)
}
func (v VtctldReshard) Create() {
@@ -448,14 +502,36 @@ func (v VtctldReshard) Show() {
v.exec("Show")
}
+func (v *VtctldReshard) Status() {
+ v.exec("Status")
+}
+
func (v VtctldReshard) SwitchReads() {
- // TODO implement me
- panic("implement me")
+ args := []string{"SwitchTraffic"}
+ args = append(args, v.switchFlags...)
+ args = append(args, "--tablet-types=rdonly,replica")
+ v.exec(args...)
}
func (v VtctldReshard) SwitchWrites() {
- // TODO implement me
- panic("implement me")
+ args := []string{"SwitchTraffic"}
+ args = append(args, v.switchFlags...)
+ args = append(args, "--tablet-types=primary")
+ v.exec(args...)
+}
+
+func (v VtctldReshard) ReverseReads() {
+ args := []string{"ReverseTraffic"}
+ args = append(args, v.switchFlags...)
+ args = append(args, "--tablet-types=rdonly,replica")
+ v.exec(args...)
+}
+
+func (v VtctldReshard) ReverseWrites() {
+ args := []string{"ReverseTraffic"}
+ args = append(args, v.switchFlags...)
+ args = append(args, "--tablet-types=primary")
+ v.exec(args...)
}
func (v VtctldReshard) Cancel() {
diff --git a/go/test/endtoend/vtadmin/main_test.go b/go/test/endtoend/vtadmin/main_test.go
new file mode 100644
index 00000000000..9233cd5b0aa
--- /dev/null
+++ b/go/test/endtoend/vtadmin/main_test.go
@@ -0,0 +1,100 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package vtadmin
+
+import (
+ _ "embed"
+ "flag"
+ "os"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+
+ "vitess.io/vitess/go/test/endtoend/cluster"
+)
+
+var (
+ clusterInstance *cluster.LocalProcessCluster
+ uks = "uks"
+ cell = "test_misc"
+
+ uschemaSQL = `
+create table u_a
+(
+ id bigint,
+ a bigint,
+ primary key (id)
+) Engine = InnoDB;
+
+create table u_b
+(
+ id bigint,
+ b varchar(50),
+ primary key (id)
+) Engine = InnoDB;
+
+`
+)
+
+func TestMain(m *testing.M) {
+ flag.Parse()
+
+ exitCode := func() int {
+ clusterInstance = cluster.NewCluster(cell, "localhost")
+ defer clusterInstance.Teardown()
+
+ // Start topo server
+ err := clusterInstance.StartTopo()
+ if err != nil {
+ return 1
+ }
+
+ // Start Unsharded keyspace
+ ukeyspace := &cluster.Keyspace{
+ Name: uks,
+ SchemaSQL: uschemaSQL,
+ }
+ err = clusterInstance.StartUnshardedKeyspace(*ukeyspace, 0, false)
+ if err != nil {
+ return 1
+ }
+
+ err = clusterInstance.StartVtgate()
+ if err != nil {
+ return 1
+ }
+
+ clusterInstance.NewVTAdminProcess()
+ err = clusterInstance.VtadminProcess.Setup()
+ if err != nil {
+ return 1
+ }
+
+ return m.Run()
+ }()
+ os.Exit(exitCode)
+}
+
+// TestVtadminAPIs tests the vtadmin APIs.
+func TestVtadminAPIs(t *testing.T) {
+
+ // Test the vtadmin APIs
+ t.Run("keyspaces api", func(t *testing.T) {
+ resp := clusterInstance.VtadminProcess.MakeAPICallRetry(t, "api/keyspaces")
+ require.Contains(t, resp, uks)
+ })
+}
diff --git a/go/test/endtoend/vtgate/concurrentdml/main_test.go b/go/test/endtoend/vtgate/concurrentdml/main_test.go
index 6ee5619b742..734962b0d33 100644
--- a/go/test/endtoend/vtgate/concurrentdml/main_test.go
+++ b/go/test/endtoend/vtgate/concurrentdml/main_test.go
@@ -66,7 +66,6 @@ INSERT INTO t1_seq (id, next_id, cache) values(0, 1, 1000);
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -108,7 +107,6 @@ func TestMain(m *testing.M) {
}
func TestInsertIgnoreOnLookupUniqueVindex(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtParams := mysql.ConnParams{
Host: "localhost",
@@ -137,7 +135,6 @@ func TestInsertIgnoreOnLookupUniqueVindex(t *testing.T) {
func TestOpenTxBlocksInSerial(t *testing.T) {
t.Skip("Update and Insert in same transaction does not work with the unique consistent lookup having same value.")
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtParams := mysql.ConnParams{
Host: "localhost",
@@ -169,7 +166,6 @@ func TestOpenTxBlocksInSerial(t *testing.T) {
func TestOpenTxBlocksInConcurrent(t *testing.T) {
t.Skip("Update and Insert in same transaction does not work with the unique consistent lookup having same value.")
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtParams := mysql.ConnParams{
Host: "localhost",
@@ -207,7 +203,6 @@ func TestOpenTxBlocksInConcurrent(t *testing.T) {
}
func TestUpdateLookupUniqueVindex(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtParams := mysql.ConnParams{
Host: "localhost",
diff --git a/go/test/endtoend/vtgate/connectiondrain/main_test.go b/go/test/endtoend/vtgate/connectiondrain/main_test.go
index 6dae9b72be9..6257baf8e40 100644
--- a/go/test/endtoend/vtgate/connectiondrain/main_test.go
+++ b/go/test/endtoend/vtgate/connectiondrain/main_test.go
@@ -40,7 +40,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
os.Exit(m.Run())
}
@@ -87,7 +86,6 @@ func start(t *testing.T, vtParams mysql.ConnParams) (*mysql.Conn, func()) {
return vtConn, func() {
deleteAll()
vtConn.Close()
- cluster.PanicHandler(t)
}
}
diff --git a/go/test/endtoend/vtgate/consolidator/main_test.go b/go/test/endtoend/vtgate/consolidator/main_test.go
index 021db7e513e..0d5eae3eca9 100644
--- a/go/test/endtoend/vtgate/consolidator/main_test.go
+++ b/go/test/endtoend/vtgate/consolidator/main_test.go
@@ -65,7 +65,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/createdb_plugin/main_test.go b/go/test/endtoend/vtgate/createdb_plugin/main_test.go
index 5bfec3890b5..e2925bf928d 100644
--- a/go/test/endtoend/vtgate/createdb_plugin/main_test.go
+++ b/go/test/endtoend/vtgate/createdb_plugin/main_test.go
@@ -43,7 +43,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -81,7 +80,6 @@ func TestMain(m *testing.M) {
}
func TestDBDDLPlugin(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtParams := mysql.ConnParams{
Host: "localhost",
diff --git a/go/test/endtoend/vtgate/errors_as_warnings/main_test.go b/go/test/endtoend/vtgate/errors_as_warnings/main_test.go
index 71f4a2353f7..374a92f395f 100644
--- a/go/test/endtoend/vtgate/errors_as_warnings/main_test.go
+++ b/go/test/endtoend/vtgate/errors_as_warnings/main_test.go
@@ -66,7 +66,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/foreignkey/main_test.go b/go/test/endtoend/vtgate/foreignkey/main_test.go
index b4d610785b5..fe418c1c0ea 100644
--- a/go/test/endtoend/vtgate/foreignkey/main_test.go
+++ b/go/test/endtoend/vtgate/foreignkey/main_test.go
@@ -98,7 +98,6 @@ type fkReference struct {
}
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -197,7 +196,6 @@ func start(t *testing.T) (utils.MySQLCompare, func()) {
return mcmp, func() {
deleteAll()
mcmp.Close()
- cluster.PanicHandler(t)
}
}
diff --git a/go/test/endtoend/vtgate/foreignkey/stress/fk_stress_test.go b/go/test/endtoend/vtgate/foreignkey/stress/fk_stress_test.go
index 34114152e4e..42498ad80f0 100644
--- a/go/test/endtoend/vtgate/foreignkey/stress/fk_stress_test.go
+++ b/go/test/endtoend/vtgate/foreignkey/stress/fk_stress_test.go
@@ -335,7 +335,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitcode, err := func() (int, error) {
@@ -653,7 +652,6 @@ func ExecuteFKTest(t *testing.T, tcase *testCase) {
}
func TestStressFK(t *testing.T) {
- defer cluster.PanicHandler(t)
t.Run("validate replication health", func(t *testing.T) {
validateReplicationIsHealthy(t, replicaNoFK)
diff --git a/go/test/endtoend/vtgate/gen4/column_name_test.go b/go/test/endtoend/vtgate/gen4/column_name_test.go
index d23c03c9f6b..0f5a83a5092 100644
--- a/go/test/endtoend/vtgate/gen4/column_name_test.go
+++ b/go/test/endtoend/vtgate/gen4/column_name_test.go
@@ -26,11 +26,9 @@ import (
"github.com/stretchr/testify/require"
"vitess.io/vitess/go/mysql"
- "vitess.io/vitess/go/test/endtoend/cluster"
)
func TestColumnNames(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
diff --git a/go/test/endtoend/vtgate/gen4/main_test.go b/go/test/endtoend/vtgate/gen4/main_test.go
index 4c94e8e2ec8..e8280b3aa06 100644
--- a/go/test/endtoend/vtgate/gen4/main_test.go
+++ b/go/test/endtoend/vtgate/gen4/main_test.go
@@ -64,7 +64,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -152,6 +151,5 @@ func start(t *testing.T) (utils.MySQLCompare, func()) {
return mcmp, func() {
deleteAll()
mcmp.Close()
- cluster.PanicHandler(t)
}
}
diff --git a/go/test/endtoend/vtgate/gen4/system_schema_test.go b/go/test/endtoend/vtgate/gen4/system_schema_test.go
index fc4983935e9..d01d4d972a1 100644
--- a/go/test/endtoend/vtgate/gen4/system_schema_test.go
+++ b/go/test/endtoend/vtgate/gen4/system_schema_test.go
@@ -28,11 +28,9 @@ import (
"github.com/stretchr/testify/require"
"vitess.io/vitess/go/mysql"
- "vitess.io/vitess/go/test/endtoend/cluster"
)
func TestDbNameOverride(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
require.Nil(t, err)
@@ -55,7 +53,6 @@ func TestDbNameOverride(t *testing.T) {
}
func TestInformationSchemaQuery(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
require.NoError(t, err)
@@ -90,7 +87,6 @@ func assertSingleRowIsReturned(t *testing.T, conn *mysql.Conn, predicate string,
}
func TestInformationSchemaWithSubquery(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
require.NoError(t, err)
@@ -101,7 +97,6 @@ func TestInformationSchemaWithSubquery(t *testing.T) {
}
func TestInformationSchemaQueryGetsRoutedToTheRightTableAndKeyspace(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
require.NoError(t, err)
@@ -113,7 +108,6 @@ func TestInformationSchemaQueryGetsRoutedToTheRightTableAndKeyspace(t *testing.T
}
func TestFKConstraintUsingInformationSchema(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
require.NoError(t, err)
@@ -131,7 +125,6 @@ func TestFKConstraintUsingInformationSchema(t *testing.T) {
}
func TestConnectWithSystemSchema(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
for _, dbname := range []string{"information_schema", "mysql", "performance_schema", "sys"} {
connParams := vtParams
@@ -144,7 +137,6 @@ func TestConnectWithSystemSchema(t *testing.T) {
}
func TestUseSystemSchema(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
require.NoError(t, err)
@@ -156,7 +148,6 @@ func TestUseSystemSchema(t *testing.T) {
}
func TestSystemSchemaQueryWithoutQualifier(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
require.NoError(t, err)
@@ -191,7 +182,6 @@ func TestSystemSchemaQueryWithoutQualifier(t *testing.T) {
}
func TestMultipleSchemaPredicates(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
require.NoError(t, err)
@@ -217,7 +207,6 @@ func TestMultipleSchemaPredicates(t *testing.T) {
}
func TestQuerySystemTables(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
require.NoError(t, err)
diff --git a/go/test/endtoend/vtgate/godriver/main_test.go b/go/test/endtoend/vtgate/godriver/main_test.go
index 587c189d2ea..91605394cf1 100644
--- a/go/test/endtoend/vtgate/godriver/main_test.go
+++ b/go/test/endtoend/vtgate/godriver/main_test.go
@@ -86,7 +86,6 @@ create table my_message(
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -125,7 +124,6 @@ func TestMain(m *testing.M) {
}
func TestStreamMessaging(t *testing.T) {
- defer cluster.PanicHandler(t)
cnf := vitessdriver.Configuration{
Protocol: "grpc",
diff --git a/go/test/endtoend/vtgate/grpc_api/main_test.go b/go/test/endtoend/vtgate/grpc_api/main_test.go
index 3c8605f79a0..87d30f4ce26 100644
--- a/go/test/endtoend/vtgate/grpc_api/main_test.go
+++ b/go/test/endtoend/vtgate/grpc_api/main_test.go
@@ -75,7 +75,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitcode := func() int {
diff --git a/go/test/endtoend/vtgate/keyspace_watches/keyspace_watch_test.go b/go/test/endtoend/vtgate/keyspace_watches/keyspace_watch_test.go
index 4971d03060b..1eb31663577 100644
--- a/go/test/endtoend/vtgate/keyspace_watches/keyspace_watch_test.go
+++ b/go/test/endtoend/vtgate/keyspace_watches/keyspace_watch_test.go
@@ -117,7 +117,6 @@ func createCluster(extraVTGateArgs []string) (*cluster.LocalProcessCluster, int)
}
func TestRoutingWithKeyspacesToWatch(t *testing.T) {
- defer cluster.PanicHandler(t)
clusterInstance, exitCode := createCluster(nil)
defer clusterInstance.Teardown()
@@ -141,7 +140,6 @@ func TestRoutingWithKeyspacesToWatch(t *testing.T) {
}
func TestVSchemaDDLWithKeyspacesToWatch(t *testing.T) {
- defer cluster.PanicHandler(t)
extraVTGateArgs := []string{
"--vschema_ddl_authorized_users", "%",
diff --git a/go/test/endtoend/vtgate/lookup_test.go b/go/test/endtoend/vtgate/lookup_test.go
index 75f4a007076..82cd63e5401 100644
--- a/go/test/endtoend/vtgate/lookup_test.go
+++ b/go/test/endtoend/vtgate/lookup_test.go
@@ -552,6 +552,22 @@ func TestConsistentLookupUpdate(t *testing.T) {
require.Empty(t, qr.Rows)
}
+func TestSelectMultiEqualLookup(t *testing.T) {
+ conn, closer := start(t)
+ defer closer()
+
+ utils.Exec(t, conn, "insert into t10 (id, sharding_key, col1) values (1, 1, 'bar'), (2, 1, 'bar'), (3, 1, 'bar'), (4, 2, 'bar'), (5, 2, 'bar')")
+
+ for _, workload := range []string{"oltp", "olap"} {
+ t.Run(workload, func(t *testing.T) {
+ utils.Exec(t, conn, "set workload = "+workload)
+
+ utils.AssertMatches(t, conn, "select id from t10 WHERE (col1, id) IN (('bar', 1), ('baz', 2), ('qux', 3), ('barbar', 4))", "[[INT64(1)]]")
+ utils.AssertMatches(t, conn, "select id from t10 WHERE (col1 = 'bar' AND id = 1) OR (col1 = 'baz' AND id = 2) OR (col1 = 'qux' AND id = 3) OR (col1 = 'barbar' AND id = 4)", "[[INT64(1)]]")
+ })
+ }
+}
+
func TestSelectNullLookup(t *testing.T) {
conn, closer := start(t)
defer closer()
diff --git a/go/test/endtoend/vtgate/main_test.go b/go/test/endtoend/vtgate/main_test.go
index b276508f269..6c43a70632b 100644
--- a/go/test/endtoend/vtgate/main_test.go
+++ b/go/test/endtoend/vtgate/main_test.go
@@ -54,7 +54,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
clusterInstance = cluster.NewCluster(Cell, "localhost")
@@ -122,6 +121,5 @@ func start(t *testing.T) (*mysql.Conn, func()) {
return conn, func() {
deleteAll()
conn.Close()
- cluster.PanicHandler(t)
}
}
diff --git a/go/test/endtoend/vtgate/misc_test.go b/go/test/endtoend/vtgate/misc_test.go
index f15799a5e71..bbcb338fa50 100644
--- a/go/test/endtoend/vtgate/misc_test.go
+++ b/go/test/endtoend/vtgate/misc_test.go
@@ -28,7 +28,6 @@ import (
"vitess.io/vitess/go/mysql"
"vitess.io/vitess/go/mysql/sqlerror"
- "vitess.io/vitess/go/test/endtoend/cluster"
"vitess.io/vitess/go/test/endtoend/utils"
)
@@ -783,7 +782,6 @@ func TestJoinWithMergedRouteWithPredicate(t *testing.T) {
func TestRowCountExceed(t *testing.T) {
conn, _ := start(t)
defer func() {
- cluster.PanicHandler(t)
// needs special delete logic as it exceeds row count.
for i := 50; i <= 300; i += 50 {
utils.Exec(t, conn, fmt.Sprintf("delete from t1 where id1 < %d", i))
@@ -844,8 +842,8 @@ func getVtgateApiErrorCounts(t *testing.T) float64 {
}
func getVar(t *testing.T, key string) interface{} {
- vars, err := clusterInstance.VtgateProcess.GetVars()
- require.NoError(t, err)
+ vars := clusterInstance.VtgateProcess.GetVars()
+ require.NotNil(t, vars)
val, exists := vars[key]
if !exists {
diff --git a/go/test/endtoend/vtgate/mysql80/main_test.go b/go/test/endtoend/vtgate/mysql80/main_test.go
index 4f5897d1f59..b970fb66b12 100644
--- a/go/test/endtoend/vtgate/mysql80/main_test.go
+++ b/go/test/endtoend/vtgate/mysql80/main_test.go
@@ -35,7 +35,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/mysql80/misc_test.go b/go/test/endtoend/vtgate/mysql80/misc_test.go
index b29eb13ecdc..5132bf87aba 100644
--- a/go/test/endtoend/vtgate/mysql80/misc_test.go
+++ b/go/test/endtoend/vtgate/mysql80/misc_test.go
@@ -23,15 +23,12 @@ import (
"vitess.io/vitess/go/test/endtoend/utils"
- "vitess.io/vitess/go/test/endtoend/cluster"
-
"github.com/stretchr/testify/require"
"vitess.io/vitess/go/mysql"
)
func TestFunctionInDefault(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
require.NoError(t, err)
@@ -223,7 +220,6 @@ func BenchmarkReservedConnWhenSettingSysVar(b *testing.B) {
}
func TestJsonFunctions(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
require.NoError(t, err)
diff --git a/go/test/endtoend/vtgate/partialfailure/main_test.go b/go/test/endtoend/vtgate/partialfailure/main_test.go
index 9e39e7b5dd5..d5b6a639c68 100644
--- a/go/test/endtoend/vtgate/partialfailure/main_test.go
+++ b/go/test/endtoend/vtgate/partialfailure/main_test.go
@@ -45,7 +45,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/plan_tests/main_test.go b/go/test/endtoend/vtgate/plan_tests/main_test.go
new file mode 100644
index 00000000000..d3915af0c8d
--- /dev/null
+++ b/go/test/endtoend/vtgate/plan_tests/main_test.go
@@ -0,0 +1,230 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package plan_tests
+
+import (
+ "encoding/json"
+ "fmt"
+ "os"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+
+ "vitess.io/vitess/go/mysql"
+ "vitess.io/vitess/go/test/endtoend/cluster"
+ "vitess.io/vitess/go/test/endtoend/utils"
+ "vitess.io/vitess/go/vt/vtgate/engine"
+ "vitess.io/vitess/go/vt/vtgate/planbuilder"
+)
+
+var (
+ clusterInstance *cluster.LocalProcessCluster
+ vtParams mysql.ConnParams
+ mysqlParams mysql.ConnParams
+ uks = "main"
+ sks = "user"
+ cell = "plantests"
+)
+
+func TestMain(m *testing.M) {
+ vschema := readFile("vschemas/schema.json")
+ userVs := extractUserKS(vschema)
+ mainVs := extractMainKS(vschema)
+ sSQL := readFile("schemas/user.sql")
+ uSQL := readFile("schemas/main.sql")
+
+ exitCode := func() int {
+ clusterInstance = cluster.NewCluster(cell, "localhost")
+ defer clusterInstance.Teardown()
+
+ // Start topo server
+ err := clusterInstance.StartTopo()
+ if err != nil {
+ fmt.Println(err.Error())
+ return 1
+ }
+
+ // Start unsharded keyspace
+ uKeyspace := &cluster.Keyspace{
+ Name: uks,
+ SchemaSQL: uSQL,
+ VSchema: mainVs,
+ }
+ err = clusterInstance.StartUnshardedKeyspace(*uKeyspace, 0, false)
+ if err != nil {
+ fmt.Println(err.Error())
+ return 1
+ }
+
+ // Start sharded keyspace
+ skeyspace := &cluster.Keyspace{
+ Name: sks,
+ SchemaSQL: sSQL,
+ VSchema: userVs,
+ }
+ err = clusterInstance.StartKeyspace(*skeyspace, []string{"-80", "80-"}, 0, false)
+ if err != nil {
+ fmt.Println(err.Error())
+ return 1
+ }
+
+ // TODO: (@GuptaManan100/@systay): Also run the tests with normalizer on.
+ clusterInstance.VtGateExtraArgs = append(clusterInstance.VtGateExtraArgs,
+ "--normalize_queries=false",
+ "--schema_change_signal=false",
+ )
+
+ // Start vtgate
+ err = clusterInstance.StartVtgate()
+ if err != nil {
+ fmt.Println(err.Error())
+ return 1
+ }
+
+ vtParams = clusterInstance.GetVTParams(sks)
+
+ // create mysql instance and connection parameters
+ conn, closer, err := utils.NewMySQL(clusterInstance, sks, sSQL, uSQL)
+ if err != nil {
+ fmt.Println(err.Error())
+ return 1
+ }
+ defer closer()
+ mysqlParams = conn
+
+ return m.Run()
+ }()
+ os.Exit(exitCode)
+}
+
+func readFile(filename string) string {
+ schema, err := os.ReadFile(locateFile(filename))
+ if err != nil {
+ fmt.Println(err)
+ os.Exit(1)
+ }
+ return string(schema)
+}
+
+func start(t *testing.T) (utils.MySQLCompare, func()) {
+ mcmp, err := utils.NewMySQLCompare(t, vtParams, mysqlParams)
+ require.NoError(t, err)
+ return mcmp, func() {
+ mcmp.Close()
+ }
+}
+
+func readJSONTests(filename string) []planbuilder.PlanTest {
+ var output []planbuilder.PlanTest
+ file, err := os.Open(locateFile(filename))
+ if err != nil {
+ panic(err)
+ }
+ defer file.Close()
+ dec := json.NewDecoder(file)
+ err = dec.Decode(&output)
+ if err != nil {
+ panic(err)
+ }
+ return output
+}
+
+func locateFile(name string) string {
+ return "../../../../vt/vtgate/planbuilder/testdata/" + name
+}
+
+// verifyTestExpectations verifies the expectations of the test.
+func verifyTestExpectations(t *testing.T, pd engine.PrimitiveDescription, test planbuilder.PlanTest) {
+ // 1. Verify that the Join primitive sees atleast 1 row on the left side.
+ engine.WalkPrimitiveDescription(pd, func(description engine.PrimitiveDescription) {
+ if description.OperatorType == "Join" {
+ require.NotZero(t, description.Inputs[0].RowsReceived[0])
+ }
+ })
+
+ // 2. Verify that the plan description matches the expected plan description.
+ planBytes, err := test.Plan.MarshalJSON()
+ require.NoError(t, err)
+ mp := make(map[string]any)
+ err = json.Unmarshal(planBytes, &mp)
+ require.NoError(t, err)
+ pdExpected, err := engine.PrimitiveDescriptionFromMap(mp["Instructions"].(map[string]any))
+ require.NoError(t, err)
+ require.Empty(t, pdExpected.Equals(pd), "Expected: %v\nGot: %v", string(planBytes), pd)
+}
+
+func extractUserKS(jsonString string) string {
+ var result map[string]any
+ if err := json.Unmarshal([]byte(jsonString), &result); err != nil {
+ panic(err.Error())
+ }
+
+ keyspaces, ok := result["keyspaces"].(map[string]any)
+ if !ok {
+ panic("Keyspaces not found")
+ }
+
+ user, ok := keyspaces["user"].(map[string]any)
+ if !ok {
+ panic("User keyspace not found")
+ }
+
+ tables, ok := user["tables"].(map[string]any)
+ if !ok {
+ panic("Tables not found")
+ }
+
+ userTbl, ok := tables["user"].(map[string]any)
+ if !ok {
+ panic("User table not found")
+ }
+
+ delete(userTbl, "auto_increment") // TODO: we should have an unsharded keyspace where this could live
+
+ // Marshal the inner part back to JSON string
+ userJson, err := json.Marshal(user)
+ if err != nil {
+ panic(err.Error())
+ }
+
+ return string(userJson)
+}
+
+func extractMainKS(jsonString string) string {
+ var result map[string]any
+ if err := json.Unmarshal([]byte(jsonString), &result); err != nil {
+ panic(err.Error())
+ }
+
+ keyspaces, ok := result["keyspaces"].(map[string]any)
+ if !ok {
+ panic("Keyspaces not found")
+ }
+
+ main, ok := keyspaces["main"].(map[string]any)
+ if !ok {
+ panic("main keyspace not found")
+ }
+
+ // Marshal the inner part back to JSON string
+ mainJson, err := json.Marshal(main)
+ if err != nil {
+ panic(err.Error())
+ }
+
+ return string(mainJson)
+}
diff --git a/go/test/endtoend/vtgate/plan_tests/plan_e2e_test.go b/go/test/endtoend/vtgate/plan_tests/plan_e2e_test.go
new file mode 100644
index 00000000000..1594e9b392c
--- /dev/null
+++ b/go/test/endtoend/vtgate/plan_tests/plan_e2e_test.go
@@ -0,0 +1,42 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package plan_tests
+
+import (
+ "testing"
+
+ "vitess.io/vitess/go/test/endtoend/utils"
+)
+
+func TestSelectCases(t *testing.T) {
+ mcmp, closer := start(t)
+ defer closer()
+ tests := readJSONTests("select_cases.json")
+ for _, test := range tests {
+ mcmp.Run(test.Comment, func(mcmp *utils.MySQLCompare) {
+ if test.SkipE2E {
+ mcmp.AsT().Skip(test.Query)
+ }
+ mcmp.Exec(test.Query)
+ pd := utils.ExecTrace(mcmp.AsT(), mcmp.VtConn, test.Query)
+ verifyTestExpectations(mcmp.AsT(), pd, test)
+ if mcmp.VtConn.IsClosed() {
+ mcmp.AsT().Fatal("vtgate connection is closed")
+ }
+ })
+ }
+}
diff --git a/go/test/endtoend/vtgate/prefixfanout/main_test.go b/go/test/endtoend/vtgate/prefixfanout/main_test.go
index 928808fd48e..a96ee4ce7f5 100644
--- a/go/test/endtoend/vtgate/prefixfanout/main_test.go
+++ b/go/test/endtoend/vtgate/prefixfanout/main_test.go
@@ -109,7 +109,6 @@ PRIMARY KEY (c1)
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -158,7 +157,6 @@ func TestMain(m *testing.M) {
}
func TestCFCPrefixQueryNoHash(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtParams := clusterInstance.GetVTParams(sKs)
conn, err := mysql.Connect(ctx, &vtParams)
@@ -196,7 +194,6 @@ func TestCFCPrefixQueryNoHash(t *testing.T) {
}
func TestCFCPrefixQueryWithHash(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtParams := clusterInstance.GetVTParams(sKsMD5)
@@ -239,7 +236,6 @@ func TestCFCPrefixQueryWithHash(t *testing.T) {
}
func TestCFCInsert(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtParams := clusterInstance.GetVTParams(sKs)
diff --git a/go/test/endtoend/vtgate/queries/aggregation/aggregation_test.go b/go/test/endtoend/vtgate/queries/aggregation/aggregation_test.go
index d206f58e17c..62d23749cd7 100644
--- a/go/test/endtoend/vtgate/queries/aggregation/aggregation_test.go
+++ b/go/test/endtoend/vtgate/queries/aggregation/aggregation_test.go
@@ -27,7 +27,6 @@ import (
"github.com/stretchr/testify/require"
"vitess.io/vitess/go/sqltypes"
- "vitess.io/vitess/go/test/endtoend/cluster"
"vitess.io/vitess/go/test/endtoend/utils"
)
@@ -66,7 +65,6 @@ func start(t *testing.T) (utils.MySQLCompare, func()) {
return mcmp, func() {
deleteAll()
mcmp.Close()
- cluster.PanicHandler(t)
}
}
diff --git a/go/test/endtoend/vtgate/queries/aggregation/main_test.go b/go/test/endtoend/vtgate/queries/aggregation/main_test.go
index 02013a9b0e2..bd1c1aa3b7d 100644
--- a/go/test/endtoend/vtgate/queries/aggregation/main_test.go
+++ b/go/test/endtoend/vtgate/queries/aggregation/main_test.go
@@ -44,7 +44,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/queries/benchmark/main_test.go b/go/test/endtoend/vtgate/queries/benchmark/main_test.go
index 40a215c8007..0410f52993a 100644
--- a/go/test/endtoend/vtgate/queries/benchmark/main_test.go
+++ b/go/test/endtoend/vtgate/queries/benchmark/main_test.go
@@ -65,7 +65,6 @@ var shards4 = []string{
}
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -169,6 +168,5 @@ func start(b *testing.B) (*mysql.Conn, func()) {
return conn, func() {
deleteAll()
conn.Close()
- cluster.PanicHandler(b)
}
}
diff --git a/go/test/endtoend/vtgate/queries/derived/derived_test.go b/go/test/endtoend/vtgate/queries/derived/derived_test.go
index cb106564b2f..fe467f31c20 100644
--- a/go/test/endtoend/vtgate/queries/derived/derived_test.go
+++ b/go/test/endtoend/vtgate/queries/derived/derived_test.go
@@ -21,7 +21,6 @@ import (
"github.com/stretchr/testify/require"
- "vitess.io/vitess/go/test/endtoend/cluster"
"vitess.io/vitess/go/test/endtoend/utils"
)
@@ -44,7 +43,6 @@ func start(t *testing.T) (utils.MySQLCompare, func()) {
return mcmp, func() {
deleteAll()
mcmp.Close()
- cluster.PanicHandler(t)
}
}
diff --git a/go/test/endtoend/vtgate/queries/derived/main_test.go b/go/test/endtoend/vtgate/queries/derived/main_test.go
index 3b44811f95c..0bab24a966a 100644
--- a/go/test/endtoend/vtgate/queries/derived/main_test.go
+++ b/go/test/endtoend/vtgate/queries/derived/main_test.go
@@ -44,7 +44,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/queries/dml/main_test.go b/go/test/endtoend/vtgate/queries/dml/main_test.go
index 0c4d58aa614..bc72acc1159 100644
--- a/go/test/endtoend/vtgate/queries/dml/main_test.go
+++ b/go/test/endtoend/vtgate/queries/dml/main_test.go
@@ -66,7 +66,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -148,6 +147,5 @@ func start(t *testing.T) (utils.MySQLCompare, func()) {
return mcmp, func() {
deleteAll()
mcmp.Close()
- cluster.PanicHandler(t)
}
}
diff --git a/go/test/endtoend/vtgate/queries/foundrows/found_rows_test.go b/go/test/endtoend/vtgate/queries/foundrows/found_rows_test.go
index f52e2eff532..e50e9210c55 100644
--- a/go/test/endtoend/vtgate/queries/foundrows/found_rows_test.go
+++ b/go/test/endtoend/vtgate/queries/foundrows/found_rows_test.go
@@ -21,12 +21,10 @@ import (
"github.com/stretchr/testify/require"
- "vitess.io/vitess/go/test/endtoend/cluster"
"vitess.io/vitess/go/test/endtoend/utils"
)
func TestFoundRows(t *testing.T) {
- defer cluster.PanicHandler(t)
mcmp, err := utils.NewMySQLCompare(t, vtParams, mysqlParams)
require.NoError(t, err)
defer mcmp.Close()
diff --git a/go/test/endtoend/vtgate/queries/foundrows/main_test.go b/go/test/endtoend/vtgate/queries/foundrows/main_test.go
index 8f992863008..248b6cd9434 100644
--- a/go/test/endtoend/vtgate/queries/foundrows/main_test.go
+++ b/go/test/endtoend/vtgate/queries/foundrows/main_test.go
@@ -46,7 +46,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/queries/informationschema/informationschema_test.go b/go/test/endtoend/vtgate/queries/informationschema/informationschema_test.go
index c5568b2db49..e158bd96e33 100644
--- a/go/test/endtoend/vtgate/queries/informationschema/informationschema_test.go
+++ b/go/test/endtoend/vtgate/queries/informationschema/informationschema_test.go
@@ -25,7 +25,6 @@ import (
"github.com/stretchr/testify/require"
"vitess.io/vitess/go/mysql"
- "vitess.io/vitess/go/test/endtoend/cluster"
"vitess.io/vitess/go/test/endtoend/utils"
)
@@ -47,7 +46,6 @@ func start(t *testing.T) (utils.MySQLCompare, func()) {
return mcmp, func() {
deleteAll()
mcmp.Close()
- cluster.PanicHandler(t)
}
}
@@ -114,7 +112,6 @@ func TestFKConstraintUsingInformationSchema(t *testing.T) {
}
func TestConnectWithSystemSchema(t *testing.T) {
- defer cluster.PanicHandler(t)
for _, dbname := range []string{"information_schema", "mysql", "performance_schema", "sys"} {
vtConnParams := vtParams
vtConnParams.DbName = dbname
diff --git a/go/test/endtoend/vtgate/queries/informationschema/main_test.go b/go/test/endtoend/vtgate/queries/informationschema/main_test.go
index 3696617281e..76d5f44ebae 100644
--- a/go/test/endtoend/vtgate/queries/informationschema/main_test.go
+++ b/go/test/endtoend/vtgate/queries/informationschema/main_test.go
@@ -52,7 +52,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/queries/kill/main_test.go b/go/test/endtoend/vtgate/queries/kill/main_test.go
index 99608030246..61ddec43589 100644
--- a/go/test/endtoend/vtgate/queries/kill/main_test.go
+++ b/go/test/endtoend/vtgate/queries/kill/main_test.go
@@ -50,7 +50,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/queries/lookup_queries/main_test.go b/go/test/endtoend/vtgate/queries/lookup_queries/main_test.go
index a587f124762..818b834511a 100644
--- a/go/test/endtoend/vtgate/queries/lookup_queries/main_test.go
+++ b/go/test/endtoend/vtgate/queries/lookup_queries/main_test.go
@@ -49,7 +49,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -119,7 +118,6 @@ func start(t *testing.T) (utils.MySQLCompare, func()) {
return mcmp, func() {
deleteAll()
mcmp.Close()
- cluster.PanicHandler(t)
}
}
diff --git a/go/test/endtoend/vtgate/queries/misc/main_test.go b/go/test/endtoend/vtgate/queries/misc/main_test.go
index f20072031a8..ee9be542634 100644
--- a/go/test/endtoend/vtgate/queries/misc/main_test.go
+++ b/go/test/endtoend/vtgate/queries/misc/main_test.go
@@ -48,7 +48,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/queries/misc/misc_test.go b/go/test/endtoend/vtgate/queries/misc/misc_test.go
index 69108b26293..8738baf3267 100644
--- a/go/test/endtoend/vtgate/queries/misc/misc_test.go
+++ b/go/test/endtoend/vtgate/queries/misc/misc_test.go
@@ -20,7 +20,6 @@ import (
"context"
"database/sql"
"fmt"
- "strconv"
"strings"
"testing"
"time"
@@ -31,7 +30,6 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
- "vitess.io/vitess/go/test/endtoend/cluster"
"vitess.io/vitess/go/test/endtoend/utils"
)
@@ -51,7 +49,6 @@ func start(t *testing.T) (utils.MySQLCompare, func()) {
return mcmp, func() {
deleteAll()
mcmp.Close()
- cluster.PanicHandler(t)
}
}
@@ -200,7 +197,7 @@ func TestHighNumberOfParams(t *testing.T) {
var vals []any
var params []string
for i := 0; i < paramCount; i++ {
- vals = append(vals, strconv.Itoa(i))
+ vals = append(vals, i)
params = append(params, "?")
}
diff --git a/go/test/endtoend/vtgate/queries/no_scatter/main_test.go b/go/test/endtoend/vtgate/queries/no_scatter/main_test.go
index c4b0974c24b..a1478dcd2ac 100644
--- a/go/test/endtoend/vtgate/queries/no_scatter/main_test.go
+++ b/go/test/endtoend/vtgate/queries/no_scatter/main_test.go
@@ -40,7 +40,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/queries/no_scatter/queries_test.go b/go/test/endtoend/vtgate/queries/no_scatter/queries_test.go
index 7bf702afc15..b302a0f4dc7 100644
--- a/go/test/endtoend/vtgate/queries/no_scatter/queries_test.go
+++ b/go/test/endtoend/vtgate/queries/no_scatter/queries_test.go
@@ -23,7 +23,6 @@ import (
"github.com/stretchr/testify/require"
"vitess.io/vitess/go/mysql"
- "vitess.io/vitess/go/test/endtoend/cluster"
"vitess.io/vitess/go/test/endtoend/utils"
)
@@ -43,7 +42,6 @@ func start(t *testing.T) (*mysql.Conn, func()) {
return vtConn, func() {
deleteAll()
vtConn.Close()
- cluster.PanicHandler(t)
}
}
diff --git a/go/test/endtoend/vtgate/queries/normalize/main_test.go b/go/test/endtoend/vtgate/queries/normalize/main_test.go
index 8f4d97209dd..8c75d38284d 100644
--- a/go/test/endtoend/vtgate/queries/normalize/main_test.go
+++ b/go/test/endtoend/vtgate/queries/normalize/main_test.go
@@ -39,7 +39,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/queries/orderby/main_test.go b/go/test/endtoend/vtgate/queries/orderby/main_test.go
index 9f18377ee3f..353745722b7 100644
--- a/go/test/endtoend/vtgate/queries/orderby/main_test.go
+++ b/go/test/endtoend/vtgate/queries/orderby/main_test.go
@@ -44,7 +44,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/queries/orderby/orderby_test.go b/go/test/endtoend/vtgate/queries/orderby/orderby_test.go
index c36b52a4e6a..716f01fb5c7 100644
--- a/go/test/endtoend/vtgate/queries/orderby/orderby_test.go
+++ b/go/test/endtoend/vtgate/queries/orderby/orderby_test.go
@@ -22,8 +22,6 @@ import (
"vitess.io/vitess/go/test/endtoend/utils"
"github.com/stretchr/testify/require"
-
- "vitess.io/vitess/go/test/endtoend/cluster"
)
func start(t *testing.T) (utils.MySQLCompare, func()) {
@@ -44,7 +42,6 @@ func start(t *testing.T) (utils.MySQLCompare, func()) {
return mcmp, func() {
deleteAll()
mcmp.Close()
- cluster.PanicHandler(t)
}
}
diff --git a/go/test/endtoend/vtgate/queries/orderby/without_schematracker/main_test.go b/go/test/endtoend/vtgate/queries/orderby/without_schematracker/main_test.go
index 00221e9c9f3..373c1327074 100644
--- a/go/test/endtoend/vtgate/queries/orderby/without_schematracker/main_test.go
+++ b/go/test/endtoend/vtgate/queries/orderby/without_schematracker/main_test.go
@@ -44,7 +44,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/queries/orderby/without_schematracker/orderby_test.go b/go/test/endtoend/vtgate/queries/orderby/without_schematracker/orderby_test.go
index a20c7ad54c6..956815d2a0d 100644
--- a/go/test/endtoend/vtgate/queries/orderby/without_schematracker/orderby_test.go
+++ b/go/test/endtoend/vtgate/queries/orderby/without_schematracker/orderby_test.go
@@ -22,8 +22,6 @@ import (
"vitess.io/vitess/go/test/endtoend/utils"
"github.com/stretchr/testify/require"
-
- "vitess.io/vitess/go/test/endtoend/cluster"
)
func start(t *testing.T) (utils.MySQLCompare, func()) {
@@ -44,7 +42,6 @@ func start(t *testing.T) (utils.MySQLCompare, func()) {
return mcmp, func() {
deleteAll()
mcmp.Close()
- cluster.PanicHandler(t)
}
}
diff --git a/go/test/endtoend/vtgate/queries/random/main_test.go b/go/test/endtoend/vtgate/queries/random/main_test.go
index e3256f60796..85c8840924d 100644
--- a/go/test/endtoend/vtgate/queries/random/main_test.go
+++ b/go/test/endtoend/vtgate/queries/random/main_test.go
@@ -44,7 +44,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/queries/random/random_test.go b/go/test/endtoend/vtgate/queries/random/random_test.go
index 2d210ee7f99..20c7934d91f 100644
--- a/go/test/endtoend/vtgate/queries/random/random_test.go
+++ b/go/test/endtoend/vtgate/queries/random/random_test.go
@@ -27,7 +27,6 @@ import (
"github.com/stretchr/testify/require"
- "vitess.io/vitess/go/test/endtoend/cluster"
"vitess.io/vitess/go/test/endtoend/utils"
)
@@ -61,7 +60,6 @@ func start(t *testing.T) (utils.MySQLCompare, func()) {
return mcmp, func() {
deleteAll()
mcmp.Close()
- cluster.PanicHandler(t)
}
}
diff --git a/go/test/endtoend/vtgate/queries/reference/main_test.go b/go/test/endtoend/vtgate/queries/reference/main_test.go
index c350038bf6e..03ee429e4c0 100644
--- a/go/test/endtoend/vtgate/queries/reference/main_test.go
+++ b/go/test/endtoend/vtgate/queries/reference/main_test.go
@@ -53,7 +53,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/queries/reference/reference_test.go b/go/test/endtoend/vtgate/queries/reference/reference_test.go
index 08e9cbe13b1..ce942833729 100644
--- a/go/test/endtoend/vtgate/queries/reference/reference_test.go
+++ b/go/test/endtoend/vtgate/queries/reference/reference_test.go
@@ -24,8 +24,6 @@ import (
"vitess.io/vitess/go/mysql"
"vitess.io/vitess/go/test/endtoend/utils"
-
- "vitess.io/vitess/go/test/endtoend/cluster"
)
func start(t *testing.T) (*mysql.Conn, func()) {
@@ -35,7 +33,6 @@ func start(t *testing.T) (*mysql.Conn, func()) {
return vtConn, func() {
vtConn.Close()
- cluster.PanicHandler(t)
}
}
@@ -171,3 +168,12 @@ func TestMultiReferenceQuery(t *testing.T) {
utils.Exec(t, conn, query)
}
+
+func TestDMLReferenceUsingShardedKS(t *testing.T) {
+ utils.SkipIfBinaryIsBelowVersion(t, 22, "vtgate")
+ conn, closer := start(t)
+ defer closer()
+
+ utils.Exec(t, conn, "use sks")
+ utils.Exec(t, conn, "update zip_detail set zip_id = 1 where id = 1")
+}
diff --git a/go/test/endtoend/vtgate/queries/subquery/main_test.go b/go/test/endtoend/vtgate/queries/subquery/main_test.go
index 9eaf3b4caa0..bc8580bd38d 100644
--- a/go/test/endtoend/vtgate/queries/subquery/main_test.go
+++ b/go/test/endtoend/vtgate/queries/subquery/main_test.go
@@ -44,7 +44,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/queries/subquery/subquery_test.go b/go/test/endtoend/vtgate/queries/subquery/subquery_test.go
index 74af6634198..135b86195a5 100644
--- a/go/test/endtoend/vtgate/queries/subquery/subquery_test.go
+++ b/go/test/endtoend/vtgate/queries/subquery/subquery_test.go
@@ -25,7 +25,6 @@ import (
"vitess.io/vitess/go/sqltypes"
- "vitess.io/vitess/go/test/endtoend/cluster"
"vitess.io/vitess/go/test/endtoend/utils"
)
@@ -47,7 +46,6 @@ func start(t *testing.T) (utils.MySQLCompare, func()) {
return mcmp, func() {
deleteAll()
mcmp.Close()
- cluster.PanicHandler(t)
}
}
@@ -189,7 +187,7 @@ func TestSubqueryInDerivedTable(t *testing.T) {
}
func TestSubqueries(t *testing.T) {
- // This method tests many types of subqueries. The queries should move to a vitess-tester test file once we have a way to run them.
+ // This method tests many types of subqueries. The queries should move to a vt tester test file once we have a way to run them.
// The commented out queries are failing because of wrong types being returned.
// The tests are commented out until the issue is fixed.
mcmp, closer := start(t)
diff --git a/go/test/endtoend/vtgate/queries/timeout/main_test.go b/go/test/endtoend/vtgate/queries/timeout/main_test.go
index 06e8a786469..81fcfb26095 100644
--- a/go/test/endtoend/vtgate/queries/timeout/main_test.go
+++ b/go/test/endtoend/vtgate/queries/timeout/main_test.go
@@ -48,7 +48,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/queries/timeout/timeout_test.go b/go/test/endtoend/vtgate/queries/timeout/timeout_test.go
index 565c3c07a4f..d1d718add25 100644
--- a/go/test/endtoend/vtgate/queries/timeout/timeout_test.go
+++ b/go/test/endtoend/vtgate/queries/timeout/timeout_test.go
@@ -25,7 +25,6 @@ import (
"github.com/stretchr/testify/require"
"vitess.io/vitess/go/mysql"
- "vitess.io/vitess/go/test/endtoend/cluster"
"vitess.io/vitess/go/test/endtoend/utils"
)
@@ -45,7 +44,6 @@ func start(t *testing.T) (utils.MySQLCompare, func()) {
return mcmp, func() {
deleteAll()
mcmp.Close()
- cluster.PanicHandler(t)
}
}
diff --git a/go/test/endtoend/vtgate/queries/tpch/main_test.go b/go/test/endtoend/vtgate/queries/tpch/main_test.go
index 103adb336ab..403ddd510ce 100644
--- a/go/test/endtoend/vtgate/queries/tpch/main_test.go
+++ b/go/test/endtoend/vtgate/queries/tpch/main_test.go
@@ -43,7 +43,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/queries/tpch/tpch_test.go b/go/test/endtoend/vtgate/queries/tpch/tpch_test.go
index c4bf71cafa1..efa322a5e1c 100644
--- a/go/test/endtoend/vtgate/queries/tpch/tpch_test.go
+++ b/go/test/endtoend/vtgate/queries/tpch/tpch_test.go
@@ -21,7 +21,6 @@ import (
"github.com/stretchr/testify/require"
- "vitess.io/vitess/go/test/endtoend/cluster"
"vitess.io/vitess/go/test/endtoend/utils"
)
@@ -43,7 +42,6 @@ func start(t *testing.T) (utils.MySQLCompare, func()) {
return mcmp, func() {
deleteAll()
mcmp.Close()
- cluster.PanicHandler(t)
}
}
diff --git a/go/test/endtoend/vtgate/queries/union/main_test.go b/go/test/endtoend/vtgate/queries/union/main_test.go
index 06ec07a6c2f..a5f45f84156 100644
--- a/go/test/endtoend/vtgate/queries/union/main_test.go
+++ b/go/test/endtoend/vtgate/queries/union/main_test.go
@@ -43,7 +43,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/queries/union/union_test.go b/go/test/endtoend/vtgate/queries/union/union_test.go
index 03f98950f44..26371af3c87 100644
--- a/go/test/endtoend/vtgate/queries/union/union_test.go
+++ b/go/test/endtoend/vtgate/queries/union/union_test.go
@@ -19,7 +19,6 @@ package union
import (
"testing"
- "vitess.io/vitess/go/test/endtoend/cluster"
"vitess.io/vitess/go/test/endtoend/utils"
"github.com/stretchr/testify/assert"
@@ -44,7 +43,6 @@ func start(t *testing.T) (utils.MySQLCompare, func()) {
return mcmp, func() {
deleteAll()
mcmp.Close()
- cluster.PanicHandler(t)
}
}
diff --git a/go/test/endtoend/vtgate/queries/vexplain/main_test.go b/go/test/endtoend/vtgate/queries/vexplain/main_test.go
index c1c401bc573..96b6a1c41d1 100644
--- a/go/test/endtoend/vtgate/queries/vexplain/main_test.go
+++ b/go/test/endtoend/vtgate/queries/vexplain/main_test.go
@@ -43,7 +43,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/queries/vexplain/vexplain_test.go b/go/test/endtoend/vtgate/queries/vexplain/vexplain_test.go
index ed43d57b578..1a8ec2b4c37 100644
--- a/go/test/endtoend/vtgate/queries/vexplain/vexplain_test.go
+++ b/go/test/endtoend/vtgate/queries/vexplain/vexplain_test.go
@@ -18,12 +18,12 @@ package vexplain
import (
"context"
+ "fmt"
"testing"
"github.com/stretchr/testify/require"
"vitess.io/vitess/go/sqltypes"
- "vitess.io/vitess/go/test/endtoend/cluster"
"vitess.io/vitess/go/mysql"
"vitess.io/vitess/go/test/endtoend/utils"
@@ -48,7 +48,6 @@ func start(t *testing.T) (*mysql.Conn, func()) {
return vtConn, func() {
deleteAll()
vtConn.Close()
- cluster.PanicHandler(t)
}
}
@@ -75,24 +74,29 @@ func TestVtGateVExplain(t *testing.T) {
`vexplain queries insert into user (id,lookup,lookup_unique) values (4,'apa','foo'),(5,'apa','bar'),(6,'monkey','nobar')`,
"vexplain queries/all will actually run queries")
- expected := `[
+ binaryPrefix := ""
+ if utils.BinaryIsAtLeastAtVersion(22, "vtgate") {
+ binaryPrefix = "_binary"
+ }
+
+ expected := fmt.Sprintf(`[
[VARCHAR("ks") VARCHAR("-40") VARCHAR("begin")]
- [VARCHAR("ks") VARCHAR("-40") VARCHAR("insert into lookup(lookup, id, keyspace_id) values ('apa', 1, '\x16k@\xb4J\xbaK\xd6') on duplicate key update lookup = values(lookup), id = values(id), keyspace_id = values(keyspace_id)")]
+ [VARCHAR("ks") VARCHAR("-40") VARCHAR("insert into lookup(lookup, id, keyspace_id) values ('apa', 1, %s'\x16k@\xb4J\xbaK\xd6') on duplicate key update lookup = values(lookup), id = values(id), keyspace_id = values(keyspace_id)")]
[VARCHAR("ks") VARCHAR("40-80") VARCHAR("begin")]
- [VARCHAR("ks") VARCHAR("40-80") VARCHAR("insert into lookup(lookup, id, keyspace_id) values ('monkey', 3, 'N\xb1\x90ɢ\xfa\x16\x9c') on duplicate key update lookup = values(lookup), id = values(id), keyspace_id = values(keyspace_id)")]
+ [VARCHAR("ks") VARCHAR("40-80") VARCHAR("insert into lookup(lookup, id, keyspace_id) values ('monkey', 3, %s'N\xb1\x90ɢ\xfa\x16\x9c') on duplicate key update lookup = values(lookup), id = values(id), keyspace_id = values(keyspace_id)")]
[VARCHAR("ks") VARCHAR("-40") VARCHAR("commit")]
[VARCHAR("ks") VARCHAR("40-80") VARCHAR("commit")]
[VARCHAR("ks") VARCHAR("40-80") VARCHAR("begin")]
- [VARCHAR("ks") VARCHAR("40-80") VARCHAR("insert into lookup_unique(lookup_unique, keyspace_id) values ('monkey', 'N\xb1\x90ɢ\xfa\x16\x9c')")]
+ [VARCHAR("ks") VARCHAR("40-80") VARCHAR("insert into lookup_unique(lookup_unique, keyspace_id) values ('monkey', %s'N\xb1\x90ɢ\xfa\x16\x9c')")]
[VARCHAR("ks") VARCHAR("-40") VARCHAR("begin")]
- [VARCHAR("ks") VARCHAR("-40") VARCHAR("insert into lookup_unique(lookup_unique, keyspace_id) values ('apa', '\x16k@\xb4J\xbaK\xd6')")]
+ [VARCHAR("ks") VARCHAR("-40") VARCHAR("insert into lookup_unique(lookup_unique, keyspace_id) values ('apa', %s'\x16k@\xb4J\xbaK\xd6')")]
[VARCHAR("ks") VARCHAR("40-80") VARCHAR("commit")]
[VARCHAR("ks") VARCHAR("-40") VARCHAR("commit")]
[VARCHAR("ks") VARCHAR("40-80") VARCHAR("begin")]
- [VARCHAR("ks") VARCHAR("40-80") VARCHAR("insert into ` + "`user`" + `(id, lookup, lookup_unique) values (3, 'monkey', 'monkey')")]
+ [VARCHAR("ks") VARCHAR("40-80") VARCHAR("insert into `+"`user`"+`(id, lookup, lookup_unique) values (3, 'monkey', 'monkey')")]
[VARCHAR("ks") VARCHAR("-40") VARCHAR("begin")]
- [VARCHAR("ks") VARCHAR("-40") VARCHAR("insert into ` + "`user`" + `(id, lookup, lookup_unique) values (1, 'apa', 'apa')")]
- ]`
+ [VARCHAR("ks") VARCHAR("-40") VARCHAR("insert into `+"`user`"+`(id, lookup, lookup_unique) values (1, 'apa', 'apa')")]
+ ]`, binaryPrefix, binaryPrefix, binaryPrefix, binaryPrefix)
assertVExplainEquals(t, conn, `vexplain /*vt+ EXECUTE_DML_QUERIES */ queries insert into user (id,lookup,lookup_unique) values (1,'apa','apa'),(3,'monkey','monkey')`, expected)
// Assert that the output of vexplain all doesn't have begin queries because they aren't explainable
@@ -109,27 +113,27 @@ func TestVtGateVExplain(t *testing.T) {
// transaction explicitly started to no commit in the end.
utils.Exec(t, conn, "begin")
- expected = `[
+ expected = fmt.Sprintf(`[
[VARCHAR("ks") VARCHAR("-40") VARCHAR("begin")]
- [VARCHAR("ks") VARCHAR("-40") VARCHAR("insert into lookup(lookup, id, keyspace_id) values ('apa', 4, '\xd2\xfd\x88g\xd5\\r-\xfe'), ('apa', 5, 'p\xbb\x02<\x81\f\xa8z') on duplicate key update lookup = values(lookup), id = values(id), keyspace_id = values(keyspace_id)")]
+ [VARCHAR("ks") VARCHAR("-40") VARCHAR("insert into lookup(lookup, id, keyspace_id) values ('apa', 4, %s'\xd2\xfd\x88g\xd5\\r-\xfe'), ('apa', 5, %s'p\xbb\x02<\x81\f\xa8z') on duplicate key update lookup = values(lookup), id = values(id), keyspace_id = values(keyspace_id)")]
[VARCHAR("ks") VARCHAR("40-80") VARCHAR("begin")]
- [VARCHAR("ks") VARCHAR("40-80") VARCHAR("insert into lookup(lookup, id, keyspace_id) values ('monkey', 6, '\xf0\x98H\\n\xc4ľq') on duplicate key update lookup = values(lookup), id = values(id), keyspace_id = values(keyspace_id)")]
+ [VARCHAR("ks") VARCHAR("40-80") VARCHAR("insert into lookup(lookup, id, keyspace_id) values ('monkey', 6, %s'\xf0\x98H\\n\xc4ľq') on duplicate key update lookup = values(lookup), id = values(id), keyspace_id = values(keyspace_id)")]
[VARCHAR("ks") VARCHAR("-40") VARCHAR("commit")]
[VARCHAR("ks") VARCHAR("40-80") VARCHAR("commit")]
[VARCHAR("ks") VARCHAR("-40") VARCHAR("begin")]
- [VARCHAR("ks") VARCHAR("-40") VARCHAR("insert into lookup_unique(lookup_unique, keyspace_id) values ('foo', '\xd2\xfd\x88g\xd5\\r-\xfe')")]
+ [VARCHAR("ks") VARCHAR("-40") VARCHAR("insert into lookup_unique(lookup_unique, keyspace_id) values ('foo', %s'\xd2\xfd\x88g\xd5\\r-\xfe')")]
[VARCHAR("ks") VARCHAR("80-c0") VARCHAR("begin")]
- [VARCHAR("ks") VARCHAR("80-c0") VARCHAR("insert into lookup_unique(lookup_unique, keyspace_id) values ('bar', 'p\xbb\x02<\x81\f\xa8z')")]
+ [VARCHAR("ks") VARCHAR("80-c0") VARCHAR("insert into lookup_unique(lookup_unique, keyspace_id) values ('bar', %s'p\xbb\x02<\x81\f\xa8z')")]
[VARCHAR("ks") VARCHAR("c0-") VARCHAR("begin")]
- [VARCHAR("ks") VARCHAR("c0-") VARCHAR("insert into lookup_unique(lookup_unique, keyspace_id) values ('nobar', '\xf0\x98H\\n\xc4ľq')")]
+ [VARCHAR("ks") VARCHAR("c0-") VARCHAR("insert into lookup_unique(lookup_unique, keyspace_id) values ('nobar', %s'\xf0\x98H\\n\xc4ľq')")]
[VARCHAR("ks") VARCHAR("-40") VARCHAR("commit")]
[VARCHAR("ks") VARCHAR("80-c0") VARCHAR("commit")]
[VARCHAR("ks") VARCHAR("c0-") VARCHAR("commit")]
[VARCHAR("ks") VARCHAR("40-80") VARCHAR("begin")]
- [VARCHAR("ks") VARCHAR("40-80") VARCHAR("insert into ` + "`user`" + `(id, lookup, lookup_unique) values (5, 'apa', 'bar')")]
+ [VARCHAR("ks") VARCHAR("40-80") VARCHAR("insert into `+"`user`"+`(id, lookup, lookup_unique) values (5, 'apa', 'bar')")]
[VARCHAR("ks") VARCHAR("c0-") VARCHAR("begin")]
- [VARCHAR("ks") VARCHAR("c0-") VARCHAR("insert into ` + "`user`" + `(id, lookup, lookup_unique) values (4, 'apa', 'foo'), (6, 'monkey', 'nobar')")]
- ]`
+ [VARCHAR("ks") VARCHAR("c0-") VARCHAR("insert into `+"`user`"+`(id, lookup, lookup_unique) values (4, 'apa', 'foo'), (6, 'monkey', 'nobar')")]
+ ]`, binaryPrefix, binaryPrefix, binaryPrefix, binaryPrefix, binaryPrefix, binaryPrefix)
assertVExplainEquals(t, conn, `vexplain /*vt+ EXECUTE_DML_QUERIES */ queries insert into user (id,lookup,lookup_unique) values (4,'apa','foo'),(5,'apa','bar'),(6,'monkey','nobar')`, expected)
utils.Exec(t, conn, "rollback")
diff --git a/go/test/endtoend/vtgate/readafterwrite/raw_test.go b/go/test/endtoend/vtgate/readafterwrite/raw_test.go
index 0549a9b06b0..ce6db45d24e 100644
--- a/go/test/endtoend/vtgate/readafterwrite/raw_test.go
+++ b/go/test/endtoend/vtgate/readafterwrite/raw_test.go
@@ -100,7 +100,6 @@ CREATE TABLE test_vdx (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -143,7 +142,6 @@ func TestMain(m *testing.M) {
}
func TestRAWSettings(t *testing.T) {
- defer cluster.PanicHandler(t)
conn, err := mysql.Connect(context.Background(), &vtParams)
require.NoError(t, err)
defer conn.Close()
diff --git a/go/test/endtoend/vtgate/reservedconn/main_test.go b/go/test/endtoend/vtgate/reservedconn/main_test.go
index 8c0278604f7..00f569d9eb9 100644
--- a/go/test/endtoend/vtgate/reservedconn/main_test.go
+++ b/go/test/endtoend/vtgate/reservedconn/main_test.go
@@ -101,7 +101,6 @@ CREATE TABLE test_vdx (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/reservedconn/reconnect1/main_test.go b/go/test/endtoend/vtgate/reservedconn/reconnect1/main_test.go
index 9a4d7c50dbd..3280d64d433 100644
--- a/go/test/endtoend/vtgate/reservedconn/reconnect1/main_test.go
+++ b/go/test/endtoend/vtgate/reservedconn/reconnect1/main_test.go
@@ -63,7 +63,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/reservedconn/reconnect2/main_test.go b/go/test/endtoend/vtgate/reservedconn/reconnect2/main_test.go
index 915d76051a4..81bb6b90ee5 100644
--- a/go/test/endtoend/vtgate/reservedconn/reconnect2/main_test.go
+++ b/go/test/endtoend/vtgate/reservedconn/reconnect2/main_test.go
@@ -64,7 +64,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/reservedconn/reconnect3/main_test.go b/go/test/endtoend/vtgate/reservedconn/reconnect3/main_test.go
index 20d255941db..decf2f0dfdd 100644
--- a/go/test/endtoend/vtgate/reservedconn/reconnect3/main_test.go
+++ b/go/test/endtoend/vtgate/reservedconn/reconnect3/main_test.go
@@ -40,7 +40,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/reservedconn/reconnect4/main_test.go b/go/test/endtoend/vtgate/reservedconn/reconnect4/main_test.go
index d4a61665a6d..320cbc87172 100644
--- a/go/test/endtoend/vtgate/reservedconn/reconnect4/main_test.go
+++ b/go/test/endtoend/vtgate/reservedconn/reconnect4/main_test.go
@@ -40,7 +40,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/reservedconn/sysvar_test.go b/go/test/endtoend/vtgate/reservedconn/sysvar_test.go
index e7e0cfb0259..8bda7dea121 100644
--- a/go/test/endtoend/vtgate/reservedconn/sysvar_test.go
+++ b/go/test/endtoend/vtgate/reservedconn/sysvar_test.go
@@ -29,11 +29,9 @@ import (
"github.com/stretchr/testify/require"
"vitess.io/vitess/go/mysql"
- "vitess.io/vitess/go/test/endtoend/cluster"
)
func TestSetSysVarSingle(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
type queriesWithExpectations struct {
name, expr string
diff --git a/go/test/endtoend/vtgate/reservedconn/udv_test.go b/go/test/endtoend/vtgate/reservedconn/udv_test.go
index 55f4c54c612..14b65dbcd35 100644
--- a/go/test/endtoend/vtgate/reservedconn/udv_test.go
+++ b/go/test/endtoend/vtgate/reservedconn/udv_test.go
@@ -31,11 +31,9 @@ import (
"github.com/stretchr/testify/require"
"vitess.io/vitess/go/mysql"
- "vitess.io/vitess/go/test/endtoend/cluster"
)
func TestSetUDV(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
type queriesWithExpectations struct {
@@ -123,7 +121,6 @@ func TestSetUDV(t *testing.T) {
}
func TestMysqlDumpInitialLog(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
diff --git a/go/test/endtoend/vtgate/schema.sql b/go/test/endtoend/vtgate/schema.sql
index 4c9ed46fe9a..8e7eed0b594 100644
--- a/go/test/endtoend/vtgate/schema.sql
+++ b/go/test/endtoend/vtgate/schema.sql
@@ -164,4 +164,4 @@ create table t11
col2 int,
col3 int,
primary key (id)
-) Engine = InnoDB;
\ No newline at end of file
+) Engine = InnoDB;
diff --git a/go/test/endtoend/vtgate/schema/schema_test.go b/go/test/endtoend/vtgate/schema/schema_test.go
index 6b2e8ef7e61..4c28e29ca0d 100644
--- a/go/test/endtoend/vtgate/schema/schema_test.go
+++ b/go/test/endtoend/vtgate/schema/schema_test.go
@@ -55,7 +55,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitcode, err := func() (int, error) {
@@ -101,7 +100,6 @@ func TestMain(m *testing.M) {
}
func TestSchemaChange(t *testing.T) {
- defer cluster.PanicHandler(t)
testWithInitialSchema(t)
testWithAlterSchema(t)
testWithAlterDatabase(t)
diff --git a/go/test/endtoend/vtgate/schematracker/loadkeyspace/schema_load_keyspace_test.go b/go/test/endtoend/vtgate/schematracker/loadkeyspace/schema_load_keyspace_test.go
index 9586206221e..ec201487887 100644
--- a/go/test/endtoend/vtgate/schematracker/loadkeyspace/schema_load_keyspace_test.go
+++ b/go/test/endtoend/vtgate/schematracker/loadkeyspace/schema_load_keyspace_test.go
@@ -57,7 +57,6 @@ var (
)
func TestLoadKeyspaceWithNoTablet(t *testing.T) {
- defer cluster.PanicHandler(t)
var err error
clusterInstance = cluster.NewCluster(cell, hostname)
@@ -100,7 +99,6 @@ func TestLoadKeyspaceWithNoTablet(t *testing.T) {
}
func TestNoInitialKeyspace(t *testing.T) {
- defer cluster.PanicHandler(t)
var err error
clusterInstance = cluster.NewCluster(cell, hostname)
diff --git a/go/test/endtoend/vtgate/schematracker/restarttablet/schema_restart_test.go b/go/test/endtoend/vtgate/schematracker/restarttablet/schema_restart_test.go
index 3bb4f6dfd9f..1943fefa9d7 100644
--- a/go/test/endtoend/vtgate/schematracker/restarttablet/schema_restart_test.go
+++ b/go/test/endtoend/vtgate/schematracker/restarttablet/schema_restart_test.go
@@ -64,7 +64,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitcode := func() int {
@@ -116,7 +115,6 @@ func TestMain(m *testing.M) {
}
func TestVSchemaTrackerInit(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
require.NoError(t, err)
@@ -137,7 +135,6 @@ func TestVSchemaTrackerInit(t *testing.T) {
// properly handles primary tablet restarts -- meaning that we maintain
// the exact same vschema state as before the restart.
func TestVSchemaTrackerKeyspaceReInit(t *testing.T) {
- defer cluster.PanicHandler(t)
primaryTablet := clusterInstance.Keyspaces[0].Shards[0].PrimaryTablet()
diff --git a/go/test/endtoend/vtgate/schematracker/sharded/st_sharded_test.go b/go/test/endtoend/vtgate/schematracker/sharded/st_sharded_test.go
index 50042f3142a..5f82bd5d71a 100644
--- a/go/test/endtoend/vtgate/schematracker/sharded/st_sharded_test.go
+++ b/go/test/endtoend/vtgate/schematracker/sharded/st_sharded_test.go
@@ -48,7 +48,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -161,7 +160,6 @@ func TestNewTable(t *testing.T) {
}
func TestAmbiguousColumnJoin(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
require.NoError(t, err)
diff --git a/go/test/endtoend/vtgate/schematracker/sharded_prs/st_sharded_test.go b/go/test/endtoend/vtgate/schematracker/sharded_prs/st_sharded_test.go
index 09bd97eb9fe..6fbd3f3d33c 100644
--- a/go/test/endtoend/vtgate/schematracker/sharded_prs/st_sharded_test.go
+++ b/go/test/endtoend/vtgate/schematracker/sharded_prs/st_sharded_test.go
@@ -122,7 +122,6 @@ create table t8(
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -208,7 +207,6 @@ func TestMain(m *testing.M) {
}
func TestAddColumn(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
require.NoError(t, err)
diff --git a/go/test/endtoend/vtgate/schematracker/unsharded/st_unsharded_test.go b/go/test/endtoend/vtgate/schematracker/unsharded/st_unsharded_test.go
index 5ecf89a5db7..4256727915d 100644
--- a/go/test/endtoend/vtgate/schematracker/unsharded/st_unsharded_test.go
+++ b/go/test/endtoend/vtgate/schematracker/unsharded/st_unsharded_test.go
@@ -49,7 +49,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -112,7 +111,6 @@ func TestMain(m *testing.M) {
}
func TestNewUnshardedTable(t *testing.T) {
- defer cluster.PanicHandler(t)
// create a sql connection
ctx := context.Background()
@@ -182,7 +180,6 @@ func TestNewUnshardedTable(t *testing.T) {
// creating two tables having the same name differing only in casing, but other operating systems don't.
// More information at https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html#:~:text=Table%20names%20are%20stored%20in,lowercase%20on%20storage%20and%20lookup.
func TestCaseSensitiveSchemaTracking(t *testing.T) {
- defer cluster.PanicHandler(t)
// create a sql connection
ctx := context.Background()
diff --git a/go/test/endtoend/vtgate/sec_vind/main_test.go b/go/test/endtoend/vtgate/sec_vind/main_test.go
index 7aa5df76a83..7ec0d5c0682 100644
--- a/go/test/endtoend/vtgate/sec_vind/main_test.go
+++ b/go/test/endtoend/vtgate/sec_vind/main_test.go
@@ -44,7 +44,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -101,7 +100,6 @@ func start(t *testing.T) (*mysql.Conn, func()) {
return conn, func() {
deleteAll()
conn.Close()
- cluster.PanicHandler(t)
}
}
diff --git a/go/test/endtoend/vtgate/sequence/seq_test.go b/go/test/endtoend/vtgate/sequence/seq_test.go
index 1bda37094b2..0fc1c810eb3 100644
--- a/go/test/endtoend/vtgate/sequence/seq_test.go
+++ b/go/test/endtoend/vtgate/sequence/seq_test.go
@@ -174,7 +174,6 @@ CREATE TABLE allDefaults (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -216,7 +215,6 @@ func TestMain(m *testing.M) {
}
func TestSeq(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtParams := mysql.ConnParams{
Host: "localhost",
@@ -274,7 +272,6 @@ func TestSeq(t *testing.T) {
}
func TestDotTableSeq(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtParams := mysql.ConnParams{
Host: "localhost",
@@ -297,7 +294,6 @@ func TestDotTableSeq(t *testing.T) {
}
func TestInsertAllDefaults(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtParams := mysql.ConnParams{
Host: "localhost",
diff --git a/go/test/endtoend/vtgate/tablet_healthcheck/reparent_test.go b/go/test/endtoend/vtgate/tablet_healthcheck/reparent_test.go
index d6357ce8f2a..77e9a58cf69 100644
--- a/go/test/endtoend/vtgate/tablet_healthcheck/reparent_test.go
+++ b/go/test/endtoend/vtgate/tablet_healthcheck/reparent_test.go
@@ -89,7 +89,6 @@ create table corder(
// TestMain sets up the vitess cluster for any subsequent tests
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/tablet_healthcheck_cache/correctness_test.go b/go/test/endtoend/vtgate/tablet_healthcheck_cache/correctness_test.go
index 50529d9fdf9..3457a2cab3c 100644
--- a/go/test/endtoend/vtgate/tablet_healthcheck_cache/correctness_test.go
+++ b/go/test/endtoend/vtgate/tablet_healthcheck_cache/correctness_test.go
@@ -86,7 +86,6 @@ create table corder(
// TestMain sets up the vitess cluster for any subsequent tests
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
diff --git a/go/test/endtoend/vtgate/unsharded/main_test.go b/go/test/endtoend/vtgate/unsharded/main_test.go
index e1818735ed1..307bb7fcf23 100644
--- a/go/test/endtoend/vtgate/unsharded/main_test.go
+++ b/go/test/endtoend/vtgate/unsharded/main_test.go
@@ -147,7 +147,6 @@ END;
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -192,7 +191,6 @@ func TestMain(m *testing.M) {
func TestSelectIntoAndLoadFrom(t *testing.T) {
// Test is skipped because it requires secure-file-priv variable to be set to not NULL or empty.
t.Skip()
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtParams := mysql.ConnParams{
Host: "localhost",
@@ -227,7 +225,6 @@ func TestSelectIntoAndLoadFrom(t *testing.T) {
}
func TestEmptyStatement(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtParams := mysql.ConnParams{
Host: "localhost",
@@ -244,7 +241,6 @@ func TestEmptyStatement(t *testing.T) {
}
func TestTopoDownServingQuery(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtParams := mysql.ConnParams{
Host: "localhost",
@@ -264,7 +260,6 @@ func TestTopoDownServingQuery(t *testing.T) {
}
func TestInsertAllDefaults(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtParams := mysql.ConnParams{
Host: "localhost",
@@ -279,7 +274,6 @@ func TestInsertAllDefaults(t *testing.T) {
}
func TestDDLUnsharded(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtParams := mysql.ConnParams{
Host: "localhost",
@@ -300,7 +294,6 @@ func TestDDLUnsharded(t *testing.T) {
}
func TestCallProcedure(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtParams := mysql.ConnParams{
Host: "localhost",
@@ -347,7 +340,6 @@ func TestCallProcedure(t *testing.T) {
}
func TestTempTable(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtParams := mysql.ConnParams{
Host: "localhost",
@@ -372,7 +364,6 @@ func TestTempTable(t *testing.T) {
}
func TestReservedConnDML(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtParams := mysql.ConnParams{
Host: "localhost",
@@ -395,7 +386,6 @@ func TestReservedConnDML(t *testing.T) {
}
func TestNumericPrecisionScale(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
vtParams := mysql.ConnParams{
Host: "localhost",
diff --git a/go/test/endtoend/vtgate/vindex_bindvars/main_test.go b/go/test/endtoend/vtgate/vindex_bindvars/main_test.go
index 3251668e155..84c2c825784 100644
--- a/go/test/endtoend/vtgate/vindex_bindvars/main_test.go
+++ b/go/test/endtoend/vtgate/vindex_bindvars/main_test.go
@@ -265,7 +265,6 @@ CREATE TABLE thex (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitCode := func() int {
@@ -304,7 +303,6 @@ func TestMain(m *testing.M) {
}
func TestVindexHexTypes(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
require.Nil(t, err)
@@ -326,7 +324,6 @@ func TestVindexHexTypes(t *testing.T) {
}
func TestVindexBindVarOverlap(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
require.Nil(t, err)
diff --git a/go/test/endtoend/vtgate/vitess_tester/aggregation/aggregation.test b/go/test/endtoend/vtgate/vitess_tester/aggregation/aggregation.test
index f4c82933d91..8b0997eed1a 100644
--- a/go/test/endtoend/vtgate/vitess_tester/aggregation/aggregation.test
+++ b/go/test/endtoend/vtgate/vitess_tester/aggregation/aggregation.test
@@ -61,4 +61,7 @@ from (select 1 as one
select u.id, u.t1_id, t.num_segments
from (select id, count(*) as num_segments from t1 group by 1 order by 2 desc limit 20) t
- join t2 u on u.id = t.id;
\ No newline at end of file
+ join t2 u on u.id = t.id;
+
+select name
+from (select name from t1 group by name having count(t1.id) > 1) t1;
\ No newline at end of file
diff --git a/go/test/endtoend/vtgate/vitess_tester/cte/queries.test b/go/test/endtoend/vtgate/vitess_tester/cte/queries.test
index 173dcaeb6ba..d4aa8b27ab5 100644
--- a/go/test/endtoend/vtgate/vitess_tester/cte/queries.test
+++ b/go/test/endtoend/vtgate/vitess_tester/cte/queries.test
@@ -30,6 +30,15 @@ WITH RECURSIVE numbers AS (SELECT 1 AS n
SELECT *
FROM numbers;
+# Simple recursive CTE using literal values, column named in the CTE def
+WITH RECURSIVE numbers(n) AS (SELECT 1
+ UNION ALL
+ SELECT n + 1
+ FROM numbers
+ WHERE n < 5)
+SELECT *
+FROM numbers;
+
# Recursive CTE joined with a normal table
WITH RECURSIVE emp_cte AS (SELECT id, name, manager_id
FROM employees
diff --git a/go/test/endtoend/vtgate/vitess_tester/expressions/expressions.test b/go/test/endtoend/vtgate/vitess_tester/expressions/expressions.test
new file mode 100644
index 00000000000..60c1e641463
--- /dev/null
+++ b/go/test/endtoend/vtgate/vitess_tester/expressions/expressions.test
@@ -0,0 +1,30 @@
+# This file contains queries that test expressions in Vitess.
+# We've found a number of bugs around precedences that we want to test.
+CREATE TABLE t0
+(
+ c1 BIT,
+ INDEX idx_c1 (c1)
+);
+
+INSERT INTO t0(c1)
+VALUES ('');
+
+
+SELECT *
+FROM t0;
+
+SELECT ((t0.c1 = 'a'))
+FROM t0;
+
+SELECT *
+FROM t0
+WHERE ((t0.c1 = 'a'));
+
+
+SELECT (1 LIKE ('a' IS NULL));
+SELECT (NOT (1 LIKE ('a' IS NULL)));
+
+SELECT (~ (1 || 0)) IS NULL;
+
+SELECT 1
+WHERE (~ (1 || 0)) IS NULL;
diff --git a/go/test/endtoend/vtgate/vschema/vschema_test.go b/go/test/endtoend/vtgate/vschema/vschema_test.go
index eec54f8f47f..5cd01449b71 100644
--- a/go/test/endtoend/vtgate/vschema/vschema_test.go
+++ b/go/test/endtoend/vtgate/vschema/vschema_test.go
@@ -18,21 +18,25 @@ package vschema
import (
"context"
+ "encoding/json"
"flag"
"fmt"
"os"
+ "path"
"testing"
+ "time"
- "vitess.io/vitess/go/test/endtoend/utils"
-
+ "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"vitess.io/vitess/go/mysql"
"vitess.io/vitess/go/test/endtoend/cluster"
+ "vitess.io/vitess/go/test/endtoend/utils"
)
var (
clusterInstance *cluster.LocalProcessCluster
+ configFile string
vtParams mysql.ConnParams
hostname = "localhost"
keyspaceName = "ks"
@@ -53,7 +57,6 @@ var (
)
func TestMain(m *testing.M) {
- defer cluster.PanicHandler(nil)
flag.Parse()
exitcode, err := func() (int, error) {
@@ -66,7 +69,21 @@ func TestMain(m *testing.M) {
}
// List of users authorized to execute vschema ddl operations
- clusterInstance.VtGateExtraArgs = []string{"--vschema_ddl_authorized_users=%", "--schema_change_signal=false"}
+ if utils.BinaryIsAtLeastAtVersion(22, "vtgate") {
+ timeNow := time.Now().Unix()
+ configFile = path.Join(os.TempDir(), fmt.Sprintf("vtgate-config-%d.json", timeNow))
+ err := writeConfig(configFile, map[string]string{
+ "vschema_ddl_authorized_users": "%",
+ })
+ if err != nil {
+ return 1, err
+ }
+ defer os.Remove(configFile)
+
+ clusterInstance.VtGateExtraArgs = []string{fmt.Sprintf("--config-file=%s", configFile), "--schema_change_signal=false"}
+ } else {
+ clusterInstance.VtGateExtraArgs = []string{"--vschema_ddl_authorized_users=%", "--schema_change_signal=false"}
+ }
// Start keyspace
keyspace := &cluster.Keyspace{
@@ -96,8 +113,16 @@ func TestMain(m *testing.M) {
}
+func writeConfig(path string, cfg map[string]string) error {
+ file, err := os.Create(path)
+ if err != nil {
+ return err
+ }
+ defer file.Close()
+ return json.NewEncoder(file).Encode(cfg)
+}
+
func TestVSchema(t *testing.T) {
- defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
require.NoError(t, err)
@@ -138,4 +163,15 @@ func TestVSchema(t *testing.T) {
utils.AssertMatches(t, conn, "delete from vt_user", `[]`)
+ if utils.BinaryIsAtLeastAtVersion(22, "vtgate") {
+ writeConfig(configFile, map[string]string{
+ "vschema_ddl_authorized_users": "",
+ })
+
+ require.EventuallyWithT(t, func(t *assert.CollectT) {
+ _, err = conn.ExecuteFetch("ALTER VSCHEMA DROP TABLE main", 1000, false)
+ assert.Error(t, err)
+ assert.ErrorContains(t, err, "is not authorized to perform vschema operations")
+ }, 5*time.Second, 100*time.Millisecond)
+ }
}
diff --git a/go/test/endtoend/vtorc/api/api_test.go b/go/test/endtoend/vtorc/api/api_test.go
index 174ee5ea914..3fe43fa8f8f 100644
--- a/go/test/endtoend/vtorc/api/api_test.go
+++ b/go/test/endtoend/vtorc/api/api_test.go
@@ -33,10 +33,8 @@ import (
// TestAPIEndpoints tests the various API endpoints that VTOrc offers.
func TestAPIEndpoints(t *testing.T) {
- defer cluster.PanicHandler(t)
utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 2, 1, nil, cluster.VTOrcConfiguration{
- PreventCrossDataCenterPrimaryFailover: true,
- RecoveryPeriodBlockSeconds: 5,
+ PreventCrossCellFailover: true,
}, 1, "")
keyspace := &clusterInfo.ClusterInstance.Keyspaces[0]
shard0 := &keyspace.Shards[0]
@@ -268,11 +266,13 @@ func TestAPIEndpoints(t *testing.T) {
assert.Equal(t, "Filtering by shard without keyspace isn't supported\n", resp)
// Also verify that the metric for errant GTIDs is reporting the correct count.
- waitForErrantGTIDCount(t, vtorc, 1)
+ waitForErrantGTIDTabletCount(t, vtorc, 1)
+ // Now we check the errant GTID count for the tablet
+ verifyErrantGTIDCount(t, vtorc, replica.Alias, 1)
})
}
-func waitForErrantGTIDCount(t *testing.T, vtorc *cluster.VTOrcProcess, errantGTIDCountWanted int) {
+func waitForErrantGTIDTabletCount(t *testing.T, vtorc *cluster.VTOrcProcess, errantGTIDCountWanted int) {
timeout := time.After(15 * time.Second)
for {
select {
@@ -293,3 +293,12 @@ func waitForErrantGTIDCount(t *testing.T, vtorc *cluster.VTOrcProcess, errantGTI
}
}
}
+
+func verifyErrantGTIDCount(t *testing.T, vtorc *cluster.VTOrcProcess, tabletAlias string, countWanted int) {
+ vars := vtorc.GetVars()
+ errantGTIDCounts := vars["CurrentErrantGTIDCount"].(map[string]interface{})
+ gtidCountVal, isPresent := errantGTIDCounts[tabletAlias]
+ require.True(t, isPresent, "Tablet %s not found in errant GTID counts", tabletAlias)
+ gtidCount := utils.GetIntFromValue(gtidCountVal)
+ require.EqualValues(t, countWanted, gtidCount, "Tablet %s has %d errant GTIDs, wanted %d", tabletAlias, gtidCount, countWanted)
+}
diff --git a/go/test/endtoend/vtorc/api/config_test.go b/go/test/endtoend/vtorc/api/config_test.go
new file mode 100644
index 00000000000..821b0f8071e
--- /dev/null
+++ b/go/test/endtoend/vtorc/api/config_test.go
@@ -0,0 +1,203 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+package api
+
+import (
+ "strings"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+
+ "vitess.io/vitess/go/test/endtoend/cluster"
+ "vitess.io/vitess/go/test/endtoend/vtorc/utils"
+)
+
+// TestDynamicConfigs tests the dyanamic configurations that VTOrc offers.
+func TestDynamicConfigs(t *testing.T) {
+ utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 2, 1, nil, cluster.VTOrcConfiguration{}, 1, "")
+ vtorc := clusterInfo.ClusterInstance.VTOrcProcesses[0]
+
+ // Restart VTOrc without any flag overrides so that all the configurations can be tested.
+ err := vtorc.TearDown()
+ require.NoError(t, err)
+ vtorc.Config = cluster.VTOrcConfiguration{}
+ vtorc.NoOverride = true
+ err = vtorc.Setup()
+ require.NoError(t, err)
+
+ // Call API with retry to ensure VTOrc is up
+ status, resp := utils.MakeAPICallRetry(t, vtorc, "/debug/health", func(code int, response string) bool {
+ return code != 200
+ })
+ // Verify when VTOrc is healthy, it has also run the first discovery.
+ assert.Equal(t, 200, status)
+ assert.Contains(t, resp, `"Healthy": true,`)
+
+ t.Run("InstancePollTime", func(t *testing.T) {
+ // Get configuration and verify the output.
+ waitForConfig(t, vtorc, `"instance-poll-time": 5000000000`)
+ // Update configuration and verify the output.
+ vtorc.Config.InstancePollTime = "10h"
+ err := vtorc.RewriteConfiguration()
+ assert.NoError(t, err)
+ // Wait until the config has been updated and seen.
+ waitForConfig(t, vtorc, `"instance-poll-time": "10h"`)
+ })
+
+ t.Run("PreventCrossCellFailover", func(t *testing.T) {
+ // Get configuration and verify the output.
+ waitForConfig(t, vtorc, `"prevent-cross-cell-failover": false`)
+ // Update configuration and verify the output.
+ vtorc.Config.PreventCrossCellFailover = true
+ err := vtorc.RewriteConfiguration()
+ assert.NoError(t, err)
+ // Wait until the config has been updated and seen.
+ waitForConfig(t, vtorc, `"prevent-cross-cell-failover": true`)
+ })
+
+ t.Run("SnapshotTopologyInterval", func(t *testing.T) {
+ // Get configuration and verify the output.
+ waitForConfig(t, vtorc, `"snapshot-topology-interval": 0`)
+ // Update configuration and verify the output.
+ vtorc.Config.SnapshotTopologyInterval = "10h"
+ err := vtorc.RewriteConfiguration()
+ assert.NoError(t, err)
+ // Wait until the config has been updated and seen.
+ waitForConfig(t, vtorc, `"snapshot-topology-interval": "10h"`)
+ })
+
+ t.Run("ReasonableReplicationLag", func(t *testing.T) {
+ // Get configuration and verify the output.
+ waitForConfig(t, vtorc, `"reasonable-replication-lag": 10000000000`)
+ // Update configuration and verify the output.
+ vtorc.Config.ReasonableReplicationLag = "10h"
+ err := vtorc.RewriteConfiguration()
+ assert.NoError(t, err)
+ // Wait until the config has been updated and seen.
+ waitForConfig(t, vtorc, `"reasonable-replication-lag": "10h"`)
+ })
+
+ t.Run("AuditToBackend", func(t *testing.T) {
+ // Get configuration and verify the output.
+ waitForConfig(t, vtorc, `"audit-to-backend": false`)
+ // Update configuration and verify the output.
+ vtorc.Config.AuditToBackend = true
+ err := vtorc.RewriteConfiguration()
+ assert.NoError(t, err)
+ // Wait until the config has been updated and seen.
+ waitForConfig(t, vtorc, `"audit-to-backend": true`)
+ })
+
+ t.Run("AuditToSyslog", func(t *testing.T) {
+ // Get configuration and verify the output.
+ waitForConfig(t, vtorc, `"audit-to-syslog": false`)
+ // Update configuration and verify the output.
+ vtorc.Config.AuditToSyslog = true
+ err := vtorc.RewriteConfiguration()
+ assert.NoError(t, err)
+ // Wait until the config has been updated and seen.
+ waitForConfig(t, vtorc, `"audit-to-syslog": true`)
+ })
+
+ t.Run("AuditPurgeDuration", func(t *testing.T) {
+ // Get configuration and verify the output.
+ waitForConfig(t, vtorc, `"audit-purge-duration": 604800000000000`)
+ // Update configuration and verify the output.
+ vtorc.Config.AuditPurgeDuration = "10h"
+ err := vtorc.RewriteConfiguration()
+ assert.NoError(t, err)
+ // Wait until the config has been updated and seen.
+ waitForConfig(t, vtorc, `"audit-purge-duration": "10h"`)
+ })
+
+ t.Run("WaitReplicasTimeout", func(t *testing.T) {
+ // Get configuration and verify the output.
+ waitForConfig(t, vtorc, `"wait-replicas-timeout": 30000000000`)
+ // Update configuration and verify the output.
+ vtorc.Config.WaitReplicasTimeout = "10h"
+ err := vtorc.RewriteConfiguration()
+ assert.NoError(t, err)
+ // Wait until the config has been updated and seen.
+ waitForConfig(t, vtorc, `"wait-replicas-timeout": "10h"`)
+ })
+
+ t.Run("TolerableReplicationLag", func(t *testing.T) {
+ // Get configuration and verify the output.
+ waitForConfig(t, vtorc, `"tolerable-replication-lag": 0`)
+ // Update configuration and verify the output.
+ vtorc.Config.TolerableReplicationLag = "10h"
+ err := vtorc.RewriteConfiguration()
+ assert.NoError(t, err)
+ // Wait until the config has been updated and seen.
+ waitForConfig(t, vtorc, `"tolerable-replication-lag": "10h"`)
+ })
+
+ t.Run("TopoInformationRefreshDuration", func(t *testing.T) {
+ // Get configuration and verify the output.
+ waitForConfig(t, vtorc, `"topo-information-refresh-duration": 15000000000`)
+ // Update configuration and verify the output.
+ vtorc.Config.TopoInformationRefreshDuration = "10h"
+ err := vtorc.RewriteConfiguration()
+ assert.NoError(t, err)
+ // Wait until the config has been updated and seen.
+ waitForConfig(t, vtorc, `"topo-information-refresh-duration": "10h"`)
+ })
+
+ t.Run("RecoveryPollDuration", func(t *testing.T) {
+ // Get configuration and verify the output.
+ waitForConfig(t, vtorc, `"recovery-poll-duration": 1000000000`)
+ // Update configuration and verify the output.
+ vtorc.Config.RecoveryPollDuration = "10h"
+ err := vtorc.RewriteConfiguration()
+ assert.NoError(t, err)
+ // Wait until the config has been updated and seen.
+ waitForConfig(t, vtorc, `"recovery-poll-duration": "10h"`)
+ })
+
+ t.Run("AllowEmergencyReparent", func(t *testing.T) {
+ // Get configuration and verify the output.
+ waitForConfig(t, vtorc, `"allow-emergency-reparent": true`)
+ // Update configuration and verify the output.
+ vtorc.Config.AllowEmergencyReparent = "false"
+ err := vtorc.RewriteConfiguration()
+ assert.NoError(t, err)
+ // Wait until the config has been updated and seen.
+ waitForConfig(t, vtorc, `"allow-emergency-reparent": "false"`)
+ })
+
+ t.Run("ChangeTabletsWithErrantGtidToDrained", func(t *testing.T) {
+ // Get configuration and verify the output.
+ waitForConfig(t, vtorc, `"change-tablets-with-errant-gtid-to-drained": false`)
+ // Update configuration and verify the output.
+ vtorc.Config.ChangeTabletsWithErrantGtidToDrained = true
+ err := vtorc.RewriteConfiguration()
+ assert.NoError(t, err)
+ // Wait until the config has been updated and seen.
+ waitForConfig(t, vtorc, `"change-tablets-with-errant-gtid-to-drained": true`)
+ })
+}
+
+// waitForConfig waits for the expectedConfig to be present in the VTOrc configuration.
+func waitForConfig(t *testing.T, vtorc *cluster.VTOrcProcess, expectedConfig string) {
+ t.Helper()
+ status, _ := utils.MakeAPICallRetry(t, vtorc, "/api/config", func(_ int, response string) bool {
+ return !strings.Contains(response, expectedConfig)
+ })
+ require.EqualValues(t, 200, status)
+}
diff --git a/go/test/endtoend/vtorc/api/main_test.go b/go/test/endtoend/vtorc/api/main_test.go
index f89326bc856..cc3e796b293 100644
--- a/go/test/endtoend/vtorc/api/main_test.go
+++ b/go/test/endtoend/vtorc/api/main_test.go
@@ -21,7 +21,6 @@ import (
"os"
"testing"
- "vitess.io/vitess/go/test/endtoend/cluster"
"vitess.io/vitess/go/test/endtoend/vtorc/utils"
)
@@ -53,8 +52,6 @@ func TestMain(m *testing.M) {
return m.Run(), nil
}()
- cluster.PanicHandler(nil)
-
if clusterInfo != nil {
// stop vtorc first otherwise its logs get polluted
// with instances being unreachable triggering unnecessary operations
diff --git a/go/test/endtoend/vtorc/general/main_test.go b/go/test/endtoend/vtorc/general/main_test.go
index 6db0792de3a..0cd88cd378c 100644
--- a/go/test/endtoend/vtorc/general/main_test.go
+++ b/go/test/endtoend/vtorc/general/main_test.go
@@ -21,7 +21,6 @@ import (
"os"
"testing"
- "vitess.io/vitess/go/test/endtoend/cluster"
"vitess.io/vitess/go/test/endtoend/vtorc/utils"
)
@@ -47,8 +46,6 @@ func TestMain(m *testing.M) {
return m.Run(), nil
}()
- cluster.PanicHandler(nil)
-
if clusterInfo != nil {
// stop vtorc first otherwise its logs get polluted
// with instances being unreachable triggering unnecessary operations
diff --git a/go/test/endtoend/vtorc/general/vtorc_test.go b/go/test/endtoend/vtorc/general/vtorc_test.go
index 88cd7b65d63..a4ed71945be 100644
--- a/go/test/endtoend/vtorc/general/vtorc_test.go
+++ b/go/test/endtoend/vtorc/general/vtorc_test.go
@@ -40,9 +40,8 @@ import (
// verify that with multiple vtorc instances, we still only have 1 PlannedReparentShard call
func TestPrimaryElection(t *testing.T) {
defer utils.PrintVTOrcLogsOnFailure(t, clusterInfo.ClusterInstance)
- defer cluster.PanicHandler(t)
utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 2, 1, nil, cluster.VTOrcConfiguration{
- PreventCrossDataCenterPrimaryFailover: true,
+ PreventCrossCellFailover: true,
}, 2, "")
keyspace := &clusterInfo.ClusterInstance.Keyspaces[0]
shard0 := &keyspace.Shards[0]
@@ -62,15 +61,71 @@ func TestPrimaryElection(t *testing.T) {
require.Len(t, res.Rows, 1, "There should only be 1 primary tablet which was elected")
}
+// TestErrantGTIDOnPreviousPrimary tests that VTOrc is able to detect errant GTIDs on a previously demoted primary
+// if it has an errant GTID.
+func TestErrantGTIDOnPreviousPrimary(t *testing.T) {
+ defer utils.PrintVTOrcLogsOnFailure(t, clusterInfo.ClusterInstance)
+ utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 3, 0, []string{"--change-tablets-with-errant-gtid-to-drained"}, cluster.VTOrcConfiguration{}, 1, "")
+ keyspace := &clusterInfo.ClusterInstance.Keyspaces[0]
+ shard0 := &keyspace.Shards[0]
+
+ // find primary from topo
+ curPrimary := utils.ShardPrimaryTablet(t, clusterInfo, keyspace, shard0)
+ assert.NotNil(t, curPrimary, "should have elected a primary")
+ vtOrcProcess := clusterInfo.ClusterInstance.VTOrcProcesses[0]
+ utils.WaitForSuccessfulRecoveryCount(t, vtOrcProcess, logic.ElectNewPrimaryRecoveryName, 1)
+ utils.WaitForSuccessfulPRSCount(t, vtOrcProcess, keyspace.Name, shard0.Name, 1)
+
+ var replica, otherReplica *cluster.Vttablet
+ for _, tablet := range shard0.Vttablets {
+ // we know we have only two tablets, so the "other" one must be the new primary
+ if tablet.Alias != curPrimary.Alias {
+ if replica == nil {
+ replica = tablet
+ } else {
+ otherReplica = tablet
+ }
+ }
+ }
+ require.NotNil(t, replica, "should be able to find a replica")
+ require.NotNil(t, otherReplica, "should be able to find 2nd replica")
+ utils.CheckReplication(t, clusterInfo, curPrimary, []*cluster.Vttablet{replica, otherReplica}, 15*time.Second)
+
+ // Disable global recoveries for the cluster.
+ vtOrcProcess.DisableGlobalRecoveries(t)
+
+ // Run PRS to promote a different replica.
+ output, err := clusterInfo.ClusterInstance.VtctldClientProcess.ExecuteCommandWithOutput(
+ "PlannedReparentShard",
+ fmt.Sprintf("%s/%s", keyspace.Name, shard0.Name),
+ "--new-primary", replica.Alias)
+ require.NoError(t, err, "error in PlannedReparentShard output - %s", output)
+
+ // Stop replicatin on the previous primary to simulate it not reparenting properly.
+ // Also insert an errant GTID on the previous primary.
+ err = utils.RunSQLs(t, []string{
+ "STOP REPLICA",
+ "RESET REPLICA ALL",
+ "set global read_only=OFF",
+ "insert into vt_ks.vt_insert_test(id, msg) values (10173, 'test 178342')",
+ }, curPrimary, "")
+ require.NoError(t, err)
+
+ // Wait for VTOrc to detect the errant GTID and change the tablet to a drained type.
+ vtOrcProcess.EnableGlobalRecoveries(t)
+
+ // Wait for the tablet to be drained.
+ utils.WaitForTabletType(t, curPrimary, "drained")
+}
+
// Cases to test:
// 1. create cluster with 1 replica and 1 rdonly, let orc choose primary
// verify rdonly is not elected, only replica
// verify replication is setup
func TestSingleKeyspace(t *testing.T) {
defer utils.PrintVTOrcLogsOnFailure(t, clusterInfo.ClusterInstance)
- defer cluster.PanicHandler(t)
utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 1, 1, []string{"--clusters_to_watch", "ks"}, cluster.VTOrcConfiguration{
- PreventCrossDataCenterPrimaryFailover: true,
+ PreventCrossCellFailover: true,
}, 1, "")
keyspace := &clusterInfo.ClusterInstance.Keyspaces[0]
shard0 := &keyspace.Shards[0]
@@ -87,9 +142,8 @@ func TestSingleKeyspace(t *testing.T) {
// verify replication is setup
func TestKeyspaceShard(t *testing.T) {
defer utils.PrintVTOrcLogsOnFailure(t, clusterInfo.ClusterInstance)
- defer cluster.PanicHandler(t)
utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 1, 1, []string{"--clusters_to_watch", "ks/0"}, cluster.VTOrcConfiguration{
- PreventCrossDataCenterPrimaryFailover: true,
+ PreventCrossCellFailover: true,
}, 1, "")
keyspace := &clusterInfo.ClusterInstance.Keyspaces[0]
shard0 := &keyspace.Shards[0]
@@ -109,9 +163,8 @@ func TestKeyspaceShard(t *testing.T) {
// 6. disable recoveries and make sure the detected problems are set correctly.
func TestVTOrcRepairs(t *testing.T) {
defer utils.PrintVTOrcLogsOnFailure(t, clusterInfo.ClusterInstance)
- defer cluster.PanicHandler(t)
utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 3, 0, []string{"--change-tablets-with-errant-gtid-to-drained"}, cluster.VTOrcConfiguration{
- PreventCrossDataCenterPrimaryFailover: true,
+ PreventCrossCellFailover: true,
}, 1, "")
keyspace := &clusterInfo.ClusterInstance.Keyspaces[0]
shard0 := &keyspace.Shards[0]
@@ -288,9 +341,8 @@ func TestRepairAfterTER(t *testing.T) {
// test fails intermittently on CI, skip until it can be fixed.
t.SkipNow()
defer utils.PrintVTOrcLogsOnFailure(t, clusterInfo.ClusterInstance)
- defer cluster.PanicHandler(t)
utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 2, 0, nil, cluster.VTOrcConfiguration{
- PreventCrossDataCenterPrimaryFailover: true,
+ PreventCrossCellFailover: true,
}, 1, "")
keyspace := &clusterInfo.ClusterInstance.Keyspaces[0]
shard0 := &keyspace.Shards[0]
@@ -326,7 +378,7 @@ func TestSemiSync(t *testing.T) {
newCluster := utils.SetupNewClusterSemiSync(t)
defer utils.PrintVTOrcLogsOnFailure(t, newCluster.ClusterInstance)
utils.StartVTOrcs(t, newCluster, nil, cluster.VTOrcConfiguration{
- PreventCrossDataCenterPrimaryFailover: true,
+ PreventCrossCellFailover: true,
}, 1)
defer func() {
utils.StopVTOrcs(t, newCluster)
@@ -422,9 +474,8 @@ func TestSemiSync(t *testing.T) {
// TestVTOrcWithPrs tests that VTOrc works fine even when PRS is called from vtctld
func TestVTOrcWithPrs(t *testing.T) {
defer utils.PrintVTOrcLogsOnFailure(t, clusterInfo.ClusterInstance)
- defer cluster.PanicHandler(t)
utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 4, 0, nil, cluster.VTOrcConfiguration{
- PreventCrossDataCenterPrimaryFailover: true,
+ PreventCrossCellFailover: true,
}, 1, "")
keyspace := &clusterInfo.ClusterInstance.Keyspaces[0]
shard0 := &keyspace.Shards[0]
@@ -456,8 +507,6 @@ func TestVTOrcWithPrs(t *testing.T) {
"--new-primary", replica.Alias)
require.NoError(t, err, "error in PlannedReparentShard output - %s", output)
- time.Sleep(40 * time.Second)
-
// check that the replica gets promoted
utils.CheckPrimaryTablet(t, clusterInfo, replica, true)
// Verify that VTOrc didn't run any other recovery
@@ -474,7 +523,6 @@ func TestVTOrcWithPrs(t *testing.T) {
// TestMultipleDurabilities tests that VTOrc works with 2 keyspaces having 2 different durability policies
func TestMultipleDurabilities(t *testing.T) {
defer utils.PrintVTOrcLogsOnFailure(t, clusterInfo.ClusterInstance)
- defer cluster.PanicHandler(t)
// Setup a normal cluster and start vtorc
utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 1, 1, nil, cluster.VTOrcConfiguration{}, 1, "")
// Setup a semi-sync cluster
@@ -492,6 +540,45 @@ func TestMultipleDurabilities(t *testing.T) {
assert.NotNil(t, primary, "should have elected a primary")
}
+// TestDrainedTablet tests that we don't forget drained tablets and they still show up in the vtorc output.
+func TestDrainedTablet(t *testing.T) {
+ defer utils.PrintVTOrcLogsOnFailure(t, clusterInfo.ClusterInstance)
+
+ // Setup a normal cluster and start vtorc
+ utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 2, 0, nil, cluster.VTOrcConfiguration{}, 1, "")
+ keyspace := &clusterInfo.ClusterInstance.Keyspaces[0]
+ shard0 := &keyspace.Shards[0]
+
+ // find primary from topo
+ curPrimary := utils.ShardPrimaryTablet(t, clusterInfo, keyspace, shard0)
+ assert.NotNil(t, curPrimary, "should have elected a primary")
+ vtOrcProcess := clusterInfo.ClusterInstance.VTOrcProcesses[0]
+
+ // find any replica tablet other than the current primary
+ var replica *cluster.Vttablet
+ for _, tablet := range shard0.Vttablets {
+ if tablet.Alias != curPrimary.Alias {
+ replica = tablet
+ break
+ }
+ }
+ require.NotNil(t, replica, "could not find any replica tablet")
+
+ output, err := clusterInfo.ClusterInstance.VtctldClientProcess.ExecuteCommandWithOutput(
+ "ChangeTabletType", replica.Alias, "DRAINED")
+ require.NoError(t, err, "error in changing tablet type output - %s", output)
+
+ // Make sure VTOrc sees the drained tablets and doesn't forget them.
+ utils.WaitForDrainedTabletInVTOrc(t, vtOrcProcess, 1)
+
+ output, err = clusterInfo.ClusterInstance.VtctldClientProcess.ExecuteCommandWithOutput(
+ "ChangeTabletType", replica.Alias, "REPLICA")
+ require.NoError(t, err, "error in changing tablet type output - %s", output)
+
+ // We have no drained tablets anymore. Wait for VTOrc to have processed that.
+ utils.WaitForDrainedTabletInVTOrc(t, vtOrcProcess, 0)
+}
+
// TestDurabilityPolicySetLater tests that VTOrc works even if the durability policy of the keyspace is
// set after VTOrc has been started.
func TestDurabilityPolicySetLater(t *testing.T) {
@@ -520,7 +607,7 @@ func TestDurabilityPolicySetLater(t *testing.T) {
// Now start the vtorc instances
utils.StartVTOrcs(t, newCluster, nil, cluster.VTOrcConfiguration{
- PreventCrossDataCenterPrimaryFailover: true,
+ PreventCrossCellFailover: true,
}, 1)
defer func() {
utils.StopVTOrcs(t, newCluster)
@@ -543,11 +630,10 @@ func TestDurabilityPolicySetLater(t *testing.T) {
func TestFullStatusConnectionPooling(t *testing.T) {
defer utils.PrintVTOrcLogsOnFailure(t, clusterInfo.ClusterInstance)
- defer cluster.PanicHandler(t)
utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 4, 0, []string{
"--tablet_manager_grpc_concurrency=1",
}, cluster.VTOrcConfiguration{
- PreventCrossDataCenterPrimaryFailover: true,
+ PreventCrossCellFailover: true,
}, 1, "")
keyspace := &clusterInfo.ClusterInstance.Keyspaces[0]
shard0 := &keyspace.Shards[0]
diff --git a/go/test/endtoend/vtorc/primaryfailure/main_test.go b/go/test/endtoend/vtorc/primaryfailure/main_test.go
index a3e50bd0cc9..cd03df01bd6 100644
--- a/go/test/endtoend/vtorc/primaryfailure/main_test.go
+++ b/go/test/endtoend/vtorc/primaryfailure/main_test.go
@@ -21,7 +21,6 @@ import (
"os"
"testing"
- "vitess.io/vitess/go/test/endtoend/cluster"
"vitess.io/vitess/go/test/endtoend/vtorc/utils"
)
@@ -53,8 +52,6 @@ func TestMain(m *testing.M) {
return m.Run(), nil
}()
- cluster.PanicHandler(nil)
-
if clusterInfo != nil {
// stop vtorc first otherwise its logs get polluted
// with instances being unreachable triggering unnecessary operations
diff --git a/go/test/endtoend/vtorc/primaryfailure/primary_failure_test.go b/go/test/endtoend/vtorc/primaryfailure/primary_failure_test.go
index 886aa3a580a..9017d35a8c5 100644
--- a/go/test/endtoend/vtorc/primaryfailure/primary_failure_test.go
+++ b/go/test/endtoend/vtorc/primaryfailure/primary_failure_test.go
@@ -39,12 +39,11 @@ import (
// Also tests that VTOrc can handle multiple failures, if the durability policies allow it
func TestDownPrimary(t *testing.T) {
defer utils.PrintVTOrcLogsOnFailure(t, clusterInfo.ClusterInstance)
- defer cluster.PanicHandler(t)
// We specify the --wait-replicas-timeout to a small value because we spawn a cross-cell replica later in the test.
// If that replica is more advanced than the same-cell-replica, then we try to promote the cross-cell replica as an intermediate source.
// If we don't specify a small value of --wait-replicas-timeout, then we would end up waiting for 30 seconds for the dead-primary to respond, failing this test.
utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 2, 1, []string{"--remote_operation_timeout=10s", "--wait-replicas-timeout=5s"}, cluster.VTOrcConfiguration{
- PreventCrossDataCenterPrimaryFailover: true,
+ PreventCrossCellFailover: true,
}, 1, "semi_sync")
keyspace := &clusterInfo.ClusterInstance.Keyspaces[0]
shard0 := &keyspace.Shards[0]
@@ -116,7 +115,6 @@ func TestDownPrimary(t *testing.T) {
// bring down primary before VTOrc has started, let vtorc repair.
func TestDownPrimaryBeforeVTOrc(t *testing.T) {
defer utils.PrintVTOrcLogsOnFailure(t, clusterInfo.ClusterInstance)
- defer cluster.PanicHandler(t)
utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 2, 1, nil, cluster.VTOrcConfiguration{}, 0, "none")
keyspace := &clusterInfo.ClusterInstance.Keyspaces[0]
shard0 := &keyspace.Shards[0]
@@ -150,7 +148,7 @@ func TestDownPrimaryBeforeVTOrc(t *testing.T) {
// Start a VTOrc instance
utils.StartVTOrcs(t, clusterInfo, []string{"--remote_operation_timeout=10s"}, cluster.VTOrcConfiguration{
- PreventCrossDataCenterPrimaryFailover: true,
+ PreventCrossCellFailover: true,
}, 1)
vtOrcProcess := clusterInfo.ClusterInstance.VTOrcProcesses[0]
@@ -172,7 +170,6 @@ func TestDownPrimaryBeforeVTOrc(t *testing.T) {
// delete the primary record and let vtorc repair.
func TestDeletedPrimaryTablet(t *testing.T) {
defer utils.PrintVTOrcLogsOnFailure(t, clusterInfo.ClusterInstance)
- defer cluster.PanicHandler(t)
utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 2, 1, []string{"--remote_operation_timeout=10s"}, cluster.VTOrcConfiguration{}, 1, "none")
keyspace := &clusterInfo.ClusterInstance.Keyspaces[0]
shard0 := &keyspace.Shards[0]
@@ -239,12 +236,11 @@ func TestDeletedPrimaryTablet(t *testing.T) {
// that primary is unreachable. This help us save few seconds depending on value of `RemoteOperationTimeout` flag.
func TestDeadPrimaryRecoversImmediately(t *testing.T) {
defer utils.PrintVTOrcLogsOnFailure(t, clusterInfo.ClusterInstance)
- defer cluster.PanicHandler(t)
// We specify the --wait-replicas-timeout to a small value because we spawn a cross-cell replica later in the test.
// If that replica is more advanced than the same-cell-replica, then we try to promote the cross-cell replica as an intermediate source.
// If we don't specify a small value of --wait-replicas-timeout, then we would end up waiting for 30 seconds for the dead-primary to respond, failing this test.
utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 2, 1, []string{"--remote_operation_timeout=10s", "--wait-replicas-timeout=5s"}, cluster.VTOrcConfiguration{
- PreventCrossDataCenterPrimaryFailover: true,
+ PreventCrossCellFailover: true,
}, 1, "semi_sync")
keyspace := &clusterInfo.ClusterInstance.Keyspaces[0]
shard0 := &keyspace.Shards[0]
@@ -322,9 +318,8 @@ func TestDeadPrimaryRecoversImmediately(t *testing.T) {
// covers part of the test case master-failover-lost-replicas from orchestrator
func TestCrossDataCenterFailure(t *testing.T) {
defer utils.PrintVTOrcLogsOnFailure(t, clusterInfo.ClusterInstance)
- defer cluster.PanicHandler(t)
utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 2, 1, nil, cluster.VTOrcConfiguration{
- PreventCrossDataCenterPrimaryFailover: true,
+ PreventCrossCellFailover: true,
}, 1, "")
keyspace := &clusterInfo.ClusterInstance.Keyspaces[0]
shard0 := &keyspace.Shards[0]
@@ -368,9 +363,8 @@ func TestCrossDataCenterFailure(t *testing.T) {
// In case of no viable candidates, we should error out
func TestCrossDataCenterFailureError(t *testing.T) {
defer utils.PrintVTOrcLogsOnFailure(t, clusterInfo.ClusterInstance)
- defer cluster.PanicHandler(t)
utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 1, 1, nil, cluster.VTOrcConfiguration{
- PreventCrossDataCenterPrimaryFailover: true,
+ PreventCrossCellFailover: true,
}, 1, "")
keyspace := &clusterInfo.ClusterInstance.Keyspaces[0]
shard0 := &keyspace.Shards[0]
@@ -415,9 +409,8 @@ func TestLostRdonlyOnPrimaryFailure(t *testing.T) {
// were detected by vtorc and could be configured to have their sources detached
t.Skip()
defer utils.PrintVTOrcLogsOnFailure(t, clusterInfo.ClusterInstance)
- defer cluster.PanicHandler(t)
utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 2, 2, nil, cluster.VTOrcConfiguration{
- PreventCrossDataCenterPrimaryFailover: true,
+ PreventCrossCellFailover: true,
}, 1, "")
keyspace := &clusterInfo.ClusterInstance.Keyspaces[0]
shard0 := &keyspace.Shards[0]
@@ -495,7 +488,6 @@ func TestLostRdonlyOnPrimaryFailure(t *testing.T) {
// covers the test case master-failover-fail-promotion-lag-minutes-success from orchestrator
func TestPromotionLagSuccess(t *testing.T) {
defer utils.PrintVTOrcLogsOnFailure(t, clusterInfo.ClusterInstance)
- defer cluster.PanicHandler(t)
utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 2, 1, nil, cluster.VTOrcConfiguration{
ReplicationLagQuery: "select 59",
FailPrimaryPromotionOnLagMinutes: 1,
@@ -545,7 +537,6 @@ func TestPromotionLagFailure(t *testing.T) {
// was smaller than the configured value, otherwise it would fail the promotion
t.Skip()
defer utils.PrintVTOrcLogsOnFailure(t, clusterInfo.ClusterInstance)
- defer cluster.PanicHandler(t)
utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 3, 1, nil, cluster.VTOrcConfiguration{
ReplicationLagQuery: "select 61",
FailPrimaryPromotionOnLagMinutes: 1,
@@ -598,7 +589,6 @@ func TestPromotionLagFailure(t *testing.T) {
// That is the replica which should be promoted in case of primary failure
func TestDownPrimaryPromotionRule(t *testing.T) {
defer utils.PrintVTOrcLogsOnFailure(t, clusterInfo.ClusterInstance)
- defer cluster.PanicHandler(t)
utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 2, 1, nil, cluster.VTOrcConfiguration{
LockShardTimeoutSeconds: 5,
}, 1, "test")
@@ -646,7 +636,6 @@ func TestDownPrimaryPromotionRule(t *testing.T) {
// It should also be caught up when it is promoted
func TestDownPrimaryPromotionRuleWithLag(t *testing.T) {
defer utils.PrintVTOrcLogsOnFailure(t, clusterInfo.ClusterInstance)
- defer cluster.PanicHandler(t)
utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 2, 1, nil, cluster.VTOrcConfiguration{
LockShardTimeoutSeconds: 5,
}, 1, "test")
@@ -726,10 +715,9 @@ func TestDownPrimaryPromotionRuleWithLag(t *testing.T) {
// It should also be caught up when it is promoted
func TestDownPrimaryPromotionRuleWithLagCrossCenter(t *testing.T) {
defer utils.PrintVTOrcLogsOnFailure(t, clusterInfo.ClusterInstance)
- defer cluster.PanicHandler(t)
utils.SetupVttabletsAndVTOrcs(t, clusterInfo, 2, 1, nil, cluster.VTOrcConfiguration{
- LockShardTimeoutSeconds: 5,
- PreventCrossDataCenterPrimaryFailover: true,
+ LockShardTimeoutSeconds: 5,
+ PreventCrossCellFailover: true,
}, 1, "test")
keyspace := &clusterInfo.ClusterInstance.Keyspaces[0]
shard0 := &keyspace.Shards[0]
diff --git a/go/test/endtoend/vtorc/readtopologyinstance/main_test.go b/go/test/endtoend/vtorc/readtopologyinstance/main_test.go
index fa8dc116782..823655ed785 100644
--- a/go/test/endtoend/vtorc/readtopologyinstance/main_test.go
+++ b/go/test/endtoend/vtorc/readtopologyinstance/main_test.go
@@ -55,8 +55,7 @@ func TestReadTopologyInstanceBufferable(t *testing.T) {
"--topo_global_root", clusterInfo.ClusterInstance.VtctlProcess.TopoGlobalRoot,
}
servenv.ParseFlags("vtorc")
- config.Config.RecoveryPeriodBlockSeconds = 1
- config.Config.InstancePollSeconds = 1
+ config.SetInstancePollTime(1 * time.Second)
config.MarkConfigurationLoaded()
server.StartVTOrcDiscovery()
diff --git a/go/test/endtoend/vtorc/utils/utils.go b/go/test/endtoend/vtorc/utils/utils.go
index 63500377f47..456d55518dd 100644
--- a/go/test/endtoend/vtorc/utils/utils.go
+++ b/go/test/endtoend/vtorc/utils/utils.go
@@ -376,7 +376,6 @@ func CheckPrimaryTablet(t *testing.T, clusterInfo *VTOrcClusterInfo, tablet *clu
for {
now := time.Now()
if now.Sub(start) > time.Second*60 {
- //log.Exitf("error")
assert.FailNow(t, "failed to elect primary before timeout")
}
tabletInfo, err := clusterInfo.ClusterInstance.VtctldClientProcess.GetTablet(tablet.Alias)
@@ -775,10 +774,10 @@ func MakeAPICallRetry(t *testing.T, vtorc *cluster.VTOrcProcess, url string, ret
for {
select {
case <-timeout:
- t.Fatal("timed out waiting for api to work")
+ t.Fatalf("timed out waiting for api to work. Last response - %s", response)
return
default:
- status, response, _ := MakeAPICall(t, vtorc, url)
+ status, response, _ = MakeAPICall(t, vtorc, url)
if retry(status, response) {
time.Sleep(1 * time.Second)
break
@@ -998,7 +997,7 @@ func WaitForSuccessfulRecoveryCount(t *testing.T, vtorcInstance *cluster.VTOrcPr
for time.Since(startTime) < timeout {
vars := vtorcInstance.GetVars()
successfulRecoveriesMap := vars["SuccessfulRecoveries"].(map[string]interface{})
- successCount := getIntFromValue(successfulRecoveriesMap[recoveryName])
+ successCount := GetIntFromValue(successfulRecoveriesMap[recoveryName])
if successCount == countExpected {
return
}
@@ -1006,7 +1005,7 @@ func WaitForSuccessfulRecoveryCount(t *testing.T, vtorcInstance *cluster.VTOrcPr
}
vars := vtorcInstance.GetVars()
successfulRecoveriesMap := vars["SuccessfulRecoveries"].(map[string]interface{})
- successCount := getIntFromValue(successfulRecoveriesMap[recoveryName])
+ successCount := GetIntFromValue(successfulRecoveriesMap[recoveryName])
assert.EqualValues(t, countExpected, successCount)
}
@@ -1019,7 +1018,7 @@ func WaitForSuccessfulPRSCount(t *testing.T, vtorcInstance *cluster.VTOrcProcess
for time.Since(startTime) < timeout {
vars := vtorcInstance.GetVars()
prsCountsMap := vars["PlannedReparentCounts"].(map[string]interface{})
- successCount := getIntFromValue(prsCountsMap[mapKey])
+ successCount := GetIntFromValue(prsCountsMap[mapKey])
if successCount == countExpected {
return
}
@@ -1027,7 +1026,7 @@ func WaitForSuccessfulPRSCount(t *testing.T, vtorcInstance *cluster.VTOrcProcess
}
vars := vtorcInstance.GetVars()
prsCountsMap := vars["PlannedReparentCounts"].(map[string]interface{})
- successCount := getIntFromValue(prsCountsMap[mapKey])
+ successCount := GetIntFromValue(prsCountsMap[mapKey])
assert.EqualValues(t, countExpected, successCount)
}
@@ -1040,7 +1039,7 @@ func WaitForSuccessfulERSCount(t *testing.T, vtorcInstance *cluster.VTOrcProcess
for time.Since(startTime) < timeout {
vars := vtorcInstance.GetVars()
ersCountsMap := vars["EmergencyReparentCounts"].(map[string]interface{})
- successCount := getIntFromValue(ersCountsMap[mapKey])
+ successCount := GetIntFromValue(ersCountsMap[mapKey])
if successCount == countExpected {
return
}
@@ -1048,7 +1047,7 @@ func WaitForSuccessfulERSCount(t *testing.T, vtorcInstance *cluster.VTOrcProcess
}
vars := vtorcInstance.GetVars()
ersCountsMap := vars["EmergencyReparentCounts"].(map[string]interface{})
- successCount := getIntFromValue(ersCountsMap[mapKey])
+ successCount := GetIntFromValue(ersCountsMap[mapKey])
assert.EqualValues(t, countExpected, successCount)
}
@@ -1067,10 +1066,10 @@ func CheckMetricExists(t *testing.T, vtorcInstance *cluster.VTOrcProcess, metric
assert.Contains(t, metrics, metricName)
}
-// getIntFromValue is a helper function to get an integer from the given value.
+// GetIntFromValue is a helper function to get an integer from the given value.
// If it is convertible to a float, then we round the number to the nearest integer.
// If the value is not numeric at all, we return 0.
-func getIntFromValue(val any) int {
+func GetIntFromValue(val any) int {
value := reflect.ValueOf(val)
if value.CanFloat() {
return int(math.Round(value.Float()))
@@ -1091,7 +1090,7 @@ func WaitForDetectedProblems(t *testing.T, vtorcInstance *cluster.VTOrcProcess,
for time.Since(startTime) < timeout {
vars := vtorcInstance.GetVars()
problems := vars["DetectedProblems"].(map[string]interface{})
- actual := getIntFromValue(problems[key])
+ actual := GetIntFromValue(problems[key])
if actual == expect {
return
}
@@ -1101,7 +1100,7 @@ func WaitForDetectedProblems(t *testing.T, vtorcInstance *cluster.VTOrcProcess,
vars := vtorcInstance.GetVars()
problems := vars["DetectedProblems"].(map[string]interface{})
actual, ok := problems[key]
- actual = getIntFromValue(actual)
+ actual = GetIntFromValue(actual)
assert.True(t, ok,
"The metric DetectedProblems[%s] should exist but does not (all problems: %+v)",
@@ -1204,3 +1203,29 @@ func SemiSyncExtensionLoaded(t *testing.T, tablet *cluster.Vttablet) (mysql.Semi
return conn.SemiSyncExtensionLoaded()
}
+
+// WaitForDrainedTabletInVTOrc waits for VTOrc to see the specified number of drained tablet.
+func WaitForDrainedTabletInVTOrc(t *testing.T, vtorcInstance *cluster.VTOrcProcess, count int) {
+ t.Helper()
+ ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
+ defer cancel()
+ ticker := time.NewTicker(100 * time.Millisecond)
+ defer ticker.Stop()
+
+ for {
+ select {
+ case <-ctx.Done():
+ t.Errorf("timed out waiting for drained tablet in VTOrc")
+ return
+ case <-ticker.C:
+ statusCode, res, err := vtorcInstance.MakeAPICall("api/database-state")
+ if err != nil || statusCode != 200 {
+ continue
+ }
+ found := strings.Count(res, fmt.Sprintf(`"tablet_type": "%d"`, topodatapb.TabletType_DRAINED))
+ if found == count {
+ return
+ }
+ }
+ }
+}
diff --git a/go/test/fuzzing/oss_fuzz_build.sh b/go/test/fuzzing/oss_fuzz_build.sh
index 2cb991c4215..cde31291af1 100755
--- a/go/test/fuzzing/oss_fuzz_build.sh
+++ b/go/test/fuzzing/oss_fuzz_build.sh
@@ -54,10 +54,10 @@ mv api_marshal_fuzzer.go $SRC/vitess/go/test/fuzzing/
compile_go_fuzzer vitess.io/vitess/go/test/fuzzing FuzzAPIMarshal api_marshal_fuzzer
# collation fuzzer
-mv ./go/mysql/collations/uca_test.go \
- ./go/mysql/collations/uca_test_fuzz.go
+mv ./go/mysql/collations/colldata/uca_test.go \
+ ./go/mysql/collations/colldata/uca_test_fuzz.go
-compile_go_fuzzer vitess.io/vitess/go/mysql/collations FuzzCollations fuzz_collations
+compile_go_fuzzer vitess.io/vitess/go/mysql/collations/colldata FuzzCollations fuzz_collations
compile_go_fuzzer vitess.io/vitess/go/vt/vtgate/planbuilder FuzzTestBuilder fuzz_test_builder gofuzz
diff --git a/go/test/vschemawrapper/vschema_wrapper.go b/go/test/vschemawrapper/vschema_wrapper.go
index a1b87f5569c..3f9f072afc6 100644
--- a/go/test/vschemawrapper/vschema_wrapper.go
+++ b/go/test/vschemawrapper/vschema_wrapper.go
@@ -33,6 +33,7 @@ import (
"vitess.io/vitess/go/vt/vtenv"
"vitess.io/vitess/go/vt/vterrors"
"vitess.io/vitess/go/vt/vtgate/engine"
+ econtext "vitess.io/vitess/go/vt/vtgate/executorcontext"
"vitess.io/vitess/go/vt/vtgate/planbuilder/plancontext"
"vitess.io/vitess/go/vt/vtgate/semantics"
"vitess.io/vitess/go/vt/vtgate/vindexes"
@@ -40,7 +41,10 @@ import (
var _ plancontext.VSchema = (*VSchemaWrapper)(nil)
+// VSchemaWrapper is a wrapper around VSchema that implements the ContextVSchema interface.
+// It is used in tests to provide a VSchema implementation.
type VSchemaWrapper struct {
+ Vcursor *econtext.VCursorImpl
V *vindexes.VSchema
Keyspace *vindexes.Keyspace
TabletType_ topodatapb.TabletType
@@ -53,6 +57,30 @@ type VSchemaWrapper struct {
Env *vtenv.Environment
}
+func NewVschemaWrapper(
+ env *vtenv.Environment,
+ vschema *vindexes.VSchema,
+ builder func(string, plancontext.VSchema, string) (*engine.Plan, error),
+) (*VSchemaWrapper, error) {
+ ss := econtext.NewAutocommitSession(&vtgatepb.Session{})
+ vcursor, err := econtext.NewVCursorImpl(ss, sqlparser.MarginComments{}, nil, nil, nil, vschema, nil, nil, nil, econtext.VCursorConfig{
+ Collation: env.CollationEnv().DefaultConnectionCharset(),
+ DefaultTabletType: topodatapb.TabletType_PRIMARY,
+ SetVarEnabled: true,
+ })
+ if err != nil {
+ return nil, err
+ }
+ return &VSchemaWrapper{
+ Env: env,
+ V: vschema,
+ Vcursor: vcursor,
+ TestBuilder: builder,
+ TabletType_: topodatapb.TabletType_PRIMARY,
+ SysVarEnabled: true,
+ }, nil
+}
+
func (vw *VSchemaWrapper) GetPrepareData(stmtName string) *vtgatepb.PrepareData {
switch stmtName {
case "prep_one_param":
@@ -244,34 +272,7 @@ func (vw *VSchemaWrapper) FindView(tab sqlparser.TableName) sqlparser.SelectStat
}
func (vw *VSchemaWrapper) FindTableOrVindex(tab sqlparser.TableName) (*vindexes.Table, vindexes.Vindex, string, topodatapb.TabletType, key.Destination, error) {
- if tab.Qualifier.IsEmpty() && tab.Name.String() == "dual" {
- ksName := vw.getActualKeyspace()
- var ks *vindexes.Keyspace
- if ksName == "" {
- ks = vw.getfirstKeyspace()
- ksName = ks.Name
- } else {
- ks = vw.V.Keyspaces[ksName].Keyspace
- }
- tbl := &vindexes.Table{
- Name: sqlparser.NewIdentifierCS("dual"),
- Keyspace: ks,
- Type: vindexes.TypeReference,
- }
- return tbl, nil, ksName, topodatapb.TabletType_PRIMARY, nil, nil
- }
- destKeyspace, destTabletType, destTarget, err := topoproto.ParseDestination(tab.Qualifier.String(), topodatapb.TabletType_PRIMARY)
- if err != nil {
- return nil, nil, destKeyspace, destTabletType, destTarget, err
- }
- if destKeyspace == "" {
- destKeyspace = vw.getActualKeyspace()
- }
- table, vindex, err := vw.V.FindTableOrVindex(destKeyspace, tab.Name.String(), topodatapb.TabletType_PRIMARY)
- if err != nil {
- return nil, nil, destKeyspace, destTabletType, destTarget, err
- }
- return table, vindex, destKeyspace, destTabletType, destTarget, nil
+ return vw.Vcursor.FindTableOrVindex(tab)
}
func (vw *VSchemaWrapper) getfirstKeyspace() (ks *vindexes.Keyspace) {
@@ -299,12 +300,12 @@ func (vw *VSchemaWrapper) getActualKeyspace() string {
return ks.Name
}
-func (vw *VSchemaWrapper) DefaultKeyspace() (*vindexes.Keyspace, error) {
+func (vw *VSchemaWrapper) SelectedKeyspace() (*vindexes.Keyspace, error) {
return vw.V.Keyspaces["main"].Keyspace, nil
}
func (vw *VSchemaWrapper) AnyKeyspace() (*vindexes.Keyspace, error) {
- return vw.DefaultKeyspace()
+ return vw.SelectedKeyspace()
}
func (vw *VSchemaWrapper) FirstSortedKeyspace() (*vindexes.Keyspace, error) {
diff --git a/go/textutil/strings.go b/go/textutil/strings.go
index 2a923cd3259..a17daf8d382 100644
--- a/go/textutil/strings.go
+++ b/go/textutil/strings.go
@@ -90,6 +90,19 @@ func SingleWordCamel(w string) string {
return strings.ToUpper(w[0:1]) + strings.ToLower(w[1:])
}
+var multiWordSplitterRegexp = regexp.MustCompile(`[-_.\s]+`)
+
+// PascalCase turns a string into PascalCase by splitting it into words and
+// capitalizing the first letter of each word.
+func PascalCase(w string) string {
+ var b strings.Builder
+ words := multiWordSplitterRegexp.Split(w, -1)
+ for _, word := range words {
+ b.WriteString(SingleWordCamel(word))
+ }
+ return b.String()
+}
+
// ValueIsSimulatedNull returns true if the slice value represents
// a NULL or unknown/unspecified value. This is used to distinguish
// between a zero value empty slice and a user provided value of an
diff --git a/go/textutil/strings_test.go b/go/textutil/strings_test.go
index d65c187c4cb..828f39847cf 100644
--- a/go/textutil/strings_test.go
+++ b/go/textutil/strings_test.go
@@ -122,6 +122,64 @@ func TestSingleWordCamel(t *testing.T) {
}
}
+func TestPascalCase(t *testing.T) {
+ tt := []struct {
+ word string
+ expect string
+ }{
+ {
+ word: "",
+ expect: "",
+ },
+ {
+ word: "_",
+ expect: "",
+ },
+ {
+ word: "_a",
+ expect: "A",
+ },
+ {
+ word: "A",
+ expect: "A",
+ },
+ {
+ word: "mysql",
+ expect: "Mysql",
+ },
+ {
+ word: "mySQL",
+ expect: "Mysql",
+ },
+ {
+ word: "foo-bar",
+ expect: "FooBar",
+ },
+ {
+ word: "mysql-server",
+ expect: "MysqlServer",
+ },
+ {
+ word: "io_util",
+ expect: "IoUtil",
+ },
+ {
+ word: "there and back again",
+ expect: "ThereAndBackAgain",
+ },
+ {
+ word: "combine_all_OF the\tabove",
+ expect: "CombineAllOfTheAbove",
+ },
+ }
+ for _, tc := range tt {
+ t.Run(tc.word, func(t *testing.T) {
+ pascal := PascalCase(tc.word)
+ assert.Equal(t, tc.expect, pascal)
+ })
+ }
+}
+
func TestValueIsSimulatedNull(t *testing.T) {
tt := []struct {
name string
diff --git a/go/viperutil/debug/debug.go b/go/viperutil/debug/debug.go
index 66cbc7f2962..662634a5675 100644
--- a/go/viperutil/debug/debug.go
+++ b/go/viperutil/debug/debug.go
@@ -25,3 +25,13 @@ import (
func Debug() {
registry.Combined().Debug()
}
+
+// WriteConfigAs writes the config into the given filename.
+func WriteConfigAs(filename string) error {
+ return registry.Combined().WriteConfigAs(filename)
+}
+
+// AllSettings gets all the settings in the configuration.
+func AllSettings() map[string]any {
+ return registry.Combined().AllSettings()
+}
diff --git a/go/viperutil/internal/sync/sync.go b/go/viperutil/internal/sync/sync.go
index 6bee1a14e72..f69829f734d 100644
--- a/go/viperutil/internal/sync/sync.go
+++ b/go/viperutil/internal/sync/sync.go
@@ -86,7 +86,7 @@ func (v *Viper) Set(key string, value any) {
v.m.Lock()
defer v.m.Unlock()
- // We must not update v.disk here; explicit calls to Set will supercede all
+ // We must not update v.disk here; explicit calls to Set will supersede all
// future config reloads.
v.live.Set(key, value)
diff --git a/go/vt/binlog/binlogplayer/dbclient.go b/go/vt/binlog/binlogplayer/dbclient.go
index c3463b4cc2c..4cbfd962528 100644
--- a/go/vt/binlog/binlogplayer/dbclient.go
+++ b/go/vt/binlog/binlogplayer/dbclient.go
@@ -40,6 +40,7 @@ type DBClient interface {
Commit() error
Rollback() error
Close()
+ IsClosed() bool
ExecuteFetch(query string, maxrows int) (qr *sqltypes.Result, err error)
ExecuteFetchMulti(query string, maxrows int) (qrs []*sqltypes.Result, err error)
SupportsCapability(capability capabilities.FlavorCapability) (bool, error)
@@ -125,6 +126,10 @@ func (dc *dbClientImpl) Close() {
dc.dbConn.Close()
}
+func (dc *dbClientImpl) IsClosed() bool {
+ return dc.dbConn.IsClosed()
+}
+
func (dc *dbClientImpl) SupportsCapability(capability capabilities.FlavorCapability) (bool, error) {
return dc.dbConn.SupportsCapability(capability)
}
diff --git a/go/vt/binlog/binlogplayer/fake_dbclient.go b/go/vt/binlog/binlogplayer/fake_dbclient.go
index 234dfd528e0..69bbd06f7c6 100644
--- a/go/vt/binlog/binlogplayer/fake_dbclient.go
+++ b/go/vt/binlog/binlogplayer/fake_dbclient.go
@@ -56,6 +56,10 @@ func (dc *fakeDBClient) Rollback() error {
func (dc *fakeDBClient) Close() {
}
+func (dc *fakeDBClient) IsClosed() bool {
+ return false
+}
+
func (dc *fakeDBClient) ExecuteFetch(query string, maxrows int) (qr *sqltypes.Result, err error) {
query = strings.ToLower(query)
switch {
diff --git a/go/vt/binlog/binlogplayer/mock_dbclient.go b/go/vt/binlog/binlogplayer/mock_dbclient.go
index 2135c8bf1e5..12005a16c2e 100644
--- a/go/vt/binlog/binlogplayer/mock_dbclient.go
+++ b/go/vt/binlog/binlogplayer/mock_dbclient.go
@@ -100,14 +100,6 @@ func NewMockDbaClient(t *testing.T) *MockDBClient {
}
}
-func (dc *MockDBClient) Reset() {
- dc.expectMu.Lock()
- defer dc.expectMu.Unlock()
- dc.currentResult = 0
- dc.expect = nil
- dc.done = make(chan struct{})
-}
-
// ExpectRequest adds an expected result to the mock.
// This function should not be called conncurrently with other commands.
func (dc *MockDBClient) ExpectRequest(query string, result *sqltypes.Result, err error) {
@@ -189,6 +181,10 @@ func (dc *MockDBClient) Rollback() error {
func (dc *MockDBClient) Close() {
}
+func (dc *MockDBClient) IsClosed() bool {
+ return false
+}
+
// ExecuteFetch is part of the DBClient interface
func (dc *MockDBClient) ExecuteFetch(query string, maxrows int) (qr *sqltypes.Result, err error) {
// Serialize ExecuteFetch to enforce a strict order on shared dbClients.
diff --git a/go/vt/discovery/fake_healthcheck.go b/go/vt/discovery/fake_healthcheck.go
index d1bde350276..6ae7ee105c2 100644
--- a/go/vt/discovery/fake_healthcheck.go
+++ b/go/vt/discovery/fake_healthcheck.go
@@ -172,6 +172,21 @@ func (fhc *FakeHealthCheck) SetTabletType(tablet *topodatapb.Tablet, tabletType
item.ts.Target.TabletType = tabletType
}
+// SetPrimaryTimestamp sets the primary timestamp for the given tablet
+func (fhc *FakeHealthCheck) SetPrimaryTimestamp(tablet *topodatapb.Tablet, timestamp int64) {
+ if fhc.ch == nil {
+ return
+ }
+ fhc.mu.Lock()
+ defer fhc.mu.Unlock()
+ key := TabletToMapKey(tablet)
+ item, isPresent := fhc.items[key]
+ if !isPresent {
+ return
+ }
+ item.ts.PrimaryTermStartTime = timestamp
+}
+
// Unsubscribe is not implemented.
func (fhc *FakeHealthCheck) Unsubscribe(c chan *TabletHealth) {
}
diff --git a/go/vt/discovery/healthcheck.go b/go/vt/discovery/healthcheck.go
index 50506c1eda1..07a9dbbfa88 100644
--- a/go/vt/discovery/healthcheck.go
+++ b/go/vt/discovery/healthcheck.go
@@ -93,9 +93,6 @@ var (
// refreshKnownTablets tells us whether to process all tablets or only new tablets.
refreshKnownTablets = true
- // healthCheckDialConcurrency tells us how many healthcheck connections can be opened to tablets at once. This should be less than the golang max thread limit of 10000.
- healthCheckDialConcurrency int64 = 1024
-
// How much to sleep between each check.
waitAvailableTabletInterval = 100 * time.Millisecond
@@ -181,7 +178,6 @@ func registerWebUIFlags(fs *pflag.FlagSet) {
fs.StringVar(&TabletURLTemplateString, "tablet_url_template", "http://{{.GetTabletHostPort}}", "Format string describing debug tablet url formatting. See getTabletDebugURL() for how to customize this.")
fs.DurationVar(&refreshInterval, "tablet_refresh_interval", 1*time.Minute, "Tablet refresh interval.")
fs.BoolVar(&refreshKnownTablets, "tablet_refresh_known_tablets", true, "Whether to reload the tablet's address/port map from topo in case they change.")
- fs.Int64Var(&healthCheckDialConcurrency, "healthcheck-dial-concurrency", 1024, "Maximum concurrency of new healthcheck connections. This should be less than the golang max thread limit of 10000.")
ParseTabletURLTemplateFromFlag()
}
@@ -364,13 +360,12 @@ func NewHealthCheck(ctx context.Context, retryDelay, healthCheckTimeout time.Dur
cell: localCell,
retryDelay: retryDelay,
healthCheckTimeout: healthCheckTimeout,
- healthCheckDialSem: semaphore.NewWeighted(healthCheckDialConcurrency),
healthByAlias: make(map[tabletAliasString]*tabletHealthCheck),
healthData: make(map[KeyspaceShardTabletType]map[tabletAliasString]*TabletHealth),
healthy: make(map[KeyspaceShardTabletType][]*TabletHealth),
subscribers: make(map[chan *TabletHealth]struct{}),
cellAliases: make(map[string]string),
- loadTabletsTrigger: make(chan struct{}),
+ loadTabletsTrigger: make(chan struct{}, 1),
nowTimeFunc: func() time.Time { return time.Now() },
}
var topoWatchers []*TopologyWatcher
@@ -384,7 +379,7 @@ func NewHealthCheck(ctx context.Context, retryDelay, healthCheckTimeout time.Dur
if c == "" {
continue
}
- topoWatchers = append(topoWatchers, NewTopologyWatcher(ctx, topoServer, hc, filters, c, refreshInterval, refreshKnownTablets, topo.DefaultConcurrency))
+ topoWatchers = append(topoWatchers, NewTopologyWatcher(ctx, topoServer, hc, filters, c, refreshInterval, refreshKnownTablets))
}
hc.topoWatchers = topoWatchers
@@ -551,7 +546,13 @@ func (hc *HealthCheckImpl) updateHealth(th *TabletHealth, prevTarget *query.Targ
if prevTarget.TabletType == topodata.TabletType_PRIMARY {
if primaries := hc.healthData[oldTargetKey]; len(primaries) == 0 {
log.Infof("We will have no health data for the next new primary tablet after demoting the tablet: %v, so start loading tablets now", topotools.TabletIdent(th.Tablet))
- hc.loadTabletsTrigger <- struct{}{}
+ // We want to trigger a loadTablets call, but if the channel is not empty
+ // then a trigger is already scheduled, we don't need to trigger another one.
+ // This also prevents the code from deadlocking as described in https://github.com/vitessio/vitess/issues/16994.
+ select {
+ case hc.loadTabletsTrigger <- struct{}{}:
+ default:
+ }
}
}
}
@@ -880,7 +881,7 @@ func (hc *HealthCheckImpl) TabletConnection(ctx context.Context, alias *topodata
// TODO: test that throws this error
return nil, vterrors.Errorf(vtrpc.Code_NOT_FOUND, "tablet: %v is either down or nonexistent", alias)
}
- return thc.Connection(ctx, hc), nil
+ return thc.Connection(ctx), nil
}
// getAliasByCell should only be called while holding hc.mu
diff --git a/go/vt/discovery/keyspace_events.go b/go/vt/discovery/keyspace_events.go
index 3de31ea6d9a..1cb44184778 100644
--- a/go/vt/discovery/keyspace_events.go
+++ b/go/vt/discovery/keyspace_events.go
@@ -178,8 +178,12 @@ func (kss *keyspaceState) beingResharded(currentShard string) bool {
}
type shardState struct {
- target *querypb.Target
- serving bool
+ target *querypb.Target
+ serving bool
+ // waitForReparent is used to tell the keyspace event watcher
+ // that this shard should be marked serving only after a reparent
+ // operation has succeeded.
+ waitForReparent bool
externallyReparented int64
currentPrimary *topodatapb.TabletAlias
}
@@ -368,8 +372,34 @@ func (kss *keyspaceState) onHealthCheck(th *TabletHealth) {
// if the shard went from serving to not serving, or the other way around, the keyspace
// is undergoing an availability event
if sstate.serving != th.Serving {
- sstate.serving = th.Serving
kss.consistent = false
+ switch {
+ case th.Serving && sstate.waitForReparent:
+ // While waiting for a reparent, if we receive a serving primary,
+ // we should check if the primary term start time is greater than the externally reparented time.
+ // We mark the shard serving only if it is. This is required so that we don't prematurely stop
+ // buffering for PRS, or TabletExternallyReparented, after seeing a serving healthcheck from the
+ // same old primary tablet that has already been turned read-only.
+ if th.PrimaryTermStartTime > sstate.externallyReparented {
+ sstate.waitForReparent = false
+ sstate.serving = true
+ }
+ case th.Serving && !sstate.waitForReparent:
+ sstate.serving = true
+ case !th.Serving:
+ sstate.serving = false
+ }
+ }
+ if !th.Serving {
+ // Once we have seen a non-serving primary healthcheck, there is no need for us to explicitly wait
+ // for a reparent to happen. We use waitForReparent to ensure that we don't prematurely stop
+ // buffering when we receive a serving healthcheck from the primary that is being demoted.
+ // However, if we receive a non-serving check, then we know that we won't receive any more serving
+ // health checks until reparent finishes. Specifically, this helps us when PRS fails, but
+ // stops gracefully because the new candidate couldn't get caught up in time. In this case, we promote
+ // the previous primary back. Without turning off waitForReparent here, we wouldn't be able to stop
+ // buffering for that case.
+ sstate.waitForReparent = false
}
// if the primary for this shard has been externally reparented, we're undergoing a failover,
@@ -784,3 +814,36 @@ func (kew *KeyspaceEventWatcher) WaitForConsistentKeyspaces(ctx context.Context,
}
}
}
+
+// MarkShardNotServing marks the given shard not serving.
+// We use this when we start buffering for a given shard. This helps
+// coordinate between the sharding logic and the keyspace event watcher.
+// We take in a boolean as well to tell us whether this error is because
+// a reparent is ongoing. If it is, we also mark the shard to wait for a reparent.
+// The return argument is whether the shard was found and marked not serving successfully or not.
+func (kew *KeyspaceEventWatcher) MarkShardNotServing(ctx context.Context, keyspace string, shard string, isReparentErr bool) bool {
+ kss := kew.getKeyspaceStatus(ctx, keyspace)
+ if kss == nil {
+ // Only happens if the keyspace was deleted.
+ return false
+ }
+ kss.mu.Lock()
+ defer kss.mu.Unlock()
+ sstate := kss.shards[shard]
+ if sstate == nil {
+ // This only happens if the shard is deleted, or if
+ // the keyspace event watcher hasn't seen the shard at all.
+ return false
+ }
+ // Mark the keyspace inconsistent and the shard not serving.
+ kss.consistent = false
+ sstate.serving = false
+ if isReparentErr {
+ // If the error was triggered because a reparent operation has started.
+ // We mark the shard to wait for a reparent to finish before marking it serving.
+ // This is required to prevent premature stopping of buffering if we receive
+ // a serving healthcheck from a primary that is being demoted.
+ sstate.waitForReparent = true
+ }
+ return true
+}
diff --git a/go/vt/discovery/keyspace_events_test.go b/go/vt/discovery/keyspace_events_test.go
index df5696841f7..21e0167e5cf 100644
--- a/go/vt/discovery/keyspace_events_test.go
+++ b/go/vt/discovery/keyspace_events_test.go
@@ -414,6 +414,234 @@ func TestWaitForConsistentKeyspaces(t *testing.T) {
}
}
+func TestOnHealthCheck(t *testing.T) {
+ testcases := []struct {
+ name string
+ ss *shardState
+ th *TabletHealth
+ wantServing bool
+ wantWaitForReparent bool
+ wantExternallyReparented int64
+ wantUID uint32
+ }{
+ {
+ name: "Non primary tablet health ignored",
+ ss: &shardState{
+ serving: false,
+ waitForReparent: false,
+ externallyReparented: 10,
+ currentPrimary: &topodatapb.TabletAlias{
+ Cell: testCell,
+ Uid: 1,
+ },
+ },
+ th: &TabletHealth{
+ Target: &querypb.Target{
+ TabletType: topodatapb.TabletType_REPLICA,
+ },
+ Serving: true,
+ },
+ wantServing: false,
+ wantWaitForReparent: false,
+ wantExternallyReparented: 10,
+ wantUID: 1,
+ }, {
+ name: "Serving primary seen in non-serving shard",
+ ss: &shardState{
+ serving: false,
+ waitForReparent: false,
+ externallyReparented: 10,
+ currentPrimary: &topodatapb.TabletAlias{
+ Cell: testCell,
+ Uid: 1,
+ },
+ },
+ th: &TabletHealth{
+ Target: &querypb.Target{
+ TabletType: topodatapb.TabletType_PRIMARY,
+ },
+ Serving: true,
+ PrimaryTermStartTime: 20,
+ Tablet: &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: testCell,
+ Uid: 2,
+ },
+ },
+ },
+ wantServing: true,
+ wantWaitForReparent: false,
+ wantExternallyReparented: 20,
+ wantUID: 2,
+ }, {
+ name: "New serving primary seen while waiting for reparent",
+ ss: &shardState{
+ serving: false,
+ waitForReparent: true,
+ externallyReparented: 10,
+ currentPrimary: &topodatapb.TabletAlias{
+ Cell: testCell,
+ Uid: 1,
+ },
+ },
+ th: &TabletHealth{
+ Target: &querypb.Target{
+ TabletType: topodatapb.TabletType_PRIMARY,
+ },
+ Serving: true,
+ PrimaryTermStartTime: 20,
+ Tablet: &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: testCell,
+ Uid: 2,
+ },
+ },
+ },
+ wantServing: true,
+ wantWaitForReparent: false,
+ wantExternallyReparented: 20,
+ wantUID: 2,
+ }, {
+ name: "Old serving primary seen while waiting for reparent",
+ ss: &shardState{
+ serving: false,
+ waitForReparent: true,
+ externallyReparented: 10,
+ currentPrimary: &topodatapb.TabletAlias{
+ Cell: testCell,
+ Uid: 1,
+ },
+ },
+ th: &TabletHealth{
+ Target: &querypb.Target{
+ TabletType: topodatapb.TabletType_PRIMARY,
+ },
+ Serving: true,
+ PrimaryTermStartTime: 10,
+ Tablet: &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: testCell,
+ Uid: 1,
+ },
+ },
+ },
+ wantServing: false,
+ wantWaitForReparent: true,
+ wantExternallyReparented: 10,
+ wantUID: 1,
+ }, {
+ name: "Old non-serving primary seen while waiting for reparent",
+ ss: &shardState{
+ serving: false,
+ waitForReparent: true,
+ externallyReparented: 10,
+ currentPrimary: &topodatapb.TabletAlias{
+ Cell: testCell,
+ Uid: 1,
+ },
+ },
+ th: &TabletHealth{
+ Target: &querypb.Target{
+ TabletType: topodatapb.TabletType_PRIMARY,
+ },
+ Serving: false,
+ PrimaryTermStartTime: 10,
+ Tablet: &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: testCell,
+ Uid: 1,
+ },
+ },
+ },
+ wantServing: false,
+ wantWaitForReparent: false,
+ wantExternallyReparented: 10,
+ wantUID: 1,
+ }, {
+ name: "New serving primary while already serving",
+ ss: &shardState{
+ serving: true,
+ waitForReparent: false,
+ externallyReparented: 10,
+ currentPrimary: &topodatapb.TabletAlias{
+ Cell: testCell,
+ Uid: 1,
+ },
+ },
+ th: &TabletHealth{
+ Target: &querypb.Target{
+ TabletType: topodatapb.TabletType_PRIMARY,
+ },
+ Serving: true,
+ PrimaryTermStartTime: 20,
+ Tablet: &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: testCell,
+ Uid: 2,
+ },
+ },
+ },
+ wantServing: true,
+ wantWaitForReparent: false,
+ wantExternallyReparented: 20,
+ wantUID: 2,
+ }, {
+ name: "Primary goes non serving",
+ ss: &shardState{
+ serving: true,
+ waitForReparent: false,
+ externallyReparented: 10,
+ currentPrimary: &topodatapb.TabletAlias{
+ Cell: testCell,
+ Uid: 1,
+ },
+ },
+ th: &TabletHealth{
+ Target: &querypb.Target{
+ TabletType: topodatapb.TabletType_PRIMARY,
+ },
+ Serving: false,
+ PrimaryTermStartTime: 10,
+ Tablet: &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: testCell,
+ Uid: 1,
+ },
+ },
+ },
+ wantServing: false,
+ wantWaitForReparent: false,
+ wantExternallyReparented: 10,
+ wantUID: 1,
+ },
+ }
+
+ ksName := "ks"
+ shard := "-80"
+ kss := &keyspaceState{
+ mu: sync.Mutex{},
+ keyspace: ksName,
+ shards: make(map[string]*shardState),
+ }
+ // Adding this so that we don't run any topo calls from ensureConsistentLocked.
+ kss.moveTablesState = &MoveTablesState{
+ Typ: MoveTablesRegular,
+ State: MoveTablesSwitching,
+ }
+ for _, tt := range testcases {
+ t.Run(tt.name, func(t *testing.T) {
+ kss.shards[shard] = tt.ss
+ tt.th.Target.Keyspace = ksName
+ tt.th.Target.Shard = shard
+ kss.onHealthCheck(tt.th)
+ require.Equal(t, tt.wantServing, tt.ss.serving)
+ require.Equal(t, tt.wantWaitForReparent, tt.ss.waitForReparent)
+ require.Equal(t, tt.wantExternallyReparented, tt.ss.externallyReparented)
+ require.Equal(t, tt.wantUID, tt.ss.currentPrimary.Uid)
+ })
+ }
+}
+
type fakeTopoServer struct {
}
diff --git a/go/vt/discovery/tablet_health_check.go b/go/vt/discovery/tablet_health_check.go
index b8b5fa03ee9..dc8ae7d22cb 100644
--- a/go/vt/discovery/tablet_health_check.go
+++ b/go/vt/discovery/tablet_health_check.go
@@ -19,13 +19,11 @@ package discovery
import (
"context"
"fmt"
- "net"
"strings"
"sync"
"sync/atomic"
"time"
- "google.golang.org/grpc"
"google.golang.org/protobuf/proto"
"vitess.io/vitess/go/protoutil"
@@ -42,9 +40,6 @@ import (
"vitess.io/vitess/go/vt/vttablet/tabletconn"
)
-// withDialerContextOnce ensures grpc.WithDialContext() is added once to the options.
-var withDialerContextOnce sync.Once
-
// tabletHealthCheck maintains the health status of a tablet. A map of this
// structure is maintained in HealthCheck.
type tabletHealthCheck struct {
@@ -137,8 +132,8 @@ func (thc *tabletHealthCheck) setServingState(serving bool, reason string) {
}
// stream streams healthcheck responses to callback.
-func (thc *tabletHealthCheck) stream(ctx context.Context, hc *HealthCheckImpl, callback func(*query.StreamHealthResponse) error) error {
- conn := thc.Connection(ctx, hc)
+func (thc *tabletHealthCheck) stream(ctx context.Context, callback func(*query.StreamHealthResponse) error) error {
+ conn := thc.Connection(ctx)
if conn == nil {
// This signals the caller to retry
return nil
@@ -151,34 +146,14 @@ func (thc *tabletHealthCheck) stream(ctx context.Context, hc *HealthCheckImpl, c
return err
}
-func (thc *tabletHealthCheck) Connection(ctx context.Context, hc *HealthCheckImpl) queryservice.QueryService {
+func (thc *tabletHealthCheck) Connection(ctx context.Context) queryservice.QueryService {
thc.connMu.Lock()
defer thc.connMu.Unlock()
- return thc.connectionLocked(ctx, hc)
-}
-
-func healthCheckDialerFactory(hc *HealthCheckImpl) func(ctx context.Context, addr string) (net.Conn, error) {
- return func(ctx context.Context, addr string) (net.Conn, error) {
- // Limit the number of healthcheck connections opened in parallel to avoid high OS-thread
- // usage due to blocking networking syscalls (eg: DNS lookups, TCP connection opens,
- // etc). Without this limit it is possible for vtgates watching >10k tablets to hit
- // the panic: 'runtime: program exceeds 10000-thread limit'.
- if err := hc.healthCheckDialSem.Acquire(ctx, 1); err != nil {
- return nil, err
- }
- defer hc.healthCheckDialSem.Release(1)
- var dialer net.Dialer
- return dialer.DialContext(ctx, "tcp", addr)
- }
+ return thc.connectionLocked(ctx)
}
-func (thc *tabletHealthCheck) connectionLocked(ctx context.Context, hc *HealthCheckImpl) queryservice.QueryService {
+func (thc *tabletHealthCheck) connectionLocked(ctx context.Context) queryservice.QueryService {
if thc.Conn == nil {
- withDialerContextOnce.Do(func() {
- grpcclient.RegisterGRPCDialOptions(func(opts []grpc.DialOption) ([]grpc.DialOption, error) {
- return append(opts, grpc.WithContextDialer(healthCheckDialerFactory(hc))), nil
- })
- })
conn, err := tabletconn.GetDialer()(ctx, thc.Tablet, grpcclient.FailFast(true))
if err != nil {
thc.LastError = err
@@ -308,7 +283,7 @@ func (thc *tabletHealthCheck) checkConn(hc *HealthCheckImpl) {
}()
// Read stream health responses.
- err := thc.stream(streamCtx, hc, func(shr *query.StreamHealthResponse) error {
+ err := thc.stream(streamCtx, func(shr *query.StreamHealthResponse) error {
// We received a message. Reset the back-off.
retryDelay = hc.retryDelay
// Don't block on send to avoid deadlocks.
diff --git a/go/vt/discovery/topology_watcher.go b/go/vt/discovery/topology_watcher.go
index 64346d524ad..d1e358e1aa5 100644
--- a/go/vt/discovery/topology_watcher.go
+++ b/go/vt/discovery/topology_watcher.go
@@ -26,16 +26,13 @@ import (
"sync"
"time"
- "vitess.io/vitess/go/vt/topo/topoproto"
-
- "vitess.io/vitess/go/vt/key"
-
"vitess.io/vitess/go/stats"
"vitess.io/vitess/go/trace"
-
+ "vitess.io/vitess/go/vt/key"
"vitess.io/vitess/go/vt/log"
- "vitess.io/vitess/go/vt/proto/topodata"
+ topodatapb "vitess.io/vitess/go/vt/proto/topodata"
"vitess.io/vitess/go/vt/topo"
+ "vitess.io/vitess/go/vt/topo/topoproto"
)
const (
@@ -56,7 +53,7 @@ var (
// tabletInfo is used internally by the TopologyWatcher struct.
type tabletInfo struct {
alias string
- tablet *topodata.Tablet
+ tablet *topodatapb.Tablet
}
// TopologyWatcher polls the topology periodically for changes to
@@ -70,7 +67,6 @@ type TopologyWatcher struct {
cell string
refreshInterval time.Duration
refreshKnownTablets bool
- concurrency int
ctx context.Context
cancelFunc context.CancelFunc
// wg keeps track of all launched Go routines.
@@ -92,7 +88,7 @@ type TopologyWatcher struct {
// NewTopologyWatcher returns a TopologyWatcher that monitors all
// the tablets in a cell, and reloads them as needed.
-func NewTopologyWatcher(ctx context.Context, topoServer *topo.Server, hc HealthCheck, f TabletFilter, cell string, refreshInterval time.Duration, refreshKnownTablets bool, topoReadConcurrency int) *TopologyWatcher {
+func NewTopologyWatcher(ctx context.Context, topoServer *topo.Server, hc HealthCheck, f TabletFilter, cell string, refreshInterval time.Duration, refreshKnownTablets bool) *TopologyWatcher {
tw := &TopologyWatcher{
topoServer: topoServer,
healthcheck: hc,
@@ -100,7 +96,6 @@ func NewTopologyWatcher(ctx context.Context, topoServer *topo.Server, hc HealthC
cell: cell,
refreshInterval: refreshInterval,
refreshKnownTablets: refreshKnownTablets,
- concurrency: topoReadConcurrency,
tablets: make(map[string]*tabletInfo),
}
tw.firstLoadChan = make(chan struct{})
@@ -112,7 +107,7 @@ func NewTopologyWatcher(ctx context.Context, topoServer *topo.Server, hc HealthC
}
func (tw *TopologyWatcher) getTablets() ([]*topo.TabletInfo, error) {
- return tw.topoServer.GetTabletsByCell(tw.ctx, tw.cell, &topo.GetTabletsByCellOptions{Concurrency: tw.concurrency})
+ return tw.topoServer.GetTabletsByCell(tw.ctx, tw.cell, nil)
}
// Start starts the topology watcher.
@@ -271,14 +266,14 @@ func (tw *TopologyWatcher) TopoChecksum() uint32 {
// to be applied as an additional filter on the list of tablets returned by its getTablets function.
type TabletFilter interface {
// IsIncluded returns whether tablet is included in this filter
- IsIncluded(tablet *topodata.Tablet) bool
+ IsIncluded(tablet *topodatapb.Tablet) bool
}
// TabletFilters contains filters for tablets.
type TabletFilters []TabletFilter
// IsIncluded returns true if a tablet passes all filters.
-func (tf TabletFilters) IsIncluded(tablet *topodata.Tablet) bool {
+func (tf TabletFilters) IsIncluded(tablet *topodatapb.Tablet) bool {
for _, filter := range tf {
if !filter.IsIncluded(tablet) {
return false
@@ -299,7 +294,7 @@ type FilterByShard struct {
type filterShard struct {
keyspace string
shard string
- keyRange *topodata.KeyRange // only set if shard is also a KeyRange
+ keyRange *topodatapb.KeyRange // only set if shard is also a KeyRange
}
// NewFilterByShard creates a new FilterByShard for use by a
@@ -344,7 +339,7 @@ func NewFilterByShard(filters []string) (*FilterByShard, error) {
}
// IsIncluded returns true iff the tablet's keyspace and shard match what we have.
-func (fbs *FilterByShard) IsIncluded(tablet *topodata.Tablet) bool {
+func (fbs *FilterByShard) IsIncluded(tablet *topodatapb.Tablet) bool {
canonical, kr, err := topo.ValidateShardName(tablet.Shard)
if err != nil {
log.Errorf("Error parsing shard name %v, will ignore tablet: %v", tablet.Shard, err)
@@ -384,7 +379,7 @@ func NewFilterByKeyspace(selectedKeyspaces []string) *FilterByKeyspace {
}
// IsIncluded returns true if the tablet's keyspace matches what we have.
-func (fbk *FilterByKeyspace) IsIncluded(tablet *topodata.Tablet) bool {
+func (fbk *FilterByKeyspace) IsIncluded(tablet *topodatapb.Tablet) bool {
_, exist := fbk.keyspaces[tablet.Keyspace]
return exist
}
@@ -403,7 +398,7 @@ func NewFilterByTabletTags(tabletTags map[string]string) *FilterByTabletTags {
}
// IsIncluded returns true if the tablet's tags match what we expect.
-func (fbtg *FilterByTabletTags) IsIncluded(tablet *topodata.Tablet) bool {
+func (fbtg *FilterByTabletTags) IsIncluded(tablet *topodatapb.Tablet) bool {
if fbtg.tags == nil {
return true
}
diff --git a/go/vt/discovery/topology_watcher_test.go b/go/vt/discovery/topology_watcher_test.go
index 4c8f81c6a3e..89a656c0982 100644
--- a/go/vt/discovery/topology_watcher_test.go
+++ b/go/vt/discovery/topology_watcher_test.go
@@ -28,6 +28,7 @@ import (
"google.golang.org/protobuf/proto"
"vitess.io/vitess/go/test/utils"
+ querypb "vitess.io/vitess/go/vt/proto/query"
"vitess.io/vitess/go/vt/logutil"
topodatapb "vitess.io/vitess/go/vt/proto/topodata"
@@ -66,7 +67,7 @@ func TestStartAndCloseTopoWatcher(t *testing.T) {
fhc := NewFakeHealthCheck(nil)
defer fhc.Close()
topologyWatcherOperations.ZeroAll()
- tw := NewTopologyWatcher(context.Background(), ts, fhc, nil, "aa", 100*time.Microsecond, true, 5)
+ tw := NewTopologyWatcher(context.Background(), ts, fhc, nil, "aa", 100*time.Microsecond, true)
done := make(chan bool, 3)
result := make(chan bool, 1)
@@ -126,7 +127,7 @@ func checkWatcher(t *testing.T, refreshKnownTablets bool) {
logger := logutil.NewMemoryLogger()
topologyWatcherOperations.ZeroAll()
counts := topologyWatcherOperations.Counts()
- tw := NewTopologyWatcher(context.Background(), ts, fhc, filter, "aa", 10*time.Minute, refreshKnownTablets, 5)
+ tw := NewTopologyWatcher(context.Background(), ts, fhc, filter, "aa", 10*time.Minute, refreshKnownTablets)
counts = checkOpCounts(t, counts, map[string]int64{})
checkChecksum(t, tw, 0)
@@ -420,7 +421,7 @@ func TestFilterByKeyspace(t *testing.T) {
f := TabletFilters{NewFilterByKeyspace(testKeyspacesToWatch)}
ts := memorytopo.NewServer(ctx, testCell)
defer ts.Close()
- tw := NewTopologyWatcher(context.Background(), ts, hc, f, testCell, 10*time.Minute, true, 5)
+ tw := NewTopologyWatcher(context.Background(), ts, hc, f, testCell, 10*time.Minute, true)
for _, test := range testFilterByKeyspace {
// Add a new tablet to the topology.
@@ -501,7 +502,7 @@ func TestFilterByKeyspaceSkipsIgnoredTablets(t *testing.T) {
topologyWatcherOperations.ZeroAll()
counts := topologyWatcherOperations.Counts()
f := TabletFilters{NewFilterByKeyspace(testKeyspacesToWatch)}
- tw := NewTopologyWatcher(context.Background(), ts, fhc, f, "aa", 10*time.Minute, false /*refreshKnownTablets*/, 5)
+ tw := NewTopologyWatcher(context.Background(), ts, fhc, f, "aa", 10*time.Minute, false /*refreshKnownTablets*/)
counts = checkOpCounts(t, counts, map[string]int64{})
checkChecksum(t, tw, 0)
@@ -638,7 +639,7 @@ func TestGetTabletErrorDoesNotRemoveFromHealthcheck(t *testing.T) {
defer fhc.Close()
topologyWatcherOperations.ZeroAll()
counts := topologyWatcherOperations.Counts()
- tw := NewTopologyWatcher(context.Background(), ts, fhc, nil, "aa", 10*time.Minute, true, 5)
+ tw := NewTopologyWatcher(context.Background(), ts, fhc, nil, "aa", 10*time.Minute, true)
defer tw.Stop()
// Force fallback to getting tablets individually.
@@ -709,3 +710,67 @@ func TestGetTabletErrorDoesNotRemoveFromHealthcheck(t *testing.T) {
assert.True(t, proto.Equal(tablet1, allTablets[key1]))
assert.True(t, proto.Equal(tablet2, allTablets[key2]))
}
+
+// TestDeadlockBetweenTopologyWatcherAndHealthCheck tests the possibility of a deadlock
+// between the topology watcher and the health check.
+// The issue https://github.com/vitessio/vitess/issues/16994 has more details on the deadlock.
+func TestDeadlockBetweenTopologyWatcherAndHealthCheck(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
+
+ // create a new memory topo server and an health check instance.
+ ts, _ := memorytopo.NewServerAndFactory(ctx, "zone-1")
+ hc := NewHealthCheck(ctx, time.Hour, time.Hour, ts, "zone-1", "", nil)
+ defer hc.Close()
+ defer hc.topoWatchers[0].Stop()
+
+ // Add a tablet to the topology.
+ tablet1 := &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone-1",
+ Uid: 100,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ Hostname: "host1",
+ PortMap: map[string]int32{
+ "grpc": 123,
+ },
+ Keyspace: "keyspace",
+ Shard: "shard",
+ }
+ err := ts.CreateTablet(ctx, tablet1)
+ // Run the first loadTablets call to ensure the tablet is present in the topology watcher.
+ hc.topoWatchers[0].loadTablets()
+ require.NoError(t, err)
+
+ // We want to run updateHealth with arguments that always
+ // make it trigger load Tablets.
+ th := &TabletHealth{
+ Tablet: tablet1,
+ Target: &querypb.Target{
+ Keyspace: "keyspace",
+ Shard: "shard",
+ TabletType: topodatapb.TabletType_REPLICA,
+ },
+ }
+ prevTarget := &querypb.Target{
+ Keyspace: "keyspace",
+ Shard: "shard",
+ TabletType: topodatapb.TabletType_PRIMARY,
+ }
+
+ // If we run the updateHealth function often enough, then we
+ // will see the deadlock where the topology watcher is trying to replace
+ // the tablet in the health check, but health check has the mutex acquired
+ // already because it is calling updateHealth.
+ // updateHealth itself will be stuck trying to send on the shared channel.
+ for i := 0; i < 10; i++ {
+ // Update the port of the tablet so that when update Health asks topo watcher to
+ // refresh the tablets, it finds an update and tries to replace it.
+ _, err = ts.UpdateTabletFields(ctx, tablet1.Alias, func(t *topodatapb.Tablet) error {
+ t.PortMap["testing_port"] = int32(i + 1)
+ return nil
+ })
+ require.NoError(t, err)
+ hc.updateHealth(th, prevTarget, false, false)
+ }
+}
diff --git a/go/vt/external/golib/sqlutils/dialect.go b/go/vt/external/golib/sqlutils/dialect.go
deleted file mode 100644
index 8dabe57ccaf..00000000000
--- a/go/vt/external/golib/sqlutils/dialect.go
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- Copyright 2017 GitHub Inc.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-/*
- This file has been copied over from VTOrc package
-*/
-
-package sqlutils
-
-import (
- "regexp"
- "strings"
-)
-
-type regexpMap struct {
- r *regexp.Regexp
- replacement string
-}
-
-func (this *regexpMap) process(text string) (result string) {
- return this.r.ReplaceAllString(text, this.replacement)
-}
-
-func rmap(regexpExpression string, replacement string) regexpMap {
- return regexpMap{
- r: regexp.MustCompile(regexpSpaces(regexpExpression)),
- replacement: replacement,
- }
-}
-
-func regexpSpaces(statement string) string {
- return strings.Replace(statement, " ", `[\s]+`, -1)
-}
-
-func applyConversions(statement string, conversions []regexpMap) string {
- for _, rmap := range conversions {
- statement = rmap.process(statement)
- }
- return statement
-}
diff --git a/go/vt/external/golib/sqlutils/sqlite_dialect.go b/go/vt/external/golib/sqlutils/sqlite_dialect.go
deleted file mode 100644
index 11f0e531367..00000000000
--- a/go/vt/external/golib/sqlutils/sqlite_dialect.go
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- Copyright 2017 GitHub Inc.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-/*
- This file has been copied over from VTOrc package
-*/
-
-// What's this about?
-// This is a brute-force regular-expression based conversion from MySQL syntax to sqlite3 syntax.
-// It is NOT meant to be a general purpose solution and is only expected & confirmed to run on
-// queries issued by orchestrator. There are known limitations to this design.
-// It's not even pretty.
-// In fact...
-// Well, it gets the job done at this time. Call it debt.
-
-package sqlutils
-
-import (
- "regexp"
-)
-
-var sqlite3CreateTableConversions = []regexpMap{
- rmap(`(?i) (character set|charset) [\S]+`, ``),
- rmap(`(?i)int unsigned`, `int`),
- rmap(`(?i)int[\s]*[(][\s]*([0-9]+)[\s]*[)] unsigned`, `int`),
- rmap(`(?i)engine[\s]*=[\s]*(innodb|myisam|ndb|memory|tokudb)`, ``),
- rmap(`(?i)DEFAULT CHARSET[\s]*=[\s]*[\S]+`, ``),
- rmap(`(?i)[\S]*int( not null|) auto_increment`, `integer`),
- rmap(`(?i)comment '[^']*'`, ``),
- rmap(`(?i)after [\S]+`, ``),
- rmap(`(?i)alter table ([\S]+) add (index|key) ([\S]+) (.+)`, `create index ${3}_${1} on $1 $4`),
- rmap(`(?i)alter table ([\S]+) add unique (index|key) ([\S]+) (.+)`, `create unique index ${3}_${1} on $1 $4`),
- rmap(`(?i)([\S]+) enum[\s]*([(].*?[)])`, `$1 text check($1 in $2)`),
- rmap(`(?i)([\s\S]+[/][*] sqlite3-skip [*][/][\s\S]+)`, ``),
- rmap(`(?i)timestamp default current_timestamp`, `timestamp default ('')`),
- rmap(`(?i)timestamp not null default current_timestamp`, `timestamp not null default ('')`),
-
- rmap(`(?i)add column (.*int) not null[\s]*$`, `add column $1 not null default 0`),
- rmap(`(?i)add column (.* text) not null[\s]*$`, `add column $1 not null default ''`),
- rmap(`(?i)add column (.* varchar.*) not null[\s]*$`, `add column $1 not null default ''`),
-}
-
-var sqlite3InsertConversions = []regexpMap{
- rmap(`(?i)insert ignore ([\s\S]+) on duplicate key update [\s\S]+`, `insert or ignore $1`),
- rmap(`(?i)insert ignore`, `insert or ignore`),
- rmap(`(?i)now[(][)]`, `datetime('now')`),
- rmap(`(?i)insert into ([\s\S]+) on duplicate key update [\s\S]+`, `replace into $1`),
-}
-
-var sqlite3GeneralConversions = []regexpMap{
- rmap(`(?i)now[(][)][\s]*[-][\s]*interval [?] ([\w]+)`, `datetime('now', printf('-%d $1', ?))`),
- rmap(`(?i)now[(][)][\s]*[+][\s]*interval [?] ([\w]+)`, `datetime('now', printf('+%d $1', ?))`),
- rmap(`(?i)now[(][)][\s]*[-][\s]*interval ([0-9.]+) ([\w]+)`, `datetime('now', '-${1} $2')`),
- rmap(`(?i)now[(][)][\s]*[+][\s]*interval ([0-9.]+) ([\w]+)`, `datetime('now', '+${1} $2')`),
-
- rmap(`(?i)[=<>\s]([\S]+[.][\S]+)[\s]*[-][\s]*interval [?] ([\w]+)`, ` datetime($1, printf('-%d $2', ?))`),
- rmap(`(?i)[=<>\s]([\S]+[.][\S]+)[\s]*[+][\s]*interval [?] ([\w]+)`, ` datetime($1, printf('+%d $2', ?))`),
-
- rmap(`(?i)unix_timestamp[(][)]`, `strftime('%s', 'now')`),
- rmap(`(?i)unix_timestamp[(]([^)]+)[)]`, `strftime('%s', $1)`),
- rmap(`(?i)now[(][)]`, `datetime('now')`),
- rmap(`(?i)cast[(][\s]*([\S]+) as signed[\s]*[)]`, `cast($1 as integer)`),
-
- rmap(`(?i)\bconcat[(][\s]*([^,)]+)[\s]*,[\s]*([^,)]+)[\s]*[)]`, `($1 || $2)`),
- rmap(`(?i)\bconcat[(][\s]*([^,)]+)[\s]*,[\s]*([^,)]+)[\s]*,[\s]*([^,)]+)[\s]*[)]`, `($1 || $2 || $3)`),
-
- rmap(`(?i) rlike `, ` like `),
-
- rmap(`(?i)create index([\s\S]+)[(][\s]*[0-9]+[\s]*[)]([\s\S]+)`, `create index ${1}${2}`),
- rmap(`(?i)drop index ([\S]+) on ([\S]+)`, `drop index if exists $1`),
-}
-
-var (
- sqlite3IdentifyCreateTableStatement = regexp.MustCompile(regexpSpaces(`(?i)^[\s]*create table`))
- sqlite3IdentifyCreateIndexStatement = regexp.MustCompile(regexpSpaces(`(?i)^[\s]*create( unique|) index`))
- sqlite3IdentifyDropIndexStatement = regexp.MustCompile(regexpSpaces(`(?i)^[\s]*drop index`))
- sqlite3IdentifyAlterTableStatement = regexp.MustCompile(regexpSpaces(`(?i)^[\s]*alter table`))
- sqlite3IdentifyInsertStatement = regexp.MustCompile(regexpSpaces(`(?i)^[\s]*(insert|replace)`))
-)
-
-func IsInsert(statement string) bool {
- return sqlite3IdentifyInsertStatement.MatchString(statement)
-}
-
-func IsCreateTable(statement string) bool {
- return sqlite3IdentifyCreateTableStatement.MatchString(statement)
-}
-
-func IsCreateIndex(statement string) bool {
- return sqlite3IdentifyCreateIndexStatement.MatchString(statement)
-}
-
-func IsDropIndex(statement string) bool {
- return sqlite3IdentifyDropIndexStatement.MatchString(statement)
-}
-
-func IsAlterTable(statement string) bool {
- return sqlite3IdentifyAlterTableStatement.MatchString(statement)
-}
-
-func ToSqlite3CreateTable(statement string) string {
- return applyConversions(statement, sqlite3CreateTableConversions)
-}
-
-func ToSqlite3Insert(statement string) string {
- return applyConversions(statement, sqlite3InsertConversions)
-}
-
-func ToSqlite3Dialect(statement string) (translated string) {
- if IsCreateTable(statement) {
- return ToSqlite3CreateTable(statement)
- }
- if IsAlterTable(statement) {
- return ToSqlite3CreateTable(statement)
- }
- statement = applyConversions(statement, sqlite3GeneralConversions)
- if IsInsert(statement) {
- return ToSqlite3Insert(statement)
- }
- return statement
-}
diff --git a/go/vt/external/golib/sqlutils/sqlite_dialect_test.go b/go/vt/external/golib/sqlutils/sqlite_dialect_test.go
deleted file mode 100644
index 1298c379adf..00000000000
--- a/go/vt/external/golib/sqlutils/sqlite_dialect_test.go
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
- Copyright 2017 GitHub Inc.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-/*
- This file has been copied over from VTOrc package
-*/
-
-package sqlutils
-
-import (
- "regexp"
- "strings"
- "testing"
-
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
-)
-
-var spacesRegexp = regexp.MustCompile(`[\s]+`)
-
-func init() {
-}
-
-func stripSpaces(statement string) string {
- statement = strings.TrimSpace(statement)
- statement = spacesRegexp.ReplaceAllString(statement, " ")
- return statement
-}
-
-func TestIsCreateTable(t *testing.T) {
- require.True(t, IsCreateTable("create table t(id int)"))
- require.True(t, IsCreateTable(" create table t(id int)"))
- require.True(t, IsCreateTable("CREATE TABLE t(id int)"))
- require.True(t, IsCreateTable(`
- create table t(id int)
- `))
- require.False(t, IsCreateTable("where create table t(id int)"))
- require.False(t, IsCreateTable("insert"))
-}
-
-func TestToSqlite3CreateTable(t *testing.T) {
- {
- statement := "create table t(id int)"
- result := ToSqlite3CreateTable(statement)
- require.Equal(t, result, statement)
- }
- {
- statement := "create table t(id int, v varchar(123) CHARACTER SET ascii NOT NULL default '')"
- result := ToSqlite3CreateTable(statement)
- require.Equal(t, result, "create table t(id int, v varchar(123) NOT NULL default '')")
- }
- {
- statement := "create table t(id int, v varchar ( 123 ) CHARACTER SET ascii NOT NULL default '')"
- result := ToSqlite3CreateTable(statement)
- require.Equal(t, result, "create table t(id int, v varchar ( 123 ) NOT NULL default '')")
- }
- {
- statement := "create table t(i smallint unsigned)"
- result := ToSqlite3CreateTable(statement)
- require.Equal(t, result, "create table t(i smallint)")
- }
- {
- statement := "create table t(i smallint(5) unsigned)"
- result := ToSqlite3CreateTable(statement)
- require.Equal(t, result, "create table t(i smallint)")
- }
- {
- statement := "create table t(i smallint ( 5 ) unsigned)"
- result := ToSqlite3CreateTable(statement)
- require.Equal(t, result, "create table t(i smallint)")
- }
-}
-
-func TestToSqlite3AlterTable(t *testing.T) {
- {
- statement := `
- ALTER TABLE
- database_instance
- ADD COLUMN sql_delay INT UNSIGNED NOT NULL AFTER replica_lag_seconds
- `
- result := stripSpaces(ToSqlite3Dialect(statement))
- require.Equal(t, result, stripSpaces(`
- ALTER TABLE
- database_instance
- add column sql_delay int not null default 0
- `))
- }
- {
- statement := `
- ALTER TABLE
- database_instance
- ADD INDEX source_host_port_idx (source_host, source_port)
- `
- result := stripSpaces(ToSqlite3Dialect(statement))
- require.Equal(t, result, stripSpaces(`
- create index
- source_host_port_idx_database_instance
- on database_instance (source_host, source_port)
- `))
- }
- {
- statement := `
- ALTER TABLE
- topology_recovery
- ADD KEY last_detection_idx (last_detection_id)
- `
- result := stripSpaces(ToSqlite3Dialect(statement))
- require.Equal(t, result, stripSpaces(`
- create index
- last_detection_idx_topology_recovery
- on topology_recovery (last_detection_id)
- `))
- }
-
-}
-
-func TestCreateIndex(t *testing.T) {
- {
- statement := `
- create index
- source_host_port_idx_database_instance
- on database_instance (source_host(128), source_port)
- `
- result := stripSpaces(ToSqlite3Dialect(statement))
- require.Equal(t, result, stripSpaces(`
- create index
- source_host_port_idx_database_instance
- on database_instance (source_host, source_port)
- `))
- }
-}
-
-func TestIsInsert(t *testing.T) {
- require.True(t, IsInsert("insert into t"))
- require.True(t, IsInsert("insert ignore into t"))
- require.True(t, IsInsert(`
- insert ignore into t
- `))
- require.False(t, IsInsert("where create table t(id int)"))
- require.False(t, IsInsert("create table t(id int)"))
- require.True(t, IsInsert(`
- insert into
- cluster_domain_name (cluster_name, domain_name, last_registered)
- values
- (?, ?, datetime('now'))
- on duplicate key update
- domain_name=values(domain_name),
- last_registered=values(last_registered)
- `))
-}
-
-func TestToSqlite3Insert(t *testing.T) {
- {
- statement := `
- insert into
- cluster_domain_name (cluster_name, domain_name, last_registered)
- values
- (?, ?, datetime('now'))
- on duplicate key update
- domain_name=values(domain_name),
- last_registered=values(last_registered)
- `
- result := stripSpaces(ToSqlite3Dialect(statement))
- require.Equal(t, result, stripSpaces(`
- replace into
- cluster_domain_name (cluster_name, domain_name, last_registered)
- values
- (?, ?, datetime('now'))
- `))
- }
-}
-
-func TestToSqlite3GeneralConversions(t *testing.T) {
- {
- statement := "select now()"
- result := ToSqlite3Dialect(statement)
- require.Equal(t, result, "select datetime('now')")
- }
- {
- statement := "select now() - interval ? second"
- result := ToSqlite3Dialect(statement)
- require.Equal(t, result, "select datetime('now', printf('-%d second', ?))")
- }
- {
- statement := "select now() + interval ? minute"
- result := ToSqlite3Dialect(statement)
- require.Equal(t, result, "select datetime('now', printf('+%d minute', ?))")
- }
- {
- statement := "select now() + interval 5 minute"
- result := ToSqlite3Dialect(statement)
- require.Equal(t, result, "select datetime('now', '+5 minute')")
- }
- {
- statement := "select some_table.some_column + interval ? minute"
- result := ToSqlite3Dialect(statement)
- require.Equal(t, result, "select datetime(some_table.some_column, printf('+%d minute', ?))")
- }
- {
- statement := "AND primary_instance.last_attempted_check <= primary_instance.last_seen + interval ? minute"
- result := ToSqlite3Dialect(statement)
- require.Equal(t, result, "AND primary_instance.last_attempted_check <= datetime(primary_instance.last_seen, printf('+%d minute', ?))")
- }
- {
- statement := "select concat(primary_instance.port, '') as port"
- result := ToSqlite3Dialect(statement)
- require.Equal(t, result, "select (primary_instance.port || '') as port")
- }
- {
- statement := "select concat( 'abc' , 'def') as s"
- result := ToSqlite3Dialect(statement)
- require.Equal(t, result, "select ('abc' || 'def') as s")
- }
- {
- statement := "select concat( 'abc' , 'def', last.col) as s"
- result := ToSqlite3Dialect(statement)
- require.Equal(t, result, "select ('abc' || 'def' || last.col) as s")
- }
- {
- statement := "select concat(myself.only) as s"
- result := ToSqlite3Dialect(statement)
- require.Equal(t, result, "select concat(myself.only) as s")
- }
- {
- statement := "select concat(1, '2', 3, '4') as s"
- result := ToSqlite3Dialect(statement)
- require.Equal(t, result, "select concat(1, '2', 3, '4') as s")
- }
- {
- statement := "select group_concat( 'abc' , 'def') as s"
- result := ToSqlite3Dialect(statement)
- require.Equal(t, result, "select group_concat( 'abc' , 'def') as s")
- }
-}
-
-func TestIsCreateIndex(t *testing.T) {
- tests := []struct {
- input string
- expected bool
- }{
- {"create index my_index on my_table(column);", true},
- {"CREATE INDEX my_index ON my_table(column);", true},
- {"create unique index my_index on my_table(column);", true},
- {"CREATE UNIQUE INDEX my_index ON my_table(column);", true},
- {"create index my_index on my_table(column) where condition;", true},
- {"create unique index my_index on my_table(column) where condition;", true},
- {"create table my_table(column);", false},
- {"drop index my_index on my_table;", false},
- {"alter table my_table add index my_index (column);", false},
- {"", false},
- }
-
- for _, test := range tests {
- t.Run(test.input, func(t *testing.T) {
- result := IsCreateIndex(test.input)
- assert.Equal(t, test.expected, result)
- })
- }
-}
-
-func TestIsDropIndex(t *testing.T) {
- tests := []struct {
- input string
- expected bool
- }{
- {"drop index my_index on my_table;", true},
- {"DROP INDEX my_index ON my_table;", true},
- {"drop index if exists my_index on my_table;", true},
- {"DROP INDEX IF EXISTS my_index ON my_table;", true},
- {"drop table my_table;", false},
- {"create index my_index on my_table(column);", false},
- {"alter table my_table add index my_index (column);", false},
- {"", false},
- }
-
- for _, test := range tests {
- t.Run(test.input, func(t *testing.T) {
- result := IsDropIndex(test.input)
- assert.Equal(t, test.expected, result)
- })
- }
-}
-
-func TestToSqlite3Dialect(t *testing.T) {
- tests := []struct {
- input string
- expected string
- }{
- {"create table my_table(id int);", "create table my_table(id int);"},
- {"alter table my_table add column new_col int;", "alter table my_table add column new_col int;"},
- {"insert into my_table values (1);", "insert into my_table values (1);"},
- {"", ""},
- }
-
- for _, test := range tests {
- t.Run(test.input, func(t *testing.T) {
- result := ToSqlite3Dialect(test.input)
- assert.Equal(t, test.expected, result)
- })
- }
-}
diff --git a/go/vt/grpcclient/client.go b/go/vt/grpcclient/client.go
index b8a8847ac4f..938da95bce6 100644
--- a/go/vt/grpcclient/client.go
+++ b/go/vt/grpcclient/client.go
@@ -21,12 +21,14 @@ package grpcclient
import (
"context"
"crypto/tls"
+ "net"
"sync"
"time"
grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware"
grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
"github.com/spf13/pflag"
+ "golang.org/x/sync/semaphore"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"google.golang.org/grpc/credentials/insecure"
@@ -46,6 +48,10 @@ var (
initialConnWindowSize int
initialWindowSize int
+ // `dialConcurrencyLimit` tells us how many tablet grpc connections can be dialed concurrently.
+ // This should be less than the golang max thread limit of 10000.
+ dialConcurrencyLimit int64 = 1024
+
// every vitess binary that makes grpc client-side calls.
grpcclientBinaries = []string{
"mysqlctld",
@@ -74,10 +80,33 @@ func RegisterFlags(fs *pflag.FlagSet) {
fs.StringVar(&credsFile, "grpc_auth_static_client_creds", credsFile, "When using grpc_static_auth in the server, this file provides the credentials to use to authenticate with server.")
}
+func RegisterDeprecatedDialConcurrencyFlagsHealthcheck(fs *pflag.FlagSet) {
+ fs.Int64Var(&dialConcurrencyLimit, "healthcheck-dial-concurrency", 1024, "Maximum concurrency of new healthcheck connections. This should be less than the golang max thread limit of 10000.")
+ fs.MarkDeprecated("healthcheck-dial-concurrency", "This option is deprecated and will be removed in a future release. Use --grpc-dial-concurrency-limit instead.")
+}
+
+func RegisterDeprecatedDialConcurrencyFlagsHealthcheckForVtcombo(fs *pflag.FlagSet) {
+ fs.Int64Var(&dialConcurrencyLimit, "healthcheck-dial-concurrency", 1024, "Maximum concurrency of new healthcheck connections. This should be less than the golang max thread limit of 10000.")
+ fs.MarkDeprecated("healthcheck-dial-concurrency", "This option is deprecated and will be removed in a future release.")
+}
+
+func RegisterDialConcurrencyFlags(fs *pflag.FlagSet) {
+ fs.Int64Var(&dialConcurrencyLimit, "grpc-dial-concurrency-limit", 1024, "Maximum concurrency of grpc dial operations. This should be less than the golang max thread limit of 10000.")
+}
+
func init() {
for _, cmd := range grpcclientBinaries {
servenv.OnParseFor(cmd, RegisterFlags)
+
+ if cmd == "vtgate" || cmd == "vtctld" {
+ servenv.OnParseFor(cmd, RegisterDeprecatedDialConcurrencyFlagsHealthcheck)
+ }
+
+ servenv.OnParseFor(cmd, RegisterDialConcurrencyFlags)
}
+
+ // vtcombo doesn't really use grpc, but we need to expose this flag for backwards compat
+ servenv.OnParseFor("vtcombo", RegisterDeprecatedDialConcurrencyFlagsHealthcheckForVtcombo)
}
// FailFast is a self-documenting type for the grpc.FailFast.
@@ -129,6 +158,10 @@ func DialContext(ctx context.Context, target string, failFast FailFast, opts ...
newopts = append(newopts, grpc.WithInitialWindowSize(int32(initialWindowSize)))
}
+ if dialConcurrencyLimit > 0 {
+ newopts = append(newopts, dialConcurrencyLimitOption())
+ }
+
newopts = append(newopts, opts...)
var err error
grpcDialOptionsMu.Lock()
@@ -175,6 +208,35 @@ func SecureDialOption(cert, key, ca, crl, name string) (grpc.DialOption, error)
return grpc.WithTransportCredentials(creds), nil
}
+var dialConcurrencyLimitOpt grpc.DialOption
+
+// withDialerContextOnce ensures grpc.WithDialContext() is added once to the options.
+var dialConcurrencyLimitOnce sync.Once
+
+func dialConcurrencyLimitOption() grpc.DialOption {
+ dialConcurrencyLimitOnce.Do(func() {
+ // This semaphore is used to limit how many grpc connections can be dialed to tablets simultanously.
+ // This does not limit how many tablet connections can be open at the same time.
+ sem := semaphore.NewWeighted(dialConcurrencyLimit)
+
+ dialConcurrencyLimitOpt = grpc.WithContextDialer(func(ctx context.Context, addr string) (net.Conn, error) {
+ // Limit the number of grpc connections opened in parallel to avoid high OS-thread
+ // usage due to blocking networking syscalls (eg: DNS lookups, TCP connection opens,
+ // etc). Without this limit it is possible for vtgates watching >10k tablets to hit
+ // the panic: 'runtime: program exceeds 10000-thread limit'.
+ if err := sem.Acquire(ctx, 1); err != nil {
+ return nil, err
+ }
+ defer sem.Release(1)
+
+ var dialer net.Dialer
+ return dialer.DialContext(ctx, "tcp", addr)
+ })
+ })
+
+ return dialConcurrencyLimitOpt
+}
+
// Allows for building a chain of interceptors without knowing the total size up front
type clientInterceptorBuilder struct {
unaryInterceptors []grpc.UnaryClientInterceptor
diff --git a/go/vt/logutil/logger.go b/go/vt/logutil/logger.go
index 47c3f124238..46d7c0052da 100644
--- a/go/vt/logutil/logger.go
+++ b/go/vt/logutil/logger.go
@@ -20,6 +20,7 @@ import (
"fmt"
"io"
"runtime"
+ "slices"
"strings"
"sync"
"time"
@@ -246,6 +247,12 @@ func (ml *MemoryLogger) Clear() {
ml.mu.Unlock()
}
+func (ml *MemoryLogger) LogEvents() []*logutilpb.Event {
+ ml.mu.Lock()
+ defer ml.mu.Unlock()
+ return slices.Clone(ml.Events)
+}
+
// LoggerWriter is an adapter that implements the io.Writer interface.
type LoggerWriter struct {
logger Logger
diff --git a/go/vt/mysqlctl/azblobbackupstorage/azblob.go b/go/vt/mysqlctl/azblobbackupstorage/azblob.go
index 3ba6b187a2f..dbd146495e8 100644
--- a/go/vt/mysqlctl/azblobbackupstorage/azblob.go
+++ b/go/vt/mysqlctl/azblobbackupstorage/azblob.go
@@ -32,8 +32,9 @@ import (
"github.com/Azure/azure-storage-blob-go/azblob"
"github.com/spf13/pflag"
+ "vitess.io/vitess/go/vt/mysqlctl/errors"
+
"vitess.io/vitess/go/viperutil"
- "vitess.io/vitess/go/vt/concurrency"
"vitess.io/vitess/go/vt/log"
"vitess.io/vitess/go/vt/mysqlctl/backupstorage"
"vitess.io/vitess/go/vt/servenv"
@@ -203,9 +204,9 @@ type AZBlobBackupHandle struct {
name string
readOnly bool
waitGroup sync.WaitGroup
- errors concurrency.AllErrorRecorder
ctx context.Context
cancel context.CancelFunc
+ errors.PerFileErrorRecorder
}
// Directory implements BackupHandle.
@@ -218,21 +219,6 @@ func (bh *AZBlobBackupHandle) Name() string {
return bh.name
}
-// RecordError is part of the concurrency.ErrorRecorder interface.
-func (bh *AZBlobBackupHandle) RecordError(err error) {
- bh.errors.RecordError(err)
-}
-
-// HasErrors is part of the concurrency.ErrorRecorder interface.
-func (bh *AZBlobBackupHandle) HasErrors() bool {
- return bh.errors.HasErrors()
-}
-
-// Error is part of the concurrency.ErrorRecorder interface.
-func (bh *AZBlobBackupHandle) Error() error {
- return bh.errors.Error()
-}
-
// AddFile implements BackupHandle.
func (bh *AZBlobBackupHandle) AddFile(ctx context.Context, filename string, filesize int64) (io.WriteCloser, error) {
if bh.readOnly {
@@ -263,7 +249,7 @@ func (bh *AZBlobBackupHandle) AddFile(ctx context.Context, filename string, file
})
if err != nil {
reader.CloseWithError(err)
- bh.RecordError(err)
+ bh.RecordError(filename, err)
}
}()
diff --git a/go/vt/mysqlctl/backupengine.go b/go/vt/mysqlctl/backupengine.go
index fb3d0e2d125..eeb14039d01 100644
--- a/go/vt/mysqlctl/backupengine.go
+++ b/go/vt/mysqlctl/backupengine.go
@@ -272,7 +272,7 @@ func getBackupManifestInto(ctx context.Context, backup backupstorage.BackupHandl
if err := json.NewDecoder(file).Decode(outManifest); err != nil {
return vterrors.Wrap(err, "can't decode MANIFEST")
}
- return nil
+ return backup.Error()
}
// IncrementalBackupDetails lists some incremental backup specific information
diff --git a/go/vt/mysqlctl/backupstorage/interface.go b/go/vt/mysqlctl/backupstorage/interface.go
index 92bc71d63aa..4fd37b3163a 100644
--- a/go/vt/mysqlctl/backupstorage/interface.go
+++ b/go/vt/mysqlctl/backupstorage/interface.go
@@ -25,7 +25,8 @@ import (
"github.com/spf13/pflag"
- "vitess.io/vitess/go/vt/concurrency"
+ "vitess.io/vitess/go/vt/mysqlctl/errors"
+
"vitess.io/vitess/go/vt/servenv"
)
@@ -89,9 +90,9 @@ type BackupHandle interface {
// ReadCloser is closed.
ReadFile(ctx context.Context, filename string) (io.ReadCloser, error)
- // concurrency.ErrorRecorder is embedded here to coordinate reporting and
- // handling of errors among all the components involved in taking a backup.
- concurrency.ErrorRecorder
+ // BackupErrorRecorder is embedded here to coordinate reporting and
+ // handling of errors among all the components involved in taking/restoring a backup.
+ errors.BackupErrorRecorder
}
// BackupStorage is the interface to the storage system
diff --git a/go/vt/mysqlctl/blackbox/backup_race_test.go b/go/vt/mysqlctl/blackbox/backup_race_test.go
new file mode 100644
index 00000000000..fd39dfe4b06
--- /dev/null
+++ b/go/vt/mysqlctl/blackbox/backup_race_test.go
@@ -0,0 +1,152 @@
+//go:build !race
+
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+// Package blackbox is the blackbox tests for package mysqlctl.
+package blackbox
+
+import (
+ "fmt"
+ "os"
+ "path"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+
+ "vitess.io/vitess/go/mysql"
+ "vitess.io/vitess/go/mysql/fakesqldb"
+ "vitess.io/vitess/go/test/utils"
+ "vitess.io/vitess/go/vt/logutil"
+ "vitess.io/vitess/go/vt/mysqlctl"
+ "vitess.io/vitess/go/vt/mysqlctl/backupstats"
+ "vitess.io/vitess/go/vt/mysqlctl/filebackupstorage"
+ "vitess.io/vitess/go/vt/proto/topodata"
+ "vitess.io/vitess/go/vt/proto/vttime"
+ "vitess.io/vitess/go/vt/topo"
+ "vitess.io/vitess/go/vt/topo/memorytopo"
+)
+
+// This test triggers a certain code path that only happens when a backup file fails to be backed up,
+// only and only if, all the other backup files have either started or finished. When we reach
+// this scenario, files no longer try to acquire the semaphore and thus the backup cannot fail
+// because of context deadline when acquiring it. At this point, the only place where the backup
+// can fail, is if the return of be.backupFiles fails, and we record the error correctly.
+// This test specifically test this scenario and arose because of issue https://github.com/vitessio/vitess/issues/17063
+// The test does:
+// 1. Create the backup and data directory
+// 2. Create a keyspace and shard
+// 3. Already create the last backup file that would be created
+// 4. Remove all permissions on this file
+// 5. Execute the restore
+// 6. The restore must fail due to an error on file number 3 ("cannot add file: 3")
+//
+// This test is extracted into its own file that won't be run if we do 'go test -race' as this test
+// exposes an old race condition that will be fixed after https://github.com/vitessio/vitess/pull/17062
+// Link to the race condition issue: https://github.com/vitessio/vitess/issues/17065
+func TestExecuteBackupWithFailureOnLastFile(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
+
+ // Set up local backup directory
+ id := fmt.Sprintf("%d", time.Now().UnixNano())
+ backupRoot := fmt.Sprintf("testdata/builtinbackup_test_%s", id)
+ filebackupstorage.FileBackupStorageRoot = backupRoot
+ require.NoError(t, createBackupDir(backupRoot, "innodb", "log", "datadir"))
+ dataDir := path.Join(backupRoot, "datadir")
+ // Add some files under data directory to force backup to execute semaphore acquire inside
+ // backupFiles() method (https://github.com/vitessio/vitess/blob/main/go/vt/mysqlctl/builtinbackupengine.go#L483).
+ require.NoError(t, createBackupDir(dataDir, "test1"))
+ require.NoError(t, createBackupDir(dataDir, "test2"))
+ require.NoError(t, createBackupFiles(path.Join(dataDir, "test1"), 2, "ibd"))
+ require.NoError(t, createBackupFiles(path.Join(dataDir, "test2"), 2, "ibd"))
+ defer os.RemoveAll(backupRoot)
+
+ needIt, err := NeedInnoDBRedoLogSubdir()
+ require.NoError(t, err)
+ if needIt {
+ fpath := path.Join("log", mysql.DynamicRedoLogSubdir)
+ if err := createBackupDir(backupRoot, fpath); err != nil {
+ require.Failf(t, err.Error(), "failed to create directory: %s", fpath)
+ }
+ }
+
+ // Set up topo
+ keyspace, shard := "mykeyspace", "-"
+ ts := memorytopo.NewServer(ctx, "cell1")
+ defer ts.Close()
+
+ require.NoError(t, ts.CreateKeyspace(ctx, keyspace, &topodata.Keyspace{}))
+ require.NoError(t, ts.CreateShard(ctx, keyspace, shard))
+
+ tablet := topo.NewTablet(100, "cell1", "mykeyspace-00-80-0100")
+ tablet.Keyspace = keyspace
+ tablet.Shard = shard
+
+ require.NoError(t, ts.CreateTablet(ctx, tablet))
+
+ _, err = ts.UpdateShardFields(ctx, keyspace, shard, func(si *topo.ShardInfo) error {
+ si.PrimaryAlias = &topodata.TabletAlias{Uid: 100, Cell: "cell1"}
+
+ now := time.Now()
+ si.PrimaryTermStartTime = &vttime.Time{Seconds: int64(now.Second()), Nanoseconds: int32(now.Nanosecond())}
+
+ return nil
+ })
+
+ require.NoError(t, err)
+
+ be := &mysqlctl.BuiltinBackupEngine{}
+ bh := filebackupstorage.NewBackupHandle(nil, "", "", false)
+ // Spin up a fake daemon to be used in backups. It needs to be allowed to receive:
+ // "STOP REPLICA", "START REPLICA", in that order.
+ fakedb := fakesqldb.New(t)
+ defer fakedb.Close()
+ mysqld := mysqlctl.NewFakeMysqlDaemon(fakedb)
+ defer mysqld.Close()
+ mysqld.ExpectedExecuteSuperQueryList = []string{"STOP REPLICA", "START REPLICA"}
+
+ // With this setup, 4 backup files will be created (0, 1, 2, 3). For the last file (3), we create
+ // it in advance and remove all permission on the file so that the backup be.ExecuteBackup will not
+ // be able to override the file and thus will fail. Triggering the error mechanism after calling be.backupFile.
+ lastBackupFile := path.Join(backupRoot, "3")
+ f, err := os.Create(lastBackupFile)
+ require.NoError(t, err)
+ _, err = f.Write(make([]byte, 1024))
+ require.NoError(t, err)
+ require.NoError(t, f.Chmod(0444))
+ require.NoError(t, f.Close())
+
+ backupResult, err := be.ExecuteBackup(ctx, mysqlctl.BackupParams{
+ Logger: logutil.NewConsoleLogger(),
+ Mysqld: mysqld,
+ Cnf: &mysqlctl.Mycnf{
+ InnodbDataHomeDir: path.Join(backupRoot, "innodb"),
+ InnodbLogGroupHomeDir: path.Join(backupRoot, "log"),
+ DataDir: path.Join(backupRoot, "datadir"),
+ },
+ Stats: backupstats.NewFakeStats(),
+ Concurrency: 4,
+ HookExtraEnv: map[string]string{},
+ TopoServer: ts,
+ Keyspace: keyspace,
+ Shard: shard,
+ MysqlShutdownTimeout: MysqlShutdownTimeout,
+ }, bh)
+
+ require.ErrorContains(t, err, "cannot add file: 3")
+ require.Equal(t, mysqlctl.BackupUnusable, backupResult)
+}
diff --git a/go/vt/mysqlctl/backup_blackbox_test.go b/go/vt/mysqlctl/blackbox/backup_test.go
similarity index 57%
rename from go/vt/mysqlctl/backup_blackbox_test.go
rename to go/vt/mysqlctl/blackbox/backup_test.go
index 15244fb8782..b7e35304904 100644
--- a/go/vt/mysqlctl/backup_blackbox_test.go
+++ b/go/vt/mysqlctl/blackbox/backup_test.go
@@ -14,12 +14,15 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-// Package mysqlctl_test is the blackbox tests for package mysqlctl.
-package mysqlctl_test
+// Package blackbox is the blackbox tests for package mysqlctl.
+package blackbox
import (
+ "bytes"
"context"
+ "errors"
"fmt"
+ "io"
"os"
"path"
"strings"
@@ -31,7 +34,6 @@ import (
"vitess.io/vitess/go/test/utils"
- "vitess.io/vitess/go/mysql/capabilities"
"vitess.io/vitess/go/mysql/replication"
"vitess.io/vitess/go/sqltypes"
@@ -48,40 +50,6 @@ import (
"vitess.io/vitess/go/vt/topo/memorytopo"
)
-const mysqlShutdownTimeout = 1 * time.Minute
-
-func setBuiltinBackupMysqldDeadline(t time.Duration) time.Duration {
- old := mysqlctl.BuiltinBackupMysqldTimeout
- mysqlctl.BuiltinBackupMysqldTimeout = t
-
- return old
-}
-
-func createBackupDir(root string, dirs ...string) error {
- for _, dir := range dirs {
- if err := os.MkdirAll(path.Join(root, dir), 0755); err != nil {
- return err
- }
- }
-
- return nil
-}
-
-func createBackupFiles(root string, fileCount int, ext string) error {
- for i := 0; i < fileCount; i++ {
- f, err := os.Create(path.Join(root, fmt.Sprintf("%d.%s", i, ext)))
- if err != nil {
- return err
- }
- if _, err := f.Write([]byte("hello, world!")); err != nil {
- return err
- }
- defer f.Close()
- }
-
- return nil
-}
-
func TestExecuteBackup(t *testing.T) {
ctx := utils.LeakCheckContext(t)
@@ -97,7 +65,7 @@ func TestExecuteBackup(t *testing.T) {
require.NoError(t, createBackupFiles(path.Join(dataDir, "test2"), 2, "ibd"))
defer os.RemoveAll(backupRoot)
- needIt, err := needInnoDBRedoLogSubdir()
+ needIt, err := NeedInnoDBRedoLogSubdir()
require.NoError(t, err)
if needIt {
fpath := path.Join("log", mysql.DynamicRedoLogSubdir)
@@ -133,8 +101,8 @@ func TestExecuteBackup(t *testing.T) {
be := &mysqlctl.BuiltinBackupEngine{}
// Configure a tight deadline to force a timeout
- oldDeadline := setBuiltinBackupMysqldDeadline(time.Second)
- defer setBuiltinBackupMysqldDeadline(oldDeadline)
+ oldDeadline := SetBuiltinBackupMysqldDeadline(time.Second)
+ defer SetBuiltinBackupMysqldDeadline(oldDeadline)
bh := filebackupstorage.NewBackupHandle(nil, "", "", false)
@@ -163,7 +131,7 @@ func TestExecuteBackup(t *testing.T) {
Keyspace: keyspace,
Shard: shard,
Stats: fakeStats,
- MysqlShutdownTimeout: mysqlShutdownTimeout,
+ MysqlShutdownTimeout: MysqlShutdownTimeout,
}, bh)
require.NoError(t, err)
@@ -221,7 +189,7 @@ func TestExecuteBackup(t *testing.T) {
TopoServer: ts,
Keyspace: keyspace,
Shard: shard,
- MysqlShutdownTimeout: mysqlShutdownTimeout,
+ MysqlShutdownTimeout: MysqlShutdownTimeout,
}, bh)
assert.Error(t, err)
@@ -243,7 +211,7 @@ func TestExecuteBackupWithSafeUpgrade(t *testing.T) {
require.NoError(t, createBackupFiles(path.Join(dataDir, "test2"), 2, "ibd"))
defer os.RemoveAll(backupRoot)
- needIt, err := needInnoDBRedoLogSubdir()
+ needIt, err := NeedInnoDBRedoLogSubdir()
require.NoError(t, err)
if needIt {
fpath := path.Join("log", mysql.DynamicRedoLogSubdir)
@@ -279,8 +247,8 @@ func TestExecuteBackupWithSafeUpgrade(t *testing.T) {
be := &mysqlctl.BuiltinBackupEngine{}
// Configure a tight deadline to force a timeout
- oldDeadline := setBuiltinBackupMysqldDeadline(time.Second)
- defer setBuiltinBackupMysqldDeadline(oldDeadline)
+ oldDeadline := SetBuiltinBackupMysqldDeadline(time.Second)
+ defer SetBuiltinBackupMysqldDeadline(oldDeadline)
bh := filebackupstorage.NewBackupHandle(nil, "", "", false)
@@ -310,7 +278,7 @@ func TestExecuteBackupWithSafeUpgrade(t *testing.T) {
Shard: shard,
Stats: backupstats.NewFakeStats(),
UpgradeSafe: true,
- MysqlShutdownTimeout: mysqlShutdownTimeout,
+ MysqlShutdownTimeout: MysqlShutdownTimeout,
}, bh)
require.NoError(t, err)
@@ -336,7 +304,7 @@ func TestExecuteBackupWithCanceledContext(t *testing.T) {
require.NoError(t, createBackupFiles(path.Join(dataDir, "test2"), 2, "ibd"))
defer os.RemoveAll(backupRoot)
- needIt, err := needInnoDBRedoLogSubdir()
+ needIt, err := NeedInnoDBRedoLogSubdir()
require.NoError(t, err)
if needIt {
fpath := path.Join("log", mysql.DynamicRedoLogSubdir)
@@ -397,12 +365,12 @@ func TestExecuteBackupWithCanceledContext(t *testing.T) {
TopoServer: ts,
Keyspace: keyspace,
Shard: shard,
- MysqlShutdownTimeout: mysqlShutdownTimeout,
+ MysqlShutdownTimeout: MysqlShutdownTimeout,
}, bh)
require.Error(t, err)
// all four files will fail
- require.ErrorContains(t, err, "context canceled;context canceled;context canceled;context canceled")
+ require.ErrorContains(t, err, "context canceled; context canceled; context canceled; context canceled")
assert.Equal(t, mysqlctl.BackupUnusable, backupResult)
}
@@ -425,7 +393,7 @@ func TestExecuteRestoreWithTimedOutContext(t *testing.T) {
require.NoError(t, createBackupFiles(path.Join(dataDir, "test2"), 2, "ibd"))
defer os.RemoveAll(backupRoot)
- needIt, err := needInnoDBRedoLogSubdir()
+ needIt, err := NeedInnoDBRedoLogSubdir()
require.NoError(t, err)
if needIt {
fpath := path.Join("log", mysql.DynamicRedoLogSubdir)
@@ -482,7 +450,7 @@ func TestExecuteRestoreWithTimedOutContext(t *testing.T) {
TopoServer: ts,
Keyspace: keyspace,
Shard: shard,
- MysqlShutdownTimeout: mysqlShutdownTimeout,
+ MysqlShutdownTimeout: MysqlShutdownTimeout,
}, bh)
require.NoError(t, err)
@@ -521,7 +489,7 @@ func TestExecuteRestoreWithTimedOutContext(t *testing.T) {
RestoreToTimestamp: time.Time{},
DryRun: false,
Stats: fakeStats,
- MysqlShutdownTimeout: mysqlShutdownTimeout,
+ MysqlShutdownTimeout: MysqlShutdownTimeout,
}
// Successful restore.
@@ -587,24 +555,374 @@ func TestExecuteRestoreWithTimedOutContext(t *testing.T) {
}
}
-// needInnoDBRedoLogSubdir indicates whether we need to create a redo log subdirectory.
-// Starting with MySQL 8.0.30, the InnoDB redo logs are stored in a subdirectory of the
-// (/. by default) called "#innodb_redo". See:
-//
-// https://dev.mysql.com/doc/refman/8.0/en/innodb-redo-log.html#innodb-modifying-redo-log-capacity
-func needInnoDBRedoLogSubdir() (needIt bool, err error) {
- mysqldVersionStr, err := mysqlctl.GetVersionString()
- if err != nil {
- return needIt, err
+type rwCloseFailFirstCall struct {
+ *bytes.Buffer
+ firstDone bool
+}
+
+func (w *rwCloseFailFirstCall) Write(p []byte) (n int, err error) {
+ if w.firstDone {
+ return w.Buffer.Write(p)
}
- _, sv, err := mysqlctl.ParseVersionString(mysqldVersionStr)
- if err != nil {
- return needIt, err
+ w.firstDone = true
+ return 0, errors.New("failing first write")
+}
+
+func (w *rwCloseFailFirstCall) Read(p []byte) (n int, err error) {
+ if w.firstDone {
+ return w.Buffer.Read(p)
}
- versionStr := fmt.Sprintf("%d.%d.%d", sv.Major, sv.Minor, sv.Patch)
- capableOf := mysql.ServerVersionCapableOf(versionStr)
- if capableOf == nil {
- return needIt, fmt.Errorf("cannot determine database flavor details for version %s", versionStr)
+ w.firstDone = true
+ return 0, errors.New("failing first read")
+}
+
+func (w *rwCloseFailFirstCall) Close() error {
+ return nil
+}
+
+func newWriteCloseFailFirstWrite(firstWriteDone bool) *rwCloseFailFirstCall {
+ return &rwCloseFailFirstCall{
+ Buffer: bytes.NewBuffer(nil),
+ firstDone: firstWriteDone,
}
- return capableOf(capabilities.DynamicRedoLogCapacityFlavorCapability)
+}
+
+func TestExecuteBackupFailToWriteEachFileOnlyOnce(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
+ backupRoot, keyspace, shard, ts := SetupCluster(ctx, t, 2, 2)
+
+ bufferPerFiles := make(map[string]*rwCloseFailFirstCall)
+ be := &mysqlctl.BuiltinBackupEngine{}
+ bh := &mysqlctl.FakeBackupHandle{}
+ bh.AddFileReturnF = func(filename string) mysqlctl.FakeBackupHandleAddFileReturn {
+ // This mimics what happens with the other BackupHandles where doing AddFile will either truncate or override
+ // any existing data if the same filename already exists.
+ _, isRetry := bufferPerFiles[filename]
+ newBuffer := newWriteCloseFailFirstWrite(isRetry)
+ bufferPerFiles[filename] = newBuffer
+ return mysqlctl.FakeBackupHandleAddFileReturn{WriteCloser: newBuffer}
+ }
+
+ // Spin up a fake daemon to be used in backups. It needs to be allowed to receive:
+ // "STOP REPLICA", "START REPLICA", in that order.
+ fakedb := fakesqldb.New(t)
+ defer fakedb.Close()
+ mysqld := mysqlctl.NewFakeMysqlDaemon(fakedb)
+ defer mysqld.Close()
+ mysqld.ExpectedExecuteSuperQueryList = []string{"STOP REPLICA", "START REPLICA"}
+
+ logger := logutil.NewMemoryLogger()
+ ctx, cancel := context.WithCancel(ctx)
+ backupResult, err := be.ExecuteBackup(ctx, mysqlctl.BackupParams{
+ Logger: logger,
+ Mysqld: mysqld,
+ Cnf: &mysqlctl.Mycnf{
+ InnodbDataHomeDir: path.Join(backupRoot, "innodb"),
+ InnodbLogGroupHomeDir: path.Join(backupRoot, "log"),
+ DataDir: path.Join(backupRoot, "datadir"),
+ },
+ Stats: backupstats.NewFakeStats(),
+ Concurrency: 1,
+ HookExtraEnv: map[string]string{},
+ TopoServer: ts,
+ Keyspace: keyspace,
+ Shard: shard,
+ MysqlShutdownTimeout: MysqlShutdownTimeout,
+ }, bh)
+ cancel()
+
+ expectedLogs := []string{
+ "Backing up file: test1/0.ibd (attempt 1/2)",
+ "Backing up file: test1/1.ibd (attempt 1/2)",
+ "Backing up file: test2/0.ibd (attempt 1/2)",
+ "Backing up file: test2/1.ibd (attempt 1/2)",
+
+ "Backing up file: test1/0.ibd (attempt 2/2)",
+ "Backing up file: test1/1.ibd (attempt 2/2)",
+ "Backing up file: test2/0.ibd (attempt 2/2)",
+ "Backing up file: test2/1.ibd (attempt 2/2)",
+
+ "Backing up file MANIFEST (attempt 1/2)",
+ "Failed backing up MANIFEST (attempt 1/2)",
+ "Backing up file MANIFEST (attempt 2/2)",
+ "Completed backing up MANIFEST (attempt 2/2)",
+ }
+
+ // Sleep just long enough for everything to complete.
+ // It's not flaky, the race detector detects a race when there isn't,
+ // the machine is just too slow to propagate the ctxCancel() to all goroutines.
+ time.Sleep(2 * time.Second)
+ AssertLogs(t, expectedLogs, logger)
+
+ require.NoError(t, err)
+ require.Equal(t, mysqlctl.BackupUsable, backupResult)
+}
+
+func TestExecuteBackupFailToWriteFileTwice(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
+ backupRoot, keyspace, shard, ts := SetupCluster(ctx, t, 1, 1)
+
+ bufferPerFiles := make(map[string]*rwCloseFailFirstCall)
+ be := &mysqlctl.BuiltinBackupEngine{}
+ bh := &mysqlctl.FakeBackupHandle{}
+ bh.AddFileReturnF = func(filename string) mysqlctl.FakeBackupHandleAddFileReturn {
+ newBuffer := newWriteCloseFailFirstWrite(false)
+ bufferPerFiles[filename] = newBuffer
+
+ return mysqlctl.FakeBackupHandleAddFileReturn{WriteCloser: newBuffer}
+ }
+
+ // Spin up a fake daemon to be used in backups. It needs to be allowed to receive:
+ // "STOP REPLICA", "START REPLICA", in that order.
+ fakedb := fakesqldb.New(t)
+ defer fakedb.Close()
+ mysqld := mysqlctl.NewFakeMysqlDaemon(fakedb)
+ defer mysqld.Close()
+ mysqld.ExpectedExecuteSuperQueryList = []string{"STOP REPLICA", "START REPLICA"}
+
+ logger := logutil.NewMemoryLogger()
+ fakeStats := backupstats.NewFakeStats()
+ ctx, cancel := context.WithCancel(ctx)
+ backupResult, err := be.ExecuteBackup(ctx, mysqlctl.BackupParams{
+ Logger: logger,
+ Mysqld: mysqld,
+ Cnf: &mysqlctl.Mycnf{
+ InnodbDataHomeDir: path.Join(backupRoot, "innodb"),
+ InnodbLogGroupHomeDir: path.Join(backupRoot, "log"),
+ DataDir: path.Join(backupRoot, "datadir"),
+ },
+ Stats: fakeStats,
+ Concurrency: 1,
+ HookExtraEnv: map[string]string{},
+ TopoServer: ts,
+ Keyspace: keyspace,
+ Shard: shard,
+ MysqlShutdownTimeout: MysqlShutdownTimeout,
+ }, bh)
+ cancel()
+
+ // Sleep just long enough for everything to complete.
+ // It's not flaky, the race detector detects a race when there isn't,
+ // the machine is just too slow to propagate the ctxCancel() to all goroutines.
+ time.Sleep(2 * time.Second)
+
+ expectedLogs := []string{
+ "Backing up file: test1/0.ibd (attempt 1/2)",
+ "Backing up file: test1/0.ibd (attempt 2/2)",
+ }
+ AssertLogs(t, expectedLogs, logger)
+
+ ss := GetStats(fakeStats)
+ require.Equal(t, 2, ss.DestinationCloseStats)
+ require.Equal(t, 2, ss.DestinationOpenStats)
+ require.Equal(t, 2, ss.DestinationWriteStats)
+ require.Equal(t, 2, ss.SourceCloseStats)
+ require.Equal(t, 2, ss.SourceOpenStats)
+ require.Equal(t, 2, ss.SourceReadStats)
+ require.ErrorContains(t, err, "failing first write")
+ require.Equal(t, mysqlctl.BackupUnusable, backupResult)
+}
+
+func TestExecuteRestoreFailToReadEachFileOnlyOnce(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
+ backupRoot, keyspace, shard, ts := SetupCluster(ctx, t, 2, 2)
+
+ be := &mysqlctl.BuiltinBackupEngine{}
+ bufferPerFiles := make(map[string]*rwCloseFailFirstCall)
+ bh := &mysqlctl.FakeBackupHandle{}
+ bh.AddFileReturnF = func(filename string) mysqlctl.FakeBackupHandleAddFileReturn {
+ // let's never make it fail for now
+ newBuffer := newWriteCloseFailFirstWrite(true)
+ bufferPerFiles[filename] = newBuffer
+ return mysqlctl.FakeBackupHandleAddFileReturn{WriteCloser: newBuffer}
+ }
+
+ // Spin up a fake daemon to be used in backups. It needs to be allowed to receive:
+ // "STOP REPLICA", "START REPLICA", in that order.
+ fakedb := fakesqldb.New(t)
+ defer fakedb.Close()
+ mysqld := mysqlctl.NewFakeMysqlDaemon(fakedb)
+ defer mysqld.Close()
+ mysqld.ExpectedExecuteSuperQueryList = []string{"STOP REPLICA", "START REPLICA"}
+
+ backupResult, err := be.ExecuteBackup(ctx, mysqlctl.BackupParams{
+ Logger: logutil.NewConsoleLogger(),
+ Mysqld: mysqld,
+ Cnf: &mysqlctl.Mycnf{
+ InnodbDataHomeDir: path.Join(backupRoot, "innodb"),
+ InnodbLogGroupHomeDir: path.Join(backupRoot, "log"),
+ DataDir: path.Join(backupRoot, "datadir"),
+ },
+ Stats: backupstats.NewFakeStats(),
+ Concurrency: 1,
+ HookExtraEnv: map[string]string{},
+ TopoServer: ts,
+ Keyspace: keyspace,
+ Shard: shard,
+ MysqlShutdownTimeout: MysqlShutdownTimeout,
+ }, bh)
+
+ require.NoError(t, err)
+ require.Equal(t, mysqlctl.BackupUsable, backupResult)
+
+ // let's mark each file in the buffer as if it is their first read
+ for key := range bufferPerFiles {
+ bufferPerFiles[key].firstDone = false
+ }
+
+ // Now try to restore the above backup.
+ fakeBh := &mysqlctl.FakeBackupHandle{}
+ fakeBh.ReadFileReturnF = func(ctx context.Context, filename string) (io.ReadCloser, error) {
+ return bufferPerFiles[filename], nil
+ }
+
+ fakedb = fakesqldb.New(t)
+ defer fakedb.Close()
+ mysqld = mysqlctl.NewFakeMysqlDaemon(fakedb)
+ defer mysqld.Close()
+ mysqld.ExpectedExecuteSuperQueryList = []string{"STOP REPLICA", "START REPLICA"}
+
+ fakeStats := backupstats.NewFakeStats()
+ logger := logutil.NewMemoryLogger()
+
+ restoreParams := mysqlctl.RestoreParams{
+ Cnf: &mysqlctl.Mycnf{
+ InnodbDataHomeDir: path.Join(backupRoot, "innodb"),
+ InnodbLogGroupHomeDir: path.Join(backupRoot, "log"),
+ DataDir: path.Join(backupRoot, "datadir"),
+ BinLogPath: path.Join(backupRoot, "binlog"),
+ RelayLogPath: path.Join(backupRoot, "relaylog"),
+ RelayLogIndexPath: path.Join(backupRoot, "relaylogindex"),
+ RelayLogInfoPath: path.Join(backupRoot, "relayloginfo"),
+ },
+ Logger: logger,
+ Mysqld: mysqld,
+ Concurrency: 1,
+ HookExtraEnv: map[string]string{},
+ DeleteBeforeRestore: false,
+ DbName: "test",
+ Keyspace: "test",
+ Shard: "-",
+ StartTime: time.Now(),
+ RestoreToPos: replication.Position{},
+ RestoreToTimestamp: time.Time{},
+ DryRun: false,
+ Stats: fakeStats,
+ MysqlShutdownTimeout: MysqlShutdownTimeout,
+ }
+
+ // Successful restore.
+ bm, err := be.ExecuteRestore(ctx, restoreParams, fakeBh)
+ assert.NoError(t, err)
+ assert.NotNil(t, bm)
+
+ ss := GetStats(fakeStats)
+ require.Equal(t, 8, ss.DestinationCloseStats)
+ require.Equal(t, 8, ss.DestinationOpenStats)
+ require.Equal(t, 4, ss.DestinationWriteStats)
+ require.Equal(t, 8, ss.SourceCloseStats)
+ require.Equal(t, 8, ss.SourceOpenStats)
+ require.Equal(t, 8, ss.SourceReadStats)
+}
+
+func TestExecuteRestoreFailToReadEachFileTwice(t *testing.T) {
+ ctx := utils.LeakCheckContext(t)
+ backupRoot, keyspace, shard, ts := SetupCluster(ctx, t, 2, 2)
+
+ be := &mysqlctl.BuiltinBackupEngine{}
+ bufferPerFiles := make(map[string]*rwCloseFailFirstCall)
+ bh := &mysqlctl.FakeBackupHandle{}
+ bh.AddFileReturnF = func(filename string) mysqlctl.FakeBackupHandleAddFileReturn {
+ // let's never make it fail for now
+ newBuffer := newWriteCloseFailFirstWrite(true)
+ bufferPerFiles[filename] = newBuffer
+ return mysqlctl.FakeBackupHandleAddFileReturn{WriteCloser: newBuffer}
+ }
+
+ // Spin up a fake daemon to be used in backups. It needs to be allowed to receive:
+ // "STOP REPLICA", "START REPLICA", in that order.
+ fakedb := fakesqldb.New(t)
+ defer fakedb.Close()
+ mysqld := mysqlctl.NewFakeMysqlDaemon(fakedb)
+ defer mysqld.Close()
+ mysqld.ExpectedExecuteSuperQueryList = []string{"STOP REPLICA", "START REPLICA"}
+
+ backupResult, err := be.ExecuteBackup(ctx, mysqlctl.BackupParams{
+ Logger: logutil.NewConsoleLogger(),
+ Mysqld: mysqld,
+ Cnf: &mysqlctl.Mycnf{
+ InnodbDataHomeDir: path.Join(backupRoot, "innodb"),
+ InnodbLogGroupHomeDir: path.Join(backupRoot, "log"),
+ DataDir: path.Join(backupRoot, "datadir"),
+ },
+ Stats: backupstats.NewFakeStats(),
+ Concurrency: 1,
+ HookExtraEnv: map[string]string{},
+ TopoServer: ts,
+ Keyspace: keyspace,
+ Shard: shard,
+ MysqlShutdownTimeout: MysqlShutdownTimeout,
+ }, bh)
+
+ require.NoError(t, err)
+ require.Equal(t, mysqlctl.BackupUsable, backupResult)
+
+ // Now try to restore the above backup.
+ fakeBh := &mysqlctl.FakeBackupHandle{}
+ fakeBh.ReadFileReturnF = func(ctx context.Context, filename string) (io.ReadCloser, error) {
+ // always make it fail, expect if it is the MANIFEST file, otherwise we won't start restoring the other files
+ buffer := bufferPerFiles[filename]
+ if filename != "MANIFEST" {
+ buffer.firstDone = false
+ }
+ return buffer, nil
+ }
+
+ fakedb = fakesqldb.New(t)
+ defer fakedb.Close()
+ mysqld = mysqlctl.NewFakeMysqlDaemon(fakedb)
+ defer mysqld.Close()
+ mysqld.ExpectedExecuteSuperQueryList = []string{"STOP REPLICA", "START REPLICA"}
+
+ fakeStats := backupstats.NewFakeStats()
+ logger := logutil.NewMemoryLogger()
+
+ restoreParams := mysqlctl.RestoreParams{
+ Cnf: &mysqlctl.Mycnf{
+ InnodbDataHomeDir: path.Join(backupRoot, "innodb"),
+ InnodbLogGroupHomeDir: path.Join(backupRoot, "log"),
+ DataDir: path.Join(backupRoot, "datadir"),
+ BinLogPath: path.Join(backupRoot, "binlog"),
+ RelayLogPath: path.Join(backupRoot, "relaylog"),
+ RelayLogIndexPath: path.Join(backupRoot, "relaylogindex"),
+ RelayLogInfoPath: path.Join(backupRoot, "relayloginfo"),
+ },
+ Logger: logger,
+ Mysqld: mysqld,
+ Concurrency: 1,
+ HookExtraEnv: map[string]string{},
+ DeleteBeforeRestore: false,
+ DbName: "test",
+ Keyspace: "test",
+ Shard: "-",
+ StartTime: time.Now(),
+ RestoreToPos: replication.Position{},
+ RestoreToTimestamp: time.Time{},
+ DryRun: false,
+ Stats: fakeStats,
+ MysqlShutdownTimeout: MysqlShutdownTimeout,
+ }
+
+ // Successful restore.
+ bm, err := be.ExecuteRestore(ctx, restoreParams, fakeBh)
+ assert.ErrorContains(t, err, "failing first read")
+ assert.Nil(t, bm)
+
+ ss := GetStats(fakeStats)
+ require.Equal(t, 5, ss.DestinationCloseStats)
+ require.Equal(t, 5, ss.DestinationOpenStats)
+ require.Equal(t, 0, ss.DestinationWriteStats)
+ require.Equal(t, 5, ss.SourceCloseStats)
+ require.Equal(t, 5, ss.SourceOpenStats)
+ require.Equal(t, 5, ss.SourceReadStats)
}
diff --git a/go/vt/mysqlctl/blackbox/utils.go b/go/vt/mysqlctl/blackbox/utils.go
new file mode 100644
index 00000000000..c7d34ae3cf6
--- /dev/null
+++ b/go/vt/mysqlctl/blackbox/utils.go
@@ -0,0 +1,196 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package blackbox
+
+import (
+ "context"
+ "fmt"
+ "os"
+ "path"
+ "slices"
+ "strconv"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+
+ "vitess.io/vitess/go/mysql"
+ "vitess.io/vitess/go/mysql/capabilities"
+ "vitess.io/vitess/go/vt/logutil"
+ "vitess.io/vitess/go/vt/mysqlctl"
+ "vitess.io/vitess/go/vt/mysqlctl/backupstats"
+ "vitess.io/vitess/go/vt/mysqlctl/filebackupstorage"
+ logutilpb "vitess.io/vitess/go/vt/proto/logutil"
+ "vitess.io/vitess/go/vt/proto/topodata"
+ "vitess.io/vitess/go/vt/proto/vttime"
+ "vitess.io/vitess/go/vt/topo"
+ "vitess.io/vitess/go/vt/topo/memorytopo"
+)
+
+type StatSummary struct {
+ DestinationCloseStats int
+ DestinationOpenStats int
+ DestinationWriteStats int
+ SourceCloseStats int
+ SourceOpenStats int
+ SourceReadStats int
+}
+
+func GetStats(stats *backupstats.FakeStats) StatSummary {
+ var ss StatSummary
+
+ for _, sr := range stats.ScopeReturns {
+ switch sr.ScopeV[backupstats.ScopeOperation] {
+ case "Destination:Close":
+ ss.DestinationCloseStats += len(sr.TimedIncrementCalls)
+ case "Destination:Open":
+ ss.DestinationOpenStats += len(sr.TimedIncrementCalls)
+ case "Destination:Write":
+ if len(sr.TimedIncrementBytesCalls) > 0 {
+ ss.DestinationWriteStats++
+ }
+ case "Source:Close":
+ ss.SourceCloseStats += len(sr.TimedIncrementCalls)
+ case "Source:Open":
+ ss.SourceOpenStats += len(sr.TimedIncrementCalls)
+ case "Source:Read":
+ if len(sr.TimedIncrementBytesCalls) > 0 {
+ ss.SourceReadStats++
+ }
+ }
+ }
+ return ss
+}
+
+func AssertLogs(t *testing.T, expectedLogs []string, logger *logutil.MemoryLogger) {
+ for _, log := range expectedLogs {
+ require.Truef(t, slices.ContainsFunc(logger.LogEvents(), func(event *logutilpb.Event) bool {
+ return event.GetValue() == log
+ }), "%s is missing from the logs", log)
+ }
+}
+
+func SetupCluster(ctx context.Context, t *testing.T, dirs, filesPerDir int) (backupRoot string, keyspace string, shard string, ts *topo.Server) {
+ // Set up local backup directory
+ id := fmt.Sprintf("%d", time.Now().UnixNano())
+ backupRoot = fmt.Sprintf("testdata/builtinbackup_test_%s", id)
+ filebackupstorage.FileBackupStorageRoot = backupRoot
+ require.NoError(t, createBackupDir(backupRoot, "innodb", "log", "datadir"))
+ dataDir := path.Join(backupRoot, "datadir")
+ // Add some files under data directory to force backup to execute semaphore acquire inside
+ // backupFiles() method (https://github.com/vitessio/vitess/blob/main/go/vt/mysqlctl/builtinbackupengine.go#L483).
+ for dirI := range dirs {
+ dirName := "test" + strconv.Itoa(dirI+1)
+ require.NoError(t, createBackupDir(dataDir, dirName))
+ require.NoError(t, createBackupFiles(path.Join(dataDir, dirName), filesPerDir, "ibd"))
+ }
+ t.Cleanup(func() {
+ require.NoError(t, os.RemoveAll(backupRoot))
+ })
+
+ needIt, err := NeedInnoDBRedoLogSubdir()
+ require.NoError(t, err)
+ if needIt {
+ fpath := path.Join("log", mysql.DynamicRedoLogSubdir)
+ if err := createBackupDir(backupRoot, fpath); err != nil {
+ require.Failf(t, err.Error(), "failed to create directory: %s", fpath)
+ }
+ }
+
+ // Set up topo
+ keyspace, shard = "mykeyspace", "-"
+ ts = memorytopo.NewServer(ctx, "cell1")
+ t.Cleanup(func() {
+ ts.Close()
+ })
+
+ require.NoError(t, ts.CreateKeyspace(ctx, keyspace, &topodata.Keyspace{}))
+ require.NoError(t, ts.CreateShard(ctx, keyspace, shard))
+
+ tablet := topo.NewTablet(100, "cell1", "mykeyspace-00-80-0100")
+ tablet.Keyspace = keyspace
+ tablet.Shard = shard
+
+ require.NoError(t, ts.CreateTablet(ctx, tablet))
+
+ _, err = ts.UpdateShardFields(ctx, keyspace, shard, func(si *topo.ShardInfo) error {
+ si.PrimaryAlias = &topodata.TabletAlias{Uid: 100, Cell: "cell1"}
+
+ now := time.Now()
+ si.PrimaryTermStartTime = &vttime.Time{Seconds: int64(now.Second()), Nanoseconds: int32(now.Nanosecond())}
+
+ return nil
+ })
+ require.NoError(t, err)
+ return backupRoot, keyspace, shard, ts
+}
+
+// NeedInnoDBRedoLogSubdir indicates whether we need to create a redo log subdirectory.
+// Starting with MySQL 8.0.30, the InnoDB redo logs are stored in a subdirectory of the
+// (/. by default) called "#innodb_redo". See:
+//
+// https://dev.mysql.com/doc/refman/8.0/en/innodb-redo-log.html#innodb-modifying-redo-log-capacity
+func NeedInnoDBRedoLogSubdir() (needIt bool, err error) {
+ mysqldVersionStr, err := mysqlctl.GetVersionString()
+ if err != nil {
+ return needIt, err
+ }
+ _, sv, err := mysqlctl.ParseVersionString(mysqldVersionStr)
+ if err != nil {
+ return needIt, err
+ }
+ versionStr := fmt.Sprintf("%d.%d.%d", sv.Major, sv.Minor, sv.Patch)
+ capableOf := mysql.ServerVersionCapableOf(versionStr)
+ if capableOf == nil {
+ return needIt, fmt.Errorf("cannot determine database flavor details for version %s", versionStr)
+ }
+ return capableOf(capabilities.DynamicRedoLogCapacityFlavorCapability)
+}
+
+const MysqlShutdownTimeout = 1 * time.Minute
+
+func SetBuiltinBackupMysqldDeadline(t time.Duration) time.Duration {
+ old := mysqlctl.BuiltinBackupMysqldTimeout
+ mysqlctl.BuiltinBackupMysqldTimeout = t
+
+ return old
+}
+
+func createBackupDir(root string, dirs ...string) error {
+ for _, dir := range dirs {
+ if err := os.MkdirAll(path.Join(root, dir), 0755); err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+func createBackupFiles(root string, fileCount int, ext string) error {
+ for i := 0; i < fileCount; i++ {
+ f, err := os.Create(path.Join(root, fmt.Sprintf("%d.%s", i, ext)))
+ if err != nil {
+ return err
+ }
+ if _, err := f.Write([]byte("hello, world!")); err != nil {
+ return err
+ }
+ defer f.Close()
+ }
+
+ return nil
+}
diff --git a/go/vt/mysqlctl/builtinbackupengine.go b/go/vt/mysqlctl/builtinbackupengine.go
index 9c9403c948c..2046a238400 100644
--- a/go/vt/mysqlctl/builtinbackupengine.go
+++ b/go/vt/mysqlctl/builtinbackupengine.go
@@ -29,18 +29,17 @@ import (
"os"
"path"
"path/filepath"
- "sync"
+ "strconv"
"sync/atomic"
"time"
"github.com/spf13/pflag"
- "golang.org/x/sync/semaphore"
+ "golang.org/x/sync/errgroup"
"vitess.io/vitess/go/ioutil"
"vitess.io/vitess/go/mysql"
"vitess.io/vitess/go/mysql/replication"
"vitess.io/vitess/go/protoutil"
- "vitess.io/vitess/go/vt/concurrency"
"vitess.io/vitess/go/vt/log"
"vitess.io/vitess/go/vt/logutil"
stats "vitess.io/vitess/go/vt/mysqlctl/backupstats"
@@ -60,6 +59,8 @@ const (
builtinBackupEngineName = "builtin"
AutoIncrementalFromPos = "auto"
dataDictionaryFile = "mysql.ibd"
+
+ maxRetriesPerFile = 1
)
var (
@@ -149,6 +150,13 @@ type FileEntry struct {
// ParentPath is an optional prefix to the Base path. If empty, it is ignored. Useful
// for writing files in a temporary directory
ParentPath string
+
+ // RetryCount specifies how many times we retried restoring/backing up this FileEntry.
+ // If we fail to restore/backup this FileEntry, we will retry up to maxRetriesPerFile times.
+ // Every time the builtin backup engine retries this file, we increment this field by 1.
+ // We don't care about adding this information to the MANIFEST and also to not cause any compatibility issue
+ // we are adding the - json tag to let Go know it can ignore the field.
+ RetryCount int `json:"-"`
}
func init() {
@@ -585,6 +593,11 @@ func (be *BuiltinBackupEngine) backupFiles(
mysqlVersion string,
incrDetails *IncrementalBackupDetails,
) (finalErr error) {
+ // backupFiles always wait for AddFiles to finish its work before returning, unless there has been a
+ // non-recoverable error in the process, in both cases we can cancel the context safely.
+ ctx, cancel := context.WithCancel(ctx)
+ defer cancel()
+
// Get the files to backup.
// We don't care about totalSize because we add each file separately.
var fes []FileEntry
@@ -599,35 +612,82 @@ func (be *BuiltinBackupEngine) backupFiles(
}
params.Logger.Infof("found %v files to backup", len(fes))
- // Backup with the provided concurrency.
- sema := semaphore.NewWeighted(int64(params.Concurrency))
- wg := sync.WaitGroup{}
+ // The error here can be ignored safely. Failed FileEntry's are handled in the next 'if' statement.
+ _ = be.backupFileEntries(ctx, fes, bh, params)
+
+ // BackupHandle supports the BackupErrorRecorder interface for tracking errors
+ // across any goroutines that fan out to take the backup. This means that we
+ // don't need a local error recorder and can put everything through the bh.
+ //
+ // This handles the scenario where bh.AddFile() encounters an error asynchronously,
+ // which ordinarily would be lost in the context of `be.backupFile`, i.e. if an
+ // error were encountered
+ // [here](https://github.com/vitessio/vitess/blob/d26b6c7975b12a87364e471e2e2dfa4e253c2a5b/go/vt/mysqlctl/s3backupstorage/s3.go#L139-L142).
+ //
+ // All the errors are grouped per file, if one or more files failed, we back them up
+ // once more concurrently, if any of the retry fail, we fail-fast by canceling the context
+ // and return an error. There is no reason to continue processing the other retries, if
+ // one of them failed.
+ if files := bh.GetFailedFiles(); len(files) > 0 {
+ newFEs := make([]FileEntry, len(fes))
+ for _, file := range files {
+ fileNb, err := strconv.Atoi(file)
+ if err != nil {
+ return vterrors.Wrapf(err, "failed to retry file '%s'", file)
+ }
+ oldFes := fes[fileNb]
+ newFEs[fileNb] = FileEntry{
+ Base: oldFes.Base,
+ Name: oldFes.Name,
+ ParentPath: oldFes.ParentPath,
+ RetryCount: 1,
+ }
+ bh.ResetErrorForFile(file)
+ }
+ err = be.backupFileEntries(ctx, newFEs, bh, params)
+ if err != nil {
+ return err
+ }
+ }
+
+ // Backup the MANIFEST file and apply retry logic.
+ var manifestErr error
+ for currentRetry := 0; currentRetry <= maxRetriesPerFile; currentRetry++ {
+ manifestErr = be.backupManifest(ctx, params, bh, backupPosition, purgedPosition, fromPosition, fromBackupName, serverUUID, mysqlVersion, incrDetails, fes, currentRetry)
+ if manifestErr == nil {
+ break
+ }
+ bh.ResetErrorForFile(backupManifestFileName)
+ }
+ if manifestErr != nil {
+ return manifestErr
+ }
+ return nil
+}
+// backupFileEntries iterates over a slice of FileEntry, backing them up concurrently up to the defined concurrency limit.
+// This function will ignore empty FileEntry, allowing the retry mechanism to send a partially empty slice, to not
+// mess up the index of retriable FileEntry.
+// This function does not leave any background operation behind itself, all calls to bh.AddFile will be finished or canceled.
+func (be *BuiltinBackupEngine) backupFileEntries(ctx context.Context, fes []FileEntry, bh backupstorage.BackupHandle, params BackupParams) error {
ctxCancel, cancel := context.WithCancel(ctx)
- defer cancel()
+ defer func() {
+ // If we reached this defer in all cases we can cancel the context.
+ // The only ways to get here are: a panic, an error when ending the backup, a successful backup.
+ // For all three options, it is safe to cancel the context, there should be no pending operations
+ // that 1) haven't completed, 2) we care about anymore.
+ cancel()
+ }()
+ g := errgroup.Group{}
+ g.SetLimit(params.Concurrency)
for i := range fes {
- wg.Add(1)
- go func(i int) {
- defer wg.Done()
+ if fes[i].Name == "" {
+ continue
+ }
+ g.Go(func() error {
fe := &fes[i]
- // Wait until we are ready to go, return if we encounter an error
- acqErr := sema.Acquire(ctxCancel, 1)
- if acqErr != nil {
- log.Errorf("Unable to acquire semaphore needed to backup file: %s, err: %s", fe.Name, acqErr.Error())
- bh.RecordError(acqErr)
- cancel()
- return
- }
- defer sema.Release(1)
-
- // First check if we have any error, if we have, there is no point trying backing up this file.
- // We check for errors before checking if the context is canceled on purpose, if there was an
- // error, the context would have been canceled already.
- if bh.HasErrors() {
- params.Logger.Errorf("Failed to restore files due to error: %v", bh.Error())
- return
- }
+ name := fmt.Sprintf("%v", i)
// Check for context cancellation explicitly because, the way semaphore code is written, theoretically we might
// end up not throwing an error even after cancellation. Please see https://cs.opensource.google/go/x/sync/+/refs/tags/v0.1.0:semaphore/semaphore.go;l=66,
@@ -636,84 +696,30 @@ func (be *BuiltinBackupEngine) backupFiles(
select {
case <-ctxCancel.Done():
log.Errorf("Context canceled or timed out during %q backup", fe.Name)
- bh.RecordError(vterrors.Errorf(vtrpc.Code_CANCELED, "context canceled"))
- return
+ bh.RecordError(name, vterrors.Errorf(vtrpc.Code_CANCELED, "context canceled"))
+ return nil
default:
}
// Backup the individual file.
- name := fmt.Sprintf("%v", i)
- err := be.backupFile(ctxCancel, params, bh, fe, name)
- if err != nil {
- bh.RecordError(acqErr)
- cancel()
+ var errBackupFile error
+ if errBackupFile = be.backupFile(ctxCancel, params, bh, fe, name); errBackupFile != nil {
+ bh.RecordError(name, vterrors.Wrapf(errBackupFile, "failed to backup file '%s'", name))
+ if fe.RetryCount >= maxRetriesPerFile {
+ // this is the last attempt, and we have an error, we can cancel everything and fail fast.
+ cancel()
+ }
}
- }(i)
- }
-
- wg.Wait()
-
- // BackupHandle supports the ErrorRecorder interface for tracking errors
- // across any goroutines that fan out to take the backup. This means that we
- // don't need a local error recorder and can put everything through the bh.
- //
- // This handles the scenario where bh.AddFile() encounters an error asynchronously,
- // which ordinarily would be lost in the context of `be.backupFile`, i.e. if an
- // error were encountered
- // [here](https://github.com/vitessio/vitess/blob/d26b6c7975b12a87364e471e2e2dfa4e253c2a5b/go/vt/mysqlctl/s3backupstorage/s3.go#L139-L142).
- if bh.HasErrors() {
- return bh.Error()
+ return nil
+ })
}
+ _ = g.Wait()
- // open the MANIFEST
- wc, err := bh.AddFile(ctx, backupManifestFileName, backupstorage.FileSizeUnknown)
- if err != nil {
- return vterrors.Wrapf(err, "cannot add %v to backup", backupManifestFileName)
- }
- defer func() {
- closeErr := wc.Close()
- if finalErr == nil {
- finalErr = closeErr
- }
- }()
-
- // JSON-encode and write the MANIFEST
- bm := &builtinBackupManifest{
- // Common base fields
- BackupManifest: BackupManifest{
- BackupName: bh.Name(),
- BackupMethod: builtinBackupEngineName,
- Position: backupPosition,
- PurgedPosition: purgedPosition,
- FromPosition: fromPosition,
- FromBackup: fromBackupName,
- Incremental: !fromPosition.IsZero(),
- ServerUUID: serverUUID,
- TabletAlias: params.TabletAlias,
- Keyspace: params.Keyspace,
- Shard: params.Shard,
- BackupTime: params.BackupTime.UTC().Format(time.RFC3339),
- FinishedTime: time.Now().UTC().Format(time.RFC3339),
- MySQLVersion: mysqlVersion,
- UpgradeSafe: params.UpgradeSafe,
- IncrementalDetails: incrDetails,
- },
-
- // Builtin-specific fields
- FileEntries: fes,
- SkipCompress: !backupStorageCompress,
- CompressionEngine: CompressionEngineName,
- ExternalDecompressor: ManifestExternalDecompressorCmd,
- }
- data, err := json.MarshalIndent(bm, "", " ")
+ err := bh.EndBackup(ctx)
if err != nil {
- return vterrors.Wrapf(err, "cannot JSON encode %v", backupManifestFileName)
- }
- if _, err := wc.Write([]byte(data)); err != nil {
- return vterrors.Wrapf(err, "cannot write %v", backupManifestFileName)
+ return err
}
-
- return nil
+ return bh.Error()
}
type backupPipe struct {
@@ -726,6 +732,7 @@ type backupPipe struct {
crc32 hash.Hash32
nn int64
done chan struct{}
+ failed chan struct{}
closed int32
}
@@ -736,6 +743,7 @@ func newBackupWriter(filename string, writerBufferSize int, maxSize int64, w io.
filename: filename,
maxSize: maxSize,
done: make(chan struct{}),
+ failed: make(chan struct{}),
}
}
@@ -745,10 +753,16 @@ func newBackupReader(filename string, maxSize int64, r io.Reader) *backupPipe {
r: r,
filename: filename,
done: make(chan struct{}),
+ failed: make(chan struct{}),
maxSize: maxSize,
}
}
+func retryToString(retry int) string {
+ // We convert the retry number to an attempt number, increasing retry by one, so it looks more human friendly
+ return fmt.Sprintf("(attempt %d/%d)", retry+1, maxRetriesPerFile+1)
+}
+
func (bp *backupPipe) Read(p []byte) (int, error) {
nn, err := bp.r.Read(p)
_, _ = bp.crc32.Write(p[:nn])
@@ -763,9 +777,17 @@ func (bp *backupPipe) Write(p []byte) (int, error) {
return nn, err
}
-func (bp *backupPipe) Close() error {
+func (bp *backupPipe) Close(isDone bool) (err error) {
if atomic.CompareAndSwapInt32(&bp.closed, 0, 1) {
- close(bp.done)
+ // If we fail to Flush the writer we must report this backup as a failure.
+ defer func() {
+ if isDone && err == nil {
+ close(bp.done)
+ return
+ }
+ close(bp.failed)
+ }()
+
if bp.w != nil {
if err := bp.w.Flush(); err != nil {
return err
@@ -779,28 +801,31 @@ func (bp *backupPipe) HashString() string {
return hex.EncodeToString(bp.crc32.Sum(nil))
}
-func (bp *backupPipe) ReportProgress(ctx context.Context, period time.Duration, logger logutil.Logger, restore bool) {
- messageStr := "restoring "
+func (bp *backupPipe) ReportProgress(ctx context.Context, period time.Duration, logger logutil.Logger, restore bool, retryStr string) {
+ messageStr := "restoring"
if !restore {
- messageStr = "backing up "
+ messageStr = "backing up"
}
tick := time.NewTicker(period)
defer tick.Stop()
for {
select {
case <-ctx.Done():
- logger.Infof("Canceled %s of %q file", messageStr, bp.filename)
+ logger.Infof("Canceled %s of %q file %s", messageStr, bp.filename, retryStr)
return
case <-bp.done:
- logger.Infof("Completed %s %q", messageStr, bp.filename)
+ logger.Infof("Completed %s %q %s", messageStr, bp.filename, retryStr)
+ return
+ case <-bp.failed:
+ logger.Infof("Failed %s %q %s", messageStr, bp.filename, retryStr)
return
case <-tick.C:
written := float64(atomic.LoadInt64(&bp.nn))
if bp.maxSize == 0 {
- logger.Infof("%s %q: %.02fkb", messageStr, bp.filename, written/1024.0)
+ logger.Infof("%s %q %s: %.02fkb", messageStr, bp.filename, retryStr, written/1024.0)
} else {
maxSize := float64(bp.maxSize)
- logger.Infof("%s %q: %.02f%% (%.02f/%.02fkb)", messageStr, bp.filename, 100.0*written/maxSize, written/1024.0, maxSize/1024.0)
+ logger.Infof("%s %q %s: %.02f%% (%.02f/%.02fkb)", messageStr, bp.filename, retryStr, 100.0*written/maxSize, written/1024.0, maxSize/1024.0)
}
}
}
@@ -808,12 +833,15 @@ func (bp *backupPipe) ReportProgress(ctx context.Context, period time.Duration,
// backupFile backs up an individual file.
func (be *BuiltinBackupEngine) backupFile(ctx context.Context, params BackupParams, bh backupstorage.BackupHandle, fe *FileEntry, name string) (finalErr error) {
- ctx, cancel := context.WithCancel(ctx)
- defer func() {
- if finalErr != nil {
- cancel()
- }
- }()
+ // We need another context that does not live outside of this function.
+ // Reporting progress, compressing and writing are operations that will be
+ // over by the time we exit this function, they can use this cancelable context.
+ // However, AddFile is something that may continue in the background even after
+ // this function exits. In this case, we give it the parent context so the caller
+ // has more control over when to cancel AddFile.
+ cancelableCtx, cancel := context.WithCancel(ctx)
+ defer cancel()
+
// Open the source file for reading.
openSourceAt := time.Now()
source, err := fe.open(params.Cnf, true)
@@ -836,11 +864,12 @@ func (be *BuiltinBackupEngine) backupFile(ctx context.Context, params BackupPara
return err
}
+ retryStr := retryToString(fe.RetryCount)
br := newBackupReader(fe.Name, fi.Size(), timedSource)
- go br.ReportProgress(ctx, builtinBackupProgress, params.Logger, false /*restore*/)
+ go br.ReportProgress(cancelableCtx, builtinBackupProgress, params.Logger, false /*restore*/, retryStr)
// Open the destination file for writing, and a buffer.
- params.Logger.Infof("Backing up file: %v", fe.Name)
+ params.Logger.Infof("Backing up file: %v %s", fe.Name, retryStr)
openDestAt := time.Now()
dest, err := bh.AddFile(ctx, name, fi.Size())
if err != nil {
@@ -872,19 +901,20 @@ func (be *BuiltinBackupEngine) backupFile(ctx context.Context, params BackupPara
defer func() {
// Close the backupPipe to finish writing on destination.
- if err := bw.Close(); err != nil {
+ if err := bw.Close(createAndCopyErr == nil); err != nil {
createAndCopyErr = errors.Join(createAndCopyErr, vterrors.Wrapf(err, "cannot flush destination: %v", name))
}
- if err := br.Close(); err != nil {
+ if err := br.Close(createAndCopyErr == nil); err != nil {
createAndCopyErr = errors.Join(createAndCopyErr, vterrors.Wrap(err, "failed to close the source reader"))
}
+
}()
// Create the gzip compression pipe, if necessary.
if backupStorageCompress {
var compressor io.WriteCloser
if ExternalCompressorCmd != "" {
- compressor, err = newExternalCompressor(ctx, ExternalCompressorCmd, writer, params.Logger)
+ compressor, err = newExternalCompressor(cancelableCtx, ExternalCompressorCmd, writer, params.Logger)
} else {
compressor, err = newBuiltinCompressor(CompressionEngineName, writer, params.Logger)
}
@@ -895,13 +925,13 @@ func (be *BuiltinBackupEngine) backupFile(ctx context.Context, params BackupPara
compressStats := params.Stats.Scope(stats.Operation("Compressor:Write"))
writer = ioutil.NewMeteredWriter(compressor, compressStats.TimedIncrementBytes)
- closer := ioutil.NewTimeoutCloser(ctx, compressor, closeTimeout)
+ closer := ioutil.NewTimeoutCloser(cancelableCtx, compressor, closeTimeout)
defer func() {
// Close gzip to flush it, after that all data is sent to writer.
closeCompressorAt := time.Now()
- params.Logger.Infof("closing compressor")
+ params.Logger.Infof("Closing compressor for file: %s %s", fe.Name, retryStr)
if cerr := closer.Close(); err != nil {
- cerr = vterrors.Wrapf(cerr, "failed to close compressor %v", name)
+ cerr = vterrors.Wrapf(cerr, "failed to close compressor %v", fe.Name)
params.Logger.Error(cerr)
createAndCopyErr = errors.Join(createAndCopyErr, cerr)
}
@@ -931,6 +961,94 @@ func (be *BuiltinBackupEngine) backupFile(ctx context.Context, params BackupPara
return nil
}
+func (be *BuiltinBackupEngine) backupManifest(
+ ctx context.Context,
+ params BackupParams,
+ bh backupstorage.BackupHandle,
+ backupPosition replication.Position,
+ purgedPosition replication.Position,
+ fromPosition replication.Position,
+ fromBackupName string,
+ serverUUID string,
+ mysqlVersion string,
+ incrDetails *IncrementalBackupDetails,
+ fes []FileEntry,
+ currentAttempt int,
+) (finalErr error) {
+ retryStr := retryToString(currentAttempt)
+ params.Logger.Infof("Backing up file %s %s", backupManifestFileName, retryStr)
+ defer func() {
+ state := "Completed"
+ if finalErr != nil {
+ state = "Failed"
+ }
+ params.Logger.Infof("%s backing up %s %s", state, backupManifestFileName, retryStr)
+ }()
+
+ // Creating this function allows us to ensure we always close the writer no matter what,
+ // and in case of success that we close it before calling bh.EndBackup.
+ addAndWrite := func() (addAndWriteError error) {
+ // open the MANIFEST
+ wc, err := bh.AddFile(ctx, backupManifestFileName, backupstorage.FileSizeUnknown)
+ if err != nil {
+ return vterrors.Wrapf(err, "cannot add %v to backup %s", backupManifestFileName, retryStr)
+ }
+ defer func() {
+ if err := wc.Close(); err != nil {
+ addAndWriteError = errors.Join(addAndWriteError, vterrors.Wrapf(err, "cannot close backup: %v", backupManifestFileName))
+ }
+ }()
+
+ // JSON-encode and write the MANIFEST
+ bm := &builtinBackupManifest{
+ // Common base fields
+ BackupManifest: BackupManifest{
+ BackupName: bh.Name(),
+ BackupMethod: builtinBackupEngineName,
+ Position: backupPosition,
+ PurgedPosition: purgedPosition,
+ FromPosition: fromPosition,
+ FromBackup: fromBackupName,
+ Incremental: !fromPosition.IsZero(),
+ ServerUUID: serverUUID,
+ TabletAlias: params.TabletAlias,
+ Keyspace: params.Keyspace,
+ Shard: params.Shard,
+ BackupTime: params.BackupTime.UTC().Format(time.RFC3339),
+ FinishedTime: time.Now().UTC().Format(time.RFC3339),
+ MySQLVersion: mysqlVersion,
+ UpgradeSafe: params.UpgradeSafe,
+ IncrementalDetails: incrDetails,
+ },
+
+ // Builtin-specific fields
+ FileEntries: fes,
+ SkipCompress: !backupStorageCompress,
+ CompressionEngine: CompressionEngineName,
+ ExternalDecompressor: ManifestExternalDecompressorCmd,
+ }
+ data, err := json.MarshalIndent(bm, "", " ")
+ if err != nil {
+ return vterrors.Wrapf(err, "cannot JSON encode %v %s", backupManifestFileName, retryStr)
+ }
+ if _, err := wc.Write(data); err != nil {
+ return vterrors.Wrapf(err, "cannot write %v %s", backupManifestFileName, retryStr)
+ }
+ return nil
+ }
+
+ err := addAndWrite()
+ if err != nil {
+ return err
+ }
+
+ err = bh.EndBackup(ctx)
+ if err != nil {
+ return err
+ }
+ return bh.Error()
+}
+
// executeRestoreFullBackup restores the files from a full backup. The underlying mysql database service is expected to be stopped.
func (be *BuiltinBackupEngine) executeRestoreFullBackup(ctx context.Context, params RestoreParams, bh backupstorage.BackupHandle, bm builtinBackupManifest) error {
if err := prepareToRestore(ctx, params.Cnf, params.Mysqld, params.Logger, params.MysqlShutdownTimeout); err != nil {
@@ -990,8 +1108,8 @@ func (be *BuiltinBackupEngine) executeRestoreIncrementalBackup(ctx context.Conte
// we return the position from which replication should start
// otherwise an error is returned
func (be *BuiltinBackupEngine) ExecuteRestore(ctx context.Context, params RestoreParams, bh backupstorage.BackupHandle) (*BackupManifest, error) {
- var bm builtinBackupManifest
- if err := getBackupManifestInto(ctx, bh, &bm); err != nil {
+ bm, err := be.restoreManifest(ctx, params, bh)
+ if err != nil {
return nil, err
}
@@ -1000,7 +1118,6 @@ func (be *BuiltinBackupEngine) ExecuteRestore(ctx context.Context, params Restor
return nil, err
}
- var err error
if bm.Incremental {
err = be.executeRestoreIncrementalBackup(ctx, params, bh, bm)
} else {
@@ -1013,6 +1130,26 @@ func (be *BuiltinBackupEngine) ExecuteRestore(ctx context.Context, params Restor
return &bm.BackupManifest, nil
}
+func (be *BuiltinBackupEngine) restoreManifest(ctx context.Context, params RestoreParams, bh backupstorage.BackupHandle) (bm builtinBackupManifest, finalErr error) {
+ var retryCount int
+ defer func() {
+ state := "Completed"
+ if finalErr != nil {
+ state = "Failed"
+ }
+ params.Logger.Infof("%s restoring %s %s", state, backupManifestFileName, retryToString(retryCount))
+ }()
+
+ for ; retryCount <= maxRetriesPerFile; retryCount++ {
+ params.Logger.Infof("Restoring file %s %s", backupManifestFileName, retryToString(retryCount))
+ if finalErr = getBackupManifestInto(ctx, bh, &bm); finalErr == nil {
+ break
+ }
+ params.Logger.Infof("Failed restoring %s %s", backupManifestFileName, retryToString(retryCount))
+ }
+ return
+}
+
// restoreFiles will copy all the files from the BackupStorage to the
// right place.
func (be *BuiltinBackupEngine) restoreFiles(ctx context.Context, params RestoreParams, bh backupstorage.BackupHandle, bm builtinBackupManifest) (createdDir string, err error) {
@@ -1033,67 +1170,79 @@ func (be *BuiltinBackupEngine) restoreFiles(ctx context.Context, params RestoreP
}
}
fes := bm.FileEntries
- sema := semaphore.NewWeighted(int64(params.Concurrency))
- rec := concurrency.AllErrorRecorder{}
- wg := sync.WaitGroup{}
+ _ = be.restoreFileEntries(ctx, fes, bh, bm, params, createdDir)
+ if files := bh.GetFailedFiles(); len(files) > 0 {
+ newFEs := make([]FileEntry, len(fes))
+ for _, file := range files {
+ fileNb, err := strconv.Atoi(file)
+ if err != nil {
+ return "", vterrors.Wrapf(err, "failed to retry file '%s'", file)
+ }
+ oldFes := fes[fileNb]
+ newFEs[fileNb] = FileEntry{
+ Base: oldFes.Base,
+ Name: oldFes.Name,
+ ParentPath: oldFes.ParentPath,
+ Hash: oldFes.Hash,
+ RetryCount: 1,
+ }
+ bh.ResetErrorForFile(file)
+ }
+ err = be.restoreFileEntries(ctx, newFEs, bh, bm, params, createdDir)
+ if err != nil {
+ return "", err
+ }
+ }
+ return createdDir, nil
+}
- ctxCancel, cancel := context.WithCancel(ctx)
- defer cancel()
+func (be *BuiltinBackupEngine) restoreFileEntries(ctx context.Context, fes []FileEntry, bh backupstorage.BackupHandle, bm builtinBackupManifest, params RestoreParams, createdDir string) error {
+ g, ctx := errgroup.WithContext(ctx)
+ g.SetLimit(params.Concurrency)
for i := range fes {
- wg.Add(1)
- go func(i int) {
- defer wg.Done()
+ if fes[i].Name == "" {
+ continue
+ }
+ g.Go(func() error {
fe := &fes[i]
- // Wait until we are ready to go, return if we encounter an error
- acqErr := sema.Acquire(ctxCancel, 1)
- if acqErr != nil {
- log.Errorf("Unable to acquire semaphore needed to restore file: %s, err: %s", fe.Name, acqErr.Error())
- rec.RecordError(acqErr)
- cancel()
- return
- }
- defer sema.Release(1)
-
- // First check if we have any error, if we have, there is no point trying to restore this file.
- // We check for errors before checking if the context is canceled on purpose, if there was an
- // error, the context would have been canceled already.
- if rec.HasErrors() {
- params.Logger.Errorf("Failed to restore files due to error: %v", bh.Error())
- return
- }
-
+ name := fmt.Sprintf("%v", i)
// Check for context cancellation explicitly because, the way semaphore code is written, theoretically we might
// end up not throwing an error even after cancellation. Please see https://cs.opensource.google/go/x/sync/+/refs/tags/v0.1.0:semaphore/semaphore.go;l=66,
// which suggests that if the context is already done, `Acquire()` may still succeed without blocking. This introduces
// unpredictability in my test cases, so in order to avoid that, I am adding this cancellation check.
select {
- case <-ctxCancel.Done():
+ case <-ctx.Done():
log.Errorf("Context canceled or timed out during %q restore", fe.Name)
- rec.RecordError(vterrors.Errorf(vtrpc.Code_CANCELED, "context canceled"))
- return
+ bh.RecordError(name, vterrors.Errorf(vtrpc.Code_CANCELED, "context canceled"))
+ return nil
default:
}
fe.ParentPath = createdDir
+
// And restore the file.
- name := fmt.Sprintf("%v", i)
- params.Logger.Infof("Copying file %v: %v", name, fe.Name)
- err := be.restoreFile(ctxCancel, params, bh, fe, bm, name)
- if err != nil {
- rec.RecordError(vterrors.Wrapf(err, "can't restore file %v to %v", name, fe.Name))
- cancel()
+ params.Logger.Infof("Copying file %v: %v %s", name, fe.Name, retryToString(fe.RetryCount))
+ if errRestore := be.restoreFile(ctx, params, bh, fe, bm, name); errRestore != nil {
+ bh.RecordError(name, vterrors.Wrapf(errRestore, "failed to restore file %v to %v", name, fe.Name))
+ if fe.RetryCount >= maxRetriesPerFile {
+ // this is the last attempt, and we have an error, we can return an error, which will let errgroup
+ // know it can cancel the context
+ return errRestore
+ }
}
- }(i)
+ return nil
+ })
}
- wg.Wait()
- return createdDir, rec.Error()
+ _ = g.Wait()
+ return bh.Error()
}
// restoreFile restores an individual file.
func (be *BuiltinBackupEngine) restoreFile(ctx context.Context, params RestoreParams, bh backupstorage.BackupHandle, fe *FileEntry, bm builtinBackupManifest, name string) (finalErr error) {
ctx, cancel := context.WithCancel(ctx)
defer cancel()
+
// Open the source file for reading.
openSourceAt := time.Now()
source, err := bh.ReadFile(ctx, name)
@@ -1111,8 +1260,15 @@ func (be *BuiltinBackupEngine) restoreFile(ctx context.Context, params RestorePa
params.Stats.Scope(stats.Operation("Source:Close")).TimedIncrement(time.Since(closeSourceAt))
}()
- br := newBackupReader(name, 0, timedSource)
- go br.ReportProgress(ctx, builtinBackupProgress, params.Logger, true)
+ // Create the backup/source reader and start reporting progress
+ retryStr := retryToString(fe.RetryCount)
+ br := newBackupReader(fe.Name, 0, timedSource)
+ go br.ReportProgress(ctx, builtinBackupProgress, params.Logger, true, retryStr)
+ defer func() {
+ if err := br.Close(finalErr == nil); err != nil {
+ finalErr = vterrors.Wrap(finalErr, "failed to close the source reader")
+ }
+ }()
var reader io.Reader = br
// Open the destination file for writing.
@@ -1198,10 +1354,6 @@ func (be *BuiltinBackupEngine) restoreFile(ctx context.Context, params RestorePa
return vterrors.Wrap(err, "failed to flush destination buffer")
}
- if err := br.Close(); err != nil {
- return vterrors.Wrap(err, "failed to close the source reader")
- }
-
return nil
}
diff --git a/go/vt/mysqlctl/cephbackupstorage/ceph.go b/go/vt/mysqlctl/cephbackupstorage/ceph.go
index f8e33dbe641..62330b869f0 100644
--- a/go/vt/mysqlctl/cephbackupstorage/ceph.go
+++ b/go/vt/mysqlctl/cephbackupstorage/ceph.go
@@ -32,9 +32,10 @@ import (
minio "github.com/minio/minio-go"
"github.com/spf13/pflag"
- "vitess.io/vitess/go/vt/concurrency"
- "vitess.io/vitess/go/vt/log"
"vitess.io/vitess/go/vt/mysqlctl/backupstorage"
+
+ "vitess.io/vitess/go/vt/log"
+ errorsbackup "vitess.io/vitess/go/vt/mysqlctl/errors"
"vitess.io/vitess/go/vt/servenv"
)
@@ -69,23 +70,8 @@ type CephBackupHandle struct {
dir string
name string
readOnly bool
- errors concurrency.AllErrorRecorder
waitGroup sync.WaitGroup
-}
-
-// RecordError is part of the concurrency.ErrorRecorder interface.
-func (bh *CephBackupHandle) RecordError(err error) {
- bh.errors.RecordError(err)
-}
-
-// HasErrors is part of the concurrency.ErrorRecorder interface.
-func (bh *CephBackupHandle) HasErrors() bool {
- return bh.errors.HasErrors()
-}
-
-// Error is part of the concurrency.ErrorRecorder interface.
-func (bh *CephBackupHandle) Error() error {
- return bh.errors.Error()
+ errorsbackup.PerFileErrorRecorder
}
// Directory implements BackupHandle.
@@ -109,7 +95,7 @@ func (bh *CephBackupHandle) AddFile(ctx context.Context, filename string, filesi
defer bh.waitGroup.Done()
// ceph bucket name is where the backups will go
- //backup handle dir field contains keyspace/shard value
+ // backup handle dir field contains keyspace/shard value
bucket := alterBucketName(bh.dir)
// Give PutObject() the read end of the pipe.
@@ -120,7 +106,7 @@ func (bh *CephBackupHandle) AddFile(ctx context.Context, filename string, filesi
// Signal the writer that an error occurred, in case it's not done writing yet.
reader.CloseWithError(err)
// In case the error happened after the writer finished, we need to remember it.
- bh.RecordError(err)
+ bh.RecordError(filename, err)
}
}()
// Give our caller the write end of the pipe.
diff --git a/go/vt/mysqlctl/errors/errors.go b/go/vt/mysqlctl/errors/errors.go
new file mode 100644
index 00000000000..02485901e50
--- /dev/null
+++ b/go/vt/mysqlctl/errors/errors.go
@@ -0,0 +1,106 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package errors
+
+import (
+ "errors"
+ "strings"
+ "sync"
+)
+
+type BackupErrorRecorder interface {
+ RecordError(string, error)
+ HasErrors() bool
+ Error() error
+ GetFailedFiles() []string
+ ResetErrorForFile(string)
+}
+
+// PerFileErrorRecorder records errors and group them by filename.
+// This is particularly useful when processing several files at the same time
+// and wanting to know which files failed.
+type PerFileErrorRecorder struct {
+ mu sync.Mutex
+ errors map[string][]error
+}
+
+// RecordError records a possible error:
+// - does nothing if err is nil
+func (pfer *PerFileErrorRecorder) RecordError(filename string, err error) {
+ if err == nil {
+ return
+ }
+
+ pfer.mu.Lock()
+ defer pfer.mu.Unlock()
+
+ if pfer.errors == nil {
+ pfer.errors = make(map[string][]error, 1)
+ }
+ pfer.errors[filename] = append(pfer.errors[filename], err)
+}
+
+// HasErrors returns true if we ever recorded an error
+func (pfer *PerFileErrorRecorder) HasErrors() bool {
+ pfer.mu.Lock()
+ defer pfer.mu.Unlock()
+ return len(pfer.errors) > 0
+}
+
+// Error returns all the errors that were recorded
+func (pfer *PerFileErrorRecorder) Error() error {
+ pfer.mu.Lock()
+ defer pfer.mu.Unlock()
+ if pfer.errors == nil {
+ return nil
+ }
+
+ var errs []string
+ for _, fileErrs := range pfer.errors {
+ for _, err := range fileErrs {
+ errs = append(errs, err.Error())
+ }
+ }
+ if len(errs) == 0 {
+ return nil
+ }
+ return errors.New(strings.Join(errs, "; "))
+}
+
+// GetFailedFiles returns a slice of filenames, each of this file have at least 1 error.
+func (pfer *PerFileErrorRecorder) GetFailedFiles() []string {
+ pfer.mu.Lock()
+ defer pfer.mu.Unlock()
+ if pfer.errors == nil {
+ return nil
+ }
+ files := make([]string, 0, len(pfer.errors))
+ for filename := range pfer.errors {
+ files = append(files, filename)
+ }
+ return files
+}
+
+// ResetErrorForFile removes all the errors of a given file.
+func (pfer *PerFileErrorRecorder) ResetErrorForFile(filename string) {
+ pfer.mu.Lock()
+ defer pfer.mu.Unlock()
+ if pfer.errors == nil {
+ return
+ }
+ delete(pfer.errors, filename)
+}
diff --git a/go/vt/mysqlctl/fakebackupstorage.go b/go/vt/mysqlctl/fakebackupstorage.go
index 75587191157..582b422cf58 100644
--- a/go/vt/mysqlctl/fakebackupstorage.go
+++ b/go/vt/mysqlctl/fakebackupstorage.go
@@ -21,20 +21,21 @@ import (
"fmt"
"io"
- "vitess.io/vitess/go/vt/concurrency"
"vitess.io/vitess/go/vt/mysqlctl/backupstorage"
+ "vitess.io/vitess/go/vt/mysqlctl/errors"
)
type FakeBackupHandle struct {
Dir string
NameV string
ReadOnly bool
- Errors concurrency.AllErrorRecorder
+ errors.PerFileErrorRecorder
AbortBackupCalls []context.Context
AbortBackupReturn error
AddFileCalls []FakeBackupHandleAddFileCall
AddFileReturn FakeBackupHandleAddFileReturn
+ AddFileReturnF func(filename string) FakeBackupHandleAddFileReturn
EndBackupCalls []context.Context
EndBackupReturn error
ReadFileCalls []FakeBackupHandleReadFileCall
@@ -57,18 +58,6 @@ type FakeBackupHandleReadFileCall struct {
Filename string
}
-func (fbh *FakeBackupHandle) RecordError(err error) {
- fbh.Errors.RecordError(err)
-}
-
-func (fbh *FakeBackupHandle) HasErrors() bool {
- return fbh.Errors.HasErrors()
-}
-
-func (fbh *FakeBackupHandle) Error() error {
- return fbh.Errors.Error()
-}
-
func (fbh *FakeBackupHandle) Directory() string {
return fbh.Dir
}
@@ -79,6 +68,11 @@ func (fbh *FakeBackupHandle) Name() string {
func (fbh *FakeBackupHandle) AddFile(ctx context.Context, filename string, filesize int64) (io.WriteCloser, error) {
fbh.AddFileCalls = append(fbh.AddFileCalls, FakeBackupHandleAddFileCall{ctx, filename, filesize})
+
+ if fbh.AddFileReturnF != nil {
+ r := fbh.AddFileReturnF(filename)
+ return r.WriteCloser, r.Err
+ }
return fbh.AddFileReturn.WriteCloser, fbh.AddFileReturn.Err
}
diff --git a/go/vt/mysqlctl/fakemysqldaemon.go b/go/vt/mysqlctl/fakemysqldaemon.go
index 1bab1639acb..e6afe7917f1 100644
--- a/go/vt/mysqlctl/fakemysqldaemon.go
+++ b/go/vt/mysqlctl/fakemysqldaemon.go
@@ -67,6 +67,9 @@ type FakeMysqlDaemon struct {
// return an error.
MysqlPort atomic.Int32
+ // ServerUUID is the server's UUID.
+ ServerUUID string
+
// Replicating is updated when calling StartReplication /
// StopReplication (it is not used at all when calling
// ReplicationStatus, it is the test owner responsibility
@@ -185,6 +188,9 @@ type FakeMysqlDaemon struct {
// SemiSyncReplicaEnabled represents the state of rpl_semi_sync_replica_enabled.
SemiSyncReplicaEnabled bool
+ // GlobalReadLock is used to test if a lock has been acquired already or not
+ GlobalReadLock bool
+
// TimeoutHook is a func that can be called at the beginning of
// any method to fake a timeout.
// All a test needs to do is make it { return context.DeadlineExceeded }.
@@ -296,14 +302,10 @@ func (fmd *FakeMysqlDaemon) GetServerID(ctx context.Context) (uint32, error) {
// GetServerUUID is part of the MysqlDaemon interface.
func (fmd *FakeMysqlDaemon) GetServerUUID(ctx context.Context) (string, error) {
- return "000000", nil
-}
-
-// CurrentPrimaryPositionLocked is thread-safe.
-func (fmd *FakeMysqlDaemon) CurrentPrimaryPositionLocked(pos replication.Position) {
- fmd.mu.Lock()
- defer fmd.mu.Unlock()
- fmd.CurrentPrimaryPosition = pos
+ if fmd.ServerUUID != "" {
+ return fmd.ServerUUID, nil
+ }
+ return "00000000-0000-0000-0000-000000000000", nil
}
// ReplicationStatus is part of the MysqlDaemon interface.
@@ -330,12 +332,16 @@ func (fmd *FakeMysqlDaemon) ReplicationStatus(ctx context.Context) (replication.
// PrimaryStatus is part of the MysqlDaemon interface.
func (fmd *FakeMysqlDaemon) PrimaryStatus(ctx context.Context) (replication.PrimaryStatus, error) {
+ fmd.mu.Lock()
+ defer fmd.mu.Unlock()
if fmd.PrimaryStatusError != nil {
return replication.PrimaryStatus{}, fmd.PrimaryStatusError
}
+ serverUUID, _ := fmd.GetServerUUID(ctx)
return replication.PrimaryStatus{
Position: fmd.CurrentPrimaryPosition,
FilePosition: fmd.CurrentSourceFilePosition,
+ ServerUUID: serverUUID,
}, nil
}
@@ -399,7 +405,21 @@ func (fmd *FakeMysqlDaemon) GetPreviousGTIDs(ctx context.Context, binlog string)
// PrimaryPosition is part of the MysqlDaemon interface.
func (fmd *FakeMysqlDaemon) PrimaryPosition(ctx context.Context) (replication.Position, error) {
- return fmd.CurrentPrimaryPosition, nil
+ return fmd.GetPrimaryPositionLocked(), nil
+}
+
+// GetPrimaryPositionLocked gets the primary position while holding the lock.
+func (fmd *FakeMysqlDaemon) GetPrimaryPositionLocked() replication.Position {
+ fmd.mu.Lock()
+ defer fmd.mu.Unlock()
+ return fmd.CurrentPrimaryPosition
+}
+
+// SetPrimaryPositionLocked is thread-safe.
+func (fmd *FakeMysqlDaemon) SetPrimaryPositionLocked(pos replication.Position) {
+ fmd.mu.Lock()
+ defer fmd.mu.Unlock()
+ fmd.CurrentPrimaryPosition = pos
}
// IsReadOnly is part of the MysqlDaemon interface.
@@ -763,10 +783,20 @@ func (fmd *FakeMysqlDaemon) HostMetrics(ctx context.Context, cnf *Mycnf) (*mysql
// AcquireGlobalReadLock is part of the MysqlDaemon interface.
func (fmd *FakeMysqlDaemon) AcquireGlobalReadLock(ctx context.Context) error {
- return errors.New("not implemented")
+ if fmd.GlobalReadLock {
+ return errors.New("lock already acquired")
+ }
+
+ fmd.GlobalReadLock = true
+ return nil
}
// ReleaseGlobalReadLock is part of the MysqlDaemon interface.
func (fmd *FakeMysqlDaemon) ReleaseGlobalReadLock(ctx context.Context) error {
- return errors.New("not implemented")
+ if fmd.GlobalReadLock {
+ fmd.GlobalReadLock = false
+ return nil
+ }
+
+ return errors.New("no read locks acquired yet")
}
diff --git a/go/vt/mysqlctl/filebackupstorage/file.go b/go/vt/mysqlctl/filebackupstorage/file.go
index 99148d9169b..bd73c55e70c 100644
--- a/go/vt/mysqlctl/filebackupstorage/file.go
+++ b/go/vt/mysqlctl/filebackupstorage/file.go
@@ -27,8 +27,9 @@ import (
"github.com/spf13/pflag"
+ "vitess.io/vitess/go/vt/mysqlctl/errors"
+
"vitess.io/vitess/go/ioutil"
- "vitess.io/vitess/go/vt/concurrency"
stats "vitess.io/vitess/go/vt/mysqlctl/backupstats"
"vitess.io/vitess/go/vt/mysqlctl/backupstorage"
"vitess.io/vitess/go/vt/servenv"
@@ -59,7 +60,7 @@ type FileBackupHandle struct {
dir string
name string
readOnly bool
- errors concurrency.AllErrorRecorder
+ errors.PerFileErrorRecorder
}
func NewBackupHandle(
@@ -79,21 +80,6 @@ func NewBackupHandle(
}
}
-// RecordError is part of the concurrency.ErrorRecorder interface.
-func (fbh *FileBackupHandle) RecordError(err error) {
- fbh.errors.RecordError(err)
-}
-
-// HasErrors is part of the concurrency.ErrorRecorder interface.
-func (fbh *FileBackupHandle) HasErrors() bool {
- return fbh.errors.HasErrors()
-}
-
-// Error is part of the concurrency.ErrorRecorder interface.
-func (fbh *FileBackupHandle) Error() error {
- return fbh.errors.Error()
-}
-
// Directory is part of the BackupHandle interface
func (fbh *FileBackupHandle) Directory() string {
return fbh.dir
diff --git a/go/vt/mysqlctl/gcsbackupstorage/gcs.go b/go/vt/mysqlctl/gcsbackupstorage/gcs.go
index 814395a225a..adecbb9bbba 100644
--- a/go/vt/mysqlctl/gcsbackupstorage/gcs.go
+++ b/go/vt/mysqlctl/gcsbackupstorage/gcs.go
@@ -32,8 +32,9 @@ import (
"google.golang.org/api/iterator"
"google.golang.org/api/option"
+ "vitess.io/vitess/go/vt/mysqlctl/errors"
+
"vitess.io/vitess/go/trace"
- "vitess.io/vitess/go/vt/concurrency"
"vitess.io/vitess/go/vt/mysqlctl/backupstorage"
"vitess.io/vitess/go/vt/servenv"
)
@@ -65,22 +66,7 @@ type GCSBackupHandle struct {
dir string
name string
readOnly bool
- errors concurrency.AllErrorRecorder
-}
-
-// RecordError is part of the concurrency.ErrorRecorder interface.
-func (bh *GCSBackupHandle) RecordError(err error) {
- bh.errors.RecordError(err)
-}
-
-// HasErrors is part of the concurrency.ErrorRecorder interface.
-func (bh *GCSBackupHandle) HasErrors() bool {
- return bh.errors.HasErrors()
-}
-
-// Error is part of the concurrency.ErrorRecorder interface.
-func (bh *GCSBackupHandle) Error() error {
- return bh.errors.Error()
+ errors.PerFileErrorRecorder
}
// Directory implements BackupHandle.
diff --git a/go/vt/mysqlctl/mysqld.go b/go/vt/mysqlctl/mysqld.go
index 72c1d8f6658..d7435705a8a 100644
--- a/go/vt/mysqlctl/mysqld.go
+++ b/go/vt/mysqlctl/mysqld.go
@@ -47,6 +47,7 @@ import (
"vitess.io/vitess/config"
"vitess.io/vitess/go/mysql"
"vitess.io/vitess/go/mysql/sqlerror"
+ "vitess.io/vitess/go/osutil"
"vitess.io/vitess/go/protoutil"
"vitess.io/vitess/go/sqltypes"
"vitess.io/vitess/go/vt/dbconfigs"
@@ -1332,18 +1333,7 @@ func hostMetrics(ctx context.Context, cnf *Mycnf) (*mysqlctlpb.HostMetricsRespon
_ = func() error {
metric := newMetric("loadavg")
- if runtime.GOOS != "linux" {
- return withError(metric, fmt.Errorf("loadavg metric is only available on Linux"))
- }
- content, err := os.ReadFile("/proc/loadavg")
- if err != nil {
- return withError(metric, err)
- }
- fields := strings.Fields(string(content))
- if len(fields) == 0 {
- return withError(metric, fmt.Errorf("unexpected /proc/loadavg content"))
- }
- loadAvg, err := strconv.ParseFloat(fields[0], 64)
+ loadAvg, err := osutil.LoadAvg()
if err != nil {
return withError(metric, err)
}
diff --git a/go/vt/mysqlctl/mysqlshellbackupengine.go b/go/vt/mysqlctl/mysqlshellbackupengine.go
index 0c41056b621..681e62d10cd 100644
--- a/go/vt/mysqlctl/mysqlshellbackupengine.go
+++ b/go/vt/mysqlctl/mysqlshellbackupengine.go
@@ -85,7 +85,9 @@ type MySQLShellBackupManifest struct {
}
func init() {
- BackupRestoreEngineMap[mysqlShellBackupEngineName] = &MySQLShellBackupEngine{}
+ BackupRestoreEngineMap[mysqlShellBackupEngineName] = &MySQLShellBackupEngine{
+ binaryName: "mysqlsh",
+ }
for _, cmd := range []string{"vtcombo", "vttablet", "vtbackup", "vttestserver", "vtctldclient"} {
servenv.OnParseFor(cmd, registerMysqlShellBackupEngineFlags)
@@ -104,11 +106,12 @@ func registerMysqlShellBackupEngineFlags(fs *pflag.FlagSet) {
// MySQLShellBackupEngine encapsulates the logic to implement the restoration
// of a mysql-shell based backup.
type MySQLShellBackupEngine struct {
+ binaryName string
}
const (
- mysqlShellBackupBinaryName = "mysqlsh"
mysqlShellBackupEngineName = "mysqlshell"
+ mysqlShellLockMessage = "Global read lock has been released"
)
func (be *MySQLShellBackupEngine) ExecuteBackup(ctx context.Context, params BackupParams, bh backupstorage.BackupHandle) (result BackupResult, finalErr error) {
@@ -152,45 +155,47 @@ func (be *MySQLShellBackupEngine) ExecuteBackup(ctx context.Context, params Back
}
lockAcquired := time.Now() // we will report how long we hold the lock for
+ // we need to release the global read lock in case the backup fails to start and
+ // the lock wasn't released by releaseReadLock() yet. context might be expired,
+ // so we pass a new one.
+ defer func() { _ = params.Mysqld.ReleaseGlobalReadLock(context.Background()) }()
+
posBeforeBackup, err := params.Mysqld.PrimaryPosition(ctx)
if err != nil {
return BackupUnusable, vterrors.Wrap(err, "failed to fetch position")
}
- cmd := exec.CommandContext(ctx, mysqlShellBackupBinaryName, args...)
+ cmd := exec.CommandContext(ctx, be.binaryName, args...)
params.Logger.Infof("running %s", cmd.String())
- cmdOut, err := cmd.StdoutPipe()
- if err != nil {
- return BackupUnusable, vterrors.Wrap(err, "cannot create stdout pipe")
- }
- cmdOriginalErr, err := cmd.StderrPipe()
- if err != nil {
- return BackupUnusable, vterrors.Wrap(err, "cannot create stderr pipe")
- }
- if err := cmd.Start(); err != nil {
- return BackupUnusable, vterrors.Wrap(err, "can't start mysqlshell")
- }
+ stdoutReader, stdoutWriter := io.Pipe()
+ stderrReader, stderrWriter := io.Pipe()
+ lockWaiterReader, lockWaiterWriter := io.Pipe()
- pipeReader, pipeWriter := io.Pipe()
- cmdErr := io.TeeReader(cmdOriginalErr, pipeWriter)
+ cmd.Stdout = stdoutWriter
+ cmd.Stderr = stderrWriter
+ combinedErr := io.TeeReader(stderrReader, lockWaiterWriter)
cmdWg := &sync.WaitGroup{}
cmdWg.Add(3)
- go releaseReadLock(ctx, pipeReader, params, cmdWg, lockAcquired)
- go scanLinesToLogger(mysqlShellBackupEngineName+" stdout", cmdOut, params.Logger, cmdWg.Done)
- go scanLinesToLogger(mysqlShellBackupEngineName+" stderr", cmdErr, params.Logger, cmdWg.Done)
+ go releaseReadLock(ctx, lockWaiterReader, params, cmdWg, lockAcquired)
+ go scanLinesToLogger(mysqlShellBackupEngineName+" stdout", stdoutReader, params.Logger, cmdWg.Done)
+ go scanLinesToLogger(mysqlShellBackupEngineName+" stderr", combinedErr, params.Logger, cmdWg.Done)
- // Get exit status.
- if err := cmd.Wait(); err != nil {
- return BackupUnusable, vterrors.Wrap(err, mysqlShellBackupEngineName+" failed")
- }
+ // we run the command, wait for it to complete and close all pipes so the goroutines can complete on their own.
+ // after that we can process if an error has happened or not.
+ err = cmd.Run()
- // close the pipeWriter and wait for the goroutines to have read all the logs
- pipeWriter.Close()
+ stdoutWriter.Close()
+ stderrWriter.Close()
+ lockWaiterWriter.Close()
cmdWg.Wait()
+ if err != nil {
+ return BackupUnusable, vterrors.Wrap(err, mysqlShellBackupEngineName+" failed")
+ }
+
// open the MANIFEST
params.Logger.Infof("Writing backup MANIFEST")
mwc, err := bh.AddFile(ctx, backupManifestFileName, backupstorage.FileSizeUnknown)
@@ -363,7 +368,7 @@ func (be *MySQLShellBackupEngine) ExecuteRestore(ctx context.Context, params Res
if err := cmd.Wait(); err != nil {
return nil, vterrors.Wrap(err, mysqlShellBackupEngineName+" failed")
}
- params.Logger.Infof("%s completed successfully", mysqlShellBackupBinaryName)
+ params.Logger.Infof("%s completed successfully", be.binaryName)
// disable local_infile now that the restore is done.
err = params.Mysqld.ExecuteSuperQuery(ctx, "SET GLOBAL LOCAL_INFILE=0")
@@ -503,7 +508,7 @@ func releaseReadLock(ctx context.Context, reader io.Reader, params BackupParams,
if !released {
- if !strings.Contains(line, "Global read lock has been released") {
+ if !strings.Contains(line, mysqlShellLockMessage) {
continue
}
released = true
@@ -521,6 +526,10 @@ func releaseReadLock(ctx context.Context, reader io.Reader, params BackupParams,
if err := scanner.Err(); err != nil {
params.Logger.Errorf("error reading from reader: %v", err)
}
+
+ if !released {
+ params.Logger.Errorf("could not release global lock earlier")
+ }
}
func cleanupMySQL(ctx context.Context, params RestoreParams, shouldDeleteUsers bool) error {
diff --git a/go/vt/mysqlctl/mysqlshellbackupengine_test.go b/go/vt/mysqlctl/mysqlshellbackupengine_test.go
index a0d0c8d7a1d..80491ec2afc 100644
--- a/go/vt/mysqlctl/mysqlshellbackupengine_test.go
+++ b/go/vt/mysqlctl/mysqlshellbackupengine_test.go
@@ -18,13 +18,16 @@ package mysqlctl
import (
"context"
+ "encoding/json"
"fmt"
+ "os"
"path"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
+ "vitess.io/vitess/go/ioutil"
"vitess.io/vitess/go/mysql/fakesqldb"
"vitess.io/vitess/go/sqltypes"
"vitess.io/vitess/go/vt/logutil"
@@ -307,3 +310,120 @@ func TestCleanupMySQL(t *testing.T) {
}
}
+
+// this is a helper to write files in a temporary directory
+func generateTestFile(t *testing.T, name, contents string) {
+ f, err := os.OpenFile(name, os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0700)
+ require.NoError(t, err)
+ defer f.Close()
+ _, err = f.WriteString(contents)
+ require.NoError(t, err)
+ require.NoError(t, f.Close())
+}
+
+// This tests if we are properly releasing the global read lock we acquire
+// during ExecuteBackup(), even if the backup didn't succeed.
+func TestMySQLShellBackupEngine_ExecuteBackup_ReleaseLock(t *testing.T) {
+ originalLocation := mysqlShellBackupLocation
+ mysqlShellBackupLocation = "logical"
+
+ defer func() { // restore the original value.
+ mysqlShellBackupLocation = originalLocation
+ }()
+
+ logger := logutil.NewMemoryLogger()
+ fakedb := fakesqldb.New(t)
+ defer fakedb.Close()
+ mysql := NewFakeMysqlDaemon(fakedb)
+ defer mysql.Close()
+
+ params := BackupParams{
+ TabletAlias: "test",
+ Logger: logger,
+ Mysqld: mysql,
+ }
+ bs := FakeBackupStorage{
+ StartBackupReturn: FakeBackupStorageStartBackupReturn{},
+ }
+
+ t.Run("lock released if we see the mysqlsh lock being acquired", func(t *testing.T) {
+ be := &MySQLShellBackupEngine{binaryName: path.Join(t.TempDir(), "mysqlsh.sh")}
+ logger.Clear()
+ manifestBuffer := ioutil.NewBytesBufferWriter()
+ bs.StartBackupReturn.BackupHandle = &FakeBackupHandle{
+ Dir: t.TempDir(),
+ AddFileReturn: FakeBackupHandleAddFileReturn{WriteCloser: manifestBuffer},
+ }
+
+ // this simulates mysql shell completing without any issues.
+ generateTestFile(t, be.binaryName, fmt.Sprintf(
+ "#!/bin/bash\n>&2 echo %s; echo \"backup completed\"; sleep 0.01", mysqlShellLockMessage))
+
+ bh, err := bs.StartBackup(context.Background(), t.TempDir(), t.Name())
+ require.NoError(t, err)
+
+ _, err = be.ExecuteBackup(context.Background(), params, bh)
+ require.NoError(t, err)
+ require.False(t, mysql.GlobalReadLock) // lock must be released.
+
+ // check the manifest is valid.
+ var manifest MySQLShellBackupManifest
+ err = json.Unmarshal(manifestBuffer.Bytes(), &manifest)
+ require.NoError(t, err)
+
+ require.Equal(t, mysqlShellBackupEngineName, manifest.BackupMethod)
+
+ // did we notice the lock was release and did we release it ours as well?
+ require.Contains(t, logger.String(), "global read lock released after",
+ "failed to release the global lock after mysqlsh")
+ })
+
+ t.Run("lock released if we don't see mysqlsh release it", func(t *testing.T) {
+ be := &MySQLShellBackupEngine{binaryName: path.Join(t.TempDir(), "mysqlsh.sh")}
+ mysql.GlobalReadLock = false // clear lock status.
+ logger.Clear()
+ manifestBuffer := ioutil.NewBytesBufferWriter()
+ bs.StartBackupReturn.BackupHandle = &FakeBackupHandle{
+ Dir: t.TempDir(),
+ AddFileReturn: FakeBackupHandleAddFileReturn{WriteCloser: manifestBuffer},
+ }
+
+ // this simulates mysqlshell completing, but we don't see the message that is released its lock.
+ generateTestFile(t, be.binaryName, "#!/bin/bash\nexit 0")
+
+ bh, err := bs.StartBackup(context.Background(), t.TempDir(), t.Name())
+ require.NoError(t, err)
+
+ // in this case the backup was successful, but even if we didn't see mysqlsh release its lock
+ // we make sure it is released at the end.
+ _, err = be.ExecuteBackup(context.Background(), params, bh)
+ require.NoError(t, err)
+ require.False(t, mysql.GlobalReadLock) // lock must be released.
+
+ // make sure we are at least logging the lock wasn't able to be released earlier.
+ require.Contains(t, logger.String(), "could not release global lock earlier",
+ "failed to log error message when unable to release lock during backup")
+ })
+
+ t.Run("lock released when backup fails", func(t *testing.T) {
+ be := &MySQLShellBackupEngine{binaryName: path.Join(t.TempDir(), "mysqlsh.sh")}
+ mysql.GlobalReadLock = false // clear lock status.
+ logger.Clear()
+ manifestBuffer := ioutil.NewBytesBufferWriter()
+ bs.StartBackupReturn.BackupHandle = &FakeBackupHandle{
+ Dir: t.TempDir(),
+ AddFileReturn: FakeBackupHandleAddFileReturn{WriteCloser: manifestBuffer},
+ }
+
+ // this simulates the backup process failing.
+ generateTestFile(t, be.binaryName, "#!/bin/bash\nexit 1")
+
+ bh, err := bs.StartBackup(context.Background(), t.TempDir(), t.Name())
+ require.NoError(t, err)
+
+ _, err = be.ExecuteBackup(context.Background(), params, bh)
+ require.ErrorContains(t, err, "mysqlshell failed")
+ require.False(t, mysql.GlobalReadLock) // lock must be released.
+ })
+
+}
diff --git a/go/vt/mysqlctl/reparent.go b/go/vt/mysqlctl/reparent.go
index 08326390f97..9c7e0f91361 100644
--- a/go/vt/mysqlctl/reparent.go
+++ b/go/vt/mysqlctl/reparent.go
@@ -22,6 +22,7 @@ This file contains the reparenting methods for mysqlctl.
import (
"context"
+ "fmt"
"time"
"vitess.io/vitess/go/constants/sidecar"
@@ -53,6 +54,11 @@ func PopulateReparentJournal(timeCreatedNS int64, actionName, primaryAlias strin
timeCreatedNS, actionName, primaryAlias, posStr).Query
}
+// ReadReparentJournalInfoQuery returns the query we use to read information required from Reparent Journal.
+func ReadReparentJournalInfoQuery() string {
+ return fmt.Sprintf("SELECT COUNT(*) FROM %s.reparent_journal", sidecar.GetIdentifier())
+}
+
// queryReparentJournal returns the SQL query to use to query the database
// for a reparent_journal row.
func queryReparentJournal(timeCreatedNS int64) string {
diff --git a/go/vt/mysqlctl/replication.go b/go/vt/mysqlctl/replication.go
index dd82794b42c..bd244d4f5c7 100644
--- a/go/vt/mysqlctl/replication.go
+++ b/go/vt/mysqlctl/replication.go
@@ -434,7 +434,15 @@ func (mysqld *Mysqld) PrimaryStatus(ctx context.Context) (replication.PrimarySta
}
defer conn.Recycle()
- return conn.Conn.ShowPrimaryStatus()
+ primaryStatus, err := conn.Conn.ShowPrimaryStatus()
+ if err != nil {
+ return replication.PrimaryStatus{}, err
+ }
+ primaryStatus.ServerUUID, err = conn.Conn.GetServerUUID()
+ if err != nil {
+ return replication.PrimaryStatus{}, err
+ }
+ return primaryStatus, nil
}
func (mysqld *Mysqld) ReplicationConfiguration(ctx context.Context) (*replicationdata.Configuration, error) {
diff --git a/go/vt/mysqlctl/replication_test.go b/go/vt/mysqlctl/replication_test.go
index 1ca41437ea7..d3745bff88c 100644
--- a/go/vt/mysqlctl/replication_test.go
+++ b/go/vt/mysqlctl/replication_test.go
@@ -287,6 +287,7 @@ func TestPrimaryStatus(t *testing.T) {
db.AddQuery("SELECT 1", &sqltypes.Result{})
db.AddQuery("SHOW MASTER STATUS", sqltypes.MakeTestResult(sqltypes.MakeTestFields("test_field", "varchar"), "test_status"))
+ db.AddQuery("SELECT @@global.server_uuid", sqltypes.MakeTestResult(sqltypes.MakeTestFields("test_field", "varchar"), "test_uuid"))
testMysqld := NewMysqld(dbc)
defer testMysqld.Close()
@@ -295,6 +296,7 @@ func TestPrimaryStatus(t *testing.T) {
res, err := testMysqld.PrimaryStatus(ctx)
assert.NoError(t, err)
assert.NotNil(t, res)
+ assert.EqualValues(t, "test_uuid", res.ServerUUID)
db.AddQuery("SHOW MASTER STATUS", &sqltypes.Result{})
_, err = testMysqld.PrimaryStatus(ctx)
diff --git a/go/vt/mysqlctl/s3backupstorage/s3.go b/go/vt/mysqlctl/s3backupstorage/s3.go
index b3a8117aafa..97861e83729 100644
--- a/go/vt/mysqlctl/s3backupstorage/s3.go
+++ b/go/vt/mysqlctl/s3backupstorage/s3.go
@@ -40,6 +40,7 @@ import (
"time"
"github.com/aws/aws-sdk-go-v2/aws"
+ "github.com/aws/aws-sdk-go-v2/aws/retry"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/feature/s3/manager"
"github.com/aws/aws-sdk-go-v2/service/s3"
@@ -48,7 +49,8 @@ import (
"github.com/aws/smithy-go/middleware"
"github.com/spf13/pflag"
- "vitess.io/vitess/go/vt/concurrency"
+ errorsbackup "vitess.io/vitess/go/vt/mysqlctl/errors"
+
"vitess.io/vitess/go/vt/log"
stats "vitess.io/vitess/go/vt/mysqlctl/backupstats"
"vitess.io/vitess/go/vt/mysqlctl/backupstorage"
@@ -144,8 +146,8 @@ type S3BackupHandle struct {
dir string
name string
readOnly bool
- errors concurrency.AllErrorRecorder
waitGroup sync.WaitGroup
+ errorsbackup.PerFileErrorRecorder
}
// Directory is part of the backupstorage.BackupHandle interface.
@@ -158,39 +160,23 @@ func (bh *S3BackupHandle) Name() string {
return bh.name
}
-// RecordError is part of the concurrency.ErrorRecorder interface.
-func (bh *S3BackupHandle) RecordError(err error) {
- bh.errors.RecordError(err)
-}
-
-// HasErrors is part of the concurrency.ErrorRecorder interface.
-func (bh *S3BackupHandle) HasErrors() bool {
- return bh.errors.HasErrors()
-}
-
-// Error is part of the concurrency.ErrorRecorder interface.
-func (bh *S3BackupHandle) Error() error {
- return bh.errors.Error()
-}
-
// AddFile is part of the backupstorage.BackupHandle interface.
func (bh *S3BackupHandle) AddFile(ctx context.Context, filename string, filesize int64) (io.WriteCloser, error) {
if bh.readOnly {
return nil, fmt.Errorf("AddFile cannot be called on read-only backup")
}
- // Calculate s3 upload part size using the source filesize
- partSizeBytes := manager.DefaultUploadPartSize
- if filesize > 0 {
- minimumPartSize := float64(filesize) / float64(manager.MaxUploadParts)
- // Round up to ensure large enough partsize
- calculatedPartSizeBytes := int64(math.Ceil(minimumPartSize))
- if calculatedPartSizeBytes > partSizeBytes {
- partSizeBytes = calculatedPartSizeBytes
- }
- }
+ partSizeBytes := calculateUploadPartSize(filesize)
reader, writer := io.Pipe()
+ bh.handleAddFile(ctx, filename, partSizeBytes, reader, func(err error) {
+ reader.CloseWithError(err)
+ })
+
+ return writer, nil
+}
+
+func (bh *S3BackupHandle) handleAddFile(ctx context.Context, filename string, partSizeBytes int64, reader io.Reader, closer func(error)) {
bh.waitGroup.Add(1)
go func() {
@@ -221,12 +207,24 @@ func (bh *S3BackupHandle) AddFile(ctx context.Context, filename string, filesize
})
})
if err != nil {
- reader.CloseWithError(err)
- bh.RecordError(err)
+ closer(err)
+ bh.RecordError(filename, err)
}
}()
+}
- return writer, nil
+func calculateUploadPartSize(filesize int64) int64 {
+ // Calculate s3 upload part size using the source filesize
+ partSizeBytes := manager.DefaultUploadPartSize
+ if filesize > 0 {
+ minimumPartSize := float64(filesize) / float64(manager.MaxUploadParts)
+ // Round up to ensure large enough partsize
+ calculatedPartSizeBytes := int64(math.Ceil(minimumPartSize))
+ if calculatedPartSizeBytes > partSizeBytes {
+ partSizeBytes = calculatedPartSizeBytes
+ }
+ }
+ return partSizeBytes
}
// EndBackup is part of the backupstorage.BackupHandle interface.
@@ -505,13 +503,24 @@ func (bs *S3BackupStorage) client() (*s3.Client, error) {
return nil, err
}
- bs._client = s3.NewFromConfig(cfg, func(o *s3.Options) {
- o.UsePathStyle = forcePath
- if retryCount >= 0 {
- o.RetryMaxAttempts = retryCount
- o.Retryer = &ClosedConnectionRetryer{}
- }
- }, s3.WithEndpointResolverV2(newEndpointResolver()))
+ options := []func(options *s3.Options){
+ func(o *s3.Options) {
+ o.UsePathStyle = forcePath
+ if retryCount >= 0 {
+ o.RetryMaxAttempts = retryCount
+ o.Retryer = &ClosedConnectionRetryer{
+ awsRetryer: retry.NewStandard(func(options *retry.StandardOptions) {
+ options.MaxAttempts = retryCount
+ }),
+ }
+ }
+ },
+ }
+ if endpoint != "" {
+ options = append(options, s3.WithEndpointResolverV2(newEndpointResolver()))
+ }
+
+ bs._client = s3.NewFromConfig(cfg, options...)
if len(bucket) == 0 {
return nil, fmt.Errorf("--s3_backup_storage_bucket required")
diff --git a/go/vt/mysqlctl/s3backupstorage/s3_mock.go b/go/vt/mysqlctl/s3backupstorage/s3_mock.go
new file mode 100644
index 00000000000..f244c4d63b1
--- /dev/null
+++ b/go/vt/mysqlctl/s3backupstorage/s3_mock.go
@@ -0,0 +1,223 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package s3backupstorage
+
+import (
+ "context"
+ "errors"
+ "fmt"
+ "io"
+ "sync"
+
+ "vitess.io/vitess/go/vt/logutil"
+ "vitess.io/vitess/go/vt/mysqlctl/backupstats"
+ "vitess.io/vitess/go/vt/mysqlctl/backupstorage"
+)
+
+type FakeS3BackupHandle struct {
+ *S3BackupHandle
+
+ AddFileReturnF func(s3 *S3BackupHandle, ctx context.Context, filename string, filesize int64, firstAdd bool) (io.WriteCloser, error)
+ ReadFileReturnF func(s3 *S3BackupHandle, ctx context.Context, filename string, firstRead bool) (io.ReadCloser, error)
+
+ mu sync.Mutex
+ addPerFile map[string]int
+ readPerFile map[string]int
+}
+
+type FakeConfig struct {
+ Region string
+ Endpoint string
+ Bucket string
+ ForcePath bool
+}
+
+func InitFlag(cfg FakeConfig) {
+ region = cfg.Region
+ endpoint = cfg.Endpoint
+ bucket = cfg.Bucket
+ forcePath = cfg.ForcePath
+}
+
+func NewFakeS3BackupHandle(ctx context.Context, dir, name string, logger logutil.Logger, stats backupstats.Stats) (*FakeS3BackupHandle, error) {
+ s := newS3BackupStorage()
+ bs := s.WithParams(backupstorage.Params{
+ Logger: logger,
+ Stats: stats,
+ })
+ bh, err := bs.StartBackup(ctx, dir, name)
+ if err != nil {
+ return nil, err
+ }
+ return &FakeS3BackupHandle{
+ S3BackupHandle: bh.(*S3BackupHandle),
+ addPerFile: make(map[string]int),
+ readPerFile: make(map[string]int),
+ }, nil
+}
+
+func NewFakeS3RestoreHandle(ctx context.Context, dir string, logger logutil.Logger, stats backupstats.Stats) (*FakeS3BackupHandle, error) {
+ s := newS3BackupStorage()
+ bs := s.WithParams(backupstorage.Params{
+ Logger: logger,
+ Stats: stats,
+ })
+ bhs, err := bs.ListBackups(ctx, dir)
+ if err != nil {
+ return nil, err
+ }
+ return &FakeS3BackupHandle{
+ S3BackupHandle: bhs[0].(*S3BackupHandle),
+ addPerFile: make(map[string]int),
+ readPerFile: make(map[string]int),
+ }, nil
+}
+
+func (fbh *FakeS3BackupHandle) Directory() string {
+ return fbh.S3BackupHandle.Directory()
+}
+
+func (fbh *FakeS3BackupHandle) Name() string {
+ return fbh.S3BackupHandle.Name()
+}
+
+func (fbh *FakeS3BackupHandle) AddFile(ctx context.Context, filename string, filesize int64) (io.WriteCloser, error) {
+ fbh.mu.Lock()
+ defer func() {
+ fbh.addPerFile[filename] += 1
+ fbh.mu.Unlock()
+ }()
+
+ if fbh.AddFileReturnF != nil {
+ return fbh.AddFileReturnF(fbh.S3BackupHandle, ctx, filename, filesize, fbh.addPerFile[filename] == 0)
+ }
+ return fbh.S3BackupHandle.AddFile(ctx, filename, filesize)
+}
+
+func (fbh *FakeS3BackupHandle) EndBackup(ctx context.Context) error {
+ return fbh.S3BackupHandle.EndBackup(ctx)
+}
+
+func (fbh *FakeS3BackupHandle) AbortBackup(ctx context.Context) error {
+ return fbh.S3BackupHandle.AbortBackup(ctx)
+}
+
+func (fbh *FakeS3BackupHandle) ReadFile(ctx context.Context, filename string) (io.ReadCloser, error) {
+ fbh.mu.Lock()
+ defer func() {
+ fbh.readPerFile[filename] += 1
+ fbh.mu.Unlock()
+ }()
+
+ if fbh.ReadFileReturnF != nil {
+ return fbh.ReadFileReturnF(fbh.S3BackupHandle, ctx, filename, fbh.readPerFile[filename] == 0)
+ }
+ return fbh.S3BackupHandle.ReadFile(ctx, filename)
+}
+
+func (fbh *FakeS3BackupHandle) RecordError(s string, err error) {
+ fbh.S3BackupHandle.RecordError(s, err)
+}
+
+func (fbh *FakeS3BackupHandle) HasErrors() bool {
+ return fbh.S3BackupHandle.HasErrors()
+}
+
+func (fbh *FakeS3BackupHandle) Error() error {
+ return fbh.S3BackupHandle.Error()
+}
+
+func (fbh *FakeS3BackupHandle) GetFailedFiles() []string {
+ return fbh.S3BackupHandle.GetFailedFiles()
+}
+
+func (fbh *FakeS3BackupHandle) ResetErrorForFile(s string) {
+ fbh.S3BackupHandle.ResetErrorForFile(s)
+}
+
+type failReadPipeReader struct {
+ *io.PipeReader
+}
+
+func (fwr *failReadPipeReader) Read(p []byte) (n int, err error) {
+ return 0, errors.New("failing read")
+}
+
+func FailFirstWrite(s3bh *S3BackupHandle, ctx context.Context, filename string, filesize int64, firstAdd bool) (io.WriteCloser, error) {
+ if s3bh.readOnly {
+ return nil, fmt.Errorf("AddFile cannot be called on read-only backup")
+ }
+
+ partSizeBytes := calculateUploadPartSize(filesize)
+ reader, writer := io.Pipe()
+ r := io.Reader(reader)
+
+ if firstAdd {
+ r = &failReadPipeReader{PipeReader: reader}
+ }
+
+ s3bh.handleAddFile(ctx, filename, partSizeBytes, r, func(err error) {
+ reader.CloseWithError(err)
+ })
+ return writer, nil
+}
+
+func FailAllWrites(s3bh *S3BackupHandle, ctx context.Context, filename string, filesize int64, _ bool) (io.WriteCloser, error) {
+ if s3bh.readOnly {
+ return nil, fmt.Errorf("AddFile cannot be called on read-only backup")
+ }
+
+ partSizeBytes := calculateUploadPartSize(filesize)
+ reader, writer := io.Pipe()
+ r := &failReadPipeReader{PipeReader: reader}
+
+ s3bh.handleAddFile(ctx, filename, partSizeBytes, r, func(err error) {
+ r.PipeReader.CloseWithError(err)
+ })
+ return writer, nil
+}
+
+type failRead struct{}
+
+func (fr *failRead) Read(p []byte) (n int, err error) {
+ return 0, errors.New("failing read")
+}
+
+func (fr *failRead) Close() error {
+ return nil
+}
+
+func FailFirstRead(s3bh *S3BackupHandle, ctx context.Context, filename string, firstRead bool) (io.ReadCloser, error) {
+ rc, err := s3bh.ReadFile(ctx, filename)
+ if err != nil {
+ return nil, err
+ }
+ if firstRead {
+ return &failRead{}, nil
+ }
+ return rc, nil
+}
+
+// FailAllReadExpectManifest is used to fail every attempt at reading a file from S3.
+// Only the MANIFEST file is allowed to be read, because otherwise we wouldn't even try to read the normal files.
+func FailAllReadExpectManifest(s3bh *S3BackupHandle, ctx context.Context, filename string, _ bool) (io.ReadCloser, error) {
+ const manifestFileName = "MANIFEST"
+ if filename == manifestFileName {
+ return s3bh.ReadFile(ctx, filename)
+ }
+ return &failRead{}, nil
+}
diff --git a/go/vt/mysqlctl/s3backupstorage/s3_test.go b/go/vt/mysqlctl/s3backupstorage/s3_test.go
index 1acfddcce1e..84ef8de6e48 100644
--- a/go/vt/mysqlctl/s3backupstorage/s3_test.go
+++ b/go/vt/mysqlctl/s3backupstorage/s3_test.go
@@ -53,7 +53,7 @@ func (sfc *s3FakeClient) PutObject(ctx context.Context, in *s3.PutObjectInput, o
_ = apiOption(stack)
}
- handler := middleware.DecorateHandler(smithyhttp.NewClientHandler(&fakeClientDo{delay: sfc.delay}), stack)
+ handler := middleware.DecorateHandler(smithyhttp.NewClientHandlerWithOptions(&fakeClientDo{delay: sfc.delay}), stack)
_, _, err := handler.Handle(ctx, in)
if err != nil {
return nil, err
diff --git a/go/vt/proto/binlogdata/binlogdata.pb.go b/go/vt/proto/binlogdata/binlogdata.pb.go
index 544a45d3656..35e738f772e 100644
--- a/go/vt/proto/binlogdata/binlogdata.pb.go
+++ b/go/vt/proto/binlogdata/binlogdata.pb.go
@@ -19,7 +19,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.34.2
+// protoc-gen-go v1.35.1
// protoc v3.21.3
// source: binlogdata.proto
@@ -562,11 +562,9 @@ type Charset struct {
func (x *Charset) Reset() {
*x = Charset{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Charset) String() string {
@@ -577,7 +575,7 @@ func (*Charset) ProtoMessage() {}
func (x *Charset) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[0]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -628,11 +626,9 @@ type BinlogTransaction struct {
func (x *BinlogTransaction) Reset() {
*x = BinlogTransaction{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[1]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *BinlogTransaction) String() string {
@@ -643,7 +639,7 @@ func (*BinlogTransaction) ProtoMessage() {}
func (x *BinlogTransaction) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[1]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -688,11 +684,9 @@ type StreamKeyRangeRequest struct {
func (x *StreamKeyRangeRequest) Reset() {
*x = StreamKeyRangeRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[2]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StreamKeyRangeRequest) String() string {
@@ -703,7 +697,7 @@ func (*StreamKeyRangeRequest) ProtoMessage() {}
func (x *StreamKeyRangeRequest) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[2]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -750,11 +744,9 @@ type StreamKeyRangeResponse struct {
func (x *StreamKeyRangeResponse) Reset() {
*x = StreamKeyRangeResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[3]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StreamKeyRangeResponse) String() string {
@@ -765,7 +757,7 @@ func (*StreamKeyRangeResponse) ProtoMessage() {}
func (x *StreamKeyRangeResponse) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[3]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -803,11 +795,9 @@ type StreamTablesRequest struct {
func (x *StreamTablesRequest) Reset() {
*x = StreamTablesRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[4]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StreamTablesRequest) String() string {
@@ -818,7 +808,7 @@ func (*StreamTablesRequest) ProtoMessage() {}
func (x *StreamTablesRequest) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[4]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -865,11 +855,9 @@ type StreamTablesResponse struct {
func (x *StreamTablesResponse) Reset() {
*x = StreamTablesResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[5]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StreamTablesResponse) String() string {
@@ -880,7 +868,7 @@ func (*StreamTablesResponse) ProtoMessage() {}
func (x *StreamTablesResponse) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[5]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -916,11 +904,9 @@ type CharsetConversion struct {
func (x *CharsetConversion) Reset() {
*x = CharsetConversion{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[6]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CharsetConversion) String() string {
@@ -931,7 +917,7 @@ func (*CharsetConversion) ProtoMessage() {}
func (x *CharsetConversion) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[6]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1013,11 +999,9 @@ type Rule struct {
func (x *Rule) Reset() {
*x = Rule{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[7]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Rule) String() string {
@@ -1028,7 +1012,7 @@ func (*Rule) ProtoMessage() {}
func (x *Rule) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[7]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1129,11 +1113,9 @@ type Filter struct {
func (x *Filter) Reset() {
*x = Filter{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[8]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Filter) String() string {
@@ -1144,7 +1126,7 @@ func (*Filter) ProtoMessage() {}
func (x *Filter) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[8]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1228,11 +1210,9 @@ type BinlogSource struct {
func (x *BinlogSource) Reset() {
*x = BinlogSource{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[9]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *BinlogSource) String() string {
@@ -1243,7 +1223,7 @@ func (*BinlogSource) ProtoMessage() {}
func (x *BinlogSource) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[9]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1359,11 +1339,9 @@ type RowChange struct {
func (x *RowChange) Reset() {
*x = RowChange{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[10]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[10]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RowChange) String() string {
@@ -1374,7 +1352,7 @@ func (*RowChange) ProtoMessage() {}
func (x *RowChange) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[10]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1426,11 +1404,9 @@ type RowEvent struct {
func (x *RowEvent) Reset() {
*x = RowEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[11]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[11]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RowEvent) String() string {
@@ -1441,7 +1417,7 @@ func (*RowEvent) ProtoMessage() {}
func (x *RowEvent) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[11]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1521,11 +1497,9 @@ type FieldEvent struct {
func (x *FieldEvent) Reset() {
*x = FieldEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[12]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[12]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *FieldEvent) String() string {
@@ -1536,7 +1510,7 @@ func (*FieldEvent) ProtoMessage() {}
func (x *FieldEvent) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[12]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1611,11 +1585,9 @@ type ShardGtid struct {
func (x *ShardGtid) Reset() {
*x = ShardGtid{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[13]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[13]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ShardGtid) String() string {
@@ -1626,7 +1598,7 @@ func (*ShardGtid) ProtoMessage() {}
func (x *ShardGtid) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[13]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1680,11 +1652,9 @@ type VGtid struct {
func (x *VGtid) Reset() {
*x = VGtid{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[14]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[14]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VGtid) String() string {
@@ -1695,7 +1665,7 @@ func (*VGtid) ProtoMessage() {}
func (x *VGtid) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[14]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1729,11 +1699,9 @@ type KeyspaceShard struct {
func (x *KeyspaceShard) Reset() {
*x = KeyspaceShard{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[15]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[15]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *KeyspaceShard) String() string {
@@ -1744,7 +1712,7 @@ func (*KeyspaceShard) ProtoMessage() {}
func (x *KeyspaceShard) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[15]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1807,11 +1775,9 @@ type Journal struct {
func (x *Journal) Reset() {
*x = Journal{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[16]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[16]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Journal) String() string {
@@ -1822,7 +1788,7 @@ func (*Journal) ProtoMessage() {}
func (x *Journal) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[16]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1935,11 +1901,9 @@ type VEvent struct {
func (x *VEvent) Reset() {
*x = VEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[17]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[17]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VEvent) String() string {
@@ -1950,7 +1914,7 @@ func (*VEvent) ProtoMessage() {}
func (x *VEvent) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[17]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2086,11 +2050,9 @@ type MinimalTable struct {
func (x *MinimalTable) Reset() {
*x = MinimalTable{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[18]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[18]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MinimalTable) String() string {
@@ -2101,7 +2063,7 @@ func (*MinimalTable) ProtoMessage() {}
func (x *MinimalTable) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[18]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2154,11 +2116,9 @@ type MinimalSchema struct {
func (x *MinimalSchema) Reset() {
*x = MinimalSchema{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[19]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[19]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MinimalSchema) String() string {
@@ -2169,7 +2129,7 @@ func (*MinimalSchema) ProtoMessage() {}
func (x *MinimalSchema) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[19]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2202,11 +2162,9 @@ type VStreamOptions struct {
func (x *VStreamOptions) Reset() {
*x = VStreamOptions{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[20]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[20]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VStreamOptions) String() string {
@@ -2217,7 +2175,7 @@ func (*VStreamOptions) ProtoMessage() {}
func (x *VStreamOptions) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[20]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2263,11 +2221,9 @@ type VStreamRequest struct {
func (x *VStreamRequest) Reset() {
*x = VStreamRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[21]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[21]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VStreamRequest) String() string {
@@ -2278,7 +2234,7 @@ func (*VStreamRequest) ProtoMessage() {}
func (x *VStreamRequest) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[21]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2353,11 +2309,9 @@ type VStreamResponse struct {
func (x *VStreamResponse) Reset() {
*x = VStreamResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[22]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[22]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VStreamResponse) String() string {
@@ -2368,7 +2322,7 @@ func (*VStreamResponse) ProtoMessage() {}
func (x *VStreamResponse) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[22]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2406,11 +2360,9 @@ type VStreamRowsRequest struct {
func (x *VStreamRowsRequest) Reset() {
*x = VStreamRowsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[23]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[23]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VStreamRowsRequest) String() string {
@@ -2421,7 +2373,7 @@ func (*VStreamRowsRequest) ProtoMessage() {}
func (x *VStreamRowsRequest) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[23]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2499,11 +2451,9 @@ type VStreamRowsResponse struct {
func (x *VStreamRowsResponse) Reset() {
*x = VStreamRowsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[24]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[24]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VStreamRowsResponse) String() string {
@@ -2514,7 +2464,7 @@ func (*VStreamRowsResponse) ProtoMessage() {}
func (x *VStreamRowsResponse) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[24]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2599,11 +2549,9 @@ type VStreamTablesRequest struct {
func (x *VStreamTablesRequest) Reset() {
*x = VStreamTablesRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[25]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[25]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VStreamTablesRequest) String() string {
@@ -2614,7 +2562,7 @@ func (*VStreamTablesRequest) ProtoMessage() {}
func (x *VStreamTablesRequest) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[25]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2673,11 +2621,9 @@ type VStreamTablesResponse struct {
func (x *VStreamTablesResponse) Reset() {
*x = VStreamTablesResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[26]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[26]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VStreamTablesResponse) String() string {
@@ -2688,7 +2634,7 @@ func (*VStreamTablesResponse) ProtoMessage() {}
func (x *VStreamTablesResponse) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[26]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2756,11 +2702,9 @@ type LastPKEvent struct {
func (x *LastPKEvent) Reset() {
*x = LastPKEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[27]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[27]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *LastPKEvent) String() string {
@@ -2771,7 +2715,7 @@ func (*LastPKEvent) ProtoMessage() {}
func (x *LastPKEvent) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[27]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2811,11 +2755,9 @@ type TableLastPK struct {
func (x *TableLastPK) Reset() {
*x = TableLastPK{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[28]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[28]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *TableLastPK) String() string {
@@ -2826,7 +2768,7 @@ func (*TableLastPK) ProtoMessage() {}
func (x *TableLastPK) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[28]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2871,11 +2813,9 @@ type VStreamResultsRequest struct {
func (x *VStreamResultsRequest) Reset() {
*x = VStreamResultsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[29]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[29]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VStreamResultsRequest) String() string {
@@ -2886,7 +2826,7 @@ func (*VStreamResultsRequest) ProtoMessage() {}
func (x *VStreamResultsRequest) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[29]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2943,11 +2883,9 @@ type VStreamResultsResponse struct {
func (x *VStreamResultsResponse) Reset() {
*x = VStreamResultsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[30]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[30]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VStreamResultsResponse) String() string {
@@ -2958,7 +2896,7 @@ func (*VStreamResultsResponse) ProtoMessage() {}
func (x *VStreamResultsResponse) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[30]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3009,11 +2947,9 @@ type BinlogTransaction_Statement struct {
func (x *BinlogTransaction_Statement) Reset() {
*x = BinlogTransaction_Statement{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[31]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[31]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *BinlogTransaction_Statement) String() string {
@@ -3024,7 +2960,7 @@ func (*BinlogTransaction_Statement) ProtoMessage() {}
func (x *BinlogTransaction_Statement) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[31]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3071,11 +3007,9 @@ type RowChange_Bitmap struct {
func (x *RowChange_Bitmap) Reset() {
*x = RowChange_Bitmap{}
- if protoimpl.UnsafeEnabled {
- mi := &file_binlogdata_proto_msgTypes[35]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_binlogdata_proto_msgTypes[35]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RowChange_Bitmap) String() string {
@@ -3086,7 +3020,7 @@ func (*RowChange_Bitmap) ProtoMessage() {}
func (x *RowChange_Bitmap) ProtoReflect() protoreflect.Message {
mi := &file_binlogdata_proto_msgTypes[35]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3759,404 +3693,6 @@ func file_binlogdata_proto_init() {
if File_binlogdata_proto != nil {
return
}
- if !protoimpl.UnsafeEnabled {
- file_binlogdata_proto_msgTypes[0].Exporter = func(v any, i int) any {
- switch v := v.(*Charset); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[1].Exporter = func(v any, i int) any {
- switch v := v.(*BinlogTransaction); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[2].Exporter = func(v any, i int) any {
- switch v := v.(*StreamKeyRangeRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[3].Exporter = func(v any, i int) any {
- switch v := v.(*StreamKeyRangeResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[4].Exporter = func(v any, i int) any {
- switch v := v.(*StreamTablesRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[5].Exporter = func(v any, i int) any {
- switch v := v.(*StreamTablesResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[6].Exporter = func(v any, i int) any {
- switch v := v.(*CharsetConversion); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[7].Exporter = func(v any, i int) any {
- switch v := v.(*Rule); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[8].Exporter = func(v any, i int) any {
- switch v := v.(*Filter); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[9].Exporter = func(v any, i int) any {
- switch v := v.(*BinlogSource); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[10].Exporter = func(v any, i int) any {
- switch v := v.(*RowChange); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[11].Exporter = func(v any, i int) any {
- switch v := v.(*RowEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[12].Exporter = func(v any, i int) any {
- switch v := v.(*FieldEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[13].Exporter = func(v any, i int) any {
- switch v := v.(*ShardGtid); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[14].Exporter = func(v any, i int) any {
- switch v := v.(*VGtid); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[15].Exporter = func(v any, i int) any {
- switch v := v.(*KeyspaceShard); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[16].Exporter = func(v any, i int) any {
- switch v := v.(*Journal); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[17].Exporter = func(v any, i int) any {
- switch v := v.(*VEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[18].Exporter = func(v any, i int) any {
- switch v := v.(*MinimalTable); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[19].Exporter = func(v any, i int) any {
- switch v := v.(*MinimalSchema); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[20].Exporter = func(v any, i int) any {
- switch v := v.(*VStreamOptions); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[21].Exporter = func(v any, i int) any {
- switch v := v.(*VStreamRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[22].Exporter = func(v any, i int) any {
- switch v := v.(*VStreamResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[23].Exporter = func(v any, i int) any {
- switch v := v.(*VStreamRowsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[24].Exporter = func(v any, i int) any {
- switch v := v.(*VStreamRowsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[25].Exporter = func(v any, i int) any {
- switch v := v.(*VStreamTablesRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[26].Exporter = func(v any, i int) any {
- switch v := v.(*VStreamTablesResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[27].Exporter = func(v any, i int) any {
- switch v := v.(*LastPKEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[28].Exporter = func(v any, i int) any {
- switch v := v.(*TableLastPK); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[29].Exporter = func(v any, i int) any {
- switch v := v.(*VStreamResultsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[30].Exporter = func(v any, i int) any {
- switch v := v.(*VStreamResultsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[31].Exporter = func(v any, i int) any {
- switch v := v.(*BinlogTransaction_Statement); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_binlogdata_proto_msgTypes[35].Exporter = func(v any, i int) any {
- switch v := v.(*RowChange_Bitmap); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
diff --git a/go/vt/proto/binlogdata/binlogdata_vtproto.pb.go b/go/vt/proto/binlogdata/binlogdata_vtproto.pb.go
index fd76576fcb5..98fba617973 100644
--- a/go/vt/proto/binlogdata/binlogdata_vtproto.pb.go
+++ b/go/vt/proto/binlogdata/binlogdata_vtproto.pb.go
@@ -1,5 +1,5 @@
// Code generated by protoc-gen-go-vtproto. DO NOT EDIT.
-// protoc-gen-go-vtproto version: v0.6.1-0.20240319094008-0393e58bdf10
+// protoc-gen-go-vtproto version: v0.6.1-0.20241011083415-71c992bc3c87
// source: binlogdata.proto
package binlogdata
diff --git a/go/vt/proto/binlogservice/binlogservice.pb.go b/go/vt/proto/binlogservice/binlogservice.pb.go
index 5ad07fcb3ea..9ac93adc872 100644
--- a/go/vt/proto/binlogservice/binlogservice.pb.go
+++ b/go/vt/proto/binlogservice/binlogservice.pb.go
@@ -19,7 +19,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.34.2
+// protoc-gen-go v1.35.1
// protoc v3.21.3
// source: binlogservice.proto
diff --git a/go/vt/proto/logutil/logutil.pb.go b/go/vt/proto/logutil/logutil.pb.go
index ffba4cc2ad7..fff477ddf27 100644
--- a/go/vt/proto/logutil/logutil.pb.go
+++ b/go/vt/proto/logutil/logutil.pb.go
@@ -17,7 +17,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.34.2
+// protoc-gen-go v1.35.1
// protoc v3.21.3
// source: logutil.proto
@@ -110,11 +110,9 @@ type Event struct {
func (x *Event) Reset() {
*x = Event{}
- if protoimpl.UnsafeEnabled {
- mi := &file_logutil_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_logutil_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Event) String() string {
@@ -125,7 +123,7 @@ func (*Event) ProtoMessage() {}
func (x *Event) ProtoReflect() protoreflect.Message {
mi := &file_logutil_proto_msgTypes[0]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -232,20 +230,6 @@ func file_logutil_proto_init() {
if File_logutil_proto != nil {
return
}
- if !protoimpl.UnsafeEnabled {
- file_logutil_proto_msgTypes[0].Exporter = func(v any, i int) any {
- switch v := v.(*Event); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
diff --git a/go/vt/proto/logutil/logutil_vtproto.pb.go b/go/vt/proto/logutil/logutil_vtproto.pb.go
index aeca94981f9..208d652cdaf 100644
--- a/go/vt/proto/logutil/logutil_vtproto.pb.go
+++ b/go/vt/proto/logutil/logutil_vtproto.pb.go
@@ -1,5 +1,5 @@
// Code generated by protoc-gen-go-vtproto. DO NOT EDIT.
-// protoc-gen-go-vtproto version: v0.6.1-0.20240319094008-0393e58bdf10
+// protoc-gen-go-vtproto version: v0.6.1-0.20241011083415-71c992bc3c87
// source: logutil.proto
package logutil
diff --git a/go/vt/proto/mysqlctl/mysqlctl.pb.go b/go/vt/proto/mysqlctl/mysqlctl.pb.go
index eaceeabad3e..1e7ca88f5fe 100644
--- a/go/vt/proto/mysqlctl/mysqlctl.pb.go
+++ b/go/vt/proto/mysqlctl/mysqlctl.pb.go
@@ -18,7 +18,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.34.2
+// protoc-gen-go v1.35.1
// protoc v3.21.3
// source: mysqlctl.proto
@@ -111,11 +111,9 @@ type StartRequest struct {
func (x *StartRequest) Reset() {
*x = StartRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_mysqlctl_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_mysqlctl_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StartRequest) String() string {
@@ -126,7 +124,7 @@ func (*StartRequest) ProtoMessage() {}
func (x *StartRequest) ProtoReflect() protoreflect.Message {
mi := &file_mysqlctl_proto_msgTypes[0]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -156,11 +154,9 @@ type StartResponse struct {
func (x *StartResponse) Reset() {
*x = StartResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_mysqlctl_proto_msgTypes[1]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_mysqlctl_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StartResponse) String() string {
@@ -171,7 +167,7 @@ func (*StartResponse) ProtoMessage() {}
func (x *StartResponse) ProtoReflect() protoreflect.Message {
mi := &file_mysqlctl_proto_msgTypes[1]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -197,11 +193,9 @@ type ShutdownRequest struct {
func (x *ShutdownRequest) Reset() {
*x = ShutdownRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_mysqlctl_proto_msgTypes[2]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_mysqlctl_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ShutdownRequest) String() string {
@@ -212,7 +206,7 @@ func (*ShutdownRequest) ProtoMessage() {}
func (x *ShutdownRequest) ProtoReflect() protoreflect.Message {
mi := &file_mysqlctl_proto_msgTypes[2]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -249,11 +243,9 @@ type ShutdownResponse struct {
func (x *ShutdownResponse) Reset() {
*x = ShutdownResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_mysqlctl_proto_msgTypes[3]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_mysqlctl_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ShutdownResponse) String() string {
@@ -264,7 +256,7 @@ func (*ShutdownResponse) ProtoMessage() {}
func (x *ShutdownResponse) ProtoReflect() protoreflect.Message {
mi := &file_mysqlctl_proto_msgTypes[3]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -287,11 +279,9 @@ type RunMysqlUpgradeRequest struct {
func (x *RunMysqlUpgradeRequest) Reset() {
*x = RunMysqlUpgradeRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_mysqlctl_proto_msgTypes[4]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_mysqlctl_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RunMysqlUpgradeRequest) String() string {
@@ -302,7 +292,7 @@ func (*RunMysqlUpgradeRequest) ProtoMessage() {}
func (x *RunMysqlUpgradeRequest) ProtoReflect() protoreflect.Message {
mi := &file_mysqlctl_proto_msgTypes[4]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -325,11 +315,9 @@ type RunMysqlUpgradeResponse struct {
func (x *RunMysqlUpgradeResponse) Reset() {
*x = RunMysqlUpgradeResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_mysqlctl_proto_msgTypes[5]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_mysqlctl_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RunMysqlUpgradeResponse) String() string {
@@ -340,7 +328,7 @@ func (*RunMysqlUpgradeResponse) ProtoMessage() {}
func (x *RunMysqlUpgradeResponse) ProtoReflect() protoreflect.Message {
mi := &file_mysqlctl_proto_msgTypes[5]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -367,11 +355,9 @@ type ApplyBinlogFileRequest struct {
func (x *ApplyBinlogFileRequest) Reset() {
*x = ApplyBinlogFileRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_mysqlctl_proto_msgTypes[6]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_mysqlctl_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ApplyBinlogFileRequest) String() string {
@@ -382,7 +368,7 @@ func (*ApplyBinlogFileRequest) ProtoMessage() {}
func (x *ApplyBinlogFileRequest) ProtoReflect() protoreflect.Message {
mi := &file_mysqlctl_proto_msgTypes[6]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -426,11 +412,9 @@ type ApplyBinlogFileResponse struct {
func (x *ApplyBinlogFileResponse) Reset() {
*x = ApplyBinlogFileResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_mysqlctl_proto_msgTypes[7]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_mysqlctl_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ApplyBinlogFileResponse) String() string {
@@ -441,7 +425,7 @@ func (*ApplyBinlogFileResponse) ProtoMessage() {}
func (x *ApplyBinlogFileResponse) ProtoReflect() protoreflect.Message {
mi := &file_mysqlctl_proto_msgTypes[7]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -466,11 +450,9 @@ type ReadBinlogFilesTimestampsRequest struct {
func (x *ReadBinlogFilesTimestampsRequest) Reset() {
*x = ReadBinlogFilesTimestampsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_mysqlctl_proto_msgTypes[8]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_mysqlctl_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReadBinlogFilesTimestampsRequest) String() string {
@@ -481,7 +463,7 @@ func (*ReadBinlogFilesTimestampsRequest) ProtoMessage() {}
func (x *ReadBinlogFilesTimestampsRequest) ProtoReflect() protoreflect.Message {
mi := &file_mysqlctl_proto_msgTypes[8]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -520,11 +502,9 @@ type ReadBinlogFilesTimestampsResponse struct {
func (x *ReadBinlogFilesTimestampsResponse) Reset() {
*x = ReadBinlogFilesTimestampsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_mysqlctl_proto_msgTypes[9]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_mysqlctl_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReadBinlogFilesTimestampsResponse) String() string {
@@ -535,7 +515,7 @@ func (*ReadBinlogFilesTimestampsResponse) ProtoMessage() {}
func (x *ReadBinlogFilesTimestampsResponse) ProtoReflect() protoreflect.Message {
mi := &file_mysqlctl_proto_msgTypes[9]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -586,11 +566,9 @@ type ReinitConfigRequest struct {
func (x *ReinitConfigRequest) Reset() {
*x = ReinitConfigRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_mysqlctl_proto_msgTypes[10]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_mysqlctl_proto_msgTypes[10]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReinitConfigRequest) String() string {
@@ -601,7 +579,7 @@ func (*ReinitConfigRequest) ProtoMessage() {}
func (x *ReinitConfigRequest) ProtoReflect() protoreflect.Message {
mi := &file_mysqlctl_proto_msgTypes[10]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -624,11 +602,9 @@ type ReinitConfigResponse struct {
func (x *ReinitConfigResponse) Reset() {
*x = ReinitConfigResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_mysqlctl_proto_msgTypes[11]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_mysqlctl_proto_msgTypes[11]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReinitConfigResponse) String() string {
@@ -639,7 +615,7 @@ func (*ReinitConfigResponse) ProtoMessage() {}
func (x *ReinitConfigResponse) ProtoReflect() protoreflect.Message {
mi := &file_mysqlctl_proto_msgTypes[11]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -662,11 +638,9 @@ type RefreshConfigRequest struct {
func (x *RefreshConfigRequest) Reset() {
*x = RefreshConfigRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_mysqlctl_proto_msgTypes[12]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_mysqlctl_proto_msgTypes[12]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RefreshConfigRequest) String() string {
@@ -677,7 +651,7 @@ func (*RefreshConfigRequest) ProtoMessage() {}
func (x *RefreshConfigRequest) ProtoReflect() protoreflect.Message {
mi := &file_mysqlctl_proto_msgTypes[12]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -700,11 +674,9 @@ type RefreshConfigResponse struct {
func (x *RefreshConfigResponse) Reset() {
*x = RefreshConfigResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_mysqlctl_proto_msgTypes[13]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_mysqlctl_proto_msgTypes[13]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RefreshConfigResponse) String() string {
@@ -715,7 +687,7 @@ func (*RefreshConfigResponse) ProtoMessage() {}
func (x *RefreshConfigResponse) ProtoReflect() protoreflect.Message {
mi := &file_mysqlctl_proto_msgTypes[13]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -738,11 +710,9 @@ type VersionStringRequest struct {
func (x *VersionStringRequest) Reset() {
*x = VersionStringRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_mysqlctl_proto_msgTypes[14]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_mysqlctl_proto_msgTypes[14]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VersionStringRequest) String() string {
@@ -753,7 +723,7 @@ func (*VersionStringRequest) ProtoMessage() {}
func (x *VersionStringRequest) ProtoReflect() protoreflect.Message {
mi := &file_mysqlctl_proto_msgTypes[14]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -778,11 +748,9 @@ type VersionStringResponse struct {
func (x *VersionStringResponse) Reset() {
*x = VersionStringResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_mysqlctl_proto_msgTypes[15]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_mysqlctl_proto_msgTypes[15]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VersionStringResponse) String() string {
@@ -793,7 +761,7 @@ func (*VersionStringResponse) ProtoMessage() {}
func (x *VersionStringResponse) ProtoReflect() protoreflect.Message {
mi := &file_mysqlctl_proto_msgTypes[15]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -823,11 +791,9 @@ type HostMetricsRequest struct {
func (x *HostMetricsRequest) Reset() {
*x = HostMetricsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_mysqlctl_proto_msgTypes[16]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_mysqlctl_proto_msgTypes[16]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *HostMetricsRequest) String() string {
@@ -838,7 +804,7 @@ func (*HostMetricsRequest) ProtoMessage() {}
func (x *HostMetricsRequest) ProtoReflect() protoreflect.Message {
mi := &file_mysqlctl_proto_msgTypes[16]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -865,11 +831,9 @@ type HostMetricsResponse struct {
func (x *HostMetricsResponse) Reset() {
*x = HostMetricsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_mysqlctl_proto_msgTypes[17]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_mysqlctl_proto_msgTypes[17]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *HostMetricsResponse) String() string {
@@ -880,7 +844,7 @@ func (*HostMetricsResponse) ProtoMessage() {}
func (x *HostMetricsResponse) ProtoReflect() protoreflect.Message {
mi := &file_mysqlctl_proto_msgTypes[17]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -922,11 +886,9 @@ type BackupInfo struct {
func (x *BackupInfo) Reset() {
*x = BackupInfo{}
- if protoimpl.UnsafeEnabled {
- mi := &file_mysqlctl_proto_msgTypes[18]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_mysqlctl_proto_msgTypes[18]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *BackupInfo) String() string {
@@ -937,7 +899,7 @@ func (*BackupInfo) ProtoMessage() {}
func (x *BackupInfo) ProtoReflect() protoreflect.Message {
mi := &file_mysqlctl_proto_msgTypes[18]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1023,11 +985,9 @@ type HostMetricsResponse_Metric struct {
func (x *HostMetricsResponse_Metric) Reset() {
*x = HostMetricsResponse_Metric{}
- if protoimpl.UnsafeEnabled {
- mi := &file_mysqlctl_proto_msgTypes[19]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_mysqlctl_proto_msgTypes[19]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *HostMetricsResponse_Metric) String() string {
@@ -1038,7 +998,7 @@ func (*HostMetricsResponse_Metric) ProtoMessage() {}
func (x *HostMetricsResponse_Metric) ProtoReflect() protoreflect.Message {
mi := &file_mysqlctl_proto_msgTypes[19]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1322,248 +1282,6 @@ func file_mysqlctl_proto_init() {
if File_mysqlctl_proto != nil {
return
}
- if !protoimpl.UnsafeEnabled {
- file_mysqlctl_proto_msgTypes[0].Exporter = func(v any, i int) any {
- switch v := v.(*StartRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_mysqlctl_proto_msgTypes[1].Exporter = func(v any, i int) any {
- switch v := v.(*StartResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_mysqlctl_proto_msgTypes[2].Exporter = func(v any, i int) any {
- switch v := v.(*ShutdownRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_mysqlctl_proto_msgTypes[3].Exporter = func(v any, i int) any {
- switch v := v.(*ShutdownResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_mysqlctl_proto_msgTypes[4].Exporter = func(v any, i int) any {
- switch v := v.(*RunMysqlUpgradeRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_mysqlctl_proto_msgTypes[5].Exporter = func(v any, i int) any {
- switch v := v.(*RunMysqlUpgradeResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_mysqlctl_proto_msgTypes[6].Exporter = func(v any, i int) any {
- switch v := v.(*ApplyBinlogFileRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_mysqlctl_proto_msgTypes[7].Exporter = func(v any, i int) any {
- switch v := v.(*ApplyBinlogFileResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_mysqlctl_proto_msgTypes[8].Exporter = func(v any, i int) any {
- switch v := v.(*ReadBinlogFilesTimestampsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_mysqlctl_proto_msgTypes[9].Exporter = func(v any, i int) any {
- switch v := v.(*ReadBinlogFilesTimestampsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_mysqlctl_proto_msgTypes[10].Exporter = func(v any, i int) any {
- switch v := v.(*ReinitConfigRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_mysqlctl_proto_msgTypes[11].Exporter = func(v any, i int) any {
- switch v := v.(*ReinitConfigResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_mysqlctl_proto_msgTypes[12].Exporter = func(v any, i int) any {
- switch v := v.(*RefreshConfigRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_mysqlctl_proto_msgTypes[13].Exporter = func(v any, i int) any {
- switch v := v.(*RefreshConfigResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_mysqlctl_proto_msgTypes[14].Exporter = func(v any, i int) any {
- switch v := v.(*VersionStringRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_mysqlctl_proto_msgTypes[15].Exporter = func(v any, i int) any {
- switch v := v.(*VersionStringResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_mysqlctl_proto_msgTypes[16].Exporter = func(v any, i int) any {
- switch v := v.(*HostMetricsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_mysqlctl_proto_msgTypes[17].Exporter = func(v any, i int) any {
- switch v := v.(*HostMetricsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_mysqlctl_proto_msgTypes[18].Exporter = func(v any, i int) any {
- switch v := v.(*BackupInfo); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_mysqlctl_proto_msgTypes[19].Exporter = func(v any, i int) any {
- switch v := v.(*HostMetricsResponse_Metric); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
diff --git a/go/vt/proto/mysqlctl/mysqlctl_vtproto.pb.go b/go/vt/proto/mysqlctl/mysqlctl_vtproto.pb.go
index 656ace2bf36..f0c77770d50 100644
--- a/go/vt/proto/mysqlctl/mysqlctl_vtproto.pb.go
+++ b/go/vt/proto/mysqlctl/mysqlctl_vtproto.pb.go
@@ -1,5 +1,5 @@
// Code generated by protoc-gen-go-vtproto. DO NOT EDIT.
-// protoc-gen-go-vtproto version: v0.6.1-0.20240319094008-0393e58bdf10
+// protoc-gen-go-vtproto version: v0.6.1-0.20241011083415-71c992bc3c87
// source: mysqlctl.proto
package mysqlctl
diff --git a/go/vt/proto/query/query.pb.go b/go/vt/proto/query/query.pb.go
index 11b5a209e73..5e68d38cfee 100644
--- a/go/vt/proto/query/query.pb.go
+++ b/go/vt/proto/query/query.pb.go
@@ -18,7 +18,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.34.2
+// protoc-gen-go v1.35.1
// protoc v3.21.3
// source: query.proto
@@ -432,6 +432,55 @@ func (Type) EnumDescriptor() ([]byte, []int) {
return file_query_proto_rawDescGZIP(), []int{2}
}
+type StartCommitState int32
+
+const (
+ StartCommitState_Unknown StartCommitState = 0
+ StartCommitState_Fail StartCommitState = 1
+ StartCommitState_Success StartCommitState = 2
+)
+
+// Enum value maps for StartCommitState.
+var (
+ StartCommitState_name = map[int32]string{
+ 0: "Unknown",
+ 1: "Fail",
+ 2: "Success",
+ }
+ StartCommitState_value = map[string]int32{
+ "Unknown": 0,
+ "Fail": 1,
+ "Success": 2,
+ }
+)
+
+func (x StartCommitState) Enum() *StartCommitState {
+ p := new(StartCommitState)
+ *p = x
+ return p
+}
+
+func (x StartCommitState) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (StartCommitState) Descriptor() protoreflect.EnumDescriptor {
+ return file_query_proto_enumTypes[3].Descriptor()
+}
+
+func (StartCommitState) Type() protoreflect.EnumType {
+ return &file_query_proto_enumTypes[3]
+}
+
+func (x StartCommitState) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use StartCommitState.Descriptor instead.
+func (StartCommitState) EnumDescriptor() ([]byte, []int) {
+ return file_query_proto_rawDescGZIP(), []int{3}
+}
+
// TransactionState represents the state of a distributed transaction.
type TransactionState int32
@@ -469,11 +518,11 @@ func (x TransactionState) String() string {
}
func (TransactionState) Descriptor() protoreflect.EnumDescriptor {
- return file_query_proto_enumTypes[3].Descriptor()
+ return file_query_proto_enumTypes[4].Descriptor()
}
func (TransactionState) Type() protoreflect.EnumType {
- return &file_query_proto_enumTypes[3]
+ return &file_query_proto_enumTypes[4]
}
func (x TransactionState) Number() protoreflect.EnumNumber {
@@ -482,7 +531,7 @@ func (x TransactionState) Number() protoreflect.EnumNumber {
// Deprecated: Use TransactionState.Descriptor instead.
func (TransactionState) EnumDescriptor() ([]byte, []int) {
- return file_query_proto_rawDescGZIP(), []int{3}
+ return file_query_proto_rawDescGZIP(), []int{4}
}
// SchemaTableType represents the type of table requested.
@@ -522,11 +571,11 @@ func (x SchemaTableType) String() string {
}
func (SchemaTableType) Descriptor() protoreflect.EnumDescriptor {
- return file_query_proto_enumTypes[4].Descriptor()
+ return file_query_proto_enumTypes[5].Descriptor()
}
func (SchemaTableType) Type() protoreflect.EnumType {
- return &file_query_proto_enumTypes[4]
+ return &file_query_proto_enumTypes[5]
}
func (x SchemaTableType) Number() protoreflect.EnumNumber {
@@ -535,7 +584,7 @@ func (x SchemaTableType) Number() protoreflect.EnumNumber {
// Deprecated: Use SchemaTableType.Descriptor instead.
func (SchemaTableType) EnumDescriptor() ([]byte, []int) {
- return file_query_proto_rawDescGZIP(), []int{4}
+ return file_query_proto_rawDescGZIP(), []int{5}
}
type ExecuteOptions_IncludedFields int32
@@ -571,11 +620,11 @@ func (x ExecuteOptions_IncludedFields) String() string {
}
func (ExecuteOptions_IncludedFields) Descriptor() protoreflect.EnumDescriptor {
- return file_query_proto_enumTypes[5].Descriptor()
+ return file_query_proto_enumTypes[6].Descriptor()
}
func (ExecuteOptions_IncludedFields) Type() protoreflect.EnumType {
- return &file_query_proto_enumTypes[5]
+ return &file_query_proto_enumTypes[6]
}
func (x ExecuteOptions_IncludedFields) Number() protoreflect.EnumNumber {
@@ -623,11 +672,11 @@ func (x ExecuteOptions_Workload) String() string {
}
func (ExecuteOptions_Workload) Descriptor() protoreflect.EnumDescriptor {
- return file_query_proto_enumTypes[6].Descriptor()
+ return file_query_proto_enumTypes[7].Descriptor()
}
func (ExecuteOptions_Workload) Type() protoreflect.EnumType {
- return &file_query_proto_enumTypes[6]
+ return &file_query_proto_enumTypes[7]
}
func (x ExecuteOptions_Workload) Number() protoreflect.EnumNumber {
@@ -688,11 +737,11 @@ func (x ExecuteOptions_TransactionIsolation) String() string {
}
func (ExecuteOptions_TransactionIsolation) Descriptor() protoreflect.EnumDescriptor {
- return file_query_proto_enumTypes[7].Descriptor()
+ return file_query_proto_enumTypes[8].Descriptor()
}
func (ExecuteOptions_TransactionIsolation) Type() protoreflect.EnumType {
- return &file_query_proto_enumTypes[7]
+ return &file_query_proto_enumTypes[8]
}
func (x ExecuteOptions_TransactionIsolation) Number() protoreflect.EnumNumber {
@@ -752,11 +801,11 @@ func (x ExecuteOptions_PlannerVersion) String() string {
}
func (ExecuteOptions_PlannerVersion) Descriptor() protoreflect.EnumDescriptor {
- return file_query_proto_enumTypes[8].Descriptor()
+ return file_query_proto_enumTypes[9].Descriptor()
}
func (ExecuteOptions_PlannerVersion) Type() protoreflect.EnumType {
- return &file_query_proto_enumTypes[8]
+ return &file_query_proto_enumTypes[9]
}
func (x ExecuteOptions_PlannerVersion) Number() protoreflect.EnumNumber {
@@ -804,11 +853,11 @@ func (x ExecuteOptions_Consolidator) String() string {
}
func (ExecuteOptions_Consolidator) Descriptor() protoreflect.EnumDescriptor {
- return file_query_proto_enumTypes[9].Descriptor()
+ return file_query_proto_enumTypes[10].Descriptor()
}
func (ExecuteOptions_Consolidator) Type() protoreflect.EnumType {
- return &file_query_proto_enumTypes[9]
+ return &file_query_proto_enumTypes[10]
}
func (x ExecuteOptions_Consolidator) Number() protoreflect.EnumNumber {
@@ -853,11 +902,11 @@ func (x ExecuteOptions_TransactionAccessMode) String() string {
}
func (ExecuteOptions_TransactionAccessMode) Descriptor() protoreflect.EnumDescriptor {
- return file_query_proto_enumTypes[10].Descriptor()
+ return file_query_proto_enumTypes[11].Descriptor()
}
func (ExecuteOptions_TransactionAccessMode) Type() protoreflect.EnumType {
- return &file_query_proto_enumTypes[10]
+ return &file_query_proto_enumTypes[11]
}
func (x ExecuteOptions_TransactionAccessMode) Number() protoreflect.EnumNumber {
@@ -903,11 +952,11 @@ func (x StreamEvent_Statement_Category) String() string {
}
func (StreamEvent_Statement_Category) Descriptor() protoreflect.EnumDescriptor {
- return file_query_proto_enumTypes[11].Descriptor()
+ return file_query_proto_enumTypes[12].Descriptor()
}
func (StreamEvent_Statement_Category) Type() protoreflect.EnumType {
- return &file_query_proto_enumTypes[11]
+ return &file_query_proto_enumTypes[12]
}
func (x StreamEvent_Statement_Category) Number() protoreflect.EnumNumber {
@@ -936,11 +985,9 @@ type Target struct {
func (x *Target) Reset() {
*x = Target{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Target) String() string {
@@ -951,7 +998,7 @@ func (*Target) ProtoMessage() {}
func (x *Target) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[0]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1013,11 +1060,9 @@ type VTGateCallerID struct {
func (x *VTGateCallerID) Reset() {
*x = VTGateCallerID{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[1]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VTGateCallerID) String() string {
@@ -1028,7 +1073,7 @@ func (*VTGateCallerID) ProtoMessage() {}
func (x *VTGateCallerID) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[1]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1078,11 +1123,9 @@ type EventToken struct {
func (x *EventToken) Reset() {
*x = EventToken{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[2]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *EventToken) String() string {
@@ -1093,7 +1136,7 @@ func (*EventToken) ProtoMessage() {}
func (x *EventToken) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[2]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1141,11 +1184,9 @@ type Value struct {
func (x *Value) Reset() {
*x = Value{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[3]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Value) String() string {
@@ -1156,7 +1197,7 @@ func (*Value) ProtoMessage() {}
func (x *Value) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[3]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1199,11 +1240,9 @@ type BindVariable struct {
func (x *BindVariable) Reset() {
*x = BindVariable{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[4]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *BindVariable) String() string {
@@ -1214,7 +1253,7 @@ func (*BindVariable) ProtoMessage() {}
func (x *BindVariable) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[4]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1265,11 +1304,9 @@ type BoundQuery struct {
func (x *BoundQuery) Reset() {
*x = BoundQuery{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[5]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *BoundQuery) String() string {
@@ -1280,7 +1317,7 @@ func (*BoundQuery) ProtoMessage() {}
func (x *BoundQuery) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[5]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1365,11 +1402,9 @@ type ExecuteOptions struct {
func (x *ExecuteOptions) Reset() {
*x = ExecuteOptions{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[6]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteOptions) String() string {
@@ -1380,7 +1415,7 @@ func (*ExecuteOptions) ProtoMessage() {}
func (x *ExecuteOptions) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[6]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1534,11 +1569,9 @@ type Field struct {
func (x *Field) Reset() {
*x = Field{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[7]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Field) String() string {
@@ -1549,7 +1582,7 @@ func (*Field) ProtoMessage() {}
func (x *Field) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[7]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1658,11 +1691,9 @@ type Row struct {
func (x *Row) Reset() {
*x = Row{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[8]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Row) String() string {
@@ -1673,7 +1704,7 @@ func (*Row) ProtoMessage() {}
func (x *Row) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[8]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1726,11 +1757,9 @@ type QueryResult struct {
func (x *QueryResult) Reset() {
*x = QueryResult{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[9]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *QueryResult) String() string {
@@ -1741,7 +1770,7 @@ func (*QueryResult) ProtoMessage() {}
func (x *QueryResult) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[9]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1811,11 +1840,9 @@ type QueryWarning struct {
func (x *QueryWarning) Reset() {
*x = QueryWarning{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[10]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[10]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *QueryWarning) String() string {
@@ -1826,7 +1853,7 @@ func (*QueryWarning) ProtoMessage() {}
func (x *QueryWarning) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[10]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1871,11 +1898,9 @@ type StreamEvent struct {
func (x *StreamEvent) Reset() {
*x = StreamEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[11]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[11]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StreamEvent) String() string {
@@ -1886,7 +1911,7 @@ func (*StreamEvent) ProtoMessage() {}
func (x *StreamEvent) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[11]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1932,11 +1957,9 @@ type ExecuteRequest struct {
func (x *ExecuteRequest) Reset() {
*x = ExecuteRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[12]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[12]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteRequest) String() string {
@@ -1947,7 +1970,7 @@ func (*ExecuteRequest) ProtoMessage() {}
func (x *ExecuteRequest) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[12]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2022,11 +2045,9 @@ type ExecuteResponse struct {
func (x *ExecuteResponse) Reset() {
*x = ExecuteResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[13]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[13]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteResponse) String() string {
@@ -2037,7 +2058,7 @@ func (*ExecuteResponse) ProtoMessage() {}
func (x *ExecuteResponse) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[13]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2075,11 +2096,9 @@ type ResultWithError struct {
func (x *ResultWithError) Reset() {
*x = ResultWithError{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[14]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[14]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ResultWithError) String() string {
@@ -2090,7 +2109,7 @@ func (*ResultWithError) ProtoMessage() {}
func (x *ResultWithError) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[14]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2136,11 +2155,9 @@ type StreamExecuteRequest struct {
func (x *StreamExecuteRequest) Reset() {
*x = StreamExecuteRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[15]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[15]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StreamExecuteRequest) String() string {
@@ -2151,7 +2168,7 @@ func (*StreamExecuteRequest) ProtoMessage() {}
func (x *StreamExecuteRequest) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[15]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2226,11 +2243,9 @@ type StreamExecuteResponse struct {
func (x *StreamExecuteResponse) Reset() {
*x = StreamExecuteResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[16]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[16]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StreamExecuteResponse) String() string {
@@ -2241,7 +2256,7 @@ func (*StreamExecuteResponse) ProtoMessage() {}
func (x *StreamExecuteResponse) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[16]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2277,11 +2292,9 @@ type BeginRequest struct {
func (x *BeginRequest) Reset() {
*x = BeginRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[17]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[17]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *BeginRequest) String() string {
@@ -2292,7 +2305,7 @@ func (*BeginRequest) ProtoMessage() {}
func (x *BeginRequest) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[17]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2350,11 +2363,9 @@ type BeginResponse struct {
func (x *BeginResponse) Reset() {
*x = BeginResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[18]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[18]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *BeginResponse) String() string {
@@ -2365,7 +2376,7 @@ func (*BeginResponse) ProtoMessage() {}
func (x *BeginResponse) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[18]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2415,11 +2426,9 @@ type CommitRequest struct {
func (x *CommitRequest) Reset() {
*x = CommitRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[19]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[19]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CommitRequest) String() string {
@@ -2430,7 +2439,7 @@ func (*CommitRequest) ProtoMessage() {}
func (x *CommitRequest) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[19]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2484,11 +2493,9 @@ type CommitResponse struct {
func (x *CommitResponse) Reset() {
*x = CommitResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[20]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[20]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CommitResponse) String() string {
@@ -2499,7 +2506,7 @@ func (*CommitResponse) ProtoMessage() {}
func (x *CommitResponse) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[20]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2535,11 +2542,9 @@ type RollbackRequest struct {
func (x *RollbackRequest) Reset() {
*x = RollbackRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[21]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[21]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RollbackRequest) String() string {
@@ -2550,7 +2555,7 @@ func (*RollbackRequest) ProtoMessage() {}
func (x *RollbackRequest) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[21]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2604,11 +2609,9 @@ type RollbackResponse struct {
func (x *RollbackResponse) Reset() {
*x = RollbackResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[22]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[22]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RollbackResponse) String() string {
@@ -2619,7 +2622,7 @@ func (*RollbackResponse) ProtoMessage() {}
func (x *RollbackResponse) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[22]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2656,11 +2659,9 @@ type PrepareRequest struct {
func (x *PrepareRequest) Reset() {
*x = PrepareRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[23]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[23]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *PrepareRequest) String() string {
@@ -2671,7 +2672,7 @@ func (*PrepareRequest) ProtoMessage() {}
func (x *PrepareRequest) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[23]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2730,11 +2731,9 @@ type PrepareResponse struct {
func (x *PrepareResponse) Reset() {
*x = PrepareResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[24]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[24]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *PrepareResponse) String() string {
@@ -2745,7 +2744,7 @@ func (*PrepareResponse) ProtoMessage() {}
func (x *PrepareResponse) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[24]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2774,11 +2773,9 @@ type CommitPreparedRequest struct {
func (x *CommitPreparedRequest) Reset() {
*x = CommitPreparedRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[25]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[25]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CommitPreparedRequest) String() string {
@@ -2789,7 +2786,7 @@ func (*CommitPreparedRequest) ProtoMessage() {}
func (x *CommitPreparedRequest) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[25]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2841,11 +2838,9 @@ type CommitPreparedResponse struct {
func (x *CommitPreparedResponse) Reset() {
*x = CommitPreparedResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[26]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[26]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CommitPreparedResponse) String() string {
@@ -2856,7 +2851,7 @@ func (*CommitPreparedResponse) ProtoMessage() {}
func (x *CommitPreparedResponse) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[26]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2886,11 +2881,9 @@ type RollbackPreparedRequest struct {
func (x *RollbackPreparedRequest) Reset() {
*x = RollbackPreparedRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[27]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[27]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RollbackPreparedRequest) String() string {
@@ -2901,7 +2894,7 @@ func (*RollbackPreparedRequest) ProtoMessage() {}
func (x *RollbackPreparedRequest) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[27]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2960,11 +2953,9 @@ type RollbackPreparedResponse struct {
func (x *RollbackPreparedResponse) Reset() {
*x = RollbackPreparedResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[28]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[28]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RollbackPreparedResponse) String() string {
@@ -2975,7 +2966,7 @@ func (*RollbackPreparedResponse) ProtoMessage() {}
func (x *RollbackPreparedResponse) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[28]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3005,11 +2996,9 @@ type CreateTransactionRequest struct {
func (x *CreateTransactionRequest) Reset() {
*x = CreateTransactionRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[29]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[29]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CreateTransactionRequest) String() string {
@@ -3020,7 +3009,7 @@ func (*CreateTransactionRequest) ProtoMessage() {}
func (x *CreateTransactionRequest) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[29]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3079,11 +3068,9 @@ type CreateTransactionResponse struct {
func (x *CreateTransactionResponse) Reset() {
*x = CreateTransactionResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[30]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[30]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CreateTransactionResponse) String() string {
@@ -3094,7 +3081,7 @@ func (*CreateTransactionResponse) ProtoMessage() {}
func (x *CreateTransactionResponse) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[30]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3124,11 +3111,9 @@ type StartCommitRequest struct {
func (x *StartCommitRequest) Reset() {
*x = StartCommitRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[31]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[31]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StartCommitRequest) String() string {
@@ -3139,7 +3124,7 @@ func (*StartCommitRequest) ProtoMessage() {}
func (x *StartCommitRequest) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[31]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3194,15 +3179,15 @@ type StartCommitResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
+
+ State StartCommitState `protobuf:"varint,1,opt,name=state,proto3,enum=query.StartCommitState" json:"state,omitempty"`
}
func (x *StartCommitResponse) Reset() {
*x = StartCommitResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[32]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[32]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StartCommitResponse) String() string {
@@ -3213,7 +3198,7 @@ func (*StartCommitResponse) ProtoMessage() {}
func (x *StartCommitResponse) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[32]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3228,6 +3213,13 @@ func (*StartCommitResponse) Descriptor() ([]byte, []int) {
return file_query_proto_rawDescGZIP(), []int{32}
}
+func (x *StartCommitResponse) GetState() StartCommitState {
+ if x != nil {
+ return x.State
+ }
+ return StartCommitState_Unknown
+}
+
// SetRollbackRequest is the payload to SetRollback
type SetRollbackRequest struct {
state protoimpl.MessageState
@@ -3243,11 +3235,9 @@ type SetRollbackRequest struct {
func (x *SetRollbackRequest) Reset() {
*x = SetRollbackRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[33]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[33]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SetRollbackRequest) String() string {
@@ -3258,7 +3248,7 @@ func (*SetRollbackRequest) ProtoMessage() {}
func (x *SetRollbackRequest) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[33]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3317,11 +3307,9 @@ type SetRollbackResponse struct {
func (x *SetRollbackResponse) Reset() {
*x = SetRollbackResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[34]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[34]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SetRollbackResponse) String() string {
@@ -3332,7 +3320,7 @@ func (*SetRollbackResponse) ProtoMessage() {}
func (x *SetRollbackResponse) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[34]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3361,11 +3349,9 @@ type ConcludeTransactionRequest struct {
func (x *ConcludeTransactionRequest) Reset() {
*x = ConcludeTransactionRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[35]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[35]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ConcludeTransactionRequest) String() string {
@@ -3376,7 +3362,7 @@ func (*ConcludeTransactionRequest) ProtoMessage() {}
func (x *ConcludeTransactionRequest) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[35]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3428,11 +3414,9 @@ type ConcludeTransactionResponse struct {
func (x *ConcludeTransactionResponse) Reset() {
*x = ConcludeTransactionResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[36]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[36]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ConcludeTransactionResponse) String() string {
@@ -3443,7 +3427,7 @@ func (*ConcludeTransactionResponse) ProtoMessage() {}
func (x *ConcludeTransactionResponse) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[36]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3472,11 +3456,9 @@ type ReadTransactionRequest struct {
func (x *ReadTransactionRequest) Reset() {
*x = ReadTransactionRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[37]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[37]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReadTransactionRequest) String() string {
@@ -3487,7 +3469,7 @@ func (*ReadTransactionRequest) ProtoMessage() {}
func (x *ReadTransactionRequest) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[37]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3541,11 +3523,9 @@ type ReadTransactionResponse struct {
func (x *ReadTransactionResponse) Reset() {
*x = ReadTransactionResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[38]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[38]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReadTransactionResponse) String() string {
@@ -3556,7 +3536,7 @@ func (*ReadTransactionResponse) ProtoMessage() {}
func (x *ReadTransactionResponse) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[38]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3592,11 +3572,9 @@ type UnresolvedTransactionsRequest struct {
func (x *UnresolvedTransactionsRequest) Reset() {
*x = UnresolvedTransactionsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[39]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[39]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UnresolvedTransactionsRequest) String() string {
@@ -3607,7 +3585,7 @@ func (*UnresolvedTransactionsRequest) ProtoMessage() {}
func (x *UnresolvedTransactionsRequest) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[39]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3661,11 +3639,9 @@ type UnresolvedTransactionsResponse struct {
func (x *UnresolvedTransactionsResponse) Reset() {
*x = UnresolvedTransactionsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[40]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[40]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UnresolvedTransactionsResponse) String() string {
@@ -3676,7 +3652,7 @@ func (*UnresolvedTransactionsResponse) ProtoMessage() {}
func (x *UnresolvedTransactionsResponse) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[40]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3715,11 +3691,9 @@ type BeginExecuteRequest struct {
func (x *BeginExecuteRequest) Reset() {
*x = BeginExecuteRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[41]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[41]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *BeginExecuteRequest) String() string {
@@ -3730,7 +3704,7 @@ func (*BeginExecuteRequest) ProtoMessage() {}
func (x *BeginExecuteRequest) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[41]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3815,11 +3789,9 @@ type BeginExecuteResponse struct {
func (x *BeginExecuteResponse) Reset() {
*x = BeginExecuteResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[42]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[42]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *BeginExecuteResponse) String() string {
@@ -3830,7 +3802,7 @@ func (*BeginExecuteResponse) ProtoMessage() {}
func (x *BeginExecuteResponse) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[42]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3897,11 +3869,9 @@ type BeginStreamExecuteRequest struct {
func (x *BeginStreamExecuteRequest) Reset() {
*x = BeginStreamExecuteRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[43]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[43]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *BeginStreamExecuteRequest) String() string {
@@ -3912,7 +3882,7 @@ func (*BeginStreamExecuteRequest) ProtoMessage() {}
func (x *BeginStreamExecuteRequest) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[43]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3997,11 +3967,9 @@ type BeginStreamExecuteResponse struct {
func (x *BeginStreamExecuteResponse) Reset() {
*x = BeginStreamExecuteResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[44]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[44]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *BeginStreamExecuteResponse) String() string {
@@ -4012,7 +3980,7 @@ func (*BeginStreamExecuteResponse) ProtoMessage() {}
func (x *BeginStreamExecuteResponse) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[44]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4077,11 +4045,9 @@ type MessageStreamRequest struct {
func (x *MessageStreamRequest) Reset() {
*x = MessageStreamRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[45]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[45]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MessageStreamRequest) String() string {
@@ -4092,7 +4058,7 @@ func (*MessageStreamRequest) ProtoMessage() {}
func (x *MessageStreamRequest) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[45]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4146,11 +4112,9 @@ type MessageStreamResponse struct {
func (x *MessageStreamResponse) Reset() {
*x = MessageStreamResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[46]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[46]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MessageStreamResponse) String() string {
@@ -4161,7 +4125,7 @@ func (*MessageStreamResponse) ProtoMessage() {}
func (x *MessageStreamResponse) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[46]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4199,11 +4163,9 @@ type MessageAckRequest struct {
func (x *MessageAckRequest) Reset() {
*x = MessageAckRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[47]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[47]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MessageAckRequest) String() string {
@@ -4214,7 +4176,7 @@ func (*MessageAckRequest) ProtoMessage() {}
func (x *MessageAckRequest) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[47]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4278,11 +4240,9 @@ type MessageAckResponse struct {
func (x *MessageAckResponse) Reset() {
*x = MessageAckResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[48]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[48]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MessageAckResponse) String() string {
@@ -4293,7 +4253,7 @@ func (*MessageAckResponse) ProtoMessage() {}
func (x *MessageAckResponse) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[48]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4332,11 +4292,9 @@ type ReserveExecuteRequest struct {
func (x *ReserveExecuteRequest) Reset() {
*x = ReserveExecuteRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[49]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[49]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReserveExecuteRequest) String() string {
@@ -4347,7 +4305,7 @@ func (*ReserveExecuteRequest) ProtoMessage() {}
func (x *ReserveExecuteRequest) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[49]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4426,11 +4384,9 @@ type ReserveExecuteResponse struct {
func (x *ReserveExecuteResponse) Reset() {
*x = ReserveExecuteResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[50]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[50]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReserveExecuteResponse) String() string {
@@ -4441,7 +4397,7 @@ func (*ReserveExecuteResponse) ProtoMessage() {}
func (x *ReserveExecuteResponse) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[50]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4501,11 +4457,9 @@ type ReserveStreamExecuteRequest struct {
func (x *ReserveStreamExecuteRequest) Reset() {
*x = ReserveStreamExecuteRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[51]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[51]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReserveStreamExecuteRequest) String() string {
@@ -4516,7 +4470,7 @@ func (*ReserveStreamExecuteRequest) ProtoMessage() {}
func (x *ReserveStreamExecuteRequest) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[51]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4595,11 +4549,9 @@ type ReserveStreamExecuteResponse struct {
func (x *ReserveStreamExecuteResponse) Reset() {
*x = ReserveStreamExecuteResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[52]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[52]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReserveStreamExecuteResponse) String() string {
@@ -4610,7 +4562,7 @@ func (*ReserveStreamExecuteResponse) ProtoMessage() {}
func (x *ReserveStreamExecuteResponse) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[52]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4670,11 +4622,9 @@ type ReserveBeginExecuteRequest struct {
func (x *ReserveBeginExecuteRequest) Reset() {
*x = ReserveBeginExecuteRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[53]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[53]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReserveBeginExecuteRequest) String() string {
@@ -4685,7 +4635,7 @@ func (*ReserveBeginExecuteRequest) ProtoMessage() {}
func (x *ReserveBeginExecuteRequest) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[53]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4771,11 +4721,9 @@ type ReserveBeginExecuteResponse struct {
func (x *ReserveBeginExecuteResponse) Reset() {
*x = ReserveBeginExecuteResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[54]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[54]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReserveBeginExecuteResponse) String() string {
@@ -4786,7 +4734,7 @@ func (*ReserveBeginExecuteResponse) ProtoMessage() {}
func (x *ReserveBeginExecuteResponse) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[54]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4860,11 +4808,9 @@ type ReserveBeginStreamExecuteRequest struct {
func (x *ReserveBeginStreamExecuteRequest) Reset() {
*x = ReserveBeginStreamExecuteRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[55]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[55]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReserveBeginStreamExecuteRequest) String() string {
@@ -4875,7 +4821,7 @@ func (*ReserveBeginStreamExecuteRequest) ProtoMessage() {}
func (x *ReserveBeginStreamExecuteRequest) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[55]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4961,11 +4907,9 @@ type ReserveBeginStreamExecuteResponse struct {
func (x *ReserveBeginStreamExecuteResponse) Reset() {
*x = ReserveBeginStreamExecuteResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[56]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[56]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReserveBeginStreamExecuteResponse) String() string {
@@ -4976,7 +4920,7 @@ func (*ReserveBeginStreamExecuteResponse) ProtoMessage() {}
func (x *ReserveBeginStreamExecuteResponse) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[56]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5048,11 +4992,9 @@ type ReleaseRequest struct {
func (x *ReleaseRequest) Reset() {
*x = ReleaseRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[57]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[57]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReleaseRequest) String() string {
@@ -5063,7 +5005,7 @@ func (*ReleaseRequest) ProtoMessage() {}
func (x *ReleaseRequest) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[57]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5122,11 +5064,9 @@ type ReleaseResponse struct {
func (x *ReleaseResponse) Reset() {
*x = ReleaseResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[58]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[58]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReleaseResponse) String() string {
@@ -5137,7 +5077,7 @@ func (*ReleaseResponse) ProtoMessage() {}
func (x *ReleaseResponse) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[58]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5161,11 +5101,9 @@ type StreamHealthRequest struct {
func (x *StreamHealthRequest) Reset() {
*x = StreamHealthRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[59]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[59]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StreamHealthRequest) String() string {
@@ -5176,7 +5114,7 @@ func (*StreamHealthRequest) ProtoMessage() {}
func (x *StreamHealthRequest) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[59]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5236,11 +5174,9 @@ type RealtimeStats struct {
func (x *RealtimeStats) Reset() {
*x = RealtimeStats{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[60]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[60]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RealtimeStats) String() string {
@@ -5251,7 +5187,7 @@ func (*RealtimeStats) ProtoMessage() {}
func (x *RealtimeStats) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[60]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5361,11 +5297,9 @@ type AggregateStats struct {
func (x *AggregateStats) Reset() {
*x = AggregateStats{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[61]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[61]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *AggregateStats) String() string {
@@ -5376,7 +5310,7 @@ func (*AggregateStats) ProtoMessage() {}
func (x *AggregateStats) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[61]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5483,11 +5417,9 @@ type StreamHealthResponse struct {
func (x *StreamHealthResponse) Reset() {
*x = StreamHealthResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[62]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[62]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StreamHealthResponse) String() string {
@@ -5498,7 +5430,7 @@ func (*StreamHealthResponse) ProtoMessage() {}
func (x *StreamHealthResponse) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[62]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5569,11 +5501,9 @@ type TransactionMetadata struct {
func (x *TransactionMetadata) Reset() {
*x = TransactionMetadata{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[63]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[63]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *TransactionMetadata) String() string {
@@ -5584,7 +5514,7 @@ func (*TransactionMetadata) ProtoMessage() {}
func (x *TransactionMetadata) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[63]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5640,11 +5570,9 @@ type GetSchemaRequest struct {
func (x *GetSchemaRequest) Reset() {
*x = GetSchemaRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[64]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[64]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSchemaRequest) String() string {
@@ -5655,7 +5583,7 @@ func (*GetSchemaRequest) ProtoMessage() {}
func (x *GetSchemaRequest) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[64]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5704,11 +5632,9 @@ type UDFInfo struct {
func (x *UDFInfo) Reset() {
*x = UDFInfo{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[65]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[65]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UDFInfo) String() string {
@@ -5719,7 +5645,7 @@ func (*UDFInfo) ProtoMessage() {}
func (x *UDFInfo) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[65]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5768,11 +5694,9 @@ type GetSchemaResponse struct {
func (x *GetSchemaResponse) Reset() {
*x = GetSchemaResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[66]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[66]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSchemaResponse) String() string {
@@ -5783,7 +5707,7 @@ func (*GetSchemaResponse) ProtoMessage() {}
func (x *GetSchemaResponse) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[66]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5830,11 +5754,9 @@ type StreamEvent_Statement struct {
func (x *StreamEvent_Statement) Reset() {
*x = StreamEvent_Statement{}
- if protoimpl.UnsafeEnabled {
- mi := &file_query_proto_msgTypes[68]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_query_proto_msgTypes[68]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StreamEvent_Statement) String() string {
@@ -5845,7 +5767,7 @@ func (*StreamEvent_Statement) ProtoMessage() {}
func (x *StreamEvent_Statement) ProtoReflect() protoreflect.Message {
mi := &file_query_proto_msgTypes[68]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6311,83 +6233,12 @@ var file_query_proto_rawDesc = []byte{
0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64,
0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74,
0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x74, 0x69, 0x64, 0x18, 0x05, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x74, 0x61,
+ 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, 0x64, 0x22, 0x44, 0x0a, 0x13, 0x53, 0x74, 0x61,
0x72, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0xfe, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63,
- 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c,
- 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65,
- 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65,
- 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54,
- 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d,
- 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12,
- 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06,
- 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61,
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d,
- 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a,
- 0x04, 0x64, 0x74, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69,
- 0x64, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xdf, 0x01, 0x0a, 0x1a, 0x43, 0x6f, 0x6e,
- 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63,
- 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c,
- 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65,
- 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65,
- 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54,
- 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d,
- 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12,
- 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06,
- 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x74, 0x69, 0x64, 0x18, 0x04,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, 0x64, 0x22, 0x1d, 0x0a, 0x1b, 0x43, 0x6f,
- 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f,
- 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xdb, 0x01, 0x0a, 0x16, 0x52, 0x65,
- 0x61, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76,
- 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72,
- 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c,
- 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61,
- 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74,
- 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64,
- 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06,
- 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71,
- 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72,
- 0x67, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x74, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, 0x64, 0x22, 0x51, 0x0a, 0x17, 0x52, 0x65, 0x61, 0x64, 0x54,
- 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x12, 0x36, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61,
- 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
- 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xef, 0x01, 0x0a, 0x1d, 0x55,
- 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63,
- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13,
- 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72,
- 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70,
- 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65,
- 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a,
- 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65,
- 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65,
- 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49,
- 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c,
- 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72,
- 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x61,
- 0x62, 0x61, 0x6e, 0x64, 0x6f, 0x6e, 0x5f, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03,
- 0x52, 0x0a, 0x61, 0x62, 0x61, 0x6e, 0x64, 0x6f, 0x6e, 0x41, 0x67, 0x65, 0x22, 0x60, 0x0a, 0x1e,
- 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61,
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e,
- 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01,
- 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61,
- 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
- 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe0,
- 0x02, 0x0a, 0x13, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52,
+ 0x12, 0x2d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32,
+ 0x17, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x6d,
+ 0x6d, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22,
+ 0xfe, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74,
0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c,
@@ -6399,73 +6250,49 @@ var file_query_proto_rawDesc = []byte{
0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25,
0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d,
0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74,
- 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x27, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75,
- 0x6e, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2f,
- 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4f,
- 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12,
- 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x06,
- 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64,
- 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18,
- 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65,
- 0x73, 0x22, 0xfe, 0x01, 0x0a, 0x14, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75,
- 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x65, 0x72,
- 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70,
- 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f,
- 0x72, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52,
- 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x25, 0x0a,
- 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18,
- 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69,
- 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61,
- 0x6c, 0x69, 0x61, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70,
- 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61,
- 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x32,
- 0x0a, 0x15, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f,
- 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x73,
- 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67,
- 0x65, 0x73, 0x22, 0xe6, 0x02, 0x0a, 0x19, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x53, 0x74, 0x72, 0x65,
- 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61,
- 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e,
- 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11,
- 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49,
- 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63,
- 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15,
- 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c,
- 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65,
- 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67,
- 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79,
- 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12,
- 0x27, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11,
- 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x72,
- 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2f, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69,
- 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72,
- 0x79, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65,
- 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a,
- 0x70, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65,
- 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52,
- 0x0a, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64, 0x22, 0x84, 0x02, 0x0a, 0x1a,
- 0x42, 0x65, 0x67, 0x69, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75,
- 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x65, 0x72,
- 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70,
- 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f,
- 0x72, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52,
- 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x25, 0x0a,
- 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18,
- 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69,
- 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61,
- 0x6c, 0x69, 0x61, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70,
- 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61,
- 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x32,
- 0x0a, 0x15, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f,
- 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x73,
- 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67,
- 0x65, 0x73, 0x22, 0xd9, 0x01, 0x0a, 0x14, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74,
- 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65,
+ 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74,
+ 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04,
+ 0x64, 0x74, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, 0x64,
+ 0x22, 0x15, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xdf, 0x01, 0x0a, 0x1a, 0x43, 0x6f, 0x6e, 0x63,
+ 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74,
+ 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c,
+ 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43,
+ 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64,
+ 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47,
+ 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d,
+ 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25,
+ 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d,
+ 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74,
+ 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x74, 0x69, 0x64, 0x18, 0x04, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, 0x64, 0x22, 0x1d, 0x0a, 0x1b, 0x43, 0x6f, 0x6e,
+ 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xdb, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x61,
+ 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65,
+ 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49,
+ 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c,
+ 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74,
+ 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65,
+ 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69,
+ 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74,
+ 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75,
+ 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67,
+ 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x74, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x04, 0x64, 0x74, 0x69, 0x64, 0x22, 0x51, 0x0a, 0x17, 0x52, 0x65, 0x61, 0x64, 0x54, 0x72,
+ 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x36, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e,
+ 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52,
+ 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xef, 0x01, 0x0a, 0x1d, 0x55, 0x6e,
+ 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65,
0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f,
0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63,
0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63,
@@ -6476,128 +6303,77 @@ var file_query_proto_rawDesc = []byte{
0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65,
0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67,
- 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,
- 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x43,
- 0x0a, 0x15, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c,
- 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e,
- 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73,
- 0x75, 0x6c, 0x74, 0x22, 0xf6, 0x01, 0x0a, 0x11, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41,
- 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66,
- 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43,
- 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69,
- 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d,
- 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69,
- 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e,
- 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11,
- 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49,
- 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74,
- 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
- 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x03,
- 0x69, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x71, 0x75, 0x65, 0x72,
- 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x40, 0x0a, 0x12,
- 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79,
- 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xe8,
- 0x02, 0x0a, 0x15, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74,
- 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65,
- 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61,
- 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76,
- 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d,
- 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56,
- 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69,
- 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64,
- 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52,
- 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x27, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79,
- 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42,
- 0x6f, 0x75, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79,
- 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
- 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61,
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f,
- 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79,
+ 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x62,
+ 0x61, 0x6e, 0x64, 0x6f, 0x6e, 0x5f, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52,
+ 0x0a, 0x61, 0x62, 0x61, 0x6e, 0x64, 0x6f, 0x6e, 0x41, 0x67, 0x65, 0x22, 0x60, 0x0a, 0x1e, 0x55,
+ 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a,
+ 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20,
+ 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e,
+ 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52,
+ 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe0, 0x02,
+ 0x0a, 0x13, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69,
+ 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65,
+ 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61,
+ 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69,
+ 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61,
+ 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65,
+ 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a,
+ 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e,
+ 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61,
+ 0x72, 0x67, 0x65, 0x74, 0x12, 0x27, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75, 0x6e,
+ 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2f, 0x0a,
+ 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15,
+ 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4f, 0x70,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f,
+ 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20,
+ 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64, 0x12,
+ 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x07,
+ 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73,
+ 0x22, 0xfe, 0x01, 0x0a, 0x14, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74,
+ 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x65, 0x72, 0x72,
+ 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63,
+ 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72,
+ 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65,
+ 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x25, 0x0a, 0x0e,
+ 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03,
+ 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c,
+ 0x69, 0x61, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73,
+ 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x32, 0x0a,
+ 0x15, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63,
+ 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x73, 0x65,
+ 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65,
+ 0x73, 0x22, 0xe6, 0x02, 0x0a, 0x19, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61,
+ 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c,
+ 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76,
+ 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65,
+ 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64,
+ 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61,
+ 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
+ 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c,
+ 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43,
+ 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65,
+ 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e,
+ 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x27,
+ 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e,
+ 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79,
+ 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2f, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79,
0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x5f,
- 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70,
- 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xc6, 0x01, 0x0a, 0x16, 0x52, 0x65,
- 0x73, 0x65, 0x72, 0x76, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45,
- 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x06, 0x72,
- 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75,
- 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52,
- 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72,
- 0x76, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65,
- 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15,
- 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69,
- 0x61, 0x73, 0x22, 0xee, 0x02, 0x0a, 0x1b, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x53, 0x74,
- 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f,
- 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44,
- 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65,
- 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65,
- 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43,
- 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61,
- 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61,
- 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65,
- 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65,
- 0x74, 0x12, 0x27, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x11, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x51, 0x75,
- 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2f, 0x0a, 0x07, 0x6f, 0x70,
- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75,
- 0x65, 0x72, 0x79, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f,
- 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x74,
- 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20,
- 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65,
- 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72,
- 0x69, 0x65, 0x73, 0x22, 0xcc, 0x01, 0x0a, 0x1c, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x53,
- 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45,
- 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x06, 0x72,
- 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75,
- 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52,
- 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72,
- 0x76, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65,
- 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15,
- 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69,
- 0x61, 0x73, 0x22, 0xf4, 0x02, 0x0a, 0x1a, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x42, 0x65,
- 0x67, 0x69, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63,
- 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f,
- 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52,
- 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72,
- 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f,
- 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61,
- 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74,
- 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72,
- 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72,
- 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74,
- 0x12, 0x27, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x11, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x51, 0x75, 0x65,
- 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2f, 0x0a, 0x07, 0x6f, 0x70, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65,
- 0x72, 0x79, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
- 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72,
- 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52,
- 0x0a, 0x70, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x70,
- 0x6f, 0x73, 0x74, 0x5f, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65,
- 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x74, 0x42, 0x65, 0x67,
- 0x69, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xa6, 0x02, 0x0a, 0x1b, 0x52, 0x65,
- 0x73, 0x65, 0x72, 0x76, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74,
+ 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70,
+ 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73,
+ 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a,
+ 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64, 0x22, 0x84, 0x02, 0x0a, 0x1a, 0x42,
+ 0x65, 0x67, 0x69, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74,
0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x65, 0x72, 0x72,
0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63,
0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72,
@@ -6606,17 +6382,52 @@ var file_query_proto_rawDesc = []byte{
0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x25, 0x0a, 0x0e,
0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03,
0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f,
- 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f,
- 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76,
- 0x65, 0x64, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61,
- 0x6c, 0x69, 0x61, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70,
- 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61,
- 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x32,
- 0x0a, 0x15, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f,
- 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x73,
- 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67,
- 0x65, 0x73, 0x22, 0xfa, 0x02, 0x0a, 0x20, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x42, 0x65,
- 0x67, 0x69, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65,
+ 0x6e, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c,
+ 0x69, 0x61, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73,
+ 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x32, 0x0a,
+ 0x15, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63,
+ 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x73, 0x65,
+ 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65,
+ 0x73, 0x22, 0xd9, 0x01, 0x0a, 0x14, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72,
+ 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66,
+ 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69,
+ 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e,
+ 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74,
+ 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69,
+ 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f,
+ 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79,
+ 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52,
+ 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72,
+ 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65,
+ 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
+ 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x43, 0x0a,
+ 0x15, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51,
+ 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75,
+ 0x6c, 0x74, 0x22, 0xf6, 0x01, 0x0a, 0x11, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x63,
+ 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65,
+ 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61,
+ 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76,
+ 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d,
+ 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56,
+ 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69,
+ 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64,
+ 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52,
+ 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
+ 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x03, 0x69,
+ 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79,
+ 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x40, 0x0a, 0x12, 0x4d,
+ 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52,
+ 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xe8, 0x02,
+ 0x0a, 0x15, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63,
0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c,
@@ -6631,34 +6442,28 @@ var file_query_proto_rawDesc = []byte{
0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x27, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18,
0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f,
0x75, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12,
- 0x2f, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65,
- 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18,
- 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65,
- 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x5f,
- 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x70,
- 0x6f, 0x73, 0x74, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22,
- 0xac, 0x02, 0x0a, 0x21, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e,
- 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43,
- 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x06,
- 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71,
- 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
- 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e,
- 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03,
- 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12,
- 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x04,
- 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64,
- 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73,
- 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x65,
- 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x6e,
- 0x67, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x73, 0x65, 0x73, 0x73, 0x69,
- 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x22, 0x87,
- 0x02, 0x0a, 0x0e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69,
+ 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e,
+ 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07,
+ 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x5f, 0x71,
+ 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72,
+ 0x65, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xc6, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x73,
+ 0x65, 0x72, 0x76, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72,
+ 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65,
+ 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65,
+ 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06,
+ 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76,
+ 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73,
+ 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
+ 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41,
+ 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61,
+ 0x73, 0x22, 0xee, 0x02, 0x0a, 0x1b, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x53, 0x74, 0x72,
+ 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63,
0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f,
0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52,
@@ -6670,192 +6475,316 @@ var file_query_proto_rawDesc = []byte{
0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72,
0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72,
0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74,
- 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
- 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61,
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72,
- 0x76, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65,
- 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64, 0x22, 0x11, 0x0a, 0x0f, 0x52, 0x65, 0x6c, 0x65,
- 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x53,
- 0x74, 0x72, 0x65, 0x61, 0x6d, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x22, 0xbe, 0x03, 0x0a, 0x0d, 0x52, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x53,
- 0x74, 0x61, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x5f, 0x65,
- 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x68, 0x65, 0x61, 0x6c,
- 0x74, 0x68, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x36, 0x0a, 0x17, 0x72, 0x65, 0x70, 0x6c, 0x69,
- 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e,
- 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12,
- 0x30, 0x0a, 0x14, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72,
- 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x62,
- 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x43, 0x6f, 0x75, 0x6e,
- 0x74, 0x12, 0x47, 0x0a, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65,
- 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67, 0x5f, 0x73, 0x65,
- 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1d, 0x66, 0x69, 0x6c,
- 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x4c, 0x61, 0x67, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x70,
- 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x63,
- 0x70, 0x75, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x71, 0x70, 0x73, 0x18, 0x06,
- 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x71, 0x70, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x61, 0x62,
- 0x6c, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65,
- 0x64, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x63,
- 0x68, 0x65, 0x6d, 0x61, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x76,
- 0x69, 0x65, 0x77, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67,
- 0x65, 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x76, 0x69, 0x65, 0x77, 0x53, 0x63,
- 0x68, 0x65, 0x6d, 0x61, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x75,
- 0x64, 0x66, 0x73, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28,
- 0x08, 0x52, 0x0b, 0x75, 0x64, 0x66, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x23,
- 0x0a, 0x0d, 0x74, 0x78, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x18,
- 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x74, 0x78, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c,
- 0x76, 0x65, 0x64, 0x22, 0xf6, 0x01, 0x0a, 0x0e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74,
- 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68,
- 0x79, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x54, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x75, 0x6e, 0x68, 0x65,
- 0x61, 0x6c, 0x74, 0x68, 0x79, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75,
- 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x75, 0x6e, 0x68, 0x65, 0x61, 0x6c,
- 0x74, 0x68, 0x79, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3d,
- 0x0a, 0x1b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61,
- 0x67, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x03, 0x20,
- 0x01, 0x28, 0x0d, 0x52, 0x18, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x4c, 0x61, 0x67, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x4d, 0x69, 0x6e, 0x12, 0x3d, 0x0a,
+ 0x12, 0x27, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x11, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x51, 0x75, 0x65,
+ 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2f, 0x0a, 0x07, 0x6f, 0x70, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65,
+ 0x72, 0x79, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72,
+ 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01,
+ 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49,
+ 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73,
+ 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x69,
+ 0x65, 0x73, 0x22, 0xcc, 0x01, 0x0a, 0x1c, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x53, 0x74,
+ 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72,
+ 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65,
+ 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65,
+ 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06,
+ 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76,
+ 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73,
+ 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
+ 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41,
+ 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61,
+ 0x73, 0x22, 0xf4, 0x02, 0x0a, 0x1a, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x42, 0x65, 0x67,
+ 0x69, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61,
+ 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e,
+ 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11,
+ 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49,
+ 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63,
+ 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15,
+ 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c,
+ 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65,
+ 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67,
+ 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79,
+ 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12,
+ 0x27, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11,
+ 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x72,
+ 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2f, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72,
+ 0x79, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65,
+ 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a,
+ 0x70, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x6f,
+ 0x73, 0x74, 0x5f, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73,
+ 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x74, 0x42, 0x65, 0x67, 0x69,
+ 0x6e, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xa6, 0x02, 0x0a, 0x1b, 0x52, 0x65, 0x73,
+ 0x65, 0x72, 0x76, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f,
+ 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e,
+ 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12,
+ 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73,
+ 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x74,
+ 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20,
+ 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x69,
+ 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65,
+ 0x64, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c,
+ 0x69, 0x61, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73,
+ 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x32, 0x0a,
+ 0x15, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63,
+ 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x73, 0x65,
+ 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65,
+ 0x73, 0x22, 0xfa, 0x02, 0x0a, 0x20, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x42, 0x65, 0x67,
+ 0x69, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74,
+ 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c,
+ 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43,
+ 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64,
+ 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47,
+ 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d,
+ 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25,
+ 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d,
+ 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74,
+ 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x27, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75,
+ 0x6e, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2f,
+ 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4f,
+ 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12,
+ 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x06,
+ 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73,
+ 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x5f, 0x71,
+ 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x70, 0x6f,
+ 0x73, 0x74, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xac,
+ 0x02, 0x0a, 0x21, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x53,
+ 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45,
+ 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x06, 0x72,
+ 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75,
+ 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52,
+ 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73,
+ 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52,
+ 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1f,
+ 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20,
+ 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64, 0x12,
+ 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18,
+ 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x65, 0x73,
+ 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67,
+ 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f,
+ 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x22, 0x87, 0x02,
+ 0x0a, 0x0e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61,
+ 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e,
+ 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11,
+ 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49,
+ 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63,
+ 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15,
+ 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c,
+ 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65,
+ 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67,
+ 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79,
+ 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12,
+ 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69,
+ 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76,
+ 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73,
+ 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64, 0x22, 0x11, 0x0a, 0x0f, 0x52, 0x65, 0x6c, 0x65, 0x61,
+ 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x74,
+ 0x72, 0x65, 0x61, 0x6d, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x22, 0xbe, 0x03, 0x0a, 0x0d, 0x52, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74,
+ 0x61, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x5f, 0x65, 0x72,
+ 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x68, 0x65, 0x61, 0x6c, 0x74,
+ 0x68, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x36, 0x0a, 0x17, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64,
+ 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x30,
+ 0x0a, 0x14, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73,
+ 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x62, 0x69,
+ 0x6e, 0x6c, 0x6f, 0x67, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74,
+ 0x12, 0x47, 0x0a, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x70,
+ 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67, 0x5f, 0x73, 0x65, 0x63,
+ 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1d, 0x66, 0x69, 0x6c, 0x74,
+ 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c,
+ 0x61, 0x67, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x70, 0x75,
+ 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x63, 0x70,
+ 0x75, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x71, 0x70, 0x73, 0x18, 0x06, 0x20,
+ 0x01, 0x28, 0x01, 0x52, 0x03, 0x71, 0x70, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64,
+ 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x63, 0x68,
+ 0x65, 0x6d, 0x61, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x76, 0x69,
+ 0x65, 0x77, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65,
+ 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x76, 0x69, 0x65, 0x77, 0x53, 0x63, 0x68,
+ 0x65, 0x6d, 0x61, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x64,
+ 0x66, 0x73, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08,
+ 0x52, 0x0b, 0x75, 0x64, 0x66, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x23, 0x0a,
+ 0x0d, 0x74, 0x78, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x18, 0x0a,
+ 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x74, 0x78, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76,
+ 0x65, 0x64, 0x22, 0xf6, 0x01, 0x0a, 0x0e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65,
+ 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79,
+ 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x05, 0x52, 0x12, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x54, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x75, 0x6e, 0x68, 0x65, 0x61,
+ 0x6c, 0x74, 0x68, 0x79, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e,
+ 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x75, 0x6e, 0x68, 0x65, 0x61, 0x6c, 0x74,
+ 0x68, 0x79, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3d, 0x0a,
0x1b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67,
- 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x04, 0x20, 0x01,
+ 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x18, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c,
- 0x61, 0x67, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x22, 0xc1, 0x02, 0x0a,
- 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18,
+ 0x61, 0x67, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x4d, 0x69, 0x6e, 0x12, 0x3d, 0x0a, 0x1b,
+ 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67, 0x5f,
+ 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28,
+ 0x0d, 0x52, 0x18, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61,
+ 0x67, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x22, 0xc1, 0x02, 0x0a, 0x14,
+ 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72,
+ 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73,
+ 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x65,
+ 0x72, 0x76, 0x69, 0x6e, 0x67, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79,
+ 0x5f, 0x74, 0x65, 0x72, 0x6d, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65,
+ 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x19, 0x70, 0x72, 0x69,
+ 0x6d, 0x61, 0x72, 0x79, 0x54, 0x65, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d,
+ 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3b, 0x0a, 0x0e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69,
+ 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14,
+ 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x53,
+ 0x74, 0x61, 0x74, 0x73, 0x52, 0x0d, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74,
+ 0x61, 0x74, 0x73, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c,
+ 0x69, 0x61, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73,
+ 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x2a, 0x0a,
+ 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x09,
+ 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22,
+ 0xae, 0x01, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d,
+ 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x74, 0x69, 0x64, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x73,
+ 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x71, 0x75, 0x65,
+ 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74,
+ 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x69,
+ 0x6d, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03,
+ 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x31, 0x0a,
+ 0x0c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20,
+ 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67,
+ 0x65, 0x74, 0x52, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73,
+ 0x22, 0x91, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18,
0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61,
- 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07,
- 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73,
- 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72,
- 0x79, 0x5f, 0x74, 0x65, 0x72, 0x6d, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d,
- 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x19, 0x70, 0x72,
- 0x69, 0x6d, 0x61, 0x72, 0x79, 0x54, 0x65, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69,
- 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3b, 0x0a, 0x0e, 0x72, 0x65, 0x61, 0x6c, 0x74,
- 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x14, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65,
- 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0d, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x53,
- 0x74, 0x61, 0x74, 0x73, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61,
- 0x6c, 0x69, 0x61, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70,
- 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61,
- 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x2a,
- 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52,
- 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07,
- 0x22, 0xae, 0x01, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x74, 0x69, 0x64,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, 0x64, 0x12, 0x2d, 0x0a, 0x05,
- 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x71, 0x75,
- 0x65, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53,
- 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x74,
- 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
- 0x03, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x31,
- 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x04,
- 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72,
- 0x67, 0x65, 0x74, 0x52, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74,
- 0x73, 0x22, 0x91, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54,
- 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x35, 0x0a,
- 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x0e, 0x32, 0x16, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
- 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65,
- 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61,
- 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65,
- 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x6d, 0x0a, 0x07, 0x55, 0x44, 0x46, 0x49, 0x6e, 0x66, 0x6f,
- 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
- 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74,
- 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x61, 0x67, 0x67, 0x72, 0x65,
- 0x67, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x2c, 0x0a, 0x0b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
- 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x71, 0x75,
- 0x65, 0x72, 0x79, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
- 0x54, 0x79, 0x70, 0x65, 0x22, 0xd5, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65,
- 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x04, 0x75, 0x64,
- 0x66, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79,
- 0x2e, 0x55, 0x44, 0x46, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x75, 0x64, 0x66, 0x73, 0x12, 0x58,
- 0x0a, 0x10, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69,
- 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79,
- 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69,
- 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65,
- 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x42, 0x0a, 0x14, 0x54, 0x61, 0x62, 0x6c,
- 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79,
- 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
- 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0x92, 0x03, 0x0a,
- 0x09, 0x4d, 0x79, 0x53, 0x71, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x4d,
- 0x50, 0x54, 0x59, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x5f, 0x4e, 0x55, 0x4c,
- 0x4c, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x52, 0x49, 0x5f,
- 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x4e,
- 0x49, 0x51, 0x55, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x04, 0x12,
- 0x15, 0x0a, 0x11, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f,
- 0x46, 0x4c, 0x41, 0x47, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x46,
- 0x4c, 0x41, 0x47, 0x10, 0x10, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e, 0x45,
- 0x44, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x20, 0x12, 0x11, 0x0a, 0x0d, 0x5a, 0x45, 0x52, 0x4f,
- 0x46, 0x49, 0x4c, 0x4c, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x40, 0x12, 0x10, 0x0a, 0x0b, 0x42,
- 0x49, 0x4e, 0x41, 0x52, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x01, 0x12, 0x0e, 0x0a,
- 0x09, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x02, 0x12, 0x18, 0x0a,
- 0x13, 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x49, 0x4e, 0x43, 0x52, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f,
- 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x04, 0x12, 0x13, 0x0a, 0x0e, 0x54, 0x49, 0x4d, 0x45, 0x53,
- 0x54, 0x41, 0x4d, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x08, 0x12, 0x0d, 0x0a, 0x08,
- 0x53, 0x45, 0x54, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x10, 0x12, 0x1a, 0x0a, 0x15, 0x4e,
- 0x4f, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f,
- 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x20, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x4e, 0x5f, 0x55, 0x50,
- 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x57, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x40,
- 0x12, 0x0e, 0x0a, 0x08, 0x4e, 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x02,
- 0x12, 0x13, 0x0a, 0x0d, 0x50, 0x41, 0x52, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41,
- 0x47, 0x10, 0x80, 0x80, 0x01, 0x12, 0x10, 0x0a, 0x0a, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x46,
- 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x02, 0x12, 0x11, 0x0a, 0x0b, 0x55, 0x4e, 0x49, 0x51, 0x55,
- 0x45, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x04, 0x12, 0x11, 0x0a, 0x0b, 0x42, 0x49,
- 0x4e, 0x43, 0x4d, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x08, 0x1a, 0x02, 0x10,
- 0x01, 0x2a, 0x6b, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e,
- 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41,
- 0x4c, 0x10, 0x80, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e,
- 0x45, 0x44, 0x10, 0x80, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x49, 0x53, 0x46, 0x4c, 0x4f, 0x41, 0x54,
- 0x10, 0x80, 0x08, 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x53, 0x51, 0x55, 0x4f, 0x54, 0x45, 0x44, 0x10,
- 0x80, 0x10, 0x12, 0x0b, 0x0a, 0x06, 0x49, 0x53, 0x54, 0x45, 0x58, 0x54, 0x10, 0x80, 0x20, 0x12,
- 0x0d, 0x0a, 0x08, 0x49, 0x53, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x80, 0x40, 0x2a, 0xd7,
- 0x03, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x55, 0x4c, 0x4c, 0x5f,
- 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x04, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x81,
- 0x02, 0x12, 0x0a, 0x0a, 0x05, 0x55, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x82, 0x06, 0x12, 0x0a, 0x0a,
- 0x05, 0x49, 0x4e, 0x54, 0x31, 0x36, 0x10, 0x83, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e,
- 0x54, 0x31, 0x36, 0x10, 0x84, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10,
- 0x85, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, 0x86, 0x06, 0x12,
- 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x87, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55,
- 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x88, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x36,
- 0x34, 0x10, 0x89, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x8a,
- 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x33, 0x32, 0x10, 0x8b, 0x08, 0x12,
- 0x0c, 0x0a, 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x36, 0x34, 0x10, 0x8c, 0x08, 0x12, 0x0e, 0x0a,
- 0x09, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x8d, 0x10, 0x12, 0x09, 0x0a,
- 0x04, 0x44, 0x41, 0x54, 0x45, 0x10, 0x8e, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x54, 0x49, 0x4d, 0x45,
- 0x10, 0x8f, 0x10, 0x12, 0x0d, 0x0a, 0x08, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x10,
- 0x90, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x59, 0x45, 0x41, 0x52, 0x10, 0x91, 0x06, 0x12, 0x0b, 0x0a,
- 0x07, 0x44, 0x45, 0x43, 0x49, 0x4d, 0x41, 0x4c, 0x10, 0x12, 0x12, 0x09, 0x0a, 0x04, 0x54, 0x45,
- 0x58, 0x54, 0x10, 0x93, 0x30, 0x12, 0x09, 0x0a, 0x04, 0x42, 0x4c, 0x4f, 0x42, 0x10, 0x94, 0x50,
- 0x12, 0x0c, 0x0a, 0x07, 0x56, 0x41, 0x52, 0x43, 0x48, 0x41, 0x52, 0x10, 0x95, 0x30, 0x12, 0x0e,
- 0x0a, 0x09, 0x56, 0x41, 0x52, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x96, 0x50, 0x12, 0x09,
- 0x0a, 0x04, 0x43, 0x48, 0x41, 0x52, 0x10, 0x97, 0x30, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x4e,
- 0x41, 0x52, 0x59, 0x10, 0x98, 0x50, 0x12, 0x08, 0x0a, 0x03, 0x42, 0x49, 0x54, 0x10, 0x99, 0x10,
- 0x12, 0x09, 0x0a, 0x04, 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x9a, 0x10, 0x12, 0x08, 0x0a, 0x03, 0x53,
- 0x45, 0x54, 0x10, 0x9b, 0x10, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x55, 0x50, 0x4c, 0x45, 0x10, 0x1c,
- 0x12, 0x0d, 0x0a, 0x08, 0x47, 0x45, 0x4f, 0x4d, 0x45, 0x54, 0x52, 0x59, 0x10, 0x9d, 0x10, 0x12,
- 0x09, 0x0a, 0x04, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x9e, 0x10, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x58,
- 0x50, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x1f, 0x12, 0x0b, 0x0a, 0x06, 0x48, 0x45,
- 0x58, 0x4e, 0x55, 0x4d, 0x10, 0xa0, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x48, 0x45, 0x58, 0x56, 0x41,
- 0x4c, 0x10, 0xa1, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x54, 0x4e, 0x55, 0x4d, 0x10, 0xa2,
- 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x56, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x10, 0xa3, 0x10, 0x12, 0x08,
- 0x0a, 0x03, 0x52, 0x41, 0x57, 0x10, 0xa4, 0x10, 0x2a, 0x46, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e,
- 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07,
- 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45,
- 0x50, 0x41, 0x52, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x4f, 0x4c, 0x4c, 0x42, 0x41,
- 0x43, 0x4b, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x03,
- 0x2a, 0x3b, 0x0a, 0x0f, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54,
- 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x56, 0x49, 0x45, 0x57, 0x53, 0x10, 0x00, 0x12, 0x0a,
- 0x0a, 0x06, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x53, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c,
- 0x4c, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x55, 0x44, 0x46, 0x53, 0x10, 0x03, 0x42, 0x35, 0x0a,
- 0x0f, 0x69, 0x6f, 0x2e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x5a, 0x22, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65,
- 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x71,
- 0x75, 0x65, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x35, 0x0a, 0x0a,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e,
+ 0x32, 0x16, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x54,
+ 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x54,
+ 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d,
+ 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e,
+ 0x61, 0x6d, 0x65, 0x73, 0x22, 0x6d, 0x0a, 0x07, 0x55, 0x44, 0x46, 0x49, 0x6e, 0x66, 0x6f, 0x12,
+ 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
+ 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69,
+ 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67,
+ 0x61, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x2c, 0x0a, 0x0b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f,
+ 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x71, 0x75, 0x65,
+ 0x72, 0x79, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x54,
+ 0x79, 0x70, 0x65, 0x22, 0xd5, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d,
+ 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x04, 0x75, 0x64, 0x66,
+ 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e,
+ 0x55, 0x44, 0x46, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x75, 0x64, 0x66, 0x73, 0x12, 0x58, 0x0a,
+ 0x10, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f,
+ 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e,
+ 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f,
+ 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x66,
+ 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x42, 0x0a, 0x14, 0x54, 0x61, 0x62, 0x6c, 0x65,
+ 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
+ 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
+ 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0x92, 0x03, 0x0a, 0x09,
+ 0x4d, 0x79, 0x53, 0x71, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x4d, 0x50,
+ 0x54, 0x59, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x5f, 0x4e, 0x55, 0x4c, 0x4c,
+ 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x52, 0x49, 0x5f, 0x4b,
+ 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x4e, 0x49,
+ 0x51, 0x55, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x04, 0x12, 0x15,
+ 0x0a, 0x11, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46,
+ 0x4c, 0x41, 0x47, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x46, 0x4c,
+ 0x41, 0x47, 0x10, 0x10, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44,
+ 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x20, 0x12, 0x11, 0x0a, 0x0d, 0x5a, 0x45, 0x52, 0x4f, 0x46,
+ 0x49, 0x4c, 0x4c, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x40, 0x12, 0x10, 0x0a, 0x0b, 0x42, 0x49,
+ 0x4e, 0x41, 0x52, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x01, 0x12, 0x0e, 0x0a, 0x09,
+ 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x02, 0x12, 0x18, 0x0a, 0x13,
+ 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x49, 0x4e, 0x43, 0x52, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x46,
+ 0x4c, 0x41, 0x47, 0x10, 0x80, 0x04, 0x12, 0x13, 0x0a, 0x0e, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54,
+ 0x41, 0x4d, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x08, 0x12, 0x0d, 0x0a, 0x08, 0x53,
+ 0x45, 0x54, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x10, 0x12, 0x1a, 0x0a, 0x15, 0x4e, 0x4f,
+ 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x46,
+ 0x4c, 0x41, 0x47, 0x10, 0x80, 0x20, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44,
+ 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x57, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x40, 0x12,
+ 0x0e, 0x0a, 0x08, 0x4e, 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x02, 0x12,
+ 0x13, 0x0a, 0x0d, 0x50, 0x41, 0x52, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47,
+ 0x10, 0x80, 0x80, 0x01, 0x12, 0x10, 0x0a, 0x0a, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x46, 0x4c,
+ 0x41, 0x47, 0x10, 0x80, 0x80, 0x02, 0x12, 0x11, 0x0a, 0x0b, 0x55, 0x4e, 0x49, 0x51, 0x55, 0x45,
+ 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x04, 0x12, 0x11, 0x0a, 0x0b, 0x42, 0x49, 0x4e,
+ 0x43, 0x4d, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x08, 0x1a, 0x02, 0x10, 0x01,
+ 0x2a, 0x6b, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45,
+ 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x4c,
+ 0x10, 0x80, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e, 0x45,
+ 0x44, 0x10, 0x80, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x49, 0x53, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10,
+ 0x80, 0x08, 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x53, 0x51, 0x55, 0x4f, 0x54, 0x45, 0x44, 0x10, 0x80,
+ 0x10, 0x12, 0x0b, 0x0a, 0x06, 0x49, 0x53, 0x54, 0x45, 0x58, 0x54, 0x10, 0x80, 0x20, 0x12, 0x0d,
+ 0x0a, 0x08, 0x49, 0x53, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x80, 0x40, 0x2a, 0xd7, 0x03,
+ 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x54,
+ 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x04, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x81, 0x02,
+ 0x12, 0x0a, 0x0a, 0x05, 0x55, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x82, 0x06, 0x12, 0x0a, 0x0a, 0x05,
+ 0x49, 0x4e, 0x54, 0x31, 0x36, 0x10, 0x83, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54,
+ 0x31, 0x36, 0x10, 0x84, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, 0x85,
+ 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, 0x86, 0x06, 0x12, 0x0a,
+ 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x87, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49,
+ 0x4e, 0x54, 0x33, 0x32, 0x10, 0x88, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x36, 0x34,
+ 0x10, 0x89, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x8a, 0x06,
+ 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x33, 0x32, 0x10, 0x8b, 0x08, 0x12, 0x0c,
+ 0x0a, 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x36, 0x34, 0x10, 0x8c, 0x08, 0x12, 0x0e, 0x0a, 0x09,
+ 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x8d, 0x10, 0x12, 0x09, 0x0a, 0x04,
+ 0x44, 0x41, 0x54, 0x45, 0x10, 0x8e, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x54, 0x49, 0x4d, 0x45, 0x10,
+ 0x8f, 0x10, 0x12, 0x0d, 0x0a, 0x08, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x90,
+ 0x10, 0x12, 0x09, 0x0a, 0x04, 0x59, 0x45, 0x41, 0x52, 0x10, 0x91, 0x06, 0x12, 0x0b, 0x0a, 0x07,
+ 0x44, 0x45, 0x43, 0x49, 0x4d, 0x41, 0x4c, 0x10, 0x12, 0x12, 0x09, 0x0a, 0x04, 0x54, 0x45, 0x58,
+ 0x54, 0x10, 0x93, 0x30, 0x12, 0x09, 0x0a, 0x04, 0x42, 0x4c, 0x4f, 0x42, 0x10, 0x94, 0x50, 0x12,
+ 0x0c, 0x0a, 0x07, 0x56, 0x41, 0x52, 0x43, 0x48, 0x41, 0x52, 0x10, 0x95, 0x30, 0x12, 0x0e, 0x0a,
+ 0x09, 0x56, 0x41, 0x52, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x96, 0x50, 0x12, 0x09, 0x0a,
+ 0x04, 0x43, 0x48, 0x41, 0x52, 0x10, 0x97, 0x30, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x4e, 0x41,
+ 0x52, 0x59, 0x10, 0x98, 0x50, 0x12, 0x08, 0x0a, 0x03, 0x42, 0x49, 0x54, 0x10, 0x99, 0x10, 0x12,
+ 0x09, 0x0a, 0x04, 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x9a, 0x10, 0x12, 0x08, 0x0a, 0x03, 0x53, 0x45,
+ 0x54, 0x10, 0x9b, 0x10, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x55, 0x50, 0x4c, 0x45, 0x10, 0x1c, 0x12,
+ 0x0d, 0x0a, 0x08, 0x47, 0x45, 0x4f, 0x4d, 0x45, 0x54, 0x52, 0x59, 0x10, 0x9d, 0x10, 0x12, 0x09,
+ 0x0a, 0x04, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x9e, 0x10, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x58, 0x50,
+ 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x1f, 0x12, 0x0b, 0x0a, 0x06, 0x48, 0x45, 0x58,
+ 0x4e, 0x55, 0x4d, 0x10, 0xa0, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x48, 0x45, 0x58, 0x56, 0x41, 0x4c,
+ 0x10, 0xa1, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x54, 0x4e, 0x55, 0x4d, 0x10, 0xa2, 0x20,
+ 0x12, 0x0b, 0x0a, 0x06, 0x56, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x10, 0xa3, 0x10, 0x12, 0x08, 0x0a,
+ 0x03, 0x52, 0x41, 0x57, 0x10, 0xa4, 0x10, 0x2a, 0x36, 0x0a, 0x10, 0x53, 0x74, 0x61, 0x72, 0x74,
+ 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55,
+ 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x61, 0x69, 0x6c,
+ 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x10, 0x02, 0x2a,
+ 0x46, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74,
+ 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00,
+ 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a,
+ 0x08, 0x52, 0x4f, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x43,
+ 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x03, 0x2a, 0x3b, 0x0a, 0x0f, 0x53, 0x63, 0x68, 0x65, 0x6d,
+ 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x56, 0x49,
+ 0x45, 0x57, 0x53, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x53, 0x10,
+ 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x55, 0x44,
+ 0x46, 0x53, 0x10, 0x03, 0x42, 0x35, 0x0a, 0x0f, 0x69, 0x6f, 0x2e, 0x76, 0x69, 0x74, 0x65, 0x73,
+ 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x22, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e,
+ 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x33,
}
var (
@@ -6870,249 +6799,251 @@ func file_query_proto_rawDescGZIP() []byte {
return file_query_proto_rawDescData
}
-var file_query_proto_enumTypes = make([]protoimpl.EnumInfo, 12)
+var file_query_proto_enumTypes = make([]protoimpl.EnumInfo, 13)
var file_query_proto_msgTypes = make([]protoimpl.MessageInfo, 70)
var file_query_proto_goTypes = []any{
(MySqlFlag)(0), // 0: query.MySqlFlag
(Flag)(0), // 1: query.Flag
(Type)(0), // 2: query.Type
- (TransactionState)(0), // 3: query.TransactionState
- (SchemaTableType)(0), // 4: query.SchemaTableType
- (ExecuteOptions_IncludedFields)(0), // 5: query.ExecuteOptions.IncludedFields
- (ExecuteOptions_Workload)(0), // 6: query.ExecuteOptions.Workload
- (ExecuteOptions_TransactionIsolation)(0), // 7: query.ExecuteOptions.TransactionIsolation
- (ExecuteOptions_PlannerVersion)(0), // 8: query.ExecuteOptions.PlannerVersion
- (ExecuteOptions_Consolidator)(0), // 9: query.ExecuteOptions.Consolidator
- (ExecuteOptions_TransactionAccessMode)(0), // 10: query.ExecuteOptions.TransactionAccessMode
- (StreamEvent_Statement_Category)(0), // 11: query.StreamEvent.Statement.Category
- (*Target)(nil), // 12: query.Target
- (*VTGateCallerID)(nil), // 13: query.VTGateCallerID
- (*EventToken)(nil), // 14: query.EventToken
- (*Value)(nil), // 15: query.Value
- (*BindVariable)(nil), // 16: query.BindVariable
- (*BoundQuery)(nil), // 17: query.BoundQuery
- (*ExecuteOptions)(nil), // 18: query.ExecuteOptions
- (*Field)(nil), // 19: query.Field
- (*Row)(nil), // 20: query.Row
- (*QueryResult)(nil), // 21: query.QueryResult
- (*QueryWarning)(nil), // 22: query.QueryWarning
- (*StreamEvent)(nil), // 23: query.StreamEvent
- (*ExecuteRequest)(nil), // 24: query.ExecuteRequest
- (*ExecuteResponse)(nil), // 25: query.ExecuteResponse
- (*ResultWithError)(nil), // 26: query.ResultWithError
- (*StreamExecuteRequest)(nil), // 27: query.StreamExecuteRequest
- (*StreamExecuteResponse)(nil), // 28: query.StreamExecuteResponse
- (*BeginRequest)(nil), // 29: query.BeginRequest
- (*BeginResponse)(nil), // 30: query.BeginResponse
- (*CommitRequest)(nil), // 31: query.CommitRequest
- (*CommitResponse)(nil), // 32: query.CommitResponse
- (*RollbackRequest)(nil), // 33: query.RollbackRequest
- (*RollbackResponse)(nil), // 34: query.RollbackResponse
- (*PrepareRequest)(nil), // 35: query.PrepareRequest
- (*PrepareResponse)(nil), // 36: query.PrepareResponse
- (*CommitPreparedRequest)(nil), // 37: query.CommitPreparedRequest
- (*CommitPreparedResponse)(nil), // 38: query.CommitPreparedResponse
- (*RollbackPreparedRequest)(nil), // 39: query.RollbackPreparedRequest
- (*RollbackPreparedResponse)(nil), // 40: query.RollbackPreparedResponse
- (*CreateTransactionRequest)(nil), // 41: query.CreateTransactionRequest
- (*CreateTransactionResponse)(nil), // 42: query.CreateTransactionResponse
- (*StartCommitRequest)(nil), // 43: query.StartCommitRequest
- (*StartCommitResponse)(nil), // 44: query.StartCommitResponse
- (*SetRollbackRequest)(nil), // 45: query.SetRollbackRequest
- (*SetRollbackResponse)(nil), // 46: query.SetRollbackResponse
- (*ConcludeTransactionRequest)(nil), // 47: query.ConcludeTransactionRequest
- (*ConcludeTransactionResponse)(nil), // 48: query.ConcludeTransactionResponse
- (*ReadTransactionRequest)(nil), // 49: query.ReadTransactionRequest
- (*ReadTransactionResponse)(nil), // 50: query.ReadTransactionResponse
- (*UnresolvedTransactionsRequest)(nil), // 51: query.UnresolvedTransactionsRequest
- (*UnresolvedTransactionsResponse)(nil), // 52: query.UnresolvedTransactionsResponse
- (*BeginExecuteRequest)(nil), // 53: query.BeginExecuteRequest
- (*BeginExecuteResponse)(nil), // 54: query.BeginExecuteResponse
- (*BeginStreamExecuteRequest)(nil), // 55: query.BeginStreamExecuteRequest
- (*BeginStreamExecuteResponse)(nil), // 56: query.BeginStreamExecuteResponse
- (*MessageStreamRequest)(nil), // 57: query.MessageStreamRequest
- (*MessageStreamResponse)(nil), // 58: query.MessageStreamResponse
- (*MessageAckRequest)(nil), // 59: query.MessageAckRequest
- (*MessageAckResponse)(nil), // 60: query.MessageAckResponse
- (*ReserveExecuteRequest)(nil), // 61: query.ReserveExecuteRequest
- (*ReserveExecuteResponse)(nil), // 62: query.ReserveExecuteResponse
- (*ReserveStreamExecuteRequest)(nil), // 63: query.ReserveStreamExecuteRequest
- (*ReserveStreamExecuteResponse)(nil), // 64: query.ReserveStreamExecuteResponse
- (*ReserveBeginExecuteRequest)(nil), // 65: query.ReserveBeginExecuteRequest
- (*ReserveBeginExecuteResponse)(nil), // 66: query.ReserveBeginExecuteResponse
- (*ReserveBeginStreamExecuteRequest)(nil), // 67: query.ReserveBeginStreamExecuteRequest
- (*ReserveBeginStreamExecuteResponse)(nil), // 68: query.ReserveBeginStreamExecuteResponse
- (*ReleaseRequest)(nil), // 69: query.ReleaseRequest
- (*ReleaseResponse)(nil), // 70: query.ReleaseResponse
- (*StreamHealthRequest)(nil), // 71: query.StreamHealthRequest
- (*RealtimeStats)(nil), // 72: query.RealtimeStats
- (*AggregateStats)(nil), // 73: query.AggregateStats
- (*StreamHealthResponse)(nil), // 74: query.StreamHealthResponse
- (*TransactionMetadata)(nil), // 75: query.TransactionMetadata
- (*GetSchemaRequest)(nil), // 76: query.GetSchemaRequest
- (*UDFInfo)(nil), // 77: query.UDFInfo
- (*GetSchemaResponse)(nil), // 78: query.GetSchemaResponse
- nil, // 79: query.BoundQuery.BindVariablesEntry
- (*StreamEvent_Statement)(nil), // 80: query.StreamEvent.Statement
- nil, // 81: query.GetSchemaResponse.TableDefinitionEntry
- (topodata.TabletType)(0), // 82: topodata.TabletType
- (*vtrpc.CallerID)(nil), // 83: vtrpc.CallerID
- (*vtrpc.RPCError)(nil), // 84: vtrpc.RPCError
- (*topodata.TabletAlias)(nil), // 85: topodata.TabletAlias
- (*vttime.Time)(nil), // 86: vttime.Time
+ (StartCommitState)(0), // 3: query.StartCommitState
+ (TransactionState)(0), // 4: query.TransactionState
+ (SchemaTableType)(0), // 5: query.SchemaTableType
+ (ExecuteOptions_IncludedFields)(0), // 6: query.ExecuteOptions.IncludedFields
+ (ExecuteOptions_Workload)(0), // 7: query.ExecuteOptions.Workload
+ (ExecuteOptions_TransactionIsolation)(0), // 8: query.ExecuteOptions.TransactionIsolation
+ (ExecuteOptions_PlannerVersion)(0), // 9: query.ExecuteOptions.PlannerVersion
+ (ExecuteOptions_Consolidator)(0), // 10: query.ExecuteOptions.Consolidator
+ (ExecuteOptions_TransactionAccessMode)(0), // 11: query.ExecuteOptions.TransactionAccessMode
+ (StreamEvent_Statement_Category)(0), // 12: query.StreamEvent.Statement.Category
+ (*Target)(nil), // 13: query.Target
+ (*VTGateCallerID)(nil), // 14: query.VTGateCallerID
+ (*EventToken)(nil), // 15: query.EventToken
+ (*Value)(nil), // 16: query.Value
+ (*BindVariable)(nil), // 17: query.BindVariable
+ (*BoundQuery)(nil), // 18: query.BoundQuery
+ (*ExecuteOptions)(nil), // 19: query.ExecuteOptions
+ (*Field)(nil), // 20: query.Field
+ (*Row)(nil), // 21: query.Row
+ (*QueryResult)(nil), // 22: query.QueryResult
+ (*QueryWarning)(nil), // 23: query.QueryWarning
+ (*StreamEvent)(nil), // 24: query.StreamEvent
+ (*ExecuteRequest)(nil), // 25: query.ExecuteRequest
+ (*ExecuteResponse)(nil), // 26: query.ExecuteResponse
+ (*ResultWithError)(nil), // 27: query.ResultWithError
+ (*StreamExecuteRequest)(nil), // 28: query.StreamExecuteRequest
+ (*StreamExecuteResponse)(nil), // 29: query.StreamExecuteResponse
+ (*BeginRequest)(nil), // 30: query.BeginRequest
+ (*BeginResponse)(nil), // 31: query.BeginResponse
+ (*CommitRequest)(nil), // 32: query.CommitRequest
+ (*CommitResponse)(nil), // 33: query.CommitResponse
+ (*RollbackRequest)(nil), // 34: query.RollbackRequest
+ (*RollbackResponse)(nil), // 35: query.RollbackResponse
+ (*PrepareRequest)(nil), // 36: query.PrepareRequest
+ (*PrepareResponse)(nil), // 37: query.PrepareResponse
+ (*CommitPreparedRequest)(nil), // 38: query.CommitPreparedRequest
+ (*CommitPreparedResponse)(nil), // 39: query.CommitPreparedResponse
+ (*RollbackPreparedRequest)(nil), // 40: query.RollbackPreparedRequest
+ (*RollbackPreparedResponse)(nil), // 41: query.RollbackPreparedResponse
+ (*CreateTransactionRequest)(nil), // 42: query.CreateTransactionRequest
+ (*CreateTransactionResponse)(nil), // 43: query.CreateTransactionResponse
+ (*StartCommitRequest)(nil), // 44: query.StartCommitRequest
+ (*StartCommitResponse)(nil), // 45: query.StartCommitResponse
+ (*SetRollbackRequest)(nil), // 46: query.SetRollbackRequest
+ (*SetRollbackResponse)(nil), // 47: query.SetRollbackResponse
+ (*ConcludeTransactionRequest)(nil), // 48: query.ConcludeTransactionRequest
+ (*ConcludeTransactionResponse)(nil), // 49: query.ConcludeTransactionResponse
+ (*ReadTransactionRequest)(nil), // 50: query.ReadTransactionRequest
+ (*ReadTransactionResponse)(nil), // 51: query.ReadTransactionResponse
+ (*UnresolvedTransactionsRequest)(nil), // 52: query.UnresolvedTransactionsRequest
+ (*UnresolvedTransactionsResponse)(nil), // 53: query.UnresolvedTransactionsResponse
+ (*BeginExecuteRequest)(nil), // 54: query.BeginExecuteRequest
+ (*BeginExecuteResponse)(nil), // 55: query.BeginExecuteResponse
+ (*BeginStreamExecuteRequest)(nil), // 56: query.BeginStreamExecuteRequest
+ (*BeginStreamExecuteResponse)(nil), // 57: query.BeginStreamExecuteResponse
+ (*MessageStreamRequest)(nil), // 58: query.MessageStreamRequest
+ (*MessageStreamResponse)(nil), // 59: query.MessageStreamResponse
+ (*MessageAckRequest)(nil), // 60: query.MessageAckRequest
+ (*MessageAckResponse)(nil), // 61: query.MessageAckResponse
+ (*ReserveExecuteRequest)(nil), // 62: query.ReserveExecuteRequest
+ (*ReserveExecuteResponse)(nil), // 63: query.ReserveExecuteResponse
+ (*ReserveStreamExecuteRequest)(nil), // 64: query.ReserveStreamExecuteRequest
+ (*ReserveStreamExecuteResponse)(nil), // 65: query.ReserveStreamExecuteResponse
+ (*ReserveBeginExecuteRequest)(nil), // 66: query.ReserveBeginExecuteRequest
+ (*ReserveBeginExecuteResponse)(nil), // 67: query.ReserveBeginExecuteResponse
+ (*ReserveBeginStreamExecuteRequest)(nil), // 68: query.ReserveBeginStreamExecuteRequest
+ (*ReserveBeginStreamExecuteResponse)(nil), // 69: query.ReserveBeginStreamExecuteResponse
+ (*ReleaseRequest)(nil), // 70: query.ReleaseRequest
+ (*ReleaseResponse)(nil), // 71: query.ReleaseResponse
+ (*StreamHealthRequest)(nil), // 72: query.StreamHealthRequest
+ (*RealtimeStats)(nil), // 73: query.RealtimeStats
+ (*AggregateStats)(nil), // 74: query.AggregateStats
+ (*StreamHealthResponse)(nil), // 75: query.StreamHealthResponse
+ (*TransactionMetadata)(nil), // 76: query.TransactionMetadata
+ (*GetSchemaRequest)(nil), // 77: query.GetSchemaRequest
+ (*UDFInfo)(nil), // 78: query.UDFInfo
+ (*GetSchemaResponse)(nil), // 79: query.GetSchemaResponse
+ nil, // 80: query.BoundQuery.BindVariablesEntry
+ (*StreamEvent_Statement)(nil), // 81: query.StreamEvent.Statement
+ nil, // 82: query.GetSchemaResponse.TableDefinitionEntry
+ (topodata.TabletType)(0), // 83: topodata.TabletType
+ (*vtrpc.CallerID)(nil), // 84: vtrpc.CallerID
+ (*vtrpc.RPCError)(nil), // 85: vtrpc.RPCError
+ (*topodata.TabletAlias)(nil), // 86: topodata.TabletAlias
+ (*vttime.Time)(nil), // 87: vttime.Time
}
var file_query_proto_depIdxs = []int32{
- 82, // 0: query.Target.tablet_type:type_name -> topodata.TabletType
+ 83, // 0: query.Target.tablet_type:type_name -> topodata.TabletType
2, // 1: query.Value.type:type_name -> query.Type
2, // 2: query.BindVariable.type:type_name -> query.Type
- 15, // 3: query.BindVariable.values:type_name -> query.Value
- 79, // 4: query.BoundQuery.bind_variables:type_name -> query.BoundQuery.BindVariablesEntry
- 5, // 5: query.ExecuteOptions.included_fields:type_name -> query.ExecuteOptions.IncludedFields
- 6, // 6: query.ExecuteOptions.workload:type_name -> query.ExecuteOptions.Workload
- 7, // 7: query.ExecuteOptions.transaction_isolation:type_name -> query.ExecuteOptions.TransactionIsolation
- 8, // 8: query.ExecuteOptions.planner_version:type_name -> query.ExecuteOptions.PlannerVersion
- 9, // 9: query.ExecuteOptions.consolidator:type_name -> query.ExecuteOptions.Consolidator
- 10, // 10: query.ExecuteOptions.transaction_access_mode:type_name -> query.ExecuteOptions.TransactionAccessMode
+ 16, // 3: query.BindVariable.values:type_name -> query.Value
+ 80, // 4: query.BoundQuery.bind_variables:type_name -> query.BoundQuery.BindVariablesEntry
+ 6, // 5: query.ExecuteOptions.included_fields:type_name -> query.ExecuteOptions.IncludedFields
+ 7, // 6: query.ExecuteOptions.workload:type_name -> query.ExecuteOptions.Workload
+ 8, // 7: query.ExecuteOptions.transaction_isolation:type_name -> query.ExecuteOptions.TransactionIsolation
+ 9, // 8: query.ExecuteOptions.planner_version:type_name -> query.ExecuteOptions.PlannerVersion
+ 10, // 9: query.ExecuteOptions.consolidator:type_name -> query.ExecuteOptions.Consolidator
+ 11, // 10: query.ExecuteOptions.transaction_access_mode:type_name -> query.ExecuteOptions.TransactionAccessMode
2, // 11: query.Field.type:type_name -> query.Type
- 19, // 12: query.QueryResult.fields:type_name -> query.Field
- 20, // 13: query.QueryResult.rows:type_name -> query.Row
- 80, // 14: query.StreamEvent.statements:type_name -> query.StreamEvent.Statement
- 14, // 15: query.StreamEvent.event_token:type_name -> query.EventToken
- 83, // 16: query.ExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID
- 13, // 17: query.ExecuteRequest.immediate_caller_id:type_name -> query.VTGateCallerID
- 12, // 18: query.ExecuteRequest.target:type_name -> query.Target
- 17, // 19: query.ExecuteRequest.query:type_name -> query.BoundQuery
- 18, // 20: query.ExecuteRequest.options:type_name -> query.ExecuteOptions
- 21, // 21: query.ExecuteResponse.result:type_name -> query.QueryResult
- 84, // 22: query.ResultWithError.error:type_name -> vtrpc.RPCError
- 21, // 23: query.ResultWithError.result:type_name -> query.QueryResult
- 83, // 24: query.StreamExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID
- 13, // 25: query.StreamExecuteRequest.immediate_caller_id:type_name -> query.VTGateCallerID
- 12, // 26: query.StreamExecuteRequest.target:type_name -> query.Target
- 17, // 27: query.StreamExecuteRequest.query:type_name -> query.BoundQuery
- 18, // 28: query.StreamExecuteRequest.options:type_name -> query.ExecuteOptions
- 21, // 29: query.StreamExecuteResponse.result:type_name -> query.QueryResult
- 83, // 30: query.BeginRequest.effective_caller_id:type_name -> vtrpc.CallerID
- 13, // 31: query.BeginRequest.immediate_caller_id:type_name -> query.VTGateCallerID
- 12, // 32: query.BeginRequest.target:type_name -> query.Target
- 18, // 33: query.BeginRequest.options:type_name -> query.ExecuteOptions
- 85, // 34: query.BeginResponse.tablet_alias:type_name -> topodata.TabletAlias
- 83, // 35: query.CommitRequest.effective_caller_id:type_name -> vtrpc.CallerID
- 13, // 36: query.CommitRequest.immediate_caller_id:type_name -> query.VTGateCallerID
- 12, // 37: query.CommitRequest.target:type_name -> query.Target
- 83, // 38: query.RollbackRequest.effective_caller_id:type_name -> vtrpc.CallerID
- 13, // 39: query.RollbackRequest.immediate_caller_id:type_name -> query.VTGateCallerID
- 12, // 40: query.RollbackRequest.target:type_name -> query.Target
- 83, // 41: query.PrepareRequest.effective_caller_id:type_name -> vtrpc.CallerID
- 13, // 42: query.PrepareRequest.immediate_caller_id:type_name -> query.VTGateCallerID
- 12, // 43: query.PrepareRequest.target:type_name -> query.Target
- 83, // 44: query.CommitPreparedRequest.effective_caller_id:type_name -> vtrpc.CallerID
- 13, // 45: query.CommitPreparedRequest.immediate_caller_id:type_name -> query.VTGateCallerID
- 12, // 46: query.CommitPreparedRequest.target:type_name -> query.Target
- 83, // 47: query.RollbackPreparedRequest.effective_caller_id:type_name -> vtrpc.CallerID
- 13, // 48: query.RollbackPreparedRequest.immediate_caller_id:type_name -> query.VTGateCallerID
- 12, // 49: query.RollbackPreparedRequest.target:type_name -> query.Target
- 83, // 50: query.CreateTransactionRequest.effective_caller_id:type_name -> vtrpc.CallerID
- 13, // 51: query.CreateTransactionRequest.immediate_caller_id:type_name -> query.VTGateCallerID
- 12, // 52: query.CreateTransactionRequest.target:type_name -> query.Target
- 12, // 53: query.CreateTransactionRequest.participants:type_name -> query.Target
- 83, // 54: query.StartCommitRequest.effective_caller_id:type_name -> vtrpc.CallerID
- 13, // 55: query.StartCommitRequest.immediate_caller_id:type_name -> query.VTGateCallerID
- 12, // 56: query.StartCommitRequest.target:type_name -> query.Target
- 83, // 57: query.SetRollbackRequest.effective_caller_id:type_name -> vtrpc.CallerID
- 13, // 58: query.SetRollbackRequest.immediate_caller_id:type_name -> query.VTGateCallerID
- 12, // 59: query.SetRollbackRequest.target:type_name -> query.Target
- 83, // 60: query.ConcludeTransactionRequest.effective_caller_id:type_name -> vtrpc.CallerID
- 13, // 61: query.ConcludeTransactionRequest.immediate_caller_id:type_name -> query.VTGateCallerID
- 12, // 62: query.ConcludeTransactionRequest.target:type_name -> query.Target
- 83, // 63: query.ReadTransactionRequest.effective_caller_id:type_name -> vtrpc.CallerID
- 13, // 64: query.ReadTransactionRequest.immediate_caller_id:type_name -> query.VTGateCallerID
- 12, // 65: query.ReadTransactionRequest.target:type_name -> query.Target
- 75, // 66: query.ReadTransactionResponse.metadata:type_name -> query.TransactionMetadata
- 83, // 67: query.UnresolvedTransactionsRequest.effective_caller_id:type_name -> vtrpc.CallerID
- 13, // 68: query.UnresolvedTransactionsRequest.immediate_caller_id:type_name -> query.VTGateCallerID
- 12, // 69: query.UnresolvedTransactionsRequest.target:type_name -> query.Target
- 75, // 70: query.UnresolvedTransactionsResponse.transactions:type_name -> query.TransactionMetadata
- 83, // 71: query.BeginExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID
- 13, // 72: query.BeginExecuteRequest.immediate_caller_id:type_name -> query.VTGateCallerID
- 12, // 73: query.BeginExecuteRequest.target:type_name -> query.Target
- 17, // 74: query.BeginExecuteRequest.query:type_name -> query.BoundQuery
- 18, // 75: query.BeginExecuteRequest.options:type_name -> query.ExecuteOptions
- 84, // 76: query.BeginExecuteResponse.error:type_name -> vtrpc.RPCError
- 21, // 77: query.BeginExecuteResponse.result:type_name -> query.QueryResult
- 85, // 78: query.BeginExecuteResponse.tablet_alias:type_name -> topodata.TabletAlias
- 83, // 79: query.BeginStreamExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID
- 13, // 80: query.BeginStreamExecuteRequest.immediate_caller_id:type_name -> query.VTGateCallerID
- 12, // 81: query.BeginStreamExecuteRequest.target:type_name -> query.Target
- 17, // 82: query.BeginStreamExecuteRequest.query:type_name -> query.BoundQuery
- 18, // 83: query.BeginStreamExecuteRequest.options:type_name -> query.ExecuteOptions
- 84, // 84: query.BeginStreamExecuteResponse.error:type_name -> vtrpc.RPCError
- 21, // 85: query.BeginStreamExecuteResponse.result:type_name -> query.QueryResult
- 85, // 86: query.BeginStreamExecuteResponse.tablet_alias:type_name -> topodata.TabletAlias
- 83, // 87: query.MessageStreamRequest.effective_caller_id:type_name -> vtrpc.CallerID
- 13, // 88: query.MessageStreamRequest.immediate_caller_id:type_name -> query.VTGateCallerID
- 12, // 89: query.MessageStreamRequest.target:type_name -> query.Target
- 21, // 90: query.MessageStreamResponse.result:type_name -> query.QueryResult
- 83, // 91: query.MessageAckRequest.effective_caller_id:type_name -> vtrpc.CallerID
- 13, // 92: query.MessageAckRequest.immediate_caller_id:type_name -> query.VTGateCallerID
- 12, // 93: query.MessageAckRequest.target:type_name -> query.Target
- 15, // 94: query.MessageAckRequest.ids:type_name -> query.Value
- 21, // 95: query.MessageAckResponse.result:type_name -> query.QueryResult
- 83, // 96: query.ReserveExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID
- 13, // 97: query.ReserveExecuteRequest.immediate_caller_id:type_name -> query.VTGateCallerID
- 12, // 98: query.ReserveExecuteRequest.target:type_name -> query.Target
- 17, // 99: query.ReserveExecuteRequest.query:type_name -> query.BoundQuery
- 18, // 100: query.ReserveExecuteRequest.options:type_name -> query.ExecuteOptions
- 84, // 101: query.ReserveExecuteResponse.error:type_name -> vtrpc.RPCError
- 21, // 102: query.ReserveExecuteResponse.result:type_name -> query.QueryResult
- 85, // 103: query.ReserveExecuteResponse.tablet_alias:type_name -> topodata.TabletAlias
- 83, // 104: query.ReserveStreamExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID
- 13, // 105: query.ReserveStreamExecuteRequest.immediate_caller_id:type_name -> query.VTGateCallerID
- 12, // 106: query.ReserveStreamExecuteRequest.target:type_name -> query.Target
- 17, // 107: query.ReserveStreamExecuteRequest.query:type_name -> query.BoundQuery
- 18, // 108: query.ReserveStreamExecuteRequest.options:type_name -> query.ExecuteOptions
- 84, // 109: query.ReserveStreamExecuteResponse.error:type_name -> vtrpc.RPCError
- 21, // 110: query.ReserveStreamExecuteResponse.result:type_name -> query.QueryResult
- 85, // 111: query.ReserveStreamExecuteResponse.tablet_alias:type_name -> topodata.TabletAlias
- 83, // 112: query.ReserveBeginExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID
- 13, // 113: query.ReserveBeginExecuteRequest.immediate_caller_id:type_name -> query.VTGateCallerID
- 12, // 114: query.ReserveBeginExecuteRequest.target:type_name -> query.Target
- 17, // 115: query.ReserveBeginExecuteRequest.query:type_name -> query.BoundQuery
- 18, // 116: query.ReserveBeginExecuteRequest.options:type_name -> query.ExecuteOptions
- 84, // 117: query.ReserveBeginExecuteResponse.error:type_name -> vtrpc.RPCError
- 21, // 118: query.ReserveBeginExecuteResponse.result:type_name -> query.QueryResult
- 85, // 119: query.ReserveBeginExecuteResponse.tablet_alias:type_name -> topodata.TabletAlias
- 83, // 120: query.ReserveBeginStreamExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID
- 13, // 121: query.ReserveBeginStreamExecuteRequest.immediate_caller_id:type_name -> query.VTGateCallerID
- 12, // 122: query.ReserveBeginStreamExecuteRequest.target:type_name -> query.Target
- 17, // 123: query.ReserveBeginStreamExecuteRequest.query:type_name -> query.BoundQuery
- 18, // 124: query.ReserveBeginStreamExecuteRequest.options:type_name -> query.ExecuteOptions
- 84, // 125: query.ReserveBeginStreamExecuteResponse.error:type_name -> vtrpc.RPCError
- 21, // 126: query.ReserveBeginStreamExecuteResponse.result:type_name -> query.QueryResult
- 85, // 127: query.ReserveBeginStreamExecuteResponse.tablet_alias:type_name -> topodata.TabletAlias
- 83, // 128: query.ReleaseRequest.effective_caller_id:type_name -> vtrpc.CallerID
- 13, // 129: query.ReleaseRequest.immediate_caller_id:type_name -> query.VTGateCallerID
- 12, // 130: query.ReleaseRequest.target:type_name -> query.Target
- 12, // 131: query.StreamHealthResponse.target:type_name -> query.Target
- 72, // 132: query.StreamHealthResponse.realtime_stats:type_name -> query.RealtimeStats
- 85, // 133: query.StreamHealthResponse.tablet_alias:type_name -> topodata.TabletAlias
- 86, // 134: query.StreamHealthResponse.timestamp:type_name -> vttime.Time
- 3, // 135: query.TransactionMetadata.state:type_name -> query.TransactionState
- 12, // 136: query.TransactionMetadata.participants:type_name -> query.Target
- 12, // 137: query.GetSchemaRequest.target:type_name -> query.Target
- 4, // 138: query.GetSchemaRequest.table_type:type_name -> query.SchemaTableType
- 2, // 139: query.UDFInfo.return_type:type_name -> query.Type
- 77, // 140: query.GetSchemaResponse.udfs:type_name -> query.UDFInfo
- 81, // 141: query.GetSchemaResponse.table_definition:type_name -> query.GetSchemaResponse.TableDefinitionEntry
- 16, // 142: query.BoundQuery.BindVariablesEntry.value:type_name -> query.BindVariable
- 11, // 143: query.StreamEvent.Statement.category:type_name -> query.StreamEvent.Statement.Category
- 19, // 144: query.StreamEvent.Statement.primary_key_fields:type_name -> query.Field
- 20, // 145: query.StreamEvent.Statement.primary_key_values:type_name -> query.Row
- 146, // [146:146] is the sub-list for method output_type
- 146, // [146:146] is the sub-list for method input_type
- 146, // [146:146] is the sub-list for extension type_name
- 146, // [146:146] is the sub-list for extension extendee
- 0, // [0:146] is the sub-list for field type_name
+ 20, // 12: query.QueryResult.fields:type_name -> query.Field
+ 21, // 13: query.QueryResult.rows:type_name -> query.Row
+ 81, // 14: query.StreamEvent.statements:type_name -> query.StreamEvent.Statement
+ 15, // 15: query.StreamEvent.event_token:type_name -> query.EventToken
+ 84, // 16: query.ExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID
+ 14, // 17: query.ExecuteRequest.immediate_caller_id:type_name -> query.VTGateCallerID
+ 13, // 18: query.ExecuteRequest.target:type_name -> query.Target
+ 18, // 19: query.ExecuteRequest.query:type_name -> query.BoundQuery
+ 19, // 20: query.ExecuteRequest.options:type_name -> query.ExecuteOptions
+ 22, // 21: query.ExecuteResponse.result:type_name -> query.QueryResult
+ 85, // 22: query.ResultWithError.error:type_name -> vtrpc.RPCError
+ 22, // 23: query.ResultWithError.result:type_name -> query.QueryResult
+ 84, // 24: query.StreamExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID
+ 14, // 25: query.StreamExecuteRequest.immediate_caller_id:type_name -> query.VTGateCallerID
+ 13, // 26: query.StreamExecuteRequest.target:type_name -> query.Target
+ 18, // 27: query.StreamExecuteRequest.query:type_name -> query.BoundQuery
+ 19, // 28: query.StreamExecuteRequest.options:type_name -> query.ExecuteOptions
+ 22, // 29: query.StreamExecuteResponse.result:type_name -> query.QueryResult
+ 84, // 30: query.BeginRequest.effective_caller_id:type_name -> vtrpc.CallerID
+ 14, // 31: query.BeginRequest.immediate_caller_id:type_name -> query.VTGateCallerID
+ 13, // 32: query.BeginRequest.target:type_name -> query.Target
+ 19, // 33: query.BeginRequest.options:type_name -> query.ExecuteOptions
+ 86, // 34: query.BeginResponse.tablet_alias:type_name -> topodata.TabletAlias
+ 84, // 35: query.CommitRequest.effective_caller_id:type_name -> vtrpc.CallerID
+ 14, // 36: query.CommitRequest.immediate_caller_id:type_name -> query.VTGateCallerID
+ 13, // 37: query.CommitRequest.target:type_name -> query.Target
+ 84, // 38: query.RollbackRequest.effective_caller_id:type_name -> vtrpc.CallerID
+ 14, // 39: query.RollbackRequest.immediate_caller_id:type_name -> query.VTGateCallerID
+ 13, // 40: query.RollbackRequest.target:type_name -> query.Target
+ 84, // 41: query.PrepareRequest.effective_caller_id:type_name -> vtrpc.CallerID
+ 14, // 42: query.PrepareRequest.immediate_caller_id:type_name -> query.VTGateCallerID
+ 13, // 43: query.PrepareRequest.target:type_name -> query.Target
+ 84, // 44: query.CommitPreparedRequest.effective_caller_id:type_name -> vtrpc.CallerID
+ 14, // 45: query.CommitPreparedRequest.immediate_caller_id:type_name -> query.VTGateCallerID
+ 13, // 46: query.CommitPreparedRequest.target:type_name -> query.Target
+ 84, // 47: query.RollbackPreparedRequest.effective_caller_id:type_name -> vtrpc.CallerID
+ 14, // 48: query.RollbackPreparedRequest.immediate_caller_id:type_name -> query.VTGateCallerID
+ 13, // 49: query.RollbackPreparedRequest.target:type_name -> query.Target
+ 84, // 50: query.CreateTransactionRequest.effective_caller_id:type_name -> vtrpc.CallerID
+ 14, // 51: query.CreateTransactionRequest.immediate_caller_id:type_name -> query.VTGateCallerID
+ 13, // 52: query.CreateTransactionRequest.target:type_name -> query.Target
+ 13, // 53: query.CreateTransactionRequest.participants:type_name -> query.Target
+ 84, // 54: query.StartCommitRequest.effective_caller_id:type_name -> vtrpc.CallerID
+ 14, // 55: query.StartCommitRequest.immediate_caller_id:type_name -> query.VTGateCallerID
+ 13, // 56: query.StartCommitRequest.target:type_name -> query.Target
+ 3, // 57: query.StartCommitResponse.state:type_name -> query.StartCommitState
+ 84, // 58: query.SetRollbackRequest.effective_caller_id:type_name -> vtrpc.CallerID
+ 14, // 59: query.SetRollbackRequest.immediate_caller_id:type_name -> query.VTGateCallerID
+ 13, // 60: query.SetRollbackRequest.target:type_name -> query.Target
+ 84, // 61: query.ConcludeTransactionRequest.effective_caller_id:type_name -> vtrpc.CallerID
+ 14, // 62: query.ConcludeTransactionRequest.immediate_caller_id:type_name -> query.VTGateCallerID
+ 13, // 63: query.ConcludeTransactionRequest.target:type_name -> query.Target
+ 84, // 64: query.ReadTransactionRequest.effective_caller_id:type_name -> vtrpc.CallerID
+ 14, // 65: query.ReadTransactionRequest.immediate_caller_id:type_name -> query.VTGateCallerID
+ 13, // 66: query.ReadTransactionRequest.target:type_name -> query.Target
+ 76, // 67: query.ReadTransactionResponse.metadata:type_name -> query.TransactionMetadata
+ 84, // 68: query.UnresolvedTransactionsRequest.effective_caller_id:type_name -> vtrpc.CallerID
+ 14, // 69: query.UnresolvedTransactionsRequest.immediate_caller_id:type_name -> query.VTGateCallerID
+ 13, // 70: query.UnresolvedTransactionsRequest.target:type_name -> query.Target
+ 76, // 71: query.UnresolvedTransactionsResponse.transactions:type_name -> query.TransactionMetadata
+ 84, // 72: query.BeginExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID
+ 14, // 73: query.BeginExecuteRequest.immediate_caller_id:type_name -> query.VTGateCallerID
+ 13, // 74: query.BeginExecuteRequest.target:type_name -> query.Target
+ 18, // 75: query.BeginExecuteRequest.query:type_name -> query.BoundQuery
+ 19, // 76: query.BeginExecuteRequest.options:type_name -> query.ExecuteOptions
+ 85, // 77: query.BeginExecuteResponse.error:type_name -> vtrpc.RPCError
+ 22, // 78: query.BeginExecuteResponse.result:type_name -> query.QueryResult
+ 86, // 79: query.BeginExecuteResponse.tablet_alias:type_name -> topodata.TabletAlias
+ 84, // 80: query.BeginStreamExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID
+ 14, // 81: query.BeginStreamExecuteRequest.immediate_caller_id:type_name -> query.VTGateCallerID
+ 13, // 82: query.BeginStreamExecuteRequest.target:type_name -> query.Target
+ 18, // 83: query.BeginStreamExecuteRequest.query:type_name -> query.BoundQuery
+ 19, // 84: query.BeginStreamExecuteRequest.options:type_name -> query.ExecuteOptions
+ 85, // 85: query.BeginStreamExecuteResponse.error:type_name -> vtrpc.RPCError
+ 22, // 86: query.BeginStreamExecuteResponse.result:type_name -> query.QueryResult
+ 86, // 87: query.BeginStreamExecuteResponse.tablet_alias:type_name -> topodata.TabletAlias
+ 84, // 88: query.MessageStreamRequest.effective_caller_id:type_name -> vtrpc.CallerID
+ 14, // 89: query.MessageStreamRequest.immediate_caller_id:type_name -> query.VTGateCallerID
+ 13, // 90: query.MessageStreamRequest.target:type_name -> query.Target
+ 22, // 91: query.MessageStreamResponse.result:type_name -> query.QueryResult
+ 84, // 92: query.MessageAckRequest.effective_caller_id:type_name -> vtrpc.CallerID
+ 14, // 93: query.MessageAckRequest.immediate_caller_id:type_name -> query.VTGateCallerID
+ 13, // 94: query.MessageAckRequest.target:type_name -> query.Target
+ 16, // 95: query.MessageAckRequest.ids:type_name -> query.Value
+ 22, // 96: query.MessageAckResponse.result:type_name -> query.QueryResult
+ 84, // 97: query.ReserveExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID
+ 14, // 98: query.ReserveExecuteRequest.immediate_caller_id:type_name -> query.VTGateCallerID
+ 13, // 99: query.ReserveExecuteRequest.target:type_name -> query.Target
+ 18, // 100: query.ReserveExecuteRequest.query:type_name -> query.BoundQuery
+ 19, // 101: query.ReserveExecuteRequest.options:type_name -> query.ExecuteOptions
+ 85, // 102: query.ReserveExecuteResponse.error:type_name -> vtrpc.RPCError
+ 22, // 103: query.ReserveExecuteResponse.result:type_name -> query.QueryResult
+ 86, // 104: query.ReserveExecuteResponse.tablet_alias:type_name -> topodata.TabletAlias
+ 84, // 105: query.ReserveStreamExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID
+ 14, // 106: query.ReserveStreamExecuteRequest.immediate_caller_id:type_name -> query.VTGateCallerID
+ 13, // 107: query.ReserveStreamExecuteRequest.target:type_name -> query.Target
+ 18, // 108: query.ReserveStreamExecuteRequest.query:type_name -> query.BoundQuery
+ 19, // 109: query.ReserveStreamExecuteRequest.options:type_name -> query.ExecuteOptions
+ 85, // 110: query.ReserveStreamExecuteResponse.error:type_name -> vtrpc.RPCError
+ 22, // 111: query.ReserveStreamExecuteResponse.result:type_name -> query.QueryResult
+ 86, // 112: query.ReserveStreamExecuteResponse.tablet_alias:type_name -> topodata.TabletAlias
+ 84, // 113: query.ReserveBeginExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID
+ 14, // 114: query.ReserveBeginExecuteRequest.immediate_caller_id:type_name -> query.VTGateCallerID
+ 13, // 115: query.ReserveBeginExecuteRequest.target:type_name -> query.Target
+ 18, // 116: query.ReserveBeginExecuteRequest.query:type_name -> query.BoundQuery
+ 19, // 117: query.ReserveBeginExecuteRequest.options:type_name -> query.ExecuteOptions
+ 85, // 118: query.ReserveBeginExecuteResponse.error:type_name -> vtrpc.RPCError
+ 22, // 119: query.ReserveBeginExecuteResponse.result:type_name -> query.QueryResult
+ 86, // 120: query.ReserveBeginExecuteResponse.tablet_alias:type_name -> topodata.TabletAlias
+ 84, // 121: query.ReserveBeginStreamExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID
+ 14, // 122: query.ReserveBeginStreamExecuteRequest.immediate_caller_id:type_name -> query.VTGateCallerID
+ 13, // 123: query.ReserveBeginStreamExecuteRequest.target:type_name -> query.Target
+ 18, // 124: query.ReserveBeginStreamExecuteRequest.query:type_name -> query.BoundQuery
+ 19, // 125: query.ReserveBeginStreamExecuteRequest.options:type_name -> query.ExecuteOptions
+ 85, // 126: query.ReserveBeginStreamExecuteResponse.error:type_name -> vtrpc.RPCError
+ 22, // 127: query.ReserveBeginStreamExecuteResponse.result:type_name -> query.QueryResult
+ 86, // 128: query.ReserveBeginStreamExecuteResponse.tablet_alias:type_name -> topodata.TabletAlias
+ 84, // 129: query.ReleaseRequest.effective_caller_id:type_name -> vtrpc.CallerID
+ 14, // 130: query.ReleaseRequest.immediate_caller_id:type_name -> query.VTGateCallerID
+ 13, // 131: query.ReleaseRequest.target:type_name -> query.Target
+ 13, // 132: query.StreamHealthResponse.target:type_name -> query.Target
+ 73, // 133: query.StreamHealthResponse.realtime_stats:type_name -> query.RealtimeStats
+ 86, // 134: query.StreamHealthResponse.tablet_alias:type_name -> topodata.TabletAlias
+ 87, // 135: query.StreamHealthResponse.timestamp:type_name -> vttime.Time
+ 4, // 136: query.TransactionMetadata.state:type_name -> query.TransactionState
+ 13, // 137: query.TransactionMetadata.participants:type_name -> query.Target
+ 13, // 138: query.GetSchemaRequest.target:type_name -> query.Target
+ 5, // 139: query.GetSchemaRequest.table_type:type_name -> query.SchemaTableType
+ 2, // 140: query.UDFInfo.return_type:type_name -> query.Type
+ 78, // 141: query.GetSchemaResponse.udfs:type_name -> query.UDFInfo
+ 82, // 142: query.GetSchemaResponse.table_definition:type_name -> query.GetSchemaResponse.TableDefinitionEntry
+ 17, // 143: query.BoundQuery.BindVariablesEntry.value:type_name -> query.BindVariable
+ 12, // 144: query.StreamEvent.Statement.category:type_name -> query.StreamEvent.Statement.Category
+ 20, // 145: query.StreamEvent.Statement.primary_key_fields:type_name -> query.Field
+ 21, // 146: query.StreamEvent.Statement.primary_key_values:type_name -> query.Row
+ 147, // [147:147] is the sub-list for method output_type
+ 147, // [147:147] is the sub-list for method input_type
+ 147, // [147:147] is the sub-list for extension type_name
+ 147, // [147:147] is the sub-list for extension extendee
+ 0, // [0:147] is the sub-list for field type_name
}
func init() { file_query_proto_init() }
@@ -7120,824 +7051,6 @@ func file_query_proto_init() {
if File_query_proto != nil {
return
}
- if !protoimpl.UnsafeEnabled {
- file_query_proto_msgTypes[0].Exporter = func(v any, i int) any {
- switch v := v.(*Target); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[1].Exporter = func(v any, i int) any {
- switch v := v.(*VTGateCallerID); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[2].Exporter = func(v any, i int) any {
- switch v := v.(*EventToken); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[3].Exporter = func(v any, i int) any {
- switch v := v.(*Value); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[4].Exporter = func(v any, i int) any {
- switch v := v.(*BindVariable); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[5].Exporter = func(v any, i int) any {
- switch v := v.(*BoundQuery); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[6].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteOptions); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[7].Exporter = func(v any, i int) any {
- switch v := v.(*Field); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[8].Exporter = func(v any, i int) any {
- switch v := v.(*Row); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[9].Exporter = func(v any, i int) any {
- switch v := v.(*QueryResult); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[10].Exporter = func(v any, i int) any {
- switch v := v.(*QueryWarning); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[11].Exporter = func(v any, i int) any {
- switch v := v.(*StreamEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[12].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[13].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[14].Exporter = func(v any, i int) any {
- switch v := v.(*ResultWithError); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[15].Exporter = func(v any, i int) any {
- switch v := v.(*StreamExecuteRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[16].Exporter = func(v any, i int) any {
- switch v := v.(*StreamExecuteResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[17].Exporter = func(v any, i int) any {
- switch v := v.(*BeginRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[18].Exporter = func(v any, i int) any {
- switch v := v.(*BeginResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[19].Exporter = func(v any, i int) any {
- switch v := v.(*CommitRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[20].Exporter = func(v any, i int) any {
- switch v := v.(*CommitResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[21].Exporter = func(v any, i int) any {
- switch v := v.(*RollbackRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[22].Exporter = func(v any, i int) any {
- switch v := v.(*RollbackResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[23].Exporter = func(v any, i int) any {
- switch v := v.(*PrepareRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[24].Exporter = func(v any, i int) any {
- switch v := v.(*PrepareResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[25].Exporter = func(v any, i int) any {
- switch v := v.(*CommitPreparedRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[26].Exporter = func(v any, i int) any {
- switch v := v.(*CommitPreparedResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[27].Exporter = func(v any, i int) any {
- switch v := v.(*RollbackPreparedRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[28].Exporter = func(v any, i int) any {
- switch v := v.(*RollbackPreparedResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[29].Exporter = func(v any, i int) any {
- switch v := v.(*CreateTransactionRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[30].Exporter = func(v any, i int) any {
- switch v := v.(*CreateTransactionResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[31].Exporter = func(v any, i int) any {
- switch v := v.(*StartCommitRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[32].Exporter = func(v any, i int) any {
- switch v := v.(*StartCommitResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[33].Exporter = func(v any, i int) any {
- switch v := v.(*SetRollbackRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[34].Exporter = func(v any, i int) any {
- switch v := v.(*SetRollbackResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[35].Exporter = func(v any, i int) any {
- switch v := v.(*ConcludeTransactionRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[36].Exporter = func(v any, i int) any {
- switch v := v.(*ConcludeTransactionResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[37].Exporter = func(v any, i int) any {
- switch v := v.(*ReadTransactionRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[38].Exporter = func(v any, i int) any {
- switch v := v.(*ReadTransactionResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[39].Exporter = func(v any, i int) any {
- switch v := v.(*UnresolvedTransactionsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[40].Exporter = func(v any, i int) any {
- switch v := v.(*UnresolvedTransactionsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[41].Exporter = func(v any, i int) any {
- switch v := v.(*BeginExecuteRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[42].Exporter = func(v any, i int) any {
- switch v := v.(*BeginExecuteResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[43].Exporter = func(v any, i int) any {
- switch v := v.(*BeginStreamExecuteRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[44].Exporter = func(v any, i int) any {
- switch v := v.(*BeginStreamExecuteResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[45].Exporter = func(v any, i int) any {
- switch v := v.(*MessageStreamRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[46].Exporter = func(v any, i int) any {
- switch v := v.(*MessageStreamResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[47].Exporter = func(v any, i int) any {
- switch v := v.(*MessageAckRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[48].Exporter = func(v any, i int) any {
- switch v := v.(*MessageAckResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[49].Exporter = func(v any, i int) any {
- switch v := v.(*ReserveExecuteRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[50].Exporter = func(v any, i int) any {
- switch v := v.(*ReserveExecuteResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[51].Exporter = func(v any, i int) any {
- switch v := v.(*ReserveStreamExecuteRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[52].Exporter = func(v any, i int) any {
- switch v := v.(*ReserveStreamExecuteResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[53].Exporter = func(v any, i int) any {
- switch v := v.(*ReserveBeginExecuteRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[54].Exporter = func(v any, i int) any {
- switch v := v.(*ReserveBeginExecuteResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[55].Exporter = func(v any, i int) any {
- switch v := v.(*ReserveBeginStreamExecuteRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[56].Exporter = func(v any, i int) any {
- switch v := v.(*ReserveBeginStreamExecuteResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[57].Exporter = func(v any, i int) any {
- switch v := v.(*ReleaseRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[58].Exporter = func(v any, i int) any {
- switch v := v.(*ReleaseResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[59].Exporter = func(v any, i int) any {
- switch v := v.(*StreamHealthRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[60].Exporter = func(v any, i int) any {
- switch v := v.(*RealtimeStats); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[61].Exporter = func(v any, i int) any {
- switch v := v.(*AggregateStats); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[62].Exporter = func(v any, i int) any {
- switch v := v.(*StreamHealthResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[63].Exporter = func(v any, i int) any {
- switch v := v.(*TransactionMetadata); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[64].Exporter = func(v any, i int) any {
- switch v := v.(*GetSchemaRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[65].Exporter = func(v any, i int) any {
- switch v := v.(*UDFInfo); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[66].Exporter = func(v any, i int) any {
- switch v := v.(*GetSchemaResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_query_proto_msgTypes[68].Exporter = func(v any, i int) any {
- switch v := v.(*StreamEvent_Statement); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
file_query_proto_msgTypes[6].OneofWrappers = []any{
(*ExecuteOptions_AuthoritativeTimeout)(nil),
}
@@ -7946,7 +7059,7 @@ func file_query_proto_init() {
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_query_proto_rawDesc,
- NumEnums: 12,
+ NumEnums: 13,
NumMessages: 70,
NumExtensions: 0,
NumServices: 0,
diff --git a/go/vt/proto/query/query_vtproto.pb.go b/go/vt/proto/query/query_vtproto.pb.go
index 613aef24fda..bb4fdb8362a 100644
--- a/go/vt/proto/query/query_vtproto.pb.go
+++ b/go/vt/proto/query/query_vtproto.pb.go
@@ -1,5 +1,5 @@
// Code generated by protoc-gen-go-vtproto. DO NOT EDIT.
-// protoc-gen-go-vtproto version: v0.6.1-0.20240319094008-0393e58bdf10
+// protoc-gen-go-vtproto version: v0.6.1-0.20241011083415-71c992bc3c87
// source: query.proto
package query
@@ -763,6 +763,7 @@ func (m *StartCommitResponse) CloneVT() *StartCommitResponse {
return (*StartCommitResponse)(nil)
}
r := new(StartCommitResponse)
+ r.State = m.State
if len(m.unknownFields) > 0 {
r.unknownFields = make([]byte, len(m.unknownFields))
copy(r.unknownFields, m.unknownFields)
@@ -3630,6 +3631,11 @@ func (m *StartCommitResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
+ if m.State != 0 {
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(m.State))
+ i--
+ dAtA[i] = 0x8
+ }
return len(dAtA) - i, nil
}
@@ -6796,6 +6802,9 @@ func (m *StartCommitResponse) SizeVT() (n int) {
}
var l int
_ = l
+ if m.State != 0 {
+ n += 1 + protohelpers.SizeOfVarint(uint64(m.State))
+ }
n += len(m.unknownFields)
return n
}
@@ -13035,6 +13044,25 @@ func (m *StartCommitResponse) UnmarshalVT(dAtA []byte) error {
return fmt.Errorf("proto: StartCommitResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field State", wireType)
+ }
+ m.State = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.State |= StartCommitState(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
diff --git a/go/vt/proto/queryservice/queryservice.pb.go b/go/vt/proto/queryservice/queryservice.pb.go
index 3ef39575e60..b44c6becd5d 100644
--- a/go/vt/proto/queryservice/queryservice.pb.go
+++ b/go/vt/proto/queryservice/queryservice.pb.go
@@ -17,7 +17,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.34.2
+// protoc-gen-go v1.35.1
// protoc v3.21.3
// source: queryservice.proto
diff --git a/go/vt/proto/replicationdata/replicationdata.pb.go b/go/vt/proto/replicationdata/replicationdata.pb.go
index 10a0406d851..d5462e1ea2b 100644
--- a/go/vt/proto/replicationdata/replicationdata.pb.go
+++ b/go/vt/proto/replicationdata/replicationdata.pb.go
@@ -17,7 +17,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.34.2
+// protoc-gen-go v1.35.1
// protoc v3.21.3
// source: replicationdata.proto
@@ -114,15 +114,14 @@ type Status struct {
HasReplicationFilters bool `protobuf:"varint,22,opt,name=has_replication_filters,json=hasReplicationFilters,proto3" json:"has_replication_filters,omitempty"`
SslAllowed bool `protobuf:"varint,23,opt,name=ssl_allowed,json=sslAllowed,proto3" json:"ssl_allowed,omitempty"`
ReplicationLagUnknown bool `protobuf:"varint,24,opt,name=replication_lag_unknown,json=replicationLagUnknown,proto3" json:"replication_lag_unknown,omitempty"`
+ BackupRunning bool `protobuf:"varint,25,opt,name=backup_running,json=backupRunning,proto3" json:"backup_running,omitempty"`
}
func (x *Status) Reset() {
*x = Status{}
- if protoimpl.UnsafeEnabled {
- mi := &file_replicationdata_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_replicationdata_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Status) String() string {
@@ -133,7 +132,7 @@ func (*Status) ProtoMessage() {}
func (x *Status) ProtoReflect() protoreflect.Message {
mi := &file_replicationdata_proto_msgTypes[0]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -302,6 +301,13 @@ func (x *Status) GetReplicationLagUnknown() bool {
return false
}
+func (x *Status) GetBackupRunning() bool {
+ if x != nil {
+ return x.BackupRunning
+ }
+ return false
+}
+
// Configuration holds replication configuration information gathered from performance_schema and global variables.
type Configuration struct {
state protoimpl.MessageState
@@ -316,11 +322,9 @@ type Configuration struct {
func (x *Configuration) Reset() {
*x = Configuration{}
- if protoimpl.UnsafeEnabled {
- mi := &file_replicationdata_proto_msgTypes[1]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_replicationdata_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Configuration) String() string {
@@ -331,7 +335,7 @@ func (*Configuration) ProtoMessage() {}
func (x *Configuration) ProtoReflect() protoreflect.Message {
mi := &file_replicationdata_proto_msgTypes[1]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -373,11 +377,9 @@ type StopReplicationStatus struct {
func (x *StopReplicationStatus) Reset() {
*x = StopReplicationStatus{}
- if protoimpl.UnsafeEnabled {
- mi := &file_replicationdata_proto_msgTypes[2]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_replicationdata_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StopReplicationStatus) String() string {
@@ -388,7 +390,7 @@ func (*StopReplicationStatus) ProtoMessage() {}
func (x *StopReplicationStatus) ProtoReflect() protoreflect.Message {
mi := &file_replicationdata_proto_msgTypes[2]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -425,15 +427,14 @@ type PrimaryStatus struct {
Position string `protobuf:"bytes,1,opt,name=position,proto3" json:"position,omitempty"`
FilePosition string `protobuf:"bytes,2,opt,name=file_position,json=filePosition,proto3" json:"file_position,omitempty"`
+ ServerUuid string `protobuf:"bytes,3,opt,name=server_uuid,json=serverUuid,proto3" json:"server_uuid,omitempty"`
}
func (x *PrimaryStatus) Reset() {
*x = PrimaryStatus{}
- if protoimpl.UnsafeEnabled {
- mi := &file_replicationdata_proto_msgTypes[3]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_replicationdata_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *PrimaryStatus) String() string {
@@ -444,7 +445,7 @@ func (*PrimaryStatus) ProtoMessage() {}
func (x *PrimaryStatus) ProtoReflect() protoreflect.Message {
mi := &file_replicationdata_proto_msgTypes[3]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -473,6 +474,13 @@ func (x *PrimaryStatus) GetFilePosition() string {
return ""
}
+func (x *PrimaryStatus) GetServerUuid() string {
+ if x != nil {
+ return x.ServerUuid
+ }
+ return ""
+}
+
// FullStatus contains the full status of MySQL including the replication information, semi-sync information, GTID information among others
type FullStatus struct {
state protoimpl.MessageState
@@ -505,11 +513,9 @@ type FullStatus struct {
func (x *FullStatus) Reset() {
*x = FullStatus{}
- if protoimpl.UnsafeEnabled {
- mi := &file_replicationdata_proto_msgTypes[4]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_replicationdata_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *FullStatus) String() string {
@@ -520,7 +526,7 @@ func (*FullStatus) ProtoMessage() {}
func (x *FullStatus) ProtoReflect() protoreflect.Message {
mi := &file_replicationdata_proto_msgTypes[4]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -694,7 +700,7 @@ var File_replicationdata_proto protoreflect.FileDescriptor
var file_replicationdata_proto_rawDesc = []byte{
0x0a, 0x15, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74,
0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x22, 0x96, 0x07, 0x0a, 0x06, 0x53, 0x74, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x22, 0xbd, 0x07, 0x0a, 0x06, 0x53, 0x74, 0x61,
0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12,
0x36, 0x0a, 0x17, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c,
@@ -751,103 +757,108 @@ var file_replicationdata_proto_rawDesc = []byte{
0x17, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67,
0x5f, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x18, 0x18, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15,
0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, 0x55, 0x6e,
- 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10,
- 0x04, 0x22, 0x6e, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x12, 0x2d, 0x0a, 0x12, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x5f,
- 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x11,
- 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61,
- 0x6c, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x6e, 0x65, 0x74,
- 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11,
- 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x4e, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75,
- 0x74, 0x22, 0x77, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x62, 0x65,
- 0x66, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x72, 0x65, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x61,
- 0x74, 0x75, 0x73, 0x52, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x61,
- 0x66, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x72, 0x65, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x61,
- 0x74, 0x75, 0x73, 0x52, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x22, 0x50, 0x0a, 0x0d, 0x50, 0x72,
- 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70,
- 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70,
- 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x5f,
- 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c,
- 0x66, 0x69, 0x6c, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xc8, 0x08, 0x0a,
- 0x0a, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x73,
- 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08,
- 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76,
- 0x65, 0x72, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73,
- 0x65, 0x72, 0x76, 0x65, 0x72, 0x55, 0x75, 0x69, 0x64, 0x12, 0x46, 0x0a, 0x12, 0x72, 0x65, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18,
- 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x11,
- 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75,
- 0x73, 0x12, 0x45, 0x0a, 0x0e, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x73, 0x74, 0x61,
- 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x72, 0x65, 0x70, 0x6c,
- 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x69, 0x6d,
- 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0d, 0x70, 0x72, 0x69, 0x6d, 0x61,
- 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x67, 0x74, 0x69, 0x64,
- 0x5f, 0x70, 0x75, 0x72, 0x67, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x67,
- 0x74, 0x69, 0x64, 0x50, 0x75, 0x72, 0x67, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72,
- 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73,
- 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x63,
- 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, 0x65,
- 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09,
- 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52,
- 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x74, 0x69,
- 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x67, 0x74,
- 0x69, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67,
- 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62,
- 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x62,
- 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x5f, 0x72, 0x6f, 0x77, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18,
- 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x6f, 0x77,
- 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x6f, 0x67, 0x5f, 0x62, 0x69, 0x6e,
- 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d,
- 0x6c, 0x6f, 0x67, 0x42, 0x69, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x2e, 0x0a,
- 0x13, 0x6c, 0x6f, 0x67, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x75, 0x70, 0x64,
- 0x61, 0x74, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x6c, 0x6f, 0x67, 0x52,
- 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x39, 0x0a,
+ 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f,
+ 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x62,
+ 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x4a, 0x04, 0x08, 0x02,
+ 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x6e, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x66,
+ 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x0a, 0x12, 0x68, 0x65, 0x61,
+ 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x11, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74,
+ 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x6c,
+ 0x69, 0x63, 0x61, 0x5f, 0x6e, 0x65, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x4e, 0x65,
+ 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0x77, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x70,
+ 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75,
+ 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x17, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x62, 0x65, 0x66, 0x6f,
+ 0x72, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x17, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x05, 0x61, 0x66, 0x74, 0x65,
+ 0x72, 0x22, 0x71, 0x0a, 0x0d, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74,
+ 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23,
+ 0x0a, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74,
+ 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x75, 0x75,
+ 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x55, 0x75, 0x69, 0x64, 0x22, 0xc8, 0x08, 0x0a, 0x0a, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61,
+ 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64,
+ 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x55, 0x75, 0x69,
+ 0x64, 0x12, 0x46, 0x0a, 0x12, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
+ 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x11, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x45, 0x0a, 0x0e, 0x70, 0x72, 0x69,
+ 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x1e, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75,
+ 0x73, 0x52, 0x0d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
+ 0x12, 0x1f, 0x0a, 0x0b, 0x67, 0x74, 0x69, 0x64, 0x5f, 0x70, 0x75, 0x72, 0x67, 0x65, 0x64, 0x18,
+ 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x67, 0x74, 0x69, 0x64, 0x50, 0x75, 0x72, 0x67, 0x65,
+ 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x76,
+ 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x07,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d,
+ 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c,
+ 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c,
+ 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x74, 0x69, 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x09,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x67, 0x74, 0x69, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x23,
+ 0x0a, 0x0d, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18,
+ 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x46, 0x6f, 0x72,
+ 0x6d, 0x61, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x5f, 0x72, 0x6f,
+ 0x77, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x62,
+ 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x6f, 0x77, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a,
+ 0x0f, 0x6c, 0x6f, 0x67, 0x5f, 0x62, 0x69, 0x6e, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64,
+ 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6c, 0x6f, 0x67, 0x42, 0x69, 0x6e, 0x45, 0x6e,
+ 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x6c, 0x6f, 0x67, 0x5f, 0x72, 0x65, 0x70,
+ 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01,
+ 0x28, 0x08, 0x52, 0x11, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x55, 0x70,
+ 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x19, 0x73, 0x65, 0x6d, 0x69, 0x5f, 0x73, 0x79,
+ 0x6e, 0x63, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c,
+ 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79,
+ 0x6e, 0x63, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64,
+ 0x12, 0x39, 0x0a, 0x19, 0x73, 0x65, 0x6d, 0x69, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x72, 0x65,
+ 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0f, 0x20,
+ 0x01, 0x28, 0x08, 0x52, 0x16, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x70,
+ 0x6c, 0x69, 0x63, 0x61, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x18, 0x73,
+ 0x65, 0x6d, 0x69, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79,
+ 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x73,
+ 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74,
+ 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x18, 0x73, 0x65, 0x6d, 0x69, 0x5f, 0x73, 0x79, 0x6e,
+ 0x63, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
+ 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63,
+ 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x39, 0x0a,
0x19, 0x73, 0x65, 0x6d, 0x69, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61,
- 0x72, 0x79, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08,
+ 0x72, 0x79, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x16, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72,
- 0x79, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x73, 0x65, 0x6d, 0x69,
- 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x65, 0x6e,
- 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x73, 0x65, 0x6d,
- 0x69, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x45, 0x6e, 0x61, 0x62,
- 0x6c, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x18, 0x73, 0x65, 0x6d, 0x69, 0x5f, 0x73, 0x79, 0x6e, 0x63,
- 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18,
- 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x50,
- 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x18,
- 0x73, 0x65, 0x6d, 0x69, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15,
- 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53,
- 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x39, 0x0a, 0x19, 0x73, 0x65, 0x6d, 0x69, 0x5f, 0x73, 0x79,
- 0x6e, 0x63, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e,
- 0x74, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x16, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79,
- 0x6e, 0x63, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73,
- 0x12, 0x39, 0x0a, 0x19, 0x73, 0x65, 0x6d, 0x69, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x70, 0x72,
- 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x13, 0x20,
- 0x01, 0x28, 0x04, 0x52, 0x16, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x69,
- 0x6d, 0x61, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x45, 0x0a, 0x20, 0x73,
- 0x65, 0x6d, 0x69, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x66, 0x6f,
- 0x72, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18,
- 0x14, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x1b, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x57,
- 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x43, 0x6f, 0x75,
- 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x75, 0x70, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x61, 0x64,
- 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x75, 0x70,
- 0x65, 0x72, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x5b, 0x0a, 0x19, 0x72, 0x65,
- 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
- 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e,
- 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x18, 0x72,
- 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
- 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x3b, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x70, 0x52,
- 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x12,
- 0x0a, 0x0e, 0x49, 0x4f, 0x41, 0x4e, 0x44, 0x53, 0x51, 0x4c, 0x54, 0x48, 0x52, 0x45, 0x41, 0x44,
- 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x4f, 0x54, 0x48, 0x52, 0x45, 0x41, 0x44, 0x4f, 0x4e,
- 0x4c, 0x59, 0x10, 0x01, 0x42, 0x2e, 0x5a, 0x2c, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69,
- 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70,
- 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x64, 0x61, 0x74, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x39, 0x0a, 0x19, 0x73, 0x65, 0x6d, 0x69,
+ 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x74, 0x69,
+ 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x04, 0x52, 0x16, 0x73, 0x65, 0x6d,
+ 0x69, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65,
+ 0x6f, 0x75, 0x74, 0x12, 0x45, 0x0a, 0x20, 0x73, 0x65, 0x6d, 0x69, 0x5f, 0x73, 0x79, 0x6e, 0x63,
+ 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x1b, 0x73,
+ 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x52, 0x65,
+ 0x70, 0x6c, 0x69, 0x63, 0x61, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x75,
+ 0x70, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x15, 0x20,
+ 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x75, 0x70, 0x65, 0x72, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e,
+ 0x6c, 0x79, 0x12, 0x5b, 0x0a, 0x19, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
+ 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x18, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2a,
+ 0x3b, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4f, 0x41, 0x4e, 0x44, 0x53,
+ 0x51, 0x4c, 0x54, 0x48, 0x52, 0x45, 0x41, 0x44, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x4f,
+ 0x54, 0x48, 0x52, 0x45, 0x41, 0x44, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x42, 0x2e, 0x5a, 0x2c,
+ 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73,
+ 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x72, 0x65, 0x70,
+ 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x06, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -890,68 +901,6 @@ func file_replicationdata_proto_init() {
if File_replicationdata_proto != nil {
return
}
- if !protoimpl.UnsafeEnabled {
- file_replicationdata_proto_msgTypes[0].Exporter = func(v any, i int) any {
- switch v := v.(*Status); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_replicationdata_proto_msgTypes[1].Exporter = func(v any, i int) any {
- switch v := v.(*Configuration); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_replicationdata_proto_msgTypes[2].Exporter = func(v any, i int) any {
- switch v := v.(*StopReplicationStatus); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_replicationdata_proto_msgTypes[3].Exporter = func(v any, i int) any {
- switch v := v.(*PrimaryStatus); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_replicationdata_proto_msgTypes[4].Exporter = func(v any, i int) any {
- switch v := v.(*FullStatus); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
diff --git a/go/vt/proto/replicationdata/replicationdata_vtproto.pb.go b/go/vt/proto/replicationdata/replicationdata_vtproto.pb.go
index 35c5db137a0..b3d638a1327 100644
--- a/go/vt/proto/replicationdata/replicationdata_vtproto.pb.go
+++ b/go/vt/proto/replicationdata/replicationdata_vtproto.pb.go
@@ -1,5 +1,5 @@
// Code generated by protoc-gen-go-vtproto. DO NOT EDIT.
-// protoc-gen-go-vtproto version: v0.6.1-0.20240319094008-0393e58bdf10
+// protoc-gen-go-vtproto version: v0.6.1-0.20241011083415-71c992bc3c87
// source: replicationdata.proto
package replicationdata
@@ -48,6 +48,7 @@ func (m *Status) CloneVT() *Status {
r.HasReplicationFilters = m.HasReplicationFilters
r.SslAllowed = m.SslAllowed
r.ReplicationLagUnknown = m.ReplicationLagUnknown
+ r.BackupRunning = m.BackupRunning
if len(m.unknownFields) > 0 {
r.unknownFields = make([]byte, len(m.unknownFields))
copy(r.unknownFields, m.unknownFields)
@@ -102,6 +103,7 @@ func (m *PrimaryStatus) CloneVT() *PrimaryStatus {
r := new(PrimaryStatus)
r.Position = m.Position
r.FilePosition = m.FilePosition
+ r.ServerUuid = m.ServerUuid
if len(m.unknownFields) > 0 {
r.unknownFields = make([]byte, len(m.unknownFields))
copy(r.unknownFields, m.unknownFields)
@@ -181,6 +183,18 @@ func (m *Status) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
+ if m.BackupRunning {
+ i--
+ if m.BackupRunning {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i--
+ dAtA[i] = 0x1
+ i--
+ dAtA[i] = 0xc8
+ }
if m.ReplicationLagUnknown {
i--
if m.ReplicationLagUnknown {
@@ -484,6 +498,13 @@ func (m *PrimaryStatus) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
+ if len(m.ServerUuid) > 0 {
+ i -= len(m.ServerUuid)
+ copy(dAtA[i:], m.ServerUuid)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ServerUuid)))
+ i--
+ dAtA[i] = 0x1a
+ }
if len(m.FilePosition) > 0 {
i -= len(m.FilePosition)
copy(dAtA[i:], m.FilePosition)
@@ -809,6 +830,9 @@ func (m *Status) SizeVT() (n int) {
if m.ReplicationLagUnknown {
n += 3
}
+ if m.BackupRunning {
+ n += 3
+ }
n += len(m.unknownFields)
return n
}
@@ -861,6 +885,10 @@ func (m *PrimaryStatus) SizeVT() (n int) {
if l > 0 {
n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
}
+ l = len(m.ServerUuid)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
n += len(m.unknownFields)
return n
}
@@ -1533,6 +1561,26 @@ func (m *Status) UnmarshalVT(dAtA []byte) error {
}
}
m.ReplicationLagUnknown = bool(v != 0)
+ case 25:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field BackupRunning", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.BackupRunning = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -1852,6 +1900,38 @@ func (m *PrimaryStatus) UnmarshalVT(dAtA []byte) error {
}
m.FilePosition = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ServerUuid", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ServerUuid = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
diff --git a/go/vt/proto/tableacl/tableacl.pb.go b/go/vt/proto/tableacl/tableacl.pb.go
index b6b7549e8fc..44281419028 100644
--- a/go/vt/proto/tableacl/tableacl.pb.go
+++ b/go/vt/proto/tableacl/tableacl.pb.go
@@ -17,7 +17,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.34.2
+// protoc-gen-go v1.35.1
// protoc v3.21.3
// source: tableacl.proto
@@ -53,11 +53,9 @@ type TableGroupSpec struct {
func (x *TableGroupSpec) Reset() {
*x = TableGroupSpec{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tableacl_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tableacl_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *TableGroupSpec) String() string {
@@ -68,7 +66,7 @@ func (*TableGroupSpec) ProtoMessage() {}
func (x *TableGroupSpec) ProtoReflect() protoreflect.Message {
mi := &file_tableacl_proto_msgTypes[0]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -128,11 +126,9 @@ type Config struct {
func (x *Config) Reset() {
*x = Config{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tableacl_proto_msgTypes[1]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tableacl_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Config) String() string {
@@ -143,7 +139,7 @@ func (*Config) ProtoMessage() {}
func (x *Config) ProtoReflect() protoreflect.Message {
mi := &file_tableacl_proto_msgTypes[1]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -221,32 +217,6 @@ func file_tableacl_proto_init() {
if File_tableacl_proto != nil {
return
}
- if !protoimpl.UnsafeEnabled {
- file_tableacl_proto_msgTypes[0].Exporter = func(v any, i int) any {
- switch v := v.(*TableGroupSpec); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tableacl_proto_msgTypes[1].Exporter = func(v any, i int) any {
- switch v := v.(*Config); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
diff --git a/go/vt/proto/tableacl/tableacl_vtproto.pb.go b/go/vt/proto/tableacl/tableacl_vtproto.pb.go
index acf8b28b71c..60c9294706f 100644
--- a/go/vt/proto/tableacl/tableacl_vtproto.pb.go
+++ b/go/vt/proto/tableacl/tableacl_vtproto.pb.go
@@ -1,5 +1,5 @@
// Code generated by protoc-gen-go-vtproto. DO NOT EDIT.
-// protoc-gen-go-vtproto version: v0.6.1-0.20240319094008-0393e58bdf10
+// protoc-gen-go-vtproto version: v0.6.1-0.20241011083415-71c992bc3c87
// source: tableacl.proto
package tableacl
diff --git a/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go b/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go
index 0bf8b8ffe47..67eae2395ad 100644
--- a/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go
+++ b/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go
@@ -18,7 +18,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.34.2
+// protoc-gen-go v1.35.1
// protoc v3.21.3
// source: tabletmanagerdata.proto
@@ -181,11 +181,9 @@ type TableDefinition struct {
func (x *TableDefinition) Reset() {
*x = TableDefinition{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *TableDefinition) String() string {
@@ -196,7 +194,7 @@ func (*TableDefinition) ProtoMessage() {}
func (x *TableDefinition) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[0]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -278,11 +276,9 @@ type SchemaDefinition struct {
func (x *SchemaDefinition) Reset() {
*x = SchemaDefinition{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[1]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SchemaDefinition) String() string {
@@ -293,7 +289,7 @@ func (*SchemaDefinition) ProtoMessage() {}
func (x *SchemaDefinition) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[1]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -335,11 +331,9 @@ type SchemaChangeResult struct {
func (x *SchemaChangeResult) Reset() {
*x = SchemaChangeResult{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[2]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SchemaChangeResult) String() string {
@@ -350,7 +344,7 @@ func (*SchemaChangeResult) ProtoMessage() {}
func (x *SchemaChangeResult) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[2]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -395,11 +389,9 @@ type UserPermission struct {
func (x *UserPermission) Reset() {
*x = UserPermission{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[3]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UserPermission) String() string {
@@ -410,7 +402,7 @@ func (*UserPermission) ProtoMessage() {}
func (x *UserPermission) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[3]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -468,11 +460,9 @@ type DbPermission struct {
func (x *DbPermission) Reset() {
*x = DbPermission{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[4]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *DbPermission) String() string {
@@ -483,7 +473,7 @@ func (*DbPermission) ProtoMessage() {}
func (x *DbPermission) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[4]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -539,11 +529,9 @@ type Permissions struct {
func (x *Permissions) Reset() {
*x = Permissions{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[5]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Permissions) String() string {
@@ -554,7 +542,7 @@ func (*Permissions) ProtoMessage() {}
func (x *Permissions) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[5]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -593,11 +581,9 @@ type PingRequest struct {
func (x *PingRequest) Reset() {
*x = PingRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[6]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *PingRequest) String() string {
@@ -608,7 +594,7 @@ func (*PingRequest) ProtoMessage() {}
func (x *PingRequest) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[6]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -640,11 +626,9 @@ type PingResponse struct {
func (x *PingResponse) Reset() {
*x = PingResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[7]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *PingResponse) String() string {
@@ -655,7 +639,7 @@ func (*PingResponse) ProtoMessage() {}
func (x *PingResponse) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[7]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -688,11 +672,9 @@ type SleepRequest struct {
func (x *SleepRequest) Reset() {
*x = SleepRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[8]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SleepRequest) String() string {
@@ -703,7 +685,7 @@ func (*SleepRequest) ProtoMessage() {}
func (x *SleepRequest) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[8]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -733,11 +715,9 @@ type SleepResponse struct {
func (x *SleepResponse) Reset() {
*x = SleepResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[9]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SleepResponse) String() string {
@@ -748,7 +728,7 @@ func (*SleepResponse) ProtoMessage() {}
func (x *SleepResponse) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[9]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -775,11 +755,9 @@ type ExecuteHookRequest struct {
func (x *ExecuteHookRequest) Reset() {
*x = ExecuteHookRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[10]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[10]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteHookRequest) String() string {
@@ -790,7 +768,7 @@ func (*ExecuteHookRequest) ProtoMessage() {}
func (x *ExecuteHookRequest) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[10]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -838,11 +816,9 @@ type ExecuteHookResponse struct {
func (x *ExecuteHookResponse) Reset() {
*x = ExecuteHookResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[11]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[11]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteHookResponse) String() string {
@@ -853,7 +829,7 @@ func (*ExecuteHookResponse) ProtoMessage() {}
func (x *ExecuteHookResponse) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[11]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -904,11 +880,9 @@ type GetSchemaRequest struct {
func (x *GetSchemaRequest) Reset() {
*x = GetSchemaRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[12]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[12]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSchemaRequest) String() string {
@@ -919,7 +893,7 @@ func (*GetSchemaRequest) ProtoMessage() {}
func (x *GetSchemaRequest) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[12]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -972,11 +946,9 @@ type GetSchemaResponse struct {
func (x *GetSchemaResponse) Reset() {
*x = GetSchemaResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[13]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[13]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSchemaResponse) String() string {
@@ -987,7 +959,7 @@ func (*GetSchemaResponse) ProtoMessage() {}
func (x *GetSchemaResponse) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[13]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1017,11 +989,9 @@ type GetPermissionsRequest struct {
func (x *GetPermissionsRequest) Reset() {
*x = GetPermissionsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[14]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[14]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetPermissionsRequest) String() string {
@@ -1032,7 +1002,7 @@ func (*GetPermissionsRequest) ProtoMessage() {}
func (x *GetPermissionsRequest) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[14]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1057,11 +1027,9 @@ type GetPermissionsResponse struct {
func (x *GetPermissionsResponse) Reset() {
*x = GetPermissionsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[15]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[15]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetPermissionsResponse) String() string {
@@ -1072,7 +1040,7 @@ func (*GetPermissionsResponse) ProtoMessage() {}
func (x *GetPermissionsResponse) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[15]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1104,11 +1072,9 @@ type GetGlobalStatusVarsRequest struct {
func (x *GetGlobalStatusVarsRequest) Reset() {
*x = GetGlobalStatusVarsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[16]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[16]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetGlobalStatusVarsRequest) String() string {
@@ -1119,7 +1085,7 @@ func (*GetGlobalStatusVarsRequest) ProtoMessage() {}
func (x *GetGlobalStatusVarsRequest) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[16]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1151,11 +1117,9 @@ type GetGlobalStatusVarsResponse struct {
func (x *GetGlobalStatusVarsResponse) Reset() {
*x = GetGlobalStatusVarsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[17]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[17]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetGlobalStatusVarsResponse) String() string {
@@ -1166,7 +1130,7 @@ func (*GetGlobalStatusVarsResponse) ProtoMessage() {}
func (x *GetGlobalStatusVarsResponse) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[17]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1196,11 +1160,9 @@ type SetReadOnlyRequest struct {
func (x *SetReadOnlyRequest) Reset() {
*x = SetReadOnlyRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[18]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[18]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SetReadOnlyRequest) String() string {
@@ -1211,7 +1173,7 @@ func (*SetReadOnlyRequest) ProtoMessage() {}
func (x *SetReadOnlyRequest) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[18]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1234,11 +1196,9 @@ type SetReadOnlyResponse struct {
func (x *SetReadOnlyResponse) Reset() {
*x = SetReadOnlyResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[19]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[19]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SetReadOnlyResponse) String() string {
@@ -1249,7 +1209,7 @@ func (*SetReadOnlyResponse) ProtoMessage() {}
func (x *SetReadOnlyResponse) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[19]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1272,11 +1232,9 @@ type SetReadWriteRequest struct {
func (x *SetReadWriteRequest) Reset() {
*x = SetReadWriteRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[20]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[20]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SetReadWriteRequest) String() string {
@@ -1287,7 +1245,7 @@ func (*SetReadWriteRequest) ProtoMessage() {}
func (x *SetReadWriteRequest) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[20]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1310,11 +1268,9 @@ type SetReadWriteResponse struct {
func (x *SetReadWriteResponse) Reset() {
*x = SetReadWriteResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[21]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[21]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SetReadWriteResponse) String() string {
@@ -1325,7 +1281,7 @@ func (*SetReadWriteResponse) ProtoMessage() {}
func (x *SetReadWriteResponse) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[21]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1351,11 +1307,9 @@ type ChangeTypeRequest struct {
func (x *ChangeTypeRequest) Reset() {
*x = ChangeTypeRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[22]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[22]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ChangeTypeRequest) String() string {
@@ -1366,7 +1320,7 @@ func (*ChangeTypeRequest) ProtoMessage() {}
func (x *ChangeTypeRequest) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[22]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1403,11 +1357,9 @@ type ChangeTypeResponse struct {
func (x *ChangeTypeResponse) Reset() {
*x = ChangeTypeResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[23]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[23]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ChangeTypeResponse) String() string {
@@ -1418,7 +1370,7 @@ func (*ChangeTypeResponse) ProtoMessage() {}
func (x *ChangeTypeResponse) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[23]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1441,11 +1393,9 @@ type RefreshStateRequest struct {
func (x *RefreshStateRequest) Reset() {
*x = RefreshStateRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[24]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[24]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RefreshStateRequest) String() string {
@@ -1456,7 +1406,7 @@ func (*RefreshStateRequest) ProtoMessage() {}
func (x *RefreshStateRequest) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[24]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1479,11 +1429,9 @@ type RefreshStateResponse struct {
func (x *RefreshStateResponse) Reset() {
*x = RefreshStateResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[25]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[25]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RefreshStateResponse) String() string {
@@ -1494,7 +1442,7 @@ func (*RefreshStateResponse) ProtoMessage() {}
func (x *RefreshStateResponse) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[25]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1517,11 +1465,9 @@ type RunHealthCheckRequest struct {
func (x *RunHealthCheckRequest) Reset() {
*x = RunHealthCheckRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[26]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[26]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RunHealthCheckRequest) String() string {
@@ -1532,7 +1478,7 @@ func (*RunHealthCheckRequest) ProtoMessage() {}
func (x *RunHealthCheckRequest) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[26]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1555,11 +1501,9 @@ type RunHealthCheckResponse struct {
func (x *RunHealthCheckResponse) Reset() {
*x = RunHealthCheckResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[27]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[27]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RunHealthCheckResponse) String() string {
@@ -1570,7 +1514,7 @@ func (*RunHealthCheckResponse) ProtoMessage() {}
func (x *RunHealthCheckResponse) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[27]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1598,11 +1542,9 @@ type ReloadSchemaRequest struct {
func (x *ReloadSchemaRequest) Reset() {
*x = ReloadSchemaRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[28]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[28]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReloadSchemaRequest) String() string {
@@ -1613,7 +1555,7 @@ func (*ReloadSchemaRequest) ProtoMessage() {}
func (x *ReloadSchemaRequest) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[28]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1643,11 +1585,9 @@ type ReloadSchemaResponse struct {
func (x *ReloadSchemaResponse) Reset() {
*x = ReloadSchemaResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[29]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[29]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReloadSchemaResponse) String() string {
@@ -1658,7 +1598,7 @@ func (*ReloadSchemaResponse) ProtoMessage() {}
func (x *ReloadSchemaResponse) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[29]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1683,11 +1623,9 @@ type PreflightSchemaRequest struct {
func (x *PreflightSchemaRequest) Reset() {
*x = PreflightSchemaRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[30]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[30]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *PreflightSchemaRequest) String() string {
@@ -1698,7 +1636,7 @@ func (*PreflightSchemaRequest) ProtoMessage() {}
func (x *PreflightSchemaRequest) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[30]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1732,11 +1670,9 @@ type PreflightSchemaResponse struct {
func (x *PreflightSchemaResponse) Reset() {
*x = PreflightSchemaResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[31]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[31]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *PreflightSchemaResponse) String() string {
@@ -1747,7 +1683,7 @@ func (*PreflightSchemaResponse) ProtoMessage() {}
func (x *PreflightSchemaResponse) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[31]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1788,11 +1724,9 @@ type ApplySchemaRequest struct {
func (x *ApplySchemaRequest) Reset() {
*x = ApplySchemaRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[32]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[32]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ApplySchemaRequest) String() string {
@@ -1803,7 +1737,7 @@ func (*ApplySchemaRequest) ProtoMessage() {}
func (x *ApplySchemaRequest) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[32]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1885,11 +1819,9 @@ type ApplySchemaResponse struct {
func (x *ApplySchemaResponse) Reset() {
*x = ApplySchemaResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[33]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[33]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ApplySchemaResponse) String() string {
@@ -1900,7 +1832,7 @@ func (*ApplySchemaResponse) ProtoMessage() {}
func (x *ApplySchemaResponse) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[33]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1937,11 +1869,9 @@ type LockTablesRequest struct {
func (x *LockTablesRequest) Reset() {
*x = LockTablesRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[34]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[34]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *LockTablesRequest) String() string {
@@ -1952,7 +1882,7 @@ func (*LockTablesRequest) ProtoMessage() {}
func (x *LockTablesRequest) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[34]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1975,11 +1905,9 @@ type LockTablesResponse struct {
func (x *LockTablesResponse) Reset() {
*x = LockTablesResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[35]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[35]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *LockTablesResponse) String() string {
@@ -1990,7 +1918,7 @@ func (*LockTablesResponse) ProtoMessage() {}
func (x *LockTablesResponse) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[35]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2013,11 +1941,9 @@ type UnlockTablesRequest struct {
func (x *UnlockTablesRequest) Reset() {
*x = UnlockTablesRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[36]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[36]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UnlockTablesRequest) String() string {
@@ -2028,7 +1954,7 @@ func (*UnlockTablesRequest) ProtoMessage() {}
func (x *UnlockTablesRequest) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[36]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2051,11 +1977,9 @@ type UnlockTablesResponse struct {
func (x *UnlockTablesResponse) Reset() {
*x = UnlockTablesResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[37]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[37]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UnlockTablesResponse) String() string {
@@ -2066,7 +1990,7 @@ func (*UnlockTablesResponse) ProtoMessage() {}
func (x *UnlockTablesResponse) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[37]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2096,11 +2020,9 @@ type ExecuteQueryRequest struct {
func (x *ExecuteQueryRequest) Reset() {
*x = ExecuteQueryRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[38]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[38]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteQueryRequest) String() string {
@@ -2111,7 +2033,7 @@ func (*ExecuteQueryRequest) ProtoMessage() {}
func (x *ExecuteQueryRequest) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[38]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2164,11 +2086,9 @@ type ExecuteQueryResponse struct {
func (x *ExecuteQueryResponse) Reset() {
*x = ExecuteQueryResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[39]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[39]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteQueryResponse) String() string {
@@ -2179,7 +2099,7 @@ func (*ExecuteQueryResponse) ProtoMessage() {}
func (x *ExecuteQueryResponse) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[39]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2216,11 +2136,9 @@ type ExecuteFetchAsDbaRequest struct {
func (x *ExecuteFetchAsDbaRequest) Reset() {
*x = ExecuteFetchAsDbaRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[40]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[40]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteFetchAsDbaRequest) String() string {
@@ -2231,7 +2149,7 @@ func (*ExecuteFetchAsDbaRequest) ProtoMessage() {}
func (x *ExecuteFetchAsDbaRequest) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[40]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2298,11 +2216,9 @@ type ExecuteFetchAsDbaResponse struct {
func (x *ExecuteFetchAsDbaResponse) Reset() {
*x = ExecuteFetchAsDbaResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[41]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[41]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteFetchAsDbaResponse) String() string {
@@ -2313,7 +2229,7 @@ func (*ExecuteFetchAsDbaResponse) ProtoMessage() {}
func (x *ExecuteFetchAsDbaResponse) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[41]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2350,11 +2266,9 @@ type ExecuteMultiFetchAsDbaRequest struct {
func (x *ExecuteMultiFetchAsDbaRequest) Reset() {
*x = ExecuteMultiFetchAsDbaRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[42]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[42]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteMultiFetchAsDbaRequest) String() string {
@@ -2365,7 +2279,7 @@ func (*ExecuteMultiFetchAsDbaRequest) ProtoMessage() {}
func (x *ExecuteMultiFetchAsDbaRequest) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[42]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2432,11 +2346,9 @@ type ExecuteMultiFetchAsDbaResponse struct {
func (x *ExecuteMultiFetchAsDbaResponse) Reset() {
*x = ExecuteMultiFetchAsDbaResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[43]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[43]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteMultiFetchAsDbaResponse) String() string {
@@ -2447,7 +2359,7 @@ func (*ExecuteMultiFetchAsDbaResponse) ProtoMessage() {}
func (x *ExecuteMultiFetchAsDbaResponse) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[43]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2482,11 +2394,9 @@ type ExecuteFetchAsAllPrivsRequest struct {
func (x *ExecuteFetchAsAllPrivsRequest) Reset() {
*x = ExecuteFetchAsAllPrivsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[44]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[44]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteFetchAsAllPrivsRequest) String() string {
@@ -2497,7 +2407,7 @@ func (*ExecuteFetchAsAllPrivsRequest) ProtoMessage() {}
func (x *ExecuteFetchAsAllPrivsRequest) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[44]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2550,11 +2460,9 @@ type ExecuteFetchAsAllPrivsResponse struct {
func (x *ExecuteFetchAsAllPrivsResponse) Reset() {
*x = ExecuteFetchAsAllPrivsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[45]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[45]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteFetchAsAllPrivsResponse) String() string {
@@ -2565,7 +2473,7 @@ func (*ExecuteFetchAsAllPrivsResponse) ProtoMessage() {}
func (x *ExecuteFetchAsAllPrivsResponse) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[45]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2598,11 +2506,9 @@ type ExecuteFetchAsAppRequest struct {
func (x *ExecuteFetchAsAppRequest) Reset() {
*x = ExecuteFetchAsAppRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[46]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[46]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteFetchAsAppRequest) String() string {
@@ -2613,7 +2519,7 @@ func (*ExecuteFetchAsAppRequest) ProtoMessage() {}
func (x *ExecuteFetchAsAppRequest) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[46]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2652,11 +2558,9 @@ type ExecuteFetchAsAppResponse struct {
func (x *ExecuteFetchAsAppResponse) Reset() {
*x = ExecuteFetchAsAppResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[47]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[47]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteFetchAsAppResponse) String() string {
@@ -2667,7 +2571,7 @@ func (*ExecuteFetchAsAppResponse) ProtoMessage() {}
func (x *ExecuteFetchAsAppResponse) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[47]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2699,11 +2603,9 @@ type GetUnresolvedTransactionsRequest struct {
func (x *GetUnresolvedTransactionsRequest) Reset() {
*x = GetUnresolvedTransactionsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[48]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[48]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetUnresolvedTransactionsRequest) String() string {
@@ -2714,7 +2616,7 @@ func (*GetUnresolvedTransactionsRequest) ProtoMessage() {}
func (x *GetUnresolvedTransactionsRequest) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[48]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2746,11 +2648,9 @@ type GetUnresolvedTransactionsResponse struct {
func (x *GetUnresolvedTransactionsResponse) Reset() {
*x = GetUnresolvedTransactionsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[49]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[49]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetUnresolvedTransactionsResponse) String() string {
@@ -2761,7 +2661,7 @@ func (*GetUnresolvedTransactionsResponse) ProtoMessage() {}
func (x *GetUnresolvedTransactionsResponse) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[49]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2793,11 +2693,9 @@ type ReadTransactionRequest struct {
func (x *ReadTransactionRequest) Reset() {
*x = ReadTransactionRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[50]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[50]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReadTransactionRequest) String() string {
@@ -2808,7 +2706,7 @@ func (*ReadTransactionRequest) ProtoMessage() {}
func (x *ReadTransactionRequest) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[50]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2840,11 +2738,9 @@ type ReadTransactionResponse struct {
func (x *ReadTransactionResponse) Reset() {
*x = ReadTransactionResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[51]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[51]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReadTransactionResponse) String() string {
@@ -2855,7 +2751,7 @@ func (*ReadTransactionResponse) ProtoMessage() {}
func (x *ReadTransactionResponse) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[51]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2877,33 +2773,30 @@ func (x *ReadTransactionResponse) GetTransaction() *query.TransactionMetadata {
return nil
}
-type ConcludeTransactionRequest struct {
+type GetTransactionInfoRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Dtid string `protobuf:"bytes,1,opt,name=dtid,proto3" json:"dtid,omitempty"`
- Mm bool `protobuf:"varint,2,opt,name=mm,proto3" json:"mm,omitempty"`
}
-func (x *ConcludeTransactionRequest) Reset() {
- *x = ConcludeTransactionRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[52]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+func (x *GetTransactionInfoRequest) Reset() {
+ *x = GetTransactionInfoRequest{}
+ mi := &file_tabletmanagerdata_proto_msgTypes[52]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
-func (x *ConcludeTransactionRequest) String() string {
+func (x *GetTransactionInfoRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*ConcludeTransactionRequest) ProtoMessage() {}
+func (*GetTransactionInfoRequest) ProtoMessage() {}
-func (x *ConcludeTransactionRequest) ProtoReflect() protoreflect.Message {
+func (x *GetTransactionInfoRequest) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[52]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2913,49 +2806,45 @@ func (x *ConcludeTransactionRequest) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use ConcludeTransactionRequest.ProtoReflect.Descriptor instead.
-func (*ConcludeTransactionRequest) Descriptor() ([]byte, []int) {
+// Deprecated: Use GetTransactionInfoRequest.ProtoReflect.Descriptor instead.
+func (*GetTransactionInfoRequest) Descriptor() ([]byte, []int) {
return file_tabletmanagerdata_proto_rawDescGZIP(), []int{52}
}
-func (x *ConcludeTransactionRequest) GetDtid() string {
+func (x *GetTransactionInfoRequest) GetDtid() string {
if x != nil {
return x.Dtid
}
return ""
}
-func (x *ConcludeTransactionRequest) GetMm() bool {
- if x != nil {
- return x.Mm
- }
- return false
-}
-
-type ConcludeTransactionResponse struct {
+type GetTransactionInfoResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
+
+ State string `protobuf:"bytes,1,opt,name=state,proto3" json:"state,omitempty"`
+ Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
+ TimeCreated int64 `protobuf:"varint,3,opt,name=time_created,json=timeCreated,proto3" json:"time_created,omitempty"`
+ Statements []string `protobuf:"bytes,4,rep,name=statements,proto3" json:"statements,omitempty"`
}
-func (x *ConcludeTransactionResponse) Reset() {
- *x = ConcludeTransactionResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[53]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+func (x *GetTransactionInfoResponse) Reset() {
+ *x = GetTransactionInfoResponse{}
+ mi := &file_tabletmanagerdata_proto_msgTypes[53]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
-func (x *ConcludeTransactionResponse) String() string {
+func (x *GetTransactionInfoResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*ConcludeTransactionResponse) ProtoMessage() {}
+func (*GetTransactionInfoResponse) ProtoMessage() {}
-func (x *ConcludeTransactionResponse) ProtoReflect() protoreflect.Message {
+func (x *GetTransactionInfoResponse) ProtoReflect() protoreflect.Message {
mi := &file_tabletmanagerdata_proto_msgTypes[53]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2965,24 +2854,139 @@ func (x *ConcludeTransactionResponse) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use ConcludeTransactionResponse.ProtoReflect.Descriptor instead.
-func (*ConcludeTransactionResponse) Descriptor() ([]byte, []int) {
+// Deprecated: Use GetTransactionInfoResponse.ProtoReflect.Descriptor instead.
+func (*GetTransactionInfoResponse) Descriptor() ([]byte, []int) {
return file_tabletmanagerdata_proto_rawDescGZIP(), []int{53}
}
-type MysqlHostMetricsRequest struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
+func (x *GetTransactionInfoResponse) GetState() string {
+ if x != nil {
+ return x.State
+ }
+ return ""
}
-func (x *MysqlHostMetricsRequest) Reset() {
- *x = MysqlHostMetricsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[54]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
+func (x *GetTransactionInfoResponse) GetMessage() string {
+ if x != nil {
+ return x.Message
}
+ return ""
+}
+
+func (x *GetTransactionInfoResponse) GetTimeCreated() int64 {
+ if x != nil {
+ return x.TimeCreated
+ }
+ return 0
+}
+
+func (x *GetTransactionInfoResponse) GetStatements() []string {
+ if x != nil {
+ return x.Statements
+ }
+ return nil
+}
+
+type ConcludeTransactionRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Dtid string `protobuf:"bytes,1,opt,name=dtid,proto3" json:"dtid,omitempty"`
+ Mm bool `protobuf:"varint,2,opt,name=mm,proto3" json:"mm,omitempty"`
+}
+
+func (x *ConcludeTransactionRequest) Reset() {
+ *x = ConcludeTransactionRequest{}
+ mi := &file_tabletmanagerdata_proto_msgTypes[54]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ConcludeTransactionRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ConcludeTransactionRequest) ProtoMessage() {}
+
+func (x *ConcludeTransactionRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_tabletmanagerdata_proto_msgTypes[54]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ConcludeTransactionRequest.ProtoReflect.Descriptor instead.
+func (*ConcludeTransactionRequest) Descriptor() ([]byte, []int) {
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{54}
+}
+
+func (x *ConcludeTransactionRequest) GetDtid() string {
+ if x != nil {
+ return x.Dtid
+ }
+ return ""
+}
+
+func (x *ConcludeTransactionRequest) GetMm() bool {
+ if x != nil {
+ return x.Mm
+ }
+ return false
+}
+
+type ConcludeTransactionResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *ConcludeTransactionResponse) Reset() {
+ *x = ConcludeTransactionResponse{}
+ mi := &file_tabletmanagerdata_proto_msgTypes[55]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ConcludeTransactionResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ConcludeTransactionResponse) ProtoMessage() {}
+
+func (x *ConcludeTransactionResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_tabletmanagerdata_proto_msgTypes[55]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ConcludeTransactionResponse.ProtoReflect.Descriptor instead.
+func (*ConcludeTransactionResponse) Descriptor() ([]byte, []int) {
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{55}
+}
+
+type MysqlHostMetricsRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *MysqlHostMetricsRequest) Reset() {
+ *x = MysqlHostMetricsRequest{}
+ mi := &file_tabletmanagerdata_proto_msgTypes[56]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MysqlHostMetricsRequest) String() string {
@@ -2992,8 +2996,8 @@ func (x *MysqlHostMetricsRequest) String() string {
func (*MysqlHostMetricsRequest) ProtoMessage() {}
func (x *MysqlHostMetricsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[54]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[56]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3005,7 +3009,7 @@ func (x *MysqlHostMetricsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use MysqlHostMetricsRequest.ProtoReflect.Descriptor instead.
func (*MysqlHostMetricsRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{54}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{56}
}
type MysqlHostMetricsResponse struct {
@@ -3018,11 +3022,9 @@ type MysqlHostMetricsResponse struct {
func (x *MysqlHostMetricsResponse) Reset() {
*x = MysqlHostMetricsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[55]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[57]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MysqlHostMetricsResponse) String() string {
@@ -3032,8 +3034,8 @@ func (x *MysqlHostMetricsResponse) String() string {
func (*MysqlHostMetricsResponse) ProtoMessage() {}
func (x *MysqlHostMetricsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[55]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[57]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3045,7 +3047,7 @@ func (x *MysqlHostMetricsResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use MysqlHostMetricsResponse.ProtoReflect.Descriptor instead.
func (*MysqlHostMetricsResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{55}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{57}
}
func (x *MysqlHostMetricsResponse) GetHostMetrics() *mysqlctl.HostMetricsResponse {
@@ -3063,11 +3065,9 @@ type ReplicationStatusRequest struct {
func (x *ReplicationStatusRequest) Reset() {
*x = ReplicationStatusRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[56]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[58]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReplicationStatusRequest) String() string {
@@ -3077,8 +3077,8 @@ func (x *ReplicationStatusRequest) String() string {
func (*ReplicationStatusRequest) ProtoMessage() {}
func (x *ReplicationStatusRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[56]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[58]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3090,7 +3090,7 @@ func (x *ReplicationStatusRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ReplicationStatusRequest.ProtoReflect.Descriptor instead.
func (*ReplicationStatusRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{56}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{58}
}
type ReplicationStatusResponse struct {
@@ -3103,11 +3103,9 @@ type ReplicationStatusResponse struct {
func (x *ReplicationStatusResponse) Reset() {
*x = ReplicationStatusResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[57]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[59]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReplicationStatusResponse) String() string {
@@ -3117,8 +3115,8 @@ func (x *ReplicationStatusResponse) String() string {
func (*ReplicationStatusResponse) ProtoMessage() {}
func (x *ReplicationStatusResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[57]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[59]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3130,7 +3128,7 @@ func (x *ReplicationStatusResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ReplicationStatusResponse.ProtoReflect.Descriptor instead.
func (*ReplicationStatusResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{57}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{59}
}
func (x *ReplicationStatusResponse) GetStatus() *replicationdata.Status {
@@ -3148,11 +3146,9 @@ type PrimaryStatusRequest struct {
func (x *PrimaryStatusRequest) Reset() {
*x = PrimaryStatusRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[58]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[60]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *PrimaryStatusRequest) String() string {
@@ -3162,8 +3158,8 @@ func (x *PrimaryStatusRequest) String() string {
func (*PrimaryStatusRequest) ProtoMessage() {}
func (x *PrimaryStatusRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[58]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[60]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3175,7 +3171,7 @@ func (x *PrimaryStatusRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use PrimaryStatusRequest.ProtoReflect.Descriptor instead.
func (*PrimaryStatusRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{58}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{60}
}
type PrimaryStatusResponse struct {
@@ -3188,11 +3184,9 @@ type PrimaryStatusResponse struct {
func (x *PrimaryStatusResponse) Reset() {
*x = PrimaryStatusResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[59]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[61]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *PrimaryStatusResponse) String() string {
@@ -3202,8 +3196,8 @@ func (x *PrimaryStatusResponse) String() string {
func (*PrimaryStatusResponse) ProtoMessage() {}
func (x *PrimaryStatusResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[59]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[61]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3215,7 +3209,7 @@ func (x *PrimaryStatusResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use PrimaryStatusResponse.ProtoReflect.Descriptor instead.
func (*PrimaryStatusResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{59}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{61}
}
func (x *PrimaryStatusResponse) GetStatus() *replicationdata.PrimaryStatus {
@@ -3233,11 +3227,9 @@ type PrimaryPositionRequest struct {
func (x *PrimaryPositionRequest) Reset() {
*x = PrimaryPositionRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[60]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[62]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *PrimaryPositionRequest) String() string {
@@ -3247,8 +3239,8 @@ func (x *PrimaryPositionRequest) String() string {
func (*PrimaryPositionRequest) ProtoMessage() {}
func (x *PrimaryPositionRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[60]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[62]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3260,7 +3252,7 @@ func (x *PrimaryPositionRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use PrimaryPositionRequest.ProtoReflect.Descriptor instead.
func (*PrimaryPositionRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{60}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{62}
}
type PrimaryPositionResponse struct {
@@ -3273,11 +3265,9 @@ type PrimaryPositionResponse struct {
func (x *PrimaryPositionResponse) Reset() {
*x = PrimaryPositionResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[61]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[63]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *PrimaryPositionResponse) String() string {
@@ -3287,8 +3277,8 @@ func (x *PrimaryPositionResponse) String() string {
func (*PrimaryPositionResponse) ProtoMessage() {}
func (x *PrimaryPositionResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[61]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[63]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3300,7 +3290,7 @@ func (x *PrimaryPositionResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use PrimaryPositionResponse.ProtoReflect.Descriptor instead.
func (*PrimaryPositionResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{61}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{63}
}
func (x *PrimaryPositionResponse) GetPosition() string {
@@ -3320,11 +3310,9 @@ type WaitForPositionRequest struct {
func (x *WaitForPositionRequest) Reset() {
*x = WaitForPositionRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[62]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[64]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *WaitForPositionRequest) String() string {
@@ -3334,8 +3322,8 @@ func (x *WaitForPositionRequest) String() string {
func (*WaitForPositionRequest) ProtoMessage() {}
func (x *WaitForPositionRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[62]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[64]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3347,7 +3335,7 @@ func (x *WaitForPositionRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use WaitForPositionRequest.ProtoReflect.Descriptor instead.
func (*WaitForPositionRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{62}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{64}
}
func (x *WaitForPositionRequest) GetPosition() string {
@@ -3365,11 +3353,9 @@ type WaitForPositionResponse struct {
func (x *WaitForPositionResponse) Reset() {
*x = WaitForPositionResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[63]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[65]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *WaitForPositionResponse) String() string {
@@ -3379,8 +3365,8 @@ func (x *WaitForPositionResponse) String() string {
func (*WaitForPositionResponse) ProtoMessage() {}
func (x *WaitForPositionResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[63]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[65]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3392,7 +3378,7 @@ func (x *WaitForPositionResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use WaitForPositionResponse.ProtoReflect.Descriptor instead.
func (*WaitForPositionResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{63}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{65}
}
type StopReplicationRequest struct {
@@ -3403,11 +3389,9 @@ type StopReplicationRequest struct {
func (x *StopReplicationRequest) Reset() {
*x = StopReplicationRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[64]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[66]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StopReplicationRequest) String() string {
@@ -3417,8 +3401,8 @@ func (x *StopReplicationRequest) String() string {
func (*StopReplicationRequest) ProtoMessage() {}
func (x *StopReplicationRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[64]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[66]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3430,7 +3414,7 @@ func (x *StopReplicationRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use StopReplicationRequest.ProtoReflect.Descriptor instead.
func (*StopReplicationRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{64}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{66}
}
type StopReplicationResponse struct {
@@ -3441,11 +3425,9 @@ type StopReplicationResponse struct {
func (x *StopReplicationResponse) Reset() {
*x = StopReplicationResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[65]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[67]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StopReplicationResponse) String() string {
@@ -3455,8 +3437,8 @@ func (x *StopReplicationResponse) String() string {
func (*StopReplicationResponse) ProtoMessage() {}
func (x *StopReplicationResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[65]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[67]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3468,7 +3450,7 @@ func (x *StopReplicationResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use StopReplicationResponse.ProtoReflect.Descriptor instead.
func (*StopReplicationResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{65}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{67}
}
type StopReplicationMinimumRequest struct {
@@ -3482,11 +3464,9 @@ type StopReplicationMinimumRequest struct {
func (x *StopReplicationMinimumRequest) Reset() {
*x = StopReplicationMinimumRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[66]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[68]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StopReplicationMinimumRequest) String() string {
@@ -3496,8 +3476,8 @@ func (x *StopReplicationMinimumRequest) String() string {
func (*StopReplicationMinimumRequest) ProtoMessage() {}
func (x *StopReplicationMinimumRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[66]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[68]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3509,7 +3489,7 @@ func (x *StopReplicationMinimumRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use StopReplicationMinimumRequest.ProtoReflect.Descriptor instead.
func (*StopReplicationMinimumRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{66}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{68}
}
func (x *StopReplicationMinimumRequest) GetPosition() string {
@@ -3536,11 +3516,9 @@ type StopReplicationMinimumResponse struct {
func (x *StopReplicationMinimumResponse) Reset() {
*x = StopReplicationMinimumResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[67]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[69]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StopReplicationMinimumResponse) String() string {
@@ -3550,8 +3528,8 @@ func (x *StopReplicationMinimumResponse) String() string {
func (*StopReplicationMinimumResponse) ProtoMessage() {}
func (x *StopReplicationMinimumResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[67]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[69]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3563,7 +3541,7 @@ func (x *StopReplicationMinimumResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use StopReplicationMinimumResponse.ProtoReflect.Descriptor instead.
func (*StopReplicationMinimumResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{67}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{69}
}
func (x *StopReplicationMinimumResponse) GetPosition() string {
@@ -3583,11 +3561,9 @@ type StartReplicationRequest struct {
func (x *StartReplicationRequest) Reset() {
*x = StartReplicationRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[68]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[70]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StartReplicationRequest) String() string {
@@ -3597,8 +3573,8 @@ func (x *StartReplicationRequest) String() string {
func (*StartReplicationRequest) ProtoMessage() {}
func (x *StartReplicationRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[68]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[70]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3610,7 +3586,7 @@ func (x *StartReplicationRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use StartReplicationRequest.ProtoReflect.Descriptor instead.
func (*StartReplicationRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{68}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{70}
}
func (x *StartReplicationRequest) GetSemiSync() bool {
@@ -3628,11 +3604,9 @@ type StartReplicationResponse struct {
func (x *StartReplicationResponse) Reset() {
*x = StartReplicationResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[69]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[71]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StartReplicationResponse) String() string {
@@ -3642,8 +3616,8 @@ func (x *StartReplicationResponse) String() string {
func (*StartReplicationResponse) ProtoMessage() {}
func (x *StartReplicationResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[69]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[71]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3655,7 +3629,7 @@ func (x *StartReplicationResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use StartReplicationResponse.ProtoReflect.Descriptor instead.
func (*StartReplicationResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{69}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{71}
}
type StartReplicationUntilAfterRequest struct {
@@ -3669,11 +3643,9 @@ type StartReplicationUntilAfterRequest struct {
func (x *StartReplicationUntilAfterRequest) Reset() {
*x = StartReplicationUntilAfterRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[70]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[72]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StartReplicationUntilAfterRequest) String() string {
@@ -3683,8 +3655,8 @@ func (x *StartReplicationUntilAfterRequest) String() string {
func (*StartReplicationUntilAfterRequest) ProtoMessage() {}
func (x *StartReplicationUntilAfterRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[70]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[72]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3696,7 +3668,7 @@ func (x *StartReplicationUntilAfterRequest) ProtoReflect() protoreflect.Message
// Deprecated: Use StartReplicationUntilAfterRequest.ProtoReflect.Descriptor instead.
func (*StartReplicationUntilAfterRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{70}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{72}
}
func (x *StartReplicationUntilAfterRequest) GetPosition() string {
@@ -3721,11 +3693,9 @@ type StartReplicationUntilAfterResponse struct {
func (x *StartReplicationUntilAfterResponse) Reset() {
*x = StartReplicationUntilAfterResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[71]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[73]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StartReplicationUntilAfterResponse) String() string {
@@ -3735,8 +3705,8 @@ func (x *StartReplicationUntilAfterResponse) String() string {
func (*StartReplicationUntilAfterResponse) ProtoMessage() {}
func (x *StartReplicationUntilAfterResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[71]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[73]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3748,7 +3718,7 @@ func (x *StartReplicationUntilAfterResponse) ProtoReflect() protoreflect.Message
// Deprecated: Use StartReplicationUntilAfterResponse.ProtoReflect.Descriptor instead.
func (*StartReplicationUntilAfterResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{71}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{73}
}
type GetReplicasRequest struct {
@@ -3759,11 +3729,9 @@ type GetReplicasRequest struct {
func (x *GetReplicasRequest) Reset() {
*x = GetReplicasRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[72]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[74]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetReplicasRequest) String() string {
@@ -3773,8 +3741,8 @@ func (x *GetReplicasRequest) String() string {
func (*GetReplicasRequest) ProtoMessage() {}
func (x *GetReplicasRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[72]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[74]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3786,7 +3754,7 @@ func (x *GetReplicasRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetReplicasRequest.ProtoReflect.Descriptor instead.
func (*GetReplicasRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{72}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{74}
}
type GetReplicasResponse struct {
@@ -3799,11 +3767,9 @@ type GetReplicasResponse struct {
func (x *GetReplicasResponse) Reset() {
*x = GetReplicasResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[73]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[75]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetReplicasResponse) String() string {
@@ -3813,8 +3779,8 @@ func (x *GetReplicasResponse) String() string {
func (*GetReplicasResponse) ProtoMessage() {}
func (x *GetReplicasResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[73]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[75]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3826,7 +3792,7 @@ func (x *GetReplicasResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetReplicasResponse.ProtoReflect.Descriptor instead.
func (*GetReplicasResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{73}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{75}
}
func (x *GetReplicasResponse) GetAddrs() []string {
@@ -3844,11 +3810,9 @@ type ResetReplicationRequest struct {
func (x *ResetReplicationRequest) Reset() {
*x = ResetReplicationRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[74]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[76]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ResetReplicationRequest) String() string {
@@ -3858,8 +3822,8 @@ func (x *ResetReplicationRequest) String() string {
func (*ResetReplicationRequest) ProtoMessage() {}
func (x *ResetReplicationRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[74]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[76]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3871,7 +3835,7 @@ func (x *ResetReplicationRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ResetReplicationRequest.ProtoReflect.Descriptor instead.
func (*ResetReplicationRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{74}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{76}
}
type ResetReplicationResponse struct {
@@ -3882,11 +3846,9 @@ type ResetReplicationResponse struct {
func (x *ResetReplicationResponse) Reset() {
*x = ResetReplicationResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[75]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[77]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ResetReplicationResponse) String() string {
@@ -3896,8 +3858,8 @@ func (x *ResetReplicationResponse) String() string {
func (*ResetReplicationResponse) ProtoMessage() {}
func (x *ResetReplicationResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[75]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[77]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3909,7 +3871,7 @@ func (x *ResetReplicationResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ResetReplicationResponse.ProtoReflect.Descriptor instead.
func (*ResetReplicationResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{75}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{77}
}
type VReplicationExecRequest struct {
@@ -3922,11 +3884,9 @@ type VReplicationExecRequest struct {
func (x *VReplicationExecRequest) Reset() {
*x = VReplicationExecRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[76]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[78]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VReplicationExecRequest) String() string {
@@ -3936,8 +3896,8 @@ func (x *VReplicationExecRequest) String() string {
func (*VReplicationExecRequest) ProtoMessage() {}
func (x *VReplicationExecRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[76]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[78]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3949,7 +3909,7 @@ func (x *VReplicationExecRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use VReplicationExecRequest.ProtoReflect.Descriptor instead.
func (*VReplicationExecRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{76}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{78}
}
func (x *VReplicationExecRequest) GetQuery() string {
@@ -3969,11 +3929,9 @@ type VReplicationExecResponse struct {
func (x *VReplicationExecResponse) Reset() {
*x = VReplicationExecResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[77]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[79]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VReplicationExecResponse) String() string {
@@ -3983,8 +3941,8 @@ func (x *VReplicationExecResponse) String() string {
func (*VReplicationExecResponse) ProtoMessage() {}
func (x *VReplicationExecResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[77]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[79]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3996,7 +3954,7 @@ func (x *VReplicationExecResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use VReplicationExecResponse.ProtoReflect.Descriptor instead.
func (*VReplicationExecResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{77}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{79}
}
func (x *VReplicationExecResponse) GetResult() *query.QueryResult {
@@ -4017,11 +3975,9 @@ type VReplicationWaitForPosRequest struct {
func (x *VReplicationWaitForPosRequest) Reset() {
*x = VReplicationWaitForPosRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[78]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[80]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VReplicationWaitForPosRequest) String() string {
@@ -4031,8 +3987,8 @@ func (x *VReplicationWaitForPosRequest) String() string {
func (*VReplicationWaitForPosRequest) ProtoMessage() {}
func (x *VReplicationWaitForPosRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[78]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[80]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4044,7 +4000,7 @@ func (x *VReplicationWaitForPosRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use VReplicationWaitForPosRequest.ProtoReflect.Descriptor instead.
func (*VReplicationWaitForPosRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{78}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{80}
}
func (x *VReplicationWaitForPosRequest) GetId() int32 {
@@ -4069,11 +4025,9 @@ type VReplicationWaitForPosResponse struct {
func (x *VReplicationWaitForPosResponse) Reset() {
*x = VReplicationWaitForPosResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[79]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[81]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VReplicationWaitForPosResponse) String() string {
@@ -4083,8 +4037,8 @@ func (x *VReplicationWaitForPosResponse) String() string {
func (*VReplicationWaitForPosResponse) ProtoMessage() {}
func (x *VReplicationWaitForPosResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[79]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[81]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4096,7 +4050,7 @@ func (x *VReplicationWaitForPosResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use VReplicationWaitForPosResponse.ProtoReflect.Descriptor instead.
func (*VReplicationWaitForPosResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{79}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{81}
}
type InitPrimaryRequest struct {
@@ -4109,11 +4063,9 @@ type InitPrimaryRequest struct {
func (x *InitPrimaryRequest) Reset() {
*x = InitPrimaryRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[80]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[82]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *InitPrimaryRequest) String() string {
@@ -4123,8 +4075,8 @@ func (x *InitPrimaryRequest) String() string {
func (*InitPrimaryRequest) ProtoMessage() {}
func (x *InitPrimaryRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[80]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[82]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4136,7 +4088,7 @@ func (x *InitPrimaryRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use InitPrimaryRequest.ProtoReflect.Descriptor instead.
func (*InitPrimaryRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{80}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{82}
}
func (x *InitPrimaryRequest) GetSemiSync() bool {
@@ -4156,11 +4108,9 @@ type InitPrimaryResponse struct {
func (x *InitPrimaryResponse) Reset() {
*x = InitPrimaryResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[81]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[83]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *InitPrimaryResponse) String() string {
@@ -4170,8 +4120,8 @@ func (x *InitPrimaryResponse) String() string {
func (*InitPrimaryResponse) ProtoMessage() {}
func (x *InitPrimaryResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[81]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[83]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4183,7 +4133,7 @@ func (x *InitPrimaryResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use InitPrimaryResponse.ProtoReflect.Descriptor instead.
func (*InitPrimaryResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{81}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{83}
}
func (x *InitPrimaryResponse) GetPosition() string {
@@ -4206,11 +4156,9 @@ type PopulateReparentJournalRequest struct {
func (x *PopulateReparentJournalRequest) Reset() {
*x = PopulateReparentJournalRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[82]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[84]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *PopulateReparentJournalRequest) String() string {
@@ -4220,8 +4168,8 @@ func (x *PopulateReparentJournalRequest) String() string {
func (*PopulateReparentJournalRequest) ProtoMessage() {}
func (x *PopulateReparentJournalRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[82]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[84]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4233,7 +4181,7 @@ func (x *PopulateReparentJournalRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use PopulateReparentJournalRequest.ProtoReflect.Descriptor instead.
func (*PopulateReparentJournalRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{82}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{84}
}
func (x *PopulateReparentJournalRequest) GetTimeCreatedNs() int64 {
@@ -4272,11 +4220,9 @@ type PopulateReparentJournalResponse struct {
func (x *PopulateReparentJournalResponse) Reset() {
*x = PopulateReparentJournalResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[83]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[85]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *PopulateReparentJournalResponse) String() string {
@@ -4286,8 +4232,8 @@ func (x *PopulateReparentJournalResponse) String() string {
func (*PopulateReparentJournalResponse) ProtoMessage() {}
func (x *PopulateReparentJournalResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[83]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[85]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4299,7 +4245,88 @@ func (x *PopulateReparentJournalResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use PopulateReparentJournalResponse.ProtoReflect.Descriptor instead.
func (*PopulateReparentJournalResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{83}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{85}
+}
+
+type ReadReparentJournalInfoRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *ReadReparentJournalInfoRequest) Reset() {
+ *x = ReadReparentJournalInfoRequest{}
+ mi := &file_tabletmanagerdata_proto_msgTypes[86]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ReadReparentJournalInfoRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ReadReparentJournalInfoRequest) ProtoMessage() {}
+
+func (x *ReadReparentJournalInfoRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_tabletmanagerdata_proto_msgTypes[86]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ReadReparentJournalInfoRequest.ProtoReflect.Descriptor instead.
+func (*ReadReparentJournalInfoRequest) Descriptor() ([]byte, []int) {
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{86}
+}
+
+type ReadReparentJournalInfoResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Length int32 `protobuf:"varint,1,opt,name=length,proto3" json:"length,omitempty"`
+}
+
+func (x *ReadReparentJournalInfoResponse) Reset() {
+ *x = ReadReparentJournalInfoResponse{}
+ mi := &file_tabletmanagerdata_proto_msgTypes[87]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ReadReparentJournalInfoResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ReadReparentJournalInfoResponse) ProtoMessage() {}
+
+func (x *ReadReparentJournalInfoResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_tabletmanagerdata_proto_msgTypes[87]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ReadReparentJournalInfoResponse.ProtoReflect.Descriptor instead.
+func (*ReadReparentJournalInfoResponse) Descriptor() ([]byte, []int) {
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{87}
+}
+
+func (x *ReadReparentJournalInfoResponse) GetLength() int32 {
+ if x != nil {
+ return x.Length
+ }
+ return 0
}
type InitReplicaRequest struct {
@@ -4315,11 +4342,9 @@ type InitReplicaRequest struct {
func (x *InitReplicaRequest) Reset() {
*x = InitReplicaRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[84]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[88]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *InitReplicaRequest) String() string {
@@ -4329,8 +4354,8 @@ func (x *InitReplicaRequest) String() string {
func (*InitReplicaRequest) ProtoMessage() {}
func (x *InitReplicaRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[84]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[88]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4342,7 +4367,7 @@ func (x *InitReplicaRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use InitReplicaRequest.ProtoReflect.Descriptor instead.
func (*InitReplicaRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{84}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{88}
}
func (x *InitReplicaRequest) GetParent() *topodata.TabletAlias {
@@ -4381,11 +4406,9 @@ type InitReplicaResponse struct {
func (x *InitReplicaResponse) Reset() {
*x = InitReplicaResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[85]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[89]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *InitReplicaResponse) String() string {
@@ -4395,8 +4418,8 @@ func (x *InitReplicaResponse) String() string {
func (*InitReplicaResponse) ProtoMessage() {}
func (x *InitReplicaResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[85]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[89]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4408,7 +4431,7 @@ func (x *InitReplicaResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use InitReplicaResponse.ProtoReflect.Descriptor instead.
func (*InitReplicaResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{85}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{89}
}
type DemotePrimaryRequest struct {
@@ -4419,11 +4442,9 @@ type DemotePrimaryRequest struct {
func (x *DemotePrimaryRequest) Reset() {
*x = DemotePrimaryRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[86]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[90]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *DemotePrimaryRequest) String() string {
@@ -4433,8 +4454,8 @@ func (x *DemotePrimaryRequest) String() string {
func (*DemotePrimaryRequest) ProtoMessage() {}
func (x *DemotePrimaryRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[86]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[90]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4446,7 +4467,7 @@ func (x *DemotePrimaryRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use DemotePrimaryRequest.ProtoReflect.Descriptor instead.
func (*DemotePrimaryRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{86}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{90}
}
type DemotePrimaryResponse struct {
@@ -4460,11 +4481,9 @@ type DemotePrimaryResponse struct {
func (x *DemotePrimaryResponse) Reset() {
*x = DemotePrimaryResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[87]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[91]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *DemotePrimaryResponse) String() string {
@@ -4474,8 +4493,8 @@ func (x *DemotePrimaryResponse) String() string {
func (*DemotePrimaryResponse) ProtoMessage() {}
func (x *DemotePrimaryResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[87]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[91]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4487,7 +4506,7 @@ func (x *DemotePrimaryResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use DemotePrimaryResponse.ProtoReflect.Descriptor instead.
func (*DemotePrimaryResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{87}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{91}
}
func (x *DemotePrimaryResponse) GetPrimaryStatus() *replicationdata.PrimaryStatus {
@@ -4507,11 +4526,9 @@ type UndoDemotePrimaryRequest struct {
func (x *UndoDemotePrimaryRequest) Reset() {
*x = UndoDemotePrimaryRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[88]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[92]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UndoDemotePrimaryRequest) String() string {
@@ -4521,8 +4538,8 @@ func (x *UndoDemotePrimaryRequest) String() string {
func (*UndoDemotePrimaryRequest) ProtoMessage() {}
func (x *UndoDemotePrimaryRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[88]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[92]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4534,7 +4551,7 @@ func (x *UndoDemotePrimaryRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use UndoDemotePrimaryRequest.ProtoReflect.Descriptor instead.
func (*UndoDemotePrimaryRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{88}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{92}
}
func (x *UndoDemotePrimaryRequest) GetSemiSync() bool {
@@ -4552,11 +4569,9 @@ type UndoDemotePrimaryResponse struct {
func (x *UndoDemotePrimaryResponse) Reset() {
*x = UndoDemotePrimaryResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[89]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[93]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UndoDemotePrimaryResponse) String() string {
@@ -4566,8 +4581,8 @@ func (x *UndoDemotePrimaryResponse) String() string {
func (*UndoDemotePrimaryResponse) ProtoMessage() {}
func (x *UndoDemotePrimaryResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[89]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[93]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4579,7 +4594,7 @@ func (x *UndoDemotePrimaryResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use UndoDemotePrimaryResponse.ProtoReflect.Descriptor instead.
func (*UndoDemotePrimaryResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{89}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{93}
}
type ReplicaWasPromotedRequest struct {
@@ -4590,11 +4605,9 @@ type ReplicaWasPromotedRequest struct {
func (x *ReplicaWasPromotedRequest) Reset() {
*x = ReplicaWasPromotedRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[90]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[94]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReplicaWasPromotedRequest) String() string {
@@ -4604,8 +4617,8 @@ func (x *ReplicaWasPromotedRequest) String() string {
func (*ReplicaWasPromotedRequest) ProtoMessage() {}
func (x *ReplicaWasPromotedRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[90]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[94]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4617,7 +4630,7 @@ func (x *ReplicaWasPromotedRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ReplicaWasPromotedRequest.ProtoReflect.Descriptor instead.
func (*ReplicaWasPromotedRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{90}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{94}
}
type ReplicaWasPromotedResponse struct {
@@ -4628,11 +4641,9 @@ type ReplicaWasPromotedResponse struct {
func (x *ReplicaWasPromotedResponse) Reset() {
*x = ReplicaWasPromotedResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[91]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[95]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReplicaWasPromotedResponse) String() string {
@@ -4642,8 +4653,8 @@ func (x *ReplicaWasPromotedResponse) String() string {
func (*ReplicaWasPromotedResponse) ProtoMessage() {}
func (x *ReplicaWasPromotedResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[91]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[95]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4655,7 +4666,7 @@ func (x *ReplicaWasPromotedResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ReplicaWasPromotedResponse.ProtoReflect.Descriptor instead.
func (*ReplicaWasPromotedResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{91}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{95}
}
type ResetReplicationParametersRequest struct {
@@ -4666,11 +4677,9 @@ type ResetReplicationParametersRequest struct {
func (x *ResetReplicationParametersRequest) Reset() {
*x = ResetReplicationParametersRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[92]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[96]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ResetReplicationParametersRequest) String() string {
@@ -4680,8 +4689,8 @@ func (x *ResetReplicationParametersRequest) String() string {
func (*ResetReplicationParametersRequest) ProtoMessage() {}
func (x *ResetReplicationParametersRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[92]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[96]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4693,7 +4702,7 @@ func (x *ResetReplicationParametersRequest) ProtoReflect() protoreflect.Message
// Deprecated: Use ResetReplicationParametersRequest.ProtoReflect.Descriptor instead.
func (*ResetReplicationParametersRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{92}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{96}
}
type ResetReplicationParametersResponse struct {
@@ -4704,11 +4713,9 @@ type ResetReplicationParametersResponse struct {
func (x *ResetReplicationParametersResponse) Reset() {
*x = ResetReplicationParametersResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[93]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[97]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ResetReplicationParametersResponse) String() string {
@@ -4718,8 +4725,8 @@ func (x *ResetReplicationParametersResponse) String() string {
func (*ResetReplicationParametersResponse) ProtoMessage() {}
func (x *ResetReplicationParametersResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[93]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[97]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4731,7 +4738,7 @@ func (x *ResetReplicationParametersResponse) ProtoReflect() protoreflect.Message
// Deprecated: Use ResetReplicationParametersResponse.ProtoReflect.Descriptor instead.
func (*ResetReplicationParametersResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{93}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{97}
}
type FullStatusRequest struct {
@@ -4742,11 +4749,9 @@ type FullStatusRequest struct {
func (x *FullStatusRequest) Reset() {
*x = FullStatusRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[94]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[98]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *FullStatusRequest) String() string {
@@ -4756,8 +4761,8 @@ func (x *FullStatusRequest) String() string {
func (*FullStatusRequest) ProtoMessage() {}
func (x *FullStatusRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[94]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[98]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4769,7 +4774,7 @@ func (x *FullStatusRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use FullStatusRequest.ProtoReflect.Descriptor instead.
func (*FullStatusRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{94}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{98}
}
type FullStatusResponse struct {
@@ -4782,11 +4787,9 @@ type FullStatusResponse struct {
func (x *FullStatusResponse) Reset() {
*x = FullStatusResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[95]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[99]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *FullStatusResponse) String() string {
@@ -4796,8 +4799,8 @@ func (x *FullStatusResponse) String() string {
func (*FullStatusResponse) ProtoMessage() {}
func (x *FullStatusResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[95]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[99]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4809,7 +4812,7 @@ func (x *FullStatusResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use FullStatusResponse.ProtoReflect.Descriptor instead.
func (*FullStatusResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{95}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{99}
}
func (x *FullStatusResponse) GetStatus() *replicationdata.FullStatus {
@@ -4834,11 +4837,9 @@ type SetReplicationSourceRequest struct {
func (x *SetReplicationSourceRequest) Reset() {
*x = SetReplicationSourceRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[96]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[100]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SetReplicationSourceRequest) String() string {
@@ -4848,8 +4849,8 @@ func (x *SetReplicationSourceRequest) String() string {
func (*SetReplicationSourceRequest) ProtoMessage() {}
func (x *SetReplicationSourceRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[96]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[100]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4861,7 +4862,7 @@ func (x *SetReplicationSourceRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use SetReplicationSourceRequest.ProtoReflect.Descriptor instead.
func (*SetReplicationSourceRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{96}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{100}
}
func (x *SetReplicationSourceRequest) GetParent() *topodata.TabletAlias {
@@ -4914,11 +4915,9 @@ type SetReplicationSourceResponse struct {
func (x *SetReplicationSourceResponse) Reset() {
*x = SetReplicationSourceResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[97]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[101]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SetReplicationSourceResponse) String() string {
@@ -4928,8 +4927,8 @@ func (x *SetReplicationSourceResponse) String() string {
func (*SetReplicationSourceResponse) ProtoMessage() {}
func (x *SetReplicationSourceResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[97]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[101]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4941,7 +4940,7 @@ func (x *SetReplicationSourceResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use SetReplicationSourceResponse.ProtoReflect.Descriptor instead.
func (*SetReplicationSourceResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{97}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{101}
}
type ReplicaWasRestartedRequest struct {
@@ -4955,11 +4954,9 @@ type ReplicaWasRestartedRequest struct {
func (x *ReplicaWasRestartedRequest) Reset() {
*x = ReplicaWasRestartedRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[98]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[102]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReplicaWasRestartedRequest) String() string {
@@ -4969,8 +4966,8 @@ func (x *ReplicaWasRestartedRequest) String() string {
func (*ReplicaWasRestartedRequest) ProtoMessage() {}
func (x *ReplicaWasRestartedRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[98]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[102]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4982,7 +4979,7 @@ func (x *ReplicaWasRestartedRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ReplicaWasRestartedRequest.ProtoReflect.Descriptor instead.
func (*ReplicaWasRestartedRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{98}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{102}
}
func (x *ReplicaWasRestartedRequest) GetParent() *topodata.TabletAlias {
@@ -5000,11 +4997,9 @@ type ReplicaWasRestartedResponse struct {
func (x *ReplicaWasRestartedResponse) Reset() {
*x = ReplicaWasRestartedResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[99]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[103]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReplicaWasRestartedResponse) String() string {
@@ -5014,8 +5009,8 @@ func (x *ReplicaWasRestartedResponse) String() string {
func (*ReplicaWasRestartedResponse) ProtoMessage() {}
func (x *ReplicaWasRestartedResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[99]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[103]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5027,7 +5022,7 @@ func (x *ReplicaWasRestartedResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ReplicaWasRestartedResponse.ProtoReflect.Descriptor instead.
func (*ReplicaWasRestartedResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{99}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{103}
}
type StopReplicationAndGetStatusRequest struct {
@@ -5040,11 +5035,9 @@ type StopReplicationAndGetStatusRequest struct {
func (x *StopReplicationAndGetStatusRequest) Reset() {
*x = StopReplicationAndGetStatusRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[100]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[104]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StopReplicationAndGetStatusRequest) String() string {
@@ -5054,8 +5047,8 @@ func (x *StopReplicationAndGetStatusRequest) String() string {
func (*StopReplicationAndGetStatusRequest) ProtoMessage() {}
func (x *StopReplicationAndGetStatusRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[100]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[104]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5067,7 +5060,7 @@ func (x *StopReplicationAndGetStatusRequest) ProtoReflect() protoreflect.Message
// Deprecated: Use StopReplicationAndGetStatusRequest.ProtoReflect.Descriptor instead.
func (*StopReplicationAndGetStatusRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{100}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{104}
}
func (x *StopReplicationAndGetStatusRequest) GetStopReplicationMode() replicationdata.StopReplicationMode {
@@ -5088,11 +5081,9 @@ type StopReplicationAndGetStatusResponse struct {
func (x *StopReplicationAndGetStatusResponse) Reset() {
*x = StopReplicationAndGetStatusResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[101]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[105]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StopReplicationAndGetStatusResponse) String() string {
@@ -5102,8 +5093,8 @@ func (x *StopReplicationAndGetStatusResponse) String() string {
func (*StopReplicationAndGetStatusResponse) ProtoMessage() {}
func (x *StopReplicationAndGetStatusResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[101]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[105]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5115,7 +5106,7 @@ func (x *StopReplicationAndGetStatusResponse) ProtoReflect() protoreflect.Messag
// Deprecated: Use StopReplicationAndGetStatusResponse.ProtoReflect.Descriptor instead.
func (*StopReplicationAndGetStatusResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{101}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{105}
}
func (x *StopReplicationAndGetStatusResponse) GetStatus() *replicationdata.StopReplicationStatus {
@@ -5135,11 +5126,9 @@ type PromoteReplicaRequest struct {
func (x *PromoteReplicaRequest) Reset() {
*x = PromoteReplicaRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[102]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[106]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *PromoteReplicaRequest) String() string {
@@ -5149,8 +5138,8 @@ func (x *PromoteReplicaRequest) String() string {
func (*PromoteReplicaRequest) ProtoMessage() {}
func (x *PromoteReplicaRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[102]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[106]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5162,7 +5151,7 @@ func (x *PromoteReplicaRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use PromoteReplicaRequest.ProtoReflect.Descriptor instead.
func (*PromoteReplicaRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{102}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{106}
}
func (x *PromoteReplicaRequest) GetSemiSync() bool {
@@ -5182,11 +5171,9 @@ type PromoteReplicaResponse struct {
func (x *PromoteReplicaResponse) Reset() {
*x = PromoteReplicaResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[103]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[107]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *PromoteReplicaResponse) String() string {
@@ -5196,8 +5183,8 @@ func (x *PromoteReplicaResponse) String() string {
func (*PromoteReplicaResponse) ProtoMessage() {}
func (x *PromoteReplicaResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[103]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[107]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5209,7 +5196,7 @@ func (x *PromoteReplicaResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use PromoteReplicaResponse.ProtoReflect.Descriptor instead.
func (*PromoteReplicaResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{103}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{107}
}
func (x *PromoteReplicaResponse) GetPosition() string {
@@ -5238,11 +5225,9 @@ type BackupRequest struct {
func (x *BackupRequest) Reset() {
*x = BackupRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[104]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[108]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *BackupRequest) String() string {
@@ -5252,8 +5237,8 @@ func (x *BackupRequest) String() string {
func (*BackupRequest) ProtoMessage() {}
func (x *BackupRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[104]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[108]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5265,7 +5250,7 @@ func (x *BackupRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use BackupRequest.ProtoReflect.Descriptor instead.
func (*BackupRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{104}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{108}
}
func (x *BackupRequest) GetConcurrency() int32 {
@@ -5313,11 +5298,9 @@ type BackupResponse struct {
func (x *BackupResponse) Reset() {
*x = BackupResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[105]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[109]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *BackupResponse) String() string {
@@ -5327,8 +5310,8 @@ func (x *BackupResponse) String() string {
func (*BackupResponse) ProtoMessage() {}
func (x *BackupResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[105]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[109]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5340,7 +5323,7 @@ func (x *BackupResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use BackupResponse.ProtoReflect.Descriptor instead.
func (*BackupResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{105}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{109}
}
func (x *BackupResponse) GetEvent() *logutil.Event {
@@ -5371,11 +5354,9 @@ type RestoreFromBackupRequest struct {
func (x *RestoreFromBackupRequest) Reset() {
*x = RestoreFromBackupRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[106]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[110]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RestoreFromBackupRequest) String() string {
@@ -5385,8 +5366,8 @@ func (x *RestoreFromBackupRequest) String() string {
func (*RestoreFromBackupRequest) ProtoMessage() {}
func (x *RestoreFromBackupRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[106]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[110]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5398,7 +5379,7 @@ func (x *RestoreFromBackupRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use RestoreFromBackupRequest.ProtoReflect.Descriptor instead.
func (*RestoreFromBackupRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{106}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{110}
}
func (x *RestoreFromBackupRequest) GetBackupTime() *vttime.Time {
@@ -5446,11 +5427,9 @@ type RestoreFromBackupResponse struct {
func (x *RestoreFromBackupResponse) Reset() {
*x = RestoreFromBackupResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[107]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[111]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RestoreFromBackupResponse) String() string {
@@ -5460,8 +5439,8 @@ func (x *RestoreFromBackupResponse) String() string {
func (*RestoreFromBackupResponse) ProtoMessage() {}
func (x *RestoreFromBackupResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[107]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[111]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5473,7 +5452,7 @@ func (x *RestoreFromBackupResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use RestoreFromBackupResponse.ProtoReflect.Descriptor instead.
func (*RestoreFromBackupResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{107}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{111}
}
func (x *RestoreFromBackupResponse) GetEvent() *logutil.Event {
@@ -5509,11 +5488,9 @@ type CreateVReplicationWorkflowRequest struct {
func (x *CreateVReplicationWorkflowRequest) Reset() {
*x = CreateVReplicationWorkflowRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[108]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[112]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CreateVReplicationWorkflowRequest) String() string {
@@ -5523,8 +5500,8 @@ func (x *CreateVReplicationWorkflowRequest) String() string {
func (*CreateVReplicationWorkflowRequest) ProtoMessage() {}
func (x *CreateVReplicationWorkflowRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[108]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[112]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5536,7 +5513,7 @@ func (x *CreateVReplicationWorkflowRequest) ProtoReflect() protoreflect.Message
// Deprecated: Use CreateVReplicationWorkflowRequest.ProtoReflect.Descriptor instead.
func (*CreateVReplicationWorkflowRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{108}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{112}
}
func (x *CreateVReplicationWorkflowRequest) GetWorkflow() string {
@@ -5626,11 +5603,9 @@ type CreateVReplicationWorkflowResponse struct {
func (x *CreateVReplicationWorkflowResponse) Reset() {
*x = CreateVReplicationWorkflowResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[109]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[113]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CreateVReplicationWorkflowResponse) String() string {
@@ -5640,8 +5615,8 @@ func (x *CreateVReplicationWorkflowResponse) String() string {
func (*CreateVReplicationWorkflowResponse) ProtoMessage() {}
func (x *CreateVReplicationWorkflowResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[109]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[113]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5653,7 +5628,7 @@ func (x *CreateVReplicationWorkflowResponse) ProtoReflect() protoreflect.Message
// Deprecated: Use CreateVReplicationWorkflowResponse.ProtoReflect.Descriptor instead.
func (*CreateVReplicationWorkflowResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{109}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{113}
}
func (x *CreateVReplicationWorkflowResponse) GetResult() *query.QueryResult {
@@ -5663,6 +5638,99 @@ func (x *CreateVReplicationWorkflowResponse) GetResult() *query.QueryResult {
return nil
}
+type DeleteTableDataRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The key is the table that we want to delete data from.
+ // The value is the filter or WHERE clause to use when deleting
+ // data in the table.
+ TableFilters map[string]string `protobuf:"bytes,1,rep,name=table_filters,json=tableFilters,proto3" json:"table_filters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ // BatchSize is the number of rows to delete in a single batch.
+ BatchSize int64 `protobuf:"varint,2,opt,name=batch_size,json=batchSize,proto3" json:"batch_size,omitempty"`
+}
+
+func (x *DeleteTableDataRequest) Reset() {
+ *x = DeleteTableDataRequest{}
+ mi := &file_tabletmanagerdata_proto_msgTypes[114]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *DeleteTableDataRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeleteTableDataRequest) ProtoMessage() {}
+
+func (x *DeleteTableDataRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_tabletmanagerdata_proto_msgTypes[114]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DeleteTableDataRequest.ProtoReflect.Descriptor instead.
+func (*DeleteTableDataRequest) Descriptor() ([]byte, []int) {
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{114}
+}
+
+func (x *DeleteTableDataRequest) GetTableFilters() map[string]string {
+ if x != nil {
+ return x.TableFilters
+ }
+ return nil
+}
+
+func (x *DeleteTableDataRequest) GetBatchSize() int64 {
+ if x != nil {
+ return x.BatchSize
+ }
+ return 0
+}
+
+type DeleteTableDataResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *DeleteTableDataResponse) Reset() {
+ *x = DeleteTableDataResponse{}
+ mi := &file_tabletmanagerdata_proto_msgTypes[115]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *DeleteTableDataResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeleteTableDataResponse) ProtoMessage() {}
+
+func (x *DeleteTableDataResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_tabletmanagerdata_proto_msgTypes[115]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DeleteTableDataResponse.ProtoReflect.Descriptor instead.
+func (*DeleteTableDataResponse) Descriptor() ([]byte, []int) {
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{115}
+}
+
type DeleteVReplicationWorkflowRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -5673,11 +5741,9 @@ type DeleteVReplicationWorkflowRequest struct {
func (x *DeleteVReplicationWorkflowRequest) Reset() {
*x = DeleteVReplicationWorkflowRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[110]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[116]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *DeleteVReplicationWorkflowRequest) String() string {
@@ -5687,8 +5753,8 @@ func (x *DeleteVReplicationWorkflowRequest) String() string {
func (*DeleteVReplicationWorkflowRequest) ProtoMessage() {}
func (x *DeleteVReplicationWorkflowRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[110]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[116]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5700,7 +5766,7 @@ func (x *DeleteVReplicationWorkflowRequest) ProtoReflect() protoreflect.Message
// Deprecated: Use DeleteVReplicationWorkflowRequest.ProtoReflect.Descriptor instead.
func (*DeleteVReplicationWorkflowRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{110}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{116}
}
func (x *DeleteVReplicationWorkflowRequest) GetWorkflow() string {
@@ -5720,11 +5786,9 @@ type DeleteVReplicationWorkflowResponse struct {
func (x *DeleteVReplicationWorkflowResponse) Reset() {
*x = DeleteVReplicationWorkflowResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[111]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[117]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *DeleteVReplicationWorkflowResponse) String() string {
@@ -5734,8 +5798,8 @@ func (x *DeleteVReplicationWorkflowResponse) String() string {
func (*DeleteVReplicationWorkflowResponse) ProtoMessage() {}
func (x *DeleteVReplicationWorkflowResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[111]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[117]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5747,7 +5811,7 @@ func (x *DeleteVReplicationWorkflowResponse) ProtoReflect() protoreflect.Message
// Deprecated: Use DeleteVReplicationWorkflowResponse.ProtoReflect.Descriptor instead.
func (*DeleteVReplicationWorkflowResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{111}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{117}
}
func (x *DeleteVReplicationWorkflowResponse) GetResult() *query.QueryResult {
@@ -5765,11 +5829,9 @@ type HasVReplicationWorkflowsRequest struct {
func (x *HasVReplicationWorkflowsRequest) Reset() {
*x = HasVReplicationWorkflowsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[112]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[118]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *HasVReplicationWorkflowsRequest) String() string {
@@ -5779,8 +5841,8 @@ func (x *HasVReplicationWorkflowsRequest) String() string {
func (*HasVReplicationWorkflowsRequest) ProtoMessage() {}
func (x *HasVReplicationWorkflowsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[112]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[118]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5792,7 +5854,7 @@ func (x *HasVReplicationWorkflowsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use HasVReplicationWorkflowsRequest.ProtoReflect.Descriptor instead.
func (*HasVReplicationWorkflowsRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{112}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{118}
}
type HasVReplicationWorkflowsResponse struct {
@@ -5805,11 +5867,9 @@ type HasVReplicationWorkflowsResponse struct {
func (x *HasVReplicationWorkflowsResponse) Reset() {
*x = HasVReplicationWorkflowsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[113]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[119]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *HasVReplicationWorkflowsResponse) String() string {
@@ -5819,8 +5879,8 @@ func (x *HasVReplicationWorkflowsResponse) String() string {
func (*HasVReplicationWorkflowsResponse) ProtoMessage() {}
func (x *HasVReplicationWorkflowsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[113]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[119]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5832,7 +5892,7 @@ func (x *HasVReplicationWorkflowsResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use HasVReplicationWorkflowsResponse.ProtoReflect.Descriptor instead.
func (*HasVReplicationWorkflowsResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{113}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{119}
}
func (x *HasVReplicationWorkflowsResponse) GetHas() bool {
@@ -5857,11 +5917,9 @@ type ReadVReplicationWorkflowsRequest struct {
func (x *ReadVReplicationWorkflowsRequest) Reset() {
*x = ReadVReplicationWorkflowsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[114]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[120]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReadVReplicationWorkflowsRequest) String() string {
@@ -5871,8 +5929,8 @@ func (x *ReadVReplicationWorkflowsRequest) String() string {
func (*ReadVReplicationWorkflowsRequest) ProtoMessage() {}
func (x *ReadVReplicationWorkflowsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[114]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[120]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5884,7 +5942,7 @@ func (x *ReadVReplicationWorkflowsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ReadVReplicationWorkflowsRequest.ProtoReflect.Descriptor instead.
func (*ReadVReplicationWorkflowsRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{114}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{120}
}
func (x *ReadVReplicationWorkflowsRequest) GetIncludeIds() []int32 {
@@ -5939,11 +5997,9 @@ type ReadVReplicationWorkflowsResponse struct {
func (x *ReadVReplicationWorkflowsResponse) Reset() {
*x = ReadVReplicationWorkflowsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[115]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[121]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReadVReplicationWorkflowsResponse) String() string {
@@ -5953,8 +6009,8 @@ func (x *ReadVReplicationWorkflowsResponse) String() string {
func (*ReadVReplicationWorkflowsResponse) ProtoMessage() {}
func (x *ReadVReplicationWorkflowsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[115]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[121]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5966,7 +6022,7 @@ func (x *ReadVReplicationWorkflowsResponse) ProtoReflect() protoreflect.Message
// Deprecated: Use ReadVReplicationWorkflowsResponse.ProtoReflect.Descriptor instead.
func (*ReadVReplicationWorkflowsResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{115}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{121}
}
func (x *ReadVReplicationWorkflowsResponse) GetWorkflows() []*ReadVReplicationWorkflowResponse {
@@ -5986,11 +6042,9 @@ type ReadVReplicationWorkflowRequest struct {
func (x *ReadVReplicationWorkflowRequest) Reset() {
*x = ReadVReplicationWorkflowRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[116]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[122]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReadVReplicationWorkflowRequest) String() string {
@@ -6000,8 +6054,8 @@ func (x *ReadVReplicationWorkflowRequest) String() string {
func (*ReadVReplicationWorkflowRequest) ProtoMessage() {}
func (x *ReadVReplicationWorkflowRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[116]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[122]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6013,7 +6067,7 @@ func (x *ReadVReplicationWorkflowRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ReadVReplicationWorkflowRequest.ProtoReflect.Descriptor instead.
func (*ReadVReplicationWorkflowRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{116}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{122}
}
func (x *ReadVReplicationWorkflowRequest) GetWorkflow() string {
@@ -6044,11 +6098,9 @@ type ReadVReplicationWorkflowResponse struct {
func (x *ReadVReplicationWorkflowResponse) Reset() {
*x = ReadVReplicationWorkflowResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[117]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[123]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReadVReplicationWorkflowResponse) String() string {
@@ -6058,8 +6110,8 @@ func (x *ReadVReplicationWorkflowResponse) String() string {
func (*ReadVReplicationWorkflowResponse) ProtoMessage() {}
func (x *ReadVReplicationWorkflowResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[117]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[123]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6071,7 +6123,7 @@ func (x *ReadVReplicationWorkflowResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ReadVReplicationWorkflowResponse.ProtoReflect.Descriptor instead.
func (*ReadVReplicationWorkflowResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{117}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{123}
}
func (x *ReadVReplicationWorkflowResponse) GetWorkflow() string {
@@ -6166,11 +6218,9 @@ type ValidateVReplicationPermissionsRequest struct {
func (x *ValidateVReplicationPermissionsRequest) Reset() {
*x = ValidateVReplicationPermissionsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[118]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[124]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ValidateVReplicationPermissionsRequest) String() string {
@@ -6180,8 +6230,8 @@ func (x *ValidateVReplicationPermissionsRequest) String() string {
func (*ValidateVReplicationPermissionsRequest) ProtoMessage() {}
func (x *ValidateVReplicationPermissionsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[118]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[124]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6193,7 +6243,7 @@ func (x *ValidateVReplicationPermissionsRequest) ProtoReflect() protoreflect.Mes
// Deprecated: Use ValidateVReplicationPermissionsRequest.ProtoReflect.Descriptor instead.
func (*ValidateVReplicationPermissionsRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{118}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{124}
}
type ValidateVReplicationPermissionsResponse struct {
@@ -6210,11 +6260,9 @@ type ValidateVReplicationPermissionsResponse struct {
func (x *ValidateVReplicationPermissionsResponse) Reset() {
*x = ValidateVReplicationPermissionsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[119]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[125]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ValidateVReplicationPermissionsResponse) String() string {
@@ -6224,8 +6272,8 @@ func (x *ValidateVReplicationPermissionsResponse) String() string {
func (*ValidateVReplicationPermissionsResponse) ProtoMessage() {}
func (x *ValidateVReplicationPermissionsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[119]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[125]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6237,7 +6285,7 @@ func (x *ValidateVReplicationPermissionsResponse) ProtoReflect() protoreflect.Me
// Deprecated: Use ValidateVReplicationPermissionsResponse.ProtoReflect.Descriptor instead.
func (*ValidateVReplicationPermissionsResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{119}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{125}
}
func (x *ValidateVReplicationPermissionsResponse) GetUser() string {
@@ -6269,11 +6317,9 @@ type VDiffRequest struct {
func (x *VDiffRequest) Reset() {
*x = VDiffRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[120]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[126]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VDiffRequest) String() string {
@@ -6283,8 +6329,8 @@ func (x *VDiffRequest) String() string {
func (*VDiffRequest) ProtoMessage() {}
func (x *VDiffRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[120]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[126]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6296,7 +6342,7 @@ func (x *VDiffRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use VDiffRequest.ProtoReflect.Descriptor instead.
func (*VDiffRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{120}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{126}
}
func (x *VDiffRequest) GetKeyspace() string {
@@ -6353,11 +6399,9 @@ type VDiffResponse struct {
func (x *VDiffResponse) Reset() {
*x = VDiffResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[121]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[127]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VDiffResponse) String() string {
@@ -6367,8 +6411,8 @@ func (x *VDiffResponse) String() string {
func (*VDiffResponse) ProtoMessage() {}
func (x *VDiffResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[121]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[127]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6380,7 +6424,7 @@ func (x *VDiffResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use VDiffResponse.ProtoReflect.Descriptor instead.
func (*VDiffResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{121}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{127}
}
func (x *VDiffResponse) GetId() int64 {
@@ -6417,11 +6461,9 @@ type VDiffPickerOptions struct {
func (x *VDiffPickerOptions) Reset() {
*x = VDiffPickerOptions{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[122]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[128]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VDiffPickerOptions) String() string {
@@ -6431,8 +6473,8 @@ func (x *VDiffPickerOptions) String() string {
func (*VDiffPickerOptions) ProtoMessage() {}
func (x *VDiffPickerOptions) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[122]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[128]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6444,7 +6486,7 @@ func (x *VDiffPickerOptions) ProtoReflect() protoreflect.Message {
// Deprecated: Use VDiffPickerOptions.ProtoReflect.Descriptor instead.
func (*VDiffPickerOptions) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{122}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{128}
}
func (x *VDiffPickerOptions) GetTabletTypes() string {
@@ -6483,11 +6525,9 @@ type VDiffReportOptions struct {
func (x *VDiffReportOptions) Reset() {
*x = VDiffReportOptions{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[123]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[129]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VDiffReportOptions) String() string {
@@ -6497,8 +6537,8 @@ func (x *VDiffReportOptions) String() string {
func (*VDiffReportOptions) ProtoMessage() {}
func (x *VDiffReportOptions) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[123]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[129]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6510,7 +6550,7 @@ func (x *VDiffReportOptions) ProtoReflect() protoreflect.Message {
// Deprecated: Use VDiffReportOptions.ProtoReflect.Descriptor instead.
func (*VDiffReportOptions) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{123}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{129}
}
func (x *VDiffReportOptions) GetOnlyPks() bool {
@@ -6567,11 +6607,9 @@ type VDiffCoreOptions struct {
func (x *VDiffCoreOptions) Reset() {
*x = VDiffCoreOptions{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[124]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[130]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VDiffCoreOptions) String() string {
@@ -6581,8 +6619,8 @@ func (x *VDiffCoreOptions) String() string {
func (*VDiffCoreOptions) ProtoMessage() {}
func (x *VDiffCoreOptions) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[124]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[130]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6594,7 +6632,7 @@ func (x *VDiffCoreOptions) ProtoReflect() protoreflect.Message {
// Deprecated: Use VDiffCoreOptions.ProtoReflect.Descriptor instead.
func (*VDiffCoreOptions) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{124}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{130}
}
func (x *VDiffCoreOptions) GetTables() string {
@@ -6679,11 +6717,9 @@ type VDiffOptions struct {
func (x *VDiffOptions) Reset() {
*x = VDiffOptions{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[125]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[131]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VDiffOptions) String() string {
@@ -6693,8 +6729,8 @@ func (x *VDiffOptions) String() string {
func (*VDiffOptions) ProtoMessage() {}
func (x *VDiffOptions) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[125]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[131]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6706,7 +6742,7 @@ func (x *VDiffOptions) ProtoReflect() protoreflect.Message {
// Deprecated: Use VDiffOptions.ProtoReflect.Descriptor instead.
func (*VDiffOptions) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{125}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{131}
}
func (x *VDiffOptions) GetPickerOptions() *VDiffPickerOptions {
@@ -6752,11 +6788,9 @@ type UpdateVReplicationWorkflowRequest struct {
func (x *UpdateVReplicationWorkflowRequest) Reset() {
*x = UpdateVReplicationWorkflowRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[126]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[132]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UpdateVReplicationWorkflowRequest) String() string {
@@ -6766,8 +6800,8 @@ func (x *UpdateVReplicationWorkflowRequest) String() string {
func (*UpdateVReplicationWorkflowRequest) ProtoMessage() {}
func (x *UpdateVReplicationWorkflowRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[126]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[132]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6779,7 +6813,7 @@ func (x *UpdateVReplicationWorkflowRequest) ProtoReflect() protoreflect.Message
// Deprecated: Use UpdateVReplicationWorkflowRequest.ProtoReflect.Descriptor instead.
func (*UpdateVReplicationWorkflowRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{126}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{132}
}
func (x *UpdateVReplicationWorkflowRequest) GetWorkflow() string {
@@ -6841,11 +6875,9 @@ type UpdateVReplicationWorkflowResponse struct {
func (x *UpdateVReplicationWorkflowResponse) Reset() {
*x = UpdateVReplicationWorkflowResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[127]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[133]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UpdateVReplicationWorkflowResponse) String() string {
@@ -6855,8 +6887,8 @@ func (x *UpdateVReplicationWorkflowResponse) String() string {
func (*UpdateVReplicationWorkflowResponse) ProtoMessage() {}
func (x *UpdateVReplicationWorkflowResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[127]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[133]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6868,7 +6900,7 @@ func (x *UpdateVReplicationWorkflowResponse) ProtoReflect() protoreflect.Message
// Deprecated: Use UpdateVReplicationWorkflowResponse.ProtoReflect.Descriptor instead.
func (*UpdateVReplicationWorkflowResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{127}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{133}
}
func (x *UpdateVReplicationWorkflowResponse) GetResult() *query.QueryResult {
@@ -6899,11 +6931,9 @@ type UpdateVReplicationWorkflowsRequest struct {
func (x *UpdateVReplicationWorkflowsRequest) Reset() {
*x = UpdateVReplicationWorkflowsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[128]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[134]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UpdateVReplicationWorkflowsRequest) String() string {
@@ -6913,8 +6943,8 @@ func (x *UpdateVReplicationWorkflowsRequest) String() string {
func (*UpdateVReplicationWorkflowsRequest) ProtoMessage() {}
func (x *UpdateVReplicationWorkflowsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[128]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[134]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6926,7 +6956,7 @@ func (x *UpdateVReplicationWorkflowsRequest) ProtoReflect() protoreflect.Message
// Deprecated: Use UpdateVReplicationWorkflowsRequest.ProtoReflect.Descriptor instead.
func (*UpdateVReplicationWorkflowsRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{128}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{134}
}
func (x *UpdateVReplicationWorkflowsRequest) GetAllWorkflows() bool {
@@ -6981,11 +7011,9 @@ type UpdateVReplicationWorkflowsResponse struct {
func (x *UpdateVReplicationWorkflowsResponse) Reset() {
*x = UpdateVReplicationWorkflowsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[129]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[135]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UpdateVReplicationWorkflowsResponse) String() string {
@@ -6995,8 +7023,8 @@ func (x *UpdateVReplicationWorkflowsResponse) String() string {
func (*UpdateVReplicationWorkflowsResponse) ProtoMessage() {}
func (x *UpdateVReplicationWorkflowsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[129]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[135]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7008,7 +7036,7 @@ func (x *UpdateVReplicationWorkflowsResponse) ProtoReflect() protoreflect.Messag
// Deprecated: Use UpdateVReplicationWorkflowsResponse.ProtoReflect.Descriptor instead.
func (*UpdateVReplicationWorkflowsResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{129}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{135}
}
func (x *UpdateVReplicationWorkflowsResponse) GetResult() *query.QueryResult {
@@ -7028,11 +7056,9 @@ type ResetSequencesRequest struct {
func (x *ResetSequencesRequest) Reset() {
*x = ResetSequencesRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[130]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[136]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ResetSequencesRequest) String() string {
@@ -7042,8 +7068,8 @@ func (x *ResetSequencesRequest) String() string {
func (*ResetSequencesRequest) ProtoMessage() {}
func (x *ResetSequencesRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[130]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[136]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7055,7 +7081,7 @@ func (x *ResetSequencesRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ResetSequencesRequest.ProtoReflect.Descriptor instead.
func (*ResetSequencesRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{130}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{136}
}
func (x *ResetSequencesRequest) GetTables() []string {
@@ -7073,11 +7099,9 @@ type ResetSequencesResponse struct {
func (x *ResetSequencesResponse) Reset() {
*x = ResetSequencesResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[131]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[137]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ResetSequencesResponse) String() string {
@@ -7087,8 +7111,8 @@ func (x *ResetSequencesResponse) String() string {
func (*ResetSequencesResponse) ProtoMessage() {}
func (x *ResetSequencesResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[131]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[137]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7100,7 +7124,7 @@ func (x *ResetSequencesResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ResetSequencesResponse.ProtoReflect.Descriptor instead.
func (*ResetSequencesResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{131}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{137}
}
type CheckThrottlerRequest struct {
@@ -7121,11 +7145,9 @@ type CheckThrottlerRequest struct {
func (x *CheckThrottlerRequest) Reset() {
*x = CheckThrottlerRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[132]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[138]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CheckThrottlerRequest) String() string {
@@ -7135,8 +7157,8 @@ func (x *CheckThrottlerRequest) String() string {
func (*CheckThrottlerRequest) ProtoMessage() {}
func (x *CheckThrottlerRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[132]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[138]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7148,7 +7170,7 @@ func (x *CheckThrottlerRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use CheckThrottlerRequest.ProtoReflect.Descriptor instead.
func (*CheckThrottlerRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{132}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{138}
}
func (x *CheckThrottlerRequest) GetAppName() string {
@@ -7217,11 +7239,9 @@ type CheckThrottlerResponse struct {
func (x *CheckThrottlerResponse) Reset() {
*x = CheckThrottlerResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[133]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[139]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CheckThrottlerResponse) String() string {
@@ -7231,8 +7251,8 @@ func (x *CheckThrottlerResponse) String() string {
func (*CheckThrottlerResponse) ProtoMessage() {}
func (x *CheckThrottlerResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[133]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[139]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7244,7 +7264,7 @@ func (x *CheckThrottlerResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use CheckThrottlerResponse.ProtoReflect.Descriptor instead.
func (*CheckThrottlerResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{133}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{139}
}
func (x *CheckThrottlerResponse) GetStatusCode() int32 {
@@ -7325,11 +7345,9 @@ type GetThrottlerStatusRequest struct {
func (x *GetThrottlerStatusRequest) Reset() {
*x = GetThrottlerStatusRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[134]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[140]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetThrottlerStatusRequest) String() string {
@@ -7339,8 +7357,8 @@ func (x *GetThrottlerStatusRequest) String() string {
func (*GetThrottlerStatusRequest) ProtoMessage() {}
func (x *GetThrottlerStatusRequest) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[134]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[140]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7352,7 +7370,7 @@ func (x *GetThrottlerStatusRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetThrottlerStatusRequest.ProtoReflect.Descriptor instead.
func (*GetThrottlerStatusRequest) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{134}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{140}
}
type GetThrottlerStatusResponse struct {
@@ -7400,11 +7418,9 @@ type GetThrottlerStatusResponse struct {
func (x *GetThrottlerStatusResponse) Reset() {
*x = GetThrottlerStatusResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[135]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[141]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetThrottlerStatusResponse) String() string {
@@ -7414,8 +7430,8 @@ func (x *GetThrottlerStatusResponse) String() string {
func (*GetThrottlerStatusResponse) ProtoMessage() {}
func (x *GetThrottlerStatusResponse) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[135]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[141]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7427,7 +7443,7 @@ func (x *GetThrottlerStatusResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetThrottlerStatusResponse.ProtoReflect.Descriptor instead.
func (*GetThrottlerStatusResponse) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{135}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{141}
}
func (x *GetThrottlerStatusResponse) GetTabletAlias() string {
@@ -7556,6 +7572,104 @@ func (x *GetThrottlerStatusResponse) GetRecentApps() map[string]*GetThrottlerSta
return nil
}
+type ChangeTagsRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Tags map[string]string `protobuf:"bytes,1,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ Replace bool `protobuf:"varint,2,opt,name=replace,proto3" json:"replace,omitempty"`
+}
+
+func (x *ChangeTagsRequest) Reset() {
+ *x = ChangeTagsRequest{}
+ mi := &file_tabletmanagerdata_proto_msgTypes[142]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ChangeTagsRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ChangeTagsRequest) ProtoMessage() {}
+
+func (x *ChangeTagsRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_tabletmanagerdata_proto_msgTypes[142]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ChangeTagsRequest.ProtoReflect.Descriptor instead.
+func (*ChangeTagsRequest) Descriptor() ([]byte, []int) {
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{142}
+}
+
+func (x *ChangeTagsRequest) GetTags() map[string]string {
+ if x != nil {
+ return x.Tags
+ }
+ return nil
+}
+
+func (x *ChangeTagsRequest) GetReplace() bool {
+ if x != nil {
+ return x.Replace
+ }
+ return false
+}
+
+type ChangeTagsResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Tags map[string]string `protobuf:"bytes,1,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+}
+
+func (x *ChangeTagsResponse) Reset() {
+ *x = ChangeTagsResponse{}
+ mi := &file_tabletmanagerdata_proto_msgTypes[143]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ChangeTagsResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ChangeTagsResponse) ProtoMessage() {}
+
+func (x *ChangeTagsResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_tabletmanagerdata_proto_msgTypes[143]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ChangeTagsResponse.ProtoReflect.Descriptor instead.
+func (*ChangeTagsResponse) Descriptor() ([]byte, []int) {
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{143}
+}
+
+func (x *ChangeTagsResponse) GetTags() map[string]string {
+ if x != nil {
+ return x.Tags
+ }
+ return nil
+}
+
type ReadVReplicationWorkflowResponse_Stream struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -7579,11 +7693,9 @@ type ReadVReplicationWorkflowResponse_Stream struct {
func (x *ReadVReplicationWorkflowResponse_Stream) Reset() {
*x = ReadVReplicationWorkflowResponse_Stream{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[140]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[149]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReadVReplicationWorkflowResponse_Stream) String() string {
@@ -7593,8 +7705,8 @@ func (x *ReadVReplicationWorkflowResponse_Stream) String() string {
func (*ReadVReplicationWorkflowResponse_Stream) ProtoMessage() {}
func (x *ReadVReplicationWorkflowResponse_Stream) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[140]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[149]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7606,7 +7718,7 @@ func (x *ReadVReplicationWorkflowResponse_Stream) ProtoReflect() protoreflect.Me
// Deprecated: Use ReadVReplicationWorkflowResponse_Stream.ProtoReflect.Descriptor instead.
func (*ReadVReplicationWorkflowResponse_Stream) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{117, 0}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{123, 0}
}
func (x *ReadVReplicationWorkflowResponse_Stream) GetId() int32 {
@@ -7732,11 +7844,9 @@ type CheckThrottlerResponse_Metric struct {
func (x *CheckThrottlerResponse_Metric) Reset() {
*x = CheckThrottlerResponse_Metric{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[143]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[152]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CheckThrottlerResponse_Metric) String() string {
@@ -7746,8 +7856,8 @@ func (x *CheckThrottlerResponse_Metric) String() string {
func (*CheckThrottlerResponse_Metric) ProtoMessage() {}
func (x *CheckThrottlerResponse_Metric) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[143]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[152]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7759,7 +7869,7 @@ func (x *CheckThrottlerResponse_Metric) ProtoReflect() protoreflect.Message {
// Deprecated: Use CheckThrottlerResponse_Metric.ProtoReflect.Descriptor instead.
func (*CheckThrottlerResponse_Metric) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{133, 0}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{139, 0}
}
func (x *CheckThrottlerResponse_Metric) GetName() string {
@@ -7829,11 +7939,9 @@ type GetThrottlerStatusResponse_MetricResult struct {
func (x *GetThrottlerStatusResponse_MetricResult) Reset() {
*x = GetThrottlerStatusResponse_MetricResult{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[145]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[154]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetThrottlerStatusResponse_MetricResult) String() string {
@@ -7843,8 +7951,8 @@ func (x *GetThrottlerStatusResponse_MetricResult) String() string {
func (*GetThrottlerStatusResponse_MetricResult) ProtoMessage() {}
func (x *GetThrottlerStatusResponse_MetricResult) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[145]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[154]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7856,7 +7964,7 @@ func (x *GetThrottlerStatusResponse_MetricResult) ProtoReflect() protoreflect.Me
// Deprecated: Use GetThrottlerStatusResponse_MetricResult.ProtoReflect.Descriptor instead.
func (*GetThrottlerStatusResponse_MetricResult) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{135, 0}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{141, 0}
}
func (x *GetThrottlerStatusResponse_MetricResult) GetValue() float64 {
@@ -7884,11 +7992,9 @@ type GetThrottlerStatusResponse_MetricHealth struct {
func (x *GetThrottlerStatusResponse_MetricHealth) Reset() {
*x = GetThrottlerStatusResponse_MetricHealth{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[148]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[157]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetThrottlerStatusResponse_MetricHealth) String() string {
@@ -7898,8 +8004,8 @@ func (x *GetThrottlerStatusResponse_MetricHealth) String() string {
func (*GetThrottlerStatusResponse_MetricHealth) ProtoMessage() {}
func (x *GetThrottlerStatusResponse_MetricHealth) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[148]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[157]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7911,7 +8017,7 @@ func (x *GetThrottlerStatusResponse_MetricHealth) ProtoReflect() protoreflect.Me
// Deprecated: Use GetThrottlerStatusResponse_MetricHealth.ProtoReflect.Descriptor instead.
func (*GetThrottlerStatusResponse_MetricHealth) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{135, 3}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{141, 3}
}
func (x *GetThrottlerStatusResponse_MetricHealth) GetLastHealthyAt() *vttime.Time {
@@ -7941,11 +8047,9 @@ type GetThrottlerStatusResponse_RecentApp struct {
func (x *GetThrottlerStatusResponse_RecentApp) Reset() {
*x = GetThrottlerStatusResponse_RecentApp{}
- if protoimpl.UnsafeEnabled {
- mi := &file_tabletmanagerdata_proto_msgTypes[152]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_tabletmanagerdata_proto_msgTypes[161]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetThrottlerStatusResponse_RecentApp) String() string {
@@ -7955,8 +8059,8 @@ func (x *GetThrottlerStatusResponse_RecentApp) String() string {
func (*GetThrottlerStatusResponse_RecentApp) ProtoMessage() {}
func (x *GetThrottlerStatusResponse_RecentApp) ProtoReflect() protoreflect.Message {
- mi := &file_tabletmanagerdata_proto_msgTypes[152]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_tabletmanagerdata_proto_msgTypes[161]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7968,7 +8072,7 @@ func (x *GetThrottlerStatusResponse_RecentApp) ProtoReflect() protoreflect.Messa
// Deprecated: Use GetThrottlerStatusResponse_RecentApp.ProtoReflect.Descriptor instead.
func (*GetThrottlerStatusResponse_RecentApp) Descriptor() ([]byte, []int) {
- return file_tabletmanagerdata_proto_rawDescGZIP(), []int{135, 7}
+ return file_tabletmanagerdata_proto_rawDescGZIP(), []int{141, 7}
}
func (x *GetThrottlerStatusResponse_RecentApp) GetCheckedAt() *vttime.Time {
@@ -8320,115 +8424,133 @@ var file_tabletmanagerdata_proto_rawDesc = []byte{
0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x1a, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61,
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x74,
- 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x40, 0x0a, 0x1a, 0x43, 0x6f,
- 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f,
- 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x74, 0x69, 0x64,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, 0x64, 0x12, 0x0e, 0x0a, 0x02,
- 0x6d, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x6d, 0x6d, 0x22, 0x1d, 0x0a, 0x1b,
- 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74,
- 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x0a, 0x17, 0x4d,
- 0x79, 0x73, 0x71, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5b, 0x0a, 0x18, 0x4d, 0x79, 0x73, 0x71, 0x6c, 0x48,
- 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63,
- 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x63,
- 0x74, 0x6c, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72,
- 0x69, 0x63, 0x73, 0x22, 0x1a, 0x0a, 0x18, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22,
- 0x4c, 0x0a, 0x19, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74,
- 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x06,
- 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x72,
- 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53,
- 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x16, 0x0a,
- 0x14, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4f, 0x0a, 0x15, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79,
- 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36,
- 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e,
- 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06,
- 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x18, 0x0a, 0x16, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72,
- 0x79, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x22, 0x35, 0x0a, 0x17, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x50, 0x6f, 0x73, 0x69, 0x74,
- 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70,
- 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70,
- 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x34, 0x0a, 0x16, 0x57, 0x61, 0x69, 0x74, 0x46,
- 0x6f, 0x72, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x19, 0x0a,
- 0x17, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x70,
- 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x22, 0x19, 0x0a, 0x17, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5e, 0x0a,
- 0x1d, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a,
+ 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2f, 0x0a, 0x19, 0x47, 0x65,
+ 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x74, 0x69, 0x64, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, 0x64, 0x22, 0x8f, 0x01, 0x0a, 0x1a,
+ 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e,
+ 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74,
+ 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65,
+ 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x69,
+ 0x6d, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03,
+ 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1e, 0x0a,
+ 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28,
+ 0x09, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x40, 0x0a,
+ 0x1a, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64,
+ 0x74, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, 0x64, 0x12,
+ 0x0e, 0x0a, 0x02, 0x6d, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x6d, 0x6d, 0x22,
+ 0x1d, 0x0a, 0x1b, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73,
+ 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19,
+ 0x0a, 0x17, 0x4d, 0x79, 0x73, 0x71, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69,
+ 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5b, 0x0a, 0x18, 0x4d, 0x79, 0x73,
+ 0x71, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x74,
+ 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6d, 0x79, 0x73,
+ 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63,
+ 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x4d,
+ 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x1a, 0x0a, 0x18, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x22, 0x4c, 0x0a, 0x19, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+ 0x2f, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x17, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
+ 0x22, 0x16, 0x0a, 0x14, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75,
+ 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4f, 0x0a, 0x15, 0x50, 0x72, 0x69, 0x6d,
+ 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x36, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x1e, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75,
+ 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x18, 0x0a, 0x16, 0x50, 0x72, 0x69,
+ 0x6d, 0x61, 0x72, 0x79, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x22, 0x35, 0x0a, 0x17, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x50, 0x6f,
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a,
0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x61,
- 0x69, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,
- 0x52, 0x0b, 0x77, 0x61, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0x3c, 0x0a,
- 0x1e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
- 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x35, 0x0a, 0x17, 0x53,
- 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79,
- 0x6e, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79,
- 0x6e, 0x63, 0x22, 0x1a, 0x0a, 0x18, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69,
- 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x62,
- 0x0a, 0x21, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12,
- 0x21, 0x0a, 0x0c, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x77, 0x61, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f,
- 0x75, 0x74, 0x22, 0x24, 0x0a, 0x22, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69,
- 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x41, 0x66, 0x74, 0x65, 0x72,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x52,
- 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x2b,
- 0x0a, 0x13, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x72, 0x73, 0x18, 0x01,
- 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x72, 0x73, 0x22, 0x19, 0x0a, 0x17, 0x52,
- 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x1a, 0x0a, 0x18, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52,
- 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x2f, 0x0a, 0x17, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a,
- 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75,
- 0x65, 0x72, 0x79, 0x22, 0x46, 0x0a, 0x18, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
- 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73,
- 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x4b, 0x0a, 0x1d, 0x56,
+ 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x34, 0x0a, 0x16, 0x57, 0x61,
+ 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+ 0x22, 0x19, 0x0a, 0x17, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x6f, 0x73, 0x69, 0x74,
+ 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x53,
+ 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x19, 0x0a, 0x17, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70,
+ 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x5e, 0x0a, 0x1d, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a,
+ 0x0c, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x03, 0x52, 0x0b, 0x77, 0x61, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74,
+ 0x22, 0x3c, 0x0a, 0x1e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x35,
+ 0x0a, 0x17, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6d,
+ 0x69, 0x53, 0x79, 0x6e, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x65, 0x6d,
+ 0x69, 0x53, 0x79, 0x6e, 0x63, 0x22, 0x1a, 0x0a, 0x18, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65,
+ 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x62, 0x0a, 0x21, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69,
+ 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69,
+ 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f,
+ 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x77, 0x61, 0x69, 0x74, 0x54, 0x69,
+ 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0x24, 0x0a, 0x22, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65,
+ 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x41, 0x66,
+ 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x47,
+ 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x22, 0x2b, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x72,
+ 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x72, 0x73, 0x22, 0x19,
+ 0x0a, 0x17, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x1a, 0x0a, 0x18, 0x52, 0x65, 0x73,
+ 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x0a, 0x17, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x46, 0x0a, 0x18, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79,
+ 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x4b,
+ 0x0a, 0x1d, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x61,
+ 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12,
+ 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x0a, 0x1e, 0x56,
0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x61, 0x69, 0x74, 0x46,
- 0x6f, 0x72, 0x50, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02,
- 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08,
- 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
- 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x0a, 0x1e, 0x56, 0x52, 0x65, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50,
- 0x6f, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x0a, 0x12, 0x49, 0x6e,
- 0x69, 0x74, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x08, 0x52, 0x08, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x22, 0x31, 0x0a, 0x13,
- 0x49, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22,
- 0xd8, 0x01, 0x0a, 0x1e, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x61,
- 0x72, 0x65, 0x6e, 0x74, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74,
- 0x65, 0x64, 0x5f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x69, 0x6d,
- 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63,
- 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x0d, 0x70,
- 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x03, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0c, 0x70, 0x72, 0x69, 0x6d, 0x61,
- 0x72, 0x79, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x31, 0x0a, 0x14, 0x72, 0x65, 0x70, 0x6c, 0x69,
- 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18,
- 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x21, 0x0a, 0x1f, 0x50, 0x6f,
- 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4a, 0x6f,
- 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xba, 0x01,
+ 0x6f, 0x72, 0x50, 0x6f, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x0a,
+ 0x12, 0x49, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x22,
+ 0x31, 0x0a, 0x13, 0x49, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69,
+ 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69,
+ 0x6f, 0x6e, 0x22, 0xd8, 0x01, 0x0a, 0x1e, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x52,
+ 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x72,
+ 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d,
+ 0x74, 0x69, 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x73, 0x12, 0x1f, 0x0a,
+ 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3a,
+ 0x0a, 0x0d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18,
+ 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0c, 0x70, 0x72,
+ 0x69, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x31, 0x0a, 0x14, 0x72, 0x65,
+ 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69,
+ 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x21, 0x0a,
+ 0x1f, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e,
+ 0x74, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x20, 0x0a, 0x1e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74,
+ 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x22, 0x39, 0x0a, 0x1f, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65,
+ 0x6e, 0x74, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0xba, 0x01,
0x0a, 0x12, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e,
@@ -8600,520 +8722,556 @@ var file_tabletmanagerdata_proto_rawDesc = []byte{
0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65,
0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65,
0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06,
- 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3f, 0x0a, 0x21, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
- 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b,
- 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77,
- 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77,
- 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22, 0x50, 0x0a, 0x22, 0x44, 0x65, 0x6c, 0x65, 0x74,
- 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72,
- 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a,
- 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e,
- 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c,
- 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x21, 0x0a, 0x1f, 0x48, 0x61, 0x73,
- 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b,
- 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x34, 0x0a, 0x20,
- 0x48, 0x61, 0x73, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57,
- 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x12, 0x10, 0x0a, 0x03, 0x68, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x68,
- 0x61, 0x73, 0x22, 0xe0, 0x02, 0x0a, 0x20, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65, 0x70, 0x6c,
+ 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xda, 0x01, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74,
+ 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x60, 0x0a, 0x0d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65,
+ 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c,
+ 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73,
+ 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x74,
+ 0x65, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x73, 0x69, 0x7a,
+ 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x62, 0x61, 0x74, 0x63, 0x68, 0x53, 0x69,
+ 0x7a, 0x65, 0x1a, 0x3f, 0x0a, 0x11, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65,
+ 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
+ 0x02, 0x38, 0x01, 0x22, 0x19, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62,
+ 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f,
+ 0x0a, 0x21, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22,
+ 0x50, 0x0a, 0x22, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75,
+ 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c,
+ 0x74, 0x22, 0x21, 0x0a, 0x1f, 0x48, 0x61, 0x73, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x22, 0x34, 0x0a, 0x20, 0x48, 0x61, 0x73, 0x56, 0x52, 0x65, 0x70, 0x6c,
0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x63, 0x6c, 0x75,
- 0x64, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x69, 0x6e,
- 0x63, 0x6c, 0x75, 0x64, 0x65, 0x49, 0x64, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x6c,
- 0x75, 0x64, 0x65, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x02, 0x20,
- 0x03, 0x28, 0x09, 0x52, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x57, 0x6f, 0x72, 0x6b,
- 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x4c, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65,
- 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x25, 0x2e,
- 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, 0x6c,
- 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53,
- 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x74, 0x61,
- 0x74, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x77,
- 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10,
- 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73,
- 0x12, 0x4c, 0x0a, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74,
- 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f,
- 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52,
- 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x25,
- 0x0a, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x66, 0x72, 0x6f, 0x7a, 0x65, 0x6e,
- 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x46,
- 0x72, 0x6f, 0x7a, 0x65, 0x6e, 0x22, 0x76, 0x0a, 0x21, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65,
- 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
- 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x09, 0x77, 0x6f,
- 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e,
- 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x22, 0x3d, 0x0a,
- 0x1f, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22, 0xe7, 0x0a, 0x0a,
- 0x20, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x14, 0x0a,
- 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65,
- 0x6c, 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79,
- 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52,
- 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x6c, 0x0a, 0x1b,
- 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28,
- 0x0e, 0x32, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
- 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65,
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52,
- 0x19, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x62,
- 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x62, 0x4e,
- 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x49, 0x0a, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x66,
- 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24,
- 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
- 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x79,
- 0x70, 0x65, 0x12, 0x53, 0x0a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x73,
- 0x75, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e,
- 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, 0x6c,
- 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53,
- 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
- 0x53, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x65, 0x66, 0x65, 0x72,
- 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18,
- 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x64, 0x65, 0x66, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f,
- 0x6e, 0x64, 0x61, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x54, 0x0a, 0x07, 0x73, 0x74, 0x72,
- 0x65, 0x61, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x74, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x68, 0x61, 0x73, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x68, 0x61, 0x73, 0x22, 0xe0, 0x02, 0x0a, 0x20, 0x52,
0x65, 0x61, 0x64, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57,
- 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e,
- 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x07, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12,
- 0x18, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x73, 0x0a, 0x10, 0x63, 0x6f, 0x6e,
- 0x66, 0x69, 0x67, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x18, 0x0d, 0x20,
- 0x03, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
- 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f,
- 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x63,
- 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x1a, 0xc1,
- 0x04, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2a, 0x0a, 0x03, 0x62, 0x6c, 0x73,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65,
- 0x52, 0x03, 0x62, 0x6c, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x70, 0x5f,
- 0x70, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x70, 0x50,
- 0x6f, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x70, 0x73, 0x18, 0x05, 0x20,
- 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x54, 0x70, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x6d,
- 0x61, 0x78, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c,
- 0x61, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, 0x12, 0x2f, 0x0a, 0x0c, 0x74,
- 0x69, 0x6d, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52,
- 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x15,
- 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65,
- 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74,
- 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x14, 0x74, 0x72, 0x61, 0x6e, 0x73,
- 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12,
- 0x3b, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25,
- 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
- 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07,
- 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d,
- 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x63,
- 0x6f, 0x70, 0x69, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x6f, 0x77,
- 0x73, 0x43, 0x6f, 0x70, 0x69, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x5f,
- 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0d, 0x74,
- 0x69, 0x6d, 0x65, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x33, 0x0a, 0x0e,
- 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x18, 0x0d,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69,
- 0x6d, 0x65, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65,
- 0x64, 0x12, 0x2f, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5f, 0x74,
- 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12,
- 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c,
- 0x65, 0x64, 0x1a, 0x42, 0x0a, 0x14, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x76, 0x65, 0x72,
- 0x72, 0x69, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
- 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x28, 0x0a, 0x26, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61,
- 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65,
- 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x22, 0x4d, 0x0a, 0x27, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69,
- 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75,
- 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12,
- 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x22,
- 0xd7, 0x01, 0x0a, 0x0c, 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08,
- 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
- 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69,
- 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x72, 0x67, 0x18, 0x04,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x72, 0x67, 0x12,
- 0x1d, 0x0a, 0x0a, 0x76, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x05, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x64, 0x69, 0x66, 0x66, 0x55, 0x75, 0x69, 0x64, 0x12, 0x39,
- 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x1f, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x6a, 0x0a, 0x0d, 0x56, 0x44, 0x69,
- 0x66, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2a, 0x0a, 0x06, 0x6f, 0x75,
- 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65,
- 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06,
- 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x64, 0x69, 0x66, 0x66, 0x5f,
- 0x75, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x64, 0x69, 0x66,
- 0x66, 0x55, 0x75, 0x69, 0x64, 0x22, 0x79, 0x0a, 0x12, 0x56, 0x44, 0x69, 0x66, 0x66, 0x50, 0x69,
- 0x63, 0x6b, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x1f,
- 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x12,
- 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c,
- 0x22, 0xce, 0x01, 0x0a, 0x12, 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74,
- 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x6e, 0x6c, 0x79, 0x5f,
- 0x70, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6f, 0x6e, 0x6c, 0x79, 0x50,
- 0x6b, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x71, 0x75, 0x65, 0x72,
- 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67, 0x51, 0x75,
- 0x65, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6d,
- 0x61, 0x78, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x04,
- 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52,
- 0x6f, 0x77, 0x73, 0x12, 0x3c, 0x0a, 0x1b, 0x72, 0x6f, 0x77, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f,
- 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x5f,
- 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x72, 0x6f, 0x77, 0x44, 0x69, 0x66,
- 0x66, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x41,
- 0x74, 0x22, 0x8d, 0x03, 0x0a, 0x10, 0x56, 0x44, 0x69, 0x66, 0x66, 0x43, 0x6f, 0x72, 0x65, 0x4f,
- 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x1d,
- 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x08, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x19, 0x0a,
- 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52,
- 0x07, 0x6d, 0x61, 0x78, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63,
- 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x68, 0x65, 0x63,
- 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x70,
- 0x63, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65,
- 0x50, 0x63, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x73,
- 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x74, 0x69,
- 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x38, 0x0a, 0x19,
- 0x6d, 0x61, 0x78, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x74,
- 0x6f, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52,
- 0x15, 0x6d, 0x61, 0x78, 0x45, 0x78, 0x74, 0x72, 0x61, 0x52, 0x6f, 0x77, 0x73, 0x54, 0x6f, 0x43,
- 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,
- 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01,
- 0x28, 0x08, 0x52, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53,
- 0x74, 0x61, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x69, 0x66, 0x66,
- 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e,
- 0x6d, 0x61, 0x78, 0x44, 0x69, 0x66, 0x66, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x22,
- 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0a, 0x20, 0x01,
- 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x88,
- 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x72,
- 0x74, 0x22, 0xf2, 0x01, 0x0a, 0x0c, 0x56, 0x44, 0x69, 0x66, 0x66, 0x4f, 0x70, 0x74, 0x69, 0x6f,
- 0x6e, 0x73, 0x12, 0x4c, 0x0a, 0x0e, 0x70, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x5f, 0x6f, 0x70, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x74, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56,
- 0x44, 0x69, 0x66, 0x66, 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
- 0x73, 0x52, 0x0d, 0x70, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x12, 0x46, 0x0a, 0x0c, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d,
- 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66,
- 0x43, 0x6f, 0x72, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0b, 0x63, 0x6f, 0x72,
- 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4c, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x6f,
- 0x72, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74,
- 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4f,
- 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xed, 0x04, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74,
- 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72,
- 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08,
- 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
- 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c,
- 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x37,
- 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x03,
- 0x20, 0x03, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x71, 0x0a, 0x1b, 0x74, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66,
- 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x19, 0x74, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65,
- 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x06, 0x6f, 0x6e,
- 0x5f, 0x64, 0x64, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x62, 0x69, 0x6e,
- 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4f, 0x6e, 0x44, 0x44, 0x4c, 0x41, 0x63, 0x74,
- 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x05, 0x6f, 0x6e, 0x44, 0x64, 0x6c, 0x88, 0x01, 0x01, 0x12,
- 0x40, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25,
- 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
- 0x53, 0x74, 0x61, 0x74, 0x65, 0x48, 0x02, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x88, 0x01,
- 0x01, 0x12, 0x74, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6f, 0x76, 0x65, 0x72,
- 0x72, 0x69, 0x64, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x74, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65,
- 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x76,
- 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x1a, 0x42, 0x0a, 0x14, 0x43, 0x6f, 0x6e, 0x66, 0x69,
- 0x67, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
- 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
- 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x1e, 0x0a, 0x1c, 0x5f,
- 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f,
- 0x6f, 0x6e, 0x5f, 0x64, 0x64, 0x6c, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65,
- 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x22, 0x50, 0x0a, 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
- 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b,
- 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06,
- 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71,
- 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
- 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xd6, 0x02, 0x0a, 0x22, 0x55, 0x70, 0x64,
- 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57,
0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
- 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x66,
- 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f,
- 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52,
- 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
- 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x77, 0x6f, 0x72,
- 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x65, 0x78,
- 0x63, 0x6c, 0x75, 0x64, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x40,
- 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e,
- 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, 0x6c,
- 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53,
- 0x74, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x88, 0x01, 0x01,
- 0x12, 0x1d, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28,
- 0x09, 0x48, 0x01, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12,
- 0x28, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
- 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x70, 0x50, 0x6f,
- 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x74,
- 0x61, 0x74, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42,
- 0x10, 0x0a, 0x0e, 0x5f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f,
- 0x6e, 0x22, 0x51, 0x0a, 0x23, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c,
- 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75,
- 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79,
- 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65,
- 0x73, 0x75, 0x6c, 0x74, 0x22, 0x2f, 0x0a, 0x15, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x65, 0x71,
- 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a,
- 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0x18, 0x0a, 0x16, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x65,
- 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
- 0xdd, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c,
- 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70,
- 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70,
- 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x73, 0x6b,
- 0x69, 0x70, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74,
- 0x62, 0x65, 0x61, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x73, 0x6b, 0x69,
- 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61,
- 0x74, 0x73, 0x12, 0x27, 0x0a, 0x10, 0x6f, 0x6b, 0x5f, 0x69, 0x66, 0x5f, 0x6e, 0x6f, 0x74, 0x5f,
- 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6f, 0x6b,
- 0x49, 0x66, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x6d,
- 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x65, 0x6e, 0x61,
- 0x62, 0x6c, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x6d, 0x75, 0x6c, 0x74,
- 0x69, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22,
- 0x9f, 0x06, 0x0a, 0x16, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c,
- 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74,
- 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
- 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76,
- 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12,
- 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
- 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
- 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12,
- 0x29, 0x0a, 0x10, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x5f, 0x63, 0x68, 0x65, 0x63,
- 0x6b, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x65, 0x6e,
- 0x74, 0x6c, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x50, 0x0a, 0x07, 0x6d, 0x65,
- 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x74, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e,
- 0x74, 0x72, 0x79, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x19, 0x0a, 0x08,
- 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
- 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61,
- 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72,
- 0x79, 0x12, 0x52, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x63, 0x6f,
- 0x64, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x65,
- 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x43, 0x6f, 0x64, 0x65, 0x1a, 0x8b, 0x02, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63,
- 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
- 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63,
- 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75,
- 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74,
- 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09,
- 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72,
- 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12,
- 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f,
- 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12,
- 0x52, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65,
- 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d,
- 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b,
- 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43,
- 0x6f, 0x64, 0x65, 0x1a, 0x6c, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e,
- 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e,
- 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68,
- 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e,
- 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
- 0x01, 0x22, 0x1b, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65,
- 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xb6,
- 0x10, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53,
- 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a,
- 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73,
- 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05,
- 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61,
- 0x72, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18,
- 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12,
- 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08,
- 0x52, 0x06, 0x69, 0x73, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x65,
- 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73,
- 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x64, 0x6f,
- 0x72, 0x6d, 0x61, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x44,
- 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6c, 0x61, 0x67, 0x5f, 0x6d, 0x65,
- 0x74, 0x72, 0x69, 0x63, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x0e, 0x6c, 0x61, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x51, 0x75, 0x65, 0x72, 0x79,
- 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69,
- 0x63, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63,
- 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x51, 0x75, 0x65, 0x72, 0x79,
- 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x74, 0x68, 0x72, 0x65,
- 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x64, 0x65, 0x66,
- 0x61, 0x75, 0x6c, 0x74, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x3c, 0x0a,
- 0x1b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x75, 0x73, 0x65,
- 0x64, 0x5f, 0x61, 0x73, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x0b, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x17, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x55, 0x73,
- 0x65, 0x64, 0x41, 0x73, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x73, 0x0a, 0x12, 0x61,
- 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63,
- 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54,
- 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65,
- 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x61,
- 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73,
- 0x12, 0x70, 0x0a, 0x11, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73,
- 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x74, 0x61,
+ 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01,
+ 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x49, 0x64, 0x73,
+ 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x77, 0x6f, 0x72, 0x6b,
+ 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x69, 0x6e, 0x63,
+ 0x6c, 0x75, 0x64, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x4c, 0x0a,
+ 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18,
+ 0x03, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57,
+ 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x69, 0x6e,
+ 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x65,
+ 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73,
+ 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x57,
+ 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x4c, 0x0a, 0x0e, 0x65, 0x78, 0x63, 0x6c,
+ 0x75, 0x64, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0e,
+ 0x32, 0x25, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52,
+ 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
+ 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65,
+ 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64,
+ 0x65, 0x5f, 0x66, 0x72, 0x6f, 0x7a, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d,
+ 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x46, 0x72, 0x6f, 0x7a, 0x65, 0x6e, 0x22, 0x76, 0x0a,
+ 0x21, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x12, 0x51, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18,
+ 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
+ 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52,
+ 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
+ 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b,
+ 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x22, 0x3d, 0x0a, 0x1f, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65,
+ 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
+ 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b,
+ 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b,
+ 0x66, 0x6c, 0x6f, 0x77, 0x22, 0xe7, 0x0a, 0x0a, 0x20, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65,
+ 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
+ 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72,
+ 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72,
+ 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x03,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28,
+ 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54,
+ 0x79, 0x70, 0x65, 0x73, 0x12, 0x6c, 0x0a, 0x1b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73,
+ 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65,
+ 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65,
+ 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x19, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53,
+ 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
+ 0x63, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74,
+ 0x61, 0x67, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12,
+ 0x49, 0x0a, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x79, 0x70, 0x65,
+ 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x77, 0x6f,
+ 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x79, 0x70, 0x65, 0x12, 0x53, 0x0a, 0x11, 0x77, 0x6f,
+ 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x75, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18,
+ 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57,
+ 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0f,
+ 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12,
+ 0x30, 0x0a, 0x14, 0x64, 0x65, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61,
+ 0x72, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x64,
+ 0x65, 0x66, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x4b, 0x65, 0x79,
+ 0x73, 0x12, 0x54, 0x0a, 0x07, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
+ 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65, 0x70, 0x6c,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x07,
+ 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x12, 0x73, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6f, 0x76, 0x65, 0x72,
+ 0x72, 0x69, 0x64, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x74, 0x61,
0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74,
- 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69,
- 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
- 0x52, 0x10, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c,
- 0x64, 0x73, 0x12, 0x67, 0x0a, 0x0e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x68, 0x65,
- 0x61, 0x6c, 0x74, 0x68, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x74, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47,
- 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75,
- 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63,
- 0x73, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x65,
- 0x74, 0x72, 0x69, 0x63, 0x73, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x67, 0x0a, 0x0e, 0x74,
- 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x73, 0x18, 0x0f, 0x20,
- 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
- 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74,
- 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x2e, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73,
- 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64,
- 0x41, 0x70, 0x70, 0x73, 0x12, 0x74, 0x0a, 0x13, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x68, 0x65, 0x63,
- 0x6b, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28,
- 0x0b, 0x32, 0x44, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
- 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c,
- 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x2e, 0x41, 0x70, 0x70, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69,
- 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x61, 0x70, 0x70, 0x43, 0x68, 0x65, 0x63,
- 0x6b, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65,
- 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x11,
- 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x43, 0x68,
- 0x65, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x5e, 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x5f,
- 0x61, 0x70, 0x70, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x74, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47,
- 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75,
- 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74,
- 0x41, 0x70, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x65, 0x6e,
- 0x74, 0x41, 0x70, 0x70, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52,
- 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65,
- 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f,
- 0x72, 0x1a, 0x80, 0x01, 0x0a, 0x16, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64,
- 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
- 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x50,
- 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e,
- 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74,
- 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74,
- 0x72, 0x69, 0x63, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
- 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x43, 0x0a, 0x15, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68,
- 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
- 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
- 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x81, 0x01, 0x0a, 0x0c, 0x4d, 0x65,
- 0x74, 0x72, 0x69, 0x63, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x34, 0x0a, 0x0f, 0x6c, 0x61,
- 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x5f, 0x61, 0x74, 0x18, 0x01, 0x20,
+ 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73,
+ 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x76, 0x65,
+ 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x1a, 0xc1, 0x04, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x65, 0x61,
+ 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69,
+ 0x64, 0x12, 0x2a, 0x0a, 0x03, 0x62, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18,
+ 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x42, 0x69, 0x6e, 0x6c,
+ 0x6f, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x03, 0x62, 0x6c, 0x73, 0x12, 0x10, 0x0a,
+ 0x03, 0x70, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x12,
+ 0x19, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x70, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x70, 0x50, 0x6f, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x6d, 0x61,
+ 0x78, 0x5f, 0x74, 0x70, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x61, 0x78,
+ 0x54, 0x70, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03,
+ 0x52, 0x11, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x4c, 0x61, 0x67, 0x12, 0x2f, 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61,
+ 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69,
+ 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x55, 0x70, 0x64,
+ 0x61, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x08, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d,
- 0x65, 0x52, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x41, 0x74,
- 0x12, 0x3b, 0x0a, 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63,
- 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e,
- 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x1a, 0x7c, 0x0a,
- 0x12, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x45, 0x6e,
- 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x50, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e,
- 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f,
- 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68,
- 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5c, 0x0a, 0x12, 0x54,
- 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72,
- 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
- 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x68,
- 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x41, 0x70, 0x70, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x41, 0x70, 0x70,
- 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e,
- 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a,
- 0xad, 0x01, 0x0a, 0x09, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x41, 0x70, 0x70, 0x12, 0x2b, 0x0a,
- 0x0a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52,
- 0x09, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74,
- 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
- 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x52, 0x0a, 0x0d, 0x72,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01,
- 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
- 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f,
- 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64,
- 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x1a,
- 0x76, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x41, 0x70, 0x70, 0x73, 0x45, 0x6e, 0x74,
+ 0x65, 0x52, 0x14, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69,
+ 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3b, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65,
+ 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73,
+ 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18,
+ 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1f,
+ 0x0a, 0x0b, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x64, 0x18, 0x0b, 0x20,
+ 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x6f, 0x77, 0x73, 0x43, 0x6f, 0x70, 0x69, 0x65, 0x64, 0x12,
+ 0x33, 0x0a, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61,
+ 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65,
+ 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x48, 0x65, 0x61, 0x72, 0x74,
+ 0x62, 0x65, 0x61, 0x74, 0x12, 0x33, 0x0a, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x74, 0x68, 0x72,
+ 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76,
+ 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65,
+ 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x12, 0x2f, 0x0a, 0x13, 0x63, 0x6f, 0x6d,
+ 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64,
+ 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e,
+ 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x1a, 0x42, 0x0a, 0x14, 0x43, 0x6f,
+ 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74,
0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
+ 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x28,
+ 0x0a, 0x26, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e,
+ 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4d, 0x0a, 0x27, 0x56, 0x61, 0x6c, 0x69,
+ 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0xd7, 0x01, 0x0a, 0x0c, 0x56, 0x44, 0x69, 0x66,
+ 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
+ 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x5f, 0x61, 0x72, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x72, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x64, 0x69, 0x66, 0x66,
+ 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x64, 0x69,
+ 0x66, 0x66, 0x55, 0x75, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66,
+ 0x66, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x22, 0x6a, 0x0a, 0x0d, 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02,
+ 0x69, 0x64, 0x12, 0x2a, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79,
+ 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1d,
+ 0x0a, 0x0a, 0x76, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x09, 0x76, 0x64, 0x69, 0x66, 0x66, 0x55, 0x75, 0x69, 0x64, 0x22, 0x79, 0x0a,
+ 0x12, 0x56, 0x44, 0x69, 0x66, 0x66, 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79,
+ 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+ 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75,
+ 0x72, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65,
+ 0x74, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61,
+ 0x72, 0x67, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x22, 0xce, 0x01, 0x0a, 0x12, 0x56, 0x44, 0x69,
+ 0x66, 0x66, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12,
+ 0x19, 0x0a, 0x08, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x70, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x08, 0x52, 0x07, 0x6f, 0x6e, 0x6c, 0x79, 0x50, 0x6b, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65,
+ 0x62, 0x75, 0x67, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52,
+ 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x66,
+ 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72,
+ 0x6d, 0x61, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c,
+ 0x65, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6d, 0x61,
+ 0x78, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x3c, 0x0a, 0x1b, 0x72,
+ 0x6f, 0x77, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74,
+ 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03,
+ 0x52, 0x17, 0x72, 0x6f, 0x77, 0x44, 0x69, 0x66, 0x66, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54,
+ 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x41, 0x74, 0x22, 0x8d, 0x03, 0x0a, 0x10, 0x56, 0x44,
+ 0x69, 0x66, 0x66, 0x43, 0x6f, 0x72, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x16,
+ 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x72,
+ 0x65, 0x74, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f,
+ 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x6f, 0x77,
+ 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x52, 0x6f, 0x77, 0x73,
+ 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x08, 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x1d, 0x0a, 0x0a,
+ 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x70, 0x63, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03,
+ 0x52, 0x09, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x50, 0x63, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x74,
+ 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x06,
+ 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x63,
+ 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x38, 0x0a, 0x19, 0x6d, 0x61, 0x78, 0x5f, 0x65, 0x78, 0x74, 0x72,
+ 0x61, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72,
+ 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x6d, 0x61, 0x78, 0x45, 0x78, 0x74, 0x72,
+ 0x61, 0x52, 0x6f, 0x77, 0x73, 0x54, 0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x12, 0x2c,
+ 0x0a, 0x12, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73,
+ 0x74, 0x61, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x75, 0x70, 0x64, 0x61,
+ 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x10,
+ 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73,
+ 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x44, 0x69, 0x66, 0x66, 0x53,
+ 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73,
+ 0x74, 0x61, 0x72, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x61, 0x75,
+ 0x74, 0x6f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x61,
+ 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x22, 0xf2, 0x01, 0x0a, 0x0c, 0x56, 0x44,
+ 0x69, 0x66, 0x66, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4c, 0x0a, 0x0e, 0x70, 0x69,
+ 0x63, 0x6b, 0x65, 0x72, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
+ 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x50, 0x69, 0x63, 0x6b,
+ 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x70, 0x69, 0x63, 0x6b, 0x65,
+ 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x46, 0x0a, 0x0c, 0x63, 0x6f, 0x72, 0x65,
+ 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23,
+ 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x43, 0x6f, 0x72, 0x65, 0x4f, 0x70, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x52, 0x0b, 0x63, 0x6f, 0x72, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x12, 0x4c, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69,
+ 0x66, 0x66, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
+ 0x0d, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xed,
+ 0x04, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
+ 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52,
+ 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74,
+ 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79,
+ 0x70, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12,
+ 0x71, 0x0a, 0x1b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x04,
+ 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e,
+ 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53,
+ 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
+ 0x63, 0x65, 0x48, 0x00, 0x52, 0x19, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x88,
+ 0x01, 0x01, 0x12, 0x33, 0x0a, 0x06, 0x6f, 0x6e, 0x5f, 0x64, 0x64, 0x6c, 0x18, 0x05, 0x20, 0x01,
+ 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x4f, 0x6e, 0x44, 0x44, 0x4c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x05, 0x6f,
+ 0x6e, 0x44, 0x64, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x40, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65,
+ 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x48, 0x02, 0x52,
+ 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x88, 0x01, 0x01, 0x12, 0x74, 0x0a, 0x10, 0x63, 0x6f, 0x6e,
+ 0x66, 0x69, 0x67, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x18, 0x08, 0x20,
+ 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
+ 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52,
+ 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
+ 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+ 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f,
+ 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x1a,
+ 0x42, 0x0a, 0x14, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64,
+ 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
+ 0x02, 0x38, 0x01, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73,
+ 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65,
+ 0x6e, 0x63, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x6f, 0x6e, 0x5f, 0x64, 0x64, 0x6c, 0x42, 0x08,
+ 0x0a, 0x06, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x22, 0x50,
+ 0x0a, 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65,
+ 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
+ 0x22, 0xd6, 0x02, 0x0a, 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x5f, 0x77,
+ 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c,
+ 0x61, 0x6c, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x2b, 0x0a, 0x11,
+ 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
+ 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65,
+ 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63,
+ 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x03,
+ 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x57, 0x6f, 0x72,
+ 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x40, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18,
+ 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57,
+ 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x05,
+ 0x73, 0x74, 0x61, 0x74, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73,
+ 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x07, 0x6d, 0x65, 0x73,
+ 0x73, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x70, 0x5f,
+ 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02,
+ 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01,
+ 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f,
+ 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x73, 0x74, 0x6f, 0x70,
+ 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x51, 0x0a, 0x23, 0x55, 0x70, 0x64,
+ 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57,
+ 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65,
+ 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x2f, 0x0a, 0x15,
+ 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18,
+ 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0x18, 0x0a,
+ 0x16, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xdd, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63,
+ 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05,
+ 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f,
+ 0x70, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x18, 0x03, 0x20,
+ 0x01, 0x28, 0x08, 0x52, 0x15, 0x73, 0x6b, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x12, 0x27, 0x0a, 0x10, 0x6f, 0x6b,
+ 0x5f, 0x69, 0x66, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x04,
+ 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6f, 0x6b, 0x49, 0x66, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69,
+ 0x73, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x6d, 0x65, 0x74,
+ 0x72, 0x69, 0x63, 0x73, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01,
+ 0x28, 0x08, 0x52, 0x13, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73,
+ 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x9f, 0x06, 0x0a, 0x16, 0x43, 0x68, 0x65, 0x63,
+ 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64,
+ 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43,
+ 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x68, 0x72,
+ 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x74, 0x68,
+ 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72,
+ 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x18, 0x0a,
+ 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
+ 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x63, 0x65, 0x6e,
+ 0x74, 0x6c, 0x79, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28,
+ 0x08, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b,
+ 0x65, 0x64, 0x12, 0x50, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x07, 0x20,
+ 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
+ 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72,
+ 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d,
+ 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x6d, 0x65, 0x74,
+ 0x72, 0x69, 0x63, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
+ 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12,
+ 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x52, 0x0a, 0x0d, 0x72, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e,
+ 0x32, 0x2d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74,
+ 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52,
+ 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x1a, 0x8b, 0x02,
+ 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b,
+ 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x05, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a,
+ 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64,
+ 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c,
+ 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61,
+ 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
+ 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x52, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d,
+ 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65,
+ 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x0c, 0x72,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x1a, 0x6c, 0x0a, 0x0c, 0x4d,
+ 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b,
+ 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a,
+ 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x05,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x1b, 0x0a, 0x19, 0x47, 0x65, 0x74,
+ 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xb6, 0x10, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x54, 0x68,
+ 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f,
+ 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73,
+ 0x5f, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69,
+ 0x73, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x6f, 0x70,
+ 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4f, 0x70, 0x65, 0x6e,
+ 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x06,
+ 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12,
+ 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x64, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x74, 0x18, 0x07, 0x20,
+ 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x44, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x74, 0x12, 0x28,
+ 0x0a, 0x10, 0x6c, 0x61, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x71, 0x75, 0x65,
+ 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6c, 0x61, 0x67, 0x4d, 0x65, 0x74,
+ 0x72, 0x69, 0x63, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x75, 0x73, 0x74,
+ 0x6f, 0x6d, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18,
+ 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4d, 0x65, 0x74,
+ 0x72, 0x69, 0x63, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x65, 0x66, 0x61,
+ 0x75, 0x6c, 0x74, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x0a, 0x20,
+ 0x01, 0x28, 0x01, 0x52, 0x10, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x68, 0x72, 0x65,
+ 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x3c, 0x0a, 0x1b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f,
+ 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x61, 0x73, 0x5f, 0x64, 0x65, 0x66,
+ 0x61, 0x75, 0x6c, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x6d, 0x65, 0x74, 0x72,
+ 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x55, 0x73, 0x65, 0x64, 0x41, 0x73, 0x44, 0x65, 0x66, 0x61,
+ 0x75, 0x6c, 0x74, 0x12, 0x73, 0x0a, 0x12, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65,
+ 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32,
+ 0x44, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72,
+ 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41,
+ 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73,
+ 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65,
+ 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x70, 0x0a, 0x11, 0x6d, 0x65, 0x74, 0x72,
+ 0x69, 0x63, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x18, 0x0d, 0x20,
+ 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74,
0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x41, 0x70, 0x70, 0x52, 0x05, 0x76, 0x61,
- 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0x3e, 0x0a, 0x19, 0x54, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72,
- 0x65, 0x6e, 0x63, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4e, 0x59, 0x10, 0x00, 0x12, 0x0b, 0x0a,
- 0x07, 0x49, 0x4e, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e,
- 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x03, 0x2a, 0x83, 0x01, 0x0a, 0x1a, 0x43, 0x68, 0x65, 0x63,
- 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x55, 0x4e, 0x44, 0x45, 0x46, 0x49,
- 0x4e, 0x45, 0x44, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x01, 0x12, 0x16, 0x0a,
- 0x12, 0x54, 0x48, 0x52, 0x45, 0x53, 0x48, 0x4f, 0x4c, 0x44, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45,
- 0x44, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x50, 0x50, 0x5f, 0x44, 0x45, 0x4e,
- 0x49, 0x45, 0x44, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e,
- 0x5f, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4e, 0x54,
- 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x05, 0x42, 0x30, 0x5a,
- 0x2e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73,
- 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x62,
- 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f,
+ 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63,
+ 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x12, 0x67, 0x0a, 0x0e, 0x6d, 0x65,
+ 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x18, 0x0e, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
+ 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74,
+ 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x45,
+ 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x48, 0x65, 0x61,
+ 0x6c, 0x74, 0x68, 0x12, 0x67, 0x0a, 0x0e, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64,
+ 0x5f, 0x61, 0x70, 0x70, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74,
+ 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x68, 0x72, 0x6f, 0x74,
+ 0x74, 0x6c, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x74,
+ 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x74, 0x0a, 0x13,
+ 0x61, 0x70, 0x70, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x72,
+ 0x69, 0x63, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65,
+ 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x70, 0x70, 0x43, 0x68, 0x65, 0x63,
+ 0x6b, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52,
+ 0x11, 0x61, 0x70, 0x70, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69,
+ 0x63, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x5f, 0x63,
+ 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x72, 0x65,
+ 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x5e, 0x0a,
+ 0x0b, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x70, 0x70, 0x73, 0x18, 0x12, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
+ 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74,
+ 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x41, 0x70, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72,
+ 0x79, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x41, 0x70, 0x70, 0x73, 0x1a, 0x3a, 0x0a,
+ 0x0c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x14, 0x0a,
+ 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x1a, 0x80, 0x01, 0x0a, 0x16, 0x41, 0x67,
+ 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45,
+ 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x50, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
+ 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72,
+ 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x65, 0x73, 0x75, 0x6c,
+ 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x43, 0x0a, 0x15,
+ 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73,
+ 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
+ 0x01, 0x1a, 0x81, 0x01, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x48, 0x65, 0x61, 0x6c,
+ 0x74, 0x68, 0x12, 0x34, 0x0a, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74,
+ 0x68, 0x79, 0x5f, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74,
+ 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x48,
+ 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x41, 0x74, 0x12, 0x3b, 0x0a, 0x1a, 0x73, 0x65, 0x63, 0x6f,
+ 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x68,
+ 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x73, 0x65,
+ 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x48, 0x65,
+ 0x61, 0x6c, 0x74, 0x68, 0x79, 0x1a, 0x7c, 0x0a, 0x12, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73,
+ 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b,
+ 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x50, 0x0a,
+ 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61,
+ 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72,
+ 0x69, 0x63, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
+ 0x02, 0x38, 0x01, 0x1a, 0x5c, 0x0a, 0x12, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64,
+ 0x41, 0x70, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x6f, 0x70,
+ 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x41,
+ 0x70, 0x70, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
+ 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x41, 0x70, 0x70, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x4d,
+ 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b,
+ 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a,
+ 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xad, 0x01, 0x0a, 0x09, 0x52, 0x65, 0x63, 0x65,
+ 0x6e, 0x74, 0x41, 0x70, 0x70, 0x12, 0x2b, 0x0a, 0x0a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64,
+ 0x5f, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69,
+ 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x09, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64,
+ 0x41, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64,
+ 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43,
+ 0x6f, 0x64, 0x65, 0x12, 0x52, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f,
+ 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43,
+ 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x1a, 0x76, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x65, 0x6e,
+ 0x74, 0x41, 0x70, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
+ 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74,
+ 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x6e,
+ 0x74, 0x41, 0x70, 0x70, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22,
+ 0xaa, 0x01, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20,
+ 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
+ 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61,
+ 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e,
+ 0x74, 0x72, 0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70,
+ 0x6c, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c,
+ 0x61, 0x63, 0x65, 0x1a, 0x37, 0x0a, 0x09, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
+ 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
+ 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x92, 0x01, 0x0a,
+ 0x12, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
+ 0x0b, 0x32, 0x2f, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
+ 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x67, 0x73,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74,
+ 0x72, 0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x54, 0x61, 0x67, 0x73,
+ 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
+ 0x01, 0x2a, 0x3e, 0x0a, 0x19, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x07,
+ 0x0a, 0x03, 0x41, 0x4e, 0x59, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x4f, 0x52, 0x44,
+ 0x45, 0x52, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10,
+ 0x03, 0x2a, 0x83, 0x01, 0x0a, 0x1a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74,
+ 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65,
+ 0x12, 0x0d, 0x0a, 0x09, 0x55, 0x4e, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x00, 0x12,
+ 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x54, 0x48, 0x52, 0x45, 0x53,
+ 0x48, 0x4f, 0x4c, 0x44, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, 0x10, 0x02, 0x12,
+ 0x0e, 0x0a, 0x0a, 0x41, 0x50, 0x50, 0x5f, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x03, 0x12,
+ 0x12, 0x0a, 0x0e, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x4d, 0x45, 0x54, 0x52, 0x49,
+ 0x43, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f,
+ 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x05, 0x42, 0x30, 0x5a, 0x2e, 0x76, 0x69, 0x74, 0x65, 0x73,
+ 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76,
+ 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
+ 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x33,
}
var (
@@ -9129,7 +9287,7 @@ func file_tabletmanagerdata_proto_rawDescGZIP() []byte {
}
var file_tabletmanagerdata_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
-var file_tabletmanagerdata_proto_msgTypes = make([]protoimpl.MessageInfo, 154)
+var file_tabletmanagerdata_proto_msgTypes = make([]protoimpl.MessageInfo, 165)
var file_tabletmanagerdata_proto_goTypes = []any{
(TabletSelectionPreference)(0), // 0: tabletmanagerdata.TabletSelectionPreference
(CheckThrottlerResponseCode)(0), // 1: tabletmanagerdata.CheckThrottlerResponseCode
@@ -9185,229 +9343,243 @@ var file_tabletmanagerdata_proto_goTypes = []any{
(*GetUnresolvedTransactionsResponse)(nil), // 51: tabletmanagerdata.GetUnresolvedTransactionsResponse
(*ReadTransactionRequest)(nil), // 52: tabletmanagerdata.ReadTransactionRequest
(*ReadTransactionResponse)(nil), // 53: tabletmanagerdata.ReadTransactionResponse
- (*ConcludeTransactionRequest)(nil), // 54: tabletmanagerdata.ConcludeTransactionRequest
- (*ConcludeTransactionResponse)(nil), // 55: tabletmanagerdata.ConcludeTransactionResponse
- (*MysqlHostMetricsRequest)(nil), // 56: tabletmanagerdata.MysqlHostMetricsRequest
- (*MysqlHostMetricsResponse)(nil), // 57: tabletmanagerdata.MysqlHostMetricsResponse
- (*ReplicationStatusRequest)(nil), // 58: tabletmanagerdata.ReplicationStatusRequest
- (*ReplicationStatusResponse)(nil), // 59: tabletmanagerdata.ReplicationStatusResponse
- (*PrimaryStatusRequest)(nil), // 60: tabletmanagerdata.PrimaryStatusRequest
- (*PrimaryStatusResponse)(nil), // 61: tabletmanagerdata.PrimaryStatusResponse
- (*PrimaryPositionRequest)(nil), // 62: tabletmanagerdata.PrimaryPositionRequest
- (*PrimaryPositionResponse)(nil), // 63: tabletmanagerdata.PrimaryPositionResponse
- (*WaitForPositionRequest)(nil), // 64: tabletmanagerdata.WaitForPositionRequest
- (*WaitForPositionResponse)(nil), // 65: tabletmanagerdata.WaitForPositionResponse
- (*StopReplicationRequest)(nil), // 66: tabletmanagerdata.StopReplicationRequest
- (*StopReplicationResponse)(nil), // 67: tabletmanagerdata.StopReplicationResponse
- (*StopReplicationMinimumRequest)(nil), // 68: tabletmanagerdata.StopReplicationMinimumRequest
- (*StopReplicationMinimumResponse)(nil), // 69: tabletmanagerdata.StopReplicationMinimumResponse
- (*StartReplicationRequest)(nil), // 70: tabletmanagerdata.StartReplicationRequest
- (*StartReplicationResponse)(nil), // 71: tabletmanagerdata.StartReplicationResponse
- (*StartReplicationUntilAfterRequest)(nil), // 72: tabletmanagerdata.StartReplicationUntilAfterRequest
- (*StartReplicationUntilAfterResponse)(nil), // 73: tabletmanagerdata.StartReplicationUntilAfterResponse
- (*GetReplicasRequest)(nil), // 74: tabletmanagerdata.GetReplicasRequest
- (*GetReplicasResponse)(nil), // 75: tabletmanagerdata.GetReplicasResponse
- (*ResetReplicationRequest)(nil), // 76: tabletmanagerdata.ResetReplicationRequest
- (*ResetReplicationResponse)(nil), // 77: tabletmanagerdata.ResetReplicationResponse
- (*VReplicationExecRequest)(nil), // 78: tabletmanagerdata.VReplicationExecRequest
- (*VReplicationExecResponse)(nil), // 79: tabletmanagerdata.VReplicationExecResponse
- (*VReplicationWaitForPosRequest)(nil), // 80: tabletmanagerdata.VReplicationWaitForPosRequest
- (*VReplicationWaitForPosResponse)(nil), // 81: tabletmanagerdata.VReplicationWaitForPosResponse
- (*InitPrimaryRequest)(nil), // 82: tabletmanagerdata.InitPrimaryRequest
- (*InitPrimaryResponse)(nil), // 83: tabletmanagerdata.InitPrimaryResponse
- (*PopulateReparentJournalRequest)(nil), // 84: tabletmanagerdata.PopulateReparentJournalRequest
- (*PopulateReparentJournalResponse)(nil), // 85: tabletmanagerdata.PopulateReparentJournalResponse
- (*InitReplicaRequest)(nil), // 86: tabletmanagerdata.InitReplicaRequest
- (*InitReplicaResponse)(nil), // 87: tabletmanagerdata.InitReplicaResponse
- (*DemotePrimaryRequest)(nil), // 88: tabletmanagerdata.DemotePrimaryRequest
- (*DemotePrimaryResponse)(nil), // 89: tabletmanagerdata.DemotePrimaryResponse
- (*UndoDemotePrimaryRequest)(nil), // 90: tabletmanagerdata.UndoDemotePrimaryRequest
- (*UndoDemotePrimaryResponse)(nil), // 91: tabletmanagerdata.UndoDemotePrimaryResponse
- (*ReplicaWasPromotedRequest)(nil), // 92: tabletmanagerdata.ReplicaWasPromotedRequest
- (*ReplicaWasPromotedResponse)(nil), // 93: tabletmanagerdata.ReplicaWasPromotedResponse
- (*ResetReplicationParametersRequest)(nil), // 94: tabletmanagerdata.ResetReplicationParametersRequest
- (*ResetReplicationParametersResponse)(nil), // 95: tabletmanagerdata.ResetReplicationParametersResponse
- (*FullStatusRequest)(nil), // 96: tabletmanagerdata.FullStatusRequest
- (*FullStatusResponse)(nil), // 97: tabletmanagerdata.FullStatusResponse
- (*SetReplicationSourceRequest)(nil), // 98: tabletmanagerdata.SetReplicationSourceRequest
- (*SetReplicationSourceResponse)(nil), // 99: tabletmanagerdata.SetReplicationSourceResponse
- (*ReplicaWasRestartedRequest)(nil), // 100: tabletmanagerdata.ReplicaWasRestartedRequest
- (*ReplicaWasRestartedResponse)(nil), // 101: tabletmanagerdata.ReplicaWasRestartedResponse
- (*StopReplicationAndGetStatusRequest)(nil), // 102: tabletmanagerdata.StopReplicationAndGetStatusRequest
- (*StopReplicationAndGetStatusResponse)(nil), // 103: tabletmanagerdata.StopReplicationAndGetStatusResponse
- (*PromoteReplicaRequest)(nil), // 104: tabletmanagerdata.PromoteReplicaRequest
- (*PromoteReplicaResponse)(nil), // 105: tabletmanagerdata.PromoteReplicaResponse
- (*BackupRequest)(nil), // 106: tabletmanagerdata.BackupRequest
- (*BackupResponse)(nil), // 107: tabletmanagerdata.BackupResponse
- (*RestoreFromBackupRequest)(nil), // 108: tabletmanagerdata.RestoreFromBackupRequest
- (*RestoreFromBackupResponse)(nil), // 109: tabletmanagerdata.RestoreFromBackupResponse
- (*CreateVReplicationWorkflowRequest)(nil), // 110: tabletmanagerdata.CreateVReplicationWorkflowRequest
- (*CreateVReplicationWorkflowResponse)(nil), // 111: tabletmanagerdata.CreateVReplicationWorkflowResponse
- (*DeleteVReplicationWorkflowRequest)(nil), // 112: tabletmanagerdata.DeleteVReplicationWorkflowRequest
- (*DeleteVReplicationWorkflowResponse)(nil), // 113: tabletmanagerdata.DeleteVReplicationWorkflowResponse
- (*HasVReplicationWorkflowsRequest)(nil), // 114: tabletmanagerdata.HasVReplicationWorkflowsRequest
- (*HasVReplicationWorkflowsResponse)(nil), // 115: tabletmanagerdata.HasVReplicationWorkflowsResponse
- (*ReadVReplicationWorkflowsRequest)(nil), // 116: tabletmanagerdata.ReadVReplicationWorkflowsRequest
- (*ReadVReplicationWorkflowsResponse)(nil), // 117: tabletmanagerdata.ReadVReplicationWorkflowsResponse
- (*ReadVReplicationWorkflowRequest)(nil), // 118: tabletmanagerdata.ReadVReplicationWorkflowRequest
- (*ReadVReplicationWorkflowResponse)(nil), // 119: tabletmanagerdata.ReadVReplicationWorkflowResponse
- (*ValidateVReplicationPermissionsRequest)(nil), // 120: tabletmanagerdata.ValidateVReplicationPermissionsRequest
- (*ValidateVReplicationPermissionsResponse)(nil), // 121: tabletmanagerdata.ValidateVReplicationPermissionsResponse
- (*VDiffRequest)(nil), // 122: tabletmanagerdata.VDiffRequest
- (*VDiffResponse)(nil), // 123: tabletmanagerdata.VDiffResponse
- (*VDiffPickerOptions)(nil), // 124: tabletmanagerdata.VDiffPickerOptions
- (*VDiffReportOptions)(nil), // 125: tabletmanagerdata.VDiffReportOptions
- (*VDiffCoreOptions)(nil), // 126: tabletmanagerdata.VDiffCoreOptions
- (*VDiffOptions)(nil), // 127: tabletmanagerdata.VDiffOptions
- (*UpdateVReplicationWorkflowRequest)(nil), // 128: tabletmanagerdata.UpdateVReplicationWorkflowRequest
- (*UpdateVReplicationWorkflowResponse)(nil), // 129: tabletmanagerdata.UpdateVReplicationWorkflowResponse
- (*UpdateVReplicationWorkflowsRequest)(nil), // 130: tabletmanagerdata.UpdateVReplicationWorkflowsRequest
- (*UpdateVReplicationWorkflowsResponse)(nil), // 131: tabletmanagerdata.UpdateVReplicationWorkflowsResponse
- (*ResetSequencesRequest)(nil), // 132: tabletmanagerdata.ResetSequencesRequest
- (*ResetSequencesResponse)(nil), // 133: tabletmanagerdata.ResetSequencesResponse
- (*CheckThrottlerRequest)(nil), // 134: tabletmanagerdata.CheckThrottlerRequest
- (*CheckThrottlerResponse)(nil), // 135: tabletmanagerdata.CheckThrottlerResponse
- (*GetThrottlerStatusRequest)(nil), // 136: tabletmanagerdata.GetThrottlerStatusRequest
- (*GetThrottlerStatusResponse)(nil), // 137: tabletmanagerdata.GetThrottlerStatusResponse
- nil, // 138: tabletmanagerdata.UserPermission.PrivilegesEntry
- nil, // 139: tabletmanagerdata.DbPermission.PrivilegesEntry
- nil, // 140: tabletmanagerdata.ExecuteHookRequest.ExtraEnvEntry
- nil, // 141: tabletmanagerdata.GetGlobalStatusVarsResponse.StatusValuesEntry
- (*ReadVReplicationWorkflowResponse_Stream)(nil), // 142: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream
- nil, // 143: tabletmanagerdata.ReadVReplicationWorkflowResponse.ConfigOverridesEntry
- nil, // 144: tabletmanagerdata.UpdateVReplicationWorkflowRequest.ConfigOverridesEntry
- (*CheckThrottlerResponse_Metric)(nil), // 145: tabletmanagerdata.CheckThrottlerResponse.Metric
- nil, // 146: tabletmanagerdata.CheckThrottlerResponse.MetricsEntry
- (*GetThrottlerStatusResponse_MetricResult)(nil), // 147: tabletmanagerdata.GetThrottlerStatusResponse.MetricResult
- nil, // 148: tabletmanagerdata.GetThrottlerStatusResponse.AggregatedMetricsEntry
- nil, // 149: tabletmanagerdata.GetThrottlerStatusResponse.MetricThresholdsEntry
- (*GetThrottlerStatusResponse_MetricHealth)(nil), // 150: tabletmanagerdata.GetThrottlerStatusResponse.MetricHealth
- nil, // 151: tabletmanagerdata.GetThrottlerStatusResponse.MetricsHealthEntry
- nil, // 152: tabletmanagerdata.GetThrottlerStatusResponse.ThrottledAppsEntry
- nil, // 153: tabletmanagerdata.GetThrottlerStatusResponse.AppCheckedMetricsEntry
- (*GetThrottlerStatusResponse_RecentApp)(nil), // 154: tabletmanagerdata.GetThrottlerStatusResponse.RecentApp
- nil, // 155: tabletmanagerdata.GetThrottlerStatusResponse.RecentAppsEntry
- (*query.Field)(nil), // 156: query.Field
- (topodata.TabletType)(0), // 157: topodata.TabletType
- (*vtrpc.CallerID)(nil), // 158: vtrpc.CallerID
- (*query.QueryResult)(nil), // 159: query.QueryResult
- (*query.TransactionMetadata)(nil), // 160: query.TransactionMetadata
- (*mysqlctl.HostMetricsResponse)(nil), // 161: mysqlctl.HostMetricsResponse
- (*replicationdata.Status)(nil), // 162: replicationdata.Status
- (*replicationdata.PrimaryStatus)(nil), // 163: replicationdata.PrimaryStatus
- (*topodata.TabletAlias)(nil), // 164: topodata.TabletAlias
- (*replicationdata.FullStatus)(nil), // 165: replicationdata.FullStatus
- (replicationdata.StopReplicationMode)(0), // 166: replicationdata.StopReplicationMode
- (*replicationdata.StopReplicationStatus)(nil), // 167: replicationdata.StopReplicationStatus
- (*logutil.Event)(nil), // 168: logutil.Event
- (*vttime.Time)(nil), // 169: vttime.Time
- (*binlogdata.BinlogSource)(nil), // 170: binlogdata.BinlogSource
- (binlogdata.VReplicationWorkflowType)(0), // 171: binlogdata.VReplicationWorkflowType
- (binlogdata.VReplicationWorkflowSubType)(0), // 172: binlogdata.VReplicationWorkflowSubType
- (binlogdata.VReplicationWorkflowState)(0), // 173: binlogdata.VReplicationWorkflowState
- (binlogdata.OnDDLAction)(0), // 174: binlogdata.OnDDLAction
- (*topodata.ThrottledAppRule)(nil), // 175: topodata.ThrottledAppRule
+ (*GetTransactionInfoRequest)(nil), // 54: tabletmanagerdata.GetTransactionInfoRequest
+ (*GetTransactionInfoResponse)(nil), // 55: tabletmanagerdata.GetTransactionInfoResponse
+ (*ConcludeTransactionRequest)(nil), // 56: tabletmanagerdata.ConcludeTransactionRequest
+ (*ConcludeTransactionResponse)(nil), // 57: tabletmanagerdata.ConcludeTransactionResponse
+ (*MysqlHostMetricsRequest)(nil), // 58: tabletmanagerdata.MysqlHostMetricsRequest
+ (*MysqlHostMetricsResponse)(nil), // 59: tabletmanagerdata.MysqlHostMetricsResponse
+ (*ReplicationStatusRequest)(nil), // 60: tabletmanagerdata.ReplicationStatusRequest
+ (*ReplicationStatusResponse)(nil), // 61: tabletmanagerdata.ReplicationStatusResponse
+ (*PrimaryStatusRequest)(nil), // 62: tabletmanagerdata.PrimaryStatusRequest
+ (*PrimaryStatusResponse)(nil), // 63: tabletmanagerdata.PrimaryStatusResponse
+ (*PrimaryPositionRequest)(nil), // 64: tabletmanagerdata.PrimaryPositionRequest
+ (*PrimaryPositionResponse)(nil), // 65: tabletmanagerdata.PrimaryPositionResponse
+ (*WaitForPositionRequest)(nil), // 66: tabletmanagerdata.WaitForPositionRequest
+ (*WaitForPositionResponse)(nil), // 67: tabletmanagerdata.WaitForPositionResponse
+ (*StopReplicationRequest)(nil), // 68: tabletmanagerdata.StopReplicationRequest
+ (*StopReplicationResponse)(nil), // 69: tabletmanagerdata.StopReplicationResponse
+ (*StopReplicationMinimumRequest)(nil), // 70: tabletmanagerdata.StopReplicationMinimumRequest
+ (*StopReplicationMinimumResponse)(nil), // 71: tabletmanagerdata.StopReplicationMinimumResponse
+ (*StartReplicationRequest)(nil), // 72: tabletmanagerdata.StartReplicationRequest
+ (*StartReplicationResponse)(nil), // 73: tabletmanagerdata.StartReplicationResponse
+ (*StartReplicationUntilAfterRequest)(nil), // 74: tabletmanagerdata.StartReplicationUntilAfterRequest
+ (*StartReplicationUntilAfterResponse)(nil), // 75: tabletmanagerdata.StartReplicationUntilAfterResponse
+ (*GetReplicasRequest)(nil), // 76: tabletmanagerdata.GetReplicasRequest
+ (*GetReplicasResponse)(nil), // 77: tabletmanagerdata.GetReplicasResponse
+ (*ResetReplicationRequest)(nil), // 78: tabletmanagerdata.ResetReplicationRequest
+ (*ResetReplicationResponse)(nil), // 79: tabletmanagerdata.ResetReplicationResponse
+ (*VReplicationExecRequest)(nil), // 80: tabletmanagerdata.VReplicationExecRequest
+ (*VReplicationExecResponse)(nil), // 81: tabletmanagerdata.VReplicationExecResponse
+ (*VReplicationWaitForPosRequest)(nil), // 82: tabletmanagerdata.VReplicationWaitForPosRequest
+ (*VReplicationWaitForPosResponse)(nil), // 83: tabletmanagerdata.VReplicationWaitForPosResponse
+ (*InitPrimaryRequest)(nil), // 84: tabletmanagerdata.InitPrimaryRequest
+ (*InitPrimaryResponse)(nil), // 85: tabletmanagerdata.InitPrimaryResponse
+ (*PopulateReparentJournalRequest)(nil), // 86: tabletmanagerdata.PopulateReparentJournalRequest
+ (*PopulateReparentJournalResponse)(nil), // 87: tabletmanagerdata.PopulateReparentJournalResponse
+ (*ReadReparentJournalInfoRequest)(nil), // 88: tabletmanagerdata.ReadReparentJournalInfoRequest
+ (*ReadReparentJournalInfoResponse)(nil), // 89: tabletmanagerdata.ReadReparentJournalInfoResponse
+ (*InitReplicaRequest)(nil), // 90: tabletmanagerdata.InitReplicaRequest
+ (*InitReplicaResponse)(nil), // 91: tabletmanagerdata.InitReplicaResponse
+ (*DemotePrimaryRequest)(nil), // 92: tabletmanagerdata.DemotePrimaryRequest
+ (*DemotePrimaryResponse)(nil), // 93: tabletmanagerdata.DemotePrimaryResponse
+ (*UndoDemotePrimaryRequest)(nil), // 94: tabletmanagerdata.UndoDemotePrimaryRequest
+ (*UndoDemotePrimaryResponse)(nil), // 95: tabletmanagerdata.UndoDemotePrimaryResponse
+ (*ReplicaWasPromotedRequest)(nil), // 96: tabletmanagerdata.ReplicaWasPromotedRequest
+ (*ReplicaWasPromotedResponse)(nil), // 97: tabletmanagerdata.ReplicaWasPromotedResponse
+ (*ResetReplicationParametersRequest)(nil), // 98: tabletmanagerdata.ResetReplicationParametersRequest
+ (*ResetReplicationParametersResponse)(nil), // 99: tabletmanagerdata.ResetReplicationParametersResponse
+ (*FullStatusRequest)(nil), // 100: tabletmanagerdata.FullStatusRequest
+ (*FullStatusResponse)(nil), // 101: tabletmanagerdata.FullStatusResponse
+ (*SetReplicationSourceRequest)(nil), // 102: tabletmanagerdata.SetReplicationSourceRequest
+ (*SetReplicationSourceResponse)(nil), // 103: tabletmanagerdata.SetReplicationSourceResponse
+ (*ReplicaWasRestartedRequest)(nil), // 104: tabletmanagerdata.ReplicaWasRestartedRequest
+ (*ReplicaWasRestartedResponse)(nil), // 105: tabletmanagerdata.ReplicaWasRestartedResponse
+ (*StopReplicationAndGetStatusRequest)(nil), // 106: tabletmanagerdata.StopReplicationAndGetStatusRequest
+ (*StopReplicationAndGetStatusResponse)(nil), // 107: tabletmanagerdata.StopReplicationAndGetStatusResponse
+ (*PromoteReplicaRequest)(nil), // 108: tabletmanagerdata.PromoteReplicaRequest
+ (*PromoteReplicaResponse)(nil), // 109: tabletmanagerdata.PromoteReplicaResponse
+ (*BackupRequest)(nil), // 110: tabletmanagerdata.BackupRequest
+ (*BackupResponse)(nil), // 111: tabletmanagerdata.BackupResponse
+ (*RestoreFromBackupRequest)(nil), // 112: tabletmanagerdata.RestoreFromBackupRequest
+ (*RestoreFromBackupResponse)(nil), // 113: tabletmanagerdata.RestoreFromBackupResponse
+ (*CreateVReplicationWorkflowRequest)(nil), // 114: tabletmanagerdata.CreateVReplicationWorkflowRequest
+ (*CreateVReplicationWorkflowResponse)(nil), // 115: tabletmanagerdata.CreateVReplicationWorkflowResponse
+ (*DeleteTableDataRequest)(nil), // 116: tabletmanagerdata.DeleteTableDataRequest
+ (*DeleteTableDataResponse)(nil), // 117: tabletmanagerdata.DeleteTableDataResponse
+ (*DeleteVReplicationWorkflowRequest)(nil), // 118: tabletmanagerdata.DeleteVReplicationWorkflowRequest
+ (*DeleteVReplicationWorkflowResponse)(nil), // 119: tabletmanagerdata.DeleteVReplicationWorkflowResponse
+ (*HasVReplicationWorkflowsRequest)(nil), // 120: tabletmanagerdata.HasVReplicationWorkflowsRequest
+ (*HasVReplicationWorkflowsResponse)(nil), // 121: tabletmanagerdata.HasVReplicationWorkflowsResponse
+ (*ReadVReplicationWorkflowsRequest)(nil), // 122: tabletmanagerdata.ReadVReplicationWorkflowsRequest
+ (*ReadVReplicationWorkflowsResponse)(nil), // 123: tabletmanagerdata.ReadVReplicationWorkflowsResponse
+ (*ReadVReplicationWorkflowRequest)(nil), // 124: tabletmanagerdata.ReadVReplicationWorkflowRequest
+ (*ReadVReplicationWorkflowResponse)(nil), // 125: tabletmanagerdata.ReadVReplicationWorkflowResponse
+ (*ValidateVReplicationPermissionsRequest)(nil), // 126: tabletmanagerdata.ValidateVReplicationPermissionsRequest
+ (*ValidateVReplicationPermissionsResponse)(nil), // 127: tabletmanagerdata.ValidateVReplicationPermissionsResponse
+ (*VDiffRequest)(nil), // 128: tabletmanagerdata.VDiffRequest
+ (*VDiffResponse)(nil), // 129: tabletmanagerdata.VDiffResponse
+ (*VDiffPickerOptions)(nil), // 130: tabletmanagerdata.VDiffPickerOptions
+ (*VDiffReportOptions)(nil), // 131: tabletmanagerdata.VDiffReportOptions
+ (*VDiffCoreOptions)(nil), // 132: tabletmanagerdata.VDiffCoreOptions
+ (*VDiffOptions)(nil), // 133: tabletmanagerdata.VDiffOptions
+ (*UpdateVReplicationWorkflowRequest)(nil), // 134: tabletmanagerdata.UpdateVReplicationWorkflowRequest
+ (*UpdateVReplicationWorkflowResponse)(nil), // 135: tabletmanagerdata.UpdateVReplicationWorkflowResponse
+ (*UpdateVReplicationWorkflowsRequest)(nil), // 136: tabletmanagerdata.UpdateVReplicationWorkflowsRequest
+ (*UpdateVReplicationWorkflowsResponse)(nil), // 137: tabletmanagerdata.UpdateVReplicationWorkflowsResponse
+ (*ResetSequencesRequest)(nil), // 138: tabletmanagerdata.ResetSequencesRequest
+ (*ResetSequencesResponse)(nil), // 139: tabletmanagerdata.ResetSequencesResponse
+ (*CheckThrottlerRequest)(nil), // 140: tabletmanagerdata.CheckThrottlerRequest
+ (*CheckThrottlerResponse)(nil), // 141: tabletmanagerdata.CheckThrottlerResponse
+ (*GetThrottlerStatusRequest)(nil), // 142: tabletmanagerdata.GetThrottlerStatusRequest
+ (*GetThrottlerStatusResponse)(nil), // 143: tabletmanagerdata.GetThrottlerStatusResponse
+ (*ChangeTagsRequest)(nil), // 144: tabletmanagerdata.ChangeTagsRequest
+ (*ChangeTagsResponse)(nil), // 145: tabletmanagerdata.ChangeTagsResponse
+ nil, // 146: tabletmanagerdata.UserPermission.PrivilegesEntry
+ nil, // 147: tabletmanagerdata.DbPermission.PrivilegesEntry
+ nil, // 148: tabletmanagerdata.ExecuteHookRequest.ExtraEnvEntry
+ nil, // 149: tabletmanagerdata.GetGlobalStatusVarsResponse.StatusValuesEntry
+ nil, // 150: tabletmanagerdata.DeleteTableDataRequest.TableFiltersEntry
+ (*ReadVReplicationWorkflowResponse_Stream)(nil), // 151: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream
+ nil, // 152: tabletmanagerdata.ReadVReplicationWorkflowResponse.ConfigOverridesEntry
+ nil, // 153: tabletmanagerdata.UpdateVReplicationWorkflowRequest.ConfigOverridesEntry
+ (*CheckThrottlerResponse_Metric)(nil), // 154: tabletmanagerdata.CheckThrottlerResponse.Metric
+ nil, // 155: tabletmanagerdata.CheckThrottlerResponse.MetricsEntry
+ (*GetThrottlerStatusResponse_MetricResult)(nil), // 156: tabletmanagerdata.GetThrottlerStatusResponse.MetricResult
+ nil, // 157: tabletmanagerdata.GetThrottlerStatusResponse.AggregatedMetricsEntry
+ nil, // 158: tabletmanagerdata.GetThrottlerStatusResponse.MetricThresholdsEntry
+ (*GetThrottlerStatusResponse_MetricHealth)(nil), // 159: tabletmanagerdata.GetThrottlerStatusResponse.MetricHealth
+ nil, // 160: tabletmanagerdata.GetThrottlerStatusResponse.MetricsHealthEntry
+ nil, // 161: tabletmanagerdata.GetThrottlerStatusResponse.ThrottledAppsEntry
+ nil, // 162: tabletmanagerdata.GetThrottlerStatusResponse.AppCheckedMetricsEntry
+ (*GetThrottlerStatusResponse_RecentApp)(nil), // 163: tabletmanagerdata.GetThrottlerStatusResponse.RecentApp
+ nil, // 164: tabletmanagerdata.GetThrottlerStatusResponse.RecentAppsEntry
+ nil, // 165: tabletmanagerdata.ChangeTagsRequest.TagsEntry
+ nil, // 166: tabletmanagerdata.ChangeTagsResponse.TagsEntry
+ (*query.Field)(nil), // 167: query.Field
+ (topodata.TabletType)(0), // 168: topodata.TabletType
+ (*vtrpc.CallerID)(nil), // 169: vtrpc.CallerID
+ (*query.QueryResult)(nil), // 170: query.QueryResult
+ (*query.TransactionMetadata)(nil), // 171: query.TransactionMetadata
+ (*mysqlctl.HostMetricsResponse)(nil), // 172: mysqlctl.HostMetricsResponse
+ (*replicationdata.Status)(nil), // 173: replicationdata.Status
+ (*replicationdata.PrimaryStatus)(nil), // 174: replicationdata.PrimaryStatus
+ (*topodata.TabletAlias)(nil), // 175: topodata.TabletAlias
+ (*replicationdata.FullStatus)(nil), // 176: replicationdata.FullStatus
+ (replicationdata.StopReplicationMode)(0), // 177: replicationdata.StopReplicationMode
+ (*replicationdata.StopReplicationStatus)(nil), // 178: replicationdata.StopReplicationStatus
+ (*logutil.Event)(nil), // 179: logutil.Event
+ (*vttime.Time)(nil), // 180: vttime.Time
+ (*binlogdata.BinlogSource)(nil), // 181: binlogdata.BinlogSource
+ (binlogdata.VReplicationWorkflowType)(0), // 182: binlogdata.VReplicationWorkflowType
+ (binlogdata.VReplicationWorkflowSubType)(0), // 183: binlogdata.VReplicationWorkflowSubType
+ (binlogdata.VReplicationWorkflowState)(0), // 184: binlogdata.VReplicationWorkflowState
+ (binlogdata.OnDDLAction)(0), // 185: binlogdata.OnDDLAction
+ (*topodata.ThrottledAppRule)(nil), // 186: topodata.ThrottledAppRule
}
var file_tabletmanagerdata_proto_depIdxs = []int32{
- 156, // 0: tabletmanagerdata.TableDefinition.fields:type_name -> query.Field
+ 167, // 0: tabletmanagerdata.TableDefinition.fields:type_name -> query.Field
2, // 1: tabletmanagerdata.SchemaDefinition.table_definitions:type_name -> tabletmanagerdata.TableDefinition
3, // 2: tabletmanagerdata.SchemaChangeResult.before_schema:type_name -> tabletmanagerdata.SchemaDefinition
3, // 3: tabletmanagerdata.SchemaChangeResult.after_schema:type_name -> tabletmanagerdata.SchemaDefinition
- 138, // 4: tabletmanagerdata.UserPermission.privileges:type_name -> tabletmanagerdata.UserPermission.PrivilegesEntry
- 139, // 5: tabletmanagerdata.DbPermission.privileges:type_name -> tabletmanagerdata.DbPermission.PrivilegesEntry
+ 146, // 4: tabletmanagerdata.UserPermission.privileges:type_name -> tabletmanagerdata.UserPermission.PrivilegesEntry
+ 147, // 5: tabletmanagerdata.DbPermission.privileges:type_name -> tabletmanagerdata.DbPermission.PrivilegesEntry
5, // 6: tabletmanagerdata.Permissions.user_permissions:type_name -> tabletmanagerdata.UserPermission
6, // 7: tabletmanagerdata.Permissions.db_permissions:type_name -> tabletmanagerdata.DbPermission
- 140, // 8: tabletmanagerdata.ExecuteHookRequest.extra_env:type_name -> tabletmanagerdata.ExecuteHookRequest.ExtraEnvEntry
+ 148, // 8: tabletmanagerdata.ExecuteHookRequest.extra_env:type_name -> tabletmanagerdata.ExecuteHookRequest.ExtraEnvEntry
3, // 9: tabletmanagerdata.GetSchemaResponse.schema_definition:type_name -> tabletmanagerdata.SchemaDefinition
7, // 10: tabletmanagerdata.GetPermissionsResponse.permissions:type_name -> tabletmanagerdata.Permissions
- 141, // 11: tabletmanagerdata.GetGlobalStatusVarsResponse.status_values:type_name -> tabletmanagerdata.GetGlobalStatusVarsResponse.StatusValuesEntry
- 157, // 12: tabletmanagerdata.ChangeTypeRequest.tablet_type:type_name -> topodata.TabletType
+ 149, // 11: tabletmanagerdata.GetGlobalStatusVarsResponse.status_values:type_name -> tabletmanagerdata.GetGlobalStatusVarsResponse.StatusValuesEntry
+ 168, // 12: tabletmanagerdata.ChangeTypeRequest.tablet_type:type_name -> topodata.TabletType
4, // 13: tabletmanagerdata.PreflightSchemaResponse.change_results:type_name -> tabletmanagerdata.SchemaChangeResult
3, // 14: tabletmanagerdata.ApplySchemaRequest.before_schema:type_name -> tabletmanagerdata.SchemaDefinition
3, // 15: tabletmanagerdata.ApplySchemaRequest.after_schema:type_name -> tabletmanagerdata.SchemaDefinition
3, // 16: tabletmanagerdata.ApplySchemaResponse.before_schema:type_name -> tabletmanagerdata.SchemaDefinition
3, // 17: tabletmanagerdata.ApplySchemaResponse.after_schema:type_name -> tabletmanagerdata.SchemaDefinition
- 158, // 18: tabletmanagerdata.ExecuteQueryRequest.caller_id:type_name -> vtrpc.CallerID
- 159, // 19: tabletmanagerdata.ExecuteQueryResponse.result:type_name -> query.QueryResult
- 159, // 20: tabletmanagerdata.ExecuteFetchAsDbaResponse.result:type_name -> query.QueryResult
- 159, // 21: tabletmanagerdata.ExecuteMultiFetchAsDbaResponse.results:type_name -> query.QueryResult
- 159, // 22: tabletmanagerdata.ExecuteFetchAsAllPrivsResponse.result:type_name -> query.QueryResult
- 159, // 23: tabletmanagerdata.ExecuteFetchAsAppResponse.result:type_name -> query.QueryResult
- 160, // 24: tabletmanagerdata.GetUnresolvedTransactionsResponse.transactions:type_name -> query.TransactionMetadata
- 160, // 25: tabletmanagerdata.ReadTransactionResponse.transaction:type_name -> query.TransactionMetadata
- 161, // 26: tabletmanagerdata.MysqlHostMetricsResponse.HostMetrics:type_name -> mysqlctl.HostMetricsResponse
- 162, // 27: tabletmanagerdata.ReplicationStatusResponse.status:type_name -> replicationdata.Status
- 163, // 28: tabletmanagerdata.PrimaryStatusResponse.status:type_name -> replicationdata.PrimaryStatus
- 159, // 29: tabletmanagerdata.VReplicationExecResponse.result:type_name -> query.QueryResult
- 164, // 30: tabletmanagerdata.PopulateReparentJournalRequest.primary_alias:type_name -> topodata.TabletAlias
- 164, // 31: tabletmanagerdata.InitReplicaRequest.parent:type_name -> topodata.TabletAlias
- 163, // 32: tabletmanagerdata.DemotePrimaryResponse.primary_status:type_name -> replicationdata.PrimaryStatus
- 165, // 33: tabletmanagerdata.FullStatusResponse.status:type_name -> replicationdata.FullStatus
- 164, // 34: tabletmanagerdata.SetReplicationSourceRequest.parent:type_name -> topodata.TabletAlias
- 164, // 35: tabletmanagerdata.ReplicaWasRestartedRequest.parent:type_name -> topodata.TabletAlias
- 166, // 36: tabletmanagerdata.StopReplicationAndGetStatusRequest.stop_replication_mode:type_name -> replicationdata.StopReplicationMode
- 167, // 37: tabletmanagerdata.StopReplicationAndGetStatusResponse.status:type_name -> replicationdata.StopReplicationStatus
- 168, // 38: tabletmanagerdata.BackupResponse.event:type_name -> logutil.Event
- 169, // 39: tabletmanagerdata.RestoreFromBackupRequest.backup_time:type_name -> vttime.Time
- 169, // 40: tabletmanagerdata.RestoreFromBackupRequest.restore_to_timestamp:type_name -> vttime.Time
- 168, // 41: tabletmanagerdata.RestoreFromBackupResponse.event:type_name -> logutil.Event
- 170, // 42: tabletmanagerdata.CreateVReplicationWorkflowRequest.binlog_source:type_name -> binlogdata.BinlogSource
- 157, // 43: tabletmanagerdata.CreateVReplicationWorkflowRequest.tablet_types:type_name -> topodata.TabletType
+ 169, // 18: tabletmanagerdata.ExecuteQueryRequest.caller_id:type_name -> vtrpc.CallerID
+ 170, // 19: tabletmanagerdata.ExecuteQueryResponse.result:type_name -> query.QueryResult
+ 170, // 20: tabletmanagerdata.ExecuteFetchAsDbaResponse.result:type_name -> query.QueryResult
+ 170, // 21: tabletmanagerdata.ExecuteMultiFetchAsDbaResponse.results:type_name -> query.QueryResult
+ 170, // 22: tabletmanagerdata.ExecuteFetchAsAllPrivsResponse.result:type_name -> query.QueryResult
+ 170, // 23: tabletmanagerdata.ExecuteFetchAsAppResponse.result:type_name -> query.QueryResult
+ 171, // 24: tabletmanagerdata.GetUnresolvedTransactionsResponse.transactions:type_name -> query.TransactionMetadata
+ 171, // 25: tabletmanagerdata.ReadTransactionResponse.transaction:type_name -> query.TransactionMetadata
+ 172, // 26: tabletmanagerdata.MysqlHostMetricsResponse.HostMetrics:type_name -> mysqlctl.HostMetricsResponse
+ 173, // 27: tabletmanagerdata.ReplicationStatusResponse.status:type_name -> replicationdata.Status
+ 174, // 28: tabletmanagerdata.PrimaryStatusResponse.status:type_name -> replicationdata.PrimaryStatus
+ 170, // 29: tabletmanagerdata.VReplicationExecResponse.result:type_name -> query.QueryResult
+ 175, // 30: tabletmanagerdata.PopulateReparentJournalRequest.primary_alias:type_name -> topodata.TabletAlias
+ 175, // 31: tabletmanagerdata.InitReplicaRequest.parent:type_name -> topodata.TabletAlias
+ 174, // 32: tabletmanagerdata.DemotePrimaryResponse.primary_status:type_name -> replicationdata.PrimaryStatus
+ 176, // 33: tabletmanagerdata.FullStatusResponse.status:type_name -> replicationdata.FullStatus
+ 175, // 34: tabletmanagerdata.SetReplicationSourceRequest.parent:type_name -> topodata.TabletAlias
+ 175, // 35: tabletmanagerdata.ReplicaWasRestartedRequest.parent:type_name -> topodata.TabletAlias
+ 177, // 36: tabletmanagerdata.StopReplicationAndGetStatusRequest.stop_replication_mode:type_name -> replicationdata.StopReplicationMode
+ 178, // 37: tabletmanagerdata.StopReplicationAndGetStatusResponse.status:type_name -> replicationdata.StopReplicationStatus
+ 179, // 38: tabletmanagerdata.BackupResponse.event:type_name -> logutil.Event
+ 180, // 39: tabletmanagerdata.RestoreFromBackupRequest.backup_time:type_name -> vttime.Time
+ 180, // 40: tabletmanagerdata.RestoreFromBackupRequest.restore_to_timestamp:type_name -> vttime.Time
+ 179, // 41: tabletmanagerdata.RestoreFromBackupResponse.event:type_name -> logutil.Event
+ 181, // 42: tabletmanagerdata.CreateVReplicationWorkflowRequest.binlog_source:type_name -> binlogdata.BinlogSource
+ 168, // 43: tabletmanagerdata.CreateVReplicationWorkflowRequest.tablet_types:type_name -> topodata.TabletType
0, // 44: tabletmanagerdata.CreateVReplicationWorkflowRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
- 171, // 45: tabletmanagerdata.CreateVReplicationWorkflowRequest.workflow_type:type_name -> binlogdata.VReplicationWorkflowType
- 172, // 46: tabletmanagerdata.CreateVReplicationWorkflowRequest.workflow_sub_type:type_name -> binlogdata.VReplicationWorkflowSubType
- 159, // 47: tabletmanagerdata.CreateVReplicationWorkflowResponse.result:type_name -> query.QueryResult
- 159, // 48: tabletmanagerdata.DeleteVReplicationWorkflowResponse.result:type_name -> query.QueryResult
- 173, // 49: tabletmanagerdata.ReadVReplicationWorkflowsRequest.include_states:type_name -> binlogdata.VReplicationWorkflowState
- 173, // 50: tabletmanagerdata.ReadVReplicationWorkflowsRequest.exclude_states:type_name -> binlogdata.VReplicationWorkflowState
- 119, // 51: tabletmanagerdata.ReadVReplicationWorkflowsResponse.workflows:type_name -> tabletmanagerdata.ReadVReplicationWorkflowResponse
- 157, // 52: tabletmanagerdata.ReadVReplicationWorkflowResponse.tablet_types:type_name -> topodata.TabletType
- 0, // 53: tabletmanagerdata.ReadVReplicationWorkflowResponse.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
- 171, // 54: tabletmanagerdata.ReadVReplicationWorkflowResponse.workflow_type:type_name -> binlogdata.VReplicationWorkflowType
- 172, // 55: tabletmanagerdata.ReadVReplicationWorkflowResponse.workflow_sub_type:type_name -> binlogdata.VReplicationWorkflowSubType
- 142, // 56: tabletmanagerdata.ReadVReplicationWorkflowResponse.streams:type_name -> tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream
- 143, // 57: tabletmanagerdata.ReadVReplicationWorkflowResponse.config_overrides:type_name -> tabletmanagerdata.ReadVReplicationWorkflowResponse.ConfigOverridesEntry
- 127, // 58: tabletmanagerdata.VDiffRequest.options:type_name -> tabletmanagerdata.VDiffOptions
- 159, // 59: tabletmanagerdata.VDiffResponse.output:type_name -> query.QueryResult
- 124, // 60: tabletmanagerdata.VDiffOptions.picker_options:type_name -> tabletmanagerdata.VDiffPickerOptions
- 126, // 61: tabletmanagerdata.VDiffOptions.core_options:type_name -> tabletmanagerdata.VDiffCoreOptions
- 125, // 62: tabletmanagerdata.VDiffOptions.report_options:type_name -> tabletmanagerdata.VDiffReportOptions
- 157, // 63: tabletmanagerdata.UpdateVReplicationWorkflowRequest.tablet_types:type_name -> topodata.TabletType
- 0, // 64: tabletmanagerdata.UpdateVReplicationWorkflowRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
- 174, // 65: tabletmanagerdata.UpdateVReplicationWorkflowRequest.on_ddl:type_name -> binlogdata.OnDDLAction
- 173, // 66: tabletmanagerdata.UpdateVReplicationWorkflowRequest.state:type_name -> binlogdata.VReplicationWorkflowState
- 144, // 67: tabletmanagerdata.UpdateVReplicationWorkflowRequest.config_overrides:type_name -> tabletmanagerdata.UpdateVReplicationWorkflowRequest.ConfigOverridesEntry
- 159, // 68: tabletmanagerdata.UpdateVReplicationWorkflowResponse.result:type_name -> query.QueryResult
- 173, // 69: tabletmanagerdata.UpdateVReplicationWorkflowsRequest.state:type_name -> binlogdata.VReplicationWorkflowState
- 159, // 70: tabletmanagerdata.UpdateVReplicationWorkflowsResponse.result:type_name -> query.QueryResult
- 146, // 71: tabletmanagerdata.CheckThrottlerResponse.metrics:type_name -> tabletmanagerdata.CheckThrottlerResponse.MetricsEntry
- 1, // 72: tabletmanagerdata.CheckThrottlerResponse.response_code:type_name -> tabletmanagerdata.CheckThrottlerResponseCode
- 148, // 73: tabletmanagerdata.GetThrottlerStatusResponse.aggregated_metrics:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.AggregatedMetricsEntry
- 149, // 74: tabletmanagerdata.GetThrottlerStatusResponse.metric_thresholds:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.MetricThresholdsEntry
- 151, // 75: tabletmanagerdata.GetThrottlerStatusResponse.metrics_health:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.MetricsHealthEntry
- 152, // 76: tabletmanagerdata.GetThrottlerStatusResponse.throttled_apps:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.ThrottledAppsEntry
- 153, // 77: tabletmanagerdata.GetThrottlerStatusResponse.app_checked_metrics:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.AppCheckedMetricsEntry
- 155, // 78: tabletmanagerdata.GetThrottlerStatusResponse.recent_apps:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.RecentAppsEntry
- 170, // 79: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.bls:type_name -> binlogdata.BinlogSource
- 169, // 80: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.time_updated:type_name -> vttime.Time
- 169, // 81: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.transaction_timestamp:type_name -> vttime.Time
- 173, // 82: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.state:type_name -> binlogdata.VReplicationWorkflowState
- 169, // 83: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.time_heartbeat:type_name -> vttime.Time
- 169, // 84: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.time_throttled:type_name -> vttime.Time
- 1, // 85: tabletmanagerdata.CheckThrottlerResponse.Metric.response_code:type_name -> tabletmanagerdata.CheckThrottlerResponseCode
- 145, // 86: tabletmanagerdata.CheckThrottlerResponse.MetricsEntry.value:type_name -> tabletmanagerdata.CheckThrottlerResponse.Metric
- 147, // 87: tabletmanagerdata.GetThrottlerStatusResponse.AggregatedMetricsEntry.value:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.MetricResult
- 169, // 88: tabletmanagerdata.GetThrottlerStatusResponse.MetricHealth.last_healthy_at:type_name -> vttime.Time
- 150, // 89: tabletmanagerdata.GetThrottlerStatusResponse.MetricsHealthEntry.value:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.MetricHealth
- 175, // 90: tabletmanagerdata.GetThrottlerStatusResponse.ThrottledAppsEntry.value:type_name -> topodata.ThrottledAppRule
- 169, // 91: tabletmanagerdata.GetThrottlerStatusResponse.RecentApp.checked_at:type_name -> vttime.Time
- 1, // 92: tabletmanagerdata.GetThrottlerStatusResponse.RecentApp.response_code:type_name -> tabletmanagerdata.CheckThrottlerResponseCode
- 154, // 93: tabletmanagerdata.GetThrottlerStatusResponse.RecentAppsEntry.value:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.RecentApp
- 94, // [94:94] is the sub-list for method output_type
- 94, // [94:94] is the sub-list for method input_type
- 94, // [94:94] is the sub-list for extension type_name
- 94, // [94:94] is the sub-list for extension extendee
- 0, // [0:94] is the sub-list for field type_name
+ 182, // 45: tabletmanagerdata.CreateVReplicationWorkflowRequest.workflow_type:type_name -> binlogdata.VReplicationWorkflowType
+ 183, // 46: tabletmanagerdata.CreateVReplicationWorkflowRequest.workflow_sub_type:type_name -> binlogdata.VReplicationWorkflowSubType
+ 170, // 47: tabletmanagerdata.CreateVReplicationWorkflowResponse.result:type_name -> query.QueryResult
+ 150, // 48: tabletmanagerdata.DeleteTableDataRequest.table_filters:type_name -> tabletmanagerdata.DeleteTableDataRequest.TableFiltersEntry
+ 170, // 49: tabletmanagerdata.DeleteVReplicationWorkflowResponse.result:type_name -> query.QueryResult
+ 184, // 50: tabletmanagerdata.ReadVReplicationWorkflowsRequest.include_states:type_name -> binlogdata.VReplicationWorkflowState
+ 184, // 51: tabletmanagerdata.ReadVReplicationWorkflowsRequest.exclude_states:type_name -> binlogdata.VReplicationWorkflowState
+ 125, // 52: tabletmanagerdata.ReadVReplicationWorkflowsResponse.workflows:type_name -> tabletmanagerdata.ReadVReplicationWorkflowResponse
+ 168, // 53: tabletmanagerdata.ReadVReplicationWorkflowResponse.tablet_types:type_name -> topodata.TabletType
+ 0, // 54: tabletmanagerdata.ReadVReplicationWorkflowResponse.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
+ 182, // 55: tabletmanagerdata.ReadVReplicationWorkflowResponse.workflow_type:type_name -> binlogdata.VReplicationWorkflowType
+ 183, // 56: tabletmanagerdata.ReadVReplicationWorkflowResponse.workflow_sub_type:type_name -> binlogdata.VReplicationWorkflowSubType
+ 151, // 57: tabletmanagerdata.ReadVReplicationWorkflowResponse.streams:type_name -> tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream
+ 152, // 58: tabletmanagerdata.ReadVReplicationWorkflowResponse.config_overrides:type_name -> tabletmanagerdata.ReadVReplicationWorkflowResponse.ConfigOverridesEntry
+ 133, // 59: tabletmanagerdata.VDiffRequest.options:type_name -> tabletmanagerdata.VDiffOptions
+ 170, // 60: tabletmanagerdata.VDiffResponse.output:type_name -> query.QueryResult
+ 130, // 61: tabletmanagerdata.VDiffOptions.picker_options:type_name -> tabletmanagerdata.VDiffPickerOptions
+ 132, // 62: tabletmanagerdata.VDiffOptions.core_options:type_name -> tabletmanagerdata.VDiffCoreOptions
+ 131, // 63: tabletmanagerdata.VDiffOptions.report_options:type_name -> tabletmanagerdata.VDiffReportOptions
+ 168, // 64: tabletmanagerdata.UpdateVReplicationWorkflowRequest.tablet_types:type_name -> topodata.TabletType
+ 0, // 65: tabletmanagerdata.UpdateVReplicationWorkflowRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
+ 185, // 66: tabletmanagerdata.UpdateVReplicationWorkflowRequest.on_ddl:type_name -> binlogdata.OnDDLAction
+ 184, // 67: tabletmanagerdata.UpdateVReplicationWorkflowRequest.state:type_name -> binlogdata.VReplicationWorkflowState
+ 153, // 68: tabletmanagerdata.UpdateVReplicationWorkflowRequest.config_overrides:type_name -> tabletmanagerdata.UpdateVReplicationWorkflowRequest.ConfigOverridesEntry
+ 170, // 69: tabletmanagerdata.UpdateVReplicationWorkflowResponse.result:type_name -> query.QueryResult
+ 184, // 70: tabletmanagerdata.UpdateVReplicationWorkflowsRequest.state:type_name -> binlogdata.VReplicationWorkflowState
+ 170, // 71: tabletmanagerdata.UpdateVReplicationWorkflowsResponse.result:type_name -> query.QueryResult
+ 155, // 72: tabletmanagerdata.CheckThrottlerResponse.metrics:type_name -> tabletmanagerdata.CheckThrottlerResponse.MetricsEntry
+ 1, // 73: tabletmanagerdata.CheckThrottlerResponse.response_code:type_name -> tabletmanagerdata.CheckThrottlerResponseCode
+ 157, // 74: tabletmanagerdata.GetThrottlerStatusResponse.aggregated_metrics:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.AggregatedMetricsEntry
+ 158, // 75: tabletmanagerdata.GetThrottlerStatusResponse.metric_thresholds:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.MetricThresholdsEntry
+ 160, // 76: tabletmanagerdata.GetThrottlerStatusResponse.metrics_health:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.MetricsHealthEntry
+ 161, // 77: tabletmanagerdata.GetThrottlerStatusResponse.throttled_apps:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.ThrottledAppsEntry
+ 162, // 78: tabletmanagerdata.GetThrottlerStatusResponse.app_checked_metrics:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.AppCheckedMetricsEntry
+ 164, // 79: tabletmanagerdata.GetThrottlerStatusResponse.recent_apps:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.RecentAppsEntry
+ 165, // 80: tabletmanagerdata.ChangeTagsRequest.tags:type_name -> tabletmanagerdata.ChangeTagsRequest.TagsEntry
+ 166, // 81: tabletmanagerdata.ChangeTagsResponse.tags:type_name -> tabletmanagerdata.ChangeTagsResponse.TagsEntry
+ 181, // 82: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.bls:type_name -> binlogdata.BinlogSource
+ 180, // 83: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.time_updated:type_name -> vttime.Time
+ 180, // 84: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.transaction_timestamp:type_name -> vttime.Time
+ 184, // 85: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.state:type_name -> binlogdata.VReplicationWorkflowState
+ 180, // 86: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.time_heartbeat:type_name -> vttime.Time
+ 180, // 87: tabletmanagerdata.ReadVReplicationWorkflowResponse.Stream.time_throttled:type_name -> vttime.Time
+ 1, // 88: tabletmanagerdata.CheckThrottlerResponse.Metric.response_code:type_name -> tabletmanagerdata.CheckThrottlerResponseCode
+ 154, // 89: tabletmanagerdata.CheckThrottlerResponse.MetricsEntry.value:type_name -> tabletmanagerdata.CheckThrottlerResponse.Metric
+ 156, // 90: tabletmanagerdata.GetThrottlerStatusResponse.AggregatedMetricsEntry.value:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.MetricResult
+ 180, // 91: tabletmanagerdata.GetThrottlerStatusResponse.MetricHealth.last_healthy_at:type_name -> vttime.Time
+ 159, // 92: tabletmanagerdata.GetThrottlerStatusResponse.MetricsHealthEntry.value:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.MetricHealth
+ 186, // 93: tabletmanagerdata.GetThrottlerStatusResponse.ThrottledAppsEntry.value:type_name -> topodata.ThrottledAppRule
+ 180, // 94: tabletmanagerdata.GetThrottlerStatusResponse.RecentApp.checked_at:type_name -> vttime.Time
+ 1, // 95: tabletmanagerdata.GetThrottlerStatusResponse.RecentApp.response_code:type_name -> tabletmanagerdata.CheckThrottlerResponseCode
+ 163, // 96: tabletmanagerdata.GetThrottlerStatusResponse.RecentAppsEntry.value:type_name -> tabletmanagerdata.GetThrottlerStatusResponse.RecentApp
+ 97, // [97:97] is the sub-list for method output_type
+ 97, // [97:97] is the sub-list for method input_type
+ 97, // [97:97] is the sub-list for extension type_name
+ 97, // [97:97] is the sub-list for extension extendee
+ 0, // [0:97] is the sub-list for field type_name
}
func init() { file_tabletmanagerdata_proto_init() }
@@ -9415,1711 +9587,17 @@ func file_tabletmanagerdata_proto_init() {
if File_tabletmanagerdata_proto != nil {
return
}
- if !protoimpl.UnsafeEnabled {
- file_tabletmanagerdata_proto_msgTypes[0].Exporter = func(v any, i int) any {
- switch v := v.(*TableDefinition); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[1].Exporter = func(v any, i int) any {
- switch v := v.(*SchemaDefinition); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[2].Exporter = func(v any, i int) any {
- switch v := v.(*SchemaChangeResult); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[3].Exporter = func(v any, i int) any {
- switch v := v.(*UserPermission); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[4].Exporter = func(v any, i int) any {
- switch v := v.(*DbPermission); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[5].Exporter = func(v any, i int) any {
- switch v := v.(*Permissions); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[6].Exporter = func(v any, i int) any {
- switch v := v.(*PingRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[7].Exporter = func(v any, i int) any {
- switch v := v.(*PingResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[8].Exporter = func(v any, i int) any {
- switch v := v.(*SleepRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[9].Exporter = func(v any, i int) any {
- switch v := v.(*SleepResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[10].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteHookRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[11].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteHookResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[12].Exporter = func(v any, i int) any {
- switch v := v.(*GetSchemaRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[13].Exporter = func(v any, i int) any {
- switch v := v.(*GetSchemaResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[14].Exporter = func(v any, i int) any {
- switch v := v.(*GetPermissionsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[15].Exporter = func(v any, i int) any {
- switch v := v.(*GetPermissionsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[16].Exporter = func(v any, i int) any {
- switch v := v.(*GetGlobalStatusVarsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[17].Exporter = func(v any, i int) any {
- switch v := v.(*GetGlobalStatusVarsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[18].Exporter = func(v any, i int) any {
- switch v := v.(*SetReadOnlyRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[19].Exporter = func(v any, i int) any {
- switch v := v.(*SetReadOnlyResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[20].Exporter = func(v any, i int) any {
- switch v := v.(*SetReadWriteRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[21].Exporter = func(v any, i int) any {
- switch v := v.(*SetReadWriteResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[22].Exporter = func(v any, i int) any {
- switch v := v.(*ChangeTypeRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[23].Exporter = func(v any, i int) any {
- switch v := v.(*ChangeTypeResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[24].Exporter = func(v any, i int) any {
- switch v := v.(*RefreshStateRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[25].Exporter = func(v any, i int) any {
- switch v := v.(*RefreshStateResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[26].Exporter = func(v any, i int) any {
- switch v := v.(*RunHealthCheckRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[27].Exporter = func(v any, i int) any {
- switch v := v.(*RunHealthCheckResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[28].Exporter = func(v any, i int) any {
- switch v := v.(*ReloadSchemaRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[29].Exporter = func(v any, i int) any {
- switch v := v.(*ReloadSchemaResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[30].Exporter = func(v any, i int) any {
- switch v := v.(*PreflightSchemaRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[31].Exporter = func(v any, i int) any {
- switch v := v.(*PreflightSchemaResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[32].Exporter = func(v any, i int) any {
- switch v := v.(*ApplySchemaRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[33].Exporter = func(v any, i int) any {
- switch v := v.(*ApplySchemaResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[34].Exporter = func(v any, i int) any {
- switch v := v.(*LockTablesRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[35].Exporter = func(v any, i int) any {
- switch v := v.(*LockTablesResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[36].Exporter = func(v any, i int) any {
- switch v := v.(*UnlockTablesRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[37].Exporter = func(v any, i int) any {
- switch v := v.(*UnlockTablesResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[38].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteQueryRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[39].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteQueryResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[40].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteFetchAsDbaRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[41].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteFetchAsDbaResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[42].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteMultiFetchAsDbaRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[43].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteMultiFetchAsDbaResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[44].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteFetchAsAllPrivsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[45].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteFetchAsAllPrivsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[46].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteFetchAsAppRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[47].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteFetchAsAppResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[48].Exporter = func(v any, i int) any {
- switch v := v.(*GetUnresolvedTransactionsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[49].Exporter = func(v any, i int) any {
- switch v := v.(*GetUnresolvedTransactionsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[50].Exporter = func(v any, i int) any {
- switch v := v.(*ReadTransactionRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[51].Exporter = func(v any, i int) any {
- switch v := v.(*ReadTransactionResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[52].Exporter = func(v any, i int) any {
- switch v := v.(*ConcludeTransactionRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[53].Exporter = func(v any, i int) any {
- switch v := v.(*ConcludeTransactionResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[54].Exporter = func(v any, i int) any {
- switch v := v.(*MysqlHostMetricsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[55].Exporter = func(v any, i int) any {
- switch v := v.(*MysqlHostMetricsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[56].Exporter = func(v any, i int) any {
- switch v := v.(*ReplicationStatusRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[57].Exporter = func(v any, i int) any {
- switch v := v.(*ReplicationStatusResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[58].Exporter = func(v any, i int) any {
- switch v := v.(*PrimaryStatusRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[59].Exporter = func(v any, i int) any {
- switch v := v.(*PrimaryStatusResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[60].Exporter = func(v any, i int) any {
- switch v := v.(*PrimaryPositionRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[61].Exporter = func(v any, i int) any {
- switch v := v.(*PrimaryPositionResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[62].Exporter = func(v any, i int) any {
- switch v := v.(*WaitForPositionRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[63].Exporter = func(v any, i int) any {
- switch v := v.(*WaitForPositionResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[64].Exporter = func(v any, i int) any {
- switch v := v.(*StopReplicationRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[65].Exporter = func(v any, i int) any {
- switch v := v.(*StopReplicationResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[66].Exporter = func(v any, i int) any {
- switch v := v.(*StopReplicationMinimumRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[67].Exporter = func(v any, i int) any {
- switch v := v.(*StopReplicationMinimumResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[68].Exporter = func(v any, i int) any {
- switch v := v.(*StartReplicationRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[69].Exporter = func(v any, i int) any {
- switch v := v.(*StartReplicationResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[70].Exporter = func(v any, i int) any {
- switch v := v.(*StartReplicationUntilAfterRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[71].Exporter = func(v any, i int) any {
- switch v := v.(*StartReplicationUntilAfterResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[72].Exporter = func(v any, i int) any {
- switch v := v.(*GetReplicasRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[73].Exporter = func(v any, i int) any {
- switch v := v.(*GetReplicasResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[74].Exporter = func(v any, i int) any {
- switch v := v.(*ResetReplicationRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[75].Exporter = func(v any, i int) any {
- switch v := v.(*ResetReplicationResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[76].Exporter = func(v any, i int) any {
- switch v := v.(*VReplicationExecRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[77].Exporter = func(v any, i int) any {
- switch v := v.(*VReplicationExecResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[78].Exporter = func(v any, i int) any {
- switch v := v.(*VReplicationWaitForPosRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[79].Exporter = func(v any, i int) any {
- switch v := v.(*VReplicationWaitForPosResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[80].Exporter = func(v any, i int) any {
- switch v := v.(*InitPrimaryRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[81].Exporter = func(v any, i int) any {
- switch v := v.(*InitPrimaryResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[82].Exporter = func(v any, i int) any {
- switch v := v.(*PopulateReparentJournalRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[83].Exporter = func(v any, i int) any {
- switch v := v.(*PopulateReparentJournalResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[84].Exporter = func(v any, i int) any {
- switch v := v.(*InitReplicaRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[85].Exporter = func(v any, i int) any {
- switch v := v.(*InitReplicaResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[86].Exporter = func(v any, i int) any {
- switch v := v.(*DemotePrimaryRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[87].Exporter = func(v any, i int) any {
- switch v := v.(*DemotePrimaryResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[88].Exporter = func(v any, i int) any {
- switch v := v.(*UndoDemotePrimaryRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[89].Exporter = func(v any, i int) any {
- switch v := v.(*UndoDemotePrimaryResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[90].Exporter = func(v any, i int) any {
- switch v := v.(*ReplicaWasPromotedRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[91].Exporter = func(v any, i int) any {
- switch v := v.(*ReplicaWasPromotedResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[92].Exporter = func(v any, i int) any {
- switch v := v.(*ResetReplicationParametersRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[93].Exporter = func(v any, i int) any {
- switch v := v.(*ResetReplicationParametersResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[94].Exporter = func(v any, i int) any {
- switch v := v.(*FullStatusRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[95].Exporter = func(v any, i int) any {
- switch v := v.(*FullStatusResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[96].Exporter = func(v any, i int) any {
- switch v := v.(*SetReplicationSourceRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[97].Exporter = func(v any, i int) any {
- switch v := v.(*SetReplicationSourceResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[98].Exporter = func(v any, i int) any {
- switch v := v.(*ReplicaWasRestartedRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[99].Exporter = func(v any, i int) any {
- switch v := v.(*ReplicaWasRestartedResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[100].Exporter = func(v any, i int) any {
- switch v := v.(*StopReplicationAndGetStatusRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[101].Exporter = func(v any, i int) any {
- switch v := v.(*StopReplicationAndGetStatusResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[102].Exporter = func(v any, i int) any {
- switch v := v.(*PromoteReplicaRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[103].Exporter = func(v any, i int) any {
- switch v := v.(*PromoteReplicaResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[104].Exporter = func(v any, i int) any {
- switch v := v.(*BackupRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[105].Exporter = func(v any, i int) any {
- switch v := v.(*BackupResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[106].Exporter = func(v any, i int) any {
- switch v := v.(*RestoreFromBackupRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[107].Exporter = func(v any, i int) any {
- switch v := v.(*RestoreFromBackupResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[108].Exporter = func(v any, i int) any {
- switch v := v.(*CreateVReplicationWorkflowRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[109].Exporter = func(v any, i int) any {
- switch v := v.(*CreateVReplicationWorkflowResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[110].Exporter = func(v any, i int) any {
- switch v := v.(*DeleteVReplicationWorkflowRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[111].Exporter = func(v any, i int) any {
- switch v := v.(*DeleteVReplicationWorkflowResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[112].Exporter = func(v any, i int) any {
- switch v := v.(*HasVReplicationWorkflowsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[113].Exporter = func(v any, i int) any {
- switch v := v.(*HasVReplicationWorkflowsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[114].Exporter = func(v any, i int) any {
- switch v := v.(*ReadVReplicationWorkflowsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[115].Exporter = func(v any, i int) any {
- switch v := v.(*ReadVReplicationWorkflowsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[116].Exporter = func(v any, i int) any {
- switch v := v.(*ReadVReplicationWorkflowRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[117].Exporter = func(v any, i int) any {
- switch v := v.(*ReadVReplicationWorkflowResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[118].Exporter = func(v any, i int) any {
- switch v := v.(*ValidateVReplicationPermissionsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[119].Exporter = func(v any, i int) any {
- switch v := v.(*ValidateVReplicationPermissionsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[120].Exporter = func(v any, i int) any {
- switch v := v.(*VDiffRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[121].Exporter = func(v any, i int) any {
- switch v := v.(*VDiffResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[122].Exporter = func(v any, i int) any {
- switch v := v.(*VDiffPickerOptions); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[123].Exporter = func(v any, i int) any {
- switch v := v.(*VDiffReportOptions); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[124].Exporter = func(v any, i int) any {
- switch v := v.(*VDiffCoreOptions); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[125].Exporter = func(v any, i int) any {
- switch v := v.(*VDiffOptions); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[126].Exporter = func(v any, i int) any {
- switch v := v.(*UpdateVReplicationWorkflowRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[127].Exporter = func(v any, i int) any {
- switch v := v.(*UpdateVReplicationWorkflowResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[128].Exporter = func(v any, i int) any {
- switch v := v.(*UpdateVReplicationWorkflowsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[129].Exporter = func(v any, i int) any {
- switch v := v.(*UpdateVReplicationWorkflowsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[130].Exporter = func(v any, i int) any {
- switch v := v.(*ResetSequencesRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[131].Exporter = func(v any, i int) any {
- switch v := v.(*ResetSequencesResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[132].Exporter = func(v any, i int) any {
- switch v := v.(*CheckThrottlerRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[133].Exporter = func(v any, i int) any {
- switch v := v.(*CheckThrottlerResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[134].Exporter = func(v any, i int) any {
- switch v := v.(*GetThrottlerStatusRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[135].Exporter = func(v any, i int) any {
- switch v := v.(*GetThrottlerStatusResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[140].Exporter = func(v any, i int) any {
- switch v := v.(*ReadVReplicationWorkflowResponse_Stream); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[143].Exporter = func(v any, i int) any {
- switch v := v.(*CheckThrottlerResponse_Metric); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[145].Exporter = func(v any, i int) any {
- switch v := v.(*GetThrottlerStatusResponse_MetricResult); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[148].Exporter = func(v any, i int) any {
- switch v := v.(*GetThrottlerStatusResponse_MetricHealth); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_tabletmanagerdata_proto_msgTypes[152].Exporter = func(v any, i int) any {
- switch v := v.(*GetThrottlerStatusResponse_RecentApp); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
- file_tabletmanagerdata_proto_msgTypes[104].OneofWrappers = []any{}
- file_tabletmanagerdata_proto_msgTypes[124].OneofWrappers = []any{}
- file_tabletmanagerdata_proto_msgTypes[126].OneofWrappers = []any{}
- file_tabletmanagerdata_proto_msgTypes[128].OneofWrappers = []any{}
+ file_tabletmanagerdata_proto_msgTypes[108].OneofWrappers = []any{}
+ file_tabletmanagerdata_proto_msgTypes[130].OneofWrappers = []any{}
+ file_tabletmanagerdata_proto_msgTypes[132].OneofWrappers = []any{}
+ file_tabletmanagerdata_proto_msgTypes[134].OneofWrappers = []any{}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_tabletmanagerdata_proto_rawDesc,
NumEnums: 2,
- NumMessages: 154,
+ NumMessages: 165,
NumExtensions: 0,
NumServices: 0,
},
diff --git a/go/vt/proto/tabletmanagerdata/tabletmanagerdata_vtproto.pb.go b/go/vt/proto/tabletmanagerdata/tabletmanagerdata_vtproto.pb.go
index bfd8ac2f0c2..9f6b0df851b 100644
--- a/go/vt/proto/tabletmanagerdata/tabletmanagerdata_vtproto.pb.go
+++ b/go/vt/proto/tabletmanagerdata/tabletmanagerdata_vtproto.pb.go
@@ -1,5 +1,5 @@
// Code generated by protoc-gen-go-vtproto. DO NOT EDIT.
-// protoc-gen-go-vtproto version: v0.6.1-0.20240319094008-0393e58bdf10
+// protoc-gen-go-vtproto version: v0.6.1-0.20241011083415-71c992bc3c87
// source: tabletmanagerdata.proto
package tabletmanagerdata
@@ -1060,6 +1060,47 @@ func (m *ReadTransactionResponse) CloneMessageVT() proto.Message {
return m.CloneVT()
}
+func (m *GetTransactionInfoRequest) CloneVT() *GetTransactionInfoRequest {
+ if m == nil {
+ return (*GetTransactionInfoRequest)(nil)
+ }
+ r := new(GetTransactionInfoRequest)
+ r.Dtid = m.Dtid
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *GetTransactionInfoRequest) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
+func (m *GetTransactionInfoResponse) CloneVT() *GetTransactionInfoResponse {
+ if m == nil {
+ return (*GetTransactionInfoResponse)(nil)
+ }
+ r := new(GetTransactionInfoResponse)
+ r.State = m.State
+ r.Message = m.Message
+ r.TimeCreated = m.TimeCreated
+ if rhs := m.Statements; rhs != nil {
+ tmpContainer := make([]string, len(rhs))
+ copy(tmpContainer, rhs)
+ r.Statements = tmpContainer
+ }
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *GetTransactionInfoResponse) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
func (m *ConcludeTransactionRequest) CloneVT() *ConcludeTransactionRequest {
if m == nil {
return (*ConcludeTransactionRequest)(nil)
@@ -1600,6 +1641,39 @@ func (m *PopulateReparentJournalResponse) CloneMessageVT() proto.Message {
return m.CloneVT()
}
+func (m *ReadReparentJournalInfoRequest) CloneVT() *ReadReparentJournalInfoRequest {
+ if m == nil {
+ return (*ReadReparentJournalInfoRequest)(nil)
+ }
+ r := new(ReadReparentJournalInfoRequest)
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *ReadReparentJournalInfoRequest) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
+func (m *ReadReparentJournalInfoResponse) CloneVT() *ReadReparentJournalInfoResponse {
+ if m == nil {
+ return (*ReadReparentJournalInfoResponse)(nil)
+ }
+ r := new(ReadReparentJournalInfoResponse)
+ r.Length = m.Length
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *ReadReparentJournalInfoResponse) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
func (m *InitReplicaRequest) CloneVT() *InitReplicaRequest {
if m == nil {
return (*InitReplicaRequest)(nil)
@@ -2079,6 +2153,46 @@ func (m *CreateVReplicationWorkflowResponse) CloneMessageVT() proto.Message {
return m.CloneVT()
}
+func (m *DeleteTableDataRequest) CloneVT() *DeleteTableDataRequest {
+ if m == nil {
+ return (*DeleteTableDataRequest)(nil)
+ }
+ r := new(DeleteTableDataRequest)
+ r.BatchSize = m.BatchSize
+ if rhs := m.TableFilters; rhs != nil {
+ tmpContainer := make(map[string]string, len(rhs))
+ for k, v := range rhs {
+ tmpContainer[k] = v
+ }
+ r.TableFilters = tmpContainer
+ }
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *DeleteTableDataRequest) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
+func (m *DeleteTableDataResponse) CloneVT() *DeleteTableDataResponse {
+ if m == nil {
+ return (*DeleteTableDataResponse)(nil)
+ }
+ r := new(DeleteTableDataResponse)
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *DeleteTableDataResponse) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
func (m *DeleteVReplicationWorkflowRequest) CloneVT() *DeleteVReplicationWorkflowRequest {
if m == nil {
return (*DeleteVReplicationWorkflowRequest)(nil)
@@ -2839,6 +2953,53 @@ func (m *GetThrottlerStatusResponse) CloneMessageVT() proto.Message {
return m.CloneVT()
}
+func (m *ChangeTagsRequest) CloneVT() *ChangeTagsRequest {
+ if m == nil {
+ return (*ChangeTagsRequest)(nil)
+ }
+ r := new(ChangeTagsRequest)
+ r.Replace = m.Replace
+ if rhs := m.Tags; rhs != nil {
+ tmpContainer := make(map[string]string, len(rhs))
+ for k, v := range rhs {
+ tmpContainer[k] = v
+ }
+ r.Tags = tmpContainer
+ }
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *ChangeTagsRequest) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
+func (m *ChangeTagsResponse) CloneVT() *ChangeTagsResponse {
+ if m == nil {
+ return (*ChangeTagsResponse)(nil)
+ }
+ r := new(ChangeTagsResponse)
+ if rhs := m.Tags; rhs != nil {
+ tmpContainer := make(map[string]string, len(rhs))
+ for k, v := range rhs {
+ tmpContainer[k] = v
+ }
+ r.Tags = tmpContainer
+ }
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *ChangeTagsResponse) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
func (m *TableDefinition) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
@@ -5302,6 +5463,107 @@ func (m *ReadTransactionResponse) MarshalToSizedBufferVT(dAtA []byte) (int, erro
return len(dAtA) - i, nil
}
+func (m *GetTransactionInfoRequest) MarshalVT() (dAtA []byte, err error) {
+ if m == nil {
+ return nil, nil
+ }
+ size := m.SizeVT()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBufferVT(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *GetTransactionInfoRequest) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *GetTransactionInfoRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+ if m == nil {
+ return 0, nil
+ }
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.unknownFields != nil {
+ i -= len(m.unknownFields)
+ copy(dAtA[i:], m.unknownFields)
+ }
+ if len(m.Dtid) > 0 {
+ i -= len(m.Dtid)
+ copy(dAtA[i:], m.Dtid)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Dtid)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *GetTransactionInfoResponse) MarshalVT() (dAtA []byte, err error) {
+ if m == nil {
+ return nil, nil
+ }
+ size := m.SizeVT()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBufferVT(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *GetTransactionInfoResponse) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *GetTransactionInfoResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+ if m == nil {
+ return 0, nil
+ }
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.unknownFields != nil {
+ i -= len(m.unknownFields)
+ copy(dAtA[i:], m.unknownFields)
+ }
+ if len(m.Statements) > 0 {
+ for iNdEx := len(m.Statements) - 1; iNdEx >= 0; iNdEx-- {
+ i -= len(m.Statements[iNdEx])
+ copy(dAtA[i:], m.Statements[iNdEx])
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Statements[iNdEx])))
+ i--
+ dAtA[i] = 0x22
+ }
+ }
+ if m.TimeCreated != 0 {
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(m.TimeCreated))
+ i--
+ dAtA[i] = 0x18
+ }
+ if len(m.Message) > 0 {
+ i -= len(m.Message)
+ copy(dAtA[i:], m.Message)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Message)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.State) > 0 {
+ i -= len(m.State)
+ copy(dAtA[i:], m.State)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.State)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
func (m *ConcludeTransactionRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
@@ -6544,7 +6806,7 @@ func (m *PopulateReparentJournalResponse) MarshalToSizedBufferVT(dAtA []byte) (i
return len(dAtA) - i, nil
}
-func (m *InitReplicaRequest) MarshalVT() (dAtA []byte, err error) {
+func (m *ReadReparentJournalInfoRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
}
@@ -6557,12 +6819,12 @@ func (m *InitReplicaRequest) MarshalVT() (dAtA []byte, err error) {
return dAtA[:n], nil
}
-func (m *InitReplicaRequest) MarshalToVT(dAtA []byte) (int, error) {
+func (m *ReadReparentJournalInfoRequest) MarshalToVT(dAtA []byte) (int, error) {
size := m.SizeVT()
return m.MarshalToSizedBufferVT(dAtA[:size])
}
-func (m *InitReplicaRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+func (m *ReadReparentJournalInfoRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
if m == nil {
return 0, nil
}
@@ -6574,42 +6836,10 @@ func (m *InitReplicaRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
- if m.SemiSync {
- i--
- if m.SemiSync {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x20
- }
- if m.TimeCreatedNs != 0 {
- i = protohelpers.EncodeVarint(dAtA, i, uint64(m.TimeCreatedNs))
- i--
- dAtA[i] = 0x18
- }
- if len(m.ReplicationPosition) > 0 {
- i -= len(m.ReplicationPosition)
- copy(dAtA[i:], m.ReplicationPosition)
- i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ReplicationPosition)))
- i--
- dAtA[i] = 0x12
- }
- if m.Parent != nil {
- size, err := m.Parent.MarshalToSizedBufferVT(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
- i--
- dAtA[i] = 0xa
- }
return len(dAtA) - i, nil
}
-func (m *InitReplicaResponse) MarshalVT() (dAtA []byte, err error) {
+func (m *ReadReparentJournalInfoResponse) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
}
@@ -6622,12 +6852,12 @@ func (m *InitReplicaResponse) MarshalVT() (dAtA []byte, err error) {
return dAtA[:n], nil
}
-func (m *InitReplicaResponse) MarshalToVT(dAtA []byte) (int, error) {
+func (m *ReadReparentJournalInfoResponse) MarshalToVT(dAtA []byte) (int, error) {
size := m.SizeVT()
return m.MarshalToSizedBufferVT(dAtA[:size])
}
-func (m *InitReplicaResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+func (m *ReadReparentJournalInfoResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
if m == nil {
return 0, nil
}
@@ -6639,10 +6869,15 @@ func (m *InitReplicaResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
+ if m.Length != 0 {
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(m.Length))
+ i--
+ dAtA[i] = 0x8
+ }
return len(dAtA) - i, nil
}
-func (m *DemotePrimaryRequest) MarshalVT() (dAtA []byte, err error) {
+func (m *InitReplicaRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
}
@@ -6655,12 +6890,12 @@ func (m *DemotePrimaryRequest) MarshalVT() (dAtA []byte, err error) {
return dAtA[:n], nil
}
-func (m *DemotePrimaryRequest) MarshalToVT(dAtA []byte) (int, error) {
+func (m *InitReplicaRequest) MarshalToVT(dAtA []byte) (int, error) {
size := m.SizeVT()
return m.MarshalToSizedBufferVT(dAtA[:size])
}
-func (m *DemotePrimaryRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+func (m *InitReplicaRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
if m == nil {
return 0, nil
}
@@ -6672,13 +6907,111 @@ func (m *DemotePrimaryRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error)
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
- return len(dAtA) - i, nil
-}
-
-func (m *DemotePrimaryResponse) MarshalVT() (dAtA []byte, err error) {
- if m == nil {
- return nil, nil
- }
+ if m.SemiSync {
+ i--
+ if m.SemiSync {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i--
+ dAtA[i] = 0x20
+ }
+ if m.TimeCreatedNs != 0 {
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(m.TimeCreatedNs))
+ i--
+ dAtA[i] = 0x18
+ }
+ if len(m.ReplicationPosition) > 0 {
+ i -= len(m.ReplicationPosition)
+ copy(dAtA[i:], m.ReplicationPosition)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ReplicationPosition)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Parent != nil {
+ size, err := m.Parent.MarshalToSizedBufferVT(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *InitReplicaResponse) MarshalVT() (dAtA []byte, err error) {
+ if m == nil {
+ return nil, nil
+ }
+ size := m.SizeVT()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBufferVT(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *InitReplicaResponse) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *InitReplicaResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+ if m == nil {
+ return 0, nil
+ }
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.unknownFields != nil {
+ i -= len(m.unknownFields)
+ copy(dAtA[i:], m.unknownFields)
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *DemotePrimaryRequest) MarshalVT() (dAtA []byte, err error) {
+ if m == nil {
+ return nil, nil
+ }
+ size := m.SizeVT()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBufferVT(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *DemotePrimaryRequest) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *DemotePrimaryRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+ if m == nil {
+ return 0, nil
+ }
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.unknownFields != nil {
+ i -= len(m.unknownFields)
+ copy(dAtA[i:], m.unknownFields)
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *DemotePrimaryResponse) MarshalVT() (dAtA []byte, err error) {
+ if m == nil {
+ return nil, nil
+ }
size := m.SizeVT()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBufferVT(dAtA[:size])
@@ -7770,6 +8103,96 @@ func (m *CreateVReplicationWorkflowResponse) MarshalToSizedBufferVT(dAtA []byte)
return len(dAtA) - i, nil
}
+func (m *DeleteTableDataRequest) MarshalVT() (dAtA []byte, err error) {
+ if m == nil {
+ return nil, nil
+ }
+ size := m.SizeVT()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBufferVT(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *DeleteTableDataRequest) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *DeleteTableDataRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+ if m == nil {
+ return 0, nil
+ }
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.unknownFields != nil {
+ i -= len(m.unknownFields)
+ copy(dAtA[i:], m.unknownFields)
+ }
+ if m.BatchSize != 0 {
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(m.BatchSize))
+ i--
+ dAtA[i] = 0x10
+ }
+ if len(m.TableFilters) > 0 {
+ for k := range m.TableFilters {
+ v := m.TableFilters[k]
+ baseI := i
+ i -= len(v)
+ copy(dAtA[i:], v)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(v)))
+ i--
+ dAtA[i] = 0x12
+ i -= len(k)
+ copy(dAtA[i:], k)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(k)))
+ i--
+ dAtA[i] = 0xa
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(baseI-i))
+ i--
+ dAtA[i] = 0xa
+ }
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *DeleteTableDataResponse) MarshalVT() (dAtA []byte, err error) {
+ if m == nil {
+ return nil, nil
+ }
+ size := m.SizeVT()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBufferVT(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *DeleteTableDataResponse) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *DeleteTableDataResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+ if m == nil {
+ return 0, nil
+ }
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.unknownFields != nil {
+ i -= len(m.unknownFields)
+ copy(dAtA[i:], m.unknownFields)
+ }
+ return len(dAtA) - i, nil
+}
+
func (m *DeleteVReplicationWorkflowRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
@@ -9989,69 +10412,183 @@ func (m *GetThrottlerStatusResponse) MarshalToSizedBufferVT(dAtA []byte) (int, e
return len(dAtA) - i, nil
}
-func (m *TableDefinition) SizeVT() (n int) {
+func (m *ChangeTagsRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.Name)
- if l > 0 {
- n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
- }
- l = len(m.Schema)
- if l > 0 {
- n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
- }
- if len(m.Columns) > 0 {
- for _, s := range m.Columns {
- l = len(s)
- n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
- }
- }
- if len(m.PrimaryKeyColumns) > 0 {
- for _, s := range m.PrimaryKeyColumns {
- l = len(s)
- n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
- }
- }
- l = len(m.Type)
- if l > 0 {
- n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
- }
- if m.DataLength != 0 {
- n += 1 + protohelpers.SizeOfVarint(uint64(m.DataLength))
- }
- if m.RowCount != 0 {
- n += 1 + protohelpers.SizeOfVarint(uint64(m.RowCount))
+ return nil, nil
}
- if len(m.Fields) > 0 {
- for _, e := range m.Fields {
- l = e.SizeVT()
- n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
- }
+ size := m.SizeVT()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBufferVT(dAtA[:size])
+ if err != nil {
+ return nil, err
}
- n += len(m.unknownFields)
- return n
+ return dAtA[:n], nil
}
-func (m *SchemaDefinition) SizeVT() (n int) {
+func (m *ChangeTagsRequest) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *ChangeTagsRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
if m == nil {
- return 0
+ return 0, nil
}
+ i := len(dAtA)
+ _ = i
var l int
_ = l
- l = len(m.DatabaseSchema)
- if l > 0 {
- n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
- }
- if len(m.TableDefinitions) > 0 {
- for _, e := range m.TableDefinitions {
- l = e.SizeVT()
- n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
- }
+ if m.unknownFields != nil {
+ i -= len(m.unknownFields)
+ copy(dAtA[i:], m.unknownFields)
}
- n += len(m.unknownFields)
+ if m.Replace {
+ i--
+ if m.Replace {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i--
+ dAtA[i] = 0x10
+ }
+ if len(m.Tags) > 0 {
+ for k := range m.Tags {
+ v := m.Tags[k]
+ baseI := i
+ i -= len(v)
+ copy(dAtA[i:], v)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(v)))
+ i--
+ dAtA[i] = 0x12
+ i -= len(k)
+ copy(dAtA[i:], k)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(k)))
+ i--
+ dAtA[i] = 0xa
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(baseI-i))
+ i--
+ dAtA[i] = 0xa
+ }
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *ChangeTagsResponse) MarshalVT() (dAtA []byte, err error) {
+ if m == nil {
+ return nil, nil
+ }
+ size := m.SizeVT()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBufferVT(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *ChangeTagsResponse) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *ChangeTagsResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+ if m == nil {
+ return 0, nil
+ }
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.unknownFields != nil {
+ i -= len(m.unknownFields)
+ copy(dAtA[i:], m.unknownFields)
+ }
+ if len(m.Tags) > 0 {
+ for k := range m.Tags {
+ v := m.Tags[k]
+ baseI := i
+ i -= len(v)
+ copy(dAtA[i:], v)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(v)))
+ i--
+ dAtA[i] = 0x12
+ i -= len(k)
+ copy(dAtA[i:], k)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(k)))
+ i--
+ dAtA[i] = 0xa
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(baseI-i))
+ i--
+ dAtA[i] = 0xa
+ }
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *TableDefinition) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Name)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ l = len(m.Schema)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ if len(m.Columns) > 0 {
+ for _, s := range m.Columns {
+ l = len(s)
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ }
+ if len(m.PrimaryKeyColumns) > 0 {
+ for _, s := range m.PrimaryKeyColumns {
+ l = len(s)
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ }
+ l = len(m.Type)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ if m.DataLength != 0 {
+ n += 1 + protohelpers.SizeOfVarint(uint64(m.DataLength))
+ }
+ if m.RowCount != 0 {
+ n += 1 + protohelpers.SizeOfVarint(uint64(m.RowCount))
+ }
+ if len(m.Fields) > 0 {
+ for _, e := range m.Fields {
+ l = e.SizeVT()
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
+func (m *SchemaDefinition) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.DatabaseSchema)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ if len(m.TableDefinitions) > 0 {
+ for _, e := range m.TableDefinitions {
+ l = e.SizeVT()
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ }
+ n += len(m.unknownFields)
return n
}
@@ -10867,6 +11404,47 @@ func (m *ReadTransactionResponse) SizeVT() (n int) {
return n
}
+func (m *GetTransactionInfoRequest) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Dtid)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
+func (m *GetTransactionInfoResponse) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.State)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ l = len(m.Message)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ if m.TimeCreated != 0 {
+ n += 1 + protohelpers.SizeOfVarint(uint64(m.TimeCreated))
+ }
+ if len(m.Statements) > 0 {
+ for _, s := range m.Statements {
+ l = len(s)
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
func (m *ConcludeTransactionRequest) SizeVT() (n int) {
if m == nil {
return 0
@@ -11278,6 +11856,29 @@ func (m *PopulateReparentJournalResponse) SizeVT() (n int) {
return n
}
+func (m *ReadReparentJournalInfoRequest) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ n += len(m.unknownFields)
+ return n
+}
+
+func (m *ReadReparentJournalInfoResponse) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Length != 0 {
+ n += 1 + protohelpers.SizeOfVarint(uint64(m.Length))
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
func (m *InitReplicaRequest) SizeVT() (n int) {
if m == nil {
return 0
@@ -11696,6 +12297,37 @@ func (m *CreateVReplicationWorkflowResponse) SizeVT() (n int) {
return n
}
+func (m *DeleteTableDataRequest) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if len(m.TableFilters) > 0 {
+ for k, v := range m.TableFilters {
+ _ = k
+ _ = v
+ mapEntrySize := 1 + len(k) + protohelpers.SizeOfVarint(uint64(len(k))) + 1 + len(v) + protohelpers.SizeOfVarint(uint64(len(v)))
+ n += mapEntrySize + 1 + protohelpers.SizeOfVarint(uint64(mapEntrySize))
+ }
+ }
+ if m.BatchSize != 0 {
+ n += 1 + protohelpers.SizeOfVarint(uint64(m.BatchSize))
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
+func (m *DeleteTableDataResponse) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ n += len(m.unknownFields)
+ return n
+}
+
func (m *DeleteVReplicationWorkflowRequest) SizeVT() (n int) {
if m == nil {
return 0
@@ -12577,6 +13209,45 @@ func (m *GetThrottlerStatusResponse) SizeVT() (n int) {
return n
}
+func (m *ChangeTagsRequest) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if len(m.Tags) > 0 {
+ for k, v := range m.Tags {
+ _ = k
+ _ = v
+ mapEntrySize := 1 + len(k) + protohelpers.SizeOfVarint(uint64(len(k))) + 1 + len(v) + protohelpers.SizeOfVarint(uint64(len(v)))
+ n += mapEntrySize + 1 + protohelpers.SizeOfVarint(uint64(mapEntrySize))
+ }
+ }
+ if m.Replace {
+ n += 2
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
+func (m *ChangeTagsResponse) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if len(m.Tags) > 0 {
+ for k, v := range m.Tags {
+ _ = k
+ _ = v
+ mapEntrySize := 1 + len(k) + protohelpers.SizeOfVarint(uint64(len(k))) + 1 + len(v) + protohelpers.SizeOfVarint(uint64(len(v)))
+ n += mapEntrySize + 1 + protohelpers.SizeOfVarint(uint64(mapEntrySize))
+ }
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
func (m *TableDefinition) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
@@ -18084,7 +18755,7 @@ func (m *ReadTransactionResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *ConcludeTransactionRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetTransactionInfoRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -18107,10 +18778,10 @@ func (m *ConcludeTransactionRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: ConcludeTransactionRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetTransactionInfoRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: ConcludeTransactionRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetTransactionInfoRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -18145,7 +18816,256 @@ func (m *ConcludeTransactionRequest) UnmarshalVT(dAtA []byte) error {
}
m.Dtid = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 2:
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GetTransactionInfoResponse) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: GetTransactionInfoResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: GetTransactionInfoResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field State", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.State = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Message = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TimeCreated", wireType)
+ }
+ m.TimeCreated = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.TimeCreated |= int64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Statements", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Statements = append(m.Statements, string(dAtA[iNdEx:postIndex]))
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *ConcludeTransactionRequest) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: ConcludeTransactionRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: ConcludeTransactionRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Dtid", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Dtid = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Mm", wireType)
}
@@ -20416,7 +21336,7 @@ func (m *PopulateReparentJournalResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *InitReplicaRequest) UnmarshalVT(dAtA []byte) error {
+func (m *ReadReparentJournalInfoRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -20439,20 +21359,141 @@ func (m *InitReplicaRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: InitReplicaRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: ReadReparentJournalInfoRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: InitReplicaRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: ReadReparentJournalInfoRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Parent", wireType)
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
}
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *ReadReparentJournalInfoResponse) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: ReadReparentJournalInfoResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: ReadReparentJournalInfoResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Length", wireType)
+ }
+ m.Length = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Length |= int32(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *InitReplicaRequest) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: InitReplicaRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: InitReplicaRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Parent", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
@@ -22926,7 +23967,7 @@ func (m *CreateVReplicationWorkflowResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *DeleteVReplicationWorkflowRequest) UnmarshalVT(dAtA []byte) error {
+func (m *DeleteTableDataRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -22949,17 +23990,17 @@ func (m *DeleteVReplicationWorkflowRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: DeleteVReplicationWorkflowRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: DeleteTableDataRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: DeleteVReplicationWorkflowRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: DeleteTableDataRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Workflow", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field TableFilters", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -22969,24 +24010,138 @@ func (m *DeleteVReplicationWorkflowRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Workflow = string(dAtA[iNdEx:postIndex])
+ if m.TableFilters == nil {
+ m.TableFilters = make(map[string]string)
+ }
+ var mapkey string
+ var mapvalue string
+ for iNdEx < postIndex {
+ entryPreIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ if fieldNum == 1 {
+ var stringLenmapkey uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLenmapkey |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLenmapkey := int(stringLenmapkey)
+ if intStringLenmapkey < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postStringIndexmapkey := iNdEx + intStringLenmapkey
+ if postStringIndexmapkey < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postStringIndexmapkey > l {
+ return io.ErrUnexpectedEOF
+ }
+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey])
+ iNdEx = postStringIndexmapkey
+ } else if fieldNum == 2 {
+ var stringLenmapvalue uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLenmapvalue |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLenmapvalue := int(stringLenmapvalue)
+ if intStringLenmapvalue < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue
+ if postStringIndexmapvalue < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postStringIndexmapvalue > l {
+ return io.ErrUnexpectedEOF
+ }
+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue])
+ iNdEx = postStringIndexmapvalue
+ } else {
+ iNdEx = entryPreIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > postIndex {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+ m.TableFilters[mapkey] = mapvalue
iNdEx = postIndex
+ case 2:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field BatchSize", wireType)
+ }
+ m.BatchSize = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.BatchSize |= int64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -23009,7 +24164,7 @@ func (m *DeleteVReplicationWorkflowRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *DeleteVReplicationWorkflowResponse) UnmarshalVT(dAtA []byte) error {
+func (m *DeleteTableDataResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -23032,17 +24187,151 @@ func (m *DeleteVReplicationWorkflowResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: DeleteVReplicationWorkflowResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: DeleteTableDataResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: DeleteVReplicationWorkflowResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: DeleteTableDataResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Result", wireType)
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
}
- var msglen int
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *DeleteVReplicationWorkflowRequest) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: DeleteVReplicationWorkflowRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: DeleteVReplicationWorkflowRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Workflow", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Workflow = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *DeleteVReplicationWorkflowResponse) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: DeleteVReplicationWorkflowResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: DeleteVReplicationWorkflowResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Result", wireType)
+ }
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -29153,3 +30442,379 @@ func (m *GetThrottlerStatusResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
+func (m *ChangeTagsRequest) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: ChangeTagsRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: ChangeTagsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Tags", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Tags == nil {
+ m.Tags = make(map[string]string)
+ }
+ var mapkey string
+ var mapvalue string
+ for iNdEx < postIndex {
+ entryPreIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ if fieldNum == 1 {
+ var stringLenmapkey uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLenmapkey |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLenmapkey := int(stringLenmapkey)
+ if intStringLenmapkey < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postStringIndexmapkey := iNdEx + intStringLenmapkey
+ if postStringIndexmapkey < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postStringIndexmapkey > l {
+ return io.ErrUnexpectedEOF
+ }
+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey])
+ iNdEx = postStringIndexmapkey
+ } else if fieldNum == 2 {
+ var stringLenmapvalue uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLenmapvalue |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLenmapvalue := int(stringLenmapvalue)
+ if intStringLenmapvalue < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue
+ if postStringIndexmapvalue < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postStringIndexmapvalue > l {
+ return io.ErrUnexpectedEOF
+ }
+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue])
+ iNdEx = postStringIndexmapvalue
+ } else {
+ iNdEx = entryPreIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > postIndex {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+ m.Tags[mapkey] = mapvalue
+ iNdEx = postIndex
+ case 2:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Replace", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.Replace = bool(v != 0)
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *ChangeTagsResponse) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: ChangeTagsResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: ChangeTagsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Tags", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Tags == nil {
+ m.Tags = make(map[string]string)
+ }
+ var mapkey string
+ var mapvalue string
+ for iNdEx < postIndex {
+ entryPreIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ if fieldNum == 1 {
+ var stringLenmapkey uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLenmapkey |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLenmapkey := int(stringLenmapkey)
+ if intStringLenmapkey < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postStringIndexmapkey := iNdEx + intStringLenmapkey
+ if postStringIndexmapkey < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postStringIndexmapkey > l {
+ return io.ErrUnexpectedEOF
+ }
+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey])
+ iNdEx = postStringIndexmapkey
+ } else if fieldNum == 2 {
+ var stringLenmapvalue uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLenmapvalue |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLenmapvalue := int(stringLenmapvalue)
+ if intStringLenmapvalue < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue
+ if postStringIndexmapvalue < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postStringIndexmapvalue > l {
+ return io.ErrUnexpectedEOF
+ }
+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue])
+ iNdEx = postStringIndexmapvalue
+ } else {
+ iNdEx = entryPreIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > postIndex {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+ m.Tags[mapkey] = mapvalue
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
diff --git a/go/vt/proto/tabletmanagerservice/tabletmanagerservice.pb.go b/go/vt/proto/tabletmanagerservice/tabletmanagerservice.pb.go
index c5be01e88f4..7fc337a9da2 100644
--- a/go/vt/proto/tabletmanagerservice/tabletmanagerservice.pb.go
+++ b/go/vt/proto/tabletmanagerservice/tabletmanagerservice.pb.go
@@ -18,7 +18,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.34.2
+// protoc-gen-go v1.35.1
// protoc v3.21.3
// source: tabletmanagerservice.proto
@@ -45,7 +45,7 @@ var file_tabletmanagerservice_proto_rawDesc = []byte{
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x74, 0x61,
0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x73, 0x65, 0x72, 0x76, 0x69,
0x63, 0x65, 0x1a, 0x17, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
- 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xd7, 0x37, 0x0a, 0x0d,
+ 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x9a, 0x3b, 0x0a, 0x0d,
0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x12, 0x49, 0x0a,
0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x1e, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65,
@@ -94,408 +94,436 @@ var file_tabletmanagerservice_proto_rawDesc = []byte{
0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x61, 0x62, 0x6c,
0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65,
0x74, 0x52, 0x65, 0x61, 0x64, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79,
- 0x70, 0x65, 0x12, 0x24, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
- 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70,
- 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x73, 0x65, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61,
+ 0x67, 0x73, 0x12, 0x24, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
+ 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x67,
+ 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65,
0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61,
- 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
- 0x00, 0x12, 0x61, 0x0a, 0x0c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74,
- 0x65, 0x12, 0x26, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
- 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61,
- 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65,
- 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x00, 0x12, 0x67, 0x0a, 0x0e, 0x52, 0x75, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74,
- 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x28, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d,
- 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x75, 0x6e, 0x48, 0x65,
- 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x75, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68,
- 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a,
- 0x0c, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x26, 0x2e,
- 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
- 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64,
- 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
- 0x12, 0x6a, 0x0a, 0x0f, 0x50, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x63, 0x68,
- 0x65, 0x6d, 0x61, 0x12, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
- 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68,
- 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a,
+ 0x6e, 0x67, 0x65, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x00, 0x12, 0x5b, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12,
+ 0x24, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
+ 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65,
+ 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61,
+ 0x0a, 0x0c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x26,
0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x50, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x63, 0x68, 0x65,
- 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x0b,
- 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x25, 0x2e, 0x74, 0x61,
+ 0x74, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d,
+ 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65,
+ 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x00, 0x12, 0x67, 0x0a, 0x0e, 0x52, 0x75, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68,
+ 0x65, 0x63, 0x6b, 0x12, 0x28, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
+ 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x75, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74,
+ 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x52, 0x75, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x0c, 0x52, 0x65,
+ 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x26, 0x2e, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52,
+ 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
+ 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68,
+ 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a,
+ 0x0f, 0x50, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x12, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x63,
+ 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x74, 0x61,
0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
- 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65,
- 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x67, 0x0a, 0x0e,
- 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x28,
- 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65,
- 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73,
- 0x65, 0x74, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0a, 0x4c, 0x6f, 0x63, 0x6b, 0x54, 0x61, 0x62,
- 0x6c, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
- 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x6f, 0x63, 0x6b, 0x54, 0x61, 0x62, 0x6c,
- 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x6f,
+ 0x50, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x0b, 0x41, 0x70, 0x70,
+ 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x70, 0x70,
+ 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x26, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x67, 0x0a, 0x0e, 0x52, 0x65, 0x73,
+ 0x65, 0x74, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
+ 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53,
+ 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0a, 0x4c, 0x6f, 0x63, 0x6b, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73,
+ 0x12, 0x24, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x6f, 0x63, 0x6b, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d,
+ 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x6f, 0x63, 0x6b, 0x54,
+ 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
+ 0x61, 0x0a, 0x0c, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12,
+ 0x26, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x6e, 0x6c, 0x6f,
0x63, 0x6b, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x00, 0x12, 0x61, 0x0a, 0x0c, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x61, 0x62, 0x6c,
- 0x65, 0x73, 0x12, 0x26, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
- 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x61, 0x62,
- 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55,
- 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x0c, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65,
- 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x26, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
- 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74,
- 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e,
- 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x11, 0x45, 0x78, 0x65, 0x63,
- 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x62, 0x61, 0x12, 0x2b, 0x2e,
- 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73,
- 0x44, 0x62, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x74, 0x61, 0x62,
+ 0x22, 0x00, 0x12, 0x61, 0x0a, 0x0c, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x51, 0x75, 0x65,
+ 0x72, 0x79, 0x12, 0x26, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
+ 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x51, 0x75,
+ 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45,
+ 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x11, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65,
+ 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x62, 0x61, 0x12, 0x2b, 0x2e, 0x74, 0x61, 0x62,
0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45,
0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x62, 0x61,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7f, 0x0a, 0x16, 0x45, 0x78,
- 0x65, 0x63, 0x75, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41,
- 0x73, 0x44, 0x62, 0x61, 0x12, 0x30, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e,
- 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65,
- 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x62, 0x61, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d,
- 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75,
- 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x62,
- 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7f, 0x0a, 0x16, 0x45,
- 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x6c, 0x6c,
- 0x50, 0x72, 0x69, 0x76, 0x73, 0x12, 0x30, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
- 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74,
- 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x6c, 0x6c, 0x50, 0x72, 0x69, 0x76, 0x73,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63,
+ 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x62, 0x61, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7f, 0x0a, 0x16, 0x45, 0x78, 0x65, 0x63, 0x75,
+ 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x62,
+ 0x61, 0x12, 0x30, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
+ 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4d, 0x75, 0x6c,
+ 0x74, 0x69, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x62, 0x61, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
+ 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4d,
+ 0x75, 0x6c, 0x74, 0x69, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x62, 0x61, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7f, 0x0a, 0x16, 0x45, 0x78, 0x65, 0x63,
0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x6c, 0x6c, 0x50, 0x72, 0x69,
- 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x11,
- 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x70,
- 0x70, 0x12, 0x2b, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
- 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74,
- 0x63, 0x68, 0x41, 0x73, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c,
+ 0x76, 0x73, 0x12, 0x30, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
+ 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65,
+ 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x6c, 0x6c, 0x50, 0x72, 0x69, 0x76, 0x73, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e,
+ 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65,
+ 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x6c, 0x6c, 0x50, 0x72, 0x69, 0x76, 0x73, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x11, 0x45, 0x78, 0x65,
+ 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x70, 0x70, 0x12, 0x2b,
0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61,
0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41,
- 0x73, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x88,
- 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64,
- 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x33, 0x2e, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72,
- 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x1a, 0x34, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
- 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c,
- 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x0f, 0x52, 0x65, 0x61,
- 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x52, 0x65, 0x61, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x61, 0x64,
- 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64,
- 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x2e, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63,
- 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x61,
+ 0x73, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x74, 0x61,
0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74,
- 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a,
- 0x10, 0x4d, 0x79, 0x73, 0x71, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63,
- 0x73, 0x12, 0x2a, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
- 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x79, 0x73, 0x71, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x4d,
- 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e,
- 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x4d, 0x79, 0x73, 0x71, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69,
- 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x11,
- 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75,
- 0x73, 0x12, 0x2b, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
- 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c,
+ 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x70,
+ 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x88, 0x01, 0x0a, 0x19,
+ 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61,
+ 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x33, 0x2e, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65,
+ 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73,
+ 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34,
0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74,
- 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x64,
- 0x0a, 0x0d, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12,
- 0x27, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75,
- 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x69,
- 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x50,
- 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x69, 0x6d,
- 0x61, 0x72, 0x79, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
- 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x50, 0x6f,
- 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
- 0x12, 0x6a, 0x0a, 0x0f, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x6f, 0x73, 0x69, 0x74,
- 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
- 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50,
- 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a,
+ 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64,
+ 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x0f, 0x52, 0x65, 0x61, 0x64, 0x54, 0x72,
+ 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65,
+ 0x61, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e,
+ 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x54, 0x72, 0x61,
+ 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x00, 0x12, 0x73, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74,
+ 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d,
+ 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72,
+ 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x63, 0x6c,
+ 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d,
0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69,
- 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x0f,
- 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
- 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x74, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53,
- 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7f, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x70,
- 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, 0x69, 0x6d,
- 0x75, 0x6d, 0x12, 0x30, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
- 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69,
- 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e,
+ 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73,
+ 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
+ 0x6d, 0x0a, 0x10, 0x4d, 0x79, 0x73, 0x71, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72,
+ 0x69, 0x63, 0x73, 0x12, 0x2a, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
+ 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x79, 0x73, 0x71, 0x6c, 0x48, 0x6f, 0x73,
+ 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x2b, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x79, 0x73, 0x71, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x74,
+ 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70,
+ 0x0a, 0x11, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61,
+ 0x74, 0x75, 0x73, 0x12, 0x2b, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
+ 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+ 0x12, 0x64, 0x0a, 0x0d, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75,
+ 0x73, 0x12, 0x27, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
+ 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61,
+ 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50,
+ 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72,
+ 0x79, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72,
+ 0x69, 0x6d, 0x61, 0x72, 0x79, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e,
+ 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79,
+ 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x0f, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x6f, 0x73,
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
+ 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f,
+ 0x72, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x2a, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x6f, 0x73, 0x69,
+ 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a,
+ 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x12, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
+ 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7f, 0x0a, 0x16, 0x53, 0x74,
+ 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e,
+ 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x30, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e,
0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70,
0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x10, 0x53, 0x74, 0x61,
- 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e,
- 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d,
+ 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52,
+ 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75,
+ 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x10, 0x53,
+ 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+ 0x2a, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8b, 0x01, 0x0a, 0x1a, 0x53,
+ 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55,
+ 0x6e, 0x74, 0x69, 0x6c, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x34, 0x2e, 0x74, 0x61, 0x62, 0x6c,
0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74,
- 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8b, 0x01, 0x0a, 0x1a, 0x53, 0x74, 0x61,
- 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x74,
- 0x69, 0x6c, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x34, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x61, 0x72,
- 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x74, 0x69,
- 0x6c, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e,
+ 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e,
+ 0x74, 0x69, 0x6c, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x35, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52,
+ 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x52,
+ 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26,
+ 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8b, 0x01, 0x0a, 0x1a, 0x43, 0x72, 0x65,
+ 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57,
+ 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x34, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61,
+ 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f,
+ 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e,
0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
- 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8b, 0x01, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74,
- 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72,
- 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x34, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
- 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
- 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b,
- 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x74, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x00, 0x12, 0x8b, 0x01, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56,
- 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66,
- 0x6c, 0x6f, 0x77, 0x12, 0x34, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
- 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x52,
- 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
- 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x74, 0x61, 0x62, 0x6c,
+ 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+ 0x54, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c,
0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65,
- 0x6c, 0x65, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x00, 0x12, 0x85, 0x01, 0x0a, 0x18, 0x48, 0x61, 0x73, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69,
- 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12,
- 0x32, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x48, 0x61, 0x73, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
- 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x48, 0x61, 0x73, 0x56, 0x52, 0x65, 0x70, 0x6c,
- 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x85, 0x01, 0x0a, 0x18, 0x52,
- 0x65, 0x61, 0x64, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57,
- 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x32, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x61, 0x64,
- 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b,
- 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x74, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x00, 0x12, 0x88, 0x01, 0x0a, 0x19, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65, 0x70, 0x6c,
- 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73,
- 0x12, 0x33, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
+ 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e,
+ 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54,
+ 0x61, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x00, 0x12, 0x8b, 0x01, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x52, 0x65,
+ 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
+ 0x77, 0x12, 0x34, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
+ 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70,
+ 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65,
+ 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f,
+ 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+ 0x12, 0x85, 0x01, 0x0a, 0x18, 0x48, 0x61, 0x73, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x32, 0x2e,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x48, 0x61, 0x73, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x1a, 0x33, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
+ 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x48, 0x61, 0x73, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x85, 0x01, 0x0a, 0x18, 0x52, 0x65, 0x61,
+ 0x64, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72,
+ 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x32, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52,
0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
- 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8b, 0x01,
- 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x34, 0x2e, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
- 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65,
- 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
- 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8e, 0x01, 0x0a, 0x1b,
- 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x35, 0x2e, 0x74, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65,
+ 0x61, 0x64, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f,
+ 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+ 0x12, 0x88, 0x01, 0x0a, 0x19, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x33,
+ 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
+ 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x56, 0x52, 0x65, 0x70,
+ 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
+ 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8b, 0x01, 0x0a, 0x1a,
0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
- 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65,
- 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
- 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x9a, 0x01, 0x0a,
- 0x1f, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73,
- 0x12, 0x39, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65,
- 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73,
- 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x74, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x10, 0x56, 0x52, 0x65,
- 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x12, 0x2a, 0x2e,
- 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78,
- 0x65, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52,
- 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7f, 0x0a, 0x16, 0x56, 0x52, 0x65, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50,
- 0x6f, 0x73, 0x12, 0x30, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
- 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x6f, 0x73, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e,
- 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x6f, 0x73, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x05, 0x56, 0x44, 0x69,
- 0x66, 0x66, 0x12, 0x1f, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
- 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
- 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x65, 0x74,
- 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x74, 0x61,
+ 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x34, 0x2e, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55,
+ 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x35, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8e, 0x01, 0x0a, 0x1b, 0x55, 0x70,
+ 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x35, 0x2e, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x70,
+ 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x36, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x9a, 0x01, 0x0a, 0x1f, 0x56,
+ 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x39,
+ 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f,
+ 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61,
+ 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x10, 0x56, 0x52, 0x65, 0x70, 0x6c,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x12, 0x2a, 0x2e, 0x74, 0x61,
0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x65, 0x63,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x65,
- 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x0b, 0x49, 0x6e, 0x69, 0x74, 0x50, 0x72,
- 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
- 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x50, 0x72,
- 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x82, 0x01, 0x0a, 0x17, 0x50, 0x6f, 0x70, 0x75, 0x6c,
- 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4a, 0x6f, 0x75, 0x72, 0x6e,
- 0x61, 0x6c, 0x12, 0x31, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
- 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x52,
- 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
- 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61,
- 0x74, 0x65, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61,
- 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x0b, 0x49,
- 0x6e, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x12, 0x25, 0x2e, 0x74, 0x61, 0x62,
+ 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70,
+ 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7f, 0x0a, 0x16, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x6f, 0x73,
+ 0x12, 0x30, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
+ 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x6f, 0x73, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x05, 0x56, 0x44, 0x69, 0x66, 0x66,
+ 0x12, 0x1f, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x1a, 0x20, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
+ 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65,
+ 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65,
+ 0x73, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
+ 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52,
+ 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x0b, 0x49, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x6d,
+ 0x61, 0x72, 0x79, 0x12, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
+ 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x6d,
+ 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x74, 0x61, 0x62,
0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x49,
- 0x6e, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x1a, 0x26, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
- 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x64, 0x0a, 0x0d, 0x44,
- 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x27, 0x2e, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x44, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
- 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6d, 0x6f, 0x74, 0x65,
- 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
- 0x00, 0x12, 0x70, 0x0a, 0x11, 0x55, 0x6e, 0x64, 0x6f, 0x44, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x50,
- 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x2b, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d,
+ 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x00, 0x12, 0x82, 0x01, 0x0a, 0x17, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74,
+ 0x65, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c,
+ 0x12, 0x31, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70,
+ 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
+ 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65,
+ 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x82, 0x01, 0x0a, 0x17, 0x52, 0x65,
+ 0x61, 0x64, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61,
+ 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x31, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
+ 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65,
+ 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66,
+ 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x61,
+ 0x64, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c,
+ 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e,
+ 0x0a, 0x0b, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x12, 0x25, 0x2e,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e,
+ 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x70,
+ 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x64,
+ 0x0a, 0x0d, 0x44, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12,
+ 0x27, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72,
+ 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6d,
+ 0x6f, 0x74, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x11, 0x55, 0x6e, 0x64, 0x6f, 0x44, 0x65, 0x6d, 0x6f,
+ 0x74, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x2b, 0x2e, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x6e,
+ 0x64, 0x6f, 0x44, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d,
0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x6e, 0x64, 0x6f, 0x44,
- 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
- 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x6e, 0x64, 0x6f, 0x44, 0x65, 0x6d, 0x6f,
- 0x74, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x00, 0x12, 0x73, 0x0a, 0x12, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x57, 0x61,
- 0x73, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x12, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65,
- 0x70, 0x6c, 0x69, 0x63, 0x61, 0x57, 0x61, 0x73, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x73, 0x0a, 0x12, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x57, 0x61, 0x73, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x12, 0x2c, 0x2e, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x57, 0x61, 0x73, 0x50, 0x72, 0x6f, 0x6d, 0x6f,
+ 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52,
+ 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x57, 0x61, 0x73, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65,
+ 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8b, 0x01, 0x0a, 0x1a,
+ 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x34, 0x2e, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52,
+ 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50,
+ 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x35, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0a, 0x46, 0x75, 0x6c,
+ 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x75, 0x6c, 0x6c,
+ 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x79, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70,
+ 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2e,
+ 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f,
+ 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x00, 0x12, 0x76, 0x0a, 0x13, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x57, 0x61, 0x73, 0x52,
+ 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x2d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x70,
+ 0x6c, 0x69, 0x63, 0x61, 0x57, 0x61, 0x73, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x70, 0x6c,
- 0x69, 0x63, 0x61, 0x57, 0x61, 0x73, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8b, 0x01, 0x0a, 0x1a, 0x52, 0x65, 0x73,
- 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72,
- 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x34, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x65,
- 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61,
- 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e,
+ 0x69, 0x63, 0x61, 0x57, 0x61, 0x73, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8e, 0x01, 0x0a, 0x1b, 0x53, 0x74,
+ 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64,
+ 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x35, 0x2e, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74,
+ 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64,
+ 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x36, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x67, 0x0a, 0x0e, 0x50, 0x72,
+ 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x12, 0x28, 0x2e, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d,
+ 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f,
+ 0x74, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x06, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x20, 0x2e,
0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0a, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74,
- 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e,
- 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61,
- 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x74, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46,
- 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x00, 0x12, 0x79, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2e, 0x2e, 0x74, 0x61,
+ 0x61, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x21, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x72, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72,
+ 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x2b, 0x2e, 0x74, 0x61,
0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f,
- 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x74, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f,
- 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76,
- 0x0a, 0x13, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x57, 0x61, 0x73, 0x52, 0x65, 0x73, 0x74,
- 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x2d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
- 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x57, 0x61, 0x73, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e,
- 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
- 0x57, 0x61, 0x73, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8e, 0x01, 0x0a, 0x1b, 0x53, 0x74, 0x6f, 0x70, 0x52,
- 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x47, 0x65, 0x74,
- 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x35, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d,
- 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52,
- 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x47, 0x65, 0x74,
- 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e,
- 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x41, 0x6e, 0x64, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x67, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x6d, 0x6f,
- 0x74, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x12, 0x28, 0x2e, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72,
- 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
- 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x52,
- 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
- 0x12, 0x51, 0x0a, 0x06, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x20, 0x2e, 0x74, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x42,
- 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
- 0x00, 0x30, 0x01, 0x12, 0x72, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x72,
- 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x2b, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x75,
+ 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65,
0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73,
0x74, 0x6f, 0x72, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
- 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72,
- 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x67, 0x0a, 0x0e, 0x43, 0x68, 0x65, 0x63, 0x6b,
- 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x12, 0x28, 0x2e, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68,
- 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
- 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72,
- 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
- 0x12, 0x73, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72,
- 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d,
- 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68,
- 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e,
- 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f,
- 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x33, 0x5a, 0x31, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e,
- 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f,
- 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
- 0x67, 0x65, 0x72, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x33,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x67, 0x0a, 0x0e, 0x43, 0x68,
+ 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x12, 0x28, 0x2e, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d,
+ 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b,
+ 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x00, 0x12, 0x73, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74,
+ 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65,
+ 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54,
+ 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x33, 0x5a, 0x31, 0x76, 0x69, 0x74, 0x65,
+ 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f,
+ 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d,
+ 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var file_tabletmanagerservice_proto_goTypes = []any{
@@ -507,124 +535,132 @@ var file_tabletmanagerservice_proto_goTypes = []any{
(*tabletmanagerdata.GetGlobalStatusVarsRequest)(nil), // 5: tabletmanagerdata.GetGlobalStatusVarsRequest
(*tabletmanagerdata.SetReadOnlyRequest)(nil), // 6: tabletmanagerdata.SetReadOnlyRequest
(*tabletmanagerdata.SetReadWriteRequest)(nil), // 7: tabletmanagerdata.SetReadWriteRequest
- (*tabletmanagerdata.ChangeTypeRequest)(nil), // 8: tabletmanagerdata.ChangeTypeRequest
- (*tabletmanagerdata.RefreshStateRequest)(nil), // 9: tabletmanagerdata.RefreshStateRequest
- (*tabletmanagerdata.RunHealthCheckRequest)(nil), // 10: tabletmanagerdata.RunHealthCheckRequest
- (*tabletmanagerdata.ReloadSchemaRequest)(nil), // 11: tabletmanagerdata.ReloadSchemaRequest
- (*tabletmanagerdata.PreflightSchemaRequest)(nil), // 12: tabletmanagerdata.PreflightSchemaRequest
- (*tabletmanagerdata.ApplySchemaRequest)(nil), // 13: tabletmanagerdata.ApplySchemaRequest
- (*tabletmanagerdata.ResetSequencesRequest)(nil), // 14: tabletmanagerdata.ResetSequencesRequest
- (*tabletmanagerdata.LockTablesRequest)(nil), // 15: tabletmanagerdata.LockTablesRequest
- (*tabletmanagerdata.UnlockTablesRequest)(nil), // 16: tabletmanagerdata.UnlockTablesRequest
- (*tabletmanagerdata.ExecuteQueryRequest)(nil), // 17: tabletmanagerdata.ExecuteQueryRequest
- (*tabletmanagerdata.ExecuteFetchAsDbaRequest)(nil), // 18: tabletmanagerdata.ExecuteFetchAsDbaRequest
- (*tabletmanagerdata.ExecuteMultiFetchAsDbaRequest)(nil), // 19: tabletmanagerdata.ExecuteMultiFetchAsDbaRequest
- (*tabletmanagerdata.ExecuteFetchAsAllPrivsRequest)(nil), // 20: tabletmanagerdata.ExecuteFetchAsAllPrivsRequest
- (*tabletmanagerdata.ExecuteFetchAsAppRequest)(nil), // 21: tabletmanagerdata.ExecuteFetchAsAppRequest
- (*tabletmanagerdata.GetUnresolvedTransactionsRequest)(nil), // 22: tabletmanagerdata.GetUnresolvedTransactionsRequest
- (*tabletmanagerdata.ReadTransactionRequest)(nil), // 23: tabletmanagerdata.ReadTransactionRequest
- (*tabletmanagerdata.ConcludeTransactionRequest)(nil), // 24: tabletmanagerdata.ConcludeTransactionRequest
- (*tabletmanagerdata.MysqlHostMetricsRequest)(nil), // 25: tabletmanagerdata.MysqlHostMetricsRequest
- (*tabletmanagerdata.ReplicationStatusRequest)(nil), // 26: tabletmanagerdata.ReplicationStatusRequest
- (*tabletmanagerdata.PrimaryStatusRequest)(nil), // 27: tabletmanagerdata.PrimaryStatusRequest
- (*tabletmanagerdata.PrimaryPositionRequest)(nil), // 28: tabletmanagerdata.PrimaryPositionRequest
- (*tabletmanagerdata.WaitForPositionRequest)(nil), // 29: tabletmanagerdata.WaitForPositionRequest
- (*tabletmanagerdata.StopReplicationRequest)(nil), // 30: tabletmanagerdata.StopReplicationRequest
- (*tabletmanagerdata.StopReplicationMinimumRequest)(nil), // 31: tabletmanagerdata.StopReplicationMinimumRequest
- (*tabletmanagerdata.StartReplicationRequest)(nil), // 32: tabletmanagerdata.StartReplicationRequest
- (*tabletmanagerdata.StartReplicationUntilAfterRequest)(nil), // 33: tabletmanagerdata.StartReplicationUntilAfterRequest
- (*tabletmanagerdata.GetReplicasRequest)(nil), // 34: tabletmanagerdata.GetReplicasRequest
- (*tabletmanagerdata.CreateVReplicationWorkflowRequest)(nil), // 35: tabletmanagerdata.CreateVReplicationWorkflowRequest
- (*tabletmanagerdata.DeleteVReplicationWorkflowRequest)(nil), // 36: tabletmanagerdata.DeleteVReplicationWorkflowRequest
- (*tabletmanagerdata.HasVReplicationWorkflowsRequest)(nil), // 37: tabletmanagerdata.HasVReplicationWorkflowsRequest
- (*tabletmanagerdata.ReadVReplicationWorkflowRequest)(nil), // 38: tabletmanagerdata.ReadVReplicationWorkflowRequest
- (*tabletmanagerdata.ReadVReplicationWorkflowsRequest)(nil), // 39: tabletmanagerdata.ReadVReplicationWorkflowsRequest
- (*tabletmanagerdata.UpdateVReplicationWorkflowRequest)(nil), // 40: tabletmanagerdata.UpdateVReplicationWorkflowRequest
- (*tabletmanagerdata.UpdateVReplicationWorkflowsRequest)(nil), // 41: tabletmanagerdata.UpdateVReplicationWorkflowsRequest
- (*tabletmanagerdata.ValidateVReplicationPermissionsRequest)(nil), // 42: tabletmanagerdata.ValidateVReplicationPermissionsRequest
- (*tabletmanagerdata.VReplicationExecRequest)(nil), // 43: tabletmanagerdata.VReplicationExecRequest
- (*tabletmanagerdata.VReplicationWaitForPosRequest)(nil), // 44: tabletmanagerdata.VReplicationWaitForPosRequest
- (*tabletmanagerdata.VDiffRequest)(nil), // 45: tabletmanagerdata.VDiffRequest
- (*tabletmanagerdata.ResetReplicationRequest)(nil), // 46: tabletmanagerdata.ResetReplicationRequest
- (*tabletmanagerdata.InitPrimaryRequest)(nil), // 47: tabletmanagerdata.InitPrimaryRequest
- (*tabletmanagerdata.PopulateReparentJournalRequest)(nil), // 48: tabletmanagerdata.PopulateReparentJournalRequest
- (*tabletmanagerdata.InitReplicaRequest)(nil), // 49: tabletmanagerdata.InitReplicaRequest
- (*tabletmanagerdata.DemotePrimaryRequest)(nil), // 50: tabletmanagerdata.DemotePrimaryRequest
- (*tabletmanagerdata.UndoDemotePrimaryRequest)(nil), // 51: tabletmanagerdata.UndoDemotePrimaryRequest
- (*tabletmanagerdata.ReplicaWasPromotedRequest)(nil), // 52: tabletmanagerdata.ReplicaWasPromotedRequest
- (*tabletmanagerdata.ResetReplicationParametersRequest)(nil), // 53: tabletmanagerdata.ResetReplicationParametersRequest
- (*tabletmanagerdata.FullStatusRequest)(nil), // 54: tabletmanagerdata.FullStatusRequest
- (*tabletmanagerdata.SetReplicationSourceRequest)(nil), // 55: tabletmanagerdata.SetReplicationSourceRequest
- (*tabletmanagerdata.ReplicaWasRestartedRequest)(nil), // 56: tabletmanagerdata.ReplicaWasRestartedRequest
- (*tabletmanagerdata.StopReplicationAndGetStatusRequest)(nil), // 57: tabletmanagerdata.StopReplicationAndGetStatusRequest
- (*tabletmanagerdata.PromoteReplicaRequest)(nil), // 58: tabletmanagerdata.PromoteReplicaRequest
- (*tabletmanagerdata.BackupRequest)(nil), // 59: tabletmanagerdata.BackupRequest
- (*tabletmanagerdata.RestoreFromBackupRequest)(nil), // 60: tabletmanagerdata.RestoreFromBackupRequest
- (*tabletmanagerdata.CheckThrottlerRequest)(nil), // 61: tabletmanagerdata.CheckThrottlerRequest
- (*tabletmanagerdata.GetThrottlerStatusRequest)(nil), // 62: tabletmanagerdata.GetThrottlerStatusRequest
- (*tabletmanagerdata.PingResponse)(nil), // 63: tabletmanagerdata.PingResponse
- (*tabletmanagerdata.SleepResponse)(nil), // 64: tabletmanagerdata.SleepResponse
- (*tabletmanagerdata.ExecuteHookResponse)(nil), // 65: tabletmanagerdata.ExecuteHookResponse
- (*tabletmanagerdata.GetSchemaResponse)(nil), // 66: tabletmanagerdata.GetSchemaResponse
- (*tabletmanagerdata.GetPermissionsResponse)(nil), // 67: tabletmanagerdata.GetPermissionsResponse
- (*tabletmanagerdata.GetGlobalStatusVarsResponse)(nil), // 68: tabletmanagerdata.GetGlobalStatusVarsResponse
- (*tabletmanagerdata.SetReadOnlyResponse)(nil), // 69: tabletmanagerdata.SetReadOnlyResponse
- (*tabletmanagerdata.SetReadWriteResponse)(nil), // 70: tabletmanagerdata.SetReadWriteResponse
- (*tabletmanagerdata.ChangeTypeResponse)(nil), // 71: tabletmanagerdata.ChangeTypeResponse
- (*tabletmanagerdata.RefreshStateResponse)(nil), // 72: tabletmanagerdata.RefreshStateResponse
- (*tabletmanagerdata.RunHealthCheckResponse)(nil), // 73: tabletmanagerdata.RunHealthCheckResponse
- (*tabletmanagerdata.ReloadSchemaResponse)(nil), // 74: tabletmanagerdata.ReloadSchemaResponse
- (*tabletmanagerdata.PreflightSchemaResponse)(nil), // 75: tabletmanagerdata.PreflightSchemaResponse
- (*tabletmanagerdata.ApplySchemaResponse)(nil), // 76: tabletmanagerdata.ApplySchemaResponse
- (*tabletmanagerdata.ResetSequencesResponse)(nil), // 77: tabletmanagerdata.ResetSequencesResponse
- (*tabletmanagerdata.LockTablesResponse)(nil), // 78: tabletmanagerdata.LockTablesResponse
- (*tabletmanagerdata.UnlockTablesResponse)(nil), // 79: tabletmanagerdata.UnlockTablesResponse
- (*tabletmanagerdata.ExecuteQueryResponse)(nil), // 80: tabletmanagerdata.ExecuteQueryResponse
- (*tabletmanagerdata.ExecuteFetchAsDbaResponse)(nil), // 81: tabletmanagerdata.ExecuteFetchAsDbaResponse
- (*tabletmanagerdata.ExecuteMultiFetchAsDbaResponse)(nil), // 82: tabletmanagerdata.ExecuteMultiFetchAsDbaResponse
- (*tabletmanagerdata.ExecuteFetchAsAllPrivsResponse)(nil), // 83: tabletmanagerdata.ExecuteFetchAsAllPrivsResponse
- (*tabletmanagerdata.ExecuteFetchAsAppResponse)(nil), // 84: tabletmanagerdata.ExecuteFetchAsAppResponse
- (*tabletmanagerdata.GetUnresolvedTransactionsResponse)(nil), // 85: tabletmanagerdata.GetUnresolvedTransactionsResponse
- (*tabletmanagerdata.ReadTransactionResponse)(nil), // 86: tabletmanagerdata.ReadTransactionResponse
- (*tabletmanagerdata.ConcludeTransactionResponse)(nil), // 87: tabletmanagerdata.ConcludeTransactionResponse
- (*tabletmanagerdata.MysqlHostMetricsResponse)(nil), // 88: tabletmanagerdata.MysqlHostMetricsResponse
- (*tabletmanagerdata.ReplicationStatusResponse)(nil), // 89: tabletmanagerdata.ReplicationStatusResponse
- (*tabletmanagerdata.PrimaryStatusResponse)(nil), // 90: tabletmanagerdata.PrimaryStatusResponse
- (*tabletmanagerdata.PrimaryPositionResponse)(nil), // 91: tabletmanagerdata.PrimaryPositionResponse
- (*tabletmanagerdata.WaitForPositionResponse)(nil), // 92: tabletmanagerdata.WaitForPositionResponse
- (*tabletmanagerdata.StopReplicationResponse)(nil), // 93: tabletmanagerdata.StopReplicationResponse
- (*tabletmanagerdata.StopReplicationMinimumResponse)(nil), // 94: tabletmanagerdata.StopReplicationMinimumResponse
- (*tabletmanagerdata.StartReplicationResponse)(nil), // 95: tabletmanagerdata.StartReplicationResponse
- (*tabletmanagerdata.StartReplicationUntilAfterResponse)(nil), // 96: tabletmanagerdata.StartReplicationUntilAfterResponse
- (*tabletmanagerdata.GetReplicasResponse)(nil), // 97: tabletmanagerdata.GetReplicasResponse
- (*tabletmanagerdata.CreateVReplicationWorkflowResponse)(nil), // 98: tabletmanagerdata.CreateVReplicationWorkflowResponse
- (*tabletmanagerdata.DeleteVReplicationWorkflowResponse)(nil), // 99: tabletmanagerdata.DeleteVReplicationWorkflowResponse
- (*tabletmanagerdata.HasVReplicationWorkflowsResponse)(nil), // 100: tabletmanagerdata.HasVReplicationWorkflowsResponse
- (*tabletmanagerdata.ReadVReplicationWorkflowResponse)(nil), // 101: tabletmanagerdata.ReadVReplicationWorkflowResponse
- (*tabletmanagerdata.ReadVReplicationWorkflowsResponse)(nil), // 102: tabletmanagerdata.ReadVReplicationWorkflowsResponse
- (*tabletmanagerdata.UpdateVReplicationWorkflowResponse)(nil), // 103: tabletmanagerdata.UpdateVReplicationWorkflowResponse
- (*tabletmanagerdata.UpdateVReplicationWorkflowsResponse)(nil), // 104: tabletmanagerdata.UpdateVReplicationWorkflowsResponse
- (*tabletmanagerdata.ValidateVReplicationPermissionsResponse)(nil), // 105: tabletmanagerdata.ValidateVReplicationPermissionsResponse
- (*tabletmanagerdata.VReplicationExecResponse)(nil), // 106: tabletmanagerdata.VReplicationExecResponse
- (*tabletmanagerdata.VReplicationWaitForPosResponse)(nil), // 107: tabletmanagerdata.VReplicationWaitForPosResponse
- (*tabletmanagerdata.VDiffResponse)(nil), // 108: tabletmanagerdata.VDiffResponse
- (*tabletmanagerdata.ResetReplicationResponse)(nil), // 109: tabletmanagerdata.ResetReplicationResponse
- (*tabletmanagerdata.InitPrimaryResponse)(nil), // 110: tabletmanagerdata.InitPrimaryResponse
- (*tabletmanagerdata.PopulateReparentJournalResponse)(nil), // 111: tabletmanagerdata.PopulateReparentJournalResponse
- (*tabletmanagerdata.InitReplicaResponse)(nil), // 112: tabletmanagerdata.InitReplicaResponse
- (*tabletmanagerdata.DemotePrimaryResponse)(nil), // 113: tabletmanagerdata.DemotePrimaryResponse
- (*tabletmanagerdata.UndoDemotePrimaryResponse)(nil), // 114: tabletmanagerdata.UndoDemotePrimaryResponse
- (*tabletmanagerdata.ReplicaWasPromotedResponse)(nil), // 115: tabletmanagerdata.ReplicaWasPromotedResponse
- (*tabletmanagerdata.ResetReplicationParametersResponse)(nil), // 116: tabletmanagerdata.ResetReplicationParametersResponse
- (*tabletmanagerdata.FullStatusResponse)(nil), // 117: tabletmanagerdata.FullStatusResponse
- (*tabletmanagerdata.SetReplicationSourceResponse)(nil), // 118: tabletmanagerdata.SetReplicationSourceResponse
- (*tabletmanagerdata.ReplicaWasRestartedResponse)(nil), // 119: tabletmanagerdata.ReplicaWasRestartedResponse
- (*tabletmanagerdata.StopReplicationAndGetStatusResponse)(nil), // 120: tabletmanagerdata.StopReplicationAndGetStatusResponse
- (*tabletmanagerdata.PromoteReplicaResponse)(nil), // 121: tabletmanagerdata.PromoteReplicaResponse
- (*tabletmanagerdata.BackupResponse)(nil), // 122: tabletmanagerdata.BackupResponse
- (*tabletmanagerdata.RestoreFromBackupResponse)(nil), // 123: tabletmanagerdata.RestoreFromBackupResponse
- (*tabletmanagerdata.CheckThrottlerResponse)(nil), // 124: tabletmanagerdata.CheckThrottlerResponse
- (*tabletmanagerdata.GetThrottlerStatusResponse)(nil), // 125: tabletmanagerdata.GetThrottlerStatusResponse
+ (*tabletmanagerdata.ChangeTagsRequest)(nil), // 8: tabletmanagerdata.ChangeTagsRequest
+ (*tabletmanagerdata.ChangeTypeRequest)(nil), // 9: tabletmanagerdata.ChangeTypeRequest
+ (*tabletmanagerdata.RefreshStateRequest)(nil), // 10: tabletmanagerdata.RefreshStateRequest
+ (*tabletmanagerdata.RunHealthCheckRequest)(nil), // 11: tabletmanagerdata.RunHealthCheckRequest
+ (*tabletmanagerdata.ReloadSchemaRequest)(nil), // 12: tabletmanagerdata.ReloadSchemaRequest
+ (*tabletmanagerdata.PreflightSchemaRequest)(nil), // 13: tabletmanagerdata.PreflightSchemaRequest
+ (*tabletmanagerdata.ApplySchemaRequest)(nil), // 14: tabletmanagerdata.ApplySchemaRequest
+ (*tabletmanagerdata.ResetSequencesRequest)(nil), // 15: tabletmanagerdata.ResetSequencesRequest
+ (*tabletmanagerdata.LockTablesRequest)(nil), // 16: tabletmanagerdata.LockTablesRequest
+ (*tabletmanagerdata.UnlockTablesRequest)(nil), // 17: tabletmanagerdata.UnlockTablesRequest
+ (*tabletmanagerdata.ExecuteQueryRequest)(nil), // 18: tabletmanagerdata.ExecuteQueryRequest
+ (*tabletmanagerdata.ExecuteFetchAsDbaRequest)(nil), // 19: tabletmanagerdata.ExecuteFetchAsDbaRequest
+ (*tabletmanagerdata.ExecuteMultiFetchAsDbaRequest)(nil), // 20: tabletmanagerdata.ExecuteMultiFetchAsDbaRequest
+ (*tabletmanagerdata.ExecuteFetchAsAllPrivsRequest)(nil), // 21: tabletmanagerdata.ExecuteFetchAsAllPrivsRequest
+ (*tabletmanagerdata.ExecuteFetchAsAppRequest)(nil), // 22: tabletmanagerdata.ExecuteFetchAsAppRequest
+ (*tabletmanagerdata.GetUnresolvedTransactionsRequest)(nil), // 23: tabletmanagerdata.GetUnresolvedTransactionsRequest
+ (*tabletmanagerdata.ReadTransactionRequest)(nil), // 24: tabletmanagerdata.ReadTransactionRequest
+ (*tabletmanagerdata.GetTransactionInfoRequest)(nil), // 25: tabletmanagerdata.GetTransactionInfoRequest
+ (*tabletmanagerdata.ConcludeTransactionRequest)(nil), // 26: tabletmanagerdata.ConcludeTransactionRequest
+ (*tabletmanagerdata.MysqlHostMetricsRequest)(nil), // 27: tabletmanagerdata.MysqlHostMetricsRequest
+ (*tabletmanagerdata.ReplicationStatusRequest)(nil), // 28: tabletmanagerdata.ReplicationStatusRequest
+ (*tabletmanagerdata.PrimaryStatusRequest)(nil), // 29: tabletmanagerdata.PrimaryStatusRequest
+ (*tabletmanagerdata.PrimaryPositionRequest)(nil), // 30: tabletmanagerdata.PrimaryPositionRequest
+ (*tabletmanagerdata.WaitForPositionRequest)(nil), // 31: tabletmanagerdata.WaitForPositionRequest
+ (*tabletmanagerdata.StopReplicationRequest)(nil), // 32: tabletmanagerdata.StopReplicationRequest
+ (*tabletmanagerdata.StopReplicationMinimumRequest)(nil), // 33: tabletmanagerdata.StopReplicationMinimumRequest
+ (*tabletmanagerdata.StartReplicationRequest)(nil), // 34: tabletmanagerdata.StartReplicationRequest
+ (*tabletmanagerdata.StartReplicationUntilAfterRequest)(nil), // 35: tabletmanagerdata.StartReplicationUntilAfterRequest
+ (*tabletmanagerdata.GetReplicasRequest)(nil), // 36: tabletmanagerdata.GetReplicasRequest
+ (*tabletmanagerdata.CreateVReplicationWorkflowRequest)(nil), // 37: tabletmanagerdata.CreateVReplicationWorkflowRequest
+ (*tabletmanagerdata.DeleteTableDataRequest)(nil), // 38: tabletmanagerdata.DeleteTableDataRequest
+ (*tabletmanagerdata.DeleteVReplicationWorkflowRequest)(nil), // 39: tabletmanagerdata.DeleteVReplicationWorkflowRequest
+ (*tabletmanagerdata.HasVReplicationWorkflowsRequest)(nil), // 40: tabletmanagerdata.HasVReplicationWorkflowsRequest
+ (*tabletmanagerdata.ReadVReplicationWorkflowRequest)(nil), // 41: tabletmanagerdata.ReadVReplicationWorkflowRequest
+ (*tabletmanagerdata.ReadVReplicationWorkflowsRequest)(nil), // 42: tabletmanagerdata.ReadVReplicationWorkflowsRequest
+ (*tabletmanagerdata.UpdateVReplicationWorkflowRequest)(nil), // 43: tabletmanagerdata.UpdateVReplicationWorkflowRequest
+ (*tabletmanagerdata.UpdateVReplicationWorkflowsRequest)(nil), // 44: tabletmanagerdata.UpdateVReplicationWorkflowsRequest
+ (*tabletmanagerdata.ValidateVReplicationPermissionsRequest)(nil), // 45: tabletmanagerdata.ValidateVReplicationPermissionsRequest
+ (*tabletmanagerdata.VReplicationExecRequest)(nil), // 46: tabletmanagerdata.VReplicationExecRequest
+ (*tabletmanagerdata.VReplicationWaitForPosRequest)(nil), // 47: tabletmanagerdata.VReplicationWaitForPosRequest
+ (*tabletmanagerdata.VDiffRequest)(nil), // 48: tabletmanagerdata.VDiffRequest
+ (*tabletmanagerdata.ResetReplicationRequest)(nil), // 49: tabletmanagerdata.ResetReplicationRequest
+ (*tabletmanagerdata.InitPrimaryRequest)(nil), // 50: tabletmanagerdata.InitPrimaryRequest
+ (*tabletmanagerdata.PopulateReparentJournalRequest)(nil), // 51: tabletmanagerdata.PopulateReparentJournalRequest
+ (*tabletmanagerdata.ReadReparentJournalInfoRequest)(nil), // 52: tabletmanagerdata.ReadReparentJournalInfoRequest
+ (*tabletmanagerdata.InitReplicaRequest)(nil), // 53: tabletmanagerdata.InitReplicaRequest
+ (*tabletmanagerdata.DemotePrimaryRequest)(nil), // 54: tabletmanagerdata.DemotePrimaryRequest
+ (*tabletmanagerdata.UndoDemotePrimaryRequest)(nil), // 55: tabletmanagerdata.UndoDemotePrimaryRequest
+ (*tabletmanagerdata.ReplicaWasPromotedRequest)(nil), // 56: tabletmanagerdata.ReplicaWasPromotedRequest
+ (*tabletmanagerdata.ResetReplicationParametersRequest)(nil), // 57: tabletmanagerdata.ResetReplicationParametersRequest
+ (*tabletmanagerdata.FullStatusRequest)(nil), // 58: tabletmanagerdata.FullStatusRequest
+ (*tabletmanagerdata.SetReplicationSourceRequest)(nil), // 59: tabletmanagerdata.SetReplicationSourceRequest
+ (*tabletmanagerdata.ReplicaWasRestartedRequest)(nil), // 60: tabletmanagerdata.ReplicaWasRestartedRequest
+ (*tabletmanagerdata.StopReplicationAndGetStatusRequest)(nil), // 61: tabletmanagerdata.StopReplicationAndGetStatusRequest
+ (*tabletmanagerdata.PromoteReplicaRequest)(nil), // 62: tabletmanagerdata.PromoteReplicaRequest
+ (*tabletmanagerdata.BackupRequest)(nil), // 63: tabletmanagerdata.BackupRequest
+ (*tabletmanagerdata.RestoreFromBackupRequest)(nil), // 64: tabletmanagerdata.RestoreFromBackupRequest
+ (*tabletmanagerdata.CheckThrottlerRequest)(nil), // 65: tabletmanagerdata.CheckThrottlerRequest
+ (*tabletmanagerdata.GetThrottlerStatusRequest)(nil), // 66: tabletmanagerdata.GetThrottlerStatusRequest
+ (*tabletmanagerdata.PingResponse)(nil), // 67: tabletmanagerdata.PingResponse
+ (*tabletmanagerdata.SleepResponse)(nil), // 68: tabletmanagerdata.SleepResponse
+ (*tabletmanagerdata.ExecuteHookResponse)(nil), // 69: tabletmanagerdata.ExecuteHookResponse
+ (*tabletmanagerdata.GetSchemaResponse)(nil), // 70: tabletmanagerdata.GetSchemaResponse
+ (*tabletmanagerdata.GetPermissionsResponse)(nil), // 71: tabletmanagerdata.GetPermissionsResponse
+ (*tabletmanagerdata.GetGlobalStatusVarsResponse)(nil), // 72: tabletmanagerdata.GetGlobalStatusVarsResponse
+ (*tabletmanagerdata.SetReadOnlyResponse)(nil), // 73: tabletmanagerdata.SetReadOnlyResponse
+ (*tabletmanagerdata.SetReadWriteResponse)(nil), // 74: tabletmanagerdata.SetReadWriteResponse
+ (*tabletmanagerdata.ChangeTagsResponse)(nil), // 75: tabletmanagerdata.ChangeTagsResponse
+ (*tabletmanagerdata.ChangeTypeResponse)(nil), // 76: tabletmanagerdata.ChangeTypeResponse
+ (*tabletmanagerdata.RefreshStateResponse)(nil), // 77: tabletmanagerdata.RefreshStateResponse
+ (*tabletmanagerdata.RunHealthCheckResponse)(nil), // 78: tabletmanagerdata.RunHealthCheckResponse
+ (*tabletmanagerdata.ReloadSchemaResponse)(nil), // 79: tabletmanagerdata.ReloadSchemaResponse
+ (*tabletmanagerdata.PreflightSchemaResponse)(nil), // 80: tabletmanagerdata.PreflightSchemaResponse
+ (*tabletmanagerdata.ApplySchemaResponse)(nil), // 81: tabletmanagerdata.ApplySchemaResponse
+ (*tabletmanagerdata.ResetSequencesResponse)(nil), // 82: tabletmanagerdata.ResetSequencesResponse
+ (*tabletmanagerdata.LockTablesResponse)(nil), // 83: tabletmanagerdata.LockTablesResponse
+ (*tabletmanagerdata.UnlockTablesResponse)(nil), // 84: tabletmanagerdata.UnlockTablesResponse
+ (*tabletmanagerdata.ExecuteQueryResponse)(nil), // 85: tabletmanagerdata.ExecuteQueryResponse
+ (*tabletmanagerdata.ExecuteFetchAsDbaResponse)(nil), // 86: tabletmanagerdata.ExecuteFetchAsDbaResponse
+ (*tabletmanagerdata.ExecuteMultiFetchAsDbaResponse)(nil), // 87: tabletmanagerdata.ExecuteMultiFetchAsDbaResponse
+ (*tabletmanagerdata.ExecuteFetchAsAllPrivsResponse)(nil), // 88: tabletmanagerdata.ExecuteFetchAsAllPrivsResponse
+ (*tabletmanagerdata.ExecuteFetchAsAppResponse)(nil), // 89: tabletmanagerdata.ExecuteFetchAsAppResponse
+ (*tabletmanagerdata.GetUnresolvedTransactionsResponse)(nil), // 90: tabletmanagerdata.GetUnresolvedTransactionsResponse
+ (*tabletmanagerdata.ReadTransactionResponse)(nil), // 91: tabletmanagerdata.ReadTransactionResponse
+ (*tabletmanagerdata.GetTransactionInfoResponse)(nil), // 92: tabletmanagerdata.GetTransactionInfoResponse
+ (*tabletmanagerdata.ConcludeTransactionResponse)(nil), // 93: tabletmanagerdata.ConcludeTransactionResponse
+ (*tabletmanagerdata.MysqlHostMetricsResponse)(nil), // 94: tabletmanagerdata.MysqlHostMetricsResponse
+ (*tabletmanagerdata.ReplicationStatusResponse)(nil), // 95: tabletmanagerdata.ReplicationStatusResponse
+ (*tabletmanagerdata.PrimaryStatusResponse)(nil), // 96: tabletmanagerdata.PrimaryStatusResponse
+ (*tabletmanagerdata.PrimaryPositionResponse)(nil), // 97: tabletmanagerdata.PrimaryPositionResponse
+ (*tabletmanagerdata.WaitForPositionResponse)(nil), // 98: tabletmanagerdata.WaitForPositionResponse
+ (*tabletmanagerdata.StopReplicationResponse)(nil), // 99: tabletmanagerdata.StopReplicationResponse
+ (*tabletmanagerdata.StopReplicationMinimumResponse)(nil), // 100: tabletmanagerdata.StopReplicationMinimumResponse
+ (*tabletmanagerdata.StartReplicationResponse)(nil), // 101: tabletmanagerdata.StartReplicationResponse
+ (*tabletmanagerdata.StartReplicationUntilAfterResponse)(nil), // 102: tabletmanagerdata.StartReplicationUntilAfterResponse
+ (*tabletmanagerdata.GetReplicasResponse)(nil), // 103: tabletmanagerdata.GetReplicasResponse
+ (*tabletmanagerdata.CreateVReplicationWorkflowResponse)(nil), // 104: tabletmanagerdata.CreateVReplicationWorkflowResponse
+ (*tabletmanagerdata.DeleteTableDataResponse)(nil), // 105: tabletmanagerdata.DeleteTableDataResponse
+ (*tabletmanagerdata.DeleteVReplicationWorkflowResponse)(nil), // 106: tabletmanagerdata.DeleteVReplicationWorkflowResponse
+ (*tabletmanagerdata.HasVReplicationWorkflowsResponse)(nil), // 107: tabletmanagerdata.HasVReplicationWorkflowsResponse
+ (*tabletmanagerdata.ReadVReplicationWorkflowResponse)(nil), // 108: tabletmanagerdata.ReadVReplicationWorkflowResponse
+ (*tabletmanagerdata.ReadVReplicationWorkflowsResponse)(nil), // 109: tabletmanagerdata.ReadVReplicationWorkflowsResponse
+ (*tabletmanagerdata.UpdateVReplicationWorkflowResponse)(nil), // 110: tabletmanagerdata.UpdateVReplicationWorkflowResponse
+ (*tabletmanagerdata.UpdateVReplicationWorkflowsResponse)(nil), // 111: tabletmanagerdata.UpdateVReplicationWorkflowsResponse
+ (*tabletmanagerdata.ValidateVReplicationPermissionsResponse)(nil), // 112: tabletmanagerdata.ValidateVReplicationPermissionsResponse
+ (*tabletmanagerdata.VReplicationExecResponse)(nil), // 113: tabletmanagerdata.VReplicationExecResponse
+ (*tabletmanagerdata.VReplicationWaitForPosResponse)(nil), // 114: tabletmanagerdata.VReplicationWaitForPosResponse
+ (*tabletmanagerdata.VDiffResponse)(nil), // 115: tabletmanagerdata.VDiffResponse
+ (*tabletmanagerdata.ResetReplicationResponse)(nil), // 116: tabletmanagerdata.ResetReplicationResponse
+ (*tabletmanagerdata.InitPrimaryResponse)(nil), // 117: tabletmanagerdata.InitPrimaryResponse
+ (*tabletmanagerdata.PopulateReparentJournalResponse)(nil), // 118: tabletmanagerdata.PopulateReparentJournalResponse
+ (*tabletmanagerdata.ReadReparentJournalInfoResponse)(nil), // 119: tabletmanagerdata.ReadReparentJournalInfoResponse
+ (*tabletmanagerdata.InitReplicaResponse)(nil), // 120: tabletmanagerdata.InitReplicaResponse
+ (*tabletmanagerdata.DemotePrimaryResponse)(nil), // 121: tabletmanagerdata.DemotePrimaryResponse
+ (*tabletmanagerdata.UndoDemotePrimaryResponse)(nil), // 122: tabletmanagerdata.UndoDemotePrimaryResponse
+ (*tabletmanagerdata.ReplicaWasPromotedResponse)(nil), // 123: tabletmanagerdata.ReplicaWasPromotedResponse
+ (*tabletmanagerdata.ResetReplicationParametersResponse)(nil), // 124: tabletmanagerdata.ResetReplicationParametersResponse
+ (*tabletmanagerdata.FullStatusResponse)(nil), // 125: tabletmanagerdata.FullStatusResponse
+ (*tabletmanagerdata.SetReplicationSourceResponse)(nil), // 126: tabletmanagerdata.SetReplicationSourceResponse
+ (*tabletmanagerdata.ReplicaWasRestartedResponse)(nil), // 127: tabletmanagerdata.ReplicaWasRestartedResponse
+ (*tabletmanagerdata.StopReplicationAndGetStatusResponse)(nil), // 128: tabletmanagerdata.StopReplicationAndGetStatusResponse
+ (*tabletmanagerdata.PromoteReplicaResponse)(nil), // 129: tabletmanagerdata.PromoteReplicaResponse
+ (*tabletmanagerdata.BackupResponse)(nil), // 130: tabletmanagerdata.BackupResponse
+ (*tabletmanagerdata.RestoreFromBackupResponse)(nil), // 131: tabletmanagerdata.RestoreFromBackupResponse
+ (*tabletmanagerdata.CheckThrottlerResponse)(nil), // 132: tabletmanagerdata.CheckThrottlerResponse
+ (*tabletmanagerdata.GetThrottlerStatusResponse)(nil), // 133: tabletmanagerdata.GetThrottlerStatusResponse
}
var file_tabletmanagerservice_proto_depIdxs = []int32{
0, // 0: tabletmanagerservice.TabletManager.Ping:input_type -> tabletmanagerdata.PingRequest
@@ -635,126 +671,134 @@ var file_tabletmanagerservice_proto_depIdxs = []int32{
5, // 5: tabletmanagerservice.TabletManager.GetGlobalStatusVars:input_type -> tabletmanagerdata.GetGlobalStatusVarsRequest
6, // 6: tabletmanagerservice.TabletManager.SetReadOnly:input_type -> tabletmanagerdata.SetReadOnlyRequest
7, // 7: tabletmanagerservice.TabletManager.SetReadWrite:input_type -> tabletmanagerdata.SetReadWriteRequest
- 8, // 8: tabletmanagerservice.TabletManager.ChangeType:input_type -> tabletmanagerdata.ChangeTypeRequest
- 9, // 9: tabletmanagerservice.TabletManager.RefreshState:input_type -> tabletmanagerdata.RefreshStateRequest
- 10, // 10: tabletmanagerservice.TabletManager.RunHealthCheck:input_type -> tabletmanagerdata.RunHealthCheckRequest
- 11, // 11: tabletmanagerservice.TabletManager.ReloadSchema:input_type -> tabletmanagerdata.ReloadSchemaRequest
- 12, // 12: tabletmanagerservice.TabletManager.PreflightSchema:input_type -> tabletmanagerdata.PreflightSchemaRequest
- 13, // 13: tabletmanagerservice.TabletManager.ApplySchema:input_type -> tabletmanagerdata.ApplySchemaRequest
- 14, // 14: tabletmanagerservice.TabletManager.ResetSequences:input_type -> tabletmanagerdata.ResetSequencesRequest
- 15, // 15: tabletmanagerservice.TabletManager.LockTables:input_type -> tabletmanagerdata.LockTablesRequest
- 16, // 16: tabletmanagerservice.TabletManager.UnlockTables:input_type -> tabletmanagerdata.UnlockTablesRequest
- 17, // 17: tabletmanagerservice.TabletManager.ExecuteQuery:input_type -> tabletmanagerdata.ExecuteQueryRequest
- 18, // 18: tabletmanagerservice.TabletManager.ExecuteFetchAsDba:input_type -> tabletmanagerdata.ExecuteFetchAsDbaRequest
- 19, // 19: tabletmanagerservice.TabletManager.ExecuteMultiFetchAsDba:input_type -> tabletmanagerdata.ExecuteMultiFetchAsDbaRequest
- 20, // 20: tabletmanagerservice.TabletManager.ExecuteFetchAsAllPrivs:input_type -> tabletmanagerdata.ExecuteFetchAsAllPrivsRequest
- 21, // 21: tabletmanagerservice.TabletManager.ExecuteFetchAsApp:input_type -> tabletmanagerdata.ExecuteFetchAsAppRequest
- 22, // 22: tabletmanagerservice.TabletManager.GetUnresolvedTransactions:input_type -> tabletmanagerdata.GetUnresolvedTransactionsRequest
- 23, // 23: tabletmanagerservice.TabletManager.ReadTransaction:input_type -> tabletmanagerdata.ReadTransactionRequest
- 24, // 24: tabletmanagerservice.TabletManager.ConcludeTransaction:input_type -> tabletmanagerdata.ConcludeTransactionRequest
- 25, // 25: tabletmanagerservice.TabletManager.MysqlHostMetrics:input_type -> tabletmanagerdata.MysqlHostMetricsRequest
- 26, // 26: tabletmanagerservice.TabletManager.ReplicationStatus:input_type -> tabletmanagerdata.ReplicationStatusRequest
- 27, // 27: tabletmanagerservice.TabletManager.PrimaryStatus:input_type -> tabletmanagerdata.PrimaryStatusRequest
- 28, // 28: tabletmanagerservice.TabletManager.PrimaryPosition:input_type -> tabletmanagerdata.PrimaryPositionRequest
- 29, // 29: tabletmanagerservice.TabletManager.WaitForPosition:input_type -> tabletmanagerdata.WaitForPositionRequest
- 30, // 30: tabletmanagerservice.TabletManager.StopReplication:input_type -> tabletmanagerdata.StopReplicationRequest
- 31, // 31: tabletmanagerservice.TabletManager.StopReplicationMinimum:input_type -> tabletmanagerdata.StopReplicationMinimumRequest
- 32, // 32: tabletmanagerservice.TabletManager.StartReplication:input_type -> tabletmanagerdata.StartReplicationRequest
- 33, // 33: tabletmanagerservice.TabletManager.StartReplicationUntilAfter:input_type -> tabletmanagerdata.StartReplicationUntilAfterRequest
- 34, // 34: tabletmanagerservice.TabletManager.GetReplicas:input_type -> tabletmanagerdata.GetReplicasRequest
- 35, // 35: tabletmanagerservice.TabletManager.CreateVReplicationWorkflow:input_type -> tabletmanagerdata.CreateVReplicationWorkflowRequest
- 36, // 36: tabletmanagerservice.TabletManager.DeleteVReplicationWorkflow:input_type -> tabletmanagerdata.DeleteVReplicationWorkflowRequest
- 37, // 37: tabletmanagerservice.TabletManager.HasVReplicationWorkflows:input_type -> tabletmanagerdata.HasVReplicationWorkflowsRequest
- 38, // 38: tabletmanagerservice.TabletManager.ReadVReplicationWorkflow:input_type -> tabletmanagerdata.ReadVReplicationWorkflowRequest
- 39, // 39: tabletmanagerservice.TabletManager.ReadVReplicationWorkflows:input_type -> tabletmanagerdata.ReadVReplicationWorkflowsRequest
- 40, // 40: tabletmanagerservice.TabletManager.UpdateVReplicationWorkflow:input_type -> tabletmanagerdata.UpdateVReplicationWorkflowRequest
- 41, // 41: tabletmanagerservice.TabletManager.UpdateVReplicationWorkflows:input_type -> tabletmanagerdata.UpdateVReplicationWorkflowsRequest
- 42, // 42: tabletmanagerservice.TabletManager.ValidateVReplicationPermissions:input_type -> tabletmanagerdata.ValidateVReplicationPermissionsRequest
- 43, // 43: tabletmanagerservice.TabletManager.VReplicationExec:input_type -> tabletmanagerdata.VReplicationExecRequest
- 44, // 44: tabletmanagerservice.TabletManager.VReplicationWaitForPos:input_type -> tabletmanagerdata.VReplicationWaitForPosRequest
- 45, // 45: tabletmanagerservice.TabletManager.VDiff:input_type -> tabletmanagerdata.VDiffRequest
- 46, // 46: tabletmanagerservice.TabletManager.ResetReplication:input_type -> tabletmanagerdata.ResetReplicationRequest
- 47, // 47: tabletmanagerservice.TabletManager.InitPrimary:input_type -> tabletmanagerdata.InitPrimaryRequest
- 48, // 48: tabletmanagerservice.TabletManager.PopulateReparentJournal:input_type -> tabletmanagerdata.PopulateReparentJournalRequest
- 49, // 49: tabletmanagerservice.TabletManager.InitReplica:input_type -> tabletmanagerdata.InitReplicaRequest
- 50, // 50: tabletmanagerservice.TabletManager.DemotePrimary:input_type -> tabletmanagerdata.DemotePrimaryRequest
- 51, // 51: tabletmanagerservice.TabletManager.UndoDemotePrimary:input_type -> tabletmanagerdata.UndoDemotePrimaryRequest
- 52, // 52: tabletmanagerservice.TabletManager.ReplicaWasPromoted:input_type -> tabletmanagerdata.ReplicaWasPromotedRequest
- 53, // 53: tabletmanagerservice.TabletManager.ResetReplicationParameters:input_type -> tabletmanagerdata.ResetReplicationParametersRequest
- 54, // 54: tabletmanagerservice.TabletManager.FullStatus:input_type -> tabletmanagerdata.FullStatusRequest
- 55, // 55: tabletmanagerservice.TabletManager.SetReplicationSource:input_type -> tabletmanagerdata.SetReplicationSourceRequest
- 56, // 56: tabletmanagerservice.TabletManager.ReplicaWasRestarted:input_type -> tabletmanagerdata.ReplicaWasRestartedRequest
- 57, // 57: tabletmanagerservice.TabletManager.StopReplicationAndGetStatus:input_type -> tabletmanagerdata.StopReplicationAndGetStatusRequest
- 58, // 58: tabletmanagerservice.TabletManager.PromoteReplica:input_type -> tabletmanagerdata.PromoteReplicaRequest
- 59, // 59: tabletmanagerservice.TabletManager.Backup:input_type -> tabletmanagerdata.BackupRequest
- 60, // 60: tabletmanagerservice.TabletManager.RestoreFromBackup:input_type -> tabletmanagerdata.RestoreFromBackupRequest
- 61, // 61: tabletmanagerservice.TabletManager.CheckThrottler:input_type -> tabletmanagerdata.CheckThrottlerRequest
- 62, // 62: tabletmanagerservice.TabletManager.GetThrottlerStatus:input_type -> tabletmanagerdata.GetThrottlerStatusRequest
- 63, // 63: tabletmanagerservice.TabletManager.Ping:output_type -> tabletmanagerdata.PingResponse
- 64, // 64: tabletmanagerservice.TabletManager.Sleep:output_type -> tabletmanagerdata.SleepResponse
- 65, // 65: tabletmanagerservice.TabletManager.ExecuteHook:output_type -> tabletmanagerdata.ExecuteHookResponse
- 66, // 66: tabletmanagerservice.TabletManager.GetSchema:output_type -> tabletmanagerdata.GetSchemaResponse
- 67, // 67: tabletmanagerservice.TabletManager.GetPermissions:output_type -> tabletmanagerdata.GetPermissionsResponse
- 68, // 68: tabletmanagerservice.TabletManager.GetGlobalStatusVars:output_type -> tabletmanagerdata.GetGlobalStatusVarsResponse
- 69, // 69: tabletmanagerservice.TabletManager.SetReadOnly:output_type -> tabletmanagerdata.SetReadOnlyResponse
- 70, // 70: tabletmanagerservice.TabletManager.SetReadWrite:output_type -> tabletmanagerdata.SetReadWriteResponse
- 71, // 71: tabletmanagerservice.TabletManager.ChangeType:output_type -> tabletmanagerdata.ChangeTypeResponse
- 72, // 72: tabletmanagerservice.TabletManager.RefreshState:output_type -> tabletmanagerdata.RefreshStateResponse
- 73, // 73: tabletmanagerservice.TabletManager.RunHealthCheck:output_type -> tabletmanagerdata.RunHealthCheckResponse
- 74, // 74: tabletmanagerservice.TabletManager.ReloadSchema:output_type -> tabletmanagerdata.ReloadSchemaResponse
- 75, // 75: tabletmanagerservice.TabletManager.PreflightSchema:output_type -> tabletmanagerdata.PreflightSchemaResponse
- 76, // 76: tabletmanagerservice.TabletManager.ApplySchema:output_type -> tabletmanagerdata.ApplySchemaResponse
- 77, // 77: tabletmanagerservice.TabletManager.ResetSequences:output_type -> tabletmanagerdata.ResetSequencesResponse
- 78, // 78: tabletmanagerservice.TabletManager.LockTables:output_type -> tabletmanagerdata.LockTablesResponse
- 79, // 79: tabletmanagerservice.TabletManager.UnlockTables:output_type -> tabletmanagerdata.UnlockTablesResponse
- 80, // 80: tabletmanagerservice.TabletManager.ExecuteQuery:output_type -> tabletmanagerdata.ExecuteQueryResponse
- 81, // 81: tabletmanagerservice.TabletManager.ExecuteFetchAsDba:output_type -> tabletmanagerdata.ExecuteFetchAsDbaResponse
- 82, // 82: tabletmanagerservice.TabletManager.ExecuteMultiFetchAsDba:output_type -> tabletmanagerdata.ExecuteMultiFetchAsDbaResponse
- 83, // 83: tabletmanagerservice.TabletManager.ExecuteFetchAsAllPrivs:output_type -> tabletmanagerdata.ExecuteFetchAsAllPrivsResponse
- 84, // 84: tabletmanagerservice.TabletManager.ExecuteFetchAsApp:output_type -> tabletmanagerdata.ExecuteFetchAsAppResponse
- 85, // 85: tabletmanagerservice.TabletManager.GetUnresolvedTransactions:output_type -> tabletmanagerdata.GetUnresolvedTransactionsResponse
- 86, // 86: tabletmanagerservice.TabletManager.ReadTransaction:output_type -> tabletmanagerdata.ReadTransactionResponse
- 87, // 87: tabletmanagerservice.TabletManager.ConcludeTransaction:output_type -> tabletmanagerdata.ConcludeTransactionResponse
- 88, // 88: tabletmanagerservice.TabletManager.MysqlHostMetrics:output_type -> tabletmanagerdata.MysqlHostMetricsResponse
- 89, // 89: tabletmanagerservice.TabletManager.ReplicationStatus:output_type -> tabletmanagerdata.ReplicationStatusResponse
- 90, // 90: tabletmanagerservice.TabletManager.PrimaryStatus:output_type -> tabletmanagerdata.PrimaryStatusResponse
- 91, // 91: tabletmanagerservice.TabletManager.PrimaryPosition:output_type -> tabletmanagerdata.PrimaryPositionResponse
- 92, // 92: tabletmanagerservice.TabletManager.WaitForPosition:output_type -> tabletmanagerdata.WaitForPositionResponse
- 93, // 93: tabletmanagerservice.TabletManager.StopReplication:output_type -> tabletmanagerdata.StopReplicationResponse
- 94, // 94: tabletmanagerservice.TabletManager.StopReplicationMinimum:output_type -> tabletmanagerdata.StopReplicationMinimumResponse
- 95, // 95: tabletmanagerservice.TabletManager.StartReplication:output_type -> tabletmanagerdata.StartReplicationResponse
- 96, // 96: tabletmanagerservice.TabletManager.StartReplicationUntilAfter:output_type -> tabletmanagerdata.StartReplicationUntilAfterResponse
- 97, // 97: tabletmanagerservice.TabletManager.GetReplicas:output_type -> tabletmanagerdata.GetReplicasResponse
- 98, // 98: tabletmanagerservice.TabletManager.CreateVReplicationWorkflow:output_type -> tabletmanagerdata.CreateVReplicationWorkflowResponse
- 99, // 99: tabletmanagerservice.TabletManager.DeleteVReplicationWorkflow:output_type -> tabletmanagerdata.DeleteVReplicationWorkflowResponse
- 100, // 100: tabletmanagerservice.TabletManager.HasVReplicationWorkflows:output_type -> tabletmanagerdata.HasVReplicationWorkflowsResponse
- 101, // 101: tabletmanagerservice.TabletManager.ReadVReplicationWorkflow:output_type -> tabletmanagerdata.ReadVReplicationWorkflowResponse
- 102, // 102: tabletmanagerservice.TabletManager.ReadVReplicationWorkflows:output_type -> tabletmanagerdata.ReadVReplicationWorkflowsResponse
- 103, // 103: tabletmanagerservice.TabletManager.UpdateVReplicationWorkflow:output_type -> tabletmanagerdata.UpdateVReplicationWorkflowResponse
- 104, // 104: tabletmanagerservice.TabletManager.UpdateVReplicationWorkflows:output_type -> tabletmanagerdata.UpdateVReplicationWorkflowsResponse
- 105, // 105: tabletmanagerservice.TabletManager.ValidateVReplicationPermissions:output_type -> tabletmanagerdata.ValidateVReplicationPermissionsResponse
- 106, // 106: tabletmanagerservice.TabletManager.VReplicationExec:output_type -> tabletmanagerdata.VReplicationExecResponse
- 107, // 107: tabletmanagerservice.TabletManager.VReplicationWaitForPos:output_type -> tabletmanagerdata.VReplicationWaitForPosResponse
- 108, // 108: tabletmanagerservice.TabletManager.VDiff:output_type -> tabletmanagerdata.VDiffResponse
- 109, // 109: tabletmanagerservice.TabletManager.ResetReplication:output_type -> tabletmanagerdata.ResetReplicationResponse
- 110, // 110: tabletmanagerservice.TabletManager.InitPrimary:output_type -> tabletmanagerdata.InitPrimaryResponse
- 111, // 111: tabletmanagerservice.TabletManager.PopulateReparentJournal:output_type -> tabletmanagerdata.PopulateReparentJournalResponse
- 112, // 112: tabletmanagerservice.TabletManager.InitReplica:output_type -> tabletmanagerdata.InitReplicaResponse
- 113, // 113: tabletmanagerservice.TabletManager.DemotePrimary:output_type -> tabletmanagerdata.DemotePrimaryResponse
- 114, // 114: tabletmanagerservice.TabletManager.UndoDemotePrimary:output_type -> tabletmanagerdata.UndoDemotePrimaryResponse
- 115, // 115: tabletmanagerservice.TabletManager.ReplicaWasPromoted:output_type -> tabletmanagerdata.ReplicaWasPromotedResponse
- 116, // 116: tabletmanagerservice.TabletManager.ResetReplicationParameters:output_type -> tabletmanagerdata.ResetReplicationParametersResponse
- 117, // 117: tabletmanagerservice.TabletManager.FullStatus:output_type -> tabletmanagerdata.FullStatusResponse
- 118, // 118: tabletmanagerservice.TabletManager.SetReplicationSource:output_type -> tabletmanagerdata.SetReplicationSourceResponse
- 119, // 119: tabletmanagerservice.TabletManager.ReplicaWasRestarted:output_type -> tabletmanagerdata.ReplicaWasRestartedResponse
- 120, // 120: tabletmanagerservice.TabletManager.StopReplicationAndGetStatus:output_type -> tabletmanagerdata.StopReplicationAndGetStatusResponse
- 121, // 121: tabletmanagerservice.TabletManager.PromoteReplica:output_type -> tabletmanagerdata.PromoteReplicaResponse
- 122, // 122: tabletmanagerservice.TabletManager.Backup:output_type -> tabletmanagerdata.BackupResponse
- 123, // 123: tabletmanagerservice.TabletManager.RestoreFromBackup:output_type -> tabletmanagerdata.RestoreFromBackupResponse
- 124, // 124: tabletmanagerservice.TabletManager.CheckThrottler:output_type -> tabletmanagerdata.CheckThrottlerResponse
- 125, // 125: tabletmanagerservice.TabletManager.GetThrottlerStatus:output_type -> tabletmanagerdata.GetThrottlerStatusResponse
- 63, // [63:126] is the sub-list for method output_type
- 0, // [0:63] is the sub-list for method input_type
+ 8, // 8: tabletmanagerservice.TabletManager.ChangeTags:input_type -> tabletmanagerdata.ChangeTagsRequest
+ 9, // 9: tabletmanagerservice.TabletManager.ChangeType:input_type -> tabletmanagerdata.ChangeTypeRequest
+ 10, // 10: tabletmanagerservice.TabletManager.RefreshState:input_type -> tabletmanagerdata.RefreshStateRequest
+ 11, // 11: tabletmanagerservice.TabletManager.RunHealthCheck:input_type -> tabletmanagerdata.RunHealthCheckRequest
+ 12, // 12: tabletmanagerservice.TabletManager.ReloadSchema:input_type -> tabletmanagerdata.ReloadSchemaRequest
+ 13, // 13: tabletmanagerservice.TabletManager.PreflightSchema:input_type -> tabletmanagerdata.PreflightSchemaRequest
+ 14, // 14: tabletmanagerservice.TabletManager.ApplySchema:input_type -> tabletmanagerdata.ApplySchemaRequest
+ 15, // 15: tabletmanagerservice.TabletManager.ResetSequences:input_type -> tabletmanagerdata.ResetSequencesRequest
+ 16, // 16: tabletmanagerservice.TabletManager.LockTables:input_type -> tabletmanagerdata.LockTablesRequest
+ 17, // 17: tabletmanagerservice.TabletManager.UnlockTables:input_type -> tabletmanagerdata.UnlockTablesRequest
+ 18, // 18: tabletmanagerservice.TabletManager.ExecuteQuery:input_type -> tabletmanagerdata.ExecuteQueryRequest
+ 19, // 19: tabletmanagerservice.TabletManager.ExecuteFetchAsDba:input_type -> tabletmanagerdata.ExecuteFetchAsDbaRequest
+ 20, // 20: tabletmanagerservice.TabletManager.ExecuteMultiFetchAsDba:input_type -> tabletmanagerdata.ExecuteMultiFetchAsDbaRequest
+ 21, // 21: tabletmanagerservice.TabletManager.ExecuteFetchAsAllPrivs:input_type -> tabletmanagerdata.ExecuteFetchAsAllPrivsRequest
+ 22, // 22: tabletmanagerservice.TabletManager.ExecuteFetchAsApp:input_type -> tabletmanagerdata.ExecuteFetchAsAppRequest
+ 23, // 23: tabletmanagerservice.TabletManager.GetUnresolvedTransactions:input_type -> tabletmanagerdata.GetUnresolvedTransactionsRequest
+ 24, // 24: tabletmanagerservice.TabletManager.ReadTransaction:input_type -> tabletmanagerdata.ReadTransactionRequest
+ 25, // 25: tabletmanagerservice.TabletManager.GetTransactionInfo:input_type -> tabletmanagerdata.GetTransactionInfoRequest
+ 26, // 26: tabletmanagerservice.TabletManager.ConcludeTransaction:input_type -> tabletmanagerdata.ConcludeTransactionRequest
+ 27, // 27: tabletmanagerservice.TabletManager.MysqlHostMetrics:input_type -> tabletmanagerdata.MysqlHostMetricsRequest
+ 28, // 28: tabletmanagerservice.TabletManager.ReplicationStatus:input_type -> tabletmanagerdata.ReplicationStatusRequest
+ 29, // 29: tabletmanagerservice.TabletManager.PrimaryStatus:input_type -> tabletmanagerdata.PrimaryStatusRequest
+ 30, // 30: tabletmanagerservice.TabletManager.PrimaryPosition:input_type -> tabletmanagerdata.PrimaryPositionRequest
+ 31, // 31: tabletmanagerservice.TabletManager.WaitForPosition:input_type -> tabletmanagerdata.WaitForPositionRequest
+ 32, // 32: tabletmanagerservice.TabletManager.StopReplication:input_type -> tabletmanagerdata.StopReplicationRequest
+ 33, // 33: tabletmanagerservice.TabletManager.StopReplicationMinimum:input_type -> tabletmanagerdata.StopReplicationMinimumRequest
+ 34, // 34: tabletmanagerservice.TabletManager.StartReplication:input_type -> tabletmanagerdata.StartReplicationRequest
+ 35, // 35: tabletmanagerservice.TabletManager.StartReplicationUntilAfter:input_type -> tabletmanagerdata.StartReplicationUntilAfterRequest
+ 36, // 36: tabletmanagerservice.TabletManager.GetReplicas:input_type -> tabletmanagerdata.GetReplicasRequest
+ 37, // 37: tabletmanagerservice.TabletManager.CreateVReplicationWorkflow:input_type -> tabletmanagerdata.CreateVReplicationWorkflowRequest
+ 38, // 38: tabletmanagerservice.TabletManager.DeleteTableData:input_type -> tabletmanagerdata.DeleteTableDataRequest
+ 39, // 39: tabletmanagerservice.TabletManager.DeleteVReplicationWorkflow:input_type -> tabletmanagerdata.DeleteVReplicationWorkflowRequest
+ 40, // 40: tabletmanagerservice.TabletManager.HasVReplicationWorkflows:input_type -> tabletmanagerdata.HasVReplicationWorkflowsRequest
+ 41, // 41: tabletmanagerservice.TabletManager.ReadVReplicationWorkflow:input_type -> tabletmanagerdata.ReadVReplicationWorkflowRequest
+ 42, // 42: tabletmanagerservice.TabletManager.ReadVReplicationWorkflows:input_type -> tabletmanagerdata.ReadVReplicationWorkflowsRequest
+ 43, // 43: tabletmanagerservice.TabletManager.UpdateVReplicationWorkflow:input_type -> tabletmanagerdata.UpdateVReplicationWorkflowRequest
+ 44, // 44: tabletmanagerservice.TabletManager.UpdateVReplicationWorkflows:input_type -> tabletmanagerdata.UpdateVReplicationWorkflowsRequest
+ 45, // 45: tabletmanagerservice.TabletManager.ValidateVReplicationPermissions:input_type -> tabletmanagerdata.ValidateVReplicationPermissionsRequest
+ 46, // 46: tabletmanagerservice.TabletManager.VReplicationExec:input_type -> tabletmanagerdata.VReplicationExecRequest
+ 47, // 47: tabletmanagerservice.TabletManager.VReplicationWaitForPos:input_type -> tabletmanagerdata.VReplicationWaitForPosRequest
+ 48, // 48: tabletmanagerservice.TabletManager.VDiff:input_type -> tabletmanagerdata.VDiffRequest
+ 49, // 49: tabletmanagerservice.TabletManager.ResetReplication:input_type -> tabletmanagerdata.ResetReplicationRequest
+ 50, // 50: tabletmanagerservice.TabletManager.InitPrimary:input_type -> tabletmanagerdata.InitPrimaryRequest
+ 51, // 51: tabletmanagerservice.TabletManager.PopulateReparentJournal:input_type -> tabletmanagerdata.PopulateReparentJournalRequest
+ 52, // 52: tabletmanagerservice.TabletManager.ReadReparentJournalInfo:input_type -> tabletmanagerdata.ReadReparentJournalInfoRequest
+ 53, // 53: tabletmanagerservice.TabletManager.InitReplica:input_type -> tabletmanagerdata.InitReplicaRequest
+ 54, // 54: tabletmanagerservice.TabletManager.DemotePrimary:input_type -> tabletmanagerdata.DemotePrimaryRequest
+ 55, // 55: tabletmanagerservice.TabletManager.UndoDemotePrimary:input_type -> tabletmanagerdata.UndoDemotePrimaryRequest
+ 56, // 56: tabletmanagerservice.TabletManager.ReplicaWasPromoted:input_type -> tabletmanagerdata.ReplicaWasPromotedRequest
+ 57, // 57: tabletmanagerservice.TabletManager.ResetReplicationParameters:input_type -> tabletmanagerdata.ResetReplicationParametersRequest
+ 58, // 58: tabletmanagerservice.TabletManager.FullStatus:input_type -> tabletmanagerdata.FullStatusRequest
+ 59, // 59: tabletmanagerservice.TabletManager.SetReplicationSource:input_type -> tabletmanagerdata.SetReplicationSourceRequest
+ 60, // 60: tabletmanagerservice.TabletManager.ReplicaWasRestarted:input_type -> tabletmanagerdata.ReplicaWasRestartedRequest
+ 61, // 61: tabletmanagerservice.TabletManager.StopReplicationAndGetStatus:input_type -> tabletmanagerdata.StopReplicationAndGetStatusRequest
+ 62, // 62: tabletmanagerservice.TabletManager.PromoteReplica:input_type -> tabletmanagerdata.PromoteReplicaRequest
+ 63, // 63: tabletmanagerservice.TabletManager.Backup:input_type -> tabletmanagerdata.BackupRequest
+ 64, // 64: tabletmanagerservice.TabletManager.RestoreFromBackup:input_type -> tabletmanagerdata.RestoreFromBackupRequest
+ 65, // 65: tabletmanagerservice.TabletManager.CheckThrottler:input_type -> tabletmanagerdata.CheckThrottlerRequest
+ 66, // 66: tabletmanagerservice.TabletManager.GetThrottlerStatus:input_type -> tabletmanagerdata.GetThrottlerStatusRequest
+ 67, // 67: tabletmanagerservice.TabletManager.Ping:output_type -> tabletmanagerdata.PingResponse
+ 68, // 68: tabletmanagerservice.TabletManager.Sleep:output_type -> tabletmanagerdata.SleepResponse
+ 69, // 69: tabletmanagerservice.TabletManager.ExecuteHook:output_type -> tabletmanagerdata.ExecuteHookResponse
+ 70, // 70: tabletmanagerservice.TabletManager.GetSchema:output_type -> tabletmanagerdata.GetSchemaResponse
+ 71, // 71: tabletmanagerservice.TabletManager.GetPermissions:output_type -> tabletmanagerdata.GetPermissionsResponse
+ 72, // 72: tabletmanagerservice.TabletManager.GetGlobalStatusVars:output_type -> tabletmanagerdata.GetGlobalStatusVarsResponse
+ 73, // 73: tabletmanagerservice.TabletManager.SetReadOnly:output_type -> tabletmanagerdata.SetReadOnlyResponse
+ 74, // 74: tabletmanagerservice.TabletManager.SetReadWrite:output_type -> tabletmanagerdata.SetReadWriteResponse
+ 75, // 75: tabletmanagerservice.TabletManager.ChangeTags:output_type -> tabletmanagerdata.ChangeTagsResponse
+ 76, // 76: tabletmanagerservice.TabletManager.ChangeType:output_type -> tabletmanagerdata.ChangeTypeResponse
+ 77, // 77: tabletmanagerservice.TabletManager.RefreshState:output_type -> tabletmanagerdata.RefreshStateResponse
+ 78, // 78: tabletmanagerservice.TabletManager.RunHealthCheck:output_type -> tabletmanagerdata.RunHealthCheckResponse
+ 79, // 79: tabletmanagerservice.TabletManager.ReloadSchema:output_type -> tabletmanagerdata.ReloadSchemaResponse
+ 80, // 80: tabletmanagerservice.TabletManager.PreflightSchema:output_type -> tabletmanagerdata.PreflightSchemaResponse
+ 81, // 81: tabletmanagerservice.TabletManager.ApplySchema:output_type -> tabletmanagerdata.ApplySchemaResponse
+ 82, // 82: tabletmanagerservice.TabletManager.ResetSequences:output_type -> tabletmanagerdata.ResetSequencesResponse
+ 83, // 83: tabletmanagerservice.TabletManager.LockTables:output_type -> tabletmanagerdata.LockTablesResponse
+ 84, // 84: tabletmanagerservice.TabletManager.UnlockTables:output_type -> tabletmanagerdata.UnlockTablesResponse
+ 85, // 85: tabletmanagerservice.TabletManager.ExecuteQuery:output_type -> tabletmanagerdata.ExecuteQueryResponse
+ 86, // 86: tabletmanagerservice.TabletManager.ExecuteFetchAsDba:output_type -> tabletmanagerdata.ExecuteFetchAsDbaResponse
+ 87, // 87: tabletmanagerservice.TabletManager.ExecuteMultiFetchAsDba:output_type -> tabletmanagerdata.ExecuteMultiFetchAsDbaResponse
+ 88, // 88: tabletmanagerservice.TabletManager.ExecuteFetchAsAllPrivs:output_type -> tabletmanagerdata.ExecuteFetchAsAllPrivsResponse
+ 89, // 89: tabletmanagerservice.TabletManager.ExecuteFetchAsApp:output_type -> tabletmanagerdata.ExecuteFetchAsAppResponse
+ 90, // 90: tabletmanagerservice.TabletManager.GetUnresolvedTransactions:output_type -> tabletmanagerdata.GetUnresolvedTransactionsResponse
+ 91, // 91: tabletmanagerservice.TabletManager.ReadTransaction:output_type -> tabletmanagerdata.ReadTransactionResponse
+ 92, // 92: tabletmanagerservice.TabletManager.GetTransactionInfo:output_type -> tabletmanagerdata.GetTransactionInfoResponse
+ 93, // 93: tabletmanagerservice.TabletManager.ConcludeTransaction:output_type -> tabletmanagerdata.ConcludeTransactionResponse
+ 94, // 94: tabletmanagerservice.TabletManager.MysqlHostMetrics:output_type -> tabletmanagerdata.MysqlHostMetricsResponse
+ 95, // 95: tabletmanagerservice.TabletManager.ReplicationStatus:output_type -> tabletmanagerdata.ReplicationStatusResponse
+ 96, // 96: tabletmanagerservice.TabletManager.PrimaryStatus:output_type -> tabletmanagerdata.PrimaryStatusResponse
+ 97, // 97: tabletmanagerservice.TabletManager.PrimaryPosition:output_type -> tabletmanagerdata.PrimaryPositionResponse
+ 98, // 98: tabletmanagerservice.TabletManager.WaitForPosition:output_type -> tabletmanagerdata.WaitForPositionResponse
+ 99, // 99: tabletmanagerservice.TabletManager.StopReplication:output_type -> tabletmanagerdata.StopReplicationResponse
+ 100, // 100: tabletmanagerservice.TabletManager.StopReplicationMinimum:output_type -> tabletmanagerdata.StopReplicationMinimumResponse
+ 101, // 101: tabletmanagerservice.TabletManager.StartReplication:output_type -> tabletmanagerdata.StartReplicationResponse
+ 102, // 102: tabletmanagerservice.TabletManager.StartReplicationUntilAfter:output_type -> tabletmanagerdata.StartReplicationUntilAfterResponse
+ 103, // 103: tabletmanagerservice.TabletManager.GetReplicas:output_type -> tabletmanagerdata.GetReplicasResponse
+ 104, // 104: tabletmanagerservice.TabletManager.CreateVReplicationWorkflow:output_type -> tabletmanagerdata.CreateVReplicationWorkflowResponse
+ 105, // 105: tabletmanagerservice.TabletManager.DeleteTableData:output_type -> tabletmanagerdata.DeleteTableDataResponse
+ 106, // 106: tabletmanagerservice.TabletManager.DeleteVReplicationWorkflow:output_type -> tabletmanagerdata.DeleteVReplicationWorkflowResponse
+ 107, // 107: tabletmanagerservice.TabletManager.HasVReplicationWorkflows:output_type -> tabletmanagerdata.HasVReplicationWorkflowsResponse
+ 108, // 108: tabletmanagerservice.TabletManager.ReadVReplicationWorkflow:output_type -> tabletmanagerdata.ReadVReplicationWorkflowResponse
+ 109, // 109: tabletmanagerservice.TabletManager.ReadVReplicationWorkflows:output_type -> tabletmanagerdata.ReadVReplicationWorkflowsResponse
+ 110, // 110: tabletmanagerservice.TabletManager.UpdateVReplicationWorkflow:output_type -> tabletmanagerdata.UpdateVReplicationWorkflowResponse
+ 111, // 111: tabletmanagerservice.TabletManager.UpdateVReplicationWorkflows:output_type -> tabletmanagerdata.UpdateVReplicationWorkflowsResponse
+ 112, // 112: tabletmanagerservice.TabletManager.ValidateVReplicationPermissions:output_type -> tabletmanagerdata.ValidateVReplicationPermissionsResponse
+ 113, // 113: tabletmanagerservice.TabletManager.VReplicationExec:output_type -> tabletmanagerdata.VReplicationExecResponse
+ 114, // 114: tabletmanagerservice.TabletManager.VReplicationWaitForPos:output_type -> tabletmanagerdata.VReplicationWaitForPosResponse
+ 115, // 115: tabletmanagerservice.TabletManager.VDiff:output_type -> tabletmanagerdata.VDiffResponse
+ 116, // 116: tabletmanagerservice.TabletManager.ResetReplication:output_type -> tabletmanagerdata.ResetReplicationResponse
+ 117, // 117: tabletmanagerservice.TabletManager.InitPrimary:output_type -> tabletmanagerdata.InitPrimaryResponse
+ 118, // 118: tabletmanagerservice.TabletManager.PopulateReparentJournal:output_type -> tabletmanagerdata.PopulateReparentJournalResponse
+ 119, // 119: tabletmanagerservice.TabletManager.ReadReparentJournalInfo:output_type -> tabletmanagerdata.ReadReparentJournalInfoResponse
+ 120, // 120: tabletmanagerservice.TabletManager.InitReplica:output_type -> tabletmanagerdata.InitReplicaResponse
+ 121, // 121: tabletmanagerservice.TabletManager.DemotePrimary:output_type -> tabletmanagerdata.DemotePrimaryResponse
+ 122, // 122: tabletmanagerservice.TabletManager.UndoDemotePrimary:output_type -> tabletmanagerdata.UndoDemotePrimaryResponse
+ 123, // 123: tabletmanagerservice.TabletManager.ReplicaWasPromoted:output_type -> tabletmanagerdata.ReplicaWasPromotedResponse
+ 124, // 124: tabletmanagerservice.TabletManager.ResetReplicationParameters:output_type -> tabletmanagerdata.ResetReplicationParametersResponse
+ 125, // 125: tabletmanagerservice.TabletManager.FullStatus:output_type -> tabletmanagerdata.FullStatusResponse
+ 126, // 126: tabletmanagerservice.TabletManager.SetReplicationSource:output_type -> tabletmanagerdata.SetReplicationSourceResponse
+ 127, // 127: tabletmanagerservice.TabletManager.ReplicaWasRestarted:output_type -> tabletmanagerdata.ReplicaWasRestartedResponse
+ 128, // 128: tabletmanagerservice.TabletManager.StopReplicationAndGetStatus:output_type -> tabletmanagerdata.StopReplicationAndGetStatusResponse
+ 129, // 129: tabletmanagerservice.TabletManager.PromoteReplica:output_type -> tabletmanagerdata.PromoteReplicaResponse
+ 130, // 130: tabletmanagerservice.TabletManager.Backup:output_type -> tabletmanagerdata.BackupResponse
+ 131, // 131: tabletmanagerservice.TabletManager.RestoreFromBackup:output_type -> tabletmanagerdata.RestoreFromBackupResponse
+ 132, // 132: tabletmanagerservice.TabletManager.CheckThrottler:output_type -> tabletmanagerdata.CheckThrottlerResponse
+ 133, // 133: tabletmanagerservice.TabletManager.GetThrottlerStatus:output_type -> tabletmanagerdata.GetThrottlerStatusResponse
+ 67, // [67:134] is the sub-list for method output_type
+ 0, // [0:67] is the sub-list for method input_type
0, // [0:0] is the sub-list for extension type_name
0, // [0:0] is the sub-list for extension extendee
0, // [0:0] is the sub-list for field type_name
diff --git a/go/vt/proto/tabletmanagerservice/tabletmanagerservice_grpc.pb.go b/go/vt/proto/tabletmanagerservice/tabletmanagerservice_grpc.pb.go
index 117678ac40a..53acff14ea5 100644
--- a/go/vt/proto/tabletmanagerservice/tabletmanagerservice_grpc.pb.go
+++ b/go/vt/proto/tabletmanagerservice/tabletmanagerservice_grpc.pb.go
@@ -38,6 +38,8 @@ type TabletManagerClient interface {
GetGlobalStatusVars(ctx context.Context, in *tabletmanagerdata.GetGlobalStatusVarsRequest, opts ...grpc.CallOption) (*tabletmanagerdata.GetGlobalStatusVarsResponse, error)
SetReadOnly(ctx context.Context, in *tabletmanagerdata.SetReadOnlyRequest, opts ...grpc.CallOption) (*tabletmanagerdata.SetReadOnlyResponse, error)
SetReadWrite(ctx context.Context, in *tabletmanagerdata.SetReadWriteRequest, opts ...grpc.CallOption) (*tabletmanagerdata.SetReadWriteResponse, error)
+ // ChangeTags asks the remote tablet to change its tags
+ ChangeTags(ctx context.Context, in *tabletmanagerdata.ChangeTagsRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ChangeTagsResponse, error)
// ChangeType asks the remote tablet to change its type
ChangeType(ctx context.Context, in *tabletmanagerdata.ChangeTypeRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ChangeTypeResponse, error)
RefreshState(ctx context.Context, in *tabletmanagerdata.RefreshStateRequest, opts ...grpc.CallOption) (*tabletmanagerdata.RefreshStateResponse, error)
@@ -55,6 +57,7 @@ type TabletManagerClient interface {
ExecuteFetchAsApp(ctx context.Context, in *tabletmanagerdata.ExecuteFetchAsAppRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ExecuteFetchAsAppResponse, error)
GetUnresolvedTransactions(ctx context.Context, in *tabletmanagerdata.GetUnresolvedTransactionsRequest, opts ...grpc.CallOption) (*tabletmanagerdata.GetUnresolvedTransactionsResponse, error)
ReadTransaction(ctx context.Context, in *tabletmanagerdata.ReadTransactionRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ReadTransactionResponse, error)
+ GetTransactionInfo(ctx context.Context, in *tabletmanagerdata.GetTransactionInfoRequest, opts ...grpc.CallOption) (*tabletmanagerdata.GetTransactionInfoResponse, error)
ConcludeTransaction(ctx context.Context, in *tabletmanagerdata.ConcludeTransactionRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ConcludeTransactionResponse, error)
MysqlHostMetrics(ctx context.Context, in *tabletmanagerdata.MysqlHostMetricsRequest, opts ...grpc.CallOption) (*tabletmanagerdata.MysqlHostMetricsResponse, error)
// ReplicationStatus returns the current replication status.
@@ -79,6 +82,7 @@ type TabletManagerClient interface {
GetReplicas(ctx context.Context, in *tabletmanagerdata.GetReplicasRequest, opts ...grpc.CallOption) (*tabletmanagerdata.GetReplicasResponse, error)
// VReplication API
CreateVReplicationWorkflow(ctx context.Context, in *tabletmanagerdata.CreateVReplicationWorkflowRequest, opts ...grpc.CallOption) (*tabletmanagerdata.CreateVReplicationWorkflowResponse, error)
+ DeleteTableData(ctx context.Context, in *tabletmanagerdata.DeleteTableDataRequest, opts ...grpc.CallOption) (*tabletmanagerdata.DeleteTableDataResponse, error)
DeleteVReplicationWorkflow(ctx context.Context, in *tabletmanagerdata.DeleteVReplicationWorkflowRequest, opts ...grpc.CallOption) (*tabletmanagerdata.DeleteVReplicationWorkflowResponse, error)
HasVReplicationWorkflows(ctx context.Context, in *tabletmanagerdata.HasVReplicationWorkflowsRequest, opts ...grpc.CallOption) (*tabletmanagerdata.HasVReplicationWorkflowsResponse, error)
ReadVReplicationWorkflow(ctx context.Context, in *tabletmanagerdata.ReadVReplicationWorkflowRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ReadVReplicationWorkflowResponse, error)
@@ -97,6 +101,8 @@ type TabletManagerClient interface {
// PopulateReparentJournal tells the tablet to add an entry to its
// reparent journal
PopulateReparentJournal(ctx context.Context, in *tabletmanagerdata.PopulateReparentJournalRequest, opts ...grpc.CallOption) (*tabletmanagerdata.PopulateReparentJournalResponse, error)
+ // ReadReparentJournalInfo reads the information from reparent journal
+ ReadReparentJournalInfo(ctx context.Context, in *tabletmanagerdata.ReadReparentJournalInfoRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ReadReparentJournalInfoResponse, error)
// InitReplica tells the tablet to reparent to the primary unconditionally
InitReplica(ctx context.Context, in *tabletmanagerdata.InitReplicaRequest, opts ...grpc.CallOption) (*tabletmanagerdata.InitReplicaResponse, error)
// DemotePrimary tells the soon-to-be-former primary it's gonna change
@@ -207,6 +213,15 @@ func (c *tabletManagerClient) SetReadWrite(ctx context.Context, in *tabletmanage
return out, nil
}
+func (c *tabletManagerClient) ChangeTags(ctx context.Context, in *tabletmanagerdata.ChangeTagsRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ChangeTagsResponse, error) {
+ out := new(tabletmanagerdata.ChangeTagsResponse)
+ err := c.cc.Invoke(ctx, "/tabletmanagerservice.TabletManager/ChangeTags", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *tabletManagerClient) ChangeType(ctx context.Context, in *tabletmanagerdata.ChangeTypeRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ChangeTypeResponse, error) {
out := new(tabletmanagerdata.ChangeTypeResponse)
err := c.cc.Invoke(ctx, "/tabletmanagerservice.TabletManager/ChangeType", in, out, opts...)
@@ -351,6 +366,15 @@ func (c *tabletManagerClient) ReadTransaction(ctx context.Context, in *tabletman
return out, nil
}
+func (c *tabletManagerClient) GetTransactionInfo(ctx context.Context, in *tabletmanagerdata.GetTransactionInfoRequest, opts ...grpc.CallOption) (*tabletmanagerdata.GetTransactionInfoResponse, error) {
+ out := new(tabletmanagerdata.GetTransactionInfoResponse)
+ err := c.cc.Invoke(ctx, "/tabletmanagerservice.TabletManager/GetTransactionInfo", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *tabletManagerClient) ConcludeTransaction(ctx context.Context, in *tabletmanagerdata.ConcludeTransactionRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ConcludeTransactionResponse, error) {
out := new(tabletmanagerdata.ConcludeTransactionResponse)
err := c.cc.Invoke(ctx, "/tabletmanagerservice.TabletManager/ConcludeTransaction", in, out, opts...)
@@ -459,6 +483,15 @@ func (c *tabletManagerClient) CreateVReplicationWorkflow(ctx context.Context, in
return out, nil
}
+func (c *tabletManagerClient) DeleteTableData(ctx context.Context, in *tabletmanagerdata.DeleteTableDataRequest, opts ...grpc.CallOption) (*tabletmanagerdata.DeleteTableDataResponse, error) {
+ out := new(tabletmanagerdata.DeleteTableDataResponse)
+ err := c.cc.Invoke(ctx, "/tabletmanagerservice.TabletManager/DeleteTableData", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *tabletManagerClient) DeleteVReplicationWorkflow(ctx context.Context, in *tabletmanagerdata.DeleteVReplicationWorkflowRequest, opts ...grpc.CallOption) (*tabletmanagerdata.DeleteVReplicationWorkflowResponse, error) {
out := new(tabletmanagerdata.DeleteVReplicationWorkflowResponse)
err := c.cc.Invoke(ctx, "/tabletmanagerservice.TabletManager/DeleteVReplicationWorkflow", in, out, opts...)
@@ -576,6 +609,15 @@ func (c *tabletManagerClient) PopulateReparentJournal(ctx context.Context, in *t
return out, nil
}
+func (c *tabletManagerClient) ReadReparentJournalInfo(ctx context.Context, in *tabletmanagerdata.ReadReparentJournalInfoRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ReadReparentJournalInfoResponse, error) {
+ out := new(tabletmanagerdata.ReadReparentJournalInfoResponse)
+ err := c.cc.Invoke(ctx, "/tabletmanagerservice.TabletManager/ReadReparentJournalInfo", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *tabletManagerClient) InitReplica(ctx context.Context, in *tabletmanagerdata.InitReplicaRequest, opts ...grpc.CallOption) (*tabletmanagerdata.InitReplicaResponse, error) {
out := new(tabletmanagerdata.InitReplicaResponse)
err := c.cc.Invoke(ctx, "/tabletmanagerservice.TabletManager/InitReplica", in, out, opts...)
@@ -767,6 +809,8 @@ type TabletManagerServer interface {
GetGlobalStatusVars(context.Context, *tabletmanagerdata.GetGlobalStatusVarsRequest) (*tabletmanagerdata.GetGlobalStatusVarsResponse, error)
SetReadOnly(context.Context, *tabletmanagerdata.SetReadOnlyRequest) (*tabletmanagerdata.SetReadOnlyResponse, error)
SetReadWrite(context.Context, *tabletmanagerdata.SetReadWriteRequest) (*tabletmanagerdata.SetReadWriteResponse, error)
+ // ChangeTags asks the remote tablet to change its tags
+ ChangeTags(context.Context, *tabletmanagerdata.ChangeTagsRequest) (*tabletmanagerdata.ChangeTagsResponse, error)
// ChangeType asks the remote tablet to change its type
ChangeType(context.Context, *tabletmanagerdata.ChangeTypeRequest) (*tabletmanagerdata.ChangeTypeResponse, error)
RefreshState(context.Context, *tabletmanagerdata.RefreshStateRequest) (*tabletmanagerdata.RefreshStateResponse, error)
@@ -784,6 +828,7 @@ type TabletManagerServer interface {
ExecuteFetchAsApp(context.Context, *tabletmanagerdata.ExecuteFetchAsAppRequest) (*tabletmanagerdata.ExecuteFetchAsAppResponse, error)
GetUnresolvedTransactions(context.Context, *tabletmanagerdata.GetUnresolvedTransactionsRequest) (*tabletmanagerdata.GetUnresolvedTransactionsResponse, error)
ReadTransaction(context.Context, *tabletmanagerdata.ReadTransactionRequest) (*tabletmanagerdata.ReadTransactionResponse, error)
+ GetTransactionInfo(context.Context, *tabletmanagerdata.GetTransactionInfoRequest) (*tabletmanagerdata.GetTransactionInfoResponse, error)
ConcludeTransaction(context.Context, *tabletmanagerdata.ConcludeTransactionRequest) (*tabletmanagerdata.ConcludeTransactionResponse, error)
MysqlHostMetrics(context.Context, *tabletmanagerdata.MysqlHostMetricsRequest) (*tabletmanagerdata.MysqlHostMetricsResponse, error)
// ReplicationStatus returns the current replication status.
@@ -808,6 +853,7 @@ type TabletManagerServer interface {
GetReplicas(context.Context, *tabletmanagerdata.GetReplicasRequest) (*tabletmanagerdata.GetReplicasResponse, error)
// VReplication API
CreateVReplicationWorkflow(context.Context, *tabletmanagerdata.CreateVReplicationWorkflowRequest) (*tabletmanagerdata.CreateVReplicationWorkflowResponse, error)
+ DeleteTableData(context.Context, *tabletmanagerdata.DeleteTableDataRequest) (*tabletmanagerdata.DeleteTableDataResponse, error)
DeleteVReplicationWorkflow(context.Context, *tabletmanagerdata.DeleteVReplicationWorkflowRequest) (*tabletmanagerdata.DeleteVReplicationWorkflowResponse, error)
HasVReplicationWorkflows(context.Context, *tabletmanagerdata.HasVReplicationWorkflowsRequest) (*tabletmanagerdata.HasVReplicationWorkflowsResponse, error)
ReadVReplicationWorkflow(context.Context, *tabletmanagerdata.ReadVReplicationWorkflowRequest) (*tabletmanagerdata.ReadVReplicationWorkflowResponse, error)
@@ -826,6 +872,8 @@ type TabletManagerServer interface {
// PopulateReparentJournal tells the tablet to add an entry to its
// reparent journal
PopulateReparentJournal(context.Context, *tabletmanagerdata.PopulateReparentJournalRequest) (*tabletmanagerdata.PopulateReparentJournalResponse, error)
+ // ReadReparentJournalInfo reads the information from reparent journal
+ ReadReparentJournalInfo(context.Context, *tabletmanagerdata.ReadReparentJournalInfoRequest) (*tabletmanagerdata.ReadReparentJournalInfoResponse, error)
// InitReplica tells the tablet to reparent to the primary unconditionally
InitReplica(context.Context, *tabletmanagerdata.InitReplicaRequest) (*tabletmanagerdata.InitReplicaResponse, error)
// DemotePrimary tells the soon-to-be-former primary it's gonna change
@@ -885,6 +933,9 @@ func (UnimplementedTabletManagerServer) SetReadOnly(context.Context, *tabletmana
func (UnimplementedTabletManagerServer) SetReadWrite(context.Context, *tabletmanagerdata.SetReadWriteRequest) (*tabletmanagerdata.SetReadWriteResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method SetReadWrite not implemented")
}
+func (UnimplementedTabletManagerServer) ChangeTags(context.Context, *tabletmanagerdata.ChangeTagsRequest) (*tabletmanagerdata.ChangeTagsResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method ChangeTags not implemented")
+}
func (UnimplementedTabletManagerServer) ChangeType(context.Context, *tabletmanagerdata.ChangeTypeRequest) (*tabletmanagerdata.ChangeTypeResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ChangeType not implemented")
}
@@ -933,6 +984,9 @@ func (UnimplementedTabletManagerServer) GetUnresolvedTransactions(context.Contex
func (UnimplementedTabletManagerServer) ReadTransaction(context.Context, *tabletmanagerdata.ReadTransactionRequest) (*tabletmanagerdata.ReadTransactionResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ReadTransaction not implemented")
}
+func (UnimplementedTabletManagerServer) GetTransactionInfo(context.Context, *tabletmanagerdata.GetTransactionInfoRequest) (*tabletmanagerdata.GetTransactionInfoResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method GetTransactionInfo not implemented")
+}
func (UnimplementedTabletManagerServer) ConcludeTransaction(context.Context, *tabletmanagerdata.ConcludeTransactionRequest) (*tabletmanagerdata.ConcludeTransactionResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ConcludeTransaction not implemented")
}
@@ -969,6 +1023,9 @@ func (UnimplementedTabletManagerServer) GetReplicas(context.Context, *tabletmana
func (UnimplementedTabletManagerServer) CreateVReplicationWorkflow(context.Context, *tabletmanagerdata.CreateVReplicationWorkflowRequest) (*tabletmanagerdata.CreateVReplicationWorkflowResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method CreateVReplicationWorkflow not implemented")
}
+func (UnimplementedTabletManagerServer) DeleteTableData(context.Context, *tabletmanagerdata.DeleteTableDataRequest) (*tabletmanagerdata.DeleteTableDataResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method DeleteTableData not implemented")
+}
func (UnimplementedTabletManagerServer) DeleteVReplicationWorkflow(context.Context, *tabletmanagerdata.DeleteVReplicationWorkflowRequest) (*tabletmanagerdata.DeleteVReplicationWorkflowResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method DeleteVReplicationWorkflow not implemented")
}
@@ -1008,6 +1065,9 @@ func (UnimplementedTabletManagerServer) InitPrimary(context.Context, *tabletmana
func (UnimplementedTabletManagerServer) PopulateReparentJournal(context.Context, *tabletmanagerdata.PopulateReparentJournalRequest) (*tabletmanagerdata.PopulateReparentJournalResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method PopulateReparentJournal not implemented")
}
+func (UnimplementedTabletManagerServer) ReadReparentJournalInfo(context.Context, *tabletmanagerdata.ReadReparentJournalInfoRequest) (*tabletmanagerdata.ReadReparentJournalInfoResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method ReadReparentJournalInfo not implemented")
+}
func (UnimplementedTabletManagerServer) InitReplica(context.Context, *tabletmanagerdata.InitReplicaRequest) (*tabletmanagerdata.InitReplicaResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method InitReplica not implemented")
}
@@ -1207,6 +1267,24 @@ func _TabletManager_SetReadWrite_Handler(srv interface{}, ctx context.Context, d
return interceptor(ctx, in, info, handler)
}
+func _TabletManager_ChangeTags_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(tabletmanagerdata.ChangeTagsRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(TabletManagerServer).ChangeTags(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/tabletmanagerservice.TabletManager/ChangeTags",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(TabletManagerServer).ChangeTags(ctx, req.(*tabletmanagerdata.ChangeTagsRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _TabletManager_ChangeType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(tabletmanagerdata.ChangeTypeRequest)
if err := dec(in); err != nil {
@@ -1495,6 +1573,24 @@ func _TabletManager_ReadTransaction_Handler(srv interface{}, ctx context.Context
return interceptor(ctx, in, info, handler)
}
+func _TabletManager_GetTransactionInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(tabletmanagerdata.GetTransactionInfoRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(TabletManagerServer).GetTransactionInfo(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/tabletmanagerservice.TabletManager/GetTransactionInfo",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(TabletManagerServer).GetTransactionInfo(ctx, req.(*tabletmanagerdata.GetTransactionInfoRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _TabletManager_ConcludeTransaction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(tabletmanagerdata.ConcludeTransactionRequest)
if err := dec(in); err != nil {
@@ -1711,6 +1807,24 @@ func _TabletManager_CreateVReplicationWorkflow_Handler(srv interface{}, ctx cont
return interceptor(ctx, in, info, handler)
}
+func _TabletManager_DeleteTableData_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(tabletmanagerdata.DeleteTableDataRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(TabletManagerServer).DeleteTableData(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/tabletmanagerservice.TabletManager/DeleteTableData",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(TabletManagerServer).DeleteTableData(ctx, req.(*tabletmanagerdata.DeleteTableDataRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _TabletManager_DeleteVReplicationWorkflow_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(tabletmanagerdata.DeleteVReplicationWorkflowRequest)
if err := dec(in); err != nil {
@@ -1945,6 +2059,24 @@ func _TabletManager_PopulateReparentJournal_Handler(srv interface{}, ctx context
return interceptor(ctx, in, info, handler)
}
+func _TabletManager_ReadReparentJournalInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(tabletmanagerdata.ReadReparentJournalInfoRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(TabletManagerServer).ReadReparentJournalInfo(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/tabletmanagerservice.TabletManager/ReadReparentJournalInfo",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(TabletManagerServer).ReadReparentJournalInfo(ctx, req.(*tabletmanagerdata.ReadReparentJournalInfoRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _TabletManager_InitReplica_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(tabletmanagerdata.InitReplicaRequest)
if err := dec(in); err != nil {
@@ -2242,6 +2374,10 @@ var TabletManager_ServiceDesc = grpc.ServiceDesc{
MethodName: "SetReadWrite",
Handler: _TabletManager_SetReadWrite_Handler,
},
+ {
+ MethodName: "ChangeTags",
+ Handler: _TabletManager_ChangeTags_Handler,
+ },
{
MethodName: "ChangeType",
Handler: _TabletManager_ChangeType_Handler,
@@ -2306,6 +2442,10 @@ var TabletManager_ServiceDesc = grpc.ServiceDesc{
MethodName: "ReadTransaction",
Handler: _TabletManager_ReadTransaction_Handler,
},
+ {
+ MethodName: "GetTransactionInfo",
+ Handler: _TabletManager_GetTransactionInfo_Handler,
+ },
{
MethodName: "ConcludeTransaction",
Handler: _TabletManager_ConcludeTransaction_Handler,
@@ -2354,6 +2494,10 @@ var TabletManager_ServiceDesc = grpc.ServiceDesc{
MethodName: "CreateVReplicationWorkflow",
Handler: _TabletManager_CreateVReplicationWorkflow_Handler,
},
+ {
+ MethodName: "DeleteTableData",
+ Handler: _TabletManager_DeleteTableData_Handler,
+ },
{
MethodName: "DeleteVReplicationWorkflow",
Handler: _TabletManager_DeleteVReplicationWorkflow_Handler,
@@ -2406,6 +2550,10 @@ var TabletManager_ServiceDesc = grpc.ServiceDesc{
MethodName: "PopulateReparentJournal",
Handler: _TabletManager_PopulateReparentJournal_Handler,
},
+ {
+ MethodName: "ReadReparentJournalInfo",
+ Handler: _TabletManager_ReadReparentJournalInfo_Handler,
+ },
{
MethodName: "InitReplica",
Handler: _TabletManager_InitReplica_Handler,
diff --git a/go/vt/proto/throttlerdata/throttlerdata.pb.go b/go/vt/proto/throttlerdata/throttlerdata.pb.go
index 4ce28c924c8..9a51319692f 100644
--- a/go/vt/proto/throttlerdata/throttlerdata.pb.go
+++ b/go/vt/proto/throttlerdata/throttlerdata.pb.go
@@ -17,7 +17,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.34.2
+// protoc-gen-go v1.35.1
// protoc v3.21.3
// source: throttlerdata.proto
@@ -46,11 +46,9 @@ type MaxRatesRequest struct {
func (x *MaxRatesRequest) Reset() {
*x = MaxRatesRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_throttlerdata_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_throttlerdata_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MaxRatesRequest) String() string {
@@ -61,7 +59,7 @@ func (*MaxRatesRequest) ProtoMessage() {}
func (x *MaxRatesRequest) ProtoReflect() protoreflect.Message {
mi := &file_throttlerdata_proto_msgTypes[0]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -89,11 +87,9 @@ type MaxRatesResponse struct {
func (x *MaxRatesResponse) Reset() {
*x = MaxRatesResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_throttlerdata_proto_msgTypes[1]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_throttlerdata_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MaxRatesResponse) String() string {
@@ -104,7 +100,7 @@ func (*MaxRatesResponse) ProtoMessage() {}
func (x *MaxRatesResponse) ProtoReflect() protoreflect.Message {
mi := &file_throttlerdata_proto_msgTypes[1]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -137,11 +133,9 @@ type SetMaxRateRequest struct {
func (x *SetMaxRateRequest) Reset() {
*x = SetMaxRateRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_throttlerdata_proto_msgTypes[2]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_throttlerdata_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SetMaxRateRequest) String() string {
@@ -152,7 +146,7 @@ func (*SetMaxRateRequest) ProtoMessage() {}
func (x *SetMaxRateRequest) ProtoReflect() protoreflect.Message {
mi := &file_throttlerdata_proto_msgTypes[2]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -186,11 +180,9 @@ type SetMaxRateResponse struct {
func (x *SetMaxRateResponse) Reset() {
*x = SetMaxRateResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_throttlerdata_proto_msgTypes[3]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_throttlerdata_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SetMaxRateResponse) String() string {
@@ -201,7 +193,7 @@ func (*SetMaxRateResponse) ProtoMessage() {}
func (x *SetMaxRateResponse) ProtoReflect() protoreflect.Message {
mi := &file_throttlerdata_proto_msgTypes[3]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -312,11 +304,9 @@ type Configuration struct {
func (x *Configuration) Reset() {
*x = Configuration{}
- if protoimpl.UnsafeEnabled {
- mi := &file_throttlerdata_proto_msgTypes[4]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_throttlerdata_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Configuration) String() string {
@@ -327,7 +317,7 @@ func (*Configuration) ProtoMessage() {}
func (x *Configuration) ProtoReflect() protoreflect.Message {
mi := &file_throttlerdata_proto_msgTypes[4]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -453,11 +443,9 @@ type GetConfigurationRequest struct {
func (x *GetConfigurationRequest) Reset() {
*x = GetConfigurationRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_throttlerdata_proto_msgTypes[5]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_throttlerdata_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetConfigurationRequest) String() string {
@@ -468,7 +456,7 @@ func (*GetConfigurationRequest) ProtoMessage() {}
func (x *GetConfigurationRequest) ProtoReflect() protoreflect.Message {
mi := &file_throttlerdata_proto_msgTypes[5]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -503,11 +491,9 @@ type GetConfigurationResponse struct {
func (x *GetConfigurationResponse) Reset() {
*x = GetConfigurationResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_throttlerdata_proto_msgTypes[6]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_throttlerdata_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetConfigurationResponse) String() string {
@@ -518,7 +504,7 @@ func (*GetConfigurationResponse) ProtoMessage() {}
func (x *GetConfigurationResponse) ProtoReflect() protoreflect.Message {
mi := &file_throttlerdata_proto_msgTypes[6]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -558,11 +544,9 @@ type UpdateConfigurationRequest struct {
func (x *UpdateConfigurationRequest) Reset() {
*x = UpdateConfigurationRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_throttlerdata_proto_msgTypes[7]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_throttlerdata_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UpdateConfigurationRequest) String() string {
@@ -573,7 +557,7 @@ func (*UpdateConfigurationRequest) ProtoMessage() {}
func (x *UpdateConfigurationRequest) ProtoReflect() protoreflect.Message {
mi := &file_throttlerdata_proto_msgTypes[7]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -621,11 +605,9 @@ type UpdateConfigurationResponse struct {
func (x *UpdateConfigurationResponse) Reset() {
*x = UpdateConfigurationResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_throttlerdata_proto_msgTypes[8]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_throttlerdata_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UpdateConfigurationResponse) String() string {
@@ -636,7 +618,7 @@ func (*UpdateConfigurationResponse) ProtoMessage() {}
func (x *UpdateConfigurationResponse) ProtoReflect() protoreflect.Message {
mi := &file_throttlerdata_proto_msgTypes[8]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -671,11 +653,9 @@ type ResetConfigurationRequest struct {
func (x *ResetConfigurationRequest) Reset() {
*x = ResetConfigurationRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_throttlerdata_proto_msgTypes[9]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_throttlerdata_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ResetConfigurationRequest) String() string {
@@ -686,7 +666,7 @@ func (*ResetConfigurationRequest) ProtoMessage() {}
func (x *ResetConfigurationRequest) ProtoReflect() protoreflect.Message {
mi := &file_throttlerdata_proto_msgTypes[9]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -720,11 +700,9 @@ type ResetConfigurationResponse struct {
func (x *ResetConfigurationResponse) Reset() {
*x = ResetConfigurationResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_throttlerdata_proto_msgTypes[10]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_throttlerdata_proto_msgTypes[10]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ResetConfigurationResponse) String() string {
@@ -735,7 +713,7 @@ func (*ResetConfigurationResponse) ProtoMessage() {}
func (x *ResetConfigurationResponse) ProtoReflect() protoreflect.Message {
mi := &file_throttlerdata_proto_msgTypes[10]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -920,140 +898,6 @@ func file_throttlerdata_proto_init() {
if File_throttlerdata_proto != nil {
return
}
- if !protoimpl.UnsafeEnabled {
- file_throttlerdata_proto_msgTypes[0].Exporter = func(v any, i int) any {
- switch v := v.(*MaxRatesRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_throttlerdata_proto_msgTypes[1].Exporter = func(v any, i int) any {
- switch v := v.(*MaxRatesResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_throttlerdata_proto_msgTypes[2].Exporter = func(v any, i int) any {
- switch v := v.(*SetMaxRateRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_throttlerdata_proto_msgTypes[3].Exporter = func(v any, i int) any {
- switch v := v.(*SetMaxRateResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_throttlerdata_proto_msgTypes[4].Exporter = func(v any, i int) any {
- switch v := v.(*Configuration); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_throttlerdata_proto_msgTypes[5].Exporter = func(v any, i int) any {
- switch v := v.(*GetConfigurationRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_throttlerdata_proto_msgTypes[6].Exporter = func(v any, i int) any {
- switch v := v.(*GetConfigurationResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_throttlerdata_proto_msgTypes[7].Exporter = func(v any, i int) any {
- switch v := v.(*UpdateConfigurationRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_throttlerdata_proto_msgTypes[8].Exporter = func(v any, i int) any {
- switch v := v.(*UpdateConfigurationResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_throttlerdata_proto_msgTypes[9].Exporter = func(v any, i int) any {
- switch v := v.(*ResetConfigurationRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_throttlerdata_proto_msgTypes[10].Exporter = func(v any, i int) any {
- switch v := v.(*ResetConfigurationResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
diff --git a/go/vt/proto/throttlerdata/throttlerdata_vtproto.pb.go b/go/vt/proto/throttlerdata/throttlerdata_vtproto.pb.go
index c7e3369b6cd..cdfb6ee66f8 100644
--- a/go/vt/proto/throttlerdata/throttlerdata_vtproto.pb.go
+++ b/go/vt/proto/throttlerdata/throttlerdata_vtproto.pb.go
@@ -1,5 +1,5 @@
// Code generated by protoc-gen-go-vtproto. DO NOT EDIT.
-// protoc-gen-go-vtproto version: v0.6.1-0.20240319094008-0393e58bdf10
+// protoc-gen-go-vtproto version: v0.6.1-0.20241011083415-71c992bc3c87
// source: throttlerdata.proto
package throttlerdata
diff --git a/go/vt/proto/throttlerservice/throttlerservice.pb.go b/go/vt/proto/throttlerservice/throttlerservice.pb.go
index 9d41991ac0f..ffa3808cf6b 100644
--- a/go/vt/proto/throttlerservice/throttlerservice.pb.go
+++ b/go/vt/proto/throttlerservice/throttlerservice.pb.go
@@ -18,7 +18,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.34.2
+// protoc-gen-go v1.35.1
// protoc v3.21.3
// source: throttlerservice.proto
diff --git a/go/vt/proto/topodata/topodata.pb.go b/go/vt/proto/topodata/topodata.pb.go
index 31fbcd5cfb4..fb0d8ec0ab8 100644
--- a/go/vt/proto/topodata/topodata.pb.go
+++ b/go/vt/proto/topodata/topodata.pb.go
@@ -20,7 +20,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.34.2
+// protoc-gen-go v1.35.1
// protoc v3.21.3
// source: topodata.proto
@@ -254,11 +254,9 @@ type KeyRange struct {
func (x *KeyRange) Reset() {
*x = KeyRange{}
- if protoimpl.UnsafeEnabled {
- mi := &file_topodata_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_topodata_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *KeyRange) String() string {
@@ -269,7 +267,7 @@ func (*KeyRange) ProtoMessage() {}
func (x *KeyRange) ProtoReflect() protoreflect.Message {
mi := &file_topodata_proto_msgTypes[0]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -313,11 +311,9 @@ type TabletAlias struct {
func (x *TabletAlias) Reset() {
*x = TabletAlias{}
- if protoimpl.UnsafeEnabled {
- mi := &file_topodata_proto_msgTypes[1]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_topodata_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *TabletAlias) String() string {
@@ -328,7 +324,7 @@ func (*TabletAlias) ProtoMessage() {}
func (x *TabletAlias) ProtoReflect() protoreflect.Message {
mi := &file_topodata_proto_msgTypes[1]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -409,11 +405,9 @@ type Tablet struct {
func (x *Tablet) Reset() {
*x = Tablet{}
- if protoimpl.UnsafeEnabled {
- mi := &file_topodata_proto_msgTypes[2]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_topodata_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Tablet) String() string {
@@ -424,7 +418,7 @@ func (*Tablet) ProtoMessage() {}
func (x *Tablet) ProtoReflect() protoreflect.Message {
mi := &file_topodata_proto_msgTypes[2]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -578,11 +572,9 @@ type Shard struct {
func (x *Shard) Reset() {
*x = Shard{}
- if protoimpl.UnsafeEnabled {
- mi := &file_topodata_proto_msgTypes[3]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_topodata_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Shard) String() string {
@@ -593,7 +585,7 @@ func (*Shard) ProtoMessage() {}
func (x *Shard) ProtoReflect() protoreflect.Message {
mi := &file_topodata_proto_msgTypes[3]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -683,11 +675,9 @@ type Keyspace struct {
func (x *Keyspace) Reset() {
*x = Keyspace{}
- if protoimpl.UnsafeEnabled {
- mi := &file_topodata_proto_msgTypes[4]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_topodata_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Keyspace) String() string {
@@ -698,7 +688,7 @@ func (*Keyspace) ProtoMessage() {}
func (x *Keyspace) ProtoReflect() protoreflect.Message {
mi := &file_topodata_proto_msgTypes[4]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -769,11 +759,9 @@ type ShardReplication struct {
func (x *ShardReplication) Reset() {
*x = ShardReplication{}
- if protoimpl.UnsafeEnabled {
- mi := &file_topodata_proto_msgTypes[5]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_topodata_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ShardReplication) String() string {
@@ -784,7 +772,7 @@ func (*ShardReplication) ProtoMessage() {}
func (x *ShardReplication) ProtoReflect() protoreflect.Message {
mi := &file_topodata_proto_msgTypes[5]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -821,11 +809,9 @@ type ShardReplicationError struct {
func (x *ShardReplicationError) Reset() {
*x = ShardReplicationError{}
- if protoimpl.UnsafeEnabled {
- mi := &file_topodata_proto_msgTypes[6]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_topodata_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ShardReplicationError) String() string {
@@ -836,7 +822,7 @@ func (*ShardReplicationError) ProtoMessage() {}
func (x *ShardReplicationError) ProtoReflect() protoreflect.Message {
mi := &file_topodata_proto_msgTypes[6]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -878,11 +864,9 @@ type ShardReference struct {
func (x *ShardReference) Reset() {
*x = ShardReference{}
- if protoimpl.UnsafeEnabled {
- mi := &file_topodata_proto_msgTypes[7]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_topodata_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ShardReference) String() string {
@@ -893,7 +877,7 @@ func (*ShardReference) ProtoMessage() {}
func (x *ShardReference) ProtoReflect() protoreflect.Message {
mi := &file_topodata_proto_msgTypes[7]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -937,11 +921,9 @@ type ShardTabletControl struct {
func (x *ShardTabletControl) Reset() {
*x = ShardTabletControl{}
- if protoimpl.UnsafeEnabled {
- mi := &file_topodata_proto_msgTypes[8]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_topodata_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ShardTabletControl) String() string {
@@ -952,7 +934,7 @@ func (*ShardTabletControl) ProtoMessage() {}
func (x *ShardTabletControl) ProtoReflect() protoreflect.Message {
mi := &file_topodata_proto_msgTypes[8]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1007,11 +989,9 @@ type ThrottledAppRule struct {
func (x *ThrottledAppRule) Reset() {
*x = ThrottledAppRule{}
- if protoimpl.UnsafeEnabled {
- mi := &file_topodata_proto_msgTypes[9]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_topodata_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ThrottledAppRule) String() string {
@@ -1022,7 +1002,7 @@ func (*ThrottledAppRule) ProtoMessage() {}
func (x *ThrottledAppRule) ProtoReflect() protoreflect.Message {
mi := &file_topodata_proto_msgTypes[9]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1093,11 +1073,9 @@ type ThrottlerConfig struct {
func (x *ThrottlerConfig) Reset() {
*x = ThrottlerConfig{}
- if protoimpl.UnsafeEnabled {
- mi := &file_topodata_proto_msgTypes[10]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_topodata_proto_msgTypes[10]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ThrottlerConfig) String() string {
@@ -1108,7 +1086,7 @@ func (*ThrottlerConfig) ProtoMessage() {}
func (x *ThrottlerConfig) ProtoReflect() protoreflect.Message {
mi := &file_topodata_proto_msgTypes[10]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1189,11 +1167,9 @@ type SrvKeyspace struct {
func (x *SrvKeyspace) Reset() {
*x = SrvKeyspace{}
- if protoimpl.UnsafeEnabled {
- mi := &file_topodata_proto_msgTypes[11]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_topodata_proto_msgTypes[11]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SrvKeyspace) String() string {
@@ -1204,7 +1180,7 @@ func (*SrvKeyspace) ProtoMessage() {}
func (x *SrvKeyspace) ProtoReflect() protoreflect.Message {
mi := &file_topodata_proto_msgTypes[11]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1253,11 +1229,9 @@ type CellInfo struct {
func (x *CellInfo) Reset() {
*x = CellInfo{}
- if protoimpl.UnsafeEnabled {
- mi := &file_topodata_proto_msgTypes[12]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_topodata_proto_msgTypes[12]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CellInfo) String() string {
@@ -1268,7 +1242,7 @@ func (*CellInfo) ProtoMessage() {}
func (x *CellInfo) ProtoReflect() protoreflect.Message {
mi := &file_topodata_proto_msgTypes[12]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1309,11 +1283,9 @@ type CellsAlias struct {
func (x *CellsAlias) Reset() {
*x = CellsAlias{}
- if protoimpl.UnsafeEnabled {
- mi := &file_topodata_proto_msgTypes[13]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_topodata_proto_msgTypes[13]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CellsAlias) String() string {
@@ -1324,7 +1296,7 @@ func (*CellsAlias) ProtoMessage() {}
func (x *CellsAlias) ProtoReflect() protoreflect.Message {
mi := &file_topodata_proto_msgTypes[13]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1358,11 +1330,9 @@ type TopoConfig struct {
func (x *TopoConfig) Reset() {
*x = TopoConfig{}
- if protoimpl.UnsafeEnabled {
- mi := &file_topodata_proto_msgTypes[14]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_topodata_proto_msgTypes[14]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *TopoConfig) String() string {
@@ -1373,7 +1343,7 @@ func (*TopoConfig) ProtoMessage() {}
func (x *TopoConfig) ProtoReflect() protoreflect.Message {
mi := &file_topodata_proto_msgTypes[14]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1419,11 +1389,9 @@ type ExternalVitessCluster struct {
func (x *ExternalVitessCluster) Reset() {
*x = ExternalVitessCluster{}
- if protoimpl.UnsafeEnabled {
- mi := &file_topodata_proto_msgTypes[15]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_topodata_proto_msgTypes[15]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExternalVitessCluster) String() string {
@@ -1434,7 +1402,7 @@ func (*ExternalVitessCluster) ProtoMessage() {}
func (x *ExternalVitessCluster) ProtoReflect() protoreflect.Message {
mi := &file_topodata_proto_msgTypes[15]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1467,11 +1435,9 @@ type ExternalClusters struct {
func (x *ExternalClusters) Reset() {
*x = ExternalClusters{}
- if protoimpl.UnsafeEnabled {
- mi := &file_topodata_proto_msgTypes[16]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_topodata_proto_msgTypes[16]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExternalClusters) String() string {
@@ -1482,7 +1448,7 @@ func (*ExternalClusters) ProtoMessage() {}
func (x *ExternalClusters) ProtoReflect() protoreflect.Message {
mi := &file_topodata_proto_msgTypes[16]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1526,11 +1492,9 @@ type Shard_SourceShard struct {
func (x *Shard_SourceShard) Reset() {
*x = Shard_SourceShard{}
- if protoimpl.UnsafeEnabled {
- mi := &file_topodata_proto_msgTypes[19]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_topodata_proto_msgTypes[19]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Shard_SourceShard) String() string {
@@ -1541,7 +1505,7 @@ func (*Shard_SourceShard) ProtoMessage() {}
func (x *Shard_SourceShard) ProtoReflect() protoreflect.Message {
mi := &file_topodata_proto_msgTypes[19]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1608,11 +1572,9 @@ type Shard_TabletControl struct {
func (x *Shard_TabletControl) Reset() {
*x = Shard_TabletControl{}
- if protoimpl.UnsafeEnabled {
- mi := &file_topodata_proto_msgTypes[20]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_topodata_proto_msgTypes[20]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Shard_TabletControl) String() string {
@@ -1623,7 +1585,7 @@ func (*Shard_TabletControl) ProtoMessage() {}
func (x *Shard_TabletControl) ProtoReflect() protoreflect.Message {
mi := &file_topodata_proto_msgTypes[20]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1677,11 +1639,9 @@ type ShardReplication_Node struct {
func (x *ShardReplication_Node) Reset() {
*x = ShardReplication_Node{}
- if protoimpl.UnsafeEnabled {
- mi := &file_topodata_proto_msgTypes[21]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_topodata_proto_msgTypes[21]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ShardReplication_Node) String() string {
@@ -1692,7 +1652,7 @@ func (*ShardReplication_Node) ProtoMessage() {}
func (x *ShardReplication_Node) ProtoReflect() protoreflect.Message {
mi := &file_topodata_proto_msgTypes[21]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1724,11 +1684,9 @@ type ThrottlerConfig_MetricNames struct {
func (x *ThrottlerConfig_MetricNames) Reset() {
*x = ThrottlerConfig_MetricNames{}
- if protoimpl.UnsafeEnabled {
- mi := &file_topodata_proto_msgTypes[23]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_topodata_proto_msgTypes[23]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ThrottlerConfig_MetricNames) String() string {
@@ -1739,7 +1697,7 @@ func (*ThrottlerConfig_MetricNames) ProtoMessage() {}
func (x *ThrottlerConfig_MetricNames) ProtoReflect() protoreflect.Message {
mi := &file_topodata_proto_msgTypes[23]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1776,11 +1734,9 @@ type SrvKeyspace_KeyspacePartition struct {
func (x *SrvKeyspace_KeyspacePartition) Reset() {
*x = SrvKeyspace_KeyspacePartition{}
- if protoimpl.UnsafeEnabled {
- mi := &file_topodata_proto_msgTypes[26]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_topodata_proto_msgTypes[26]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SrvKeyspace_KeyspacePartition) String() string {
@@ -1791,7 +1747,7 @@ func (*SrvKeyspace_KeyspacePartition) ProtoMessage() {}
func (x *SrvKeyspace_KeyspacePartition) ProtoReflect() protoreflect.Message {
mi := &file_topodata_proto_msgTypes[26]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2202,272 +2158,6 @@ func file_topodata_proto_init() {
if File_topodata_proto != nil {
return
}
- if !protoimpl.UnsafeEnabled {
- file_topodata_proto_msgTypes[0].Exporter = func(v any, i int) any {
- switch v := v.(*KeyRange); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_topodata_proto_msgTypes[1].Exporter = func(v any, i int) any {
- switch v := v.(*TabletAlias); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_topodata_proto_msgTypes[2].Exporter = func(v any, i int) any {
- switch v := v.(*Tablet); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_topodata_proto_msgTypes[3].Exporter = func(v any, i int) any {
- switch v := v.(*Shard); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_topodata_proto_msgTypes[4].Exporter = func(v any, i int) any {
- switch v := v.(*Keyspace); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_topodata_proto_msgTypes[5].Exporter = func(v any, i int) any {
- switch v := v.(*ShardReplication); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_topodata_proto_msgTypes[6].Exporter = func(v any, i int) any {
- switch v := v.(*ShardReplicationError); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_topodata_proto_msgTypes[7].Exporter = func(v any, i int) any {
- switch v := v.(*ShardReference); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_topodata_proto_msgTypes[8].Exporter = func(v any, i int) any {
- switch v := v.(*ShardTabletControl); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_topodata_proto_msgTypes[9].Exporter = func(v any, i int) any {
- switch v := v.(*ThrottledAppRule); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_topodata_proto_msgTypes[10].Exporter = func(v any, i int) any {
- switch v := v.(*ThrottlerConfig); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_topodata_proto_msgTypes[11].Exporter = func(v any, i int) any {
- switch v := v.(*SrvKeyspace); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_topodata_proto_msgTypes[12].Exporter = func(v any, i int) any {
- switch v := v.(*CellInfo); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_topodata_proto_msgTypes[13].Exporter = func(v any, i int) any {
- switch v := v.(*CellsAlias); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_topodata_proto_msgTypes[14].Exporter = func(v any, i int) any {
- switch v := v.(*TopoConfig); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_topodata_proto_msgTypes[15].Exporter = func(v any, i int) any {
- switch v := v.(*ExternalVitessCluster); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_topodata_proto_msgTypes[16].Exporter = func(v any, i int) any {
- switch v := v.(*ExternalClusters); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_topodata_proto_msgTypes[19].Exporter = func(v any, i int) any {
- switch v := v.(*Shard_SourceShard); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_topodata_proto_msgTypes[20].Exporter = func(v any, i int) any {
- switch v := v.(*Shard_TabletControl); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_topodata_proto_msgTypes[21].Exporter = func(v any, i int) any {
- switch v := v.(*ShardReplication_Node); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_topodata_proto_msgTypes[23].Exporter = func(v any, i int) any {
- switch v := v.(*ThrottlerConfig_MetricNames); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_topodata_proto_msgTypes[26].Exporter = func(v any, i int) any {
- switch v := v.(*SrvKeyspace_KeyspacePartition); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
diff --git a/go/vt/proto/topodata/topodata_vtproto.pb.go b/go/vt/proto/topodata/topodata_vtproto.pb.go
index 9defb49a6be..564a55ea82b 100644
--- a/go/vt/proto/topodata/topodata_vtproto.pb.go
+++ b/go/vt/proto/topodata/topodata_vtproto.pb.go
@@ -1,5 +1,5 @@
// Code generated by protoc-gen-go-vtproto. DO NOT EDIT.
-// protoc-gen-go-vtproto version: v0.6.1-0.20240319094008-0393e58bdf10
+// protoc-gen-go-vtproto version: v0.6.1-0.20241011083415-71c992bc3c87
// source: topodata.proto
package topodata
diff --git a/go/vt/proto/vschema/vschema.pb.go b/go/vt/proto/vschema/vschema.pb.go
index 131622aaf5b..c4348cae92d 100644
--- a/go/vt/proto/vschema/vschema.pb.go
+++ b/go/vt/proto/vschema/vschema.pb.go
@@ -17,7 +17,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.34.2
+// protoc-gen-go v1.35.1
// protoc v3.21.3
// source: vschema.proto
@@ -104,11 +104,9 @@ type RoutingRules struct {
func (x *RoutingRules) Reset() {
*x = RoutingRules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vschema_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vschema_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RoutingRules) String() string {
@@ -119,7 +117,7 @@ func (*RoutingRules) ProtoMessage() {}
func (x *RoutingRules) ProtoReflect() protoreflect.Message {
mi := &file_vschema_proto_msgTypes[0]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -153,11 +151,9 @@ type RoutingRule struct {
func (x *RoutingRule) Reset() {
*x = RoutingRule{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vschema_proto_msgTypes[1]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vschema_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RoutingRule) String() string {
@@ -168,7 +164,7 @@ func (*RoutingRule) ProtoMessage() {}
func (x *RoutingRule) ProtoReflect() protoreflect.Message {
mi := &file_vschema_proto_msgTypes[1]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -217,11 +213,9 @@ type Keyspace struct {
func (x *Keyspace) Reset() {
*x = Keyspace{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vschema_proto_msgTypes[2]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vschema_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Keyspace) String() string {
@@ -232,7 +226,7 @@ func (*Keyspace) ProtoMessage() {}
func (x *Keyspace) ProtoReflect() protoreflect.Message {
mi := &file_vschema_proto_msgTypes[2]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -302,11 +296,9 @@ type MultiTenantSpec struct {
func (x *MultiTenantSpec) Reset() {
*x = MultiTenantSpec{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vschema_proto_msgTypes[3]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vschema_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MultiTenantSpec) String() string {
@@ -317,7 +309,7 @@ func (*MultiTenantSpec) ProtoMessage() {}
func (x *MultiTenantSpec) ProtoReflect() protoreflect.Message {
mi := &file_vschema_proto_msgTypes[3]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -369,11 +361,9 @@ type Vindex struct {
func (x *Vindex) Reset() {
*x = Vindex{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vschema_proto_msgTypes[4]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vschema_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Vindex) String() string {
@@ -384,7 +374,7 @@ func (*Vindex) ProtoMessage() {}
func (x *Vindex) ProtoReflect() protoreflect.Message {
mi := &file_vschema_proto_msgTypes[4]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -457,11 +447,9 @@ type Table struct {
func (x *Table) Reset() {
*x = Table{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vschema_proto_msgTypes[5]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vschema_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Table) String() string {
@@ -472,7 +460,7 @@ func (*Table) ProtoMessage() {}
func (x *Table) ProtoReflect() protoreflect.Message {
mi := &file_vschema_proto_msgTypes[5]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -552,11 +540,9 @@ type ColumnVindex struct {
func (x *ColumnVindex) Reset() {
*x = ColumnVindex{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vschema_proto_msgTypes[6]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vschema_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ColumnVindex) String() string {
@@ -567,7 +553,7 @@ func (*ColumnVindex) ProtoMessage() {}
func (x *ColumnVindex) ProtoReflect() protoreflect.Message {
mi := &file_vschema_proto_msgTypes[6]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -616,11 +602,9 @@ type AutoIncrement struct {
func (x *AutoIncrement) Reset() {
*x = AutoIncrement{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vschema_proto_msgTypes[7]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vschema_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *AutoIncrement) String() string {
@@ -631,7 +615,7 @@ func (*AutoIncrement) ProtoMessage() {}
func (x *AutoIncrement) ProtoReflect() protoreflect.Message {
mi := &file_vschema_proto_msgTypes[7]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -680,11 +664,9 @@ type Column struct {
func (x *Column) Reset() {
*x = Column{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vschema_proto_msgTypes[8]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vschema_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Column) String() string {
@@ -695,7 +677,7 @@ func (*Column) ProtoMessage() {}
func (x *Column) ProtoReflect() protoreflect.Message {
mi := &file_vschema_proto_msgTypes[8]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -789,11 +771,9 @@ type SrvVSchema struct {
func (x *SrvVSchema) Reset() {
*x = SrvVSchema{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vschema_proto_msgTypes[9]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vschema_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SrvVSchema) String() string {
@@ -804,7 +784,7 @@ func (*SrvVSchema) ProtoMessage() {}
func (x *SrvVSchema) ProtoReflect() protoreflect.Message {
mi := &file_vschema_proto_msgTypes[9]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -865,11 +845,9 @@ type ShardRoutingRules struct {
func (x *ShardRoutingRules) Reset() {
*x = ShardRoutingRules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vschema_proto_msgTypes[10]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vschema_proto_msgTypes[10]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ShardRoutingRules) String() string {
@@ -880,7 +858,7 @@ func (*ShardRoutingRules) ProtoMessage() {}
func (x *ShardRoutingRules) ProtoReflect() protoreflect.Message {
mi := &file_vschema_proto_msgTypes[10]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -915,11 +893,9 @@ type ShardRoutingRule struct {
func (x *ShardRoutingRule) Reset() {
*x = ShardRoutingRule{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vschema_proto_msgTypes[11]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vschema_proto_msgTypes[11]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ShardRoutingRule) String() string {
@@ -930,7 +906,7 @@ func (*ShardRoutingRule) ProtoMessage() {}
func (x *ShardRoutingRule) ProtoReflect() protoreflect.Message {
mi := &file_vschema_proto_msgTypes[11]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -976,11 +952,9 @@ type KeyspaceRoutingRules struct {
func (x *KeyspaceRoutingRules) Reset() {
*x = KeyspaceRoutingRules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vschema_proto_msgTypes[12]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vschema_proto_msgTypes[12]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *KeyspaceRoutingRules) String() string {
@@ -991,7 +965,7 @@ func (*KeyspaceRoutingRules) ProtoMessage() {}
func (x *KeyspaceRoutingRules) ProtoReflect() protoreflect.Message {
mi := &file_vschema_proto_msgTypes[12]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1024,11 +998,9 @@ type KeyspaceRoutingRule struct {
func (x *KeyspaceRoutingRule) Reset() {
*x = KeyspaceRoutingRule{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vschema_proto_msgTypes[13]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vschema_proto_msgTypes[13]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *KeyspaceRoutingRule) String() string {
@@ -1039,7 +1011,7 @@ func (*KeyspaceRoutingRule) ProtoMessage() {}
func (x *KeyspaceRoutingRule) ProtoReflect() protoreflect.Message {
mi := &file_vschema_proto_msgTypes[13]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1082,11 +1054,9 @@ type MirrorRules struct {
func (x *MirrorRules) Reset() {
*x = MirrorRules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vschema_proto_msgTypes[14]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vschema_proto_msgTypes[14]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MirrorRules) String() string {
@@ -1097,7 +1067,7 @@ func (*MirrorRules) ProtoMessage() {}
func (x *MirrorRules) ProtoReflect() protoreflect.Message {
mi := &file_vschema_proto_msgTypes[14]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1132,11 +1102,9 @@ type MirrorRule struct {
func (x *MirrorRule) Reset() {
*x = MirrorRule{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vschema_proto_msgTypes[15]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vschema_proto_msgTypes[15]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MirrorRule) String() string {
@@ -1147,7 +1115,7 @@ func (*MirrorRule) ProtoMessage() {}
func (x *MirrorRule) ProtoReflect() protoreflect.Message {
mi := &file_vschema_proto_msgTypes[15]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1436,200 +1404,6 @@ func file_vschema_proto_init() {
if File_vschema_proto != nil {
return
}
- if !protoimpl.UnsafeEnabled {
- file_vschema_proto_msgTypes[0].Exporter = func(v any, i int) any {
- switch v := v.(*RoutingRules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vschema_proto_msgTypes[1].Exporter = func(v any, i int) any {
- switch v := v.(*RoutingRule); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vschema_proto_msgTypes[2].Exporter = func(v any, i int) any {
- switch v := v.(*Keyspace); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vschema_proto_msgTypes[3].Exporter = func(v any, i int) any {
- switch v := v.(*MultiTenantSpec); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vschema_proto_msgTypes[4].Exporter = func(v any, i int) any {
- switch v := v.(*Vindex); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vschema_proto_msgTypes[5].Exporter = func(v any, i int) any {
- switch v := v.(*Table); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vschema_proto_msgTypes[6].Exporter = func(v any, i int) any {
- switch v := v.(*ColumnVindex); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vschema_proto_msgTypes[7].Exporter = func(v any, i int) any {
- switch v := v.(*AutoIncrement); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vschema_proto_msgTypes[8].Exporter = func(v any, i int) any {
- switch v := v.(*Column); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vschema_proto_msgTypes[9].Exporter = func(v any, i int) any {
- switch v := v.(*SrvVSchema); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vschema_proto_msgTypes[10].Exporter = func(v any, i int) any {
- switch v := v.(*ShardRoutingRules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vschema_proto_msgTypes[11].Exporter = func(v any, i int) any {
- switch v := v.(*ShardRoutingRule); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vschema_proto_msgTypes[12].Exporter = func(v any, i int) any {
- switch v := v.(*KeyspaceRoutingRules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vschema_proto_msgTypes[13].Exporter = func(v any, i int) any {
- switch v := v.(*KeyspaceRoutingRule); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vschema_proto_msgTypes[14].Exporter = func(v any, i int) any {
- switch v := v.(*MirrorRules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vschema_proto_msgTypes[15].Exporter = func(v any, i int) any {
- switch v := v.(*MirrorRule); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
file_vschema_proto_msgTypes[8].OneofWrappers = []any{}
type x struct{}
out := protoimpl.TypeBuilder{
diff --git a/go/vt/proto/vschema/vschema_vtproto.pb.go b/go/vt/proto/vschema/vschema_vtproto.pb.go
index 54347631260..a970ccf49c6 100644
--- a/go/vt/proto/vschema/vschema_vtproto.pb.go
+++ b/go/vt/proto/vschema/vschema_vtproto.pb.go
@@ -1,5 +1,5 @@
// Code generated by protoc-gen-go-vtproto. DO NOT EDIT.
-// protoc-gen-go-vtproto version: v0.6.1-0.20240319094008-0393e58bdf10
+// protoc-gen-go-vtproto version: v0.6.1-0.20241011083415-71c992bc3c87
// source: vschema.proto
package vschema
diff --git a/go/vt/proto/vtadmin/vtadmin.pb.go b/go/vt/proto/vtadmin/vtadmin.pb.go
index 85c7efee1b4..8b6a6997c8d 100644
--- a/go/vt/proto/vtadmin/vtadmin.pb.go
+++ b/go/vt/proto/vtadmin/vtadmin.pb.go
@@ -17,7 +17,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.34.2
+// protoc-gen-go v1.35.1
// protoc v3.21.3
// source: vtadmin.proto
@@ -104,11 +104,9 @@ type Cluster struct {
func (x *Cluster) Reset() {
*x = Cluster{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Cluster) String() string {
@@ -119,7 +117,7 @@ func (*Cluster) ProtoMessage() {}
func (x *Cluster) ProtoReflect() protoreflect.Message {
mi := &file_vtadmin_proto_msgTypes[0]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -159,11 +157,9 @@ type ClusterBackup struct {
func (x *ClusterBackup) Reset() {
*x = ClusterBackup{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[1]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ClusterBackup) String() string {
@@ -174,7 +170,7 @@ func (*ClusterBackup) ProtoMessage() {}
func (x *ClusterBackup) ProtoReflect() protoreflect.Message {
mi := &file_vtadmin_proto_msgTypes[1]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -214,11 +210,9 @@ type ClusterCellsAliases struct {
func (x *ClusterCellsAliases) Reset() {
*x = ClusterCellsAliases{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[2]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ClusterCellsAliases) String() string {
@@ -229,7 +223,7 @@ func (*ClusterCellsAliases) ProtoMessage() {}
func (x *ClusterCellsAliases) ProtoReflect() protoreflect.Message {
mi := &file_vtadmin_proto_msgTypes[2]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -273,11 +267,9 @@ type ClusterCellInfo struct {
func (x *ClusterCellInfo) Reset() {
*x = ClusterCellInfo{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[3]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ClusterCellInfo) String() string {
@@ -288,7 +280,7 @@ func (*ClusterCellInfo) ProtoMessage() {}
func (x *ClusterCellInfo) ProtoReflect() protoreflect.Message {
mi := &file_vtadmin_proto_msgTypes[3]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -337,11 +329,9 @@ type ClusterShardReplicationPosition struct {
func (x *ClusterShardReplicationPosition) Reset() {
*x = ClusterShardReplicationPosition{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[4]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ClusterShardReplicationPosition) String() string {
@@ -352,7 +342,7 @@ func (*ClusterShardReplicationPosition) ProtoMessage() {}
func (x *ClusterShardReplicationPosition) ProtoReflect() protoreflect.Message {
mi := &file_vtadmin_proto_msgTypes[4]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -408,11 +398,9 @@ type ClusterWorkflows struct {
func (x *ClusterWorkflows) Reset() {
*x = ClusterWorkflows{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[5]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ClusterWorkflows) String() string {
@@ -423,7 +411,7 @@ func (*ClusterWorkflows) ProtoMessage() {}
func (x *ClusterWorkflows) ProtoReflect() protoreflect.Message {
mi := &file_vtadmin_proto_msgTypes[5]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -466,11 +454,9 @@ type Keyspace struct {
func (x *Keyspace) Reset() {
*x = Keyspace{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[6]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Keyspace) String() string {
@@ -481,7 +467,7 @@ func (*Keyspace) ProtoMessage() {}
func (x *Keyspace) ProtoReflect() protoreflect.Message {
mi := &file_vtadmin_proto_msgTypes[6]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -531,11 +517,9 @@ type Schema struct {
func (x *Schema) Reset() {
*x = Schema{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[7]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Schema) String() string {
@@ -546,7 +530,7 @@ func (*Schema) ProtoMessage() {}
func (x *Schema) ProtoReflect() protoreflect.Message {
mi := &file_vtadmin_proto_msgTypes[7]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -600,11 +584,9 @@ type SchemaMigration struct {
func (x *SchemaMigration) Reset() {
*x = SchemaMigration{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[8]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SchemaMigration) String() string {
@@ -615,7 +597,7 @@ func (*SchemaMigration) ProtoMessage() {}
func (x *SchemaMigration) ProtoReflect() protoreflect.Message {
mi := &file_vtadmin_proto_msgTypes[8]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -657,11 +639,9 @@ type Shard struct {
func (x *Shard) Reset() {
*x = Shard{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[9]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Shard) String() string {
@@ -672,7 +652,7 @@ func (*Shard) ProtoMessage() {}
func (x *Shard) ProtoReflect() protoreflect.Message {
mi := &file_vtadmin_proto_msgTypes[9]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -713,11 +693,9 @@ type SrvVSchema struct {
func (x *SrvVSchema) Reset() {
*x = SrvVSchema{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[10]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[10]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SrvVSchema) String() string {
@@ -728,7 +706,7 @@ func (*SrvVSchema) ProtoMessage() {}
func (x *SrvVSchema) ProtoReflect() protoreflect.Message {
mi := &file_vtadmin_proto_msgTypes[10]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -779,11 +757,9 @@ type Tablet struct {
func (x *Tablet) Reset() {
*x = Tablet{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[11]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[11]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Tablet) String() string {
@@ -794,7 +770,7 @@ func (*Tablet) ProtoMessage() {}
func (x *Tablet) ProtoReflect() protoreflect.Message {
mi := &file_vtadmin_proto_msgTypes[11]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -851,11 +827,9 @@ type VSchema struct {
func (x *VSchema) Reset() {
*x = VSchema{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[12]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[12]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VSchema) String() string {
@@ -866,7 +840,7 @@ func (*VSchema) ProtoMessage() {}
func (x *VSchema) ProtoReflect() protoreflect.Message {
mi := &file_vtadmin_proto_msgTypes[12]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -915,11 +889,9 @@ type Vtctld struct {
func (x *Vtctld) Reset() {
*x = Vtctld{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[13]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[13]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Vtctld) String() string {
@@ -930,7 +902,7 @@ func (*Vtctld) ProtoMessage() {}
func (x *Vtctld) ProtoReflect() protoreflect.Message {
mi := &file_vtadmin_proto_msgTypes[13]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -989,11 +961,9 @@ type VTGate struct {
func (x *VTGate) Reset() {
*x = VTGate{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[14]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[14]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VTGate) String() string {
@@ -1004,7 +974,7 @@ func (*VTGate) ProtoMessage() {}
func (x *VTGate) ProtoReflect() protoreflect.Message {
mi := &file_vtadmin_proto_msgTypes[14]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1073,11 +1043,9 @@ type Workflow struct {
func (x *Workflow) Reset() {
*x = Workflow{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[15]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[15]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Workflow) String() string {
@@ -1088,7 +1056,7 @@ func (*Workflow) ProtoMessage() {}
func (x *Workflow) ProtoReflect() protoreflect.Message {
mi := &file_vtadmin_proto_msgTypes[15]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1124,22 +1092,130 @@ func (x *Workflow) GetWorkflow() *vtctldata.Workflow {
return nil
}
+type WorkflowDeleteRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ ClusterId string `protobuf:"bytes,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
+ Request *vtctldata.WorkflowDeleteRequest `protobuf:"bytes,2,opt,name=request,proto3" json:"request,omitempty"`
+}
+
+func (x *WorkflowDeleteRequest) Reset() {
+ *x = WorkflowDeleteRequest{}
+ mi := &file_vtadmin_proto_msgTypes[16]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *WorkflowDeleteRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WorkflowDeleteRequest) ProtoMessage() {}
+
+func (x *WorkflowDeleteRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_vtadmin_proto_msgTypes[16]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use WorkflowDeleteRequest.ProtoReflect.Descriptor instead.
+func (*WorkflowDeleteRequest) Descriptor() ([]byte, []int) {
+ return file_vtadmin_proto_rawDescGZIP(), []int{16}
+}
+
+func (x *WorkflowDeleteRequest) GetClusterId() string {
+ if x != nil {
+ return x.ClusterId
+ }
+ return ""
+}
+
+func (x *WorkflowDeleteRequest) GetRequest() *vtctldata.WorkflowDeleteRequest {
+ if x != nil {
+ return x.Request
+ }
+ return nil
+}
+
+type WorkflowSwitchTrafficRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ ClusterId string `protobuf:"bytes,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
+ Request *vtctldata.WorkflowSwitchTrafficRequest `protobuf:"bytes,2,opt,name=request,proto3" json:"request,omitempty"`
+}
+
+func (x *WorkflowSwitchTrafficRequest) Reset() {
+ *x = WorkflowSwitchTrafficRequest{}
+ mi := &file_vtadmin_proto_msgTypes[17]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *WorkflowSwitchTrafficRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WorkflowSwitchTrafficRequest) ProtoMessage() {}
+
+func (x *WorkflowSwitchTrafficRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_vtadmin_proto_msgTypes[17]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use WorkflowSwitchTrafficRequest.ProtoReflect.Descriptor instead.
+func (*WorkflowSwitchTrafficRequest) Descriptor() ([]byte, []int) {
+ return file_vtadmin_proto_rawDescGZIP(), []int{17}
+}
+
+func (x *WorkflowSwitchTrafficRequest) GetClusterId() string {
+ if x != nil {
+ return x.ClusterId
+ }
+ return ""
+}
+
+func (x *WorkflowSwitchTrafficRequest) GetRequest() *vtctldata.WorkflowSwitchTrafficRequest {
+ if x != nil {
+ return x.Request
+ }
+ return nil
+}
+
type ApplySchemaRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- ClusterId string `protobuf:"bytes,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
- Request *vtctldata.ApplySchemaRequest `protobuf:"bytes,2,opt,name=request,proto3" json:"request,omitempty"`
+ ClusterId string `protobuf:"bytes,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
+ // Request.Sql will be overriden by this Sql field.
+ Sql string `protobuf:"bytes,2,opt,name=sql,proto3" json:"sql,omitempty"`
+ // Request.CallerId will be overriden by this CallerId field.
+ CallerId string `protobuf:"bytes,3,opt,name=caller_id,json=callerId,proto3" json:"caller_id,omitempty"`
+ Request *vtctldata.ApplySchemaRequest `protobuf:"bytes,4,opt,name=request,proto3" json:"request,omitempty"`
}
func (x *ApplySchemaRequest) Reset() {
*x = ApplySchemaRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[16]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[18]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ApplySchemaRequest) String() string {
@@ -1149,8 +1225,8 @@ func (x *ApplySchemaRequest) String() string {
func (*ApplySchemaRequest) ProtoMessage() {}
func (x *ApplySchemaRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[16]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[18]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1162,7 +1238,7 @@ func (x *ApplySchemaRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ApplySchemaRequest.ProtoReflect.Descriptor instead.
func (*ApplySchemaRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{16}
+ return file_vtadmin_proto_rawDescGZIP(), []int{18}
}
func (x *ApplySchemaRequest) GetClusterId() string {
@@ -1172,6 +1248,20 @@ func (x *ApplySchemaRequest) GetClusterId() string {
return ""
}
+func (x *ApplySchemaRequest) GetSql() string {
+ if x != nil {
+ return x.Sql
+ }
+ return ""
+}
+
+func (x *ApplySchemaRequest) GetCallerId() string {
+ if x != nil {
+ return x.CallerId
+ }
+ return ""
+}
+
func (x *ApplySchemaRequest) GetRequest() *vtctldata.ApplySchemaRequest {
if x != nil {
return x.Request
@@ -1190,11 +1280,9 @@ type CancelSchemaMigrationRequest struct {
func (x *CancelSchemaMigrationRequest) Reset() {
*x = CancelSchemaMigrationRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[17]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[19]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CancelSchemaMigrationRequest) String() string {
@@ -1204,8 +1292,8 @@ func (x *CancelSchemaMigrationRequest) String() string {
func (*CancelSchemaMigrationRequest) ProtoMessage() {}
func (x *CancelSchemaMigrationRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[17]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[19]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1217,7 +1305,7 @@ func (x *CancelSchemaMigrationRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use CancelSchemaMigrationRequest.ProtoReflect.Descriptor instead.
func (*CancelSchemaMigrationRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{17}
+ return file_vtadmin_proto_rawDescGZIP(), []int{19}
}
func (x *CancelSchemaMigrationRequest) GetClusterId() string {
@@ -1245,11 +1333,9 @@ type CleanupSchemaMigrationRequest struct {
func (x *CleanupSchemaMigrationRequest) Reset() {
*x = CleanupSchemaMigrationRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[18]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[20]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CleanupSchemaMigrationRequest) String() string {
@@ -1259,8 +1345,8 @@ func (x *CleanupSchemaMigrationRequest) String() string {
func (*CleanupSchemaMigrationRequest) ProtoMessage() {}
func (x *CleanupSchemaMigrationRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[18]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[20]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1272,7 +1358,7 @@ func (x *CleanupSchemaMigrationRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use CleanupSchemaMigrationRequest.ProtoReflect.Descriptor instead.
func (*CleanupSchemaMigrationRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{18}
+ return file_vtadmin_proto_rawDescGZIP(), []int{20}
}
func (x *CleanupSchemaMigrationRequest) GetClusterId() string {
@@ -1300,11 +1386,9 @@ type CompleteSchemaMigrationRequest struct {
func (x *CompleteSchemaMigrationRequest) Reset() {
*x = CompleteSchemaMigrationRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[19]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[21]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CompleteSchemaMigrationRequest) String() string {
@@ -1314,8 +1398,8 @@ func (x *CompleteSchemaMigrationRequest) String() string {
func (*CompleteSchemaMigrationRequest) ProtoMessage() {}
func (x *CompleteSchemaMigrationRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[19]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[21]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1327,7 +1411,7 @@ func (x *CompleteSchemaMigrationRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use CompleteSchemaMigrationRequest.ProtoReflect.Descriptor instead.
func (*CompleteSchemaMigrationRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{19}
+ return file_vtadmin_proto_rawDescGZIP(), []int{21}
}
func (x *CompleteSchemaMigrationRequest) GetClusterId() string {
@@ -1344,6 +1428,59 @@ func (x *CompleteSchemaMigrationRequest) GetRequest() *vtctldata.CompleteSchemaM
return nil
}
+type ConcludeTransactionRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ ClusterId string `protobuf:"bytes,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
+ Dtid string `protobuf:"bytes,2,opt,name=dtid,proto3" json:"dtid,omitempty"`
+}
+
+func (x *ConcludeTransactionRequest) Reset() {
+ *x = ConcludeTransactionRequest{}
+ mi := &file_vtadmin_proto_msgTypes[22]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ConcludeTransactionRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ConcludeTransactionRequest) ProtoMessage() {}
+
+func (x *ConcludeTransactionRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_vtadmin_proto_msgTypes[22]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ConcludeTransactionRequest.ProtoReflect.Descriptor instead.
+func (*ConcludeTransactionRequest) Descriptor() ([]byte, []int) {
+ return file_vtadmin_proto_rawDescGZIP(), []int{22}
+}
+
+func (x *ConcludeTransactionRequest) GetClusterId() string {
+ if x != nil {
+ return x.ClusterId
+ }
+ return ""
+}
+
+func (x *ConcludeTransactionRequest) GetDtid() string {
+ if x != nil {
+ return x.Dtid
+ }
+ return ""
+}
+
type CreateKeyspaceRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -1355,11 +1492,9 @@ type CreateKeyspaceRequest struct {
func (x *CreateKeyspaceRequest) Reset() {
*x = CreateKeyspaceRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[20]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[23]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CreateKeyspaceRequest) String() string {
@@ -1369,8 +1504,8 @@ func (x *CreateKeyspaceRequest) String() string {
func (*CreateKeyspaceRequest) ProtoMessage() {}
func (x *CreateKeyspaceRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[20]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[23]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1382,7 +1517,7 @@ func (x *CreateKeyspaceRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use CreateKeyspaceRequest.ProtoReflect.Descriptor instead.
func (*CreateKeyspaceRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{20}
+ return file_vtadmin_proto_rawDescGZIP(), []int{23}
}
func (x *CreateKeyspaceRequest) GetClusterId() string {
@@ -1409,11 +1544,9 @@ type CreateKeyspaceResponse struct {
func (x *CreateKeyspaceResponse) Reset() {
*x = CreateKeyspaceResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[21]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[24]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CreateKeyspaceResponse) String() string {
@@ -1423,8 +1556,8 @@ func (x *CreateKeyspaceResponse) String() string {
func (*CreateKeyspaceResponse) ProtoMessage() {}
func (x *CreateKeyspaceResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[21]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[24]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1436,7 +1569,7 @@ func (x *CreateKeyspaceResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use CreateKeyspaceResponse.ProtoReflect.Descriptor instead.
func (*CreateKeyspaceResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{21}
+ return file_vtadmin_proto_rawDescGZIP(), []int{24}
}
func (x *CreateKeyspaceResponse) GetKeyspace() *Keyspace {
@@ -1457,11 +1590,9 @@ type CreateShardRequest struct {
func (x *CreateShardRequest) Reset() {
*x = CreateShardRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[22]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[25]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CreateShardRequest) String() string {
@@ -1471,8 +1602,8 @@ func (x *CreateShardRequest) String() string {
func (*CreateShardRequest) ProtoMessage() {}
func (x *CreateShardRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[22]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[25]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1484,7 +1615,7 @@ func (x *CreateShardRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use CreateShardRequest.ProtoReflect.Descriptor instead.
func (*CreateShardRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{22}
+ return file_vtadmin_proto_rawDescGZIP(), []int{25}
}
func (x *CreateShardRequest) GetClusterId() string {
@@ -1512,11 +1643,9 @@ type DeleteKeyspaceRequest struct {
func (x *DeleteKeyspaceRequest) Reset() {
*x = DeleteKeyspaceRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[23]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[26]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *DeleteKeyspaceRequest) String() string {
@@ -1526,8 +1655,8 @@ func (x *DeleteKeyspaceRequest) String() string {
func (*DeleteKeyspaceRequest) ProtoMessage() {}
func (x *DeleteKeyspaceRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[23]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[26]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1539,7 +1668,7 @@ func (x *DeleteKeyspaceRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteKeyspaceRequest.ProtoReflect.Descriptor instead.
func (*DeleteKeyspaceRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{23}
+ return file_vtadmin_proto_rawDescGZIP(), []int{26}
}
func (x *DeleteKeyspaceRequest) GetClusterId() string {
@@ -1567,11 +1696,9 @@ type DeleteShardsRequest struct {
func (x *DeleteShardsRequest) Reset() {
*x = DeleteShardsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[24]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[27]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *DeleteShardsRequest) String() string {
@@ -1581,8 +1708,8 @@ func (x *DeleteShardsRequest) String() string {
func (*DeleteShardsRequest) ProtoMessage() {}
func (x *DeleteShardsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[24]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[27]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1594,7 +1721,7 @@ func (x *DeleteShardsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteShardsRequest.ProtoReflect.Descriptor instead.
func (*DeleteShardsRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{24}
+ return file_vtadmin_proto_rawDescGZIP(), []int{27}
}
func (x *DeleteShardsRequest) GetClusterId() string {
@@ -1623,11 +1750,9 @@ type DeleteTabletRequest struct {
func (x *DeleteTabletRequest) Reset() {
*x = DeleteTabletRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[25]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[28]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *DeleteTabletRequest) String() string {
@@ -1637,8 +1762,8 @@ func (x *DeleteTabletRequest) String() string {
func (*DeleteTabletRequest) ProtoMessage() {}
func (x *DeleteTabletRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[25]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[28]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1650,7 +1775,7 @@ func (x *DeleteTabletRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteTabletRequest.ProtoReflect.Descriptor instead.
func (*DeleteTabletRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{25}
+ return file_vtadmin_proto_rawDescGZIP(), []int{28}
}
func (x *DeleteTabletRequest) GetAlias() *topodata.TabletAlias {
@@ -1685,11 +1810,9 @@ type DeleteTabletResponse struct {
func (x *DeleteTabletResponse) Reset() {
*x = DeleteTabletResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[26]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[29]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *DeleteTabletResponse) String() string {
@@ -1699,8 +1822,8 @@ func (x *DeleteTabletResponse) String() string {
func (*DeleteTabletResponse) ProtoMessage() {}
func (x *DeleteTabletResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[26]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[29]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1712,7 +1835,7 @@ func (x *DeleteTabletResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteTabletResponse.ProtoReflect.Descriptor instead.
func (*DeleteTabletResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{26}
+ return file_vtadmin_proto_rawDescGZIP(), []int{29}
}
func (x *DeleteTabletResponse) GetStatus() string {
@@ -1740,11 +1863,9 @@ type EmergencyFailoverShardRequest struct {
func (x *EmergencyFailoverShardRequest) Reset() {
*x = EmergencyFailoverShardRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[27]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[30]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *EmergencyFailoverShardRequest) String() string {
@@ -1754,8 +1875,8 @@ func (x *EmergencyFailoverShardRequest) String() string {
func (*EmergencyFailoverShardRequest) ProtoMessage() {}
func (x *EmergencyFailoverShardRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[27]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[30]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1767,7 +1888,7 @@ func (x *EmergencyFailoverShardRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use EmergencyFailoverShardRequest.ProtoReflect.Descriptor instead.
func (*EmergencyFailoverShardRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{27}
+ return file_vtadmin_proto_rawDescGZIP(), []int{30}
}
func (x *EmergencyFailoverShardRequest) GetClusterId() string {
@@ -1802,11 +1923,9 @@ type EmergencyFailoverShardResponse struct {
func (x *EmergencyFailoverShardResponse) Reset() {
*x = EmergencyFailoverShardResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[28]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[31]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *EmergencyFailoverShardResponse) String() string {
@@ -1816,8 +1935,8 @@ func (x *EmergencyFailoverShardResponse) String() string {
func (*EmergencyFailoverShardResponse) ProtoMessage() {}
func (x *EmergencyFailoverShardResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[28]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[31]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1829,7 +1948,7 @@ func (x *EmergencyFailoverShardResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use EmergencyFailoverShardResponse.ProtoReflect.Descriptor instead.
func (*EmergencyFailoverShardResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{28}
+ return file_vtadmin_proto_rawDescGZIP(), []int{31}
}
func (x *EmergencyFailoverShardResponse) GetCluster() *Cluster {
@@ -1879,11 +1998,9 @@ type FindSchemaRequest struct {
func (x *FindSchemaRequest) Reset() {
*x = FindSchemaRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[29]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[32]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *FindSchemaRequest) String() string {
@@ -1893,8 +2010,8 @@ func (x *FindSchemaRequest) String() string {
func (*FindSchemaRequest) ProtoMessage() {}
func (x *FindSchemaRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[29]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[32]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1906,7 +2023,7 @@ func (x *FindSchemaRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use FindSchemaRequest.ProtoReflect.Descriptor instead.
func (*FindSchemaRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{29}
+ return file_vtadmin_proto_rawDescGZIP(), []int{32}
}
func (x *FindSchemaRequest) GetTable() string {
@@ -1954,11 +2071,9 @@ type GetBackupsRequest struct {
func (x *GetBackupsRequest) Reset() {
*x = GetBackupsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[30]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[33]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetBackupsRequest) String() string {
@@ -1968,8 +2083,8 @@ func (x *GetBackupsRequest) String() string {
func (*GetBackupsRequest) ProtoMessage() {}
func (x *GetBackupsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[30]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[33]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1981,7 +2096,7 @@ func (x *GetBackupsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetBackupsRequest.ProtoReflect.Descriptor instead.
func (*GetBackupsRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{30}
+ return file_vtadmin_proto_rawDescGZIP(), []int{33}
}
func (x *GetBackupsRequest) GetClusterIds() []string {
@@ -2022,11 +2137,9 @@ type GetBackupsResponse struct {
func (x *GetBackupsResponse) Reset() {
*x = GetBackupsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[31]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[34]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetBackupsResponse) String() string {
@@ -2036,8 +2149,8 @@ func (x *GetBackupsResponse) String() string {
func (*GetBackupsResponse) ProtoMessage() {}
func (x *GetBackupsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[31]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[34]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2049,7 +2162,7 @@ func (x *GetBackupsResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetBackupsResponse.ProtoReflect.Descriptor instead.
func (*GetBackupsResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{31}
+ return file_vtadmin_proto_rawDescGZIP(), []int{34}
}
func (x *GetBackupsResponse) GetBackups() []*ClusterBackup {
@@ -2079,11 +2192,9 @@ type GetCellInfosRequest struct {
func (x *GetCellInfosRequest) Reset() {
*x = GetCellInfosRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[32]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[35]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetCellInfosRequest) String() string {
@@ -2093,8 +2204,8 @@ func (x *GetCellInfosRequest) String() string {
func (*GetCellInfosRequest) ProtoMessage() {}
func (x *GetCellInfosRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[32]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[35]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2106,7 +2217,7 @@ func (x *GetCellInfosRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetCellInfosRequest.ProtoReflect.Descriptor instead.
func (*GetCellInfosRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{32}
+ return file_vtadmin_proto_rawDescGZIP(), []int{35}
}
func (x *GetCellInfosRequest) GetClusterIds() []string {
@@ -2140,11 +2251,9 @@ type GetCellInfosResponse struct {
func (x *GetCellInfosResponse) Reset() {
*x = GetCellInfosResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[33]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[36]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetCellInfosResponse) String() string {
@@ -2154,8 +2263,8 @@ func (x *GetCellInfosResponse) String() string {
func (*GetCellInfosResponse) ProtoMessage() {}
func (x *GetCellInfosResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[33]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[36]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2167,7 +2276,7 @@ func (x *GetCellInfosResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetCellInfosResponse.ProtoReflect.Descriptor instead.
func (*GetCellInfosResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{33}
+ return file_vtadmin_proto_rawDescGZIP(), []int{36}
}
func (x *GetCellInfosResponse) GetCellInfos() []*ClusterCellInfo {
@@ -2187,11 +2296,9 @@ type GetCellsAliasesRequest struct {
func (x *GetCellsAliasesRequest) Reset() {
*x = GetCellsAliasesRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[34]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[37]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetCellsAliasesRequest) String() string {
@@ -2201,8 +2308,8 @@ func (x *GetCellsAliasesRequest) String() string {
func (*GetCellsAliasesRequest) ProtoMessage() {}
func (x *GetCellsAliasesRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[34]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[37]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2214,7 +2321,7 @@ func (x *GetCellsAliasesRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetCellsAliasesRequest.ProtoReflect.Descriptor instead.
func (*GetCellsAliasesRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{34}
+ return file_vtadmin_proto_rawDescGZIP(), []int{37}
}
func (x *GetCellsAliasesRequest) GetClusterIds() []string {
@@ -2234,11 +2341,9 @@ type GetCellsAliasesResponse struct {
func (x *GetCellsAliasesResponse) Reset() {
*x = GetCellsAliasesResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[35]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[38]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetCellsAliasesResponse) String() string {
@@ -2248,8 +2353,8 @@ func (x *GetCellsAliasesResponse) String() string {
func (*GetCellsAliasesResponse) ProtoMessage() {}
func (x *GetCellsAliasesResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[35]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[38]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2261,7 +2366,7 @@ func (x *GetCellsAliasesResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetCellsAliasesResponse.ProtoReflect.Descriptor instead.
func (*GetCellsAliasesResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{35}
+ return file_vtadmin_proto_rawDescGZIP(), []int{38}
}
func (x *GetCellsAliasesResponse) GetAliases() []*ClusterCellsAliases {
@@ -2279,11 +2384,9 @@ type GetClustersRequest struct {
func (x *GetClustersRequest) Reset() {
*x = GetClustersRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[36]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[39]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetClustersRequest) String() string {
@@ -2293,8 +2396,8 @@ func (x *GetClustersRequest) String() string {
func (*GetClustersRequest) ProtoMessage() {}
func (x *GetClustersRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[36]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[39]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2306,7 +2409,7 @@ func (x *GetClustersRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetClustersRequest.ProtoReflect.Descriptor instead.
func (*GetClustersRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{36}
+ return file_vtadmin_proto_rawDescGZIP(), []int{39}
}
type GetClustersResponse struct {
@@ -2319,11 +2422,9 @@ type GetClustersResponse struct {
func (x *GetClustersResponse) Reset() {
*x = GetClustersResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[37]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[40]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetClustersResponse) String() string {
@@ -2333,8 +2434,8 @@ func (x *GetClustersResponse) String() string {
func (*GetClustersResponse) ProtoMessage() {}
func (x *GetClustersResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[37]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[40]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2346,7 +2447,7 @@ func (x *GetClustersResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetClustersResponse.ProtoReflect.Descriptor instead.
func (*GetClustersResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{37}
+ return file_vtadmin_proto_rawDescGZIP(), []int{40}
}
func (x *GetClustersResponse) GetClusters() []*Cluster {
@@ -2367,11 +2468,9 @@ type GetFullStatusRequest struct {
func (x *GetFullStatusRequest) Reset() {
*x = GetFullStatusRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[38]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[41]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetFullStatusRequest) String() string {
@@ -2381,8 +2480,8 @@ func (x *GetFullStatusRequest) String() string {
func (*GetFullStatusRequest) ProtoMessage() {}
func (x *GetFullStatusRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[38]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[41]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2394,7 +2493,7 @@ func (x *GetFullStatusRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetFullStatusRequest.ProtoReflect.Descriptor instead.
func (*GetFullStatusRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{38}
+ return file_vtadmin_proto_rawDescGZIP(), []int{41}
}
func (x *GetFullStatusRequest) GetClusterId() string {
@@ -2421,11 +2520,9 @@ type GetGatesRequest struct {
func (x *GetGatesRequest) Reset() {
*x = GetGatesRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[39]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[42]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetGatesRequest) String() string {
@@ -2435,8 +2532,8 @@ func (x *GetGatesRequest) String() string {
func (*GetGatesRequest) ProtoMessage() {}
func (x *GetGatesRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[39]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[42]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2448,7 +2545,7 @@ func (x *GetGatesRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetGatesRequest.ProtoReflect.Descriptor instead.
func (*GetGatesRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{39}
+ return file_vtadmin_proto_rawDescGZIP(), []int{42}
}
func (x *GetGatesRequest) GetClusterIds() []string {
@@ -2468,11 +2565,9 @@ type GetGatesResponse struct {
func (x *GetGatesResponse) Reset() {
*x = GetGatesResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[40]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[43]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetGatesResponse) String() string {
@@ -2482,8 +2577,8 @@ func (x *GetGatesResponse) String() string {
func (*GetGatesResponse) ProtoMessage() {}
func (x *GetGatesResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[40]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[43]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2495,7 +2590,7 @@ func (x *GetGatesResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetGatesResponse.ProtoReflect.Descriptor instead.
func (*GetGatesResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{40}
+ return file_vtadmin_proto_rawDescGZIP(), []int{43}
}
func (x *GetGatesResponse) GetGates() []*VTGate {
@@ -2516,11 +2611,9 @@ type GetKeyspaceRequest struct {
func (x *GetKeyspaceRequest) Reset() {
*x = GetKeyspaceRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[41]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[44]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetKeyspaceRequest) String() string {
@@ -2530,8 +2623,8 @@ func (x *GetKeyspaceRequest) String() string {
func (*GetKeyspaceRequest) ProtoMessage() {}
func (x *GetKeyspaceRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[41]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[44]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2543,7 +2636,7 @@ func (x *GetKeyspaceRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetKeyspaceRequest.ProtoReflect.Descriptor instead.
func (*GetKeyspaceRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{41}
+ return file_vtadmin_proto_rawDescGZIP(), []int{44}
}
func (x *GetKeyspaceRequest) GetClusterId() string {
@@ -2570,11 +2663,9 @@ type GetKeyspacesRequest struct {
func (x *GetKeyspacesRequest) Reset() {
*x = GetKeyspacesRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[42]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[45]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetKeyspacesRequest) String() string {
@@ -2584,8 +2675,8 @@ func (x *GetKeyspacesRequest) String() string {
func (*GetKeyspacesRequest) ProtoMessage() {}
func (x *GetKeyspacesRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[42]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[45]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2597,7 +2688,7 @@ func (x *GetKeyspacesRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetKeyspacesRequest.ProtoReflect.Descriptor instead.
func (*GetKeyspacesRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{42}
+ return file_vtadmin_proto_rawDescGZIP(), []int{45}
}
func (x *GetKeyspacesRequest) GetClusterIds() []string {
@@ -2617,11 +2708,9 @@ type GetKeyspacesResponse struct {
func (x *GetKeyspacesResponse) Reset() {
*x = GetKeyspacesResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[43]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[46]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetKeyspacesResponse) String() string {
@@ -2631,8 +2720,8 @@ func (x *GetKeyspacesResponse) String() string {
func (*GetKeyspacesResponse) ProtoMessage() {}
func (x *GetKeyspacesResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[43]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[46]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2644,7 +2733,7 @@ func (x *GetKeyspacesResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetKeyspacesResponse.ProtoReflect.Descriptor instead.
func (*GetKeyspacesResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{43}
+ return file_vtadmin_proto_rawDescGZIP(), []int{46}
}
func (x *GetKeyspacesResponse) GetKeyspaces() []*Keyspace {
@@ -2667,11 +2756,9 @@ type GetSchemaRequest struct {
func (x *GetSchemaRequest) Reset() {
*x = GetSchemaRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[44]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[47]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSchemaRequest) String() string {
@@ -2681,8 +2768,8 @@ func (x *GetSchemaRequest) String() string {
func (*GetSchemaRequest) ProtoMessage() {}
func (x *GetSchemaRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[44]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[47]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2694,7 +2781,7 @@ func (x *GetSchemaRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetSchemaRequest.ProtoReflect.Descriptor instead.
func (*GetSchemaRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{44}
+ return file_vtadmin_proto_rawDescGZIP(), []int{47}
}
func (x *GetSchemaRequest) GetClusterId() string {
@@ -2736,11 +2823,9 @@ type GetSchemasRequest struct {
func (x *GetSchemasRequest) Reset() {
*x = GetSchemasRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[45]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[48]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSchemasRequest) String() string {
@@ -2750,8 +2835,8 @@ func (x *GetSchemasRequest) String() string {
func (*GetSchemasRequest) ProtoMessage() {}
func (x *GetSchemasRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[45]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[48]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2763,7 +2848,7 @@ func (x *GetSchemasRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetSchemasRequest.ProtoReflect.Descriptor instead.
func (*GetSchemasRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{45}
+ return file_vtadmin_proto_rawDescGZIP(), []int{48}
}
func (x *GetSchemasRequest) GetClusterIds() []string {
@@ -2790,11 +2875,9 @@ type GetSchemasResponse struct {
func (x *GetSchemasResponse) Reset() {
*x = GetSchemasResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[46]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[49]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSchemasResponse) String() string {
@@ -2804,8 +2887,8 @@ func (x *GetSchemasResponse) String() string {
func (*GetSchemasResponse) ProtoMessage() {}
func (x *GetSchemasResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[46]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[49]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2817,7 +2900,7 @@ func (x *GetSchemasResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetSchemasResponse.ProtoReflect.Descriptor instead.
func (*GetSchemasResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{46}
+ return file_vtadmin_proto_rawDescGZIP(), []int{49}
}
func (x *GetSchemasResponse) GetSchemas() []*Schema {
@@ -2837,11 +2920,9 @@ type GetSchemaMigrationsRequest struct {
func (x *GetSchemaMigrationsRequest) Reset() {
*x = GetSchemaMigrationsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[47]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[50]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSchemaMigrationsRequest) String() string {
@@ -2851,8 +2932,8 @@ func (x *GetSchemaMigrationsRequest) String() string {
func (*GetSchemaMigrationsRequest) ProtoMessage() {}
func (x *GetSchemaMigrationsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[47]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[50]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2864,7 +2945,7 @@ func (x *GetSchemaMigrationsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetSchemaMigrationsRequest.ProtoReflect.Descriptor instead.
func (*GetSchemaMigrationsRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{47}
+ return file_vtadmin_proto_rawDescGZIP(), []int{50}
}
func (x *GetSchemaMigrationsRequest) GetClusterRequests() []*GetSchemaMigrationsRequest_ClusterRequest {
@@ -2884,11 +2965,9 @@ type GetSchemaMigrationsResponse struct {
func (x *GetSchemaMigrationsResponse) Reset() {
*x = GetSchemaMigrationsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[48]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[51]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSchemaMigrationsResponse) String() string {
@@ -2898,8 +2977,8 @@ func (x *GetSchemaMigrationsResponse) String() string {
func (*GetSchemaMigrationsResponse) ProtoMessage() {}
func (x *GetSchemaMigrationsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[48]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[51]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2911,7 +2990,7 @@ func (x *GetSchemaMigrationsResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetSchemaMigrationsResponse.ProtoReflect.Descriptor instead.
func (*GetSchemaMigrationsResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{48}
+ return file_vtadmin_proto_rawDescGZIP(), []int{51}
}
func (x *GetSchemaMigrationsResponse) GetSchemaMigrations() []*SchemaMigration {
@@ -2940,11 +3019,9 @@ type GetShardReplicationPositionsRequest struct {
func (x *GetShardReplicationPositionsRequest) Reset() {
*x = GetShardReplicationPositionsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[49]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[52]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetShardReplicationPositionsRequest) String() string {
@@ -2954,8 +3031,8 @@ func (x *GetShardReplicationPositionsRequest) String() string {
func (*GetShardReplicationPositionsRequest) ProtoMessage() {}
func (x *GetShardReplicationPositionsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[49]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[52]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2967,7 +3044,7 @@ func (x *GetShardReplicationPositionsRequest) ProtoReflect() protoreflect.Messag
// Deprecated: Use GetShardReplicationPositionsRequest.ProtoReflect.Descriptor instead.
func (*GetShardReplicationPositionsRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{49}
+ return file_vtadmin_proto_rawDescGZIP(), []int{52}
}
func (x *GetShardReplicationPositionsRequest) GetClusterIds() []string {
@@ -3001,11 +3078,9 @@ type GetShardReplicationPositionsResponse struct {
func (x *GetShardReplicationPositionsResponse) Reset() {
*x = GetShardReplicationPositionsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[50]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[53]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetShardReplicationPositionsResponse) String() string {
@@ -3015,8 +3090,8 @@ func (x *GetShardReplicationPositionsResponse) String() string {
func (*GetShardReplicationPositionsResponse) ProtoMessage() {}
func (x *GetShardReplicationPositionsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[50]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[53]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3028,7 +3103,7 @@ func (x *GetShardReplicationPositionsResponse) ProtoReflect() protoreflect.Messa
// Deprecated: Use GetShardReplicationPositionsResponse.ProtoReflect.Descriptor instead.
func (*GetShardReplicationPositionsResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{50}
+ return file_vtadmin_proto_rawDescGZIP(), []int{53}
}
func (x *GetShardReplicationPositionsResponse) GetReplicationPositions() []*ClusterShardReplicationPosition {
@@ -3052,11 +3127,9 @@ type GetSrvKeyspaceRequest struct {
func (x *GetSrvKeyspaceRequest) Reset() {
*x = GetSrvKeyspaceRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[51]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[54]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSrvKeyspaceRequest) String() string {
@@ -3066,8 +3139,8 @@ func (x *GetSrvKeyspaceRequest) String() string {
func (*GetSrvKeyspaceRequest) ProtoMessage() {}
func (x *GetSrvKeyspaceRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[51]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[54]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3079,7 +3152,7 @@ func (x *GetSrvKeyspaceRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetSrvKeyspaceRequest.ProtoReflect.Descriptor instead.
func (*GetSrvKeyspaceRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{51}
+ return file_vtadmin_proto_rawDescGZIP(), []int{54}
}
func (x *GetSrvKeyspaceRequest) GetClusterId() string {
@@ -3117,11 +3190,9 @@ type GetSrvKeyspacesRequest struct {
func (x *GetSrvKeyspacesRequest) Reset() {
*x = GetSrvKeyspacesRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[52]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[55]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSrvKeyspacesRequest) String() string {
@@ -3131,8 +3202,8 @@ func (x *GetSrvKeyspacesRequest) String() string {
func (*GetSrvKeyspacesRequest) ProtoMessage() {}
func (x *GetSrvKeyspacesRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[52]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[55]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3144,7 +3215,7 @@ func (x *GetSrvKeyspacesRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetSrvKeyspacesRequest.ProtoReflect.Descriptor instead.
func (*GetSrvKeyspacesRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{52}
+ return file_vtadmin_proto_rawDescGZIP(), []int{55}
}
func (x *GetSrvKeyspacesRequest) GetClusterIds() []string {
@@ -3172,11 +3243,9 @@ type GetSrvKeyspacesResponse struct {
func (x *GetSrvKeyspacesResponse) Reset() {
*x = GetSrvKeyspacesResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[53]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[56]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSrvKeyspacesResponse) String() string {
@@ -3186,8 +3255,8 @@ func (x *GetSrvKeyspacesResponse) String() string {
func (*GetSrvKeyspacesResponse) ProtoMessage() {}
func (x *GetSrvKeyspacesResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[53]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[56]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3199,7 +3268,7 @@ func (x *GetSrvKeyspacesResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetSrvKeyspacesResponse.ProtoReflect.Descriptor instead.
func (*GetSrvKeyspacesResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{53}
+ return file_vtadmin_proto_rawDescGZIP(), []int{56}
}
func (x *GetSrvKeyspacesResponse) GetSrvKeyspaces() map[string]*vtctldata.GetSrvKeyspacesResponse {
@@ -3220,11 +3289,9 @@ type GetSrvVSchemaRequest struct {
func (x *GetSrvVSchemaRequest) Reset() {
*x = GetSrvVSchemaRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[54]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[57]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSrvVSchemaRequest) String() string {
@@ -3234,8 +3301,8 @@ func (x *GetSrvVSchemaRequest) String() string {
func (*GetSrvVSchemaRequest) ProtoMessage() {}
func (x *GetSrvVSchemaRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[54]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[57]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3247,7 +3314,7 @@ func (x *GetSrvVSchemaRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetSrvVSchemaRequest.ProtoReflect.Descriptor instead.
func (*GetSrvVSchemaRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{54}
+ return file_vtadmin_proto_rawDescGZIP(), []int{57}
}
func (x *GetSrvVSchemaRequest) GetClusterId() string {
@@ -3275,11 +3342,9 @@ type GetSrvVSchemasRequest struct {
func (x *GetSrvVSchemasRequest) Reset() {
*x = GetSrvVSchemasRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[55]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[58]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSrvVSchemasRequest) String() string {
@@ -3289,8 +3354,8 @@ func (x *GetSrvVSchemasRequest) String() string {
func (*GetSrvVSchemasRequest) ProtoMessage() {}
func (x *GetSrvVSchemasRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[55]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[58]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3302,7 +3367,7 @@ func (x *GetSrvVSchemasRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetSrvVSchemasRequest.ProtoReflect.Descriptor instead.
func (*GetSrvVSchemasRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{55}
+ return file_vtadmin_proto_rawDescGZIP(), []int{58}
}
func (x *GetSrvVSchemasRequest) GetClusterIds() []string {
@@ -3329,11 +3394,9 @@ type GetSrvVSchemasResponse struct {
func (x *GetSrvVSchemasResponse) Reset() {
*x = GetSrvVSchemasResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[56]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[59]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSrvVSchemasResponse) String() string {
@@ -3343,8 +3406,8 @@ func (x *GetSrvVSchemasResponse) String() string {
func (*GetSrvVSchemasResponse) ProtoMessage() {}
func (x *GetSrvVSchemasResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[56]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[59]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3356,7 +3419,7 @@ func (x *GetSrvVSchemasResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetSrvVSchemasResponse.ProtoReflect.Descriptor instead.
func (*GetSrvVSchemasResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{56}
+ return file_vtadmin_proto_rawDescGZIP(), []int{59}
}
func (x *GetSrvVSchemasResponse) GetSrvVSchemas() []*SrvVSchema {
@@ -3377,11 +3440,9 @@ type GetSchemaTableSizeOptions struct {
func (x *GetSchemaTableSizeOptions) Reset() {
*x = GetSchemaTableSizeOptions{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[57]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[60]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSchemaTableSizeOptions) String() string {
@@ -3391,8 +3452,8 @@ func (x *GetSchemaTableSizeOptions) String() string {
func (*GetSchemaTableSizeOptions) ProtoMessage() {}
func (x *GetSchemaTableSizeOptions) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[57]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[60]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3404,7 +3465,7 @@ func (x *GetSchemaTableSizeOptions) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetSchemaTableSizeOptions.ProtoReflect.Descriptor instead.
func (*GetSchemaTableSizeOptions) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{57}
+ return file_vtadmin_proto_rawDescGZIP(), []int{60}
}
func (x *GetSchemaTableSizeOptions) GetAggregateSizes() bool {
@@ -3436,11 +3497,9 @@ type GetTabletRequest struct {
func (x *GetTabletRequest) Reset() {
*x = GetTabletRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[58]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[61]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetTabletRequest) String() string {
@@ -3450,8 +3509,8 @@ func (x *GetTabletRequest) String() string {
func (*GetTabletRequest) ProtoMessage() {}
func (x *GetTabletRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[58]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[61]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3463,7 +3522,7 @@ func (x *GetTabletRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetTabletRequest.ProtoReflect.Descriptor instead.
func (*GetTabletRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{58}
+ return file_vtadmin_proto_rawDescGZIP(), []int{61}
}
func (x *GetTabletRequest) GetAlias() *topodata.TabletAlias {
@@ -3490,11 +3549,9 @@ type GetTabletsRequest struct {
func (x *GetTabletsRequest) Reset() {
*x = GetTabletsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[59]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[62]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetTabletsRequest) String() string {
@@ -3504,8 +3561,8 @@ func (x *GetTabletsRequest) String() string {
func (*GetTabletsRequest) ProtoMessage() {}
func (x *GetTabletsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[59]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[62]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3517,7 +3574,7 @@ func (x *GetTabletsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetTabletsRequest.ProtoReflect.Descriptor instead.
func (*GetTabletsRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{59}
+ return file_vtadmin_proto_rawDescGZIP(), []int{62}
}
func (x *GetTabletsRequest) GetClusterIds() []string {
@@ -3537,11 +3594,9 @@ type GetTabletsResponse struct {
func (x *GetTabletsResponse) Reset() {
*x = GetTabletsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[60]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[63]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetTabletsResponse) String() string {
@@ -3551,8 +3606,8 @@ func (x *GetTabletsResponse) String() string {
func (*GetTabletsResponse) ProtoMessage() {}
func (x *GetTabletsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[60]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[63]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3564,7 +3619,7 @@ func (x *GetTabletsResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetTabletsResponse.ProtoReflect.Descriptor instead.
func (*GetTabletsResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{60}
+ return file_vtadmin_proto_rawDescGZIP(), []int{63}
}
func (x *GetTabletsResponse) GetTablets() []*Tablet {
@@ -3585,11 +3640,9 @@ type GetTopologyPathRequest struct {
func (x *GetTopologyPathRequest) Reset() {
*x = GetTopologyPathRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[61]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[64]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetTopologyPathRequest) String() string {
@@ -3599,8 +3652,8 @@ func (x *GetTopologyPathRequest) String() string {
func (*GetTopologyPathRequest) ProtoMessage() {}
func (x *GetTopologyPathRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[61]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[64]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3612,7 +3665,7 @@ func (x *GetTopologyPathRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetTopologyPathRequest.ProtoReflect.Descriptor instead.
func (*GetTopologyPathRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{61}
+ return file_vtadmin_proto_rawDescGZIP(), []int{64}
}
func (x *GetTopologyPathRequest) GetClusterId() string {
@@ -3629,22 +3682,74 @@ func (x *GetTopologyPathRequest) GetPath() string {
return ""
}
+type GetTransactionInfoRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ ClusterId string `protobuf:"bytes,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
+ Request *vtctldata.GetTransactionInfoRequest `protobuf:"bytes,2,opt,name=request,proto3" json:"request,omitempty"`
+}
+
+func (x *GetTransactionInfoRequest) Reset() {
+ *x = GetTransactionInfoRequest{}
+ mi := &file_vtadmin_proto_msgTypes[65]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *GetTransactionInfoRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetTransactionInfoRequest) ProtoMessage() {}
+
+func (x *GetTransactionInfoRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_vtadmin_proto_msgTypes[65]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetTransactionInfoRequest.ProtoReflect.Descriptor instead.
+func (*GetTransactionInfoRequest) Descriptor() ([]byte, []int) {
+ return file_vtadmin_proto_rawDescGZIP(), []int{65}
+}
+
+func (x *GetTransactionInfoRequest) GetClusterId() string {
+ if x != nil {
+ return x.ClusterId
+ }
+ return ""
+}
+
+func (x *GetTransactionInfoRequest) GetRequest() *vtctldata.GetTransactionInfoRequest {
+ if x != nil {
+ return x.Request
+ }
+ return nil
+}
+
type GetUnresolvedTransactionsRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- ClusterId string `protobuf:"bytes,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
- Keyspace string `protobuf:"bytes,2,opt,name=keyspace,proto3" json:"keyspace,omitempty"`
+ ClusterId string `protobuf:"bytes,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
+ Keyspace string `protobuf:"bytes,2,opt,name=keyspace,proto3" json:"keyspace,omitempty"`
+ AbandonAge int64 `protobuf:"varint,3,opt,name=abandon_age,json=abandonAge,proto3" json:"abandon_age,omitempty"`
}
func (x *GetUnresolvedTransactionsRequest) Reset() {
*x = GetUnresolvedTransactionsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[62]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[66]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetUnresolvedTransactionsRequest) String() string {
@@ -3654,8 +3759,8 @@ func (x *GetUnresolvedTransactionsRequest) String() string {
func (*GetUnresolvedTransactionsRequest) ProtoMessage() {}
func (x *GetUnresolvedTransactionsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[62]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[66]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3667,7 +3772,7 @@ func (x *GetUnresolvedTransactionsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetUnresolvedTransactionsRequest.ProtoReflect.Descriptor instead.
func (*GetUnresolvedTransactionsRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{62}
+ return file_vtadmin_proto_rawDescGZIP(), []int{66}
}
func (x *GetUnresolvedTransactionsRequest) GetClusterId() string {
@@ -3684,6 +3789,13 @@ func (x *GetUnresolvedTransactionsRequest) GetKeyspace() string {
return ""
}
+func (x *GetUnresolvedTransactionsRequest) GetAbandonAge() int64 {
+ if x != nil {
+ return x.AbandonAge
+ }
+ return 0
+}
+
type GetVSchemaRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -3695,11 +3807,9 @@ type GetVSchemaRequest struct {
func (x *GetVSchemaRequest) Reset() {
*x = GetVSchemaRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[63]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[67]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetVSchemaRequest) String() string {
@@ -3709,8 +3819,8 @@ func (x *GetVSchemaRequest) String() string {
func (*GetVSchemaRequest) ProtoMessage() {}
func (x *GetVSchemaRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[63]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[67]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3722,7 +3832,7 @@ func (x *GetVSchemaRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetVSchemaRequest.ProtoReflect.Descriptor instead.
func (*GetVSchemaRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{63}
+ return file_vtadmin_proto_rawDescGZIP(), []int{67}
}
func (x *GetVSchemaRequest) GetClusterId() string {
@@ -3749,11 +3859,9 @@ type GetVSchemasRequest struct {
func (x *GetVSchemasRequest) Reset() {
*x = GetVSchemasRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[64]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[68]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetVSchemasRequest) String() string {
@@ -3763,8 +3871,8 @@ func (x *GetVSchemasRequest) String() string {
func (*GetVSchemasRequest) ProtoMessage() {}
func (x *GetVSchemasRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[64]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[68]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3776,7 +3884,7 @@ func (x *GetVSchemasRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetVSchemasRequest.ProtoReflect.Descriptor instead.
func (*GetVSchemasRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{64}
+ return file_vtadmin_proto_rawDescGZIP(), []int{68}
}
func (x *GetVSchemasRequest) GetClusterIds() []string {
@@ -3796,11 +3904,9 @@ type GetVSchemasResponse struct {
func (x *GetVSchemasResponse) Reset() {
*x = GetVSchemasResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[65]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[69]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetVSchemasResponse) String() string {
@@ -3810,8 +3916,8 @@ func (x *GetVSchemasResponse) String() string {
func (*GetVSchemasResponse) ProtoMessage() {}
func (x *GetVSchemasResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[65]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[69]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3823,7 +3929,7 @@ func (x *GetVSchemasResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetVSchemasResponse.ProtoReflect.Descriptor instead.
func (*GetVSchemasResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{65}
+ return file_vtadmin_proto_rawDescGZIP(), []int{69}
}
func (x *GetVSchemasResponse) GetVSchemas() []*VSchema {
@@ -3843,11 +3949,9 @@ type GetVtctldsRequest struct {
func (x *GetVtctldsRequest) Reset() {
*x = GetVtctldsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[66]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[70]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetVtctldsRequest) String() string {
@@ -3857,8 +3961,8 @@ func (x *GetVtctldsRequest) String() string {
func (*GetVtctldsRequest) ProtoMessage() {}
func (x *GetVtctldsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[66]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[70]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3870,7 +3974,7 @@ func (x *GetVtctldsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetVtctldsRequest.ProtoReflect.Descriptor instead.
func (*GetVtctldsRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{66}
+ return file_vtadmin_proto_rawDescGZIP(), []int{70}
}
func (x *GetVtctldsRequest) GetClusterIds() []string {
@@ -3890,11 +3994,9 @@ type GetVtctldsResponse struct {
func (x *GetVtctldsResponse) Reset() {
*x = GetVtctldsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[67]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[71]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetVtctldsResponse) String() string {
@@ -3904,8 +4006,8 @@ func (x *GetVtctldsResponse) String() string {
func (*GetVtctldsResponse) ProtoMessage() {}
func (x *GetVtctldsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[67]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[71]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3917,7 +4019,7 @@ func (x *GetVtctldsResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetVtctldsResponse.ProtoReflect.Descriptor instead.
func (*GetVtctldsResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{67}
+ return file_vtadmin_proto_rawDescGZIP(), []int{71}
}
func (x *GetVtctldsResponse) GetVtctlds() []*Vtctld {
@@ -3940,11 +4042,9 @@ type GetWorkflowRequest struct {
func (x *GetWorkflowRequest) Reset() {
*x = GetWorkflowRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[68]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[72]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetWorkflowRequest) String() string {
@@ -3954,8 +4054,8 @@ func (x *GetWorkflowRequest) String() string {
func (*GetWorkflowRequest) ProtoMessage() {}
func (x *GetWorkflowRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[68]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[72]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3967,7 +4067,7 @@ func (x *GetWorkflowRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetWorkflowRequest.ProtoReflect.Descriptor instead.
func (*GetWorkflowRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{68}
+ return file_vtadmin_proto_rawDescGZIP(), []int{72}
}
func (x *GetWorkflowRequest) GetClusterId() string {
@@ -4010,11 +4110,9 @@ type GetWorkflowStatusRequest struct {
func (x *GetWorkflowStatusRequest) Reset() {
*x = GetWorkflowStatusRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[69]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[73]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetWorkflowStatusRequest) String() string {
@@ -4024,8 +4122,8 @@ func (x *GetWorkflowStatusRequest) String() string {
func (*GetWorkflowStatusRequest) ProtoMessage() {}
func (x *GetWorkflowStatusRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[69]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[73]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4037,7 +4135,7 @@ func (x *GetWorkflowStatusRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetWorkflowStatusRequest.ProtoReflect.Descriptor instead.
func (*GetWorkflowStatusRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{69}
+ return file_vtadmin_proto_rawDescGZIP(), []int{73}
}
func (x *GetWorkflowStatusRequest) GetClusterId() string {
@@ -4073,11 +4171,9 @@ type StartWorkflowRequest struct {
func (x *StartWorkflowRequest) Reset() {
*x = StartWorkflowRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[70]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[74]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StartWorkflowRequest) String() string {
@@ -4087,8 +4183,8 @@ func (x *StartWorkflowRequest) String() string {
func (*StartWorkflowRequest) ProtoMessage() {}
func (x *StartWorkflowRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[70]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[74]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4100,7 +4196,7 @@ func (x *StartWorkflowRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use StartWorkflowRequest.ProtoReflect.Descriptor instead.
func (*StartWorkflowRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{70}
+ return file_vtadmin_proto_rawDescGZIP(), []int{74}
}
func (x *StartWorkflowRequest) GetClusterId() string {
@@ -4136,11 +4232,9 @@ type StopWorkflowRequest struct {
func (x *StopWorkflowRequest) Reset() {
*x = StopWorkflowRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[71]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[75]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StopWorkflowRequest) String() string {
@@ -4150,8 +4244,8 @@ func (x *StopWorkflowRequest) String() string {
func (*StopWorkflowRequest) ProtoMessage() {}
func (x *StopWorkflowRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[71]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[75]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4163,7 +4257,7 @@ func (x *StopWorkflowRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use StopWorkflowRequest.ProtoReflect.Descriptor instead.
func (*StopWorkflowRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{71}
+ return file_vtadmin_proto_rawDescGZIP(), []int{75}
}
func (x *StopWorkflowRequest) GetClusterId() string {
@@ -4215,11 +4309,9 @@ type GetWorkflowsRequest struct {
func (x *GetWorkflowsRequest) Reset() {
*x = GetWorkflowsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[72]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[76]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetWorkflowsRequest) String() string {
@@ -4229,8 +4321,8 @@ func (x *GetWorkflowsRequest) String() string {
func (*GetWorkflowsRequest) ProtoMessage() {}
func (x *GetWorkflowsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[72]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[76]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4242,7 +4334,7 @@ func (x *GetWorkflowsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetWorkflowsRequest.ProtoReflect.Descriptor instead.
func (*GetWorkflowsRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{72}
+ return file_vtadmin_proto_rawDescGZIP(), []int{76}
}
func (x *GetWorkflowsRequest) GetClusterIds() []string {
@@ -4283,11 +4375,9 @@ type GetWorkflowsResponse struct {
func (x *GetWorkflowsResponse) Reset() {
*x = GetWorkflowsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[73]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[77]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetWorkflowsResponse) String() string {
@@ -4297,8 +4387,8 @@ func (x *GetWorkflowsResponse) String() string {
func (*GetWorkflowsResponse) ProtoMessage() {}
func (x *GetWorkflowsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[73]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[77]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4310,7 +4400,7 @@ func (x *GetWorkflowsResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetWorkflowsResponse.ProtoReflect.Descriptor instead.
func (*GetWorkflowsResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{73}
+ return file_vtadmin_proto_rawDescGZIP(), []int{77}
}
func (x *GetWorkflowsResponse) GetWorkflowsByCluster() map[string]*ClusterWorkflows {
@@ -4331,11 +4421,9 @@ type LaunchSchemaMigrationRequest struct {
func (x *LaunchSchemaMigrationRequest) Reset() {
*x = LaunchSchemaMigrationRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[74]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[78]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *LaunchSchemaMigrationRequest) String() string {
@@ -4345,8 +4433,8 @@ func (x *LaunchSchemaMigrationRequest) String() string {
func (*LaunchSchemaMigrationRequest) ProtoMessage() {}
func (x *LaunchSchemaMigrationRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[74]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[78]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4358,7 +4446,7 @@ func (x *LaunchSchemaMigrationRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use LaunchSchemaMigrationRequest.ProtoReflect.Descriptor instead.
func (*LaunchSchemaMigrationRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{74}
+ return file_vtadmin_proto_rawDescGZIP(), []int{78}
}
func (x *LaunchSchemaMigrationRequest) GetClusterId() string {
@@ -4375,33 +4463,34 @@ func (x *LaunchSchemaMigrationRequest) GetRequest() *vtctldata.LaunchSchemaMigra
return nil
}
-type MoveTablesCreateRequest struct {
+type MaterializeCreateRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- ClusterId string `protobuf:"bytes,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
- Request *vtctldata.MoveTablesCreateRequest `protobuf:"bytes,2,opt,name=request,proto3" json:"request,omitempty"`
+ ClusterId string `protobuf:"bytes,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
+ // TableSettings is a JSON string defining what tables to materialize using
+ // what select statements.
+ TableSettings string `protobuf:"bytes,2,opt,name=table_settings,json=tableSettings,proto3" json:"table_settings,omitempty"`
+ Request *vtctldata.MaterializeCreateRequest `protobuf:"bytes,3,opt,name=request,proto3" json:"request,omitempty"`
}
-func (x *MoveTablesCreateRequest) Reset() {
- *x = MoveTablesCreateRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[75]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+func (x *MaterializeCreateRequest) Reset() {
+ *x = MaterializeCreateRequest{}
+ mi := &file_vtadmin_proto_msgTypes[79]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
-func (x *MoveTablesCreateRequest) String() string {
+func (x *MaterializeCreateRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*MoveTablesCreateRequest) ProtoMessage() {}
+func (*MaterializeCreateRequest) ProtoMessage() {}
-func (x *MoveTablesCreateRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[75]
- if protoimpl.UnsafeEnabled && x != nil {
+func (x *MaterializeCreateRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_vtadmin_proto_msgTypes[79]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4411,56 +4500,57 @@ func (x *MoveTablesCreateRequest) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use MoveTablesCreateRequest.ProtoReflect.Descriptor instead.
-func (*MoveTablesCreateRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{75}
+// Deprecated: Use MaterializeCreateRequest.ProtoReflect.Descriptor instead.
+func (*MaterializeCreateRequest) Descriptor() ([]byte, []int) {
+ return file_vtadmin_proto_rawDescGZIP(), []int{79}
}
-func (x *MoveTablesCreateRequest) GetClusterId() string {
+func (x *MaterializeCreateRequest) GetClusterId() string {
if x != nil {
return x.ClusterId
}
return ""
}
-func (x *MoveTablesCreateRequest) GetRequest() *vtctldata.MoveTablesCreateRequest {
+func (x *MaterializeCreateRequest) GetTableSettings() string {
+ if x != nil {
+ return x.TableSettings
+ }
+ return ""
+}
+
+func (x *MaterializeCreateRequest) GetRequest() *vtctldata.MaterializeCreateRequest {
if x != nil {
return x.Request
}
return nil
}
-type PingTabletRequest struct {
+type MoveTablesCompleteRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // Unique (per cluster) tablet alias of the standard form: "$cell-$uid"
- Alias *topodata.TabletAlias `protobuf:"bytes,1,opt,name=alias,proto3" json:"alias,omitempty"`
- // ClusterIDs is an optional parameter to narrow the scope of the search, if
- // the caller knows which cluster the tablet may be in, or, to disambiguate
- // if multiple clusters have a tablet with the same hostname.
- ClusterIds []string `protobuf:"bytes,2,rep,name=cluster_ids,json=clusterIds,proto3" json:"cluster_ids,omitempty"`
+ ClusterId string `protobuf:"bytes,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
+ Request *vtctldata.MoveTablesCompleteRequest `protobuf:"bytes,2,opt,name=request,proto3" json:"request,omitempty"`
}
-func (x *PingTabletRequest) Reset() {
- *x = PingTabletRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[76]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+func (x *MoveTablesCompleteRequest) Reset() {
+ *x = MoveTablesCompleteRequest{}
+ mi := &file_vtadmin_proto_msgTypes[80]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
-func (x *PingTabletRequest) String() string {
+func (x *MoveTablesCompleteRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*PingTabletRequest) ProtoMessage() {}
+func (*MoveTablesCompleteRequest) ProtoMessage() {}
-func (x *PingTabletRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[76]
- if protoimpl.UnsafeEnabled && x != nil {
+func (x *MoveTablesCompleteRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_vtadmin_proto_msgTypes[80]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4470,16 +4560,126 @@ func (x *PingTabletRequest) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use PingTabletRequest.ProtoReflect.Descriptor instead.
-func (*PingTabletRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{76}
+// Deprecated: Use MoveTablesCompleteRequest.ProtoReflect.Descriptor instead.
+func (*MoveTablesCompleteRequest) Descriptor() ([]byte, []int) {
+ return file_vtadmin_proto_rawDescGZIP(), []int{80}
}
-func (x *PingTabletRequest) GetAlias() *topodata.TabletAlias {
+func (x *MoveTablesCompleteRequest) GetClusterId() string {
if x != nil {
- return x.Alias
+ return x.ClusterId
}
- return nil
+ return ""
+}
+
+func (x *MoveTablesCompleteRequest) GetRequest() *vtctldata.MoveTablesCompleteRequest {
+ if x != nil {
+ return x.Request
+ }
+ return nil
+}
+
+type MoveTablesCreateRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ ClusterId string `protobuf:"bytes,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
+ Request *vtctldata.MoveTablesCreateRequest `protobuf:"bytes,2,opt,name=request,proto3" json:"request,omitempty"`
+}
+
+func (x *MoveTablesCreateRequest) Reset() {
+ *x = MoveTablesCreateRequest{}
+ mi := &file_vtadmin_proto_msgTypes[81]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *MoveTablesCreateRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MoveTablesCreateRequest) ProtoMessage() {}
+
+func (x *MoveTablesCreateRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_vtadmin_proto_msgTypes[81]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use MoveTablesCreateRequest.ProtoReflect.Descriptor instead.
+func (*MoveTablesCreateRequest) Descriptor() ([]byte, []int) {
+ return file_vtadmin_proto_rawDescGZIP(), []int{81}
+}
+
+func (x *MoveTablesCreateRequest) GetClusterId() string {
+ if x != nil {
+ return x.ClusterId
+ }
+ return ""
+}
+
+func (x *MoveTablesCreateRequest) GetRequest() *vtctldata.MoveTablesCreateRequest {
+ if x != nil {
+ return x.Request
+ }
+ return nil
+}
+
+type PingTabletRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Unique (per cluster) tablet alias of the standard form: "$cell-$uid"
+ Alias *topodata.TabletAlias `protobuf:"bytes,1,opt,name=alias,proto3" json:"alias,omitempty"`
+ // ClusterIDs is an optional parameter to narrow the scope of the search, if
+ // the caller knows which cluster the tablet may be in, or, to disambiguate
+ // if multiple clusters have a tablet with the same hostname.
+ ClusterIds []string `protobuf:"bytes,2,rep,name=cluster_ids,json=clusterIds,proto3" json:"cluster_ids,omitempty"`
+}
+
+func (x *PingTabletRequest) Reset() {
+ *x = PingTabletRequest{}
+ mi := &file_vtadmin_proto_msgTypes[82]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *PingTabletRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PingTabletRequest) ProtoMessage() {}
+
+func (x *PingTabletRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_vtadmin_proto_msgTypes[82]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use PingTabletRequest.ProtoReflect.Descriptor instead.
+func (*PingTabletRequest) Descriptor() ([]byte, []int) {
+ return file_vtadmin_proto_rawDescGZIP(), []int{82}
+}
+
+func (x *PingTabletRequest) GetAlias() *topodata.TabletAlias {
+ if x != nil {
+ return x.Alias
+ }
+ return nil
}
func (x *PingTabletRequest) GetClusterIds() []string {
@@ -4500,11 +4700,9 @@ type PingTabletResponse struct {
func (x *PingTabletResponse) Reset() {
*x = PingTabletResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[77]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[83]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *PingTabletResponse) String() string {
@@ -4514,8 +4712,8 @@ func (x *PingTabletResponse) String() string {
func (*PingTabletResponse) ProtoMessage() {}
func (x *PingTabletResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[77]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[83]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4527,7 +4725,7 @@ func (x *PingTabletResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use PingTabletResponse.ProtoReflect.Descriptor instead.
func (*PingTabletResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{77}
+ return file_vtadmin_proto_rawDescGZIP(), []int{83}
}
func (x *PingTabletResponse) GetStatus() string {
@@ -4555,11 +4753,9 @@ type PlannedFailoverShardRequest struct {
func (x *PlannedFailoverShardRequest) Reset() {
*x = PlannedFailoverShardRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[78]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[84]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *PlannedFailoverShardRequest) String() string {
@@ -4569,8 +4765,8 @@ func (x *PlannedFailoverShardRequest) String() string {
func (*PlannedFailoverShardRequest) ProtoMessage() {}
func (x *PlannedFailoverShardRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[78]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[84]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4582,7 +4778,7 @@ func (x *PlannedFailoverShardRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use PlannedFailoverShardRequest.ProtoReflect.Descriptor instead.
func (*PlannedFailoverShardRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{78}
+ return file_vtadmin_proto_rawDescGZIP(), []int{84}
}
func (x *PlannedFailoverShardRequest) GetClusterId() string {
@@ -4617,11 +4813,9 @@ type PlannedFailoverShardResponse struct {
func (x *PlannedFailoverShardResponse) Reset() {
*x = PlannedFailoverShardResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[79]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[85]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *PlannedFailoverShardResponse) String() string {
@@ -4631,8 +4825,8 @@ func (x *PlannedFailoverShardResponse) String() string {
func (*PlannedFailoverShardResponse) ProtoMessage() {}
func (x *PlannedFailoverShardResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[79]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[85]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4644,7 +4838,7 @@ func (x *PlannedFailoverShardResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use PlannedFailoverShardResponse.ProtoReflect.Descriptor instead.
func (*PlannedFailoverShardResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{79}
+ return file_vtadmin_proto_rawDescGZIP(), []int{85}
}
func (x *PlannedFailoverShardResponse) GetCluster() *Cluster {
@@ -4695,11 +4889,9 @@ type RebuildKeyspaceGraphRequest struct {
func (x *RebuildKeyspaceGraphRequest) Reset() {
*x = RebuildKeyspaceGraphRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[80]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[86]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RebuildKeyspaceGraphRequest) String() string {
@@ -4709,8 +4901,8 @@ func (x *RebuildKeyspaceGraphRequest) String() string {
func (*RebuildKeyspaceGraphRequest) ProtoMessage() {}
func (x *RebuildKeyspaceGraphRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[80]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[86]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4722,7 +4914,7 @@ func (x *RebuildKeyspaceGraphRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use RebuildKeyspaceGraphRequest.ProtoReflect.Descriptor instead.
func (*RebuildKeyspaceGraphRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{80}
+ return file_vtadmin_proto_rawDescGZIP(), []int{86}
}
func (x *RebuildKeyspaceGraphRequest) GetClusterId() string {
@@ -4763,11 +4955,9 @@ type RebuildKeyspaceGraphResponse struct {
func (x *RebuildKeyspaceGraphResponse) Reset() {
*x = RebuildKeyspaceGraphResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[81]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[87]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RebuildKeyspaceGraphResponse) String() string {
@@ -4777,8 +4967,8 @@ func (x *RebuildKeyspaceGraphResponse) String() string {
func (*RebuildKeyspaceGraphResponse) ProtoMessage() {}
func (x *RebuildKeyspaceGraphResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[81]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[87]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4790,7 +4980,7 @@ func (x *RebuildKeyspaceGraphResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use RebuildKeyspaceGraphResponse.ProtoReflect.Descriptor instead.
func (*RebuildKeyspaceGraphResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{81}
+ return file_vtadmin_proto_rawDescGZIP(), []int{87}
}
func (x *RebuildKeyspaceGraphResponse) GetStatus() string {
@@ -4811,11 +5001,9 @@ type RefreshStateRequest struct {
func (x *RefreshStateRequest) Reset() {
*x = RefreshStateRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[82]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[88]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RefreshStateRequest) String() string {
@@ -4825,8 +5013,8 @@ func (x *RefreshStateRequest) String() string {
func (*RefreshStateRequest) ProtoMessage() {}
func (x *RefreshStateRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[82]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[88]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4838,7 +5026,7 @@ func (x *RefreshStateRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use RefreshStateRequest.ProtoReflect.Descriptor instead.
func (*RefreshStateRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{82}
+ return file_vtadmin_proto_rawDescGZIP(), []int{88}
}
func (x *RefreshStateRequest) GetAlias() *topodata.TabletAlias {
@@ -4866,11 +5054,9 @@ type RefreshStateResponse struct {
func (x *RefreshStateResponse) Reset() {
*x = RefreshStateResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[83]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[89]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RefreshStateResponse) String() string {
@@ -4880,8 +5066,8 @@ func (x *RefreshStateResponse) String() string {
func (*RefreshStateResponse) ProtoMessage() {}
func (x *RefreshStateResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[83]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[89]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4893,7 +5079,7 @@ func (x *RefreshStateResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use RefreshStateResponse.ProtoReflect.Descriptor instead.
func (*RefreshStateResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{83}
+ return file_vtadmin_proto_rawDescGZIP(), []int{89}
}
func (x *RefreshStateResponse) GetStatus() string {
@@ -4961,11 +5147,9 @@ type ReloadSchemasRequest struct {
func (x *ReloadSchemasRequest) Reset() {
*x = ReloadSchemasRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[84]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[90]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReloadSchemasRequest) String() string {
@@ -4975,8 +5159,8 @@ func (x *ReloadSchemasRequest) String() string {
func (*ReloadSchemasRequest) ProtoMessage() {}
func (x *ReloadSchemasRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[84]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[90]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4988,7 +5172,7 @@ func (x *ReloadSchemasRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ReloadSchemasRequest.ProtoReflect.Descriptor instead.
func (*ReloadSchemasRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{84}
+ return file_vtadmin_proto_rawDescGZIP(), []int{90}
}
func (x *ReloadSchemasRequest) GetKeyspaces() []string {
@@ -5061,11 +5245,9 @@ type ReloadSchemasResponse struct {
func (x *ReloadSchemasResponse) Reset() {
*x = ReloadSchemasResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[85]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[91]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReloadSchemasResponse) String() string {
@@ -5075,8 +5257,8 @@ func (x *ReloadSchemasResponse) String() string {
func (*ReloadSchemasResponse) ProtoMessage() {}
func (x *ReloadSchemasResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[85]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[91]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5088,7 +5270,7 @@ func (x *ReloadSchemasResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ReloadSchemasResponse.ProtoReflect.Descriptor instead.
func (*ReloadSchemasResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{85}
+ return file_vtadmin_proto_rawDescGZIP(), []int{91}
}
func (x *ReloadSchemasResponse) GetKeyspaceResults() []*ReloadSchemasResponse_KeyspaceResult {
@@ -5127,11 +5309,9 @@ type ReloadSchemaShardRequest struct {
func (x *ReloadSchemaShardRequest) Reset() {
*x = ReloadSchemaShardRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[86]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[92]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReloadSchemaShardRequest) String() string {
@@ -5141,8 +5321,8 @@ func (x *ReloadSchemaShardRequest) String() string {
func (*ReloadSchemaShardRequest) ProtoMessage() {}
func (x *ReloadSchemaShardRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[86]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[92]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5154,7 +5334,7 @@ func (x *ReloadSchemaShardRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ReloadSchemaShardRequest.ProtoReflect.Descriptor instead.
func (*ReloadSchemaShardRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{86}
+ return file_vtadmin_proto_rawDescGZIP(), []int{92}
}
func (x *ReloadSchemaShardRequest) GetClusterId() string {
@@ -5209,11 +5389,9 @@ type ReloadSchemaShardResponse struct {
func (x *ReloadSchemaShardResponse) Reset() {
*x = ReloadSchemaShardResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[87]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[93]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReloadSchemaShardResponse) String() string {
@@ -5223,8 +5401,8 @@ func (x *ReloadSchemaShardResponse) String() string {
func (*ReloadSchemaShardResponse) ProtoMessage() {}
func (x *ReloadSchemaShardResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[87]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[93]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5236,7 +5414,7 @@ func (x *ReloadSchemaShardResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ReloadSchemaShardResponse.ProtoReflect.Descriptor instead.
func (*ReloadSchemaShardResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{87}
+ return file_vtadmin_proto_rawDescGZIP(), []int{93}
}
func (x *ReloadSchemaShardResponse) GetEvents() []*logutil.Event {
@@ -5257,11 +5435,9 @@ type RefreshTabletReplicationSourceRequest struct {
func (x *RefreshTabletReplicationSourceRequest) Reset() {
*x = RefreshTabletReplicationSourceRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[88]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[94]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RefreshTabletReplicationSourceRequest) String() string {
@@ -5271,8 +5447,8 @@ func (x *RefreshTabletReplicationSourceRequest) String() string {
func (*RefreshTabletReplicationSourceRequest) ProtoMessage() {}
func (x *RefreshTabletReplicationSourceRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[88]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[94]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5284,7 +5460,7 @@ func (x *RefreshTabletReplicationSourceRequest) ProtoReflect() protoreflect.Mess
// Deprecated: Use RefreshTabletReplicationSourceRequest.ProtoReflect.Descriptor instead.
func (*RefreshTabletReplicationSourceRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{88}
+ return file_vtadmin_proto_rawDescGZIP(), []int{94}
}
func (x *RefreshTabletReplicationSourceRequest) GetAlias() *topodata.TabletAlias {
@@ -5314,11 +5490,9 @@ type RefreshTabletReplicationSourceResponse struct {
func (x *RefreshTabletReplicationSourceResponse) Reset() {
*x = RefreshTabletReplicationSourceResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[89]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[95]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RefreshTabletReplicationSourceResponse) String() string {
@@ -5328,8 +5502,8 @@ func (x *RefreshTabletReplicationSourceResponse) String() string {
func (*RefreshTabletReplicationSourceResponse) ProtoMessage() {}
func (x *RefreshTabletReplicationSourceResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[89]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[95]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5341,7 +5515,7 @@ func (x *RefreshTabletReplicationSourceResponse) ProtoReflect() protoreflect.Mes
// Deprecated: Use RefreshTabletReplicationSourceResponse.ProtoReflect.Descriptor instead.
func (*RefreshTabletReplicationSourceResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{89}
+ return file_vtadmin_proto_rawDescGZIP(), []int{95}
}
func (x *RefreshTabletReplicationSourceResponse) GetKeyspace() string {
@@ -5386,11 +5560,9 @@ type RemoveKeyspaceCellRequest struct {
func (x *RemoveKeyspaceCellRequest) Reset() {
*x = RemoveKeyspaceCellRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[90]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[96]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RemoveKeyspaceCellRequest) String() string {
@@ -5400,8 +5572,8 @@ func (x *RemoveKeyspaceCellRequest) String() string {
func (*RemoveKeyspaceCellRequest) ProtoMessage() {}
func (x *RemoveKeyspaceCellRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[90]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[96]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5413,7 +5585,7 @@ func (x *RemoveKeyspaceCellRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use RemoveKeyspaceCellRequest.ProtoReflect.Descriptor instead.
func (*RemoveKeyspaceCellRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{90}
+ return file_vtadmin_proto_rawDescGZIP(), []int{96}
}
func (x *RemoveKeyspaceCellRequest) GetClusterId() string {
@@ -5461,11 +5633,9 @@ type RemoveKeyspaceCellResponse struct {
func (x *RemoveKeyspaceCellResponse) Reset() {
*x = RemoveKeyspaceCellResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[91]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[97]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RemoveKeyspaceCellResponse) String() string {
@@ -5475,8 +5645,8 @@ func (x *RemoveKeyspaceCellResponse) String() string {
func (*RemoveKeyspaceCellResponse) ProtoMessage() {}
func (x *RemoveKeyspaceCellResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[91]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[97]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5488,7 +5658,7 @@ func (x *RemoveKeyspaceCellResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use RemoveKeyspaceCellResponse.ProtoReflect.Descriptor instead.
func (*RemoveKeyspaceCellResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{91}
+ return file_vtadmin_proto_rawDescGZIP(), []int{97}
}
func (x *RemoveKeyspaceCellResponse) GetStatus() string {
@@ -5509,11 +5679,9 @@ type RetrySchemaMigrationRequest struct {
func (x *RetrySchemaMigrationRequest) Reset() {
*x = RetrySchemaMigrationRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[92]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[98]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RetrySchemaMigrationRequest) String() string {
@@ -5523,8 +5691,8 @@ func (x *RetrySchemaMigrationRequest) String() string {
func (*RetrySchemaMigrationRequest) ProtoMessage() {}
func (x *RetrySchemaMigrationRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[92]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[98]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5536,7 +5704,7 @@ func (x *RetrySchemaMigrationRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use RetrySchemaMigrationRequest.ProtoReflect.Descriptor instead.
func (*RetrySchemaMigrationRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{92}
+ return file_vtadmin_proto_rawDescGZIP(), []int{98}
}
func (x *RetrySchemaMigrationRequest) GetClusterId() string {
@@ -5564,11 +5732,9 @@ type RunHealthCheckRequest struct {
func (x *RunHealthCheckRequest) Reset() {
*x = RunHealthCheckRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[93]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[99]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RunHealthCheckRequest) String() string {
@@ -5578,8 +5744,8 @@ func (x *RunHealthCheckRequest) String() string {
func (*RunHealthCheckRequest) ProtoMessage() {}
func (x *RunHealthCheckRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[93]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[99]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5591,7 +5757,7 @@ func (x *RunHealthCheckRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use RunHealthCheckRequest.ProtoReflect.Descriptor instead.
func (*RunHealthCheckRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{93}
+ return file_vtadmin_proto_rawDescGZIP(), []int{99}
}
func (x *RunHealthCheckRequest) GetAlias() *topodata.TabletAlias {
@@ -5619,11 +5785,9 @@ type RunHealthCheckResponse struct {
func (x *RunHealthCheckResponse) Reset() {
*x = RunHealthCheckResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[94]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[100]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RunHealthCheckResponse) String() string {
@@ -5633,8 +5797,8 @@ func (x *RunHealthCheckResponse) String() string {
func (*RunHealthCheckResponse) ProtoMessage() {}
func (x *RunHealthCheckResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[94]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[100]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5646,7 +5810,7 @@ func (x *RunHealthCheckResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use RunHealthCheckResponse.ProtoReflect.Descriptor instead.
func (*RunHealthCheckResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{94}
+ return file_vtadmin_proto_rawDescGZIP(), []int{100}
}
func (x *RunHealthCheckResponse) GetStatus() string {
@@ -5663,22 +5827,73 @@ func (x *RunHealthCheckResponse) GetCluster() *Cluster {
return nil
}
-type SetReadOnlyRequest struct {
+type ReshardCreateRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- Alias *topodata.TabletAlias `protobuf:"bytes,1,opt,name=alias,proto3" json:"alias,omitempty"`
- ClusterIds []string `protobuf:"bytes,2,rep,name=cluster_ids,json=clusterIds,proto3" json:"cluster_ids,omitempty"`
+ ClusterId string `protobuf:"bytes,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
+ Request *vtctldata.ReshardCreateRequest `protobuf:"bytes,2,opt,name=request,proto3" json:"request,omitempty"`
}
-func (x *SetReadOnlyRequest) Reset() {
- *x = SetReadOnlyRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[95]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
+func (x *ReshardCreateRequest) Reset() {
+ *x = ReshardCreateRequest{}
+ mi := &file_vtadmin_proto_msgTypes[101]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ReshardCreateRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ReshardCreateRequest) ProtoMessage() {}
+
+func (x *ReshardCreateRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_vtadmin_proto_msgTypes[101]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ReshardCreateRequest.ProtoReflect.Descriptor instead.
+func (*ReshardCreateRequest) Descriptor() ([]byte, []int) {
+ return file_vtadmin_proto_rawDescGZIP(), []int{101}
+}
+
+func (x *ReshardCreateRequest) GetClusterId() string {
+ if x != nil {
+ return x.ClusterId
+ }
+ return ""
+}
+
+func (x *ReshardCreateRequest) GetRequest() *vtctldata.ReshardCreateRequest {
+ if x != nil {
+ return x.Request
}
+ return nil
+}
+
+type SetReadOnlyRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Alias *topodata.TabletAlias `protobuf:"bytes,1,opt,name=alias,proto3" json:"alias,omitempty"`
+ ClusterIds []string `protobuf:"bytes,2,rep,name=cluster_ids,json=clusterIds,proto3" json:"cluster_ids,omitempty"`
+}
+
+func (x *SetReadOnlyRequest) Reset() {
+ *x = SetReadOnlyRequest{}
+ mi := &file_vtadmin_proto_msgTypes[102]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SetReadOnlyRequest) String() string {
@@ -5688,8 +5903,8 @@ func (x *SetReadOnlyRequest) String() string {
func (*SetReadOnlyRequest) ProtoMessage() {}
func (x *SetReadOnlyRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[95]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[102]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5701,7 +5916,7 @@ func (x *SetReadOnlyRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use SetReadOnlyRequest.ProtoReflect.Descriptor instead.
func (*SetReadOnlyRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{95}
+ return file_vtadmin_proto_rawDescGZIP(), []int{102}
}
func (x *SetReadOnlyRequest) GetAlias() *topodata.TabletAlias {
@@ -5726,11 +5941,9 @@ type SetReadOnlyResponse struct {
func (x *SetReadOnlyResponse) Reset() {
*x = SetReadOnlyResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[96]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[103]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SetReadOnlyResponse) String() string {
@@ -5740,8 +5953,8 @@ func (x *SetReadOnlyResponse) String() string {
func (*SetReadOnlyResponse) ProtoMessage() {}
func (x *SetReadOnlyResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[96]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[103]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5753,7 +5966,7 @@ func (x *SetReadOnlyResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use SetReadOnlyResponse.ProtoReflect.Descriptor instead.
func (*SetReadOnlyResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{96}
+ return file_vtadmin_proto_rawDescGZIP(), []int{103}
}
type SetReadWriteRequest struct {
@@ -5767,11 +5980,9 @@ type SetReadWriteRequest struct {
func (x *SetReadWriteRequest) Reset() {
*x = SetReadWriteRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[97]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[104]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SetReadWriteRequest) String() string {
@@ -5781,8 +5992,8 @@ func (x *SetReadWriteRequest) String() string {
func (*SetReadWriteRequest) ProtoMessage() {}
func (x *SetReadWriteRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[97]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[104]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5794,7 +6005,7 @@ func (x *SetReadWriteRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use SetReadWriteRequest.ProtoReflect.Descriptor instead.
func (*SetReadWriteRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{97}
+ return file_vtadmin_proto_rawDescGZIP(), []int{104}
}
func (x *SetReadWriteRequest) GetAlias() *topodata.TabletAlias {
@@ -5819,11 +6030,9 @@ type SetReadWriteResponse struct {
func (x *SetReadWriteResponse) Reset() {
*x = SetReadWriteResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[98]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[105]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SetReadWriteResponse) String() string {
@@ -5833,8 +6042,8 @@ func (x *SetReadWriteResponse) String() string {
func (*SetReadWriteResponse) ProtoMessage() {}
func (x *SetReadWriteResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[98]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[105]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5846,7 +6055,7 @@ func (x *SetReadWriteResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use SetReadWriteResponse.ProtoReflect.Descriptor instead.
func (*SetReadWriteResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{98}
+ return file_vtadmin_proto_rawDescGZIP(), []int{105}
}
type StartReplicationRequest struct {
@@ -5860,11 +6069,9 @@ type StartReplicationRequest struct {
func (x *StartReplicationRequest) Reset() {
*x = StartReplicationRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[99]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[106]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StartReplicationRequest) String() string {
@@ -5874,8 +6081,8 @@ func (x *StartReplicationRequest) String() string {
func (*StartReplicationRequest) ProtoMessage() {}
func (x *StartReplicationRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[99]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[106]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5887,7 +6094,7 @@ func (x *StartReplicationRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use StartReplicationRequest.ProtoReflect.Descriptor instead.
func (*StartReplicationRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{99}
+ return file_vtadmin_proto_rawDescGZIP(), []int{106}
}
func (x *StartReplicationRequest) GetAlias() *topodata.TabletAlias {
@@ -5915,11 +6122,9 @@ type StartReplicationResponse struct {
func (x *StartReplicationResponse) Reset() {
*x = StartReplicationResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[100]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[107]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StartReplicationResponse) String() string {
@@ -5929,8 +6134,8 @@ func (x *StartReplicationResponse) String() string {
func (*StartReplicationResponse) ProtoMessage() {}
func (x *StartReplicationResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[100]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[107]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5942,7 +6147,7 @@ func (x *StartReplicationResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use StartReplicationResponse.ProtoReflect.Descriptor instead.
func (*StartReplicationResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{100}
+ return file_vtadmin_proto_rawDescGZIP(), []int{107}
}
func (x *StartReplicationResponse) GetStatus() string {
@@ -5970,11 +6175,9 @@ type StopReplicationRequest struct {
func (x *StopReplicationRequest) Reset() {
*x = StopReplicationRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[101]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[108]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StopReplicationRequest) String() string {
@@ -5984,8 +6187,8 @@ func (x *StopReplicationRequest) String() string {
func (*StopReplicationRequest) ProtoMessage() {}
func (x *StopReplicationRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[101]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[108]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5997,7 +6200,7 @@ func (x *StopReplicationRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use StopReplicationRequest.ProtoReflect.Descriptor instead.
func (*StopReplicationRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{101}
+ return file_vtadmin_proto_rawDescGZIP(), []int{108}
}
func (x *StopReplicationRequest) GetAlias() *topodata.TabletAlias {
@@ -6025,11 +6228,9 @@ type StopReplicationResponse struct {
func (x *StopReplicationResponse) Reset() {
*x = StopReplicationResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[102]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[109]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StopReplicationResponse) String() string {
@@ -6039,8 +6240,8 @@ func (x *StopReplicationResponse) String() string {
func (*StopReplicationResponse) ProtoMessage() {}
func (x *StopReplicationResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[102]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[109]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6052,7 +6253,7 @@ func (x *StopReplicationResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use StopReplicationResponse.ProtoReflect.Descriptor instead.
func (*StopReplicationResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{102}
+ return file_vtadmin_proto_rawDescGZIP(), []int{109}
}
func (x *StopReplicationResponse) GetStatus() string {
@@ -6082,11 +6283,9 @@ type TabletExternallyPromotedRequest struct {
func (x *TabletExternallyPromotedRequest) Reset() {
*x = TabletExternallyPromotedRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[103]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[110]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *TabletExternallyPromotedRequest) String() string {
@@ -6096,8 +6295,8 @@ func (x *TabletExternallyPromotedRequest) String() string {
func (*TabletExternallyPromotedRequest) ProtoMessage() {}
func (x *TabletExternallyPromotedRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[103]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[110]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6109,7 +6308,7 @@ func (x *TabletExternallyPromotedRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use TabletExternallyPromotedRequest.ProtoReflect.Descriptor instead.
func (*TabletExternallyPromotedRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{103}
+ return file_vtadmin_proto_rawDescGZIP(), []int{110}
}
func (x *TabletExternallyPromotedRequest) GetAlias() *topodata.TabletAlias {
@@ -6140,11 +6339,9 @@ type TabletExternallyPromotedResponse struct {
func (x *TabletExternallyPromotedResponse) Reset() {
*x = TabletExternallyPromotedResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[104]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[111]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *TabletExternallyPromotedResponse) String() string {
@@ -6154,8 +6351,8 @@ func (x *TabletExternallyPromotedResponse) String() string {
func (*TabletExternallyPromotedResponse) ProtoMessage() {}
func (x *TabletExternallyPromotedResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[104]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[111]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6167,7 +6364,7 @@ func (x *TabletExternallyPromotedResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use TabletExternallyPromotedResponse.ProtoReflect.Descriptor instead.
func (*TabletExternallyPromotedResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{104}
+ return file_vtadmin_proto_rawDescGZIP(), []int{111}
}
func (x *TabletExternallyPromotedResponse) GetCluster() *Cluster {
@@ -6216,11 +6413,9 @@ type TabletExternallyReparentedRequest struct {
func (x *TabletExternallyReparentedRequest) Reset() {
*x = TabletExternallyReparentedRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[105]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[112]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *TabletExternallyReparentedRequest) String() string {
@@ -6230,8 +6425,8 @@ func (x *TabletExternallyReparentedRequest) String() string {
func (*TabletExternallyReparentedRequest) ProtoMessage() {}
func (x *TabletExternallyReparentedRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[105]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[112]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6243,7 +6438,7 @@ func (x *TabletExternallyReparentedRequest) ProtoReflect() protoreflect.Message
// Deprecated: Use TabletExternallyReparentedRequest.ProtoReflect.Descriptor instead.
func (*TabletExternallyReparentedRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{105}
+ return file_vtadmin_proto_rawDescGZIP(), []int{112}
}
func (x *TabletExternallyReparentedRequest) GetAlias() *topodata.TabletAlias {
@@ -6271,11 +6466,9 @@ type ValidateRequest struct {
func (x *ValidateRequest) Reset() {
*x = ValidateRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[106]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[113]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ValidateRequest) String() string {
@@ -6285,8 +6478,8 @@ func (x *ValidateRequest) String() string {
func (*ValidateRequest) ProtoMessage() {}
func (x *ValidateRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[106]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[113]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6298,7 +6491,7 @@ func (x *ValidateRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateRequest.ProtoReflect.Descriptor instead.
func (*ValidateRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{106}
+ return file_vtadmin_proto_rawDescGZIP(), []int{113}
}
func (x *ValidateRequest) GetClusterId() string {
@@ -6327,11 +6520,9 @@ type ValidateKeyspaceRequest struct {
func (x *ValidateKeyspaceRequest) Reset() {
*x = ValidateKeyspaceRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[107]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[114]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ValidateKeyspaceRequest) String() string {
@@ -6341,8 +6532,8 @@ func (x *ValidateKeyspaceRequest) String() string {
func (*ValidateKeyspaceRequest) ProtoMessage() {}
func (x *ValidateKeyspaceRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[107]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[114]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6354,7 +6545,7 @@ func (x *ValidateKeyspaceRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateKeyspaceRequest.ProtoReflect.Descriptor instead.
func (*ValidateKeyspaceRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{107}
+ return file_vtadmin_proto_rawDescGZIP(), []int{114}
}
func (x *ValidateKeyspaceRequest) GetClusterId() string {
@@ -6389,11 +6580,9 @@ type ValidateSchemaKeyspaceRequest struct {
func (x *ValidateSchemaKeyspaceRequest) Reset() {
*x = ValidateSchemaKeyspaceRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[108]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[115]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ValidateSchemaKeyspaceRequest) String() string {
@@ -6403,8 +6592,8 @@ func (x *ValidateSchemaKeyspaceRequest) String() string {
func (*ValidateSchemaKeyspaceRequest) ProtoMessage() {}
func (x *ValidateSchemaKeyspaceRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[108]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[115]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6416,7 +6605,7 @@ func (x *ValidateSchemaKeyspaceRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateSchemaKeyspaceRequest.ProtoReflect.Descriptor instead.
func (*ValidateSchemaKeyspaceRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{108}
+ return file_vtadmin_proto_rawDescGZIP(), []int{115}
}
func (x *ValidateSchemaKeyspaceRequest) GetClusterId() string {
@@ -6446,11 +6635,9 @@ type ValidateShardRequest struct {
func (x *ValidateShardRequest) Reset() {
*x = ValidateShardRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[109]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[116]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ValidateShardRequest) String() string {
@@ -6460,8 +6647,8 @@ func (x *ValidateShardRequest) String() string {
func (*ValidateShardRequest) ProtoMessage() {}
func (x *ValidateShardRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[109]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[116]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6473,7 +6660,7 @@ func (x *ValidateShardRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateShardRequest.ProtoReflect.Descriptor instead.
func (*ValidateShardRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{109}
+ return file_vtadmin_proto_rawDescGZIP(), []int{116}
}
func (x *ValidateShardRequest) GetClusterId() string {
@@ -6515,11 +6702,9 @@ type ValidateVersionKeyspaceRequest struct {
func (x *ValidateVersionKeyspaceRequest) Reset() {
*x = ValidateVersionKeyspaceRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[110]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[117]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ValidateVersionKeyspaceRequest) String() string {
@@ -6529,8 +6714,8 @@ func (x *ValidateVersionKeyspaceRequest) String() string {
func (*ValidateVersionKeyspaceRequest) ProtoMessage() {}
func (x *ValidateVersionKeyspaceRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[110]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[117]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6542,7 +6727,7 @@ func (x *ValidateVersionKeyspaceRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateVersionKeyspaceRequest.ProtoReflect.Descriptor instead.
func (*ValidateVersionKeyspaceRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{110}
+ return file_vtadmin_proto_rawDescGZIP(), []int{117}
}
func (x *ValidateVersionKeyspaceRequest) GetClusterId() string {
@@ -6571,11 +6756,9 @@ type ValidateVersionShardRequest struct {
func (x *ValidateVersionShardRequest) Reset() {
*x = ValidateVersionShardRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[111]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[118]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ValidateVersionShardRequest) String() string {
@@ -6585,8 +6768,8 @@ func (x *ValidateVersionShardRequest) String() string {
func (*ValidateVersionShardRequest) ProtoMessage() {}
func (x *ValidateVersionShardRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[111]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[118]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6598,7 +6781,7 @@ func (x *ValidateVersionShardRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateVersionShardRequest.ProtoReflect.Descriptor instead.
func (*ValidateVersionShardRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{111}
+ return file_vtadmin_proto_rawDescGZIP(), []int{118}
}
func (x *ValidateVersionShardRequest) GetClusterId() string {
@@ -6622,34 +6805,31 @@ func (x *ValidateVersionShardRequest) GetShard() string {
return ""
}
-type VTExplainRequest struct {
+type VDiffCreateRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"`
- Keyspace string `protobuf:"bytes,2,opt,name=keyspace,proto3" json:"keyspace,omitempty"`
- Sql string `protobuf:"bytes,3,opt,name=sql,proto3" json:"sql,omitempty"`
+ ClusterId string `protobuf:"bytes,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
+ Request *vtctldata.VDiffCreateRequest `protobuf:"bytes,2,opt,name=request,proto3" json:"request,omitempty"`
}
-func (x *VTExplainRequest) Reset() {
- *x = VTExplainRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[112]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+func (x *VDiffCreateRequest) Reset() {
+ *x = VDiffCreateRequest{}
+ mi := &file_vtadmin_proto_msgTypes[119]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
-func (x *VTExplainRequest) String() string {
+func (x *VDiffCreateRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*VTExplainRequest) ProtoMessage() {}
+func (*VDiffCreateRequest) ProtoMessage() {}
-func (x *VTExplainRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[112]
- if protoimpl.UnsafeEnabled && x != nil {
+func (x *VDiffCreateRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_vtadmin_proto_msgTypes[119]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6659,58 +6839,50 @@ func (x *VTExplainRequest) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use VTExplainRequest.ProtoReflect.Descriptor instead.
-func (*VTExplainRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{112}
-}
-
-func (x *VTExplainRequest) GetCluster() string {
- if x != nil {
- return x.Cluster
- }
- return ""
+// Deprecated: Use VDiffCreateRequest.ProtoReflect.Descriptor instead.
+func (*VDiffCreateRequest) Descriptor() ([]byte, []int) {
+ return file_vtadmin_proto_rawDescGZIP(), []int{119}
}
-func (x *VTExplainRequest) GetKeyspace() string {
+func (x *VDiffCreateRequest) GetClusterId() string {
if x != nil {
- return x.Keyspace
+ return x.ClusterId
}
return ""
}
-func (x *VTExplainRequest) GetSql() string {
+func (x *VDiffCreateRequest) GetRequest() *vtctldata.VDiffCreateRequest {
if x != nil {
- return x.Sql
+ return x.Request
}
- return ""
+ return nil
}
-type VTExplainResponse struct {
+type VDiffShowRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- Response string `protobuf:"bytes,1,opt,name=response,proto3" json:"response,omitempty"`
+ ClusterId string `protobuf:"bytes,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
+ Request *vtctldata.VDiffShowRequest `protobuf:"bytes,2,opt,name=request,proto3" json:"request,omitempty"`
}
-func (x *VTExplainResponse) Reset() {
- *x = VTExplainResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[113]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+func (x *VDiffShowRequest) Reset() {
+ *x = VDiffShowRequest{}
+ mi := &file_vtadmin_proto_msgTypes[120]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
-func (x *VTExplainResponse) String() string {
+func (x *VDiffShowRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*VTExplainResponse) ProtoMessage() {}
+func (*VDiffShowRequest) ProtoMessage() {}
-func (x *VTExplainResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[113]
- if protoimpl.UnsafeEnabled && x != nil {
+func (x *VDiffShowRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_vtadmin_proto_msgTypes[120]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6720,45 +6892,50 @@ func (x *VTExplainResponse) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use VTExplainResponse.ProtoReflect.Descriptor instead.
-func (*VTExplainResponse) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{113}
+// Deprecated: Use VDiffShowRequest.ProtoReflect.Descriptor instead.
+func (*VDiffShowRequest) Descriptor() ([]byte, []int) {
+ return file_vtadmin_proto_rawDescGZIP(), []int{120}
}
-func (x *VTExplainResponse) GetResponse() string {
+func (x *VDiffShowRequest) GetClusterId() string {
if x != nil {
- return x.Response
+ return x.ClusterId
}
return ""
}
-type Schema_ShardTableSize struct {
+func (x *VDiffShowRequest) GetRequest() *vtctldata.VDiffShowRequest {
+ if x != nil {
+ return x.Request
+ }
+ return nil
+}
+
+type VDiffProgress struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- RowCount uint64 `protobuf:"varint,1,opt,name=row_count,json=rowCount,proto3" json:"row_count,omitempty"`
- DataLength uint64 `protobuf:"varint,2,opt,name=data_length,json=dataLength,proto3" json:"data_length,omitempty"`
+ Percentage float64 `protobuf:"fixed64,1,opt,name=percentage,proto3" json:"percentage,omitempty"`
+ Eta string `protobuf:"bytes,2,opt,name=eta,proto3" json:"eta,omitempty"`
}
-func (x *Schema_ShardTableSize) Reset() {
- *x = Schema_ShardTableSize{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[117]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+func (x *VDiffProgress) Reset() {
+ *x = VDiffProgress{}
+ mi := &file_vtadmin_proto_msgTypes[121]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
-func (x *Schema_ShardTableSize) String() string {
+func (x *VDiffProgress) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*Schema_ShardTableSize) ProtoMessage() {}
+func (*VDiffProgress) ProtoMessage() {}
-func (x *Schema_ShardTableSize) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[117]
- if protoimpl.UnsafeEnabled && x != nil {
+func (x *VDiffProgress) ProtoReflect() protoreflect.Message {
+ mi := &file_vtadmin_proto_msgTypes[121]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6768,55 +6945,342 @@ func (x *Schema_ShardTableSize) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use Schema_ShardTableSize.ProtoReflect.Descriptor instead.
-func (*Schema_ShardTableSize) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{7, 1}
+// Deprecated: Use VDiffProgress.ProtoReflect.Descriptor instead.
+func (*VDiffProgress) Descriptor() ([]byte, []int) {
+ return file_vtadmin_proto_rawDescGZIP(), []int{121}
}
-func (x *Schema_ShardTableSize) GetRowCount() uint64 {
+func (x *VDiffProgress) GetPercentage() float64 {
if x != nil {
- return x.RowCount
+ return x.Percentage
}
return 0
}
-func (x *Schema_ShardTableSize) GetDataLength() uint64 {
+func (x *VDiffProgress) GetEta() string {
if x != nil {
- return x.DataLength
+ return x.Eta
}
- return 0
+ return ""
}
-// TableSize aggregates table size information across all shards containing
-// in the given keyspace and cluster, as well as per-shard size information.
-type Schema_TableSize struct {
+type VDiffShardReport struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- RowCount uint64 `protobuf:"varint,1,opt,name=row_count,json=rowCount,proto3" json:"row_count,omitempty"`
- DataLength uint64 `protobuf:"varint,2,opt,name=data_length,json=dataLength,proto3" json:"data_length,omitempty"`
- ByShard map[string]*Schema_ShardTableSize `protobuf:"bytes,3,rep,name=by_shard,json=byShard,proto3" json:"by_shard,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ State string `protobuf:"bytes,1,opt,name=state,proto3" json:"state,omitempty"`
+ RowsCompared int64 `protobuf:"varint,2,opt,name=rows_compared,json=rowsCompared,proto3" json:"rows_compared,omitempty"`
+ HasMismatch bool `protobuf:"varint,3,opt,name=has_mismatch,json=hasMismatch,proto3" json:"has_mismatch,omitempty"`
+ StartedAt string `protobuf:"bytes,4,opt,name=started_at,json=startedAt,proto3" json:"started_at,omitempty"`
+ CompletedAt string `protobuf:"bytes,5,opt,name=completed_at,json=completedAt,proto3" json:"completed_at,omitempty"`
+ Progress *VDiffProgress `protobuf:"bytes,6,opt,name=progress,proto3" json:"progress,omitempty"`
}
-func (x *Schema_TableSize) Reset() {
- *x = Schema_TableSize{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[118]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+func (x *VDiffShardReport) Reset() {
+ *x = VDiffShardReport{}
+ mi := &file_vtadmin_proto_msgTypes[122]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
-func (x *Schema_TableSize) String() string {
+func (x *VDiffShardReport) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*Schema_TableSize) ProtoMessage() {}
+func (*VDiffShardReport) ProtoMessage() {}
+
+func (x *VDiffShardReport) ProtoReflect() protoreflect.Message {
+ mi := &file_vtadmin_proto_msgTypes[122]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use VDiffShardReport.ProtoReflect.Descriptor instead.
+func (*VDiffShardReport) Descriptor() ([]byte, []int) {
+ return file_vtadmin_proto_rawDescGZIP(), []int{122}
+}
+
+func (x *VDiffShardReport) GetState() string {
+ if x != nil {
+ return x.State
+ }
+ return ""
+}
+
+func (x *VDiffShardReport) GetRowsCompared() int64 {
+ if x != nil {
+ return x.RowsCompared
+ }
+ return 0
+}
+
+func (x *VDiffShardReport) GetHasMismatch() bool {
+ if x != nil {
+ return x.HasMismatch
+ }
+ return false
+}
+
+func (x *VDiffShardReport) GetStartedAt() string {
+ if x != nil {
+ return x.StartedAt
+ }
+ return ""
+}
+
+func (x *VDiffShardReport) GetCompletedAt() string {
+ if x != nil {
+ return x.CompletedAt
+ }
+ return ""
+}
+
+func (x *VDiffShardReport) GetProgress() *VDiffProgress {
+ if x != nil {
+ return x.Progress
+ }
+ return nil
+}
+
+type VDiffShowResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ ShardReport map[string]*VDiffShardReport `protobuf:"bytes,1,rep,name=shard_report,json=shardReport,proto3" json:"shard_report,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+}
+
+func (x *VDiffShowResponse) Reset() {
+ *x = VDiffShowResponse{}
+ mi := &file_vtadmin_proto_msgTypes[123]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *VDiffShowResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*VDiffShowResponse) ProtoMessage() {}
+
+func (x *VDiffShowResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_vtadmin_proto_msgTypes[123]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use VDiffShowResponse.ProtoReflect.Descriptor instead.
+func (*VDiffShowResponse) Descriptor() ([]byte, []int) {
+ return file_vtadmin_proto_rawDescGZIP(), []int{123}
+}
+
+func (x *VDiffShowResponse) GetShardReport() map[string]*VDiffShardReport {
+ if x != nil {
+ return x.ShardReport
+ }
+ return nil
+}
+
+type VTExplainRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"`
+ Keyspace string `protobuf:"bytes,2,opt,name=keyspace,proto3" json:"keyspace,omitempty"`
+ Sql string `protobuf:"bytes,3,opt,name=sql,proto3" json:"sql,omitempty"`
+}
+
+func (x *VTExplainRequest) Reset() {
+ *x = VTExplainRequest{}
+ mi := &file_vtadmin_proto_msgTypes[124]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *VTExplainRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*VTExplainRequest) ProtoMessage() {}
+
+func (x *VTExplainRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_vtadmin_proto_msgTypes[124]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use VTExplainRequest.ProtoReflect.Descriptor instead.
+func (*VTExplainRequest) Descriptor() ([]byte, []int) {
+ return file_vtadmin_proto_rawDescGZIP(), []int{124}
+}
+
+func (x *VTExplainRequest) GetCluster() string {
+ if x != nil {
+ return x.Cluster
+ }
+ return ""
+}
+
+func (x *VTExplainRequest) GetKeyspace() string {
+ if x != nil {
+ return x.Keyspace
+ }
+ return ""
+}
+
+func (x *VTExplainRequest) GetSql() string {
+ if x != nil {
+ return x.Sql
+ }
+ return ""
+}
+
+type VTExplainResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Response string `protobuf:"bytes,1,opt,name=response,proto3" json:"response,omitempty"`
+}
+
+func (x *VTExplainResponse) Reset() {
+ *x = VTExplainResponse{}
+ mi := &file_vtadmin_proto_msgTypes[125]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *VTExplainResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*VTExplainResponse) ProtoMessage() {}
+
+func (x *VTExplainResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_vtadmin_proto_msgTypes[125]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use VTExplainResponse.ProtoReflect.Descriptor instead.
+func (*VTExplainResponse) Descriptor() ([]byte, []int) {
+ return file_vtadmin_proto_rawDescGZIP(), []int{125}
+}
+
+func (x *VTExplainResponse) GetResponse() string {
+ if x != nil {
+ return x.Response
+ }
+ return ""
+}
+
+type Schema_ShardTableSize struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ RowCount uint64 `protobuf:"varint,1,opt,name=row_count,json=rowCount,proto3" json:"row_count,omitempty"`
+ DataLength uint64 `protobuf:"varint,2,opt,name=data_length,json=dataLength,proto3" json:"data_length,omitempty"`
+}
+
+func (x *Schema_ShardTableSize) Reset() {
+ *x = Schema_ShardTableSize{}
+ mi := &file_vtadmin_proto_msgTypes[129]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Schema_ShardTableSize) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Schema_ShardTableSize) ProtoMessage() {}
+
+func (x *Schema_ShardTableSize) ProtoReflect() protoreflect.Message {
+ mi := &file_vtadmin_proto_msgTypes[129]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Schema_ShardTableSize.ProtoReflect.Descriptor instead.
+func (*Schema_ShardTableSize) Descriptor() ([]byte, []int) {
+ return file_vtadmin_proto_rawDescGZIP(), []int{7, 1}
+}
+
+func (x *Schema_ShardTableSize) GetRowCount() uint64 {
+ if x != nil {
+ return x.RowCount
+ }
+ return 0
+}
+
+func (x *Schema_ShardTableSize) GetDataLength() uint64 {
+ if x != nil {
+ return x.DataLength
+ }
+ return 0
+}
+
+// TableSize aggregates table size information across all shards containing
+// in the given keyspace and cluster, as well as per-shard size information.
+type Schema_TableSize struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ RowCount uint64 `protobuf:"varint,1,opt,name=row_count,json=rowCount,proto3" json:"row_count,omitempty"`
+ DataLength uint64 `protobuf:"varint,2,opt,name=data_length,json=dataLength,proto3" json:"data_length,omitempty"`
+ ByShard map[string]*Schema_ShardTableSize `protobuf:"bytes,3,rep,name=by_shard,json=byShard,proto3" json:"by_shard,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+}
+
+func (x *Schema_TableSize) Reset() {
+ *x = Schema_TableSize{}
+ mi := &file_vtadmin_proto_msgTypes[130]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Schema_TableSize) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Schema_TableSize) ProtoMessage() {}
func (x *Schema_TableSize) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[118]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[130]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6863,11 +7327,9 @@ type GetSchemaMigrationsRequest_ClusterRequest struct {
func (x *GetSchemaMigrationsRequest_ClusterRequest) Reset() {
*x = GetSchemaMigrationsRequest_ClusterRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[120]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[132]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSchemaMigrationsRequest_ClusterRequest) String() string {
@@ -6877,8 +7339,8 @@ func (x *GetSchemaMigrationsRequest_ClusterRequest) String() string {
func (*GetSchemaMigrationsRequest_ClusterRequest) ProtoMessage() {}
func (x *GetSchemaMigrationsRequest_ClusterRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[120]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[132]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6890,7 +7352,7 @@ func (x *GetSchemaMigrationsRequest_ClusterRequest) ProtoReflect() protoreflect.
// Deprecated: Use GetSchemaMigrationsRequest_ClusterRequest.ProtoReflect.Descriptor instead.
func (*GetSchemaMigrationsRequest_ClusterRequest) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{47, 0}
+ return file_vtadmin_proto_rawDescGZIP(), []int{50, 0}
}
func (x *GetSchemaMigrationsRequest_ClusterRequest) GetClusterId() string {
@@ -6924,11 +7386,9 @@ type ReloadSchemasResponse_KeyspaceResult struct {
func (x *ReloadSchemasResponse_KeyspaceResult) Reset() {
*x = ReloadSchemasResponse_KeyspaceResult{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[123]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[135]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReloadSchemasResponse_KeyspaceResult) String() string {
@@ -6938,8 +7398,8 @@ func (x *ReloadSchemasResponse_KeyspaceResult) String() string {
func (*ReloadSchemasResponse_KeyspaceResult) ProtoMessage() {}
func (x *ReloadSchemasResponse_KeyspaceResult) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[123]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[135]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6951,7 +7411,7 @@ func (x *ReloadSchemasResponse_KeyspaceResult) ProtoReflect() protoreflect.Messa
// Deprecated: Use ReloadSchemasResponse_KeyspaceResult.ProtoReflect.Descriptor instead.
func (*ReloadSchemasResponse_KeyspaceResult) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{85, 0}
+ return file_vtadmin_proto_rawDescGZIP(), []int{91, 0}
}
func (x *ReloadSchemasResponse_KeyspaceResult) GetKeyspace() *Keyspace {
@@ -6985,11 +7445,9 @@ type ReloadSchemasResponse_ShardResult struct {
func (x *ReloadSchemasResponse_ShardResult) Reset() {
*x = ReloadSchemasResponse_ShardResult{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[124]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[136]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReloadSchemasResponse_ShardResult) String() string {
@@ -6999,8 +7457,8 @@ func (x *ReloadSchemasResponse_ShardResult) String() string {
func (*ReloadSchemasResponse_ShardResult) ProtoMessage() {}
func (x *ReloadSchemasResponse_ShardResult) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[124]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[136]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7012,7 +7470,7 @@ func (x *ReloadSchemasResponse_ShardResult) ProtoReflect() protoreflect.Message
// Deprecated: Use ReloadSchemasResponse_ShardResult.ProtoReflect.Descriptor instead.
func (*ReloadSchemasResponse_ShardResult) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{85, 1}
+ return file_vtadmin_proto_rawDescGZIP(), []int{91, 1}
}
func (x *ReloadSchemasResponse_ShardResult) GetShard() *Shard {
@@ -7047,11 +7505,9 @@ type ReloadSchemasResponse_TabletResult struct {
func (x *ReloadSchemasResponse_TabletResult) Reset() {
*x = ReloadSchemasResponse_TabletResult{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtadmin_proto_msgTypes[125]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtadmin_proto_msgTypes[137]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReloadSchemasResponse_TabletResult) String() string {
@@ -7061,8 +7517,8 @@ func (x *ReloadSchemasResponse_TabletResult) String() string {
func (*ReloadSchemasResponse_TabletResult) ProtoMessage() {}
func (x *ReloadSchemasResponse_TabletResult) ProtoReflect() protoreflect.Message {
- mi := &file_vtadmin_proto_msgTypes[125]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtadmin_proto_msgTypes[137]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7074,7 +7530,7 @@ func (x *ReloadSchemasResponse_TabletResult) ProtoReflect() protoreflect.Message
// Deprecated: Use ReloadSchemasResponse_TabletResult.ProtoReflect.Descriptor instead.
func (*ReloadSchemasResponse_TabletResult) Descriptor() ([]byte, []int) {
- return file_vtadmin_proto_rawDescGZIP(), []int{85, 2}
+ return file_vtadmin_proto_rawDescGZIP(), []int{91, 2}
}
func (x *ReloadSchemasResponse_TabletResult) GetTablet() *Tablet {
@@ -7277,742 +7733,851 @@ var file_vtadmin_proto_rawDesc = []byte{
0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b,
0x66, 0x6c, 0x6f, 0x77, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x76, 0x74, 0x63,
0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52,
- 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22, 0x6c, 0x0a, 0x12, 0x41, 0x70, 0x70,
- 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22, 0x72, 0x0a, 0x15, 0x57, 0x6f, 0x72,
+ 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49,
+ 0x64, 0x12, 0x3a, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57,
+ 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x80, 0x01,
+ 0x0a, 0x1c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68,
+ 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d,
+ 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x41, 0x0a,
+ 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27,
+ 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66,
+ 0x6c, 0x6f, 0x77, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x22, 0x9b, 0x01, 0x0a, 0x12, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74,
+ 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75,
+ 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x71, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c,
+ 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x6c,
+ 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x80,
+ 0x01, 0x0a, 0x1c, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d,
+ 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x37,
+ 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x41,
0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x70, 0x70, 0x6c,
- 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07,
- 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x80, 0x01, 0x0a, 0x1c, 0x43, 0x61, 0x6e, 0x63,
+ 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x61, 0x6e, 0x63,
0x65, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73,
- 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c,
- 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d,
- 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x82, 0x01, 0x0a, 0x1d, 0x43,
- 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a,
- 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x42, 0x0a, 0x07, 0x72,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x76,
- 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70,
- 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22,
- 0x84, 0x01, 0x0a, 0x1e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65,
- 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49,
- 0x64, 0x12, 0x43, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43,
- 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67,
+ 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x22, 0x82, 0x01, 0x0a, 0x1d, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, 0x68,
+ 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69,
+ 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
+ 0x49, 0x64, 0x12, 0x42, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67,
0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x72, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
- 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
- 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3a,
- 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61,
- 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x47, 0x0a, 0x16, 0x43, 0x72,
- 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e,
- 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x22, 0x6c, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61,
- 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x84, 0x01, 0x0a, 0x1e, 0x43, 0x6f, 0x6d, 0x70, 0x6c,
+ 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75,
0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63,
- 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69,
- 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74,
- 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72,
- 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
- 0x73, 0x22, 0x72, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c,
- 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
- 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x07, 0x6f, 0x70, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x76, 0x74, 0x63,
- 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x6f, 0x70,
- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x6e, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53,
- 0x68, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a,
- 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x07, 0x6f,
- 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x76,
- 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53,
- 0x68, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x6f, 0x70,
- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x88, 0x01, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
- 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a,
- 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74,
- 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c,
- 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c,
- 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52,
- 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61,
- 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01,
- 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79,
- 0x22, 0x5a, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
- 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
- 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73,
- 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x82, 0x01, 0x0a,
- 0x1d, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76,
- 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d,
- 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x42, 0x0a,
- 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28,
- 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x6d, 0x65, 0x72, 0x67,
- 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x68, 0x61, 0x72,
- 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
- 0x73, 0x22, 0xe8, 0x01, 0x0a, 0x1e, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x46,
- 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e,
- 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
- 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05,
- 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61,
- 0x72, 0x64, 0x12, 0x40, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x5f, 0x70,
- 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74,
- 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c,
- 0x69, 0x61, 0x73, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x50, 0x72, 0x69,
- 0x6d, 0x61, 0x72, 0x79, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x05,
- 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x45,
- 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x9c, 0x01, 0x0a,
- 0x11, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73,
- 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63,
- 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x50, 0x0a, 0x12, 0x74, 0x61, 0x62,
- 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
- 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e,
- 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69,
- 0x7a, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x10, 0x74, 0x61, 0x62, 0x6c, 0x65,
- 0x53, 0x69, 0x7a, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xc2, 0x01, 0x0a, 0x11,
- 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73,
- 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49,
- 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18,
- 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73,
- 0x12, 0x27, 0x0a, 0x0f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x73, 0x68, 0x61,
- 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x6b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, 0x45, 0x0a, 0x0f, 0x72, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47,
- 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x22, 0x46, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70,
- 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69,
- 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52,
- 0x07, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x22, 0x6b, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43,
- 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
- 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01,
- 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73,
- 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52,
- 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x5f,
- 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65,
- 0x73, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x4f, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c,
- 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a,
- 0x0a, 0x63, 0x65, 0x6c, 0x6c, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
- 0x0b, 0x32, 0x18, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73,
- 0x74, 0x65, 0x72, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x63, 0x65, 0x6c,
- 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x22, 0x39, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c,
- 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18,
- 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64,
- 0x73, 0x22, 0x51, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69,
- 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x07,
- 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e,
- 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43,
- 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x52, 0x07, 0x61, 0x6c, 0x69,
- 0x61, 0x73, 0x65, 0x73, 0x22, 0x14, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74,
- 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x43, 0x0a, 0x13, 0x47, 0x65,
- 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20,
- 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c,
- 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x22,
- 0x62, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
+ 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74,
+ 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63,
+ 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4f, 0x0a,
+ 0x1a, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63,
+ 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x74,
+ 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, 0x64, 0x22, 0x72,
+ 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74,
0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75,
- 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c,
- 0x69, 0x61, 0x73, 0x22, 0x32, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x73, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65,
- 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75,
- 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x39, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x47, 0x61,
- 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x67,
- 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x61,
- 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x54, 0x47, 0x61, 0x74, 0x65, 0x52, 0x05, 0x67, 0x61, 0x74,
- 0x65, 0x73, 0x22, 0x4f, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73,
- 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c,
- 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x22, 0x36, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c,
- 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52,
- 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x47, 0x0a, 0x14, 0x47,
- 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73,
- 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e,
- 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x73, 0x22, 0xb5, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65,
- 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75,
- 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63,
- 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x50, 0x0a, 0x12, 0x74, 0x61,
- 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e,
- 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53,
- 0x69, 0x7a, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x10, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x86, 0x01, 0x0a,
- 0x11, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64,
- 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
- 0x49, 0x64, 0x73, 0x12, 0x50, 0x0a, 0x12, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a,
- 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x22, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68,
- 0x65, 0x6d, 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4f, 0x70, 0x74, 0x69,
- 0x6f, 0x6e, 0x73, 0x52, 0x10, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4f, 0x70,
- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3f, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65,
- 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x73,
- 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76,
- 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x07, 0x73,
- 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x22, 0xed, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x53, 0x63,
- 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5d, 0x0a, 0x10, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
- 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
- 0x32, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68,
- 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x52, 0x0f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x73, 0x1a, 0x70, 0x0a, 0x0e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52,
+ 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x22, 0x47, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x08,
+ 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11,
+ 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x6c, 0x0a, 0x12, 0x43,
+ 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64,
+ 0x12, 0x37, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x72,
+ 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x72, 0x0a, 0x15, 0x44, 0x65, 0x6c,
+ 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49,
+ 0x64, 0x12, 0x3a, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44,
+ 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x6e, 0x0a,
+ 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f,
+ 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65,
+ 0x72, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x88, 0x01,
+ 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69,
+ 0x61, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64,
+ 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
+ 0x49, 0x64, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x72, 0x69,
+ 0x6d, 0x61, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f,
+ 0x77, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x5a, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65,
+ 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73,
+ 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64,
+ 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75,
+ 0x73, 0x74, 0x65, 0x72, 0x22, 0x82, 0x01, 0x0a, 0x1d, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e,
+ 0x63, 0x79, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65,
0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73,
- 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3f, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x64, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68,
- 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x11, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f,
- 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
- 0x32, 0x18, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d,
- 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x73, 0x63, 0x68, 0x65,
- 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x8d, 0x01, 0x0a,
- 0x23, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f,
- 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74,
- 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f,
- 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x6b, 0x65,
- 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x22, 0x85, 0x01, 0x0a,
- 0x24, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x15, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01,
- 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43,
- 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69,
- 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14,
- 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x68, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65,
- 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a,
- 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08,
- 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
- 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c,
- 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0x4f,
- 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x42, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x70, 0x61,
+ 0x72, 0x65, 0x6e, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe8, 0x01, 0x0a, 0x1e, 0x45, 0x6d,
+ 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x53,
+ 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x07,
+ 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e,
+ 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52,
+ 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x40, 0x0a, 0x10, 0x70, 0x72,
+ 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x04,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0f, 0x70, 0x72, 0x6f,
+ 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x26, 0x0a, 0x06,
+ 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c,
+ 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76,
+ 0x65, 0x6e, 0x74, 0x73, 0x22, 0x9c, 0x01, 0x0a, 0x11, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x63, 0x68,
+ 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18,
+ 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64,
+ 0x73, 0x12, 0x50, 0x0a, 0x12, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f,
+ 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e,
+ 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d,
+ 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x52, 0x10, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4f, 0x70, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x22, 0xc2, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75,
+ 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75,
+ 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a,
+ 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6b, 0x65,
+ 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6b,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x6b, 0x65, 0x79, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28,
+ 0x09, 0x52, 0x0e, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64,
+ 0x73, 0x12, 0x45, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x6f, 0x70, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70,
+ 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x46, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x42,
+ 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30,
+ 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
+ 0x16, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65,
+ 0x72, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73,
+ 0x22, 0x6b, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x73,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74,
+ 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c,
+ 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c,
+ 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x1d,
+ 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01,
+ 0x28, 0x08, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x4f, 0x0a,
+ 0x14, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0a, 0x63, 0x65, 0x6c, 0x6c, 0x5f, 0x69, 0x6e,
+ 0x66, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x76, 0x74, 0x61, 0x64,
+ 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x65, 0x6c, 0x6c, 0x49,
+ 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x63, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x22, 0x39,
+ 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65,
0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73,
0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63,
- 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c,
- 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x22,
- 0xd7, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x0d, 0x73,
- 0x72, 0x76, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03,
- 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74,
- 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x73, 0x1a, 0x63, 0x0a, 0x11, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x38, 0x0a, 0x05, 0x76,
- 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x76, 0x74, 0x63,
- 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x49, 0x0a, 0x14, 0x47, 0x65, 0x74,
- 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64,
- 0x12, 0x12, 0x0a, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
- 0x63, 0x65, 0x6c, 0x6c, 0x22, 0x4e, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53,
- 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a,
- 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03,
- 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x14,
- 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63,
- 0x65, 0x6c, 0x6c, 0x73, 0x22, 0x51, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53,
- 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37,
- 0x0a, 0x0d, 0x73, 0x72, 0x76, 0x5f, 0x76, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x18,
- 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e,
- 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0b, 0x73, 0x72, 0x76, 0x56,
- 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x22, 0x81, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x53,
- 0x63, 0x68, 0x65, 0x6d, 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4f, 0x70,
- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61,
- 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e,
- 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x73, 0x12, 0x3b,
- 0x0a, 0x1a, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x65,
- 0x72, 0x76, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x08, 0x52, 0x17, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4e, 0x6f, 0x6e, 0x53, 0x65,
- 0x72, 0x76, 0x69, 0x6e, 0x67, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x22, 0x60, 0x0a, 0x10, 0x47,
- 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
- 0x2b, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15,
- 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1f, 0x0a, 0x0b,
- 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
- 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x34, 0x0a,
- 0x11, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x51, 0x0a, 0x17, 0x47, 0x65, 0x74,
+ 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x18,
+ 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e,
+ 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61,
+ 0x73, 0x65, 0x73, 0x52, 0x07, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x22, 0x14, 0x0a, 0x12,
+ 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x22, 0x43, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
+ 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x63, 0x6c, 0x75,
+ 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74,
+ 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x08, 0x63,
+ 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x22, 0x62, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x46, 0x75,
+ 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2b,
+ 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
+ 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41,
+ 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x32, 0x0a, 0x0f, 0x47,
+ 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f,
+ 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20,
+ 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22,
+ 0x39, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x67, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x54, 0x47,
+ 0x61, 0x74, 0x65, 0x52, 0x05, 0x67, 0x61, 0x74, 0x65, 0x73, 0x22, 0x4f, 0x0a, 0x12, 0x47, 0x65,
+ 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12,
+ 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x36, 0x0a, 0x13, 0x47,
+ 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64,
0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
- 0x49, 0x64, 0x73, 0x22, 0x3f, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x74, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x61,
- 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x07, 0x74, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x73, 0x22, 0x4b, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c,
- 0x6f, 0x67, 0x79, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d,
+ 0x49, 0x64, 0x73, 0x22, 0x47, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x6b,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11,
+ 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0xb5, 0x01, 0x0a,
+ 0x10, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64,
+ 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x12, 0x50, 0x0a, 0x12, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65,
+ 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22,
+ 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65,
+ 0x6d, 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x52, 0x10, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4f, 0x70, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65,
+ 0x6d, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c,
+ 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52,
+ 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x50, 0x0a, 0x12, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69,
+ 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65,
+ 0x53, 0x69, 0x7a, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x10, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3f, 0x0a,
+ 0x12, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x18, 0x01,
+ 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53,
+ 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x22, 0xed,
+ 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5d, 0x0a,
+ 0x10, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69,
+ 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6c, 0x75,
+ 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x63, 0x6c, 0x75,
+ 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x1a, 0x70, 0x0a, 0x0e,
+ 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d,
0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a,
- 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74,
- 0x68, 0x22, 0x5d, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76,
- 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
- 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74,
- 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x22, 0x4e, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65,
+ 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3f, 0x0a,
+ 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25,
+ 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63,
+ 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x64,
+ 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a,
+ 0x11, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d,
+ 0x69, 0x6e, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x52, 0x10, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x8d, 0x01, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72,
+ 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b,
+ 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
+ 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a,
+ 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09,
+ 0x52, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x6b,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03,
+ 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x68,
+ 0x61, 0x72, 0x64, 0x73, 0x22, 0x85, 0x01, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72,
+ 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a,
+ 0x15, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x73,
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x76,
+ 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x68,
+ 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f,
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x68, 0x0a, 0x15,
+ 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74,
0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x22, 0x35, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65,
- 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75,
- 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x44, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x56, 0x53,
- 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d,
- 0x0a, 0x09, 0x76, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
- 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x53, 0x63, 0x68,
- 0x65, 0x6d, 0x61, 0x52, 0x08, 0x76, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x22, 0x34, 0x0a,
- 0x11, 0x47, 0x65, 0x74, 0x56, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64,
- 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
- 0x49, 0x64, 0x73, 0x22, 0x3f, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x56, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x76, 0x74, 0x63,
- 0x74, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x61,
- 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x52, 0x07, 0x76, 0x74, 0x63,
- 0x74, 0x6c, 0x64, 0x73, 0x22, 0x84, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b,
- 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63,
- 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65,
- 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65,
- 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63,
- 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52,
- 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x69, 0x0a, 0x18, 0x47,
- 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74,
- 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75,
- 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6d, 0x0a, 0x14, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57,
- 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d,
- 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a,
- 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72,
- 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72,
- 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22, 0x6c, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72,
- 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a,
+ 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52,
+ 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0x4f, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76,
+ 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18,
+ 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64,
+ 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09,
+ 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0xd7, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53,
+ 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x0d, 0x73, 0x72, 0x76, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x76, 0x74, 0x61,
+ 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x72, 0x76,
+ 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c,
+ 0x73, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x1a, 0x63, 0x0a, 0x11,
+ 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72,
+ 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
+ 0x6b, 0x65, 0x79, 0x12, 0x38, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47,
+ 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
+ 0x01, 0x22, 0x49, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65,
+ 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75,
+ 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63,
+ 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x65, 0x6c, 0x6c,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x22, 0x4e, 0x0a, 0x15,
+ 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
+ 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73,
+ 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18,
+ 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0x51, 0x0a, 0x16,
+ 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0d, 0x73, 0x72, 0x76, 0x5f, 0x76, 0x5f,
+ 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e,
+ 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65,
+ 0x6d, 0x61, 0x52, 0x0b, 0x73, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x22,
+ 0x81, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x54, 0x61, 0x62,
+ 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x0a,
+ 0x0f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x73,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74,
+ 0x65, 0x53, 0x69, 0x7a, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x1a, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64,
+ 0x65, 0x5f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x68,
+ 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x69, 0x6e, 0x63, 0x6c,
+ 0x75, 0x64, 0x65, 0x4e, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x53, 0x68, 0x61,
+ 0x72, 0x64, 0x73, 0x22, 0x60, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61,
+ 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f,
+ 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74,
+ 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x34, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c,
+ 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52,
+ 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x3f, 0x0a, 0x12, 0x47,
+ 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x29, 0x0a, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x54, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x22, 0x4b, 0x0a, 0x16,
+ 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x50, 0x61, 0x74, 0x68, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65,
+ 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73,
+ 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x7a, 0x0a, 0x19, 0x47, 0x65, 0x74,
+ 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65,
+ 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73,
+ 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3e, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x7e, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65,
+ 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75,
+ 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63,
+ 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x62, 0x61, 0x6e, 0x64, 0x6f, 0x6e, 0x5f,
+ 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x61, 0x62, 0x61, 0x6e, 0x64,
+ 0x6f, 0x6e, 0x41, 0x67, 0x65, 0x22, 0x4e, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x56, 0x53, 0x63, 0x68,
+ 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c,
+ 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
+ 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x35, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x56, 0x53, 0x63, 0x68,
+ 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63,
+ 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09,
+ 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x44, 0x0a, 0x13,
+ 0x47, 0x65, 0x74, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x09, 0x76, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73,
+ 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e,
+ 0x2e, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x08, 0x76, 0x53, 0x63, 0x68, 0x65, 0x6d,
+ 0x61, 0x73, 0x22, 0x34, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x56, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x73,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74,
+ 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c,
+ 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x3f, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x56,
+ 0x74, 0x63, 0x74, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29,
+ 0x0a, 0x07, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
+ 0x0f, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x74, 0x63, 0x74, 0x6c, 0x64,
+ 0x52, 0x07, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x73, 0x22, 0x84, 0x01, 0x0a, 0x12, 0x47, 0x65,
+ 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12,
+ 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e,
+ 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
+ 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x04,
+ 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4f, 0x6e, 0x6c, 0x79,
+ 0x22, 0x69, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53,
+ 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a,
0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b,
0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b,
- 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66,
- 0x6c, 0x6f, 0x77, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66,
- 0x6c, 0x6f, 0x77, 0x22, 0xa0, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66,
- 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63,
- 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09,
- 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x1f, 0x0a, 0x0b,
- 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x08, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x1c, 0x0a,
- 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09,
- 0x52, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x69,
- 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18,
- 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0xe1, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x57, 0x6f,
- 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
- 0x67, 0x0a, 0x14, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x5f, 0x62, 0x79, 0x5f,
- 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e,
- 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66,
- 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x57, 0x6f, 0x72,
- 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x42, 0x79, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x45,
- 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x42,
- 0x79, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x1a, 0x60, 0x0a, 0x17, 0x57, 0x6f, 0x72, 0x6b,
- 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x42, 0x79, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x45, 0x6e,
- 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43,
- 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52,
- 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x80, 0x01, 0x0a, 0x1c, 0x4c,
- 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63,
- 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x07, 0x72, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x76, 0x74,
- 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x63,
- 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x76, 0x0a,
- 0x17, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74,
- 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73,
- 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c,
- 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43,
- 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x61, 0x0a, 0x11, 0x50, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05, 0x61, 0x6c,
- 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73,
- 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74,
- 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c,
- 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x58, 0x0a, 0x12, 0x50, 0x69, 0x6e, 0x67,
- 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16,
- 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
- 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65,
- 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69,
- 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74,
- 0x65, 0x72, 0x22, 0x7e, 0x0a, 0x1b, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x46, 0x61, 0x69,
- 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
+ 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6d, 0x0a, 0x14, 0x53,
+ 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69,
+ 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
+ 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a,
+ 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22, 0x6c, 0x0a, 0x13, 0x53, 0x74,
+ 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64,
- 0x12, 0x40, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6c,
- 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x68, 0x61,
- 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f,
- 0x6e, 0x73, 0x22, 0xe6, 0x01, 0x0a, 0x1c, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x46, 0x61,
- 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43,
- 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12,
- 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73,
- 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72,
- 0x64, 0x12, 0x40, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x72,
- 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f,
- 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69,
- 0x61, 0x73, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x50, 0x72, 0x69, 0x6d,
- 0x61, 0x72, 0x79, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20,
- 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x45, 0x76,
- 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x93, 0x01, 0x0a, 0x1b,
- 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47,
- 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63,
+ 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08,
+ 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
+ 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22, 0xa0, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74,
+ 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18,
+ 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64,
+ 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4f, 0x6e,
+ 0x6c, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18,
+ 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73,
+ 0x12, 0x29, 0x0a, 0x10, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x69, 0x67, 0x6e, 0x6f,
+ 0x72, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0xe1, 0x01, 0x0a, 0x14,
+ 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x14, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
+ 0x73, 0x5f, 0x62, 0x79, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74,
+ 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x42, 0x79, 0x43, 0x6c, 0x75,
+ 0x73, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x77, 0x6f, 0x72, 0x6b, 0x66,
+ 0x6c, 0x6f, 0x77, 0x73, 0x42, 0x79, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x1a, 0x60, 0x0a,
+ 0x17, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x42, 0x79, 0x43, 0x6c, 0x75, 0x73,
+ 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x76, 0x74, 0x61, 0x64,
+ 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x57, 0x6f, 0x72, 0x6b, 0x66,
+ 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22,
+ 0x80, 0x01, 0x0a, 0x1c, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12,
+ 0x41, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x61, 0x75,
+ 0x6e, 0x63, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x22, 0x9f, 0x01, 0x0a, 0x18, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69,
+ 0x7a, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25,
+ 0x0a, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74,
+ 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3d, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x72,
+ 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x22, 0x7a, 0x0a, 0x19, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c,
+ 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64,
+ 0x12, 0x3e, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f,
+ 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x22, 0x76, 0x0a, 0x17, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x72,
+ 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63,
0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65,
- 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65,
- 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18,
- 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x23, 0x0a, 0x0d,
- 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x04, 0x20,
- 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61,
- 0x6c, 0x22, 0x36, 0x0a, 0x1c, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x07, 0x72, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x76, 0x74,
+ 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c,
+ 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52,
+ 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x61, 0x0a, 0x11, 0x50, 0x69, 0x6e, 0x67,
+ 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a,
+ 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74,
+ 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c,
+ 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c,
+ 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52,
+ 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x58, 0x0a, 0x12, 0x50,
+ 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x63, 0x0a, 0x13, 0x52, 0x65, 0x66,
- 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x12, 0x2b, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1f, 0x0a,
- 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03,
- 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x5a,
- 0x0a, 0x14, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a,
- 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65,
- 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x9f, 0x02, 0x0a, 0x14, 0x52,
- 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73,
- 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x73, 0x68,
- 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x6b, 0x65, 0x79, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, 0x2f, 0x0a, 0x07, 0x74, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f,
- 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69,
- 0x61, 0x73, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63,
- 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09,
- 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x20, 0x0a, 0x0b,
- 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28,
- 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x23,
- 0x0a, 0x0d, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18,
- 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x61, 0x69, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74,
- 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70,
- 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e,
- 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x22, 0xad, 0x04, 0x0a,
- 0x15, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x10, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
- 0x32, 0x2d, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61,
- 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52,
- 0x0f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
- 0x12, 0x4f, 0x0a, 0x0d, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
- 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69,
- 0x6e, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73,
- 0x75, 0x6c, 0x74, 0x52, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
- 0x73, 0x12, 0x52, 0x0a, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x75,
- 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x76, 0x74, 0x61, 0x64,
- 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
- 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x0d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65,
- 0x73, 0x75, 0x6c, 0x74, 0x73, 0x1a, 0x67, 0x0a, 0x0e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x74, 0x61, 0x64,
- 0x6d, 0x69, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x08, 0x6b, 0x65,
- 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73,
- 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c,
- 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x5b,
- 0x0a, 0x0b, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x24, 0x0a,
- 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x76,
- 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x05, 0x73, 0x68,
- 0x61, 0x72, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20,
- 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x45, 0x76,
- 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x4f, 0x0a, 0x0c, 0x54,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x27, 0x0a, 0x06, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74,
- 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xdb, 0x01, 0x0a,
- 0x18, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x68, 0x61,
- 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75,
- 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63,
- 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x61,
- 0x69, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x0c, 0x77, 0x61, 0x69, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12,
- 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61,
- 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64,
- 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x63,
- 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63,
- 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x43, 0x0a, 0x19, 0x52, 0x65,
- 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74,
- 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69,
- 0x6c, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22,
- 0x75, 0x0a, 0x25, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63,
- 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61,
- 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05,
- 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
- 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73,
- 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0xb7, 0x01, 0x0a, 0x26, 0x52, 0x65, 0x66, 0x72, 0x65,
- 0x73, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a,
- 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68,
- 0x61, 0x72, 0x64, 0x12, 0x2f, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x07, 0x70, 0x72, 0x69,
- 0x6d, 0x61, 0x72, 0x79, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18,
- 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e,
- 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
- 0x22, 0x9e, 0x01, 0x0a, 0x19, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d,
+ 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75,
+ 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61,
+ 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c,
+ 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x7e, 0x0a, 0x1b, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64,
+ 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f,
+ 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65,
+ 0x72, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74,
+ 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x6f, 0x70,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe6, 0x01, 0x0a, 0x1c, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65,
+ 0x64, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65,
+ 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69,
+ 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74,
+ 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14,
+ 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73,
+ 0x68, 0x61, 0x72, 0x64, 0x12, 0x40, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64,
+ 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15,
+ 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x50,
+ 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73,
+ 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c,
+ 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x93,
+ 0x01, 0x0a, 0x1b, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d,
0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a,
0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x65, 0x6c,
- 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x12, 0x14, 0x0a,
- 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f,
- 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65,
- 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76,
- 0x65, 0x22, 0x34, 0x0a, 0x1a, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
- 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x7e, 0x0a, 0x1b, 0x52, 0x65, 0x74, 0x72, 0x79,
- 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65,
- 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73,
- 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69,
- 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07,
- 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x65, 0x0a, 0x15, 0x52, 0x75, 0x6e, 0x48, 0x65,
- 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x12, 0x2b, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1f, 0x0a,
- 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03,
- 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x5c,
- 0x0a, 0x16, 0x52, 0x75, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
- 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
- 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73,
- 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x62, 0x0a, 0x12,
- 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12,
- 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02,
- 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73,
- 0x22, 0x15, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x63, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x52, 0x65,
- 0x61, 0x64, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b,
- 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
- 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41,
- 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63,
- 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09,
- 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x16, 0x0a, 0x14,
- 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x67, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
- 0x2b, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15,
- 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1f, 0x0a, 0x0b,
- 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
- 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x5e, 0x0a,
- 0x18, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61,
+ 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c,
+ 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12,
+ 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c,
+ 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x61, 0x72,
+ 0x74, 0x69, 0x61, 0x6c, 0x22, 0x36, 0x0a, 0x1c, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x63, 0x0a, 0x13,
+ 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73,
+ 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18,
+ 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64,
+ 0x73, 0x22, 0x5a, 0x0a, 0x14, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74,
+ 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61,
0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75,
0x73, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75,
- 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x66, 0x0a,
- 0x16, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61,
- 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f,
- 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74,
- 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x5d, 0x0a, 0x17, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73,
- 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64,
- 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75,
- 0x73, 0x74, 0x65, 0x72, 0x22, 0x6f, 0x0a, 0x1f, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x45, 0x78,
- 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64,
+ 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x9f, 0x02,
+ 0x0a, 0x14, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x6b,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, 0x2f, 0x0a,
+ 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15,
+ 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x1f,
+ 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20,
+ 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12,
+ 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x05,
+ 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63,
+ 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69,
+ 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x61, 0x69, 0x74, 0x50, 0x6f,
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64,
+ 0x65, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52,
+ 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x22,
+ 0xad, 0x04, 0x0a, 0x15, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x10, 0x6b, 0x65, 0x79,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20,
+ 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65,
+ 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x75,
+ 0x6c, 0x74, 0x52, 0x0f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x75,
+ 0x6c, 0x74, 0x73, 0x12, 0x4f, 0x0a, 0x0d, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x65, 0x73,
+ 0x75, 0x6c, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x76, 0x74, 0x61,
+ 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d,
+ 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64,
+ 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73,
+ 0x75, 0x6c, 0x74, 0x73, 0x12, 0x52, 0x0a, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x72,
+ 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x76,
+ 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68,
+ 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x0d, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x1a, 0x67, 0x0a, 0x0e, 0x4b, 0x65, 0x79, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x08, 0x6b, 0x65,
+ 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76,
+ 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52,
+ 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x76, 0x65,
+ 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75,
+ 0x74, 0x69, 0x6c, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74,
+ 0x73, 0x1a, 0x5b, 0x0a, 0x0b, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
+ 0x12, 0x24, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x0e, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52,
+ 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73,
+ 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c,
+ 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x4f,
+ 0x0a, 0x0c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x27,
+ 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f,
+ 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52,
+ 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c,
+ 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22,
+ 0xdb, 0x01, 0x0a, 0x18, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a,
+ 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x23, 0x0a,
+ 0x0d, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x61, 0x69, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69,
+ 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70, 0x72,
+ 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63,
+ 0x6c, 0x75, 0x64, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x63,
+ 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05,
+ 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x43, 0x0a,
+ 0x19, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x68, 0x61,
+ 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x76,
+ 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67,
+ 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e,
+ 0x74, 0x73, 0x22, 0x75, 0x0a, 0x25, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f,
+ 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05, 0x61,
+ 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70,
+ 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61,
+ 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73,
+ 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63,
+ 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0xb7, 0x01, 0x0a, 0x26, 0x52, 0x65,
+ 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x2f, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72,
+ 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x07,
+ 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74,
+ 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d,
+ 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73,
+ 0x74, 0x65, 0x72, 0x22, 0x9e, 0x01, 0x0a, 0x19, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65,
+ 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64,
+ 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04,
+ 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x65, 0x6c, 0x6c,
+ 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52,
+ 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73,
+ 0x69, 0x76, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72,
+ 0x73, 0x69, 0x76, 0x65, 0x22, 0x34, 0x0a, 0x1a, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65,
+ 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x7e, 0x0a, 0x1b, 0x52, 0x65,
+ 0x74, 0x72, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75,
+ 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63,
+ 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74,
+ 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d,
+ 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x65, 0x0a, 0x15, 0x52, 0x75,
+ 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73,
+ 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18,
+ 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64,
+ 0x73, 0x22, 0x5c, 0x0a, 0x16, 0x52, 0x75, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68,
+ 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73,
+ 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61,
+ 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43,
+ 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22,
+ 0x70, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x68, 0x61, 0x72, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74,
+ 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75,
+ 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x68, 0x61, 0x72, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x22, 0x62, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73,
0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74,
0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61,
0x6c, 0x69, 0x61, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f,
0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74,
- 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0xf0, 0x01, 0x0a, 0x20, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74,
- 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c,
- 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74,
- 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63,
- 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x36, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x5f,
- 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
- 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41,
- 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0a, 0x6e, 0x65, 0x77, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79,
- 0x12, 0x36, 0x0a, 0x0b, 0x6f, 0x6c, 0x64, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18,
- 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0a, 0x6f, 0x6c,
- 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x71, 0x0a, 0x21, 0x54, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x52, 0x65, 0x70, 0x61,
- 0x72, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a,
- 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74,
- 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c,
- 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c,
- 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52,
- 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x53, 0x0a, 0x0f, 0x56,
- 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d,
- 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a,
- 0x0c, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73,
- 0x22, 0x77, 0x0a, 0x17, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63,
- 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65,
- 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65,
- 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x69,
- 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x22, 0x5a, 0x0a, 0x1d, 0x56, 0x61, 0x6c,
- 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c,
+ 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64,
+ 0x4f, 0x6e, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x63, 0x0a, 0x13,
+ 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73,
+ 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18,
+ 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64,
+ 0x73, 0x22, 0x16, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x57, 0x72, 0x69, 0x74,
+ 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x67, 0x0a, 0x17, 0x53, 0x74, 0x61,
+ 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61,
+ 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73,
+ 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49,
+ 0x64, 0x73, 0x22, 0x5e, 0x0a, 0x18, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16,
+ 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+ 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65,
+ 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69,
+ 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74,
+ 0x65, 0x72, 0x22, 0x66, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05,
+ 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f,
+ 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69,
+ 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75,
+ 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a,
+ 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x5d, 0x0a, 0x17, 0x53, 0x74,
+ 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a,
+ 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10,
+ 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
+ 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x6f, 0x0a, 0x1f, 0x54, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x50, 0x72, 0x6f,
+ 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05,
+ 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f,
+ 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69,
+ 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75,
+ 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a,
+ 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0xf0, 0x01, 0x0a, 0x20, 0x54,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x50,
+ 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+ 0x2a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74,
+ 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6b,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x36, 0x0a,
+ 0x0b, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0a, 0x6e, 0x65, 0x77, 0x50, 0x72,
+ 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x36, 0x0a, 0x0b, 0x6f, 0x6c, 0x64, 0x5f, 0x70, 0x72, 0x69,
+ 0x6d, 0x61, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70,
+ 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61,
+ 0x73, 0x52, 0x0a, 0x6f, 0x6c, 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x71, 0x0a,
+ 0x21, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c,
+ 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12,
+ 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02,
+ 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73,
+ 0x22, 0x53, 0x0a, 0x0f, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69,
+ 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
+ 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x69, 0x6e, 0x67, 0x54, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x73, 0x22, 0x77, 0x0a, 0x17, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
+ 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12,
+ 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70,
+ 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
+ 0x08, 0x52, 0x0b, 0x70, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x22, 0x5a,
+ 0x0a, 0x1d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a,
+ 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x14, 0x56,
+ 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69,
+ 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
+ 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14,
+ 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73,
+ 0x68, 0x61, 0x72, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x69, 0x6e, 0x67,
+ 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x22, 0x5b, 0x0a, 0x1e, 0x56, 0x61, 0x6c, 0x69, 0x64,
+ 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75,
+ 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63,
+ 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x22, 0x6e, 0x0a, 0x1b, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65,
+ 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69,
+ 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
+ 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14,
+ 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73,
+ 0x68, 0x61, 0x72, 0x64, 0x22, 0x6c, 0x0a, 0x12, 0x56, 0x44, 0x69, 0x66, 0x66, 0x43, 0x72, 0x65,
+ 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c,
0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
- 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x14, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61,
- 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d,
- 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a,
- 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61,
- 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12,
- 0x21, 0x0a, 0x0c, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18,
- 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x73, 0x22, 0x5b, 0x0a, 0x1e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65,
- 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f,
- 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65,
- 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22,
- 0x6e, 0x0a, 0x1b, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69,
- 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d,
- 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a,
- 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61,
- 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x22,
- 0x5a, 0x0a, 0x10, 0x56, 0x54, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1a, 0x0a,
- 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c,
- 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x71, 0x6c, 0x22, 0x2f, 0x0a, 0x11, 0x56,
- 0x54, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x85, 0x2b, 0x0a,
- 0x07, 0x56, 0x54, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x4c, 0x0a, 0x0b, 0x41, 0x70, 0x70, 0x6c,
- 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69,
- 0x6e, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x15, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c,
- 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
- 0x25, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c,
- 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d,
- 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x16, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, 0x68,
- 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x76,
- 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63,
- 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
+ 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x07, 0x72, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x43, 0x72, 0x65, 0x61,
+ 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x22, 0x68, 0x0a, 0x10, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53, 0x68, 0x6f, 0x77, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65,
+ 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73,
+ 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x41, 0x0a, 0x0d,
+ 0x56, 0x44, 0x69, 0x66, 0x66, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1e, 0x0a,
+ 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x01, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a,
+ 0x03, 0x65, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x65, 0x74, 0x61, 0x22,
+ 0xe6, 0x01, 0x0a, 0x10, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65,
+ 0x70, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x6f,
+ 0x77, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x03, 0x52, 0x0c, 0x72, 0x6f, 0x77, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x64, 0x12,
+ 0x21, 0x0a, 0x0c, 0x68, 0x61, 0x73, 0x5f, 0x6d, 0x69, 0x73, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18,
+ 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x68, 0x61, 0x73, 0x4d, 0x69, 0x73, 0x6d, 0x61, 0x74,
+ 0x63, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74,
+ 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x41,
+ 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x61,
+ 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74,
+ 0x65, 0x64, 0x41, 0x74, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73,
+ 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e,
+ 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x08,
+ 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x22, 0xbe, 0x01, 0x0a, 0x11, 0x56, 0x44, 0x69,
+ 0x66, 0x66, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e,
+ 0x0a, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01,
+ 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56,
+ 0x44, 0x69, 0x66, 0x66, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x45, 0x6e, 0x74, 0x72,
+ 0x79, 0x52, 0x0b, 0x73, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x1a, 0x59,
+ 0x0a, 0x10, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x45, 0x6e, 0x74,
+ 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x44,
+ 0x69, 0x66, 0x66, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x05,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x5a, 0x0a, 0x10, 0x56, 0x54, 0x45,
+ 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a,
+ 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
+ 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x03, 0x73, 0x71, 0x6c, 0x22, 0x2f, 0x0a, 0x11, 0x56, 0x54, 0x45, 0x78, 0x70, 0x6c, 0x61,
+ 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xbd, 0x31, 0x0a, 0x07, 0x56, 0x54, 0x41, 0x64, 0x6d,
+ 0x69, 0x6e, 0x12, 0x4c, 0x0a, 0x0b, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d,
+ 0x61, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x41, 0x70, 0x70, 0x6c,
+ 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e,
+ 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79,
+ 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+ 0x12, 0x6a, 0x0a, 0x15, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x76, 0x74, 0x61, 0x64,
+ 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x28, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x61, 0x6e,
+ 0x63, 0x65, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x16,
+ 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e,
0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69,
- 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
- 0x00, 0x12, 0x70, 0x0a, 0x17, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68,
- 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x2e, 0x76,
- 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53,
- 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
- 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29,
+ 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e,
+ 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x17, 0x43,
+ 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e,
+ 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d,
+ 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x2a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x70,
+ 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x64, 0x0a,
+ 0x13, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43,
+ 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74,
+ 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72,
+ 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79,
0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1e, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e,
0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65,
@@ -8144,197 +8709,242 @@ var file_vtadmin_proto_rawDesc = []byte{
0x65, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x50, 0x61, 0x74,
- 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x19, 0x47,
- 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e,
- 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d,
- 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64,
- 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61,
- 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d,
- 0x61, 0x12, 0x1a, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x56,
- 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e,
- 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22,
- 0x00, 0x12, 0x4a, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73,
- 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x53,
- 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e,
- 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x53, 0x63, 0x68, 0x65,
- 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x47, 0x0a,
- 0x0a, 0x47, 0x65, 0x74, 0x56, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x73, 0x12, 0x1a, 0x2e, 0x76, 0x74,
- 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x73,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69,
- 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72,
- 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e,
- 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x57, 0x6f, 0x72,
- 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x57, 0x6f,
- 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x1c, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69,
- 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e,
- 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72,
- 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x2e, 0x76, 0x74,
- 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
- 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21,
- 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66,
- 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b,
- 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53,
- 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0c, 0x53, 0x74, 0x6f, 0x70,
- 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x1c, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d,
- 0x69, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52,
+ 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x12, 0x47,
+ 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66,
+ 0x6f, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x54,
+ 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76,
+ 0x0a, 0x19, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54,
+ 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x2e, 0x76, 0x74,
+ 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c,
+ 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64,
+ 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x53, 0x63,
+ 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1a, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47,
+ 0x65, 0x74, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x10, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x53, 0x63, 0x68, 0x65,
+ 0x6d, 0x61, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x56, 0x53, 0x63, 0x68, 0x65,
+ 0x6d, 0x61, 0x73, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65,
+ 0x74, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x1c, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x53,
+ 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+ 0x12, 0x47, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x73, 0x12, 0x1a,
+ 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x74, 0x63, 0x74,
+ 0x6c, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x76, 0x74, 0x61,
+ 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x73, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x0b, 0x47, 0x65, 0x74,
+ 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d,
+ 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e,
+ 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x0c, 0x47, 0x65,
+ 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x1c, 0x2e, 0x76, 0x74, 0x61,
+ 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
+ 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d,
+ 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x11, 0x47, 0x65, 0x74,
+ 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21,
+ 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b,
+ 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f,
+ 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57,
+ 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69,
+ 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x64, 0x61, 0x74,
- 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x15, 0x4c,
- 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x4c,
- 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x76, 0x74,
- 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x63,
- 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x59, 0x0a, 0x10, 0x4d, 0x6f, 0x76, 0x65, 0x54,
- 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x76, 0x74,
- 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73,
- 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e,
- 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
- 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x00, 0x12, 0x47, 0x0a, 0x0a, 0x50, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x12, 0x1a, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x54,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x76,
- 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x65, 0x0a, 0x14, 0x50,
- 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x68,
- 0x61, 0x72, 0x64, 0x12, 0x24, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x50, 0x6c,
- 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x68, 0x61,
- 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x76, 0x74, 0x61, 0x64,
+ 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0c, 0x53,
+ 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x1c, 0x2e, 0x76, 0x74,
+ 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
+ 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74,
+ 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x55, 0x70,
+ 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a,
+ 0x0a, 0x15, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69,
+ 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69,
+ 0x6e, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69,
+ 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28,
+ 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63,
+ 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x12, 0x4d, 0x6f,
+ 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65,
+ 0x12, 0x22, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x54,
+ 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c,
+ 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x59, 0x0a,
+ 0x10, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x4d, 0x6f, 0x76, 0x65,
+ 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x11, 0x4d, 0x61, 0x74, 0x65,
+ 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e,
+ 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c,
+ 0x69, 0x7a, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x61, 0x74,
+ 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x0a, 0x50, 0x69, 0x6e, 0x67,
+ 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e,
+ 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x50, 0x69, 0x6e,
+ 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x00, 0x12, 0x65, 0x0a, 0x14, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x46, 0x61, 0x69, 0x6c,
+ 0x6f, 0x76, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x24, 0x2e, 0x76, 0x74, 0x61, 0x64,
0x6d, 0x69, 0x6e, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x6f,
- 0x76, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x00, 0x12, 0x65, 0x0a, 0x14, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x24, 0x2e, 0x76, 0x74, 0x61,
- 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x25, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x62, 0x75, 0x69,
+ 0x76, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x25, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65,
+ 0x64, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x65, 0x0a, 0x14, 0x52, 0x65, 0x62, 0x75,
+ 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68,
+ 0x12, 0x24, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x62, 0x75, 0x69,
0x6c, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x0c, 0x52, 0x65, 0x66,
- 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x2e, 0x76, 0x74, 0x61, 0x64,
- 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69,
- 0x6e, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, 0x01, 0x0a, 0x1e, 0x52, 0x65, 0x66,
- 0x72, 0x65, 0x73, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2e, 0x2e, 0x76, 0x74,
- 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f,
- 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x76, 0x74,
- 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f,
- 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50,
- 0x0a, 0x0d, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x12,
- 0x1d, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64,
- 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e,
+ 0x2e, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
+ 0x4d, 0x0a, 0x0c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12,
+ 0x1c, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73,
+ 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e,
+ 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53,
+ 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x83,
+ 0x01, 0x0a, 0x1e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x12, 0x2e, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x66, 0x72,
+ 0x65, 0x73, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x1a, 0x2f, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x66, 0x72,
+ 0x65, 0x73, 0x68, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x0d, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63,
+ 0x68, 0x65, 0x6d, 0x61, 0x73, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e,
+ 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52,
+ 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x11, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64,
+ 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x21, 0x2e, 0x76, 0x74,
+ 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65,
+ 0x6d, 0x61, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22,
0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53,
- 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
- 0x12, 0x5c, 0x0a, 0x11, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
- 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x21, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e,
- 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x68, 0x61, 0x72,
- 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d,
- 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53,
- 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5f,
- 0x0a, 0x12, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x43, 0x65, 0x6c, 0x6c, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52,
- 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x65, 0x6c,
- 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d,
- 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
- 0x67, 0x0a, 0x14, 0x52, 0x65, 0x74, 0x72, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69,
- 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69,
- 0x6e, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67,
- 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e,
- 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x53,
- 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x0e, 0x52, 0x75, 0x6e, 0x48,
- 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x1e, 0x2e, 0x76, 0x74, 0x61,
- 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x75, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68,
- 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x76, 0x74, 0x61,
- 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x75, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68,
- 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a,
- 0x0b, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x1b, 0x2e, 0x76,
- 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e,
- 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x76, 0x74, 0x61, 0x64,
- 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x0c, 0x53, 0x65, 0x74,
- 0x52, 0x65, 0x61, 0x64, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x1c, 0x2e, 0x76, 0x74, 0x61, 0x64,
- 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x57, 0x72, 0x69, 0x74, 0x65,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69,
- 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x59, 0x0a, 0x10, 0x53, 0x74, 0x61, 0x72,
- 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x2e, 0x76,
- 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c,
- 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21,
- 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65,
- 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69,
- 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e,
- 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69,
- 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x18, 0x54,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x50,
- 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x12, 0x28, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69,
- 0x6e, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
- 0x6c, 0x79, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x1a, 0x29, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x54, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x50, 0x72, 0x6f, 0x6d,
- 0x6f, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x43,
- 0x0a, 0x08, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x76, 0x74, 0x61,
- 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x10, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4b,
- 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69,
- 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74,
- 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65,
- 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
- 0x12, 0x6d, 0x0a, 0x16, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65,
- 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x26, 0x2e, 0x76, 0x74, 0x61,
- 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68,
- 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56,
- 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
- 0x52, 0x0a, 0x0d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64,
- 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64,
- 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69,
- 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x17, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56,
- 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x27,
- 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
- 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73,
- 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x67, 0x0a, 0x14, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
- 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x24, 0x2e,
- 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65,
- 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75,
+ 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x00, 0x12, 0x5f, 0x0a, 0x12, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65,
+ 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x61,
+ 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23,
+ 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x67, 0x0a, 0x14, 0x52, 0x65, 0x74, 0x72, 0x79, 0x53, 0x63,
+ 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e,
+ 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x53, 0x63, 0x68,
+ 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53,
- 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x44,
- 0x0a, 0x09, 0x56, 0x54, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x12, 0x19, 0x2e, 0x76, 0x74,
- 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x54, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e,
- 0x2e, 0x56, 0x54, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x00, 0x42, 0x26, 0x5a, 0x24, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69,
- 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70,
- 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x62, 0x06, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x33,
+ 0x52, 0x65, 0x74, 0x72, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x53,
+ 0x0a, 0x0e, 0x52, 0x75, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b,
+ 0x12, 0x1e, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x75, 0x6e, 0x48, 0x65,
+ 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x1f, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52, 0x75, 0x6e, 0x48, 0x65,
+ 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x68, 0x61, 0x72, 0x64, 0x43, 0x72,
+ 0x65, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x52,
+ 0x65, 0x73, 0x68, 0x61, 0x72, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x52,
+ 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69,
+ 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53,
+ 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x57,
+ 0x72, 0x69, 0x74, 0x65, 0x12, 0x1c, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53,
+ 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x74,
+ 0x52, 0x65, 0x61, 0x64, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x00, 0x12, 0x59, 0x0a, 0x10, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69,
+ 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x61, 0x64,
+ 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x56,
+ 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x12, 0x1f, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x70,
+ 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x74, 0x6f,
+ 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x18, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74,
+ 0x65, 0x64, 0x12, 0x28, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x54, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x50, 0x72, 0x6f,
+ 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x76,
+ 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74,
+ 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x08, 0x56, 0x61, 0x6c,
+ 0x69, 0x64, 0x61, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e,
+ 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x1b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69,
+ 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5b,
+ 0x0a, 0x10, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x61, 0x6c,
+ 0x69, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x16, 0x56,
+ 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x26, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e,
+ 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65,
+ 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e,
+ 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61,
+ 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0d, 0x56, 0x61,
+ 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x1d, 0x2e, 0x76, 0x74,
+ 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68,
+ 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53,
+ 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70,
+ 0x0a, 0x17, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
+ 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x27, 0x2e, 0x76, 0x74, 0x61, 0x64,
+ 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73,
+ 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56,
+ 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65,
+ 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+ 0x12, 0x67, 0x0a, 0x14, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73,
+ 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x24, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d,
+ 0x69, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69,
+ 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27,
+ 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64,
+ 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0b, 0x56, 0x44, 0x69,
+ 0x66, 0x66, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d,
+ 0x69, 0x6e, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x09, 0x56, 0x44, 0x69, 0x66, 0x66,
+ 0x53, 0x68, 0x6f, 0x77, 0x12, 0x19, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56,
+ 0x44, 0x69, 0x66, 0x66, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x1a, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53,
+ 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x44, 0x0a,
+ 0x09, 0x56, 0x54, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x12, 0x19, 0x2e, 0x76, 0x74, 0x61,
+ 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x54, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e,
+ 0x56, 0x54, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x44,
+ 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1e, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e,
+ 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x15, 0x57, 0x6f,
+ 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x66,
+ 0x66, 0x69, 0x63, 0x12, 0x25, 0x2e, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x57, 0x6f,
+ 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x66,
+ 0x66, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53,
+ 0x77, 0x69, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x26, 0x5a, 0x24, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73,
+ 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74,
+ 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x74, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x62, 0x06,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -8350,7 +8960,7 @@ func file_vtadmin_proto_rawDescGZIP() []byte {
}
var file_vtadmin_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
-var file_vtadmin_proto_msgTypes = make([]protoimpl.MessageInfo, 126)
+var file_vtadmin_proto_msgTypes = make([]protoimpl.MessageInfo, 139)
var file_vtadmin_proto_goTypes = []any{
(Tablet_ServingState)(0), // 0: vtadmin.Tablet.ServingState
(*Cluster)(nil), // 1: vtadmin.Cluster
@@ -8369,411 +8979,468 @@ var file_vtadmin_proto_goTypes = []any{
(*Vtctld)(nil), // 14: vtadmin.Vtctld
(*VTGate)(nil), // 15: vtadmin.VTGate
(*Workflow)(nil), // 16: vtadmin.Workflow
- (*ApplySchemaRequest)(nil), // 17: vtadmin.ApplySchemaRequest
- (*CancelSchemaMigrationRequest)(nil), // 18: vtadmin.CancelSchemaMigrationRequest
- (*CleanupSchemaMigrationRequest)(nil), // 19: vtadmin.CleanupSchemaMigrationRequest
- (*CompleteSchemaMigrationRequest)(nil), // 20: vtadmin.CompleteSchemaMigrationRequest
- (*CreateKeyspaceRequest)(nil), // 21: vtadmin.CreateKeyspaceRequest
- (*CreateKeyspaceResponse)(nil), // 22: vtadmin.CreateKeyspaceResponse
- (*CreateShardRequest)(nil), // 23: vtadmin.CreateShardRequest
- (*DeleteKeyspaceRequest)(nil), // 24: vtadmin.DeleteKeyspaceRequest
- (*DeleteShardsRequest)(nil), // 25: vtadmin.DeleteShardsRequest
- (*DeleteTabletRequest)(nil), // 26: vtadmin.DeleteTabletRequest
- (*DeleteTabletResponse)(nil), // 27: vtadmin.DeleteTabletResponse
- (*EmergencyFailoverShardRequest)(nil), // 28: vtadmin.EmergencyFailoverShardRequest
- (*EmergencyFailoverShardResponse)(nil), // 29: vtadmin.EmergencyFailoverShardResponse
- (*FindSchemaRequest)(nil), // 30: vtadmin.FindSchemaRequest
- (*GetBackupsRequest)(nil), // 31: vtadmin.GetBackupsRequest
- (*GetBackupsResponse)(nil), // 32: vtadmin.GetBackupsResponse
- (*GetCellInfosRequest)(nil), // 33: vtadmin.GetCellInfosRequest
- (*GetCellInfosResponse)(nil), // 34: vtadmin.GetCellInfosResponse
- (*GetCellsAliasesRequest)(nil), // 35: vtadmin.GetCellsAliasesRequest
- (*GetCellsAliasesResponse)(nil), // 36: vtadmin.GetCellsAliasesResponse
- (*GetClustersRequest)(nil), // 37: vtadmin.GetClustersRequest
- (*GetClustersResponse)(nil), // 38: vtadmin.GetClustersResponse
- (*GetFullStatusRequest)(nil), // 39: vtadmin.GetFullStatusRequest
- (*GetGatesRequest)(nil), // 40: vtadmin.GetGatesRequest
- (*GetGatesResponse)(nil), // 41: vtadmin.GetGatesResponse
- (*GetKeyspaceRequest)(nil), // 42: vtadmin.GetKeyspaceRequest
- (*GetKeyspacesRequest)(nil), // 43: vtadmin.GetKeyspacesRequest
- (*GetKeyspacesResponse)(nil), // 44: vtadmin.GetKeyspacesResponse
- (*GetSchemaRequest)(nil), // 45: vtadmin.GetSchemaRequest
- (*GetSchemasRequest)(nil), // 46: vtadmin.GetSchemasRequest
- (*GetSchemasResponse)(nil), // 47: vtadmin.GetSchemasResponse
- (*GetSchemaMigrationsRequest)(nil), // 48: vtadmin.GetSchemaMigrationsRequest
- (*GetSchemaMigrationsResponse)(nil), // 49: vtadmin.GetSchemaMigrationsResponse
- (*GetShardReplicationPositionsRequest)(nil), // 50: vtadmin.GetShardReplicationPositionsRequest
- (*GetShardReplicationPositionsResponse)(nil), // 51: vtadmin.GetShardReplicationPositionsResponse
- (*GetSrvKeyspaceRequest)(nil), // 52: vtadmin.GetSrvKeyspaceRequest
- (*GetSrvKeyspacesRequest)(nil), // 53: vtadmin.GetSrvKeyspacesRequest
- (*GetSrvKeyspacesResponse)(nil), // 54: vtadmin.GetSrvKeyspacesResponse
- (*GetSrvVSchemaRequest)(nil), // 55: vtadmin.GetSrvVSchemaRequest
- (*GetSrvVSchemasRequest)(nil), // 56: vtadmin.GetSrvVSchemasRequest
- (*GetSrvVSchemasResponse)(nil), // 57: vtadmin.GetSrvVSchemasResponse
- (*GetSchemaTableSizeOptions)(nil), // 58: vtadmin.GetSchemaTableSizeOptions
- (*GetTabletRequest)(nil), // 59: vtadmin.GetTabletRequest
- (*GetTabletsRequest)(nil), // 60: vtadmin.GetTabletsRequest
- (*GetTabletsResponse)(nil), // 61: vtadmin.GetTabletsResponse
- (*GetTopologyPathRequest)(nil), // 62: vtadmin.GetTopologyPathRequest
- (*GetUnresolvedTransactionsRequest)(nil), // 63: vtadmin.GetUnresolvedTransactionsRequest
- (*GetVSchemaRequest)(nil), // 64: vtadmin.GetVSchemaRequest
- (*GetVSchemasRequest)(nil), // 65: vtadmin.GetVSchemasRequest
- (*GetVSchemasResponse)(nil), // 66: vtadmin.GetVSchemasResponse
- (*GetVtctldsRequest)(nil), // 67: vtadmin.GetVtctldsRequest
- (*GetVtctldsResponse)(nil), // 68: vtadmin.GetVtctldsResponse
- (*GetWorkflowRequest)(nil), // 69: vtadmin.GetWorkflowRequest
- (*GetWorkflowStatusRequest)(nil), // 70: vtadmin.GetWorkflowStatusRequest
- (*StartWorkflowRequest)(nil), // 71: vtadmin.StartWorkflowRequest
- (*StopWorkflowRequest)(nil), // 72: vtadmin.StopWorkflowRequest
- (*GetWorkflowsRequest)(nil), // 73: vtadmin.GetWorkflowsRequest
- (*GetWorkflowsResponse)(nil), // 74: vtadmin.GetWorkflowsResponse
- (*LaunchSchemaMigrationRequest)(nil), // 75: vtadmin.LaunchSchemaMigrationRequest
- (*MoveTablesCreateRequest)(nil), // 76: vtadmin.MoveTablesCreateRequest
- (*PingTabletRequest)(nil), // 77: vtadmin.PingTabletRequest
- (*PingTabletResponse)(nil), // 78: vtadmin.PingTabletResponse
- (*PlannedFailoverShardRequest)(nil), // 79: vtadmin.PlannedFailoverShardRequest
- (*PlannedFailoverShardResponse)(nil), // 80: vtadmin.PlannedFailoverShardResponse
- (*RebuildKeyspaceGraphRequest)(nil), // 81: vtadmin.RebuildKeyspaceGraphRequest
- (*RebuildKeyspaceGraphResponse)(nil), // 82: vtadmin.RebuildKeyspaceGraphResponse
- (*RefreshStateRequest)(nil), // 83: vtadmin.RefreshStateRequest
- (*RefreshStateResponse)(nil), // 84: vtadmin.RefreshStateResponse
- (*ReloadSchemasRequest)(nil), // 85: vtadmin.ReloadSchemasRequest
- (*ReloadSchemasResponse)(nil), // 86: vtadmin.ReloadSchemasResponse
- (*ReloadSchemaShardRequest)(nil), // 87: vtadmin.ReloadSchemaShardRequest
- (*ReloadSchemaShardResponse)(nil), // 88: vtadmin.ReloadSchemaShardResponse
- (*RefreshTabletReplicationSourceRequest)(nil), // 89: vtadmin.RefreshTabletReplicationSourceRequest
- (*RefreshTabletReplicationSourceResponse)(nil), // 90: vtadmin.RefreshTabletReplicationSourceResponse
- (*RemoveKeyspaceCellRequest)(nil), // 91: vtadmin.RemoveKeyspaceCellRequest
- (*RemoveKeyspaceCellResponse)(nil), // 92: vtadmin.RemoveKeyspaceCellResponse
- (*RetrySchemaMigrationRequest)(nil), // 93: vtadmin.RetrySchemaMigrationRequest
- (*RunHealthCheckRequest)(nil), // 94: vtadmin.RunHealthCheckRequest
- (*RunHealthCheckResponse)(nil), // 95: vtadmin.RunHealthCheckResponse
- (*SetReadOnlyRequest)(nil), // 96: vtadmin.SetReadOnlyRequest
- (*SetReadOnlyResponse)(nil), // 97: vtadmin.SetReadOnlyResponse
- (*SetReadWriteRequest)(nil), // 98: vtadmin.SetReadWriteRequest
- (*SetReadWriteResponse)(nil), // 99: vtadmin.SetReadWriteResponse
- (*StartReplicationRequest)(nil), // 100: vtadmin.StartReplicationRequest
- (*StartReplicationResponse)(nil), // 101: vtadmin.StartReplicationResponse
- (*StopReplicationRequest)(nil), // 102: vtadmin.StopReplicationRequest
- (*StopReplicationResponse)(nil), // 103: vtadmin.StopReplicationResponse
- (*TabletExternallyPromotedRequest)(nil), // 104: vtadmin.TabletExternallyPromotedRequest
- (*TabletExternallyPromotedResponse)(nil), // 105: vtadmin.TabletExternallyPromotedResponse
- (*TabletExternallyReparentedRequest)(nil), // 106: vtadmin.TabletExternallyReparentedRequest
- (*ValidateRequest)(nil), // 107: vtadmin.ValidateRequest
- (*ValidateKeyspaceRequest)(nil), // 108: vtadmin.ValidateKeyspaceRequest
- (*ValidateSchemaKeyspaceRequest)(nil), // 109: vtadmin.ValidateSchemaKeyspaceRequest
- (*ValidateShardRequest)(nil), // 110: vtadmin.ValidateShardRequest
- (*ValidateVersionKeyspaceRequest)(nil), // 111: vtadmin.ValidateVersionKeyspaceRequest
- (*ValidateVersionShardRequest)(nil), // 112: vtadmin.ValidateVersionShardRequest
- (*VTExplainRequest)(nil), // 113: vtadmin.VTExplainRequest
- (*VTExplainResponse)(nil), // 114: vtadmin.VTExplainResponse
- nil, // 115: vtadmin.ClusterCellsAliases.AliasesEntry
- nil, // 116: vtadmin.Keyspace.ShardsEntry
- nil, // 117: vtadmin.Schema.TableSizesEntry
- (*Schema_ShardTableSize)(nil), // 118: vtadmin.Schema.ShardTableSize
- (*Schema_TableSize)(nil), // 119: vtadmin.Schema.TableSize
- nil, // 120: vtadmin.Schema.TableSize.ByShardEntry
- (*GetSchemaMigrationsRequest_ClusterRequest)(nil), // 121: vtadmin.GetSchemaMigrationsRequest.ClusterRequest
- nil, // 122: vtadmin.GetSrvKeyspacesResponse.SrvKeyspacesEntry
- nil, // 123: vtadmin.GetWorkflowsResponse.WorkflowsByClusterEntry
- (*ReloadSchemasResponse_KeyspaceResult)(nil), // 124: vtadmin.ReloadSchemasResponse.KeyspaceResult
- (*ReloadSchemasResponse_ShardResult)(nil), // 125: vtadmin.ReloadSchemasResponse.ShardResult
- (*ReloadSchemasResponse_TabletResult)(nil), // 126: vtadmin.ReloadSchemasResponse.TabletResult
- (*mysqlctl.BackupInfo)(nil), // 127: mysqlctl.BackupInfo
- (*topodata.CellInfo)(nil), // 128: topodata.CellInfo
- (*vtctldata.ShardReplicationPositionsResponse)(nil), // 129: vtctldata.ShardReplicationPositionsResponse
- (*vtctldata.Keyspace)(nil), // 130: vtctldata.Keyspace
- (*tabletmanagerdata.TableDefinition)(nil), // 131: tabletmanagerdata.TableDefinition
- (*vtctldata.SchemaMigration)(nil), // 132: vtctldata.SchemaMigration
- (*vtctldata.Shard)(nil), // 133: vtctldata.Shard
- (*vschema.SrvVSchema)(nil), // 134: vschema.SrvVSchema
- (*topodata.Tablet)(nil), // 135: topodata.Tablet
- (*vschema.Keyspace)(nil), // 136: vschema.Keyspace
- (*vtctldata.Workflow)(nil), // 137: vtctldata.Workflow
- (*vtctldata.ApplySchemaRequest)(nil), // 138: vtctldata.ApplySchemaRequest
- (*vtctldata.CancelSchemaMigrationRequest)(nil), // 139: vtctldata.CancelSchemaMigrationRequest
- (*vtctldata.CleanupSchemaMigrationRequest)(nil), // 140: vtctldata.CleanupSchemaMigrationRequest
- (*vtctldata.CompleteSchemaMigrationRequest)(nil), // 141: vtctldata.CompleteSchemaMigrationRequest
- (*vtctldata.CreateKeyspaceRequest)(nil), // 142: vtctldata.CreateKeyspaceRequest
- (*vtctldata.CreateShardRequest)(nil), // 143: vtctldata.CreateShardRequest
- (*vtctldata.DeleteKeyspaceRequest)(nil), // 144: vtctldata.DeleteKeyspaceRequest
- (*vtctldata.DeleteShardsRequest)(nil), // 145: vtctldata.DeleteShardsRequest
- (*topodata.TabletAlias)(nil), // 146: topodata.TabletAlias
- (*vtctldata.EmergencyReparentShardRequest)(nil), // 147: vtctldata.EmergencyReparentShardRequest
- (*logutil.Event)(nil), // 148: logutil.Event
- (*vtctldata.GetBackupsRequest)(nil), // 149: vtctldata.GetBackupsRequest
- (*vtctldata.LaunchSchemaMigrationRequest)(nil), // 150: vtctldata.LaunchSchemaMigrationRequest
- (*vtctldata.MoveTablesCreateRequest)(nil), // 151: vtctldata.MoveTablesCreateRequest
- (*vtctldata.PlannedReparentShardRequest)(nil), // 152: vtctldata.PlannedReparentShardRequest
- (*vtctldata.RetrySchemaMigrationRequest)(nil), // 153: vtctldata.RetrySchemaMigrationRequest
- (*topodata.CellsAlias)(nil), // 154: topodata.CellsAlias
- (*vtctldata.GetSchemaMigrationsRequest)(nil), // 155: vtctldata.GetSchemaMigrationsRequest
- (*vtctldata.GetSrvKeyspacesResponse)(nil), // 156: vtctldata.GetSrvKeyspacesResponse
- (*vtctldata.ApplySchemaResponse)(nil), // 157: vtctldata.ApplySchemaResponse
- (*vtctldata.CancelSchemaMigrationResponse)(nil), // 158: vtctldata.CancelSchemaMigrationResponse
- (*vtctldata.CleanupSchemaMigrationResponse)(nil), // 159: vtctldata.CleanupSchemaMigrationResponse
- (*vtctldata.CompleteSchemaMigrationResponse)(nil), // 160: vtctldata.CompleteSchemaMigrationResponse
- (*vtctldata.CreateShardResponse)(nil), // 161: vtctldata.CreateShardResponse
- (*vtctldata.DeleteKeyspaceResponse)(nil), // 162: vtctldata.DeleteKeyspaceResponse
- (*vtctldata.DeleteShardsResponse)(nil), // 163: vtctldata.DeleteShardsResponse
- (*vtctldata.GetFullStatusResponse)(nil), // 164: vtctldata.GetFullStatusResponse
- (*vtctldata.GetTopologyPathResponse)(nil), // 165: vtctldata.GetTopologyPathResponse
- (*vtctldata.GetUnresolvedTransactionsResponse)(nil), // 166: vtctldata.GetUnresolvedTransactionsResponse
- (*vtctldata.WorkflowStatusResponse)(nil), // 167: vtctldata.WorkflowStatusResponse
- (*vtctldata.WorkflowUpdateResponse)(nil), // 168: vtctldata.WorkflowUpdateResponse
- (*vtctldata.LaunchSchemaMigrationResponse)(nil), // 169: vtctldata.LaunchSchemaMigrationResponse
- (*vtctldata.RetrySchemaMigrationResponse)(nil), // 170: vtctldata.RetrySchemaMigrationResponse
- (*vtctldata.ValidateResponse)(nil), // 171: vtctldata.ValidateResponse
- (*vtctldata.ValidateKeyspaceResponse)(nil), // 172: vtctldata.ValidateKeyspaceResponse
- (*vtctldata.ValidateSchemaKeyspaceResponse)(nil), // 173: vtctldata.ValidateSchemaKeyspaceResponse
- (*vtctldata.ValidateShardResponse)(nil), // 174: vtctldata.ValidateShardResponse
- (*vtctldata.ValidateVersionKeyspaceResponse)(nil), // 175: vtctldata.ValidateVersionKeyspaceResponse
- (*vtctldata.ValidateVersionShardResponse)(nil), // 176: vtctldata.ValidateVersionShardResponse
+ (*WorkflowDeleteRequest)(nil), // 17: vtadmin.WorkflowDeleteRequest
+ (*WorkflowSwitchTrafficRequest)(nil), // 18: vtadmin.WorkflowSwitchTrafficRequest
+ (*ApplySchemaRequest)(nil), // 19: vtadmin.ApplySchemaRequest
+ (*CancelSchemaMigrationRequest)(nil), // 20: vtadmin.CancelSchemaMigrationRequest
+ (*CleanupSchemaMigrationRequest)(nil), // 21: vtadmin.CleanupSchemaMigrationRequest
+ (*CompleteSchemaMigrationRequest)(nil), // 22: vtadmin.CompleteSchemaMigrationRequest
+ (*ConcludeTransactionRequest)(nil), // 23: vtadmin.ConcludeTransactionRequest
+ (*CreateKeyspaceRequest)(nil), // 24: vtadmin.CreateKeyspaceRequest
+ (*CreateKeyspaceResponse)(nil), // 25: vtadmin.CreateKeyspaceResponse
+ (*CreateShardRequest)(nil), // 26: vtadmin.CreateShardRequest
+ (*DeleteKeyspaceRequest)(nil), // 27: vtadmin.DeleteKeyspaceRequest
+ (*DeleteShardsRequest)(nil), // 28: vtadmin.DeleteShardsRequest
+ (*DeleteTabletRequest)(nil), // 29: vtadmin.DeleteTabletRequest
+ (*DeleteTabletResponse)(nil), // 30: vtadmin.DeleteTabletResponse
+ (*EmergencyFailoverShardRequest)(nil), // 31: vtadmin.EmergencyFailoverShardRequest
+ (*EmergencyFailoverShardResponse)(nil), // 32: vtadmin.EmergencyFailoverShardResponse
+ (*FindSchemaRequest)(nil), // 33: vtadmin.FindSchemaRequest
+ (*GetBackupsRequest)(nil), // 34: vtadmin.GetBackupsRequest
+ (*GetBackupsResponse)(nil), // 35: vtadmin.GetBackupsResponse
+ (*GetCellInfosRequest)(nil), // 36: vtadmin.GetCellInfosRequest
+ (*GetCellInfosResponse)(nil), // 37: vtadmin.GetCellInfosResponse
+ (*GetCellsAliasesRequest)(nil), // 38: vtadmin.GetCellsAliasesRequest
+ (*GetCellsAliasesResponse)(nil), // 39: vtadmin.GetCellsAliasesResponse
+ (*GetClustersRequest)(nil), // 40: vtadmin.GetClustersRequest
+ (*GetClustersResponse)(nil), // 41: vtadmin.GetClustersResponse
+ (*GetFullStatusRequest)(nil), // 42: vtadmin.GetFullStatusRequest
+ (*GetGatesRequest)(nil), // 43: vtadmin.GetGatesRequest
+ (*GetGatesResponse)(nil), // 44: vtadmin.GetGatesResponse
+ (*GetKeyspaceRequest)(nil), // 45: vtadmin.GetKeyspaceRequest
+ (*GetKeyspacesRequest)(nil), // 46: vtadmin.GetKeyspacesRequest
+ (*GetKeyspacesResponse)(nil), // 47: vtadmin.GetKeyspacesResponse
+ (*GetSchemaRequest)(nil), // 48: vtadmin.GetSchemaRequest
+ (*GetSchemasRequest)(nil), // 49: vtadmin.GetSchemasRequest
+ (*GetSchemasResponse)(nil), // 50: vtadmin.GetSchemasResponse
+ (*GetSchemaMigrationsRequest)(nil), // 51: vtadmin.GetSchemaMigrationsRequest
+ (*GetSchemaMigrationsResponse)(nil), // 52: vtadmin.GetSchemaMigrationsResponse
+ (*GetShardReplicationPositionsRequest)(nil), // 53: vtadmin.GetShardReplicationPositionsRequest
+ (*GetShardReplicationPositionsResponse)(nil), // 54: vtadmin.GetShardReplicationPositionsResponse
+ (*GetSrvKeyspaceRequest)(nil), // 55: vtadmin.GetSrvKeyspaceRequest
+ (*GetSrvKeyspacesRequest)(nil), // 56: vtadmin.GetSrvKeyspacesRequest
+ (*GetSrvKeyspacesResponse)(nil), // 57: vtadmin.GetSrvKeyspacesResponse
+ (*GetSrvVSchemaRequest)(nil), // 58: vtadmin.GetSrvVSchemaRequest
+ (*GetSrvVSchemasRequest)(nil), // 59: vtadmin.GetSrvVSchemasRequest
+ (*GetSrvVSchemasResponse)(nil), // 60: vtadmin.GetSrvVSchemasResponse
+ (*GetSchemaTableSizeOptions)(nil), // 61: vtadmin.GetSchemaTableSizeOptions
+ (*GetTabletRequest)(nil), // 62: vtadmin.GetTabletRequest
+ (*GetTabletsRequest)(nil), // 63: vtadmin.GetTabletsRequest
+ (*GetTabletsResponse)(nil), // 64: vtadmin.GetTabletsResponse
+ (*GetTopologyPathRequest)(nil), // 65: vtadmin.GetTopologyPathRequest
+ (*GetTransactionInfoRequest)(nil), // 66: vtadmin.GetTransactionInfoRequest
+ (*GetUnresolvedTransactionsRequest)(nil), // 67: vtadmin.GetUnresolvedTransactionsRequest
+ (*GetVSchemaRequest)(nil), // 68: vtadmin.GetVSchemaRequest
+ (*GetVSchemasRequest)(nil), // 69: vtadmin.GetVSchemasRequest
+ (*GetVSchemasResponse)(nil), // 70: vtadmin.GetVSchemasResponse
+ (*GetVtctldsRequest)(nil), // 71: vtadmin.GetVtctldsRequest
+ (*GetVtctldsResponse)(nil), // 72: vtadmin.GetVtctldsResponse
+ (*GetWorkflowRequest)(nil), // 73: vtadmin.GetWorkflowRequest
+ (*GetWorkflowStatusRequest)(nil), // 74: vtadmin.GetWorkflowStatusRequest
+ (*StartWorkflowRequest)(nil), // 75: vtadmin.StartWorkflowRequest
+ (*StopWorkflowRequest)(nil), // 76: vtadmin.StopWorkflowRequest
+ (*GetWorkflowsRequest)(nil), // 77: vtadmin.GetWorkflowsRequest
+ (*GetWorkflowsResponse)(nil), // 78: vtadmin.GetWorkflowsResponse
+ (*LaunchSchemaMigrationRequest)(nil), // 79: vtadmin.LaunchSchemaMigrationRequest
+ (*MaterializeCreateRequest)(nil), // 80: vtadmin.MaterializeCreateRequest
+ (*MoveTablesCompleteRequest)(nil), // 81: vtadmin.MoveTablesCompleteRequest
+ (*MoveTablesCreateRequest)(nil), // 82: vtadmin.MoveTablesCreateRequest
+ (*PingTabletRequest)(nil), // 83: vtadmin.PingTabletRequest
+ (*PingTabletResponse)(nil), // 84: vtadmin.PingTabletResponse
+ (*PlannedFailoverShardRequest)(nil), // 85: vtadmin.PlannedFailoverShardRequest
+ (*PlannedFailoverShardResponse)(nil), // 86: vtadmin.PlannedFailoverShardResponse
+ (*RebuildKeyspaceGraphRequest)(nil), // 87: vtadmin.RebuildKeyspaceGraphRequest
+ (*RebuildKeyspaceGraphResponse)(nil), // 88: vtadmin.RebuildKeyspaceGraphResponse
+ (*RefreshStateRequest)(nil), // 89: vtadmin.RefreshStateRequest
+ (*RefreshStateResponse)(nil), // 90: vtadmin.RefreshStateResponse
+ (*ReloadSchemasRequest)(nil), // 91: vtadmin.ReloadSchemasRequest
+ (*ReloadSchemasResponse)(nil), // 92: vtadmin.ReloadSchemasResponse
+ (*ReloadSchemaShardRequest)(nil), // 93: vtadmin.ReloadSchemaShardRequest
+ (*ReloadSchemaShardResponse)(nil), // 94: vtadmin.ReloadSchemaShardResponse
+ (*RefreshTabletReplicationSourceRequest)(nil), // 95: vtadmin.RefreshTabletReplicationSourceRequest
+ (*RefreshTabletReplicationSourceResponse)(nil), // 96: vtadmin.RefreshTabletReplicationSourceResponse
+ (*RemoveKeyspaceCellRequest)(nil), // 97: vtadmin.RemoveKeyspaceCellRequest
+ (*RemoveKeyspaceCellResponse)(nil), // 98: vtadmin.RemoveKeyspaceCellResponse
+ (*RetrySchemaMigrationRequest)(nil), // 99: vtadmin.RetrySchemaMigrationRequest
+ (*RunHealthCheckRequest)(nil), // 100: vtadmin.RunHealthCheckRequest
+ (*RunHealthCheckResponse)(nil), // 101: vtadmin.RunHealthCheckResponse
+ (*ReshardCreateRequest)(nil), // 102: vtadmin.ReshardCreateRequest
+ (*SetReadOnlyRequest)(nil), // 103: vtadmin.SetReadOnlyRequest
+ (*SetReadOnlyResponse)(nil), // 104: vtadmin.SetReadOnlyResponse
+ (*SetReadWriteRequest)(nil), // 105: vtadmin.SetReadWriteRequest
+ (*SetReadWriteResponse)(nil), // 106: vtadmin.SetReadWriteResponse
+ (*StartReplicationRequest)(nil), // 107: vtadmin.StartReplicationRequest
+ (*StartReplicationResponse)(nil), // 108: vtadmin.StartReplicationResponse
+ (*StopReplicationRequest)(nil), // 109: vtadmin.StopReplicationRequest
+ (*StopReplicationResponse)(nil), // 110: vtadmin.StopReplicationResponse
+ (*TabletExternallyPromotedRequest)(nil), // 111: vtadmin.TabletExternallyPromotedRequest
+ (*TabletExternallyPromotedResponse)(nil), // 112: vtadmin.TabletExternallyPromotedResponse
+ (*TabletExternallyReparentedRequest)(nil), // 113: vtadmin.TabletExternallyReparentedRequest
+ (*ValidateRequest)(nil), // 114: vtadmin.ValidateRequest
+ (*ValidateKeyspaceRequest)(nil), // 115: vtadmin.ValidateKeyspaceRequest
+ (*ValidateSchemaKeyspaceRequest)(nil), // 116: vtadmin.ValidateSchemaKeyspaceRequest
+ (*ValidateShardRequest)(nil), // 117: vtadmin.ValidateShardRequest
+ (*ValidateVersionKeyspaceRequest)(nil), // 118: vtadmin.ValidateVersionKeyspaceRequest
+ (*ValidateVersionShardRequest)(nil), // 119: vtadmin.ValidateVersionShardRequest
+ (*VDiffCreateRequest)(nil), // 120: vtadmin.VDiffCreateRequest
+ (*VDiffShowRequest)(nil), // 121: vtadmin.VDiffShowRequest
+ (*VDiffProgress)(nil), // 122: vtadmin.VDiffProgress
+ (*VDiffShardReport)(nil), // 123: vtadmin.VDiffShardReport
+ (*VDiffShowResponse)(nil), // 124: vtadmin.VDiffShowResponse
+ (*VTExplainRequest)(nil), // 125: vtadmin.VTExplainRequest
+ (*VTExplainResponse)(nil), // 126: vtadmin.VTExplainResponse
+ nil, // 127: vtadmin.ClusterCellsAliases.AliasesEntry
+ nil, // 128: vtadmin.Keyspace.ShardsEntry
+ nil, // 129: vtadmin.Schema.TableSizesEntry
+ (*Schema_ShardTableSize)(nil), // 130: vtadmin.Schema.ShardTableSize
+ (*Schema_TableSize)(nil), // 131: vtadmin.Schema.TableSize
+ nil, // 132: vtadmin.Schema.TableSize.ByShardEntry
+ (*GetSchemaMigrationsRequest_ClusterRequest)(nil), // 133: vtadmin.GetSchemaMigrationsRequest.ClusterRequest
+ nil, // 134: vtadmin.GetSrvKeyspacesResponse.SrvKeyspacesEntry
+ nil, // 135: vtadmin.GetWorkflowsResponse.WorkflowsByClusterEntry
+ (*ReloadSchemasResponse_KeyspaceResult)(nil), // 136: vtadmin.ReloadSchemasResponse.KeyspaceResult
+ (*ReloadSchemasResponse_ShardResult)(nil), // 137: vtadmin.ReloadSchemasResponse.ShardResult
+ (*ReloadSchemasResponse_TabletResult)(nil), // 138: vtadmin.ReloadSchemasResponse.TabletResult
+ nil, // 139: vtadmin.VDiffShowResponse.ShardReportEntry
+ (*mysqlctl.BackupInfo)(nil), // 140: mysqlctl.BackupInfo
+ (*topodata.CellInfo)(nil), // 141: topodata.CellInfo
+ (*vtctldata.ShardReplicationPositionsResponse)(nil), // 142: vtctldata.ShardReplicationPositionsResponse
+ (*vtctldata.Keyspace)(nil), // 143: vtctldata.Keyspace
+ (*tabletmanagerdata.TableDefinition)(nil), // 144: tabletmanagerdata.TableDefinition
+ (*vtctldata.SchemaMigration)(nil), // 145: vtctldata.SchemaMigration
+ (*vtctldata.Shard)(nil), // 146: vtctldata.Shard
+ (*vschema.SrvVSchema)(nil), // 147: vschema.SrvVSchema
+ (*topodata.Tablet)(nil), // 148: topodata.Tablet
+ (*vschema.Keyspace)(nil), // 149: vschema.Keyspace
+ (*vtctldata.Workflow)(nil), // 150: vtctldata.Workflow
+ (*vtctldata.WorkflowDeleteRequest)(nil), // 151: vtctldata.WorkflowDeleteRequest
+ (*vtctldata.WorkflowSwitchTrafficRequest)(nil), // 152: vtctldata.WorkflowSwitchTrafficRequest
+ (*vtctldata.ApplySchemaRequest)(nil), // 153: vtctldata.ApplySchemaRequest
+ (*vtctldata.CancelSchemaMigrationRequest)(nil), // 154: vtctldata.CancelSchemaMigrationRequest
+ (*vtctldata.CleanupSchemaMigrationRequest)(nil), // 155: vtctldata.CleanupSchemaMigrationRequest
+ (*vtctldata.CompleteSchemaMigrationRequest)(nil), // 156: vtctldata.CompleteSchemaMigrationRequest
+ (*vtctldata.CreateKeyspaceRequest)(nil), // 157: vtctldata.CreateKeyspaceRequest
+ (*vtctldata.CreateShardRequest)(nil), // 158: vtctldata.CreateShardRequest
+ (*vtctldata.DeleteKeyspaceRequest)(nil), // 159: vtctldata.DeleteKeyspaceRequest
+ (*vtctldata.DeleteShardsRequest)(nil), // 160: vtctldata.DeleteShardsRequest
+ (*topodata.TabletAlias)(nil), // 161: topodata.TabletAlias
+ (*vtctldata.EmergencyReparentShardRequest)(nil), // 162: vtctldata.EmergencyReparentShardRequest
+ (*logutil.Event)(nil), // 163: logutil.Event
+ (*vtctldata.GetBackupsRequest)(nil), // 164: vtctldata.GetBackupsRequest
+ (*vtctldata.GetTransactionInfoRequest)(nil), // 165: vtctldata.GetTransactionInfoRequest
+ (*vtctldata.LaunchSchemaMigrationRequest)(nil), // 166: vtctldata.LaunchSchemaMigrationRequest
+ (*vtctldata.MaterializeCreateRequest)(nil), // 167: vtctldata.MaterializeCreateRequest
+ (*vtctldata.MoveTablesCompleteRequest)(nil), // 168: vtctldata.MoveTablesCompleteRequest
+ (*vtctldata.MoveTablesCreateRequest)(nil), // 169: vtctldata.MoveTablesCreateRequest
+ (*vtctldata.PlannedReparentShardRequest)(nil), // 170: vtctldata.PlannedReparentShardRequest
+ (*vtctldata.RetrySchemaMigrationRequest)(nil), // 171: vtctldata.RetrySchemaMigrationRequest
+ (*vtctldata.ReshardCreateRequest)(nil), // 172: vtctldata.ReshardCreateRequest
+ (*vtctldata.VDiffCreateRequest)(nil), // 173: vtctldata.VDiffCreateRequest
+ (*vtctldata.VDiffShowRequest)(nil), // 174: vtctldata.VDiffShowRequest
+ (*topodata.CellsAlias)(nil), // 175: topodata.CellsAlias
+ (*vtctldata.GetSchemaMigrationsRequest)(nil), // 176: vtctldata.GetSchemaMigrationsRequest
+ (*vtctldata.GetSrvKeyspacesResponse)(nil), // 177: vtctldata.GetSrvKeyspacesResponse
+ (*vtctldata.ApplySchemaResponse)(nil), // 178: vtctldata.ApplySchemaResponse
+ (*vtctldata.CancelSchemaMigrationResponse)(nil), // 179: vtctldata.CancelSchemaMigrationResponse
+ (*vtctldata.CleanupSchemaMigrationResponse)(nil), // 180: vtctldata.CleanupSchemaMigrationResponse
+ (*vtctldata.CompleteSchemaMigrationResponse)(nil), // 181: vtctldata.CompleteSchemaMigrationResponse
+ (*vtctldata.ConcludeTransactionResponse)(nil), // 182: vtctldata.ConcludeTransactionResponse
+ (*vtctldata.CreateShardResponse)(nil), // 183: vtctldata.CreateShardResponse
+ (*vtctldata.DeleteKeyspaceResponse)(nil), // 184: vtctldata.DeleteKeyspaceResponse
+ (*vtctldata.DeleteShardsResponse)(nil), // 185: vtctldata.DeleteShardsResponse
+ (*vtctldata.GetFullStatusResponse)(nil), // 186: vtctldata.GetFullStatusResponse
+ (*vtctldata.GetTopologyPathResponse)(nil), // 187: vtctldata.GetTopologyPathResponse
+ (*vtctldata.GetTransactionInfoResponse)(nil), // 188: vtctldata.GetTransactionInfoResponse
+ (*vtctldata.GetUnresolvedTransactionsResponse)(nil), // 189: vtctldata.GetUnresolvedTransactionsResponse
+ (*vtctldata.WorkflowStatusResponse)(nil), // 190: vtctldata.WorkflowStatusResponse
+ (*vtctldata.WorkflowUpdateResponse)(nil), // 191: vtctldata.WorkflowUpdateResponse
+ (*vtctldata.LaunchSchemaMigrationResponse)(nil), // 192: vtctldata.LaunchSchemaMigrationResponse
+ (*vtctldata.MoveTablesCompleteResponse)(nil), // 193: vtctldata.MoveTablesCompleteResponse
+ (*vtctldata.MaterializeCreateResponse)(nil), // 194: vtctldata.MaterializeCreateResponse
+ (*vtctldata.RetrySchemaMigrationResponse)(nil), // 195: vtctldata.RetrySchemaMigrationResponse
+ (*vtctldata.ValidateResponse)(nil), // 196: vtctldata.ValidateResponse
+ (*vtctldata.ValidateKeyspaceResponse)(nil), // 197: vtctldata.ValidateKeyspaceResponse
+ (*vtctldata.ValidateSchemaKeyspaceResponse)(nil), // 198: vtctldata.ValidateSchemaKeyspaceResponse
+ (*vtctldata.ValidateShardResponse)(nil), // 199: vtctldata.ValidateShardResponse
+ (*vtctldata.ValidateVersionKeyspaceResponse)(nil), // 200: vtctldata.ValidateVersionKeyspaceResponse
+ (*vtctldata.ValidateVersionShardResponse)(nil), // 201: vtctldata.ValidateVersionShardResponse
+ (*vtctldata.VDiffCreateResponse)(nil), // 202: vtctldata.VDiffCreateResponse
+ (*vtctldata.WorkflowDeleteResponse)(nil), // 203: vtctldata.WorkflowDeleteResponse
+ (*vtctldata.WorkflowSwitchTrafficResponse)(nil), // 204: vtctldata.WorkflowSwitchTrafficResponse
}
var file_vtadmin_proto_depIdxs = []int32{
1, // 0: vtadmin.ClusterBackup.cluster:type_name -> vtadmin.Cluster
- 127, // 1: vtadmin.ClusterBackup.backup:type_name -> mysqlctl.BackupInfo
+ 140, // 1: vtadmin.ClusterBackup.backup:type_name -> mysqlctl.BackupInfo
1, // 2: vtadmin.ClusterCellsAliases.cluster:type_name -> vtadmin.Cluster
- 115, // 3: vtadmin.ClusterCellsAliases.aliases:type_name -> vtadmin.ClusterCellsAliases.AliasesEntry
+ 127, // 3: vtadmin.ClusterCellsAliases.aliases:type_name -> vtadmin.ClusterCellsAliases.AliasesEntry
1, // 4: vtadmin.ClusterCellInfo.cluster:type_name -> vtadmin.Cluster
- 128, // 5: vtadmin.ClusterCellInfo.cell_info:type_name -> topodata.CellInfo
+ 141, // 5: vtadmin.ClusterCellInfo.cell_info:type_name -> topodata.CellInfo
1, // 6: vtadmin.ClusterShardReplicationPosition.cluster:type_name -> vtadmin.Cluster
- 129, // 7: vtadmin.ClusterShardReplicationPosition.position_info:type_name -> vtctldata.ShardReplicationPositionsResponse
+ 142, // 7: vtadmin.ClusterShardReplicationPosition.position_info:type_name -> vtctldata.ShardReplicationPositionsResponse
16, // 8: vtadmin.ClusterWorkflows.workflows:type_name -> vtadmin.Workflow
1, // 9: vtadmin.Keyspace.cluster:type_name -> vtadmin.Cluster
- 130, // 10: vtadmin.Keyspace.keyspace:type_name -> vtctldata.Keyspace
- 116, // 11: vtadmin.Keyspace.shards:type_name -> vtadmin.Keyspace.ShardsEntry
+ 143, // 10: vtadmin.Keyspace.keyspace:type_name -> vtctldata.Keyspace
+ 128, // 11: vtadmin.Keyspace.shards:type_name -> vtadmin.Keyspace.ShardsEntry
1, // 12: vtadmin.Schema.cluster:type_name -> vtadmin.Cluster
- 131, // 13: vtadmin.Schema.table_definitions:type_name -> tabletmanagerdata.TableDefinition
- 117, // 14: vtadmin.Schema.table_sizes:type_name -> vtadmin.Schema.TableSizesEntry
+ 144, // 13: vtadmin.Schema.table_definitions:type_name -> tabletmanagerdata.TableDefinition
+ 129, // 14: vtadmin.Schema.table_sizes:type_name -> vtadmin.Schema.TableSizesEntry
1, // 15: vtadmin.SchemaMigration.cluster:type_name -> vtadmin.Cluster
- 132, // 16: vtadmin.SchemaMigration.schema_migration:type_name -> vtctldata.SchemaMigration
+ 145, // 16: vtadmin.SchemaMigration.schema_migration:type_name -> vtctldata.SchemaMigration
1, // 17: vtadmin.Shard.cluster:type_name -> vtadmin.Cluster
- 133, // 18: vtadmin.Shard.shard:type_name -> vtctldata.Shard
+ 146, // 18: vtadmin.Shard.shard:type_name -> vtctldata.Shard
1, // 19: vtadmin.SrvVSchema.cluster:type_name -> vtadmin.Cluster
- 134, // 20: vtadmin.SrvVSchema.srv_v_schema:type_name -> vschema.SrvVSchema
+ 147, // 20: vtadmin.SrvVSchema.srv_v_schema:type_name -> vschema.SrvVSchema
1, // 21: vtadmin.Tablet.cluster:type_name -> vtadmin.Cluster
- 135, // 22: vtadmin.Tablet.tablet:type_name -> topodata.Tablet
+ 148, // 22: vtadmin.Tablet.tablet:type_name -> topodata.Tablet
0, // 23: vtadmin.Tablet.state:type_name -> vtadmin.Tablet.ServingState
1, // 24: vtadmin.VSchema.cluster:type_name -> vtadmin.Cluster
- 136, // 25: vtadmin.VSchema.v_schema:type_name -> vschema.Keyspace
+ 149, // 25: vtadmin.VSchema.v_schema:type_name -> vschema.Keyspace
1, // 26: vtadmin.Vtctld.cluster:type_name -> vtadmin.Cluster
1, // 27: vtadmin.VTGate.cluster:type_name -> vtadmin.Cluster
1, // 28: vtadmin.Workflow.cluster:type_name -> vtadmin.Cluster
- 137, // 29: vtadmin.Workflow.workflow:type_name -> vtctldata.Workflow
- 138, // 30: vtadmin.ApplySchemaRequest.request:type_name -> vtctldata.ApplySchemaRequest
- 139, // 31: vtadmin.CancelSchemaMigrationRequest.request:type_name -> vtctldata.CancelSchemaMigrationRequest
- 140, // 32: vtadmin.CleanupSchemaMigrationRequest.request:type_name -> vtctldata.CleanupSchemaMigrationRequest
- 141, // 33: vtadmin.CompleteSchemaMigrationRequest.request:type_name -> vtctldata.CompleteSchemaMigrationRequest
- 142, // 34: vtadmin.CreateKeyspaceRequest.options:type_name -> vtctldata.CreateKeyspaceRequest
- 7, // 35: vtadmin.CreateKeyspaceResponse.keyspace:type_name -> vtadmin.Keyspace
- 143, // 36: vtadmin.CreateShardRequest.options:type_name -> vtctldata.CreateShardRequest
- 144, // 37: vtadmin.DeleteKeyspaceRequest.options:type_name -> vtctldata.DeleteKeyspaceRequest
- 145, // 38: vtadmin.DeleteShardsRequest.options:type_name -> vtctldata.DeleteShardsRequest
- 146, // 39: vtadmin.DeleteTabletRequest.alias:type_name -> topodata.TabletAlias
- 1, // 40: vtadmin.DeleteTabletResponse.cluster:type_name -> vtadmin.Cluster
- 147, // 41: vtadmin.EmergencyFailoverShardRequest.options:type_name -> vtctldata.EmergencyReparentShardRequest
- 1, // 42: vtadmin.EmergencyFailoverShardResponse.cluster:type_name -> vtadmin.Cluster
- 146, // 43: vtadmin.EmergencyFailoverShardResponse.promoted_primary:type_name -> topodata.TabletAlias
- 148, // 44: vtadmin.EmergencyFailoverShardResponse.events:type_name -> logutil.Event
- 58, // 45: vtadmin.FindSchemaRequest.table_size_options:type_name -> vtadmin.GetSchemaTableSizeOptions
- 149, // 46: vtadmin.GetBackupsRequest.request_options:type_name -> vtctldata.GetBackupsRequest
- 2, // 47: vtadmin.GetBackupsResponse.backups:type_name -> vtadmin.ClusterBackup
- 4, // 48: vtadmin.GetCellInfosResponse.cell_infos:type_name -> vtadmin.ClusterCellInfo
- 3, // 49: vtadmin.GetCellsAliasesResponse.aliases:type_name -> vtadmin.ClusterCellsAliases
- 1, // 50: vtadmin.GetClustersResponse.clusters:type_name -> vtadmin.Cluster
- 146, // 51: vtadmin.GetFullStatusRequest.alias:type_name -> topodata.TabletAlias
- 15, // 52: vtadmin.GetGatesResponse.gates:type_name -> vtadmin.VTGate
- 7, // 53: vtadmin.GetKeyspacesResponse.keyspaces:type_name -> vtadmin.Keyspace
- 58, // 54: vtadmin.GetSchemaRequest.table_size_options:type_name -> vtadmin.GetSchemaTableSizeOptions
- 58, // 55: vtadmin.GetSchemasRequest.table_size_options:type_name -> vtadmin.GetSchemaTableSizeOptions
- 8, // 56: vtadmin.GetSchemasResponse.schemas:type_name -> vtadmin.Schema
- 121, // 57: vtadmin.GetSchemaMigrationsRequest.cluster_requests:type_name -> vtadmin.GetSchemaMigrationsRequest.ClusterRequest
- 9, // 58: vtadmin.GetSchemaMigrationsResponse.schema_migrations:type_name -> vtadmin.SchemaMigration
- 5, // 59: vtadmin.GetShardReplicationPositionsResponse.replication_positions:type_name -> vtadmin.ClusterShardReplicationPosition
- 122, // 60: vtadmin.GetSrvKeyspacesResponse.srv_keyspaces:type_name -> vtadmin.GetSrvKeyspacesResponse.SrvKeyspacesEntry
- 11, // 61: vtadmin.GetSrvVSchemasResponse.srv_v_schemas:type_name -> vtadmin.SrvVSchema
- 146, // 62: vtadmin.GetTabletRequest.alias:type_name -> topodata.TabletAlias
- 12, // 63: vtadmin.GetTabletsResponse.tablets:type_name -> vtadmin.Tablet
- 13, // 64: vtadmin.GetVSchemasResponse.v_schemas:type_name -> vtadmin.VSchema
- 14, // 65: vtadmin.GetVtctldsResponse.vtctlds:type_name -> vtadmin.Vtctld
- 123, // 66: vtadmin.GetWorkflowsResponse.workflows_by_cluster:type_name -> vtadmin.GetWorkflowsResponse.WorkflowsByClusterEntry
- 150, // 67: vtadmin.LaunchSchemaMigrationRequest.request:type_name -> vtctldata.LaunchSchemaMigrationRequest
- 151, // 68: vtadmin.MoveTablesCreateRequest.request:type_name -> vtctldata.MoveTablesCreateRequest
- 146, // 69: vtadmin.PingTabletRequest.alias:type_name -> topodata.TabletAlias
- 1, // 70: vtadmin.PingTabletResponse.cluster:type_name -> vtadmin.Cluster
- 152, // 71: vtadmin.PlannedFailoverShardRequest.options:type_name -> vtctldata.PlannedReparentShardRequest
- 1, // 72: vtadmin.PlannedFailoverShardResponse.cluster:type_name -> vtadmin.Cluster
- 146, // 73: vtadmin.PlannedFailoverShardResponse.promoted_primary:type_name -> topodata.TabletAlias
- 148, // 74: vtadmin.PlannedFailoverShardResponse.events:type_name -> logutil.Event
- 146, // 75: vtadmin.RefreshStateRequest.alias:type_name -> topodata.TabletAlias
- 1, // 76: vtadmin.RefreshStateResponse.cluster:type_name -> vtadmin.Cluster
- 146, // 77: vtadmin.ReloadSchemasRequest.tablets:type_name -> topodata.TabletAlias
- 124, // 78: vtadmin.ReloadSchemasResponse.keyspace_results:type_name -> vtadmin.ReloadSchemasResponse.KeyspaceResult
- 125, // 79: vtadmin.ReloadSchemasResponse.shard_results:type_name -> vtadmin.ReloadSchemasResponse.ShardResult
- 126, // 80: vtadmin.ReloadSchemasResponse.tablet_results:type_name -> vtadmin.ReloadSchemasResponse.TabletResult
- 148, // 81: vtadmin.ReloadSchemaShardResponse.events:type_name -> logutil.Event
- 146, // 82: vtadmin.RefreshTabletReplicationSourceRequest.alias:type_name -> topodata.TabletAlias
- 146, // 83: vtadmin.RefreshTabletReplicationSourceResponse.primary:type_name -> topodata.TabletAlias
- 1, // 84: vtadmin.RefreshTabletReplicationSourceResponse.cluster:type_name -> vtadmin.Cluster
- 153, // 85: vtadmin.RetrySchemaMigrationRequest.request:type_name -> vtctldata.RetrySchemaMigrationRequest
- 146, // 86: vtadmin.RunHealthCheckRequest.alias:type_name -> topodata.TabletAlias
- 1, // 87: vtadmin.RunHealthCheckResponse.cluster:type_name -> vtadmin.Cluster
- 146, // 88: vtadmin.SetReadOnlyRequest.alias:type_name -> topodata.TabletAlias
- 146, // 89: vtadmin.SetReadWriteRequest.alias:type_name -> topodata.TabletAlias
- 146, // 90: vtadmin.StartReplicationRequest.alias:type_name -> topodata.TabletAlias
- 1, // 91: vtadmin.StartReplicationResponse.cluster:type_name -> vtadmin.Cluster
- 146, // 92: vtadmin.StopReplicationRequest.alias:type_name -> topodata.TabletAlias
- 1, // 93: vtadmin.StopReplicationResponse.cluster:type_name -> vtadmin.Cluster
- 146, // 94: vtadmin.TabletExternallyPromotedRequest.alias:type_name -> topodata.TabletAlias
- 1, // 95: vtadmin.TabletExternallyPromotedResponse.cluster:type_name -> vtadmin.Cluster
- 146, // 96: vtadmin.TabletExternallyPromotedResponse.new_primary:type_name -> topodata.TabletAlias
- 146, // 97: vtadmin.TabletExternallyPromotedResponse.old_primary:type_name -> topodata.TabletAlias
- 146, // 98: vtadmin.TabletExternallyReparentedRequest.alias:type_name -> topodata.TabletAlias
- 154, // 99: vtadmin.ClusterCellsAliases.AliasesEntry.value:type_name -> topodata.CellsAlias
- 133, // 100: vtadmin.Keyspace.ShardsEntry.value:type_name -> vtctldata.Shard
- 119, // 101: vtadmin.Schema.TableSizesEntry.value:type_name -> vtadmin.Schema.TableSize
- 120, // 102: vtadmin.Schema.TableSize.by_shard:type_name -> vtadmin.Schema.TableSize.ByShardEntry
- 118, // 103: vtadmin.Schema.TableSize.ByShardEntry.value:type_name -> vtadmin.Schema.ShardTableSize
- 155, // 104: vtadmin.GetSchemaMigrationsRequest.ClusterRequest.request:type_name -> vtctldata.GetSchemaMigrationsRequest
- 156, // 105: vtadmin.GetSrvKeyspacesResponse.SrvKeyspacesEntry.value:type_name -> vtctldata.GetSrvKeyspacesResponse
- 6, // 106: vtadmin.GetWorkflowsResponse.WorkflowsByClusterEntry.value:type_name -> vtadmin.ClusterWorkflows
- 7, // 107: vtadmin.ReloadSchemasResponse.KeyspaceResult.keyspace:type_name -> vtadmin.Keyspace
- 148, // 108: vtadmin.ReloadSchemasResponse.KeyspaceResult.events:type_name -> logutil.Event
- 10, // 109: vtadmin.ReloadSchemasResponse.ShardResult.shard:type_name -> vtadmin.Shard
- 148, // 110: vtadmin.ReloadSchemasResponse.ShardResult.events:type_name -> logutil.Event
- 12, // 111: vtadmin.ReloadSchemasResponse.TabletResult.tablet:type_name -> vtadmin.Tablet
- 17, // 112: vtadmin.VTAdmin.ApplySchema:input_type -> vtadmin.ApplySchemaRequest
- 18, // 113: vtadmin.VTAdmin.CancelSchemaMigration:input_type -> vtadmin.CancelSchemaMigrationRequest
- 19, // 114: vtadmin.VTAdmin.CleanupSchemaMigration:input_type -> vtadmin.CleanupSchemaMigrationRequest
- 20, // 115: vtadmin.VTAdmin.CompleteSchemaMigration:input_type -> vtadmin.CompleteSchemaMigrationRequest
- 21, // 116: vtadmin.VTAdmin.CreateKeyspace:input_type -> vtadmin.CreateKeyspaceRequest
- 23, // 117: vtadmin.VTAdmin.CreateShard:input_type -> vtadmin.CreateShardRequest
- 24, // 118: vtadmin.VTAdmin.DeleteKeyspace:input_type -> vtadmin.DeleteKeyspaceRequest
- 25, // 119: vtadmin.VTAdmin.DeleteShards:input_type -> vtadmin.DeleteShardsRequest
- 26, // 120: vtadmin.VTAdmin.DeleteTablet:input_type -> vtadmin.DeleteTabletRequest
- 28, // 121: vtadmin.VTAdmin.EmergencyFailoverShard:input_type -> vtadmin.EmergencyFailoverShardRequest
- 30, // 122: vtadmin.VTAdmin.FindSchema:input_type -> vtadmin.FindSchemaRequest
- 31, // 123: vtadmin.VTAdmin.GetBackups:input_type -> vtadmin.GetBackupsRequest
- 33, // 124: vtadmin.VTAdmin.GetCellInfos:input_type -> vtadmin.GetCellInfosRequest
- 35, // 125: vtadmin.VTAdmin.GetCellsAliases:input_type -> vtadmin.GetCellsAliasesRequest
- 37, // 126: vtadmin.VTAdmin.GetClusters:input_type -> vtadmin.GetClustersRequest
- 39, // 127: vtadmin.VTAdmin.GetFullStatus:input_type -> vtadmin.GetFullStatusRequest
- 40, // 128: vtadmin.VTAdmin.GetGates:input_type -> vtadmin.GetGatesRequest
- 42, // 129: vtadmin.VTAdmin.GetKeyspace:input_type -> vtadmin.GetKeyspaceRequest
- 43, // 130: vtadmin.VTAdmin.GetKeyspaces:input_type -> vtadmin.GetKeyspacesRequest
- 45, // 131: vtadmin.VTAdmin.GetSchema:input_type -> vtadmin.GetSchemaRequest
- 46, // 132: vtadmin.VTAdmin.GetSchemas:input_type -> vtadmin.GetSchemasRequest
- 48, // 133: vtadmin.VTAdmin.GetSchemaMigrations:input_type -> vtadmin.GetSchemaMigrationsRequest
- 50, // 134: vtadmin.VTAdmin.GetShardReplicationPositions:input_type -> vtadmin.GetShardReplicationPositionsRequest
- 52, // 135: vtadmin.VTAdmin.GetSrvKeyspace:input_type -> vtadmin.GetSrvKeyspaceRequest
- 53, // 136: vtadmin.VTAdmin.GetSrvKeyspaces:input_type -> vtadmin.GetSrvKeyspacesRequest
- 55, // 137: vtadmin.VTAdmin.GetSrvVSchema:input_type -> vtadmin.GetSrvVSchemaRequest
- 56, // 138: vtadmin.VTAdmin.GetSrvVSchemas:input_type -> vtadmin.GetSrvVSchemasRequest
- 59, // 139: vtadmin.VTAdmin.GetTablet:input_type -> vtadmin.GetTabletRequest
- 60, // 140: vtadmin.VTAdmin.GetTablets:input_type -> vtadmin.GetTabletsRequest
- 62, // 141: vtadmin.VTAdmin.GetTopologyPath:input_type -> vtadmin.GetTopologyPathRequest
- 63, // 142: vtadmin.VTAdmin.GetUnresolvedTransactions:input_type -> vtadmin.GetUnresolvedTransactionsRequest
- 64, // 143: vtadmin.VTAdmin.GetVSchema:input_type -> vtadmin.GetVSchemaRequest
- 65, // 144: vtadmin.VTAdmin.GetVSchemas:input_type -> vtadmin.GetVSchemasRequest
- 67, // 145: vtadmin.VTAdmin.GetVtctlds:input_type -> vtadmin.GetVtctldsRequest
- 69, // 146: vtadmin.VTAdmin.GetWorkflow:input_type -> vtadmin.GetWorkflowRequest
- 73, // 147: vtadmin.VTAdmin.GetWorkflows:input_type -> vtadmin.GetWorkflowsRequest
- 70, // 148: vtadmin.VTAdmin.GetWorkflowStatus:input_type -> vtadmin.GetWorkflowStatusRequest
- 71, // 149: vtadmin.VTAdmin.StartWorkflow:input_type -> vtadmin.StartWorkflowRequest
- 72, // 150: vtadmin.VTAdmin.StopWorkflow:input_type -> vtadmin.StopWorkflowRequest
- 75, // 151: vtadmin.VTAdmin.LaunchSchemaMigration:input_type -> vtadmin.LaunchSchemaMigrationRequest
- 76, // 152: vtadmin.VTAdmin.MoveTablesCreate:input_type -> vtadmin.MoveTablesCreateRequest
- 77, // 153: vtadmin.VTAdmin.PingTablet:input_type -> vtadmin.PingTabletRequest
- 79, // 154: vtadmin.VTAdmin.PlannedFailoverShard:input_type -> vtadmin.PlannedFailoverShardRequest
- 81, // 155: vtadmin.VTAdmin.RebuildKeyspaceGraph:input_type -> vtadmin.RebuildKeyspaceGraphRequest
- 83, // 156: vtadmin.VTAdmin.RefreshState:input_type -> vtadmin.RefreshStateRequest
- 89, // 157: vtadmin.VTAdmin.RefreshTabletReplicationSource:input_type -> vtadmin.RefreshTabletReplicationSourceRequest
- 85, // 158: vtadmin.VTAdmin.ReloadSchemas:input_type -> vtadmin.ReloadSchemasRequest
- 87, // 159: vtadmin.VTAdmin.ReloadSchemaShard:input_type -> vtadmin.ReloadSchemaShardRequest
- 91, // 160: vtadmin.VTAdmin.RemoveKeyspaceCell:input_type -> vtadmin.RemoveKeyspaceCellRequest
- 93, // 161: vtadmin.VTAdmin.RetrySchemaMigration:input_type -> vtadmin.RetrySchemaMigrationRequest
- 94, // 162: vtadmin.VTAdmin.RunHealthCheck:input_type -> vtadmin.RunHealthCheckRequest
- 96, // 163: vtadmin.VTAdmin.SetReadOnly:input_type -> vtadmin.SetReadOnlyRequest
- 98, // 164: vtadmin.VTAdmin.SetReadWrite:input_type -> vtadmin.SetReadWriteRequest
- 100, // 165: vtadmin.VTAdmin.StartReplication:input_type -> vtadmin.StartReplicationRequest
- 102, // 166: vtadmin.VTAdmin.StopReplication:input_type -> vtadmin.StopReplicationRequest
- 104, // 167: vtadmin.VTAdmin.TabletExternallyPromoted:input_type -> vtadmin.TabletExternallyPromotedRequest
- 107, // 168: vtadmin.VTAdmin.Validate:input_type -> vtadmin.ValidateRequest
- 108, // 169: vtadmin.VTAdmin.ValidateKeyspace:input_type -> vtadmin.ValidateKeyspaceRequest
- 109, // 170: vtadmin.VTAdmin.ValidateSchemaKeyspace:input_type -> vtadmin.ValidateSchemaKeyspaceRequest
- 110, // 171: vtadmin.VTAdmin.ValidateShard:input_type -> vtadmin.ValidateShardRequest
- 111, // 172: vtadmin.VTAdmin.ValidateVersionKeyspace:input_type -> vtadmin.ValidateVersionKeyspaceRequest
- 112, // 173: vtadmin.VTAdmin.ValidateVersionShard:input_type -> vtadmin.ValidateVersionShardRequest
- 113, // 174: vtadmin.VTAdmin.VTExplain:input_type -> vtadmin.VTExplainRequest
- 157, // 175: vtadmin.VTAdmin.ApplySchema:output_type -> vtctldata.ApplySchemaResponse
- 158, // 176: vtadmin.VTAdmin.CancelSchemaMigration:output_type -> vtctldata.CancelSchemaMigrationResponse
- 159, // 177: vtadmin.VTAdmin.CleanupSchemaMigration:output_type -> vtctldata.CleanupSchemaMigrationResponse
- 160, // 178: vtadmin.VTAdmin.CompleteSchemaMigration:output_type -> vtctldata.CompleteSchemaMigrationResponse
- 22, // 179: vtadmin.VTAdmin.CreateKeyspace:output_type -> vtadmin.CreateKeyspaceResponse
- 161, // 180: vtadmin.VTAdmin.CreateShard:output_type -> vtctldata.CreateShardResponse
- 162, // 181: vtadmin.VTAdmin.DeleteKeyspace:output_type -> vtctldata.DeleteKeyspaceResponse
- 163, // 182: vtadmin.VTAdmin.DeleteShards:output_type -> vtctldata.DeleteShardsResponse
- 27, // 183: vtadmin.VTAdmin.DeleteTablet:output_type -> vtadmin.DeleteTabletResponse
- 29, // 184: vtadmin.VTAdmin.EmergencyFailoverShard:output_type -> vtadmin.EmergencyFailoverShardResponse
- 8, // 185: vtadmin.VTAdmin.FindSchema:output_type -> vtadmin.Schema
- 32, // 186: vtadmin.VTAdmin.GetBackups:output_type -> vtadmin.GetBackupsResponse
- 34, // 187: vtadmin.VTAdmin.GetCellInfos:output_type -> vtadmin.GetCellInfosResponse
- 36, // 188: vtadmin.VTAdmin.GetCellsAliases:output_type -> vtadmin.GetCellsAliasesResponse
- 38, // 189: vtadmin.VTAdmin.GetClusters:output_type -> vtadmin.GetClustersResponse
- 164, // 190: vtadmin.VTAdmin.GetFullStatus:output_type -> vtctldata.GetFullStatusResponse
- 41, // 191: vtadmin.VTAdmin.GetGates:output_type -> vtadmin.GetGatesResponse
- 7, // 192: vtadmin.VTAdmin.GetKeyspace:output_type -> vtadmin.Keyspace
- 44, // 193: vtadmin.VTAdmin.GetKeyspaces:output_type -> vtadmin.GetKeyspacesResponse
- 8, // 194: vtadmin.VTAdmin.GetSchema:output_type -> vtadmin.Schema
- 47, // 195: vtadmin.VTAdmin.GetSchemas:output_type -> vtadmin.GetSchemasResponse
- 49, // 196: vtadmin.VTAdmin.GetSchemaMigrations:output_type -> vtadmin.GetSchemaMigrationsResponse
- 51, // 197: vtadmin.VTAdmin.GetShardReplicationPositions:output_type -> vtadmin.GetShardReplicationPositionsResponse
- 156, // 198: vtadmin.VTAdmin.GetSrvKeyspace:output_type -> vtctldata.GetSrvKeyspacesResponse
- 54, // 199: vtadmin.VTAdmin.GetSrvKeyspaces:output_type -> vtadmin.GetSrvKeyspacesResponse
- 11, // 200: vtadmin.VTAdmin.GetSrvVSchema:output_type -> vtadmin.SrvVSchema
- 57, // 201: vtadmin.VTAdmin.GetSrvVSchemas:output_type -> vtadmin.GetSrvVSchemasResponse
- 12, // 202: vtadmin.VTAdmin.GetTablet:output_type -> vtadmin.Tablet
- 61, // 203: vtadmin.VTAdmin.GetTablets:output_type -> vtadmin.GetTabletsResponse
- 165, // 204: vtadmin.VTAdmin.GetTopologyPath:output_type -> vtctldata.GetTopologyPathResponse
- 166, // 205: vtadmin.VTAdmin.GetUnresolvedTransactions:output_type -> vtctldata.GetUnresolvedTransactionsResponse
- 13, // 206: vtadmin.VTAdmin.GetVSchema:output_type -> vtadmin.VSchema
- 66, // 207: vtadmin.VTAdmin.GetVSchemas:output_type -> vtadmin.GetVSchemasResponse
- 68, // 208: vtadmin.VTAdmin.GetVtctlds:output_type -> vtadmin.GetVtctldsResponse
- 16, // 209: vtadmin.VTAdmin.GetWorkflow:output_type -> vtadmin.Workflow
- 74, // 210: vtadmin.VTAdmin.GetWorkflows:output_type -> vtadmin.GetWorkflowsResponse
- 167, // 211: vtadmin.VTAdmin.GetWorkflowStatus:output_type -> vtctldata.WorkflowStatusResponse
- 168, // 212: vtadmin.VTAdmin.StartWorkflow:output_type -> vtctldata.WorkflowUpdateResponse
- 168, // 213: vtadmin.VTAdmin.StopWorkflow:output_type -> vtctldata.WorkflowUpdateResponse
- 169, // 214: vtadmin.VTAdmin.LaunchSchemaMigration:output_type -> vtctldata.LaunchSchemaMigrationResponse
- 167, // 215: vtadmin.VTAdmin.MoveTablesCreate:output_type -> vtctldata.WorkflowStatusResponse
- 78, // 216: vtadmin.VTAdmin.PingTablet:output_type -> vtadmin.PingTabletResponse
- 80, // 217: vtadmin.VTAdmin.PlannedFailoverShard:output_type -> vtadmin.PlannedFailoverShardResponse
- 82, // 218: vtadmin.VTAdmin.RebuildKeyspaceGraph:output_type -> vtadmin.RebuildKeyspaceGraphResponse
- 84, // 219: vtadmin.VTAdmin.RefreshState:output_type -> vtadmin.RefreshStateResponse
- 90, // 220: vtadmin.VTAdmin.RefreshTabletReplicationSource:output_type -> vtadmin.RefreshTabletReplicationSourceResponse
- 86, // 221: vtadmin.VTAdmin.ReloadSchemas:output_type -> vtadmin.ReloadSchemasResponse
- 88, // 222: vtadmin.VTAdmin.ReloadSchemaShard:output_type -> vtadmin.ReloadSchemaShardResponse
- 92, // 223: vtadmin.VTAdmin.RemoveKeyspaceCell:output_type -> vtadmin.RemoveKeyspaceCellResponse
- 170, // 224: vtadmin.VTAdmin.RetrySchemaMigration:output_type -> vtctldata.RetrySchemaMigrationResponse
- 95, // 225: vtadmin.VTAdmin.RunHealthCheck:output_type -> vtadmin.RunHealthCheckResponse
- 97, // 226: vtadmin.VTAdmin.SetReadOnly:output_type -> vtadmin.SetReadOnlyResponse
- 99, // 227: vtadmin.VTAdmin.SetReadWrite:output_type -> vtadmin.SetReadWriteResponse
- 101, // 228: vtadmin.VTAdmin.StartReplication:output_type -> vtadmin.StartReplicationResponse
- 103, // 229: vtadmin.VTAdmin.StopReplication:output_type -> vtadmin.StopReplicationResponse
- 105, // 230: vtadmin.VTAdmin.TabletExternallyPromoted:output_type -> vtadmin.TabletExternallyPromotedResponse
- 171, // 231: vtadmin.VTAdmin.Validate:output_type -> vtctldata.ValidateResponse
- 172, // 232: vtadmin.VTAdmin.ValidateKeyspace:output_type -> vtctldata.ValidateKeyspaceResponse
- 173, // 233: vtadmin.VTAdmin.ValidateSchemaKeyspace:output_type -> vtctldata.ValidateSchemaKeyspaceResponse
- 174, // 234: vtadmin.VTAdmin.ValidateShard:output_type -> vtctldata.ValidateShardResponse
- 175, // 235: vtadmin.VTAdmin.ValidateVersionKeyspace:output_type -> vtctldata.ValidateVersionKeyspaceResponse
- 176, // 236: vtadmin.VTAdmin.ValidateVersionShard:output_type -> vtctldata.ValidateVersionShardResponse
- 114, // 237: vtadmin.VTAdmin.VTExplain:output_type -> vtadmin.VTExplainResponse
- 175, // [175:238] is the sub-list for method output_type
- 112, // [112:175] is the sub-list for method input_type
- 112, // [112:112] is the sub-list for extension type_name
- 112, // [112:112] is the sub-list for extension extendee
- 0, // [0:112] is the sub-list for field type_name
+ 150, // 29: vtadmin.Workflow.workflow:type_name -> vtctldata.Workflow
+ 151, // 30: vtadmin.WorkflowDeleteRequest.request:type_name -> vtctldata.WorkflowDeleteRequest
+ 152, // 31: vtadmin.WorkflowSwitchTrafficRequest.request:type_name -> vtctldata.WorkflowSwitchTrafficRequest
+ 153, // 32: vtadmin.ApplySchemaRequest.request:type_name -> vtctldata.ApplySchemaRequest
+ 154, // 33: vtadmin.CancelSchemaMigrationRequest.request:type_name -> vtctldata.CancelSchemaMigrationRequest
+ 155, // 34: vtadmin.CleanupSchemaMigrationRequest.request:type_name -> vtctldata.CleanupSchemaMigrationRequest
+ 156, // 35: vtadmin.CompleteSchemaMigrationRequest.request:type_name -> vtctldata.CompleteSchemaMigrationRequest
+ 157, // 36: vtadmin.CreateKeyspaceRequest.options:type_name -> vtctldata.CreateKeyspaceRequest
+ 7, // 37: vtadmin.CreateKeyspaceResponse.keyspace:type_name -> vtadmin.Keyspace
+ 158, // 38: vtadmin.CreateShardRequest.options:type_name -> vtctldata.CreateShardRequest
+ 159, // 39: vtadmin.DeleteKeyspaceRequest.options:type_name -> vtctldata.DeleteKeyspaceRequest
+ 160, // 40: vtadmin.DeleteShardsRequest.options:type_name -> vtctldata.DeleteShardsRequest
+ 161, // 41: vtadmin.DeleteTabletRequest.alias:type_name -> topodata.TabletAlias
+ 1, // 42: vtadmin.DeleteTabletResponse.cluster:type_name -> vtadmin.Cluster
+ 162, // 43: vtadmin.EmergencyFailoverShardRequest.options:type_name -> vtctldata.EmergencyReparentShardRequest
+ 1, // 44: vtadmin.EmergencyFailoverShardResponse.cluster:type_name -> vtadmin.Cluster
+ 161, // 45: vtadmin.EmergencyFailoverShardResponse.promoted_primary:type_name -> topodata.TabletAlias
+ 163, // 46: vtadmin.EmergencyFailoverShardResponse.events:type_name -> logutil.Event
+ 61, // 47: vtadmin.FindSchemaRequest.table_size_options:type_name -> vtadmin.GetSchemaTableSizeOptions
+ 164, // 48: vtadmin.GetBackupsRequest.request_options:type_name -> vtctldata.GetBackupsRequest
+ 2, // 49: vtadmin.GetBackupsResponse.backups:type_name -> vtadmin.ClusterBackup
+ 4, // 50: vtadmin.GetCellInfosResponse.cell_infos:type_name -> vtadmin.ClusterCellInfo
+ 3, // 51: vtadmin.GetCellsAliasesResponse.aliases:type_name -> vtadmin.ClusterCellsAliases
+ 1, // 52: vtadmin.GetClustersResponse.clusters:type_name -> vtadmin.Cluster
+ 161, // 53: vtadmin.GetFullStatusRequest.alias:type_name -> topodata.TabletAlias
+ 15, // 54: vtadmin.GetGatesResponse.gates:type_name -> vtadmin.VTGate
+ 7, // 55: vtadmin.GetKeyspacesResponse.keyspaces:type_name -> vtadmin.Keyspace
+ 61, // 56: vtadmin.GetSchemaRequest.table_size_options:type_name -> vtadmin.GetSchemaTableSizeOptions
+ 61, // 57: vtadmin.GetSchemasRequest.table_size_options:type_name -> vtadmin.GetSchemaTableSizeOptions
+ 8, // 58: vtadmin.GetSchemasResponse.schemas:type_name -> vtadmin.Schema
+ 133, // 59: vtadmin.GetSchemaMigrationsRequest.cluster_requests:type_name -> vtadmin.GetSchemaMigrationsRequest.ClusterRequest
+ 9, // 60: vtadmin.GetSchemaMigrationsResponse.schema_migrations:type_name -> vtadmin.SchemaMigration
+ 5, // 61: vtadmin.GetShardReplicationPositionsResponse.replication_positions:type_name -> vtadmin.ClusterShardReplicationPosition
+ 134, // 62: vtadmin.GetSrvKeyspacesResponse.srv_keyspaces:type_name -> vtadmin.GetSrvKeyspacesResponse.SrvKeyspacesEntry
+ 11, // 63: vtadmin.GetSrvVSchemasResponse.srv_v_schemas:type_name -> vtadmin.SrvVSchema
+ 161, // 64: vtadmin.GetTabletRequest.alias:type_name -> topodata.TabletAlias
+ 12, // 65: vtadmin.GetTabletsResponse.tablets:type_name -> vtadmin.Tablet
+ 165, // 66: vtadmin.GetTransactionInfoRequest.request:type_name -> vtctldata.GetTransactionInfoRequest
+ 13, // 67: vtadmin.GetVSchemasResponse.v_schemas:type_name -> vtadmin.VSchema
+ 14, // 68: vtadmin.GetVtctldsResponse.vtctlds:type_name -> vtadmin.Vtctld
+ 135, // 69: vtadmin.GetWorkflowsResponse.workflows_by_cluster:type_name -> vtadmin.GetWorkflowsResponse.WorkflowsByClusterEntry
+ 166, // 70: vtadmin.LaunchSchemaMigrationRequest.request:type_name -> vtctldata.LaunchSchemaMigrationRequest
+ 167, // 71: vtadmin.MaterializeCreateRequest.request:type_name -> vtctldata.MaterializeCreateRequest
+ 168, // 72: vtadmin.MoveTablesCompleteRequest.request:type_name -> vtctldata.MoveTablesCompleteRequest
+ 169, // 73: vtadmin.MoveTablesCreateRequest.request:type_name -> vtctldata.MoveTablesCreateRequest
+ 161, // 74: vtadmin.PingTabletRequest.alias:type_name -> topodata.TabletAlias
+ 1, // 75: vtadmin.PingTabletResponse.cluster:type_name -> vtadmin.Cluster
+ 170, // 76: vtadmin.PlannedFailoverShardRequest.options:type_name -> vtctldata.PlannedReparentShardRequest
+ 1, // 77: vtadmin.PlannedFailoverShardResponse.cluster:type_name -> vtadmin.Cluster
+ 161, // 78: vtadmin.PlannedFailoverShardResponse.promoted_primary:type_name -> topodata.TabletAlias
+ 163, // 79: vtadmin.PlannedFailoverShardResponse.events:type_name -> logutil.Event
+ 161, // 80: vtadmin.RefreshStateRequest.alias:type_name -> topodata.TabletAlias
+ 1, // 81: vtadmin.RefreshStateResponse.cluster:type_name -> vtadmin.Cluster
+ 161, // 82: vtadmin.ReloadSchemasRequest.tablets:type_name -> topodata.TabletAlias
+ 136, // 83: vtadmin.ReloadSchemasResponse.keyspace_results:type_name -> vtadmin.ReloadSchemasResponse.KeyspaceResult
+ 137, // 84: vtadmin.ReloadSchemasResponse.shard_results:type_name -> vtadmin.ReloadSchemasResponse.ShardResult
+ 138, // 85: vtadmin.ReloadSchemasResponse.tablet_results:type_name -> vtadmin.ReloadSchemasResponse.TabletResult
+ 163, // 86: vtadmin.ReloadSchemaShardResponse.events:type_name -> logutil.Event
+ 161, // 87: vtadmin.RefreshTabletReplicationSourceRequest.alias:type_name -> topodata.TabletAlias
+ 161, // 88: vtadmin.RefreshTabletReplicationSourceResponse.primary:type_name -> topodata.TabletAlias
+ 1, // 89: vtadmin.RefreshTabletReplicationSourceResponse.cluster:type_name -> vtadmin.Cluster
+ 171, // 90: vtadmin.RetrySchemaMigrationRequest.request:type_name -> vtctldata.RetrySchemaMigrationRequest
+ 161, // 91: vtadmin.RunHealthCheckRequest.alias:type_name -> topodata.TabletAlias
+ 1, // 92: vtadmin.RunHealthCheckResponse.cluster:type_name -> vtadmin.Cluster
+ 172, // 93: vtadmin.ReshardCreateRequest.request:type_name -> vtctldata.ReshardCreateRequest
+ 161, // 94: vtadmin.SetReadOnlyRequest.alias:type_name -> topodata.TabletAlias
+ 161, // 95: vtadmin.SetReadWriteRequest.alias:type_name -> topodata.TabletAlias
+ 161, // 96: vtadmin.StartReplicationRequest.alias:type_name -> topodata.TabletAlias
+ 1, // 97: vtadmin.StartReplicationResponse.cluster:type_name -> vtadmin.Cluster
+ 161, // 98: vtadmin.StopReplicationRequest.alias:type_name -> topodata.TabletAlias
+ 1, // 99: vtadmin.StopReplicationResponse.cluster:type_name -> vtadmin.Cluster
+ 161, // 100: vtadmin.TabletExternallyPromotedRequest.alias:type_name -> topodata.TabletAlias
+ 1, // 101: vtadmin.TabletExternallyPromotedResponse.cluster:type_name -> vtadmin.Cluster
+ 161, // 102: vtadmin.TabletExternallyPromotedResponse.new_primary:type_name -> topodata.TabletAlias
+ 161, // 103: vtadmin.TabletExternallyPromotedResponse.old_primary:type_name -> topodata.TabletAlias
+ 161, // 104: vtadmin.TabletExternallyReparentedRequest.alias:type_name -> topodata.TabletAlias
+ 173, // 105: vtadmin.VDiffCreateRequest.request:type_name -> vtctldata.VDiffCreateRequest
+ 174, // 106: vtadmin.VDiffShowRequest.request:type_name -> vtctldata.VDiffShowRequest
+ 122, // 107: vtadmin.VDiffShardReport.progress:type_name -> vtadmin.VDiffProgress
+ 139, // 108: vtadmin.VDiffShowResponse.shard_report:type_name -> vtadmin.VDiffShowResponse.ShardReportEntry
+ 175, // 109: vtadmin.ClusterCellsAliases.AliasesEntry.value:type_name -> topodata.CellsAlias
+ 146, // 110: vtadmin.Keyspace.ShardsEntry.value:type_name -> vtctldata.Shard
+ 131, // 111: vtadmin.Schema.TableSizesEntry.value:type_name -> vtadmin.Schema.TableSize
+ 132, // 112: vtadmin.Schema.TableSize.by_shard:type_name -> vtadmin.Schema.TableSize.ByShardEntry
+ 130, // 113: vtadmin.Schema.TableSize.ByShardEntry.value:type_name -> vtadmin.Schema.ShardTableSize
+ 176, // 114: vtadmin.GetSchemaMigrationsRequest.ClusterRequest.request:type_name -> vtctldata.GetSchemaMigrationsRequest
+ 177, // 115: vtadmin.GetSrvKeyspacesResponse.SrvKeyspacesEntry.value:type_name -> vtctldata.GetSrvKeyspacesResponse
+ 6, // 116: vtadmin.GetWorkflowsResponse.WorkflowsByClusterEntry.value:type_name -> vtadmin.ClusterWorkflows
+ 7, // 117: vtadmin.ReloadSchemasResponse.KeyspaceResult.keyspace:type_name -> vtadmin.Keyspace
+ 163, // 118: vtadmin.ReloadSchemasResponse.KeyspaceResult.events:type_name -> logutil.Event
+ 10, // 119: vtadmin.ReloadSchemasResponse.ShardResult.shard:type_name -> vtadmin.Shard
+ 163, // 120: vtadmin.ReloadSchemasResponse.ShardResult.events:type_name -> logutil.Event
+ 12, // 121: vtadmin.ReloadSchemasResponse.TabletResult.tablet:type_name -> vtadmin.Tablet
+ 123, // 122: vtadmin.VDiffShowResponse.ShardReportEntry.value:type_name -> vtadmin.VDiffShardReport
+ 19, // 123: vtadmin.VTAdmin.ApplySchema:input_type -> vtadmin.ApplySchemaRequest
+ 20, // 124: vtadmin.VTAdmin.CancelSchemaMigration:input_type -> vtadmin.CancelSchemaMigrationRequest
+ 21, // 125: vtadmin.VTAdmin.CleanupSchemaMigration:input_type -> vtadmin.CleanupSchemaMigrationRequest
+ 22, // 126: vtadmin.VTAdmin.CompleteSchemaMigration:input_type -> vtadmin.CompleteSchemaMigrationRequest
+ 23, // 127: vtadmin.VTAdmin.ConcludeTransaction:input_type -> vtadmin.ConcludeTransactionRequest
+ 24, // 128: vtadmin.VTAdmin.CreateKeyspace:input_type -> vtadmin.CreateKeyspaceRequest
+ 26, // 129: vtadmin.VTAdmin.CreateShard:input_type -> vtadmin.CreateShardRequest
+ 27, // 130: vtadmin.VTAdmin.DeleteKeyspace:input_type -> vtadmin.DeleteKeyspaceRequest
+ 28, // 131: vtadmin.VTAdmin.DeleteShards:input_type -> vtadmin.DeleteShardsRequest
+ 29, // 132: vtadmin.VTAdmin.DeleteTablet:input_type -> vtadmin.DeleteTabletRequest
+ 31, // 133: vtadmin.VTAdmin.EmergencyFailoverShard:input_type -> vtadmin.EmergencyFailoverShardRequest
+ 33, // 134: vtadmin.VTAdmin.FindSchema:input_type -> vtadmin.FindSchemaRequest
+ 34, // 135: vtadmin.VTAdmin.GetBackups:input_type -> vtadmin.GetBackupsRequest
+ 36, // 136: vtadmin.VTAdmin.GetCellInfos:input_type -> vtadmin.GetCellInfosRequest
+ 38, // 137: vtadmin.VTAdmin.GetCellsAliases:input_type -> vtadmin.GetCellsAliasesRequest
+ 40, // 138: vtadmin.VTAdmin.GetClusters:input_type -> vtadmin.GetClustersRequest
+ 42, // 139: vtadmin.VTAdmin.GetFullStatus:input_type -> vtadmin.GetFullStatusRequest
+ 43, // 140: vtadmin.VTAdmin.GetGates:input_type -> vtadmin.GetGatesRequest
+ 45, // 141: vtadmin.VTAdmin.GetKeyspace:input_type -> vtadmin.GetKeyspaceRequest
+ 46, // 142: vtadmin.VTAdmin.GetKeyspaces:input_type -> vtadmin.GetKeyspacesRequest
+ 48, // 143: vtadmin.VTAdmin.GetSchema:input_type -> vtadmin.GetSchemaRequest
+ 49, // 144: vtadmin.VTAdmin.GetSchemas:input_type -> vtadmin.GetSchemasRequest
+ 51, // 145: vtadmin.VTAdmin.GetSchemaMigrations:input_type -> vtadmin.GetSchemaMigrationsRequest
+ 53, // 146: vtadmin.VTAdmin.GetShardReplicationPositions:input_type -> vtadmin.GetShardReplicationPositionsRequest
+ 55, // 147: vtadmin.VTAdmin.GetSrvKeyspace:input_type -> vtadmin.GetSrvKeyspaceRequest
+ 56, // 148: vtadmin.VTAdmin.GetSrvKeyspaces:input_type -> vtadmin.GetSrvKeyspacesRequest
+ 58, // 149: vtadmin.VTAdmin.GetSrvVSchema:input_type -> vtadmin.GetSrvVSchemaRequest
+ 59, // 150: vtadmin.VTAdmin.GetSrvVSchemas:input_type -> vtadmin.GetSrvVSchemasRequest
+ 62, // 151: vtadmin.VTAdmin.GetTablet:input_type -> vtadmin.GetTabletRequest
+ 63, // 152: vtadmin.VTAdmin.GetTablets:input_type -> vtadmin.GetTabletsRequest
+ 65, // 153: vtadmin.VTAdmin.GetTopologyPath:input_type -> vtadmin.GetTopologyPathRequest
+ 66, // 154: vtadmin.VTAdmin.GetTransactionInfo:input_type -> vtadmin.GetTransactionInfoRequest
+ 67, // 155: vtadmin.VTAdmin.GetUnresolvedTransactions:input_type -> vtadmin.GetUnresolvedTransactionsRequest
+ 68, // 156: vtadmin.VTAdmin.GetVSchema:input_type -> vtadmin.GetVSchemaRequest
+ 69, // 157: vtadmin.VTAdmin.GetVSchemas:input_type -> vtadmin.GetVSchemasRequest
+ 71, // 158: vtadmin.VTAdmin.GetVtctlds:input_type -> vtadmin.GetVtctldsRequest
+ 73, // 159: vtadmin.VTAdmin.GetWorkflow:input_type -> vtadmin.GetWorkflowRequest
+ 77, // 160: vtadmin.VTAdmin.GetWorkflows:input_type -> vtadmin.GetWorkflowsRequest
+ 74, // 161: vtadmin.VTAdmin.GetWorkflowStatus:input_type -> vtadmin.GetWorkflowStatusRequest
+ 75, // 162: vtadmin.VTAdmin.StartWorkflow:input_type -> vtadmin.StartWorkflowRequest
+ 76, // 163: vtadmin.VTAdmin.StopWorkflow:input_type -> vtadmin.StopWorkflowRequest
+ 79, // 164: vtadmin.VTAdmin.LaunchSchemaMigration:input_type -> vtadmin.LaunchSchemaMigrationRequest
+ 81, // 165: vtadmin.VTAdmin.MoveTablesComplete:input_type -> vtadmin.MoveTablesCompleteRequest
+ 82, // 166: vtadmin.VTAdmin.MoveTablesCreate:input_type -> vtadmin.MoveTablesCreateRequest
+ 80, // 167: vtadmin.VTAdmin.MaterializeCreate:input_type -> vtadmin.MaterializeCreateRequest
+ 83, // 168: vtadmin.VTAdmin.PingTablet:input_type -> vtadmin.PingTabletRequest
+ 85, // 169: vtadmin.VTAdmin.PlannedFailoverShard:input_type -> vtadmin.PlannedFailoverShardRequest
+ 87, // 170: vtadmin.VTAdmin.RebuildKeyspaceGraph:input_type -> vtadmin.RebuildKeyspaceGraphRequest
+ 89, // 171: vtadmin.VTAdmin.RefreshState:input_type -> vtadmin.RefreshStateRequest
+ 95, // 172: vtadmin.VTAdmin.RefreshTabletReplicationSource:input_type -> vtadmin.RefreshTabletReplicationSourceRequest
+ 91, // 173: vtadmin.VTAdmin.ReloadSchemas:input_type -> vtadmin.ReloadSchemasRequest
+ 93, // 174: vtadmin.VTAdmin.ReloadSchemaShard:input_type -> vtadmin.ReloadSchemaShardRequest
+ 97, // 175: vtadmin.VTAdmin.RemoveKeyspaceCell:input_type -> vtadmin.RemoveKeyspaceCellRequest
+ 99, // 176: vtadmin.VTAdmin.RetrySchemaMigration:input_type -> vtadmin.RetrySchemaMigrationRequest
+ 100, // 177: vtadmin.VTAdmin.RunHealthCheck:input_type -> vtadmin.RunHealthCheckRequest
+ 102, // 178: vtadmin.VTAdmin.ReshardCreate:input_type -> vtadmin.ReshardCreateRequest
+ 103, // 179: vtadmin.VTAdmin.SetReadOnly:input_type -> vtadmin.SetReadOnlyRequest
+ 105, // 180: vtadmin.VTAdmin.SetReadWrite:input_type -> vtadmin.SetReadWriteRequest
+ 107, // 181: vtadmin.VTAdmin.StartReplication:input_type -> vtadmin.StartReplicationRequest
+ 109, // 182: vtadmin.VTAdmin.StopReplication:input_type -> vtadmin.StopReplicationRequest
+ 111, // 183: vtadmin.VTAdmin.TabletExternallyPromoted:input_type -> vtadmin.TabletExternallyPromotedRequest
+ 114, // 184: vtadmin.VTAdmin.Validate:input_type -> vtadmin.ValidateRequest
+ 115, // 185: vtadmin.VTAdmin.ValidateKeyspace:input_type -> vtadmin.ValidateKeyspaceRequest
+ 116, // 186: vtadmin.VTAdmin.ValidateSchemaKeyspace:input_type -> vtadmin.ValidateSchemaKeyspaceRequest
+ 117, // 187: vtadmin.VTAdmin.ValidateShard:input_type -> vtadmin.ValidateShardRequest
+ 118, // 188: vtadmin.VTAdmin.ValidateVersionKeyspace:input_type -> vtadmin.ValidateVersionKeyspaceRequest
+ 119, // 189: vtadmin.VTAdmin.ValidateVersionShard:input_type -> vtadmin.ValidateVersionShardRequest
+ 120, // 190: vtadmin.VTAdmin.VDiffCreate:input_type -> vtadmin.VDiffCreateRequest
+ 121, // 191: vtadmin.VTAdmin.VDiffShow:input_type -> vtadmin.VDiffShowRequest
+ 125, // 192: vtadmin.VTAdmin.VTExplain:input_type -> vtadmin.VTExplainRequest
+ 17, // 193: vtadmin.VTAdmin.WorkflowDelete:input_type -> vtadmin.WorkflowDeleteRequest
+ 18, // 194: vtadmin.VTAdmin.WorkflowSwitchTraffic:input_type -> vtadmin.WorkflowSwitchTrafficRequest
+ 178, // 195: vtadmin.VTAdmin.ApplySchema:output_type -> vtctldata.ApplySchemaResponse
+ 179, // 196: vtadmin.VTAdmin.CancelSchemaMigration:output_type -> vtctldata.CancelSchemaMigrationResponse
+ 180, // 197: vtadmin.VTAdmin.CleanupSchemaMigration:output_type -> vtctldata.CleanupSchemaMigrationResponse
+ 181, // 198: vtadmin.VTAdmin.CompleteSchemaMigration:output_type -> vtctldata.CompleteSchemaMigrationResponse
+ 182, // 199: vtadmin.VTAdmin.ConcludeTransaction:output_type -> vtctldata.ConcludeTransactionResponse
+ 25, // 200: vtadmin.VTAdmin.CreateKeyspace:output_type -> vtadmin.CreateKeyspaceResponse
+ 183, // 201: vtadmin.VTAdmin.CreateShard:output_type -> vtctldata.CreateShardResponse
+ 184, // 202: vtadmin.VTAdmin.DeleteKeyspace:output_type -> vtctldata.DeleteKeyspaceResponse
+ 185, // 203: vtadmin.VTAdmin.DeleteShards:output_type -> vtctldata.DeleteShardsResponse
+ 30, // 204: vtadmin.VTAdmin.DeleteTablet:output_type -> vtadmin.DeleteTabletResponse
+ 32, // 205: vtadmin.VTAdmin.EmergencyFailoverShard:output_type -> vtadmin.EmergencyFailoverShardResponse
+ 8, // 206: vtadmin.VTAdmin.FindSchema:output_type -> vtadmin.Schema
+ 35, // 207: vtadmin.VTAdmin.GetBackups:output_type -> vtadmin.GetBackupsResponse
+ 37, // 208: vtadmin.VTAdmin.GetCellInfos:output_type -> vtadmin.GetCellInfosResponse
+ 39, // 209: vtadmin.VTAdmin.GetCellsAliases:output_type -> vtadmin.GetCellsAliasesResponse
+ 41, // 210: vtadmin.VTAdmin.GetClusters:output_type -> vtadmin.GetClustersResponse
+ 186, // 211: vtadmin.VTAdmin.GetFullStatus:output_type -> vtctldata.GetFullStatusResponse
+ 44, // 212: vtadmin.VTAdmin.GetGates:output_type -> vtadmin.GetGatesResponse
+ 7, // 213: vtadmin.VTAdmin.GetKeyspace:output_type -> vtadmin.Keyspace
+ 47, // 214: vtadmin.VTAdmin.GetKeyspaces:output_type -> vtadmin.GetKeyspacesResponse
+ 8, // 215: vtadmin.VTAdmin.GetSchema:output_type -> vtadmin.Schema
+ 50, // 216: vtadmin.VTAdmin.GetSchemas:output_type -> vtadmin.GetSchemasResponse
+ 52, // 217: vtadmin.VTAdmin.GetSchemaMigrations:output_type -> vtadmin.GetSchemaMigrationsResponse
+ 54, // 218: vtadmin.VTAdmin.GetShardReplicationPositions:output_type -> vtadmin.GetShardReplicationPositionsResponse
+ 177, // 219: vtadmin.VTAdmin.GetSrvKeyspace:output_type -> vtctldata.GetSrvKeyspacesResponse
+ 57, // 220: vtadmin.VTAdmin.GetSrvKeyspaces:output_type -> vtadmin.GetSrvKeyspacesResponse
+ 11, // 221: vtadmin.VTAdmin.GetSrvVSchema:output_type -> vtadmin.SrvVSchema
+ 60, // 222: vtadmin.VTAdmin.GetSrvVSchemas:output_type -> vtadmin.GetSrvVSchemasResponse
+ 12, // 223: vtadmin.VTAdmin.GetTablet:output_type -> vtadmin.Tablet
+ 64, // 224: vtadmin.VTAdmin.GetTablets:output_type -> vtadmin.GetTabletsResponse
+ 187, // 225: vtadmin.VTAdmin.GetTopologyPath:output_type -> vtctldata.GetTopologyPathResponse
+ 188, // 226: vtadmin.VTAdmin.GetTransactionInfo:output_type -> vtctldata.GetTransactionInfoResponse
+ 189, // 227: vtadmin.VTAdmin.GetUnresolvedTransactions:output_type -> vtctldata.GetUnresolvedTransactionsResponse
+ 13, // 228: vtadmin.VTAdmin.GetVSchema:output_type -> vtadmin.VSchema
+ 70, // 229: vtadmin.VTAdmin.GetVSchemas:output_type -> vtadmin.GetVSchemasResponse
+ 72, // 230: vtadmin.VTAdmin.GetVtctlds:output_type -> vtadmin.GetVtctldsResponse
+ 16, // 231: vtadmin.VTAdmin.GetWorkflow:output_type -> vtadmin.Workflow
+ 78, // 232: vtadmin.VTAdmin.GetWorkflows:output_type -> vtadmin.GetWorkflowsResponse
+ 190, // 233: vtadmin.VTAdmin.GetWorkflowStatus:output_type -> vtctldata.WorkflowStatusResponse
+ 191, // 234: vtadmin.VTAdmin.StartWorkflow:output_type -> vtctldata.WorkflowUpdateResponse
+ 191, // 235: vtadmin.VTAdmin.StopWorkflow:output_type -> vtctldata.WorkflowUpdateResponse
+ 192, // 236: vtadmin.VTAdmin.LaunchSchemaMigration:output_type -> vtctldata.LaunchSchemaMigrationResponse
+ 193, // 237: vtadmin.VTAdmin.MoveTablesComplete:output_type -> vtctldata.MoveTablesCompleteResponse
+ 190, // 238: vtadmin.VTAdmin.MoveTablesCreate:output_type -> vtctldata.WorkflowStatusResponse
+ 194, // 239: vtadmin.VTAdmin.MaterializeCreate:output_type -> vtctldata.MaterializeCreateResponse
+ 84, // 240: vtadmin.VTAdmin.PingTablet:output_type -> vtadmin.PingTabletResponse
+ 86, // 241: vtadmin.VTAdmin.PlannedFailoverShard:output_type -> vtadmin.PlannedFailoverShardResponse
+ 88, // 242: vtadmin.VTAdmin.RebuildKeyspaceGraph:output_type -> vtadmin.RebuildKeyspaceGraphResponse
+ 90, // 243: vtadmin.VTAdmin.RefreshState:output_type -> vtadmin.RefreshStateResponse
+ 96, // 244: vtadmin.VTAdmin.RefreshTabletReplicationSource:output_type -> vtadmin.RefreshTabletReplicationSourceResponse
+ 92, // 245: vtadmin.VTAdmin.ReloadSchemas:output_type -> vtadmin.ReloadSchemasResponse
+ 94, // 246: vtadmin.VTAdmin.ReloadSchemaShard:output_type -> vtadmin.ReloadSchemaShardResponse
+ 98, // 247: vtadmin.VTAdmin.RemoveKeyspaceCell:output_type -> vtadmin.RemoveKeyspaceCellResponse
+ 195, // 248: vtadmin.VTAdmin.RetrySchemaMigration:output_type -> vtctldata.RetrySchemaMigrationResponse
+ 101, // 249: vtadmin.VTAdmin.RunHealthCheck:output_type -> vtadmin.RunHealthCheckResponse
+ 190, // 250: vtadmin.VTAdmin.ReshardCreate:output_type -> vtctldata.WorkflowStatusResponse
+ 104, // 251: vtadmin.VTAdmin.SetReadOnly:output_type -> vtadmin.SetReadOnlyResponse
+ 106, // 252: vtadmin.VTAdmin.SetReadWrite:output_type -> vtadmin.SetReadWriteResponse
+ 108, // 253: vtadmin.VTAdmin.StartReplication:output_type -> vtadmin.StartReplicationResponse
+ 110, // 254: vtadmin.VTAdmin.StopReplication:output_type -> vtadmin.StopReplicationResponse
+ 112, // 255: vtadmin.VTAdmin.TabletExternallyPromoted:output_type -> vtadmin.TabletExternallyPromotedResponse
+ 196, // 256: vtadmin.VTAdmin.Validate:output_type -> vtctldata.ValidateResponse
+ 197, // 257: vtadmin.VTAdmin.ValidateKeyspace:output_type -> vtctldata.ValidateKeyspaceResponse
+ 198, // 258: vtadmin.VTAdmin.ValidateSchemaKeyspace:output_type -> vtctldata.ValidateSchemaKeyspaceResponse
+ 199, // 259: vtadmin.VTAdmin.ValidateShard:output_type -> vtctldata.ValidateShardResponse
+ 200, // 260: vtadmin.VTAdmin.ValidateVersionKeyspace:output_type -> vtctldata.ValidateVersionKeyspaceResponse
+ 201, // 261: vtadmin.VTAdmin.ValidateVersionShard:output_type -> vtctldata.ValidateVersionShardResponse
+ 202, // 262: vtadmin.VTAdmin.VDiffCreate:output_type -> vtctldata.VDiffCreateResponse
+ 124, // 263: vtadmin.VTAdmin.VDiffShow:output_type -> vtadmin.VDiffShowResponse
+ 126, // 264: vtadmin.VTAdmin.VTExplain:output_type -> vtadmin.VTExplainResponse
+ 203, // 265: vtadmin.VTAdmin.WorkflowDelete:output_type -> vtctldata.WorkflowDeleteResponse
+ 204, // 266: vtadmin.VTAdmin.WorkflowSwitchTraffic:output_type -> vtctldata.WorkflowSwitchTrafficResponse
+ 195, // [195:267] is the sub-list for method output_type
+ 123, // [123:195] is the sub-list for method input_type
+ 123, // [123:123] is the sub-list for extension type_name
+ 123, // [123:123] is the sub-list for extension extendee
+ 0, // [0:123] is the sub-list for field type_name
}
func init() { file_vtadmin_proto_init() }
@@ -8781,1455 +9448,13 @@ func file_vtadmin_proto_init() {
if File_vtadmin_proto != nil {
return
}
- if !protoimpl.UnsafeEnabled {
- file_vtadmin_proto_msgTypes[0].Exporter = func(v any, i int) any {
- switch v := v.(*Cluster); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[1].Exporter = func(v any, i int) any {
- switch v := v.(*ClusterBackup); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[2].Exporter = func(v any, i int) any {
- switch v := v.(*ClusterCellsAliases); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[3].Exporter = func(v any, i int) any {
- switch v := v.(*ClusterCellInfo); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[4].Exporter = func(v any, i int) any {
- switch v := v.(*ClusterShardReplicationPosition); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[5].Exporter = func(v any, i int) any {
- switch v := v.(*ClusterWorkflows); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[6].Exporter = func(v any, i int) any {
- switch v := v.(*Keyspace); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[7].Exporter = func(v any, i int) any {
- switch v := v.(*Schema); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[8].Exporter = func(v any, i int) any {
- switch v := v.(*SchemaMigration); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[9].Exporter = func(v any, i int) any {
- switch v := v.(*Shard); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[10].Exporter = func(v any, i int) any {
- switch v := v.(*SrvVSchema); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[11].Exporter = func(v any, i int) any {
- switch v := v.(*Tablet); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[12].Exporter = func(v any, i int) any {
- switch v := v.(*VSchema); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[13].Exporter = func(v any, i int) any {
- switch v := v.(*Vtctld); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[14].Exporter = func(v any, i int) any {
- switch v := v.(*VTGate); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[15].Exporter = func(v any, i int) any {
- switch v := v.(*Workflow); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[16].Exporter = func(v any, i int) any {
- switch v := v.(*ApplySchemaRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[17].Exporter = func(v any, i int) any {
- switch v := v.(*CancelSchemaMigrationRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[18].Exporter = func(v any, i int) any {
- switch v := v.(*CleanupSchemaMigrationRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[19].Exporter = func(v any, i int) any {
- switch v := v.(*CompleteSchemaMigrationRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[20].Exporter = func(v any, i int) any {
- switch v := v.(*CreateKeyspaceRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[21].Exporter = func(v any, i int) any {
- switch v := v.(*CreateKeyspaceResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[22].Exporter = func(v any, i int) any {
- switch v := v.(*CreateShardRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[23].Exporter = func(v any, i int) any {
- switch v := v.(*DeleteKeyspaceRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[24].Exporter = func(v any, i int) any {
- switch v := v.(*DeleteShardsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[25].Exporter = func(v any, i int) any {
- switch v := v.(*DeleteTabletRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[26].Exporter = func(v any, i int) any {
- switch v := v.(*DeleteTabletResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[27].Exporter = func(v any, i int) any {
- switch v := v.(*EmergencyFailoverShardRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[28].Exporter = func(v any, i int) any {
- switch v := v.(*EmergencyFailoverShardResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[29].Exporter = func(v any, i int) any {
- switch v := v.(*FindSchemaRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[30].Exporter = func(v any, i int) any {
- switch v := v.(*GetBackupsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[31].Exporter = func(v any, i int) any {
- switch v := v.(*GetBackupsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[32].Exporter = func(v any, i int) any {
- switch v := v.(*GetCellInfosRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[33].Exporter = func(v any, i int) any {
- switch v := v.(*GetCellInfosResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[34].Exporter = func(v any, i int) any {
- switch v := v.(*GetCellsAliasesRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[35].Exporter = func(v any, i int) any {
- switch v := v.(*GetCellsAliasesResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[36].Exporter = func(v any, i int) any {
- switch v := v.(*GetClustersRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[37].Exporter = func(v any, i int) any {
- switch v := v.(*GetClustersResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[38].Exporter = func(v any, i int) any {
- switch v := v.(*GetFullStatusRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[39].Exporter = func(v any, i int) any {
- switch v := v.(*GetGatesRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[40].Exporter = func(v any, i int) any {
- switch v := v.(*GetGatesResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[41].Exporter = func(v any, i int) any {
- switch v := v.(*GetKeyspaceRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[42].Exporter = func(v any, i int) any {
- switch v := v.(*GetKeyspacesRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[43].Exporter = func(v any, i int) any {
- switch v := v.(*GetKeyspacesResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[44].Exporter = func(v any, i int) any {
- switch v := v.(*GetSchemaRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[45].Exporter = func(v any, i int) any {
- switch v := v.(*GetSchemasRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[46].Exporter = func(v any, i int) any {
- switch v := v.(*GetSchemasResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[47].Exporter = func(v any, i int) any {
- switch v := v.(*GetSchemaMigrationsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[48].Exporter = func(v any, i int) any {
- switch v := v.(*GetSchemaMigrationsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[49].Exporter = func(v any, i int) any {
- switch v := v.(*GetShardReplicationPositionsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[50].Exporter = func(v any, i int) any {
- switch v := v.(*GetShardReplicationPositionsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[51].Exporter = func(v any, i int) any {
- switch v := v.(*GetSrvKeyspaceRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[52].Exporter = func(v any, i int) any {
- switch v := v.(*GetSrvKeyspacesRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[53].Exporter = func(v any, i int) any {
- switch v := v.(*GetSrvKeyspacesResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[54].Exporter = func(v any, i int) any {
- switch v := v.(*GetSrvVSchemaRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[55].Exporter = func(v any, i int) any {
- switch v := v.(*GetSrvVSchemasRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[56].Exporter = func(v any, i int) any {
- switch v := v.(*GetSrvVSchemasResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[57].Exporter = func(v any, i int) any {
- switch v := v.(*GetSchemaTableSizeOptions); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[58].Exporter = func(v any, i int) any {
- switch v := v.(*GetTabletRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[59].Exporter = func(v any, i int) any {
- switch v := v.(*GetTabletsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[60].Exporter = func(v any, i int) any {
- switch v := v.(*GetTabletsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[61].Exporter = func(v any, i int) any {
- switch v := v.(*GetTopologyPathRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[62].Exporter = func(v any, i int) any {
- switch v := v.(*GetUnresolvedTransactionsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[63].Exporter = func(v any, i int) any {
- switch v := v.(*GetVSchemaRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[64].Exporter = func(v any, i int) any {
- switch v := v.(*GetVSchemasRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[65].Exporter = func(v any, i int) any {
- switch v := v.(*GetVSchemasResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[66].Exporter = func(v any, i int) any {
- switch v := v.(*GetVtctldsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[67].Exporter = func(v any, i int) any {
- switch v := v.(*GetVtctldsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[68].Exporter = func(v any, i int) any {
- switch v := v.(*GetWorkflowRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[69].Exporter = func(v any, i int) any {
- switch v := v.(*GetWorkflowStatusRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[70].Exporter = func(v any, i int) any {
- switch v := v.(*StartWorkflowRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[71].Exporter = func(v any, i int) any {
- switch v := v.(*StopWorkflowRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[72].Exporter = func(v any, i int) any {
- switch v := v.(*GetWorkflowsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[73].Exporter = func(v any, i int) any {
- switch v := v.(*GetWorkflowsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[74].Exporter = func(v any, i int) any {
- switch v := v.(*LaunchSchemaMigrationRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[75].Exporter = func(v any, i int) any {
- switch v := v.(*MoveTablesCreateRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[76].Exporter = func(v any, i int) any {
- switch v := v.(*PingTabletRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[77].Exporter = func(v any, i int) any {
- switch v := v.(*PingTabletResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[78].Exporter = func(v any, i int) any {
- switch v := v.(*PlannedFailoverShardRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[79].Exporter = func(v any, i int) any {
- switch v := v.(*PlannedFailoverShardResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[80].Exporter = func(v any, i int) any {
- switch v := v.(*RebuildKeyspaceGraphRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[81].Exporter = func(v any, i int) any {
- switch v := v.(*RebuildKeyspaceGraphResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[82].Exporter = func(v any, i int) any {
- switch v := v.(*RefreshStateRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[83].Exporter = func(v any, i int) any {
- switch v := v.(*RefreshStateResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[84].Exporter = func(v any, i int) any {
- switch v := v.(*ReloadSchemasRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[85].Exporter = func(v any, i int) any {
- switch v := v.(*ReloadSchemasResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[86].Exporter = func(v any, i int) any {
- switch v := v.(*ReloadSchemaShardRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[87].Exporter = func(v any, i int) any {
- switch v := v.(*ReloadSchemaShardResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[88].Exporter = func(v any, i int) any {
- switch v := v.(*RefreshTabletReplicationSourceRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[89].Exporter = func(v any, i int) any {
- switch v := v.(*RefreshTabletReplicationSourceResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[90].Exporter = func(v any, i int) any {
- switch v := v.(*RemoveKeyspaceCellRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[91].Exporter = func(v any, i int) any {
- switch v := v.(*RemoveKeyspaceCellResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[92].Exporter = func(v any, i int) any {
- switch v := v.(*RetrySchemaMigrationRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[93].Exporter = func(v any, i int) any {
- switch v := v.(*RunHealthCheckRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[94].Exporter = func(v any, i int) any {
- switch v := v.(*RunHealthCheckResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[95].Exporter = func(v any, i int) any {
- switch v := v.(*SetReadOnlyRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[96].Exporter = func(v any, i int) any {
- switch v := v.(*SetReadOnlyResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[97].Exporter = func(v any, i int) any {
- switch v := v.(*SetReadWriteRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[98].Exporter = func(v any, i int) any {
- switch v := v.(*SetReadWriteResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[99].Exporter = func(v any, i int) any {
- switch v := v.(*StartReplicationRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[100].Exporter = func(v any, i int) any {
- switch v := v.(*StartReplicationResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[101].Exporter = func(v any, i int) any {
- switch v := v.(*StopReplicationRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[102].Exporter = func(v any, i int) any {
- switch v := v.(*StopReplicationResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[103].Exporter = func(v any, i int) any {
- switch v := v.(*TabletExternallyPromotedRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[104].Exporter = func(v any, i int) any {
- switch v := v.(*TabletExternallyPromotedResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[105].Exporter = func(v any, i int) any {
- switch v := v.(*TabletExternallyReparentedRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[106].Exporter = func(v any, i int) any {
- switch v := v.(*ValidateRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[107].Exporter = func(v any, i int) any {
- switch v := v.(*ValidateKeyspaceRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[108].Exporter = func(v any, i int) any {
- switch v := v.(*ValidateSchemaKeyspaceRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[109].Exporter = func(v any, i int) any {
- switch v := v.(*ValidateShardRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[110].Exporter = func(v any, i int) any {
- switch v := v.(*ValidateVersionKeyspaceRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[111].Exporter = func(v any, i int) any {
- switch v := v.(*ValidateVersionShardRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[112].Exporter = func(v any, i int) any {
- switch v := v.(*VTExplainRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[113].Exporter = func(v any, i int) any {
- switch v := v.(*VTExplainResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[117].Exporter = func(v any, i int) any {
- switch v := v.(*Schema_ShardTableSize); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[118].Exporter = func(v any, i int) any {
- switch v := v.(*Schema_TableSize); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[120].Exporter = func(v any, i int) any {
- switch v := v.(*GetSchemaMigrationsRequest_ClusterRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[123].Exporter = func(v any, i int) any {
- switch v := v.(*ReloadSchemasResponse_KeyspaceResult); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[124].Exporter = func(v any, i int) any {
- switch v := v.(*ReloadSchemasResponse_ShardResult); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtadmin_proto_msgTypes[125].Exporter = func(v any, i int) any {
- switch v := v.(*ReloadSchemasResponse_TabletResult); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_vtadmin_proto_rawDesc,
NumEnums: 1,
- NumMessages: 126,
+ NumMessages: 139,
NumExtensions: 0,
NumServices: 1,
},
diff --git a/go/vt/proto/vtadmin/vtadmin_grpc.pb.go b/go/vt/proto/vtadmin/vtadmin_grpc.pb.go
index f3df0417cdc..89fffccd424 100644
--- a/go/vt/proto/vtadmin/vtadmin_grpc.pb.go
+++ b/go/vt/proto/vtadmin/vtadmin_grpc.pb.go
@@ -34,6 +34,8 @@ type VTAdminClient interface {
// CompleteSchemaMigration completes one or all migrations in the given
// cluster executed with --postpone-completion.
CompleteSchemaMigration(ctx context.Context, in *CompleteSchemaMigrationRequest, opts ...grpc.CallOption) (*vtctldata.CompleteSchemaMigrationResponse, error)
+ // ConcludeTransaction concludes a distributed transaction identified by the provided dtid.
+ ConcludeTransaction(ctx context.Context, in *ConcludeTransactionRequest, opts ...grpc.CallOption) (*vtctldata.ConcludeTransactionResponse, error)
// CreateKeyspace creates a new keyspace in the given cluster.
CreateKeyspace(ctx context.Context, in *CreateKeyspaceRequest, opts ...grpc.CallOption) (*CreateKeyspaceResponse, error)
// CreateShard creates a new shard in the given cluster and keyspace.
@@ -104,6 +106,8 @@ type VTAdminClient interface {
GetTablets(ctx context.Context, in *GetTabletsRequest, opts ...grpc.CallOption) (*GetTabletsResponse, error)
// GetTopologyPath returns the cell located at the specified path in the topology server.
GetTopologyPath(ctx context.Context, in *GetTopologyPathRequest, opts ...grpc.CallOption) (*vtctldata.GetTopologyPathResponse, error)
+ // GetTransactionInfo returns the information about a single transaction.
+ GetTransactionInfo(ctx context.Context, in *GetTransactionInfoRequest, opts ...grpc.CallOption) (*vtctldata.GetTransactionInfoResponse, error)
// GetUnresolvedTransactions returns the unresolved transactions for the request.
GetUnresolvedTransactions(ctx context.Context, in *GetUnresolvedTransactionsRequest, opts ...grpc.CallOption) (*vtctldata.GetUnresolvedTransactionsResponse, error)
// GetVSchema returns a VSchema for the specified keyspace in the specified
@@ -127,9 +131,15 @@ type VTAdminClient interface {
// LaunchSchemaMigration launches one or all migrations in the given
// cluster executed with --postpone-launch.
LaunchSchemaMigration(ctx context.Context, in *LaunchSchemaMigrationRequest, opts ...grpc.CallOption) (*vtctldata.LaunchSchemaMigrationResponse, error)
+ // MoveTablesComplete completes the move and cleans up the workflow and
+ // its related artifacts.
+ MoveTablesComplete(ctx context.Context, in *MoveTablesCompleteRequest, opts ...grpc.CallOption) (*vtctldata.MoveTablesCompleteResponse, error)
// MoveTablesCreate creates a workflow which moves one or more tables from a
// source keyspace to a target keyspace.
MoveTablesCreate(ctx context.Context, in *MoveTablesCreateRequest, opts ...grpc.CallOption) (*vtctldata.WorkflowStatusResponse, error)
+ // MaterializeCreate creates a workflow to materialize one or more tables
+ // from a source keyspace to a target keyspace using a provided expressions.
+ MaterializeCreate(ctx context.Context, in *MaterializeCreateRequest, opts ...grpc.CallOption) (*vtctldata.MaterializeCreateResponse, error)
// PingTablet checks that the specified tablet is awake and responding to
// RPCs. This command can be blocked by other in-flight operations.
PingTablet(ctx context.Context, in *PingTabletRequest, opts ...grpc.CallOption) (*PingTabletResponse, error)
@@ -161,6 +171,8 @@ type VTAdminClient interface {
RetrySchemaMigration(ctx context.Context, in *RetrySchemaMigrationRequest, opts ...grpc.CallOption) (*vtctldata.RetrySchemaMigrationResponse, error)
// RunHealthCheck runs a healthcheck on the tablet.
RunHealthCheck(ctx context.Context, in *RunHealthCheckRequest, opts ...grpc.CallOption) (*RunHealthCheckResponse, error)
+ // ReshardCreate creates a workflow to reshard a keyspace.
+ ReshardCreate(ctx context.Context, in *ReshardCreateRequest, opts ...grpc.CallOption) (*vtctldata.WorkflowStatusResponse, error)
// SetReadOnly sets the tablet to read-only mode.
SetReadOnly(ctx context.Context, in *SetReadOnlyRequest, opts ...grpc.CallOption) (*SetReadOnlyResponse, error)
// SetReadWrite sets the tablet to read-write mode.
@@ -198,9 +210,15 @@ type VTAdminClient interface {
ValidateVersionKeyspace(ctx context.Context, in *ValidateVersionKeyspaceRequest, opts ...grpc.CallOption) (*vtctldata.ValidateVersionKeyspaceResponse, error)
// ValidateVersionShard validates that the version on the primary matches all of the replicas.
ValidateVersionShard(ctx context.Context, in *ValidateVersionShardRequest, opts ...grpc.CallOption) (*vtctldata.ValidateVersionShardResponse, error)
+ VDiffCreate(ctx context.Context, in *VDiffCreateRequest, opts ...grpc.CallOption) (*vtctldata.VDiffCreateResponse, error)
+ VDiffShow(ctx context.Context, in *VDiffShowRequest, opts ...grpc.CallOption) (*VDiffShowResponse, error)
// VTExplain provides information on how Vitess plans to execute a
// particular query.
VTExplain(ctx context.Context, in *VTExplainRequest, opts ...grpc.CallOption) (*VTExplainResponse, error)
+ // WorkflowDelete deletes a vreplication workflow.
+ WorkflowDelete(ctx context.Context, in *WorkflowDeleteRequest, opts ...grpc.CallOption) (*vtctldata.WorkflowDeleteResponse, error)
+ // WorkflowSwitchTraffic switches traffic for a VReplication workflow.
+ WorkflowSwitchTraffic(ctx context.Context, in *WorkflowSwitchTrafficRequest, opts ...grpc.CallOption) (*vtctldata.WorkflowSwitchTrafficResponse, error)
}
type vTAdminClient struct {
@@ -247,6 +265,15 @@ func (c *vTAdminClient) CompleteSchemaMigration(ctx context.Context, in *Complet
return out, nil
}
+func (c *vTAdminClient) ConcludeTransaction(ctx context.Context, in *ConcludeTransactionRequest, opts ...grpc.CallOption) (*vtctldata.ConcludeTransactionResponse, error) {
+ out := new(vtctldata.ConcludeTransactionResponse)
+ err := c.cc.Invoke(ctx, "/vtadmin.VTAdmin/ConcludeTransaction", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *vTAdminClient) CreateKeyspace(ctx context.Context, in *CreateKeyspaceRequest, opts ...grpc.CallOption) (*CreateKeyspaceResponse, error) {
out := new(CreateKeyspaceResponse)
err := c.cc.Invoke(ctx, "/vtadmin.VTAdmin/CreateKeyspace", in, out, opts...)
@@ -481,6 +508,15 @@ func (c *vTAdminClient) GetTopologyPath(ctx context.Context, in *GetTopologyPath
return out, nil
}
+func (c *vTAdminClient) GetTransactionInfo(ctx context.Context, in *GetTransactionInfoRequest, opts ...grpc.CallOption) (*vtctldata.GetTransactionInfoResponse, error) {
+ out := new(vtctldata.GetTransactionInfoResponse)
+ err := c.cc.Invoke(ctx, "/vtadmin.VTAdmin/GetTransactionInfo", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *vTAdminClient) GetUnresolvedTransactions(ctx context.Context, in *GetUnresolvedTransactionsRequest, opts ...grpc.CallOption) (*vtctldata.GetUnresolvedTransactionsResponse, error) {
out := new(vtctldata.GetUnresolvedTransactionsResponse)
err := c.cc.Invoke(ctx, "/vtadmin.VTAdmin/GetUnresolvedTransactions", in, out, opts...)
@@ -571,6 +607,15 @@ func (c *vTAdminClient) LaunchSchemaMigration(ctx context.Context, in *LaunchSch
return out, nil
}
+func (c *vTAdminClient) MoveTablesComplete(ctx context.Context, in *MoveTablesCompleteRequest, opts ...grpc.CallOption) (*vtctldata.MoveTablesCompleteResponse, error) {
+ out := new(vtctldata.MoveTablesCompleteResponse)
+ err := c.cc.Invoke(ctx, "/vtadmin.VTAdmin/MoveTablesComplete", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *vTAdminClient) MoveTablesCreate(ctx context.Context, in *MoveTablesCreateRequest, opts ...grpc.CallOption) (*vtctldata.WorkflowStatusResponse, error) {
out := new(vtctldata.WorkflowStatusResponse)
err := c.cc.Invoke(ctx, "/vtadmin.VTAdmin/MoveTablesCreate", in, out, opts...)
@@ -580,6 +625,15 @@ func (c *vTAdminClient) MoveTablesCreate(ctx context.Context, in *MoveTablesCrea
return out, nil
}
+func (c *vTAdminClient) MaterializeCreate(ctx context.Context, in *MaterializeCreateRequest, opts ...grpc.CallOption) (*vtctldata.MaterializeCreateResponse, error) {
+ out := new(vtctldata.MaterializeCreateResponse)
+ err := c.cc.Invoke(ctx, "/vtadmin.VTAdmin/MaterializeCreate", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *vTAdminClient) PingTablet(ctx context.Context, in *PingTabletRequest, opts ...grpc.CallOption) (*PingTabletResponse, error) {
out := new(PingTabletResponse)
err := c.cc.Invoke(ctx, "/vtadmin.VTAdmin/PingTablet", in, out, opts...)
@@ -670,6 +724,15 @@ func (c *vTAdminClient) RunHealthCheck(ctx context.Context, in *RunHealthCheckRe
return out, nil
}
+func (c *vTAdminClient) ReshardCreate(ctx context.Context, in *ReshardCreateRequest, opts ...grpc.CallOption) (*vtctldata.WorkflowStatusResponse, error) {
+ out := new(vtctldata.WorkflowStatusResponse)
+ err := c.cc.Invoke(ctx, "/vtadmin.VTAdmin/ReshardCreate", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *vTAdminClient) SetReadOnly(ctx context.Context, in *SetReadOnlyRequest, opts ...grpc.CallOption) (*SetReadOnlyResponse, error) {
out := new(SetReadOnlyResponse)
err := c.cc.Invoke(ctx, "/vtadmin.VTAdmin/SetReadOnly", in, out, opts...)
@@ -769,6 +832,24 @@ func (c *vTAdminClient) ValidateVersionShard(ctx context.Context, in *ValidateVe
return out, nil
}
+func (c *vTAdminClient) VDiffCreate(ctx context.Context, in *VDiffCreateRequest, opts ...grpc.CallOption) (*vtctldata.VDiffCreateResponse, error) {
+ out := new(vtctldata.VDiffCreateResponse)
+ err := c.cc.Invoke(ctx, "/vtadmin.VTAdmin/VDiffCreate", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *vTAdminClient) VDiffShow(ctx context.Context, in *VDiffShowRequest, opts ...grpc.CallOption) (*VDiffShowResponse, error) {
+ out := new(VDiffShowResponse)
+ err := c.cc.Invoke(ctx, "/vtadmin.VTAdmin/VDiffShow", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *vTAdminClient) VTExplain(ctx context.Context, in *VTExplainRequest, opts ...grpc.CallOption) (*VTExplainResponse, error) {
out := new(VTExplainResponse)
err := c.cc.Invoke(ctx, "/vtadmin.VTAdmin/VTExplain", in, out, opts...)
@@ -778,6 +859,24 @@ func (c *vTAdminClient) VTExplain(ctx context.Context, in *VTExplainRequest, opt
return out, nil
}
+func (c *vTAdminClient) WorkflowDelete(ctx context.Context, in *WorkflowDeleteRequest, opts ...grpc.CallOption) (*vtctldata.WorkflowDeleteResponse, error) {
+ out := new(vtctldata.WorkflowDeleteResponse)
+ err := c.cc.Invoke(ctx, "/vtadmin.VTAdmin/WorkflowDelete", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *vTAdminClient) WorkflowSwitchTraffic(ctx context.Context, in *WorkflowSwitchTrafficRequest, opts ...grpc.CallOption) (*vtctldata.WorkflowSwitchTrafficResponse, error) {
+ out := new(vtctldata.WorkflowSwitchTrafficResponse)
+ err := c.cc.Invoke(ctx, "/vtadmin.VTAdmin/WorkflowSwitchTraffic", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
// VTAdminServer is the server API for VTAdmin service.
// All implementations must embed UnimplementedVTAdminServer
// for forward compatibility
@@ -793,6 +892,8 @@ type VTAdminServer interface {
// CompleteSchemaMigration completes one or all migrations in the given
// cluster executed with --postpone-completion.
CompleteSchemaMigration(context.Context, *CompleteSchemaMigrationRequest) (*vtctldata.CompleteSchemaMigrationResponse, error)
+ // ConcludeTransaction concludes a distributed transaction identified by the provided dtid.
+ ConcludeTransaction(context.Context, *ConcludeTransactionRequest) (*vtctldata.ConcludeTransactionResponse, error)
// CreateKeyspace creates a new keyspace in the given cluster.
CreateKeyspace(context.Context, *CreateKeyspaceRequest) (*CreateKeyspaceResponse, error)
// CreateShard creates a new shard in the given cluster and keyspace.
@@ -863,6 +964,8 @@ type VTAdminServer interface {
GetTablets(context.Context, *GetTabletsRequest) (*GetTabletsResponse, error)
// GetTopologyPath returns the cell located at the specified path in the topology server.
GetTopologyPath(context.Context, *GetTopologyPathRequest) (*vtctldata.GetTopologyPathResponse, error)
+ // GetTransactionInfo returns the information about a single transaction.
+ GetTransactionInfo(context.Context, *GetTransactionInfoRequest) (*vtctldata.GetTransactionInfoResponse, error)
// GetUnresolvedTransactions returns the unresolved transactions for the request.
GetUnresolvedTransactions(context.Context, *GetUnresolvedTransactionsRequest) (*vtctldata.GetUnresolvedTransactionsResponse, error)
// GetVSchema returns a VSchema for the specified keyspace in the specified
@@ -886,9 +989,15 @@ type VTAdminServer interface {
// LaunchSchemaMigration launches one or all migrations in the given
// cluster executed with --postpone-launch.
LaunchSchemaMigration(context.Context, *LaunchSchemaMigrationRequest) (*vtctldata.LaunchSchemaMigrationResponse, error)
+ // MoveTablesComplete completes the move and cleans up the workflow and
+ // its related artifacts.
+ MoveTablesComplete(context.Context, *MoveTablesCompleteRequest) (*vtctldata.MoveTablesCompleteResponse, error)
// MoveTablesCreate creates a workflow which moves one or more tables from a
// source keyspace to a target keyspace.
MoveTablesCreate(context.Context, *MoveTablesCreateRequest) (*vtctldata.WorkflowStatusResponse, error)
+ // MaterializeCreate creates a workflow to materialize one or more tables
+ // from a source keyspace to a target keyspace using a provided expressions.
+ MaterializeCreate(context.Context, *MaterializeCreateRequest) (*vtctldata.MaterializeCreateResponse, error)
// PingTablet checks that the specified tablet is awake and responding to
// RPCs. This command can be blocked by other in-flight operations.
PingTablet(context.Context, *PingTabletRequest) (*PingTabletResponse, error)
@@ -920,6 +1029,8 @@ type VTAdminServer interface {
RetrySchemaMigration(context.Context, *RetrySchemaMigrationRequest) (*vtctldata.RetrySchemaMigrationResponse, error)
// RunHealthCheck runs a healthcheck on the tablet.
RunHealthCheck(context.Context, *RunHealthCheckRequest) (*RunHealthCheckResponse, error)
+ // ReshardCreate creates a workflow to reshard a keyspace.
+ ReshardCreate(context.Context, *ReshardCreateRequest) (*vtctldata.WorkflowStatusResponse, error)
// SetReadOnly sets the tablet to read-only mode.
SetReadOnly(context.Context, *SetReadOnlyRequest) (*SetReadOnlyResponse, error)
// SetReadWrite sets the tablet to read-write mode.
@@ -957,9 +1068,15 @@ type VTAdminServer interface {
ValidateVersionKeyspace(context.Context, *ValidateVersionKeyspaceRequest) (*vtctldata.ValidateVersionKeyspaceResponse, error)
// ValidateVersionShard validates that the version on the primary matches all of the replicas.
ValidateVersionShard(context.Context, *ValidateVersionShardRequest) (*vtctldata.ValidateVersionShardResponse, error)
+ VDiffCreate(context.Context, *VDiffCreateRequest) (*vtctldata.VDiffCreateResponse, error)
+ VDiffShow(context.Context, *VDiffShowRequest) (*VDiffShowResponse, error)
// VTExplain provides information on how Vitess plans to execute a
// particular query.
VTExplain(context.Context, *VTExplainRequest) (*VTExplainResponse, error)
+ // WorkflowDelete deletes a vreplication workflow.
+ WorkflowDelete(context.Context, *WorkflowDeleteRequest) (*vtctldata.WorkflowDeleteResponse, error)
+ // WorkflowSwitchTraffic switches traffic for a VReplication workflow.
+ WorkflowSwitchTraffic(context.Context, *WorkflowSwitchTrafficRequest) (*vtctldata.WorkflowSwitchTrafficResponse, error)
mustEmbedUnimplementedVTAdminServer()
}
@@ -979,6 +1096,9 @@ func (UnimplementedVTAdminServer) CleanupSchemaMigration(context.Context, *Clean
func (UnimplementedVTAdminServer) CompleteSchemaMigration(context.Context, *CompleteSchemaMigrationRequest) (*vtctldata.CompleteSchemaMigrationResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method CompleteSchemaMigration not implemented")
}
+func (UnimplementedVTAdminServer) ConcludeTransaction(context.Context, *ConcludeTransactionRequest) (*vtctldata.ConcludeTransactionResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method ConcludeTransaction not implemented")
+}
func (UnimplementedVTAdminServer) CreateKeyspace(context.Context, *CreateKeyspaceRequest) (*CreateKeyspaceResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method CreateKeyspace not implemented")
}
@@ -1057,6 +1177,9 @@ func (UnimplementedVTAdminServer) GetTablets(context.Context, *GetTabletsRequest
func (UnimplementedVTAdminServer) GetTopologyPath(context.Context, *GetTopologyPathRequest) (*vtctldata.GetTopologyPathResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetTopologyPath not implemented")
}
+func (UnimplementedVTAdminServer) GetTransactionInfo(context.Context, *GetTransactionInfoRequest) (*vtctldata.GetTransactionInfoResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method GetTransactionInfo not implemented")
+}
func (UnimplementedVTAdminServer) GetUnresolvedTransactions(context.Context, *GetUnresolvedTransactionsRequest) (*vtctldata.GetUnresolvedTransactionsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetUnresolvedTransactions not implemented")
}
@@ -1087,9 +1210,15 @@ func (UnimplementedVTAdminServer) StopWorkflow(context.Context, *StopWorkflowReq
func (UnimplementedVTAdminServer) LaunchSchemaMigration(context.Context, *LaunchSchemaMigrationRequest) (*vtctldata.LaunchSchemaMigrationResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method LaunchSchemaMigration not implemented")
}
+func (UnimplementedVTAdminServer) MoveTablesComplete(context.Context, *MoveTablesCompleteRequest) (*vtctldata.MoveTablesCompleteResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method MoveTablesComplete not implemented")
+}
func (UnimplementedVTAdminServer) MoveTablesCreate(context.Context, *MoveTablesCreateRequest) (*vtctldata.WorkflowStatusResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method MoveTablesCreate not implemented")
}
+func (UnimplementedVTAdminServer) MaterializeCreate(context.Context, *MaterializeCreateRequest) (*vtctldata.MaterializeCreateResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method MaterializeCreate not implemented")
+}
func (UnimplementedVTAdminServer) PingTablet(context.Context, *PingTabletRequest) (*PingTabletResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method PingTablet not implemented")
}
@@ -1120,6 +1249,9 @@ func (UnimplementedVTAdminServer) RetrySchemaMigration(context.Context, *RetrySc
func (UnimplementedVTAdminServer) RunHealthCheck(context.Context, *RunHealthCheckRequest) (*RunHealthCheckResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method RunHealthCheck not implemented")
}
+func (UnimplementedVTAdminServer) ReshardCreate(context.Context, *ReshardCreateRequest) (*vtctldata.WorkflowStatusResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method ReshardCreate not implemented")
+}
func (UnimplementedVTAdminServer) SetReadOnly(context.Context, *SetReadOnlyRequest) (*SetReadOnlyResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method SetReadOnly not implemented")
}
@@ -1153,9 +1285,21 @@ func (UnimplementedVTAdminServer) ValidateVersionKeyspace(context.Context, *Vali
func (UnimplementedVTAdminServer) ValidateVersionShard(context.Context, *ValidateVersionShardRequest) (*vtctldata.ValidateVersionShardResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ValidateVersionShard not implemented")
}
+func (UnimplementedVTAdminServer) VDiffCreate(context.Context, *VDiffCreateRequest) (*vtctldata.VDiffCreateResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method VDiffCreate not implemented")
+}
+func (UnimplementedVTAdminServer) VDiffShow(context.Context, *VDiffShowRequest) (*VDiffShowResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method VDiffShow not implemented")
+}
func (UnimplementedVTAdminServer) VTExplain(context.Context, *VTExplainRequest) (*VTExplainResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method VTExplain not implemented")
}
+func (UnimplementedVTAdminServer) WorkflowDelete(context.Context, *WorkflowDeleteRequest) (*vtctldata.WorkflowDeleteResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method WorkflowDelete not implemented")
+}
+func (UnimplementedVTAdminServer) WorkflowSwitchTraffic(context.Context, *WorkflowSwitchTrafficRequest) (*vtctldata.WorkflowSwitchTrafficResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method WorkflowSwitchTraffic not implemented")
+}
func (UnimplementedVTAdminServer) mustEmbedUnimplementedVTAdminServer() {}
// UnsafeVTAdminServer may be embedded to opt out of forward compatibility for this service.
@@ -1241,6 +1385,24 @@ func _VTAdmin_CompleteSchemaMigration_Handler(srv interface{}, ctx context.Conte
return interceptor(ctx, in, info, handler)
}
+func _VTAdmin_ConcludeTransaction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(ConcludeTransactionRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(VTAdminServer).ConcludeTransaction(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/vtadmin.VTAdmin/ConcludeTransaction",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(VTAdminServer).ConcludeTransaction(ctx, req.(*ConcludeTransactionRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _VTAdmin_CreateKeyspace_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(CreateKeyspaceRequest)
if err := dec(in); err != nil {
@@ -1709,6 +1871,24 @@ func _VTAdmin_GetTopologyPath_Handler(srv interface{}, ctx context.Context, dec
return interceptor(ctx, in, info, handler)
}
+func _VTAdmin_GetTransactionInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(GetTransactionInfoRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(VTAdminServer).GetTransactionInfo(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/vtadmin.VTAdmin/GetTransactionInfo",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(VTAdminServer).GetTransactionInfo(ctx, req.(*GetTransactionInfoRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _VTAdmin_GetUnresolvedTransactions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetUnresolvedTransactionsRequest)
if err := dec(in); err != nil {
@@ -1889,6 +2069,24 @@ func _VTAdmin_LaunchSchemaMigration_Handler(srv interface{}, ctx context.Context
return interceptor(ctx, in, info, handler)
}
+func _VTAdmin_MoveTablesComplete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(MoveTablesCompleteRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(VTAdminServer).MoveTablesComplete(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/vtadmin.VTAdmin/MoveTablesComplete",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(VTAdminServer).MoveTablesComplete(ctx, req.(*MoveTablesCompleteRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _VTAdmin_MoveTablesCreate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(MoveTablesCreateRequest)
if err := dec(in); err != nil {
@@ -1907,6 +2105,24 @@ func _VTAdmin_MoveTablesCreate_Handler(srv interface{}, ctx context.Context, dec
return interceptor(ctx, in, info, handler)
}
+func _VTAdmin_MaterializeCreate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(MaterializeCreateRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(VTAdminServer).MaterializeCreate(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/vtadmin.VTAdmin/MaterializeCreate",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(VTAdminServer).MaterializeCreate(ctx, req.(*MaterializeCreateRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _VTAdmin_PingTablet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(PingTabletRequest)
if err := dec(in); err != nil {
@@ -2087,6 +2303,24 @@ func _VTAdmin_RunHealthCheck_Handler(srv interface{}, ctx context.Context, dec f
return interceptor(ctx, in, info, handler)
}
+func _VTAdmin_ReshardCreate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(ReshardCreateRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(VTAdminServer).ReshardCreate(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/vtadmin.VTAdmin/ReshardCreate",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(VTAdminServer).ReshardCreate(ctx, req.(*ReshardCreateRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _VTAdmin_SetReadOnly_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(SetReadOnlyRequest)
if err := dec(in); err != nil {
@@ -2285,6 +2519,42 @@ func _VTAdmin_ValidateVersionShard_Handler(srv interface{}, ctx context.Context,
return interceptor(ctx, in, info, handler)
}
+func _VTAdmin_VDiffCreate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(VDiffCreateRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(VTAdminServer).VDiffCreate(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/vtadmin.VTAdmin/VDiffCreate",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(VTAdminServer).VDiffCreate(ctx, req.(*VDiffCreateRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _VTAdmin_VDiffShow_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(VDiffShowRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(VTAdminServer).VDiffShow(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/vtadmin.VTAdmin/VDiffShow",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(VTAdminServer).VDiffShow(ctx, req.(*VDiffShowRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _VTAdmin_VTExplain_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(VTExplainRequest)
if err := dec(in); err != nil {
@@ -2303,6 +2573,42 @@ func _VTAdmin_VTExplain_Handler(srv interface{}, ctx context.Context, dec func(i
return interceptor(ctx, in, info, handler)
}
+func _VTAdmin_WorkflowDelete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(WorkflowDeleteRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(VTAdminServer).WorkflowDelete(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/vtadmin.VTAdmin/WorkflowDelete",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(VTAdminServer).WorkflowDelete(ctx, req.(*WorkflowDeleteRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _VTAdmin_WorkflowSwitchTraffic_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(WorkflowSwitchTrafficRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(VTAdminServer).WorkflowSwitchTraffic(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/vtadmin.VTAdmin/WorkflowSwitchTraffic",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(VTAdminServer).WorkflowSwitchTraffic(ctx, req.(*WorkflowSwitchTrafficRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
// VTAdmin_ServiceDesc is the grpc.ServiceDesc for VTAdmin service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
@@ -2326,6 +2632,10 @@ var VTAdmin_ServiceDesc = grpc.ServiceDesc{
MethodName: "CompleteSchemaMigration",
Handler: _VTAdmin_CompleteSchemaMigration_Handler,
},
+ {
+ MethodName: "ConcludeTransaction",
+ Handler: _VTAdmin_ConcludeTransaction_Handler,
+ },
{
MethodName: "CreateKeyspace",
Handler: _VTAdmin_CreateKeyspace_Handler,
@@ -2430,6 +2740,10 @@ var VTAdmin_ServiceDesc = grpc.ServiceDesc{
MethodName: "GetTopologyPath",
Handler: _VTAdmin_GetTopologyPath_Handler,
},
+ {
+ MethodName: "GetTransactionInfo",
+ Handler: _VTAdmin_GetTransactionInfo_Handler,
+ },
{
MethodName: "GetUnresolvedTransactions",
Handler: _VTAdmin_GetUnresolvedTransactions_Handler,
@@ -2470,10 +2784,18 @@ var VTAdmin_ServiceDesc = grpc.ServiceDesc{
MethodName: "LaunchSchemaMigration",
Handler: _VTAdmin_LaunchSchemaMigration_Handler,
},
+ {
+ MethodName: "MoveTablesComplete",
+ Handler: _VTAdmin_MoveTablesComplete_Handler,
+ },
{
MethodName: "MoveTablesCreate",
Handler: _VTAdmin_MoveTablesCreate_Handler,
},
+ {
+ MethodName: "MaterializeCreate",
+ Handler: _VTAdmin_MaterializeCreate_Handler,
+ },
{
MethodName: "PingTablet",
Handler: _VTAdmin_PingTablet_Handler,
@@ -2514,6 +2836,10 @@ var VTAdmin_ServiceDesc = grpc.ServiceDesc{
MethodName: "RunHealthCheck",
Handler: _VTAdmin_RunHealthCheck_Handler,
},
+ {
+ MethodName: "ReshardCreate",
+ Handler: _VTAdmin_ReshardCreate_Handler,
+ },
{
MethodName: "SetReadOnly",
Handler: _VTAdmin_SetReadOnly_Handler,
@@ -2558,10 +2884,26 @@ var VTAdmin_ServiceDesc = grpc.ServiceDesc{
MethodName: "ValidateVersionShard",
Handler: _VTAdmin_ValidateVersionShard_Handler,
},
+ {
+ MethodName: "VDiffCreate",
+ Handler: _VTAdmin_VDiffCreate_Handler,
+ },
+ {
+ MethodName: "VDiffShow",
+ Handler: _VTAdmin_VDiffShow_Handler,
+ },
{
MethodName: "VTExplain",
Handler: _VTAdmin_VTExplain_Handler,
},
+ {
+ MethodName: "WorkflowDelete",
+ Handler: _VTAdmin_WorkflowDelete_Handler,
+ },
+ {
+ MethodName: "WorkflowSwitchTraffic",
+ Handler: _VTAdmin_WorkflowSwitchTraffic_Handler,
+ },
},
Streams: []grpc.StreamDesc{},
Metadata: "vtadmin.proto",
diff --git a/go/vt/proto/vtadmin/vtadmin_vtproto.pb.go b/go/vt/proto/vtadmin/vtadmin_vtproto.pb.go
index bcbc42371cf..82cca2cea06 100644
--- a/go/vt/proto/vtadmin/vtadmin_vtproto.pb.go
+++ b/go/vt/proto/vtadmin/vtadmin_vtproto.pb.go
@@ -1,15 +1,17 @@
// Code generated by protoc-gen-go-vtproto. DO NOT EDIT.
-// protoc-gen-go-vtproto version: v0.6.1-0.20240319094008-0393e58bdf10
+// protoc-gen-go-vtproto version: v0.6.1-0.20241011083415-71c992bc3c87
// source: vtadmin.proto
package vtadmin
import (
+ binary "encoding/binary"
fmt "fmt"
protohelpers "github.com/planetscale/vtprotobuf/protohelpers"
proto "google.golang.org/protobuf/proto"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
io "io"
+ math "math"
logutil "vitess.io/vitess/go/vt/proto/logutil"
mysqlctl "vitess.io/vitess/go/vt/proto/mysqlctl"
tabletmanagerdata "vitess.io/vitess/go/vt/proto/tabletmanagerdata"
@@ -410,12 +412,50 @@ func (m *Workflow) CloneMessageVT() proto.Message {
return m.CloneVT()
}
+func (m *WorkflowDeleteRequest) CloneVT() *WorkflowDeleteRequest {
+ if m == nil {
+ return (*WorkflowDeleteRequest)(nil)
+ }
+ r := new(WorkflowDeleteRequest)
+ r.ClusterId = m.ClusterId
+ r.Request = m.Request.CloneVT()
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *WorkflowDeleteRequest) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
+func (m *WorkflowSwitchTrafficRequest) CloneVT() *WorkflowSwitchTrafficRequest {
+ if m == nil {
+ return (*WorkflowSwitchTrafficRequest)(nil)
+ }
+ r := new(WorkflowSwitchTrafficRequest)
+ r.ClusterId = m.ClusterId
+ r.Request = m.Request.CloneVT()
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *WorkflowSwitchTrafficRequest) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
func (m *ApplySchemaRequest) CloneVT() *ApplySchemaRequest {
if m == nil {
return (*ApplySchemaRequest)(nil)
}
r := new(ApplySchemaRequest)
r.ClusterId = m.ClusterId
+ r.Sql = m.Sql
+ r.CallerId = m.CallerId
r.Request = m.Request.CloneVT()
if len(m.unknownFields) > 0 {
r.unknownFields = make([]byte, len(m.unknownFields))
@@ -482,6 +522,24 @@ func (m *CompleteSchemaMigrationRequest) CloneMessageVT() proto.Message {
return m.CloneVT()
}
+func (m *ConcludeTransactionRequest) CloneVT() *ConcludeTransactionRequest {
+ if m == nil {
+ return (*ConcludeTransactionRequest)(nil)
+ }
+ r := new(ConcludeTransactionRequest)
+ r.ClusterId = m.ClusterId
+ r.Dtid = m.Dtid
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *ConcludeTransactionRequest) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
func (m *CreateKeyspaceRequest) CloneVT() *CreateKeyspaceRequest {
if m == nil {
return (*CreateKeyspaceRequest)(nil)
@@ -1416,6 +1474,24 @@ func (m *GetTopologyPathRequest) CloneMessageVT() proto.Message {
return m.CloneVT()
}
+func (m *GetTransactionInfoRequest) CloneVT() *GetTransactionInfoRequest {
+ if m == nil {
+ return (*GetTransactionInfoRequest)(nil)
+ }
+ r := new(GetTransactionInfoRequest)
+ r.ClusterId = m.ClusterId
+ r.Request = m.Request.CloneVT()
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *GetTransactionInfoRequest) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
func (m *GetUnresolvedTransactionsRequest) CloneVT() *GetUnresolvedTransactionsRequest {
if m == nil {
return (*GetUnresolvedTransactionsRequest)(nil)
@@ -1423,6 +1499,7 @@ func (m *GetUnresolvedTransactionsRequest) CloneVT() *GetUnresolvedTransactionsR
r := new(GetUnresolvedTransactionsRequest)
r.ClusterId = m.ClusterId
r.Keyspace = m.Keyspace
+ r.AbandonAge = m.AbandonAge
if len(m.unknownFields) > 0 {
r.unknownFields = make([]byte, len(m.unknownFields))
copy(r.unknownFields, m.unknownFields)
@@ -1690,6 +1767,43 @@ func (m *LaunchSchemaMigrationRequest) CloneMessageVT() proto.Message {
return m.CloneVT()
}
+func (m *MaterializeCreateRequest) CloneVT() *MaterializeCreateRequest {
+ if m == nil {
+ return (*MaterializeCreateRequest)(nil)
+ }
+ r := new(MaterializeCreateRequest)
+ r.ClusterId = m.ClusterId
+ r.TableSettings = m.TableSettings
+ r.Request = m.Request.CloneVT()
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *MaterializeCreateRequest) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
+func (m *MoveTablesCompleteRequest) CloneVT() *MoveTablesCompleteRequest {
+ if m == nil {
+ return (*MoveTablesCompleteRequest)(nil)
+ }
+ r := new(MoveTablesCompleteRequest)
+ r.ClusterId = m.ClusterId
+ r.Request = m.Request.CloneVT()
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *MoveTablesCompleteRequest) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
func (m *MoveTablesCreateRequest) CloneVT() *MoveTablesCreateRequest {
if m == nil {
return (*MoveTablesCreateRequest)(nil)
@@ -2201,6 +2315,24 @@ func (m *RunHealthCheckResponse) CloneMessageVT() proto.Message {
return m.CloneVT()
}
+func (m *ReshardCreateRequest) CloneVT() *ReshardCreateRequest {
+ if m == nil {
+ return (*ReshardCreateRequest)(nil)
+ }
+ r := new(ReshardCreateRequest)
+ r.ClusterId = m.ClusterId
+ r.Request = m.Request.CloneVT()
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *ReshardCreateRequest) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
func (m *SetReadOnlyRequest) CloneVT() *SetReadOnlyRequest {
if m == nil {
return (*SetReadOnlyRequest)(nil)
@@ -2534,6 +2666,105 @@ func (m *ValidateVersionShardRequest) CloneMessageVT() proto.Message {
return m.CloneVT()
}
+func (m *VDiffCreateRequest) CloneVT() *VDiffCreateRequest {
+ if m == nil {
+ return (*VDiffCreateRequest)(nil)
+ }
+ r := new(VDiffCreateRequest)
+ r.ClusterId = m.ClusterId
+ r.Request = m.Request.CloneVT()
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *VDiffCreateRequest) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
+func (m *VDiffShowRequest) CloneVT() *VDiffShowRequest {
+ if m == nil {
+ return (*VDiffShowRequest)(nil)
+ }
+ r := new(VDiffShowRequest)
+ r.ClusterId = m.ClusterId
+ r.Request = m.Request.CloneVT()
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *VDiffShowRequest) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
+func (m *VDiffProgress) CloneVT() *VDiffProgress {
+ if m == nil {
+ return (*VDiffProgress)(nil)
+ }
+ r := new(VDiffProgress)
+ r.Percentage = m.Percentage
+ r.Eta = m.Eta
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *VDiffProgress) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
+func (m *VDiffShardReport) CloneVT() *VDiffShardReport {
+ if m == nil {
+ return (*VDiffShardReport)(nil)
+ }
+ r := new(VDiffShardReport)
+ r.State = m.State
+ r.RowsCompared = m.RowsCompared
+ r.HasMismatch = m.HasMismatch
+ r.StartedAt = m.StartedAt
+ r.CompletedAt = m.CompletedAt
+ r.Progress = m.Progress.CloneVT()
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *VDiffShardReport) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
+func (m *VDiffShowResponse) CloneVT() *VDiffShowResponse {
+ if m == nil {
+ return (*VDiffShowResponse)(nil)
+ }
+ r := new(VDiffShowResponse)
+ if rhs := m.ShardReport; rhs != nil {
+ tmpContainer := make(map[string]*VDiffShardReport, len(rhs))
+ for k, v := range rhs {
+ tmpContainer[k] = v.CloneVT()
+ }
+ r.ShardReport = tmpContainer
+ }
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *VDiffShowResponse) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
func (m *VTExplainRequest) CloneVT() *VTExplainRequest {
if m == nil {
return (*VTExplainRequest)(nil)
@@ -3671,7 +3902,7 @@ func (m *Workflow) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
return len(dAtA) - i, nil
}
-func (m *ApplySchemaRequest) MarshalVT() (dAtA []byte, err error) {
+func (m *WorkflowDeleteRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
}
@@ -3684,12 +3915,12 @@ func (m *ApplySchemaRequest) MarshalVT() (dAtA []byte, err error) {
return dAtA[:n], nil
}
-func (m *ApplySchemaRequest) MarshalToVT(dAtA []byte) (int, error) {
+func (m *WorkflowDeleteRequest) MarshalToVT(dAtA []byte) (int, error) {
size := m.SizeVT()
return m.MarshalToSizedBufferVT(dAtA[:size])
}
-func (m *ApplySchemaRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+func (m *WorkflowDeleteRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
if m == nil {
return 0, nil
}
@@ -3721,7 +3952,7 @@ func (m *ApplySchemaRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
return len(dAtA) - i, nil
}
-func (m *CancelSchemaMigrationRequest) MarshalVT() (dAtA []byte, err error) {
+func (m *WorkflowSwitchTrafficRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
}
@@ -3734,12 +3965,12 @@ func (m *CancelSchemaMigrationRequest) MarshalVT() (dAtA []byte, err error) {
return dAtA[:n], nil
}
-func (m *CancelSchemaMigrationRequest) MarshalToVT(dAtA []byte) (int, error) {
+func (m *WorkflowSwitchTrafficRequest) MarshalToVT(dAtA []byte) (int, error) {
size := m.SizeVT()
return m.MarshalToSizedBufferVT(dAtA[:size])
}
-func (m *CancelSchemaMigrationRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+func (m *WorkflowSwitchTrafficRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
if m == nil {
return 0, nil
}
@@ -3771,7 +4002,7 @@ func (m *CancelSchemaMigrationRequest) MarshalToSizedBufferVT(dAtA []byte) (int,
return len(dAtA) - i, nil
}
-func (m *CleanupSchemaMigrationRequest) MarshalVT() (dAtA []byte, err error) {
+func (m *ApplySchemaRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
}
@@ -3784,12 +4015,12 @@ func (m *CleanupSchemaMigrationRequest) MarshalVT() (dAtA []byte, err error) {
return dAtA[:n], nil
}
-func (m *CleanupSchemaMigrationRequest) MarshalToVT(dAtA []byte) (int, error) {
+func (m *ApplySchemaRequest) MarshalToVT(dAtA []byte) (int, error) {
size := m.SizeVT()
return m.MarshalToSizedBufferVT(dAtA[:size])
}
-func (m *CleanupSchemaMigrationRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+func (m *ApplySchemaRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
if m == nil {
return 0, nil
}
@@ -3809,6 +4040,20 @@ func (m *CleanupSchemaMigrationRequest) MarshalToSizedBufferVT(dAtA []byte) (int
i -= size
i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
i--
+ dAtA[i] = 0x22
+ }
+ if len(m.CallerId) > 0 {
+ i -= len(m.CallerId)
+ copy(dAtA[i:], m.CallerId)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.CallerId)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.Sql) > 0 {
+ i -= len(m.Sql)
+ copy(dAtA[i:], m.Sql)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Sql)))
+ i--
dAtA[i] = 0x12
}
if len(m.ClusterId) > 0 {
@@ -3821,7 +4066,7 @@ func (m *CleanupSchemaMigrationRequest) MarshalToSizedBufferVT(dAtA []byte) (int
return len(dAtA) - i, nil
}
-func (m *CompleteSchemaMigrationRequest) MarshalVT() (dAtA []byte, err error) {
+func (m *CancelSchemaMigrationRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
}
@@ -3834,12 +4079,12 @@ func (m *CompleteSchemaMigrationRequest) MarshalVT() (dAtA []byte, err error) {
return dAtA[:n], nil
}
-func (m *CompleteSchemaMigrationRequest) MarshalToVT(dAtA []byte) (int, error) {
+func (m *CancelSchemaMigrationRequest) MarshalToVT(dAtA []byte) (int, error) {
size := m.SizeVT()
return m.MarshalToSizedBufferVT(dAtA[:size])
}
-func (m *CompleteSchemaMigrationRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+func (m *CancelSchemaMigrationRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
if m == nil {
return 0, nil
}
@@ -3871,7 +4116,7 @@ func (m *CompleteSchemaMigrationRequest) MarshalToSizedBufferVT(dAtA []byte) (in
return len(dAtA) - i, nil
}
-func (m *CreateKeyspaceRequest) MarshalVT() (dAtA []byte, err error) {
+func (m *CleanupSchemaMigrationRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
}
@@ -3884,12 +4129,12 @@ func (m *CreateKeyspaceRequest) MarshalVT() (dAtA []byte, err error) {
return dAtA[:n], nil
}
-func (m *CreateKeyspaceRequest) MarshalToVT(dAtA []byte) (int, error) {
+func (m *CleanupSchemaMigrationRequest) MarshalToVT(dAtA []byte) (int, error) {
size := m.SizeVT()
return m.MarshalToSizedBufferVT(dAtA[:size])
}
-func (m *CreateKeyspaceRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+func (m *CleanupSchemaMigrationRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
if m == nil {
return 0, nil
}
@@ -3901,8 +4146,8 @@ func (m *CreateKeyspaceRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error)
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
- if m.Options != nil {
- size, err := m.Options.MarshalToSizedBufferVT(dAtA[:i])
+ if m.Request != nil {
+ size, err := m.Request.MarshalToSizedBufferVT(dAtA[:i])
if err != nil {
return 0, err
}
@@ -3921,7 +4166,7 @@ func (m *CreateKeyspaceRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error)
return len(dAtA) - i, nil
}
-func (m *CreateKeyspaceResponse) MarshalVT() (dAtA []byte, err error) {
+func (m *CompleteSchemaMigrationRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
}
@@ -3934,12 +4179,12 @@ func (m *CreateKeyspaceResponse) MarshalVT() (dAtA []byte, err error) {
return dAtA[:n], nil
}
-func (m *CreateKeyspaceResponse) MarshalToVT(dAtA []byte) (int, error) {
+func (m *CompleteSchemaMigrationRequest) MarshalToVT(dAtA []byte) (int, error) {
size := m.SizeVT()
return m.MarshalToSizedBufferVT(dAtA[:size])
}
-func (m *CreateKeyspaceResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+func (m *CompleteSchemaMigrationRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
if m == nil {
return 0, nil
}
@@ -3951,20 +4196,27 @@ func (m *CreateKeyspaceResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
- if m.Keyspace != nil {
- size, err := m.Keyspace.MarshalToSizedBufferVT(dAtA[:i])
+ if m.Request != nil {
+ size, err := m.Request.MarshalToSizedBufferVT(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
i--
+ dAtA[i] = 0x12
+ }
+ if len(m.ClusterId) > 0 {
+ i -= len(m.ClusterId)
+ copy(dAtA[i:], m.ClusterId)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ClusterId)))
+ i--
dAtA[i] = 0xa
}
return len(dAtA) - i, nil
}
-func (m *CreateShardRequest) MarshalVT() (dAtA []byte, err error) {
+func (m *ConcludeTransactionRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
}
@@ -3977,12 +4229,12 @@ func (m *CreateShardRequest) MarshalVT() (dAtA []byte, err error) {
return dAtA[:n], nil
}
-func (m *CreateShardRequest) MarshalToVT(dAtA []byte) (int, error) {
+func (m *ConcludeTransactionRequest) MarshalToVT(dAtA []byte) (int, error) {
size := m.SizeVT()
return m.MarshalToSizedBufferVT(dAtA[:size])
}
-func (m *CreateShardRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+func (m *ConcludeTransactionRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
if m == nil {
return 0, nil
}
@@ -3994,13 +4246,10 @@ func (m *CreateShardRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
- if m.Options != nil {
- size, err := m.Options.MarshalToSizedBufferVT(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
+ if len(m.Dtid) > 0 {
+ i -= len(m.Dtid)
+ copy(dAtA[i:], m.Dtid)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Dtid)))
i--
dAtA[i] = 0x12
}
@@ -4014,7 +4263,7 @@ func (m *CreateShardRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
return len(dAtA) - i, nil
}
-func (m *DeleteKeyspaceRequest) MarshalVT() (dAtA []byte, err error) {
+func (m *CreateKeyspaceRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
}
@@ -4027,12 +4276,12 @@ func (m *DeleteKeyspaceRequest) MarshalVT() (dAtA []byte, err error) {
return dAtA[:n], nil
}
-func (m *DeleteKeyspaceRequest) MarshalToVT(dAtA []byte) (int, error) {
+func (m *CreateKeyspaceRequest) MarshalToVT(dAtA []byte) (int, error) {
size := m.SizeVT()
return m.MarshalToSizedBufferVT(dAtA[:size])
}
-func (m *DeleteKeyspaceRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+func (m *CreateKeyspaceRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
if m == nil {
return 0, nil
}
@@ -4064,7 +4313,7 @@ func (m *DeleteKeyspaceRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error)
return len(dAtA) - i, nil
}
-func (m *DeleteShardsRequest) MarshalVT() (dAtA []byte, err error) {
+func (m *CreateKeyspaceResponse) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
}
@@ -4077,12 +4326,12 @@ func (m *DeleteShardsRequest) MarshalVT() (dAtA []byte, err error) {
return dAtA[:n], nil
}
-func (m *DeleteShardsRequest) MarshalToVT(dAtA []byte) (int, error) {
+func (m *CreateKeyspaceResponse) MarshalToVT(dAtA []byte) (int, error) {
size := m.SizeVT()
return m.MarshalToSizedBufferVT(dAtA[:size])
}
-func (m *DeleteShardsRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+func (m *CreateKeyspaceResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
if m == nil {
return 0, nil
}
@@ -4094,27 +4343,170 @@ func (m *DeleteShardsRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
- if m.Options != nil {
- size, err := m.Options.MarshalToSizedBufferVT(dAtA[:i])
+ if m.Keyspace != nil {
+ size, err := m.Keyspace.MarshalToSizedBufferVT(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
i--
- dAtA[i] = 0x12
- }
- if len(m.ClusterId) > 0 {
- i -= len(m.ClusterId)
- copy(dAtA[i:], m.ClusterId)
- i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ClusterId)))
- i--
dAtA[i] = 0xa
}
return len(dAtA) - i, nil
}
-func (m *DeleteTabletRequest) MarshalVT() (dAtA []byte, err error) {
+func (m *CreateShardRequest) MarshalVT() (dAtA []byte, err error) {
+ if m == nil {
+ return nil, nil
+ }
+ size := m.SizeVT()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBufferVT(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *CreateShardRequest) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *CreateShardRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+ if m == nil {
+ return 0, nil
+ }
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.unknownFields != nil {
+ i -= len(m.unknownFields)
+ copy(dAtA[i:], m.unknownFields)
+ }
+ if m.Options != nil {
+ size, err := m.Options.MarshalToSizedBufferVT(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.ClusterId) > 0 {
+ i -= len(m.ClusterId)
+ copy(dAtA[i:], m.ClusterId)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ClusterId)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *DeleteKeyspaceRequest) MarshalVT() (dAtA []byte, err error) {
+ if m == nil {
+ return nil, nil
+ }
+ size := m.SizeVT()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBufferVT(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *DeleteKeyspaceRequest) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *DeleteKeyspaceRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+ if m == nil {
+ return 0, nil
+ }
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.unknownFields != nil {
+ i -= len(m.unknownFields)
+ copy(dAtA[i:], m.unknownFields)
+ }
+ if m.Options != nil {
+ size, err := m.Options.MarshalToSizedBufferVT(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.ClusterId) > 0 {
+ i -= len(m.ClusterId)
+ copy(dAtA[i:], m.ClusterId)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ClusterId)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *DeleteShardsRequest) MarshalVT() (dAtA []byte, err error) {
+ if m == nil {
+ return nil, nil
+ }
+ size := m.SizeVT()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBufferVT(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *DeleteShardsRequest) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *DeleteShardsRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+ if m == nil {
+ return 0, nil
+ }
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.unknownFields != nil {
+ i -= len(m.unknownFields)
+ copy(dAtA[i:], m.unknownFields)
+ }
+ if m.Options != nil {
+ size, err := m.Options.MarshalToSizedBufferVT(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.ClusterId) > 0 {
+ i -= len(m.ClusterId)
+ copy(dAtA[i:], m.ClusterId)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ClusterId)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *DeleteTabletRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
}
@@ -6021,6 +6413,56 @@ func (m *GetTopologyPathRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error
return len(dAtA) - i, nil
}
+func (m *GetTransactionInfoRequest) MarshalVT() (dAtA []byte, err error) {
+ if m == nil {
+ return nil, nil
+ }
+ size := m.SizeVT()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBufferVT(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *GetTransactionInfoRequest) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *GetTransactionInfoRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+ if m == nil {
+ return 0, nil
+ }
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.unknownFields != nil {
+ i -= len(m.unknownFields)
+ copy(dAtA[i:], m.unknownFields)
+ }
+ if m.Request != nil {
+ size, err := m.Request.MarshalToSizedBufferVT(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.ClusterId) > 0 {
+ i -= len(m.ClusterId)
+ copy(dAtA[i:], m.ClusterId)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ClusterId)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
func (m *GetUnresolvedTransactionsRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
@@ -6051,6 +6493,11 @@ func (m *GetUnresolvedTransactionsRequest) MarshalToSizedBufferVT(dAtA []byte) (
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
+ if m.AbandonAge != 0 {
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(m.AbandonAge))
+ i--
+ dAtA[i] = 0x18
+ }
if len(m.Keyspace) > 0 {
i -= len(m.Keyspace)
copy(dAtA[i:], m.Keyspace)
@@ -6690,7 +7137,7 @@ func (m *LaunchSchemaMigrationRequest) MarshalToSizedBufferVT(dAtA []byte) (int,
return len(dAtA) - i, nil
}
-func (m *MoveTablesCreateRequest) MarshalVT() (dAtA []byte, err error) {
+func (m *MaterializeCreateRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
}
@@ -6703,12 +7150,12 @@ func (m *MoveTablesCreateRequest) MarshalVT() (dAtA []byte, err error) {
return dAtA[:n], nil
}
-func (m *MoveTablesCreateRequest) MarshalToVT(dAtA []byte) (int, error) {
+func (m *MaterializeCreateRequest) MarshalToVT(dAtA []byte) (int, error) {
size := m.SizeVT()
return m.MarshalToSizedBufferVT(dAtA[:size])
}
-func (m *MoveTablesCreateRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+func (m *MaterializeCreateRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
if m == nil {
return 0, nil
}
@@ -6728,6 +7175,13 @@ func (m *MoveTablesCreateRequest) MarshalToSizedBufferVT(dAtA []byte) (int, erro
i -= size
i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.TableSettings) > 0 {
+ i -= len(m.TableSettings)
+ copy(dAtA[i:], m.TableSettings)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TableSettings)))
+ i--
dAtA[i] = 0x12
}
if len(m.ClusterId) > 0 {
@@ -6740,7 +7194,7 @@ func (m *MoveTablesCreateRequest) MarshalToSizedBufferVT(dAtA []byte) (int, erro
return len(dAtA) - i, nil
}
-func (m *PingTabletRequest) MarshalVT() (dAtA []byte, err error) {
+func (m *MoveTablesCompleteRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
}
@@ -6753,12 +7207,12 @@ func (m *PingTabletRequest) MarshalVT() (dAtA []byte, err error) {
return dAtA[:n], nil
}
-func (m *PingTabletRequest) MarshalToVT(dAtA []byte) (int, error) {
+func (m *MoveTablesCompleteRequest) MarshalToVT(dAtA []byte) (int, error) {
size := m.SizeVT()
return m.MarshalToSizedBufferVT(dAtA[:size])
}
-func (m *PingTabletRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+func (m *MoveTablesCompleteRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
if m == nil {
return 0, nil
}
@@ -6770,29 +7224,27 @@ func (m *PingTabletRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
- if len(m.ClusterIds) > 0 {
- for iNdEx := len(m.ClusterIds) - 1; iNdEx >= 0; iNdEx-- {
- i -= len(m.ClusterIds[iNdEx])
- copy(dAtA[i:], m.ClusterIds[iNdEx])
- i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ClusterIds[iNdEx])))
- i--
- dAtA[i] = 0x12
- }
- }
- if m.Alias != nil {
- size, err := m.Alias.MarshalToSizedBufferVT(dAtA[:i])
+ if m.Request != nil {
+ size, err := m.Request.MarshalToSizedBufferVT(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
i--
+ dAtA[i] = 0x12
+ }
+ if len(m.ClusterId) > 0 {
+ i -= len(m.ClusterId)
+ copy(dAtA[i:], m.ClusterId)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ClusterId)))
+ i--
dAtA[i] = 0xa
}
return len(dAtA) - i, nil
}
-func (m *PingTabletResponse) MarshalVT() (dAtA []byte, err error) {
+func (m *MoveTablesCreateRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
}
@@ -6805,12 +7257,12 @@ func (m *PingTabletResponse) MarshalVT() (dAtA []byte, err error) {
return dAtA[:n], nil
}
-func (m *PingTabletResponse) MarshalToVT(dAtA []byte) (int, error) {
+func (m *MoveTablesCreateRequest) MarshalToVT(dAtA []byte) (int, error) {
size := m.SizeVT()
return m.MarshalToSizedBufferVT(dAtA[:size])
}
-func (m *PingTabletResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+func (m *MoveTablesCreateRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
if m == nil {
return 0, nil
}
@@ -6822,8 +7274,8 @@ func (m *PingTabletResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
- if m.Cluster != nil {
- size, err := m.Cluster.MarshalToSizedBufferVT(dAtA[:i])
+ if m.Request != nil {
+ size, err := m.Request.MarshalToSizedBufferVT(dAtA[:i])
if err != nil {
return 0, err
}
@@ -6832,17 +7284,17 @@ func (m *PingTabletResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
i--
dAtA[i] = 0x12
}
- if len(m.Status) > 0 {
- i -= len(m.Status)
- copy(dAtA[i:], m.Status)
- i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Status)))
+ if len(m.ClusterId) > 0 {
+ i -= len(m.ClusterId)
+ copy(dAtA[i:], m.ClusterId)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ClusterId)))
i--
dAtA[i] = 0xa
}
return len(dAtA) - i, nil
}
-func (m *PlannedFailoverShardRequest) MarshalVT() (dAtA []byte, err error) {
+func (m *PingTabletRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
}
@@ -6855,12 +7307,12 @@ func (m *PlannedFailoverShardRequest) MarshalVT() (dAtA []byte, err error) {
return dAtA[:n], nil
}
-func (m *PlannedFailoverShardRequest) MarshalToVT(dAtA []byte) (int, error) {
+func (m *PingTabletRequest) MarshalToVT(dAtA []byte) (int, error) {
size := m.SizeVT()
return m.MarshalToSizedBufferVT(dAtA[:size])
}
-func (m *PlannedFailoverShardRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+func (m *PingTabletRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
if m == nil {
return 0, nil
}
@@ -6872,8 +7324,110 @@ func (m *PlannedFailoverShardRequest) MarshalToSizedBufferVT(dAtA []byte) (int,
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
- if m.Options != nil {
- size, err := m.Options.MarshalToSizedBufferVT(dAtA[:i])
+ if len(m.ClusterIds) > 0 {
+ for iNdEx := len(m.ClusterIds) - 1; iNdEx >= 0; iNdEx-- {
+ i -= len(m.ClusterIds[iNdEx])
+ copy(dAtA[i:], m.ClusterIds[iNdEx])
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ClusterIds[iNdEx])))
+ i--
+ dAtA[i] = 0x12
+ }
+ }
+ if m.Alias != nil {
+ size, err := m.Alias.MarshalToSizedBufferVT(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *PingTabletResponse) MarshalVT() (dAtA []byte, err error) {
+ if m == nil {
+ return nil, nil
+ }
+ size := m.SizeVT()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBufferVT(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *PingTabletResponse) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *PingTabletResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+ if m == nil {
+ return 0, nil
+ }
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.unknownFields != nil {
+ i -= len(m.unknownFields)
+ copy(dAtA[i:], m.unknownFields)
+ }
+ if m.Cluster != nil {
+ size, err := m.Cluster.MarshalToSizedBufferVT(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.Status) > 0 {
+ i -= len(m.Status)
+ copy(dAtA[i:], m.Status)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Status)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *PlannedFailoverShardRequest) MarshalVT() (dAtA []byte, err error) {
+ if m == nil {
+ return nil, nil
+ }
+ size := m.SizeVT()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBufferVT(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *PlannedFailoverShardRequest) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *PlannedFailoverShardRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+ if m == nil {
+ return 0, nil
+ }
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.unknownFields != nil {
+ i -= len(m.unknownFields)
+ copy(dAtA[i:], m.unknownFields)
+ }
+ if m.Options != nil {
+ size, err := m.Options.MarshalToSizedBufferVT(dAtA[:i])
if err != nil {
return 0, err
}
@@ -8008,6 +8562,56 @@ func (m *RunHealthCheckResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error
return len(dAtA) - i, nil
}
+func (m *ReshardCreateRequest) MarshalVT() (dAtA []byte, err error) {
+ if m == nil {
+ return nil, nil
+ }
+ size := m.SizeVT()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBufferVT(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *ReshardCreateRequest) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *ReshardCreateRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+ if m == nil {
+ return 0, nil
+ }
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.unknownFields != nil {
+ i -= len(m.unknownFields)
+ copy(dAtA[i:], m.unknownFields)
+ }
+ if m.Request != nil {
+ size, err := m.Request.MarshalToSizedBufferVT(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.ClusterId) > 0 {
+ i -= len(m.ClusterId)
+ copy(dAtA[i:], m.ClusterId)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ClusterId)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
func (m *SetReadOnlyRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
@@ -8882,7 +9486,7 @@ func (m *ValidateVersionShardRequest) MarshalToSizedBufferVT(dAtA []byte) (int,
return len(dAtA) - i, nil
}
-func (m *VTExplainRequest) MarshalVT() (dAtA []byte, err error) {
+func (m *VDiffCreateRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
}
@@ -8895,12 +9499,12 @@ func (m *VTExplainRequest) MarshalVT() (dAtA []byte, err error) {
return dAtA[:n], nil
}
-func (m *VTExplainRequest) MarshalToVT(dAtA []byte) (int, error) {
+func (m *VDiffCreateRequest) MarshalToVT(dAtA []byte) (int, error) {
size := m.SizeVT()
return m.MarshalToSizedBufferVT(dAtA[:size])
}
-func (m *VTExplainRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+func (m *VDiffCreateRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
if m == nil {
return 0, nil
}
@@ -8912,31 +9516,27 @@ func (m *VTExplainRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
- if len(m.Sql) > 0 {
- i -= len(m.Sql)
- copy(dAtA[i:], m.Sql)
- i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Sql)))
- i--
- dAtA[i] = 0x1a
- }
- if len(m.Keyspace) > 0 {
- i -= len(m.Keyspace)
- copy(dAtA[i:], m.Keyspace)
- i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Keyspace)))
+ if m.Request != nil {
+ size, err := m.Request.MarshalToSizedBufferVT(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
i--
dAtA[i] = 0x12
}
- if len(m.Cluster) > 0 {
- i -= len(m.Cluster)
- copy(dAtA[i:], m.Cluster)
- i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Cluster)))
+ if len(m.ClusterId) > 0 {
+ i -= len(m.ClusterId)
+ copy(dAtA[i:], m.ClusterId)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ClusterId)))
i--
dAtA[i] = 0xa
}
return len(dAtA) - i, nil
}
-func (m *VTExplainResponse) MarshalVT() (dAtA []byte, err error) {
+func (m *VDiffShowRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
}
@@ -8949,12 +9549,12 @@ func (m *VTExplainResponse) MarshalVT() (dAtA []byte, err error) {
return dAtA[:n], nil
}
-func (m *VTExplainResponse) MarshalToVT(dAtA []byte) (int, error) {
+func (m *VDiffShowRequest) MarshalToVT(dAtA []byte) (int, error) {
size := m.SizeVT()
return m.MarshalToSizedBufferVT(dAtA[:size])
}
-func (m *VTExplainResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+func (m *VDiffShowRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
if m == nil {
return 0, nil
}
@@ -8966,63 +9566,347 @@ func (m *VTExplainResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
- if len(m.Response) > 0 {
- i -= len(m.Response)
- copy(dAtA[i:], m.Response)
- i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Response)))
+ if m.Request != nil {
+ size, err := m.Request.MarshalToSizedBufferVT(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.ClusterId) > 0 {
+ i -= len(m.ClusterId)
+ copy(dAtA[i:], m.ClusterId)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ClusterId)))
i--
dAtA[i] = 0xa
}
return len(dAtA) - i, nil
}
-func (m *Cluster) SizeVT() (n int) {
+func (m *VDiffProgress) MarshalVT() (dAtA []byte, err error) {
if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.Id)
- if l > 0 {
- n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ return nil, nil
}
- l = len(m.Name)
- if l > 0 {
- n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ size := m.SizeVT()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBufferVT(dAtA[:size])
+ if err != nil {
+ return nil, err
}
- n += len(m.unknownFields)
- return n
+ return dAtA[:n], nil
}
-func (m *ClusterBackup) SizeVT() (n int) {
+func (m *VDiffProgress) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *VDiffProgress) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
if m == nil {
- return 0
+ return 0, nil
}
+ i := len(dAtA)
+ _ = i
var l int
_ = l
- if m.Cluster != nil {
- l = m.Cluster.SizeVT()
- n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ if m.unknownFields != nil {
+ i -= len(m.unknownFields)
+ copy(dAtA[i:], m.unknownFields)
}
- if m.Backup != nil {
- l = m.Backup.SizeVT()
- n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ if len(m.Eta) > 0 {
+ i -= len(m.Eta)
+ copy(dAtA[i:], m.Eta)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Eta)))
+ i--
+ dAtA[i] = 0x12
}
- n += len(m.unknownFields)
- return n
+ if m.Percentage != 0 {
+ i -= 8
+ binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(m.Percentage))))
+ i--
+ dAtA[i] = 0x9
+ }
+ return len(dAtA) - i, nil
}
-func (m *ClusterCellsAliases) SizeVT() (n int) {
+func (m *VDiffShardReport) MarshalVT() (dAtA []byte, err error) {
if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.Cluster != nil {
- l = m.Cluster.SizeVT()
- n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ return nil, nil
}
- if len(m.Aliases) > 0 {
+ size := m.SizeVT()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBufferVT(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *VDiffShardReport) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *VDiffShardReport) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+ if m == nil {
+ return 0, nil
+ }
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.unknownFields != nil {
+ i -= len(m.unknownFields)
+ copy(dAtA[i:], m.unknownFields)
+ }
+ if m.Progress != nil {
+ size, err := m.Progress.MarshalToSizedBufferVT(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
+ i--
+ dAtA[i] = 0x32
+ }
+ if len(m.CompletedAt) > 0 {
+ i -= len(m.CompletedAt)
+ copy(dAtA[i:], m.CompletedAt)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.CompletedAt)))
+ i--
+ dAtA[i] = 0x2a
+ }
+ if len(m.StartedAt) > 0 {
+ i -= len(m.StartedAt)
+ copy(dAtA[i:], m.StartedAt)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.StartedAt)))
+ i--
+ dAtA[i] = 0x22
+ }
+ if m.HasMismatch {
+ i--
+ if m.HasMismatch {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i--
+ dAtA[i] = 0x18
+ }
+ if m.RowsCompared != 0 {
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(m.RowsCompared))
+ i--
+ dAtA[i] = 0x10
+ }
+ if len(m.State) > 0 {
+ i -= len(m.State)
+ copy(dAtA[i:], m.State)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.State)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *VDiffShowResponse) MarshalVT() (dAtA []byte, err error) {
+ if m == nil {
+ return nil, nil
+ }
+ size := m.SizeVT()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBufferVT(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *VDiffShowResponse) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *VDiffShowResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+ if m == nil {
+ return 0, nil
+ }
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.unknownFields != nil {
+ i -= len(m.unknownFields)
+ copy(dAtA[i:], m.unknownFields)
+ }
+ if len(m.ShardReport) > 0 {
+ for k := range m.ShardReport {
+ v := m.ShardReport[k]
+ baseI := i
+ size, err := v.MarshalToSizedBufferVT(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
+ i--
+ dAtA[i] = 0x12
+ i -= len(k)
+ copy(dAtA[i:], k)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(k)))
+ i--
+ dAtA[i] = 0xa
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(baseI-i))
+ i--
+ dAtA[i] = 0xa
+ }
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *VTExplainRequest) MarshalVT() (dAtA []byte, err error) {
+ if m == nil {
+ return nil, nil
+ }
+ size := m.SizeVT()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBufferVT(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *VTExplainRequest) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *VTExplainRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+ if m == nil {
+ return 0, nil
+ }
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.unknownFields != nil {
+ i -= len(m.unknownFields)
+ copy(dAtA[i:], m.unknownFields)
+ }
+ if len(m.Sql) > 0 {
+ i -= len(m.Sql)
+ copy(dAtA[i:], m.Sql)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Sql)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.Keyspace) > 0 {
+ i -= len(m.Keyspace)
+ copy(dAtA[i:], m.Keyspace)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Keyspace)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.Cluster) > 0 {
+ i -= len(m.Cluster)
+ copy(dAtA[i:], m.Cluster)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Cluster)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *VTExplainResponse) MarshalVT() (dAtA []byte, err error) {
+ if m == nil {
+ return nil, nil
+ }
+ size := m.SizeVT()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBufferVT(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *VTExplainResponse) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *VTExplainResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+ if m == nil {
+ return 0, nil
+ }
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.unknownFields != nil {
+ i -= len(m.unknownFields)
+ copy(dAtA[i:], m.unknownFields)
+ }
+ if len(m.Response) > 0 {
+ i -= len(m.Response)
+ copy(dAtA[i:], m.Response)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Response)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *Cluster) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Id)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ l = len(m.Name)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
+func (m *ClusterBackup) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Cluster != nil {
+ l = m.Cluster.SizeVT()
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ if m.Backup != nil {
+ l = m.Backup.SizeVT()
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
+func (m *ClusterCellsAliases) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Cluster != nil {
+ l = m.Cluster.SizeVT()
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ if len(m.Aliases) > 0 {
for k, v := range m.Aliases {
_ = k
_ = v
@@ -9407,7 +10291,7 @@ func (m *Workflow) SizeVT() (n int) {
return n
}
-func (m *ApplySchemaRequest) SizeVT() (n int) {
+func (m *WorkflowDeleteRequest) SizeVT() (n int) {
if m == nil {
return 0
}
@@ -9425,7 +10309,7 @@ func (m *ApplySchemaRequest) SizeVT() (n int) {
return n
}
-func (m *CancelSchemaMigrationRequest) SizeVT() (n int) {
+func (m *WorkflowSwitchTrafficRequest) SizeVT() (n int) {
if m == nil {
return 0
}
@@ -9443,7 +10327,51 @@ func (m *CancelSchemaMigrationRequest) SizeVT() (n int) {
return n
}
-func (m *CleanupSchemaMigrationRequest) SizeVT() (n int) {
+func (m *ApplySchemaRequest) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.ClusterId)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ l = len(m.Sql)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ l = len(m.CallerId)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ if m.Request != nil {
+ l = m.Request.SizeVT()
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
+func (m *CancelSchemaMigrationRequest) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.ClusterId)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ if m.Request != nil {
+ l = m.Request.SizeVT()
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
+func (m *CleanupSchemaMigrationRequest) SizeVT() (n int) {
if m == nil {
return 0
}
@@ -9479,6 +10407,24 @@ func (m *CompleteSchemaMigrationRequest) SizeVT() (n int) {
return n
}
+func (m *ConcludeTransactionRequest) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.ClusterId)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ l = len(m.Dtid)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
func (m *CreateKeyspaceRequest) SizeVT() (n int) {
if m == nil {
return 0
@@ -10294,6 +11240,24 @@ func (m *GetTopologyPathRequest) SizeVT() (n int) {
return n
}
+func (m *GetTransactionInfoRequest) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.ClusterId)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ if m.Request != nil {
+ l = m.Request.SizeVT()
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
func (m *GetUnresolvedTransactionsRequest) SizeVT() (n int) {
if m == nil {
return 0
@@ -10308,6 +11272,9 @@ func (m *GetUnresolvedTransactionsRequest) SizeVT() (n int) {
if l > 0 {
n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
}
+ if m.AbandonAge != 0 {
+ n += 1 + protohelpers.SizeOfVarint(uint64(m.AbandonAge))
+ }
n += len(m.unknownFields)
return n
}
@@ -10557,6 +11524,46 @@ func (m *LaunchSchemaMigrationRequest) SizeVT() (n int) {
return n
}
+func (m *MaterializeCreateRequest) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.ClusterId)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ l = len(m.TableSettings)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ if m.Request != nil {
+ l = m.Request.SizeVT()
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
+func (m *MoveTablesCompleteRequest) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.ClusterId)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ if m.Request != nil {
+ l = m.Request.SizeVT()
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
func (m *MoveTablesCreateRequest) SizeVT() (n int) {
if m == nil {
return 0
@@ -11064,6 +12071,24 @@ func (m *RunHealthCheckResponse) SizeVT() (n int) {
return n
}
+func (m *ReshardCreateRequest) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.ClusterId)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ if m.Request != nil {
+ l = m.Request.SizeVT()
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
func (m *SetReadOnlyRequest) SizeVT() (n int) {
if m == nil {
return 0
@@ -11391,6 +12416,114 @@ func (m *ValidateVersionShardRequest) SizeVT() (n int) {
return n
}
+func (m *VDiffCreateRequest) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.ClusterId)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ if m.Request != nil {
+ l = m.Request.SizeVT()
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
+func (m *VDiffShowRequest) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.ClusterId)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ if m.Request != nil {
+ l = m.Request.SizeVT()
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
+func (m *VDiffProgress) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Percentage != 0 {
+ n += 9
+ }
+ l = len(m.Eta)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
+func (m *VDiffShardReport) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.State)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ if m.RowsCompared != 0 {
+ n += 1 + protohelpers.SizeOfVarint(uint64(m.RowsCompared))
+ }
+ if m.HasMismatch {
+ n += 2
+ }
+ l = len(m.StartedAt)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ l = len(m.CompletedAt)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ if m.Progress != nil {
+ l = m.Progress.SizeVT()
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
+func (m *VDiffShowResponse) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if len(m.ShardReport) > 0 {
+ for k, v := range m.ShardReport {
+ _ = k
+ _ = v
+ l = 0
+ if v != nil {
+ l = v.SizeVT()
+ }
+ l += 1 + protohelpers.SizeOfVarint(uint64(l))
+ mapEntrySize := 1 + len(k) + protohelpers.SizeOfVarint(uint64(len(k))) + l
+ n += mapEntrySize + 1 + protohelpers.SizeOfVarint(uint64(mapEntrySize))
+ }
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
func (m *VTExplainRequest) SizeVT() (n int) {
if m == nil {
return 0
@@ -14464,7 +15597,7 @@ func (m *Workflow) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *ApplySchemaRequest) UnmarshalVT(dAtA []byte) error {
+func (m *WorkflowDeleteRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -14487,10 +15620,10 @@ func (m *ApplySchemaRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: ApplySchemaRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: WorkflowDeleteRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: ApplySchemaRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: WorkflowDeleteRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -14555,7 +15688,7 @@ func (m *ApplySchemaRequest) UnmarshalVT(dAtA []byte) error {
return io.ErrUnexpectedEOF
}
if m.Request == nil {
- m.Request = &vtctldata.ApplySchemaRequest{}
+ m.Request = &vtctldata.WorkflowDeleteRequest{}
}
if err := m.Request.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
@@ -14583,7 +15716,7 @@ func (m *ApplySchemaRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *CancelSchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
+func (m *WorkflowSwitchTrafficRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -14606,10 +15739,10 @@ func (m *CancelSchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: CancelSchemaMigrationRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: WorkflowSwitchTrafficRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: CancelSchemaMigrationRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: WorkflowSwitchTrafficRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -14674,7 +15807,7 @@ func (m *CancelSchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
return io.ErrUnexpectedEOF
}
if m.Request == nil {
- m.Request = &vtctldata.CancelSchemaMigrationRequest{}
+ m.Request = &vtctldata.WorkflowSwitchTrafficRequest{}
}
if err := m.Request.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
@@ -14702,7 +15835,7 @@ func (m *CancelSchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *CleanupSchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
+func (m *ApplySchemaRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -14725,10 +15858,10 @@ func (m *CleanupSchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: CleanupSchemaMigrationRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: ApplySchemaRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: CleanupSchemaMigrationRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: ApplySchemaRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -14765,9 +15898,9 @@ func (m *CleanupSchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Request", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Sql", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -14777,82 +15910,27 @@ func (m *CleanupSchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Request == nil {
- m.Request = &vtctldata.CleanupSchemaMigrationRequest{}
- }
- if err := m.Request.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ m.Sql = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := protohelpers.Skip(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if (skippy < 0) || (iNdEx+skippy) < 0 {
- return protohelpers.ErrInvalidLength
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *CompleteSchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: CompleteSchemaMigrationRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: CompleteSchemaMigrationRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field CallerId", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -14880,9 +15958,9 @@ func (m *CompleteSchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterId = string(dAtA[iNdEx:postIndex])
+ m.CallerId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 2:
+ case 4:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Request", wireType)
}
@@ -14912,7 +15990,7 @@ func (m *CompleteSchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
return io.ErrUnexpectedEOF
}
if m.Request == nil {
- m.Request = &vtctldata.CompleteSchemaMigrationRequest{}
+ m.Request = &vtctldata.ApplySchemaRequest{}
}
if err := m.Request.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
@@ -14940,7 +16018,7 @@ func (m *CompleteSchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *CreateKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
+func (m *CancelSchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -14963,10 +16041,10 @@ func (m *CreateKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: CreateKeyspaceRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: CancelSchemaMigrationRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: CreateKeyspaceRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: CancelSchemaMigrationRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -15003,7 +16081,7 @@ func (m *CreateKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Request", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -15030,10 +16108,10 @@ func (m *CreateKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Options == nil {
- m.Options = &vtctldata.CreateKeyspaceRequest{}
+ if m.Request == nil {
+ m.Request = &vtctldata.CancelSchemaMigrationRequest{}
}
- if err := m.Options.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Request.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -15059,7 +16137,7 @@ func (m *CreateKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *CreateKeyspaceResponse) UnmarshalVT(dAtA []byte) error {
+func (m *CleanupSchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -15082,15 +16160,47 @@ func (m *CreateKeyspaceResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: CreateKeyspaceResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: CleanupSchemaMigrationRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: CreateKeyspaceResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: CleanupSchemaMigrationRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ClusterId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Request", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -15117,10 +16227,10 @@ func (m *CreateKeyspaceResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Keyspace == nil {
- m.Keyspace = &Keyspace{}
+ if m.Request == nil {
+ m.Request = &vtctldata.CleanupSchemaMigrationRequest{}
}
- if err := m.Keyspace.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Request.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -15146,7 +16256,7 @@ func (m *CreateKeyspaceResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *CreateShardRequest) UnmarshalVT(dAtA []byte) error {
+func (m *CompleteSchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -15169,10 +16279,10 @@ func (m *CreateShardRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: CreateShardRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: CompleteSchemaMigrationRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: CreateShardRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: CompleteSchemaMigrationRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -15209,7 +16319,7 @@ func (m *CreateShardRequest) UnmarshalVT(dAtA []byte) error {
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Request", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -15236,10 +16346,10 @@ func (m *CreateShardRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Options == nil {
- m.Options = &vtctldata.CreateShardRequest{}
+ if m.Request == nil {
+ m.Request = &vtctldata.CompleteSchemaMigrationRequest{}
}
- if err := m.Options.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Request.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -15265,7 +16375,7 @@ func (m *CreateShardRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *DeleteKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
+func (m *ConcludeTransactionRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -15288,10 +16398,10 @@ func (m *DeleteKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: DeleteKeyspaceRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: ConcludeTransactionRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: DeleteKeyspaceRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: ConcludeTransactionRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -15328,9 +16438,9 @@ func (m *DeleteKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Dtid", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -15340,27 +16450,23 @@ func (m *DeleteKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Options == nil {
- m.Options = &vtctldata.DeleteKeyspaceRequest{}
- }
- if err := m.Options.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ m.Dtid = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -15384,7 +16490,7 @@ func (m *DeleteKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *DeleteShardsRequest) UnmarshalVT(dAtA []byte) error {
+func (m *CreateKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -15407,10 +16513,10 @@ func (m *DeleteShardsRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: DeleteShardsRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: CreateKeyspaceRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: DeleteShardsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: CreateKeyspaceRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -15475,7 +16581,7 @@ func (m *DeleteShardsRequest) UnmarshalVT(dAtA []byte) error {
return io.ErrUnexpectedEOF
}
if m.Options == nil {
- m.Options = &vtctldata.DeleteShardsRequest{}
+ m.Options = &vtctldata.CreateKeyspaceRequest{}
}
if err := m.Options.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
@@ -15503,7 +16609,7 @@ func (m *DeleteShardsRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *DeleteTabletRequest) UnmarshalVT(dAtA []byte) error {
+func (m *CreateKeyspaceResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -15526,15 +16632,15 @@ func (m *DeleteTabletRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: DeleteTabletRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: CreateKeyspaceResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: DeleteTabletRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: CreateKeyspaceResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Alias", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -15561,65 +16667,13 @@ func (m *DeleteTabletRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Alias == nil {
- m.Alias = &topodata.TabletAlias{}
+ if m.Keyspace == nil {
+ m.Keyspace = &Keyspace{}
}
- if err := m.Alias.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Keyspace.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
- iNdEx = postIndex
- case 3:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field AllowPrimary", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.AllowPrimary = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -15642,7 +16696,7 @@ func (m *DeleteTabletRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *DeleteTabletResponse) UnmarshalVT(dAtA []byte) error {
+func (m *CreateShardRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -15665,15 +16719,15 @@ func (m *DeleteTabletResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: DeleteTabletResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: CreateShardRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: DeleteTabletResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: CreateShardRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -15701,11 +16755,11 @@ func (m *DeleteTabletResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Status = string(dAtA[iNdEx:postIndex])
+ m.ClusterId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -15732,10 +16786,10 @@ func (m *DeleteTabletResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Cluster == nil {
- m.Cluster = &Cluster{}
+ if m.Options == nil {
+ m.Options = &vtctldata.CreateShardRequest{}
}
- if err := m.Cluster.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Options.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -15761,7 +16815,7 @@ func (m *DeleteTabletResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *EmergencyFailoverShardRequest) UnmarshalVT(dAtA []byte) error {
+func (m *DeleteKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -15784,10 +16838,10 @@ func (m *EmergencyFailoverShardRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: EmergencyFailoverShardRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: DeleteKeyspaceRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: EmergencyFailoverShardRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: DeleteKeyspaceRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -15852,7 +16906,7 @@ func (m *EmergencyFailoverShardRequest) UnmarshalVT(dAtA []byte) error {
return io.ErrUnexpectedEOF
}
if m.Options == nil {
- m.Options = &vtctldata.EmergencyReparentShardRequest{}
+ m.Options = &vtctldata.DeleteKeyspaceRequest{}
}
if err := m.Options.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
@@ -15880,7 +16934,7 @@ func (m *EmergencyFailoverShardRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *EmergencyFailoverShardResponse) UnmarshalVT(dAtA []byte) error {
+func (m *DeleteShardsRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -15903,17 +16957,17 @@ func (m *EmergencyFailoverShardResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: EmergencyFailoverShardResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: DeleteShardsRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: EmergencyFailoverShardResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: DeleteShardsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -15923,75 +16977,7 @@ func (m *EmergencyFailoverShardResponse) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Cluster == nil {
- m.Cluster = &Cluster{}
- }
- if err := m.Cluster.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Keyspace = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Shard", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
@@ -16007,11 +16993,11 @@ func (m *EmergencyFailoverShardResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Shard = string(dAtA[iNdEx:postIndex])
+ m.ClusterId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 4:
+ case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field PromotedPrimary", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -16038,44 +17024,10 @@ func (m *EmergencyFailoverShardResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.PromotedPrimary == nil {
- m.PromotedPrimary = &topodata.TabletAlias{}
- }
- if err := m.PromotedPrimary.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 5:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Events", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
+ if m.Options == nil {
+ m.Options = &vtctldata.DeleteShardsRequest{}
}
- m.Events = append(m.Events, &logutil.Event{})
- if err := m.Events[len(m.Events)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Options.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -16101,7 +17053,7 @@ func (m *EmergencyFailoverShardResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *FindSchemaRequest) UnmarshalVT(dAtA []byte) error {
+func (m *DeleteTabletRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -16124,17 +17076,17 @@ func (m *FindSchemaRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: FindSchemaRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: DeleteTabletRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: FindSchemaRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: DeleteTabletRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Table", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Alias", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -16144,23 +17096,27 @@ func (m *FindSchemaRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Table = string(dAtA[iNdEx:postIndex])
+ if m.Alias == nil {
+ m.Alias = &topodata.TabletAlias{}
+ }
+ if err := m.Alias.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
iNdEx = postIndex
case 2:
if wireType != 2 {
@@ -16195,10 +17151,10 @@ func (m *FindSchemaRequest) UnmarshalVT(dAtA []byte) error {
m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field TableSizeOptions", wireType)
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field AllowPrimary", wireType)
}
- var msglen int
+ var v int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -16208,28 +17164,12 @@ func (m *FindSchemaRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ v |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.TableSizeOptions == nil {
- m.TableSizeOptions = &GetSchemaTableSizeOptions{}
- }
- if err := m.TableSizeOptions.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
+ m.AllowPrimary = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -16252,7 +17192,7 @@ func (m *FindSchemaRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetBackupsRequest) UnmarshalVT(dAtA []byte) error {
+func (m *DeleteTabletResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -16275,15 +17215,15 @@ func (m *GetBackupsRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetBackupsRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: DeleteTabletResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetBackupsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: DeleteTabletResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -16311,75 +17251,11 @@ func (m *GetBackupsRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
+ m.Status = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keyspaces", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Keyspaces = append(m.Keyspaces, string(dAtA[iNdEx:postIndex]))
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field KeyspaceShards", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.KeyspaceShards = append(m.KeyspaceShards, string(dAtA[iNdEx:postIndex]))
- iNdEx = postIndex
- case 4:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field RequestOptions", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -16406,10 +17282,10 @@ func (m *GetBackupsRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.RequestOptions == nil {
- m.RequestOptions = &vtctldata.GetBackupsRequest{}
+ if m.Cluster == nil {
+ m.Cluster = &Cluster{}
}
- if err := m.RequestOptions.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Cluster.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -16435,7 +17311,7 @@ func (m *GetBackupsRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetBackupsResponse) UnmarshalVT(dAtA []byte) error {
+func (m *EmergencyFailoverShardRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -16458,17 +17334,49 @@ func (m *GetBackupsResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetBackupsResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: EmergencyFailoverShardRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetBackupsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: EmergencyFailoverShardRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Backups", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
}
- var msglen int
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ClusterId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType)
+ }
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -16493,8 +17401,10 @@ func (m *GetBackupsResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Backups = append(m.Backups, &ClusterBackup{})
- if err := m.Backups[len(m.Backups)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ if m.Options == nil {
+ m.Options = &vtctldata.EmergencyReparentShardRequest{}
+ }
+ if err := m.Options.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -16520,7 +17430,7 @@ func (m *GetBackupsResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetCellInfosRequest) UnmarshalVT(dAtA []byte) error {
+func (m *EmergencyFailoverShardResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -16543,15 +17453,51 @@ func (m *GetCellInfosRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetCellInfosRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: EmergencyFailoverShardResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetCellInfosRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: EmergencyFailoverShardResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Cluster == nil {
+ m.Cluster = &Cluster{}
+ }
+ if err := m.Cluster.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -16579,11 +17525,11 @@ func (m *GetCellInfosRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
+ m.Keyspace = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 2:
+ case 3:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Cells", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Shard", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -16611,13 +17557,13 @@ func (m *GetCellInfosRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Cells = append(m.Cells, string(dAtA[iNdEx:postIndex]))
+ m.Shard = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 3:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field NamesOnly", wireType)
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field PromotedPrimary", wireType)
}
- var v int
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -16627,66 +17573,31 @@ func (m *GetCellInfosRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- v |= int(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- m.NamesOnly = bool(v != 0)
- default:
- iNdEx = preIndex
- skippy, err := protohelpers.Skip(dAtA[iNdEx:])
- if err != nil {
- return err
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
}
- if (skippy < 0) || (iNdEx+skippy) < 0 {
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
- if (iNdEx + skippy) > l {
+ if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *GetCellInfosResponse) UnmarshalVT(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
+ if m.PromotedPrimary == nil {
+ m.PromotedPrimary = &topodata.TabletAlias{}
}
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
+ if err := m.PromotedPrimary.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
}
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: GetCellInfosResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: GetCellInfosResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
+ iNdEx = postIndex
+ case 5:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field CellInfos", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Events", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -16713,8 +17624,8 @@ func (m *GetCellInfosResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.CellInfos = append(m.CellInfos, &ClusterCellInfo{})
- if err := m.CellInfos[len(m.CellInfos)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ m.Events = append(m.Events, &logutil.Event{})
+ if err := m.Events[len(m.Events)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -16740,7 +17651,7 @@ func (m *GetCellInfosResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetCellsAliasesRequest) UnmarshalVT(dAtA []byte) error {
+func (m *FindSchemaRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -16763,15 +17674,15 @@ func (m *GetCellsAliasesRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetCellsAliasesRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: FindSchemaRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetCellsAliasesRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: FindSchemaRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Table", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -16799,62 +17710,43 @@ func (m *GetCellsAliasesRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
+ m.Table = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := protohelpers.Skip(dAtA[iNdEx:])
- if err != nil {
- return err
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
}
- if (skippy < 0) || (iNdEx+skippy) < 0 {
- return protohelpers.ErrInvalidLength
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
}
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
}
- m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *GetCellsAliasesResponse) UnmarshalVT(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
}
- if iNdEx >= l {
+ if postIndex > l {
return io.ErrUnexpectedEOF
}
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: GetCellsAliasesResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: GetCellsAliasesResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
+ m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
+ iNdEx = postIndex
+ case 3:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Aliases", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field TableSizeOptions", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -16881,8 +17773,10 @@ func (m *GetCellsAliasesResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Aliases = append(m.Aliases, &ClusterCellsAliases{})
- if err := m.Aliases[len(m.Aliases)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ if m.TableSizeOptions == nil {
+ m.TableSizeOptions = &GetSchemaTableSizeOptions{}
+ }
+ if err := m.TableSizeOptions.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -16908,7 +17802,7 @@ func (m *GetCellsAliasesResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetClustersRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetBackupsRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -16931,12 +17825,144 @@ func (m *GetClustersRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetClustersRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetBackupsRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetClustersRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetBackupsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyspaces", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Keyspaces = append(m.Keyspaces, string(dAtA[iNdEx:postIndex]))
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field KeyspaceShards", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.KeyspaceShards = append(m.KeyspaceShards, string(dAtA[iNdEx:postIndex]))
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field RequestOptions", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.RequestOptions == nil {
+ m.RequestOptions = &vtctldata.GetBackupsRequest{}
+ }
+ if err := m.RequestOptions.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -16959,7 +17985,7 @@ func (m *GetClustersRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetClustersResponse) UnmarshalVT(dAtA []byte) error {
+func (m *GetBackupsResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -16982,15 +18008,15 @@ func (m *GetClustersResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetClustersResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetBackupsResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetClustersResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetBackupsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Clusters", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Backups", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -17017,8 +18043,8 @@ func (m *GetClustersResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Clusters = append(m.Clusters, &Cluster{})
- if err := m.Clusters[len(m.Clusters)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ m.Backups = append(m.Backups, &ClusterBackup{})
+ if err := m.Backups[len(m.Backups)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -17044,7 +18070,7 @@ func (m *GetClustersResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetFullStatusRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetCellInfosRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -17067,15 +18093,15 @@ func (m *GetFullStatusRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetFullStatusRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetCellInfosRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetFullStatusRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetCellInfosRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -17103,13 +18129,13 @@ func (m *GetFullStatusRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterId = string(dAtA[iNdEx:postIndex])
+ m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Alias", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Cells", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -17119,28 +18145,44 @@ func (m *GetFullStatusRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Alias == nil {
- m.Alias = &topodata.TabletAlias{}
+ m.Cells = append(m.Cells, string(dAtA[iNdEx:postIndex]))
+ iNdEx = postIndex
+ case 3:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field NamesOnly", wireType)
}
- if err := m.Alias.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
}
- iNdEx = postIndex
+ m.NamesOnly = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -17163,7 +18205,7 @@ func (m *GetFullStatusRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetGatesRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetCellInfosResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -17186,17 +18228,17 @@ func (m *GetGatesRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetGatesRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetCellInfosResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetGatesRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetCellInfosResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field CellInfos", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -17206,23 +18248,25 @@ func (m *GetGatesRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
+ m.CellInfos = append(m.CellInfos, &ClusterCellInfo{})
+ if err := m.CellInfos[len(m.CellInfos)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -17246,7 +18290,7 @@ func (m *GetGatesRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetGatesResponse) UnmarshalVT(dAtA []byte) error {
+func (m *GetCellsAliasesRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -17269,17 +18313,17 @@ func (m *GetGatesResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetGatesResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetCellsAliasesRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetGatesResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetCellsAliasesRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Gates", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -17289,25 +18333,23 @@ func (m *GetGatesResponse) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Gates = append(m.Gates, &VTGate{})
- if err := m.Gates[len(m.Gates)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -17331,7 +18373,7 @@ func (m *GetGatesResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetCellsAliasesResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -17354,17 +18396,17 @@ func (m *GetKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetKeyspaceRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetCellsAliasesResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetKeyspaceRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetCellsAliasesResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Aliases", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -17374,55 +18416,25 @@ func (m *GetKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterId = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
+ m.Aliases = append(m.Aliases, &ClusterCellsAliases{})
+ if err := m.Aliases[len(m.Aliases)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
}
- m.Keyspace = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -17446,7 +18458,7 @@ func (m *GetKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetKeyspacesRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetClustersRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -17469,44 +18481,12 @@ func (m *GetKeyspacesRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetKeyspacesRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetClustersRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetKeyspacesRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetClustersRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
- iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -17529,7 +18509,7 @@ func (m *GetKeyspacesRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetKeyspacesResponse) UnmarshalVT(dAtA []byte) error {
+func (m *GetClustersResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -17552,15 +18532,15 @@ func (m *GetKeyspacesResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetKeyspacesResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetClustersResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetKeyspacesResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetClustersResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keyspaces", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Clusters", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -17587,8 +18567,8 @@ func (m *GetKeyspacesResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Keyspaces = append(m.Keyspaces, &Keyspace{})
- if err := m.Keyspaces[len(m.Keyspaces)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ m.Clusters = append(m.Clusters, &Cluster{})
+ if err := m.Clusters[len(m.Clusters)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -17614,7 +18594,7 @@ func (m *GetKeyspacesResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetSchemaRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetFullStatusRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -17637,10 +18617,10 @@ func (m *GetSchemaRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetSchemaRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetFullStatusRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetSchemaRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetFullStatusRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -17677,71 +18657,7 @@ func (m *GetSchemaRequest) UnmarshalVT(dAtA []byte) error {
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Keyspace = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Table", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Table = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 4:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field TableSizeOptions", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Alias", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -17768,10 +18684,10 @@ func (m *GetSchemaRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.TableSizeOptions == nil {
- m.TableSizeOptions = &GetSchemaTableSizeOptions{}
+ if m.Alias == nil {
+ m.Alias = &topodata.TabletAlias{}
}
- if err := m.TableSizeOptions.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Alias.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -17797,7 +18713,7 @@ func (m *GetSchemaRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetSchemasRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetGatesRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -17820,10 +18736,10 @@ func (m *GetSchemasRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetSchemasRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetGatesRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetSchemasRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetGatesRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -17858,42 +18774,6 @@ func (m *GetSchemasRequest) UnmarshalVT(dAtA []byte) error {
}
m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field TableSizeOptions", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.TableSizeOptions == nil {
- m.TableSizeOptions = &GetSchemaTableSizeOptions{}
- }
- if err := m.TableSizeOptions.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -17916,7 +18796,7 @@ func (m *GetSchemasRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetSchemasResponse) UnmarshalVT(dAtA []byte) error {
+func (m *GetGatesResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -17939,15 +18819,15 @@ func (m *GetSchemasResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetSchemasResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetGatesResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetSchemasResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetGatesResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Schemas", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Gates", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -17974,8 +18854,8 @@ func (m *GetSchemasResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Schemas = append(m.Schemas, &Schema{})
- if err := m.Schemas[len(m.Schemas)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ m.Gates = append(m.Gates, &VTGate{})
+ if err := m.Gates[len(m.Gates)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -18001,7 +18881,7 @@ func (m *GetSchemasResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetSchemaMigrationsRequest_ClusterRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -18024,10 +18904,10 @@ func (m *GetSchemaMigrationsRequest_ClusterRequest) UnmarshalVT(dAtA []byte) err
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetSchemaMigrationsRequest_ClusterRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetKeyspaceRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetSchemaMigrationsRequest_ClusterRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetKeyspaceRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -18064,9 +18944,9 @@ func (m *GetSchemaMigrationsRequest_ClusterRequest) UnmarshalVT(dAtA []byte) err
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Request", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -18076,27 +18956,23 @@ func (m *GetSchemaMigrationsRequest_ClusterRequest) UnmarshalVT(dAtA []byte) err
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Request == nil {
- m.Request = &vtctldata.GetSchemaMigrationsRequest{}
- }
- if err := m.Request.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ m.Keyspace = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -18120,7 +18996,7 @@ func (m *GetSchemaMigrationsRequest_ClusterRequest) UnmarshalVT(dAtA []byte) err
}
return nil
}
-func (m *GetSchemaMigrationsRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetKeyspacesRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -18143,17 +19019,17 @@ func (m *GetSchemaMigrationsRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetSchemaMigrationsRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetKeyspacesRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetSchemaMigrationsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetKeyspacesRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterRequests", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -18163,25 +19039,23 @@ func (m *GetSchemaMigrationsRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterRequests = append(m.ClusterRequests, &GetSchemaMigrationsRequest_ClusterRequest{})
- if err := m.ClusterRequests[len(m.ClusterRequests)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -18205,7 +19079,7 @@ func (m *GetSchemaMigrationsRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetSchemaMigrationsResponse) UnmarshalVT(dAtA []byte) error {
+func (m *GetKeyspacesResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -18228,15 +19102,15 @@ func (m *GetSchemaMigrationsResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetSchemaMigrationsResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetKeyspacesResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetSchemaMigrationsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetKeyspacesResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field SchemaMigrations", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyspaces", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -18263,8 +19137,8 @@ func (m *GetSchemaMigrationsResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.SchemaMigrations = append(m.SchemaMigrations, &SchemaMigration{})
- if err := m.SchemaMigrations[len(m.SchemaMigrations)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ m.Keyspaces = append(m.Keyspaces, &Keyspace{})
+ if err := m.Keyspaces[len(m.Keyspaces)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -18290,7 +19164,7 @@ func (m *GetSchemaMigrationsResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetShardReplicationPositionsRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetSchemaRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -18313,15 +19187,15 @@ func (m *GetShardReplicationPositionsRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetShardReplicationPositionsRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetSchemaRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetShardReplicationPositionsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetSchemaRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -18349,11 +19223,11 @@ func (m *GetShardReplicationPositionsRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
+ m.ClusterId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keyspaces", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -18381,11 +19255,11 @@ func (m *GetShardReplicationPositionsRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Keyspaces = append(m.Keyspaces, string(dAtA[iNdEx:postIndex]))
+ m.Keyspace = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 3:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field KeyspaceShards", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Table", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -18413,62 +19287,11 @@ func (m *GetShardReplicationPositionsRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.KeyspaceShards = append(m.KeyspaceShards, string(dAtA[iNdEx:postIndex]))
+ m.Table = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := protohelpers.Skip(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if (skippy < 0) || (iNdEx+skippy) < 0 {
- return protohelpers.ErrInvalidLength
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *GetShardReplicationPositionsResponse) UnmarshalVT(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: GetShardReplicationPositionsResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: GetShardReplicationPositionsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
+ case 4:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ReplicationPositions", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field TableSizeOptions", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -18495,8 +19318,10 @@ func (m *GetShardReplicationPositionsResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ReplicationPositions = append(m.ReplicationPositions, &ClusterShardReplicationPosition{})
- if err := m.ReplicationPositions[len(m.ReplicationPositions)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ if m.TableSizeOptions == nil {
+ m.TableSizeOptions = &GetSchemaTableSizeOptions{}
+ }
+ if err := m.TableSizeOptions.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -18522,7 +19347,7 @@ func (m *GetShardReplicationPositionsResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetSrvKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetSchemasRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -18545,15 +19370,15 @@ func (m *GetSrvKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetSrvKeyspaceRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetSchemasRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetSrvKeyspaceRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetSchemasRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -18581,13 +19406,13 @@ func (m *GetSrvKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterId = string(dAtA[iNdEx:postIndex])
+ m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field TableSizeOptions", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -18597,29 +19422,84 @@ func (m *GetSrvKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Keyspace = string(dAtA[iNdEx:postIndex])
+ if m.TableSizeOptions == nil {
+ m.TableSizeOptions = &GetSchemaTableSizeOptions{}
+ }
+ if err := m.TableSizeOptions.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
iNdEx = postIndex
- case 3:
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GetSchemasResponse) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: GetSchemasResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: GetSchemasResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Cells", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Schemas", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -18629,23 +19509,25 @@ func (m *GetSrvKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Cells = append(m.Cells, string(dAtA[iNdEx:postIndex]))
+ m.Schemas = append(m.Schemas, &Schema{})
+ if err := m.Schemas[len(m.Schemas)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -18669,7 +19551,7 @@ func (m *GetSrvKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetSrvKeyspacesRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetSchemaMigrationsRequest_ClusterRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -18692,15 +19574,15 @@ func (m *GetSrvKeyspacesRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetSrvKeyspacesRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetSchemaMigrationsRequest_ClusterRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetSrvKeyspacesRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetSchemaMigrationsRequest_ClusterRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -18728,13 +19610,13 @@ func (m *GetSrvKeyspacesRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
+ m.ClusterId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Cells", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Request", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -18744,23 +19626,27 @@ func (m *GetSrvKeyspacesRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Cells = append(m.Cells, string(dAtA[iNdEx:postIndex]))
+ if m.Request == nil {
+ m.Request = &vtctldata.GetSchemaMigrationsRequest{}
+ }
+ if err := m.Request.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -18784,7 +19670,7 @@ func (m *GetSrvKeyspacesRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetSrvKeyspacesResponse) UnmarshalVT(dAtA []byte) error {
+func (m *GetSchemaMigrationsRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -18807,15 +19693,15 @@ func (m *GetSrvKeyspacesResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetSrvKeyspacesResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetSchemaMigrationsRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetSrvKeyspacesResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetSchemaMigrationsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field SrvKeyspaces", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterRequests", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -18842,105 +19728,10 @@ func (m *GetSrvKeyspacesResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.SrvKeyspaces == nil {
- m.SrvKeyspaces = make(map[string]*vtctldata.GetSrvKeyspacesResponse)
+ m.ClusterRequests = append(m.ClusterRequests, &GetSchemaMigrationsRequest_ClusterRequest{})
+ if err := m.ClusterRequests[len(m.ClusterRequests)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
}
- var mapkey string
- var mapvalue *vtctldata.GetSrvKeyspacesResponse
- for iNdEx < postIndex {
- entryPreIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- if fieldNum == 1 {
- var stringLenmapkey uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLenmapkey |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLenmapkey := int(stringLenmapkey)
- if intStringLenmapkey < 0 {
- return protohelpers.ErrInvalidLength
- }
- postStringIndexmapkey := iNdEx + intStringLenmapkey
- if postStringIndexmapkey < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postStringIndexmapkey > l {
- return io.ErrUnexpectedEOF
- }
- mapkey = string(dAtA[iNdEx:postStringIndexmapkey])
- iNdEx = postStringIndexmapkey
- } else if fieldNum == 2 {
- var mapmsglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- mapmsglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if mapmsglen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postmsgIndex := iNdEx + mapmsglen
- if postmsgIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postmsgIndex > l {
- return io.ErrUnexpectedEOF
- }
- mapvalue = &vtctldata.GetSrvKeyspacesResponse{}
- if err := mapvalue.UnmarshalVT(dAtA[iNdEx:postmsgIndex]); err != nil {
- return err
- }
- iNdEx = postmsgIndex
- } else {
- iNdEx = entryPreIndex
- skippy, err := protohelpers.Skip(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if (skippy < 0) || (iNdEx+skippy) < 0 {
- return protohelpers.ErrInvalidLength
- }
- if (iNdEx + skippy) > postIndex {
- return io.ErrUnexpectedEOF
- }
- iNdEx += skippy
- }
- }
- m.SrvKeyspaces[mapkey] = mapvalue
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -18964,7 +19755,7 @@ func (m *GetSrvKeyspacesResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetSrvVSchemaRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetSchemaMigrationsResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -18987,17 +19778,17 @@ func (m *GetSrvVSchemaRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetSrvVSchemaRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetSchemaMigrationsResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetSrvVSchemaRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetSchemaMigrationsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field SchemaMigrations", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -19007,55 +19798,25 @@ func (m *GetSrvVSchemaRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterId = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Cell", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
+ m.SchemaMigrations = append(m.SchemaMigrations, &SchemaMigration{})
+ if err := m.SchemaMigrations[len(m.SchemaMigrations)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
}
- m.Cell = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -19079,7 +19840,7 @@ func (m *GetSrvVSchemaRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetSrvVSchemasRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetShardReplicationPositionsRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -19102,10 +19863,10 @@ func (m *GetSrvVSchemasRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetSrvVSchemasRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetShardReplicationPositionsRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetSrvVSchemasRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetShardReplicationPositionsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -19142,7 +19903,7 @@ func (m *GetSrvVSchemasRequest) UnmarshalVT(dAtA []byte) error {
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Cells", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyspaces", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -19170,7 +19931,39 @@ func (m *GetSrvVSchemasRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Cells = append(m.Cells, string(dAtA[iNdEx:postIndex]))
+ m.Keyspaces = append(m.Keyspaces, string(dAtA[iNdEx:postIndex]))
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field KeyspaceShards", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.KeyspaceShards = append(m.KeyspaceShards, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -19194,7 +19987,7 @@ func (m *GetSrvVSchemasRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetSrvVSchemasResponse) UnmarshalVT(dAtA []byte) error {
+func (m *GetShardReplicationPositionsResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -19217,15 +20010,15 @@ func (m *GetSrvVSchemasResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetSrvVSchemasResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetShardReplicationPositionsResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetSrvVSchemasResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetShardReplicationPositionsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field SrvVSchemas", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ReplicationPositions", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -19252,8 +20045,8 @@ func (m *GetSrvVSchemasResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.SrvVSchemas = append(m.SrvVSchemas, &SrvVSchema{})
- if err := m.SrvVSchemas[len(m.SrvVSchemas)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ m.ReplicationPositions = append(m.ReplicationPositions, &ClusterShardReplicationPosition{})
+ if err := m.ReplicationPositions[len(m.ReplicationPositions)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -19279,7 +20072,7 @@ func (m *GetSrvVSchemasResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetSchemaTableSizeOptions) UnmarshalVT(dAtA []byte) error {
+func (m *GetSrvKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -19302,17 +20095,17 @@ func (m *GetSchemaTableSizeOptions) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetSchemaTableSizeOptions: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetSrvKeyspaceRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetSchemaTableSizeOptions: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetSrvKeyspaceRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field AggregateSizes", wireType)
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
}
- var v int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -19322,17 +20115,29 @@ func (m *GetSchemaTableSizeOptions) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- v |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- m.AggregateSizes = bool(v != 0)
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ClusterId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field IncludeNonServingShards", wireType)
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
}
- var v int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -19342,102 +20147,27 @@ func (m *GetSchemaTableSizeOptions) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- v |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- m.IncludeNonServingShards = bool(v != 0)
- default:
- iNdEx = preIndex
- skippy, err := protohelpers.Skip(dAtA[iNdEx:])
- if err != nil {
- return err
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
}
- if (skippy < 0) || (iNdEx+skippy) < 0 {
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
- if (iNdEx + skippy) > l {
+ if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *GetTabletRequest) UnmarshalVT(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: GetTabletRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: GetTabletRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Alias", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Alias == nil {
- m.Alias = &topodata.TabletAlias{}
- }
- if err := m.Alias.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
+ m.Keyspace = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Cells", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -19465,7 +20195,7 @@ func (m *GetTabletRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
+ m.Cells = append(m.Cells, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -19489,7 +20219,7 @@ func (m *GetTabletRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetTabletsRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetSrvKeyspacesRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -19512,10 +20242,10 @@ func (m *GetTabletsRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetTabletsRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetSrvKeyspacesRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetTabletsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetSrvKeyspacesRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -19550,6 +20280,38 @@ func (m *GetTabletsRequest) UnmarshalVT(dAtA []byte) error {
}
m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Cells", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Cells = append(m.Cells, string(dAtA[iNdEx:postIndex]))
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -19572,7 +20334,7 @@ func (m *GetTabletsRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetTabletsResponse) UnmarshalVT(dAtA []byte) error {
+func (m *GetSrvKeyspacesResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -19595,15 +20357,15 @@ func (m *GetTabletsResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetTabletsResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetSrvKeyspacesResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetTabletsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetSrvKeyspacesResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Tablets", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field SrvKeyspaces", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -19630,10 +20392,105 @@ func (m *GetTabletsResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Tablets = append(m.Tablets, &Tablet{})
- if err := m.Tablets[len(m.Tablets)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
+ if m.SrvKeyspaces == nil {
+ m.SrvKeyspaces = make(map[string]*vtctldata.GetSrvKeyspacesResponse)
+ }
+ var mapkey string
+ var mapvalue *vtctldata.GetSrvKeyspacesResponse
+ for iNdEx < postIndex {
+ entryPreIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ if fieldNum == 1 {
+ var stringLenmapkey uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLenmapkey |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLenmapkey := int(stringLenmapkey)
+ if intStringLenmapkey < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postStringIndexmapkey := iNdEx + intStringLenmapkey
+ if postStringIndexmapkey < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postStringIndexmapkey > l {
+ return io.ErrUnexpectedEOF
+ }
+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey])
+ iNdEx = postStringIndexmapkey
+ } else if fieldNum == 2 {
+ var mapmsglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ mapmsglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if mapmsglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postmsgIndex := iNdEx + mapmsglen
+ if postmsgIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postmsgIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ mapvalue = &vtctldata.GetSrvKeyspacesResponse{}
+ if err := mapvalue.UnmarshalVT(dAtA[iNdEx:postmsgIndex]); err != nil {
+ return err
+ }
+ iNdEx = postmsgIndex
+ } else {
+ iNdEx = entryPreIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > postIndex {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
}
+ m.SrvKeyspaces[mapkey] = mapvalue
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -19657,7 +20514,7 @@ func (m *GetTabletsResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetTopologyPathRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetSrvVSchemaRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -19680,10 +20537,10 @@ func (m *GetTopologyPathRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetTopologyPathRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetSrvVSchemaRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetTopologyPathRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetSrvVSchemaRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -19720,7 +20577,7 @@ func (m *GetTopologyPathRequest) UnmarshalVT(dAtA []byte) error {
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Cell", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -19748,7 +20605,7 @@ func (m *GetTopologyPathRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Path = string(dAtA[iNdEx:postIndex])
+ m.Cell = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -19772,7 +20629,7 @@ func (m *GetTopologyPathRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetUnresolvedTransactionsRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetSrvVSchemasRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -19795,15 +20652,15 @@ func (m *GetUnresolvedTransactionsRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetUnresolvedTransactionsRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetSrvVSchemasRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetUnresolvedTransactionsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetSrvVSchemasRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -19831,11 +20688,11 @@ func (m *GetUnresolvedTransactionsRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterId = string(dAtA[iNdEx:postIndex])
+ m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Cells", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -19863,7 +20720,7 @@ func (m *GetUnresolvedTransactionsRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Keyspace = string(dAtA[iNdEx:postIndex])
+ m.Cells = append(m.Cells, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -19887,7 +20744,7 @@ func (m *GetUnresolvedTransactionsRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetVSchemaRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetSrvVSchemasResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -19910,17 +20767,17 @@ func (m *GetVSchemaRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetVSchemaRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetSrvVSchemasResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetVSchemaRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetSrvVSchemasResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field SrvVSchemas", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -19930,55 +20787,25 @@ func (m *GetVSchemaRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterId = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
+ m.SrvVSchemas = append(m.SrvVSchemas, &SrvVSchema{})
+ if err := m.SrvVSchemas[len(m.SrvVSchemas)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
}
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Keyspace = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -20002,7 +20829,7 @@ func (m *GetVSchemaRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetVSchemasRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetSchemaTableSizeOptions) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -20025,17 +20852,17 @@ func (m *GetVSchemasRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetVSchemasRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetSchemaTableSizeOptions: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetVSchemasRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetSchemaTableSizeOptions: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field AggregateSizes", wireType)
}
- var stringLen uint64
+ var v int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -20045,24 +20872,32 @@ func (m *GetVSchemasRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ v |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
+ m.AggregateSizes = bool(v != 0)
+ case 2:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field IncludeNonServingShards", wireType)
}
- if postIndex > l {
- return io.ErrUnexpectedEOF
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
}
- m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
- iNdEx = postIndex
+ m.IncludeNonServingShards = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -20085,7 +20920,7 @@ func (m *GetVSchemasRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetVSchemasResponse) UnmarshalVT(dAtA []byte) error {
+func (m *GetTabletRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -20108,15 +20943,15 @@ func (m *GetVSchemasResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetVSchemasResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetTabletRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetVSchemasResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetTabletRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field VSchemas", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Alias", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -20143,11 +20978,45 @@ func (m *GetVSchemasResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.VSchemas = append(m.VSchemas, &VSchema{})
- if err := m.VSchemas[len(m.VSchemas)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ if m.Alias == nil {
+ m.Alias = &topodata.TabletAlias{}
+ }
+ if err := m.Alias.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -20170,7 +21039,7 @@ func (m *GetVSchemasResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetVtctldsRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetTabletsRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -20193,10 +21062,10 @@ func (m *GetVtctldsRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetVtctldsRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetTabletsRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetVtctldsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetTabletsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -20253,7 +21122,7 @@ func (m *GetVtctldsRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetVtctldsResponse) UnmarshalVT(dAtA []byte) error {
+func (m *GetTabletsResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -20276,15 +21145,15 @@ func (m *GetVtctldsResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetVtctldsResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetTabletsResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetVtctldsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetTabletsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Vtctlds", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Tablets", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -20311,8 +21180,8 @@ func (m *GetVtctldsResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Vtctlds = append(m.Vtctlds, &Vtctld{})
- if err := m.Vtctlds[len(m.Vtctlds)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ m.Tablets = append(m.Tablets, &Tablet{})
+ if err := m.Tablets[len(m.Tablets)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -20338,7 +21207,7 @@ func (m *GetVtctldsResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetWorkflowRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetTopologyPathRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -20361,10 +21230,10 @@ func (m *GetWorkflowRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetWorkflowRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetTopologyPathRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetWorkflowRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetTopologyPathRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -20401,7 +21270,7 @@ func (m *GetWorkflowRequest) UnmarshalVT(dAtA []byte) error {
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -20429,11 +21298,62 @@ func (m *GetWorkflowRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Keyspace = string(dAtA[iNdEx:postIndex])
+ m.Path = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 3:
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GetTransactionInfoRequest) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: GetTransactionInfoRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: GetTransactionInfoRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -20461,13 +21381,13 @@ func (m *GetWorkflowRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Name = string(dAtA[iNdEx:postIndex])
+ m.ClusterId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 4:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ActiveOnly", wireType)
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Request", wireType)
}
- var v int
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -20477,12 +21397,28 @@ func (m *GetWorkflowRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- v |= int(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- m.ActiveOnly = bool(v != 0)
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Request == nil {
+ m.Request = &vtctldata.GetTransactionInfoRequest{}
+ }
+ if err := m.Request.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -20505,7 +21441,7 @@ func (m *GetWorkflowRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetWorkflowStatusRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetUnresolvedTransactionsRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -20528,10 +21464,10 @@ func (m *GetWorkflowStatusRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetWorkflowStatusRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetUnresolvedTransactionsRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetWorkflowStatusRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetUnresolvedTransactionsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -20599,10 +21535,10 @@ func (m *GetWorkflowStatusRequest) UnmarshalVT(dAtA []byte) error {
m.Keyspace = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field AbandonAge", wireType)
}
- var stringLen uint64
+ m.AbandonAge = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -20612,24 +21548,11 @@ func (m *GetWorkflowStatusRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ m.AbandonAge |= int64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Name = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -20652,7 +21575,7 @@ func (m *GetWorkflowStatusRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *StartWorkflowRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetVSchemaRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -20675,10 +21598,10 @@ func (m *StartWorkflowRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: StartWorkflowRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetVSchemaRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: StartWorkflowRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetVSchemaRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -20745,9 +21668,60 @@ func (m *StartWorkflowRequest) UnmarshalVT(dAtA []byte) error {
}
m.Keyspace = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 3:
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GetVSchemasRequest) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: GetVSchemasRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: GetVSchemasRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Workflow", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -20775,7 +21749,7 @@ func (m *StartWorkflowRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Workflow = string(dAtA[iNdEx:postIndex])
+ m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -20799,7 +21773,7 @@ func (m *StartWorkflowRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *StopWorkflowRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetVSchemasResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -20822,17 +21796,17 @@ func (m *StopWorkflowRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: StopWorkflowRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetVSchemasResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: StopWorkflowRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetVSchemasResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field VSchemas", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -20842,27 +21816,80 @@ func (m *StopWorkflowRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterId = string(dAtA[iNdEx:postIndex])
+ m.VSchemas = append(m.VSchemas, &VSchema{})
+ if err := m.VSchemas[len(m.VSchemas)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
iNdEx = postIndex
- case 2:
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GetVtctldsRequest) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: GetVtctldsRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: GetVtctldsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -20890,13 +21917,64 @@ func (m *StopWorkflowRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Keyspace = string(dAtA[iNdEx:postIndex])
+ m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
- case 3:
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GetVtctldsResponse) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: GetVtctldsResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: GetVtctldsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Workflow", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Vtctlds", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -20906,23 +21984,25 @@ func (m *StopWorkflowRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Workflow = string(dAtA[iNdEx:postIndex])
+ m.Vtctlds = append(m.Vtctlds, &Vtctld{})
+ if err := m.Vtctlds[len(m.Vtctlds)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -20946,7 +22026,7 @@ func (m *StopWorkflowRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetWorkflowsRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetWorkflowRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -20969,15 +22049,15 @@ func (m *GetWorkflowsRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetWorkflowsRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetWorkflowRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetWorkflowsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetWorkflowRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -21005,31 +22085,11 @@ func (m *GetWorkflowsRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
+ m.ClusterId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field ActiveOnly", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.ActiveOnly = bool(v != 0)
- case 3:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keyspaces", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -21057,11 +22117,11 @@ func (m *GetWorkflowsRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Keyspaces = append(m.Keyspaces, string(dAtA[iNdEx:postIndex]))
+ m.Keyspace = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 4:
+ case 3:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field IgnoreKeyspaces", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -21089,16 +22149,36 @@ func (m *GetWorkflowsRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.IgnoreKeyspaces = append(m.IgnoreKeyspaces, string(dAtA[iNdEx:postIndex]))
+ m.Name = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := protohelpers.Skip(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if (skippy < 0) || (iNdEx+skippy) < 0 {
- return protohelpers.ErrInvalidLength
+ case 4:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ActiveOnly", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.ActiveOnly = bool(v != 0)
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
@@ -21113,7 +22193,7 @@ func (m *GetWorkflowsRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetWorkflowsResponse) UnmarshalVT(dAtA []byte) error {
+func (m *GetWorkflowStatusRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -21136,17 +22216,17 @@ func (m *GetWorkflowsResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetWorkflowsResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetWorkflowStatusRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetWorkflowsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetWorkflowStatusRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field WorkflowsByCluster", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -21156,120 +22236,87 @@ func (m *GetWorkflowsResponse) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.WorkflowsByCluster == nil {
- m.WorkflowsByCluster = make(map[string]*ClusterWorkflows)
+ m.ClusterId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
}
- var mapkey string
- var mapvalue *ClusterWorkflows
- for iNdEx < postIndex {
- entryPreIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
}
- fieldNum := int32(wire >> 3)
- if fieldNum == 1 {
- var stringLenmapkey uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLenmapkey |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLenmapkey := int(stringLenmapkey)
- if intStringLenmapkey < 0 {
- return protohelpers.ErrInvalidLength
- }
- postStringIndexmapkey := iNdEx + intStringLenmapkey
- if postStringIndexmapkey < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postStringIndexmapkey > l {
- return io.ErrUnexpectedEOF
- }
- mapkey = string(dAtA[iNdEx:postStringIndexmapkey])
- iNdEx = postStringIndexmapkey
- } else if fieldNum == 2 {
- var mapmsglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- mapmsglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if mapmsglen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postmsgIndex := iNdEx + mapmsglen
- if postmsgIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postmsgIndex > l {
- return io.ErrUnexpectedEOF
- }
- mapvalue = &ClusterWorkflows{}
- if err := mapvalue.UnmarshalVT(dAtA[iNdEx:postmsgIndex]); err != nil {
- return err
- }
- iNdEx = postmsgIndex
- } else {
- iNdEx = entryPreIndex
- skippy, err := protohelpers.Skip(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if (skippy < 0) || (iNdEx+skippy) < 0 {
- return protohelpers.ErrInvalidLength
- }
- if (iNdEx + skippy) > postIndex {
- return io.ErrUnexpectedEOF
- }
- iNdEx += skippy
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
}
}
- m.WorkflowsByCluster[mapkey] = mapvalue
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Keyspace = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Name = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -21293,7 +22340,7 @@ func (m *GetWorkflowsResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *LaunchSchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
+func (m *StartWorkflowRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -21316,10 +22363,10 @@ func (m *LaunchSchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: LaunchSchemaMigrationRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: StartWorkflowRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: LaunchSchemaMigrationRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: StartWorkflowRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -21356,9 +22403,9 @@ func (m *LaunchSchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Request", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -21368,27 +22415,55 @@ func (m *LaunchSchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Request == nil {
- m.Request = &vtctldata.LaunchSchemaMigrationRequest{}
+ m.Keyspace = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Workflow", wireType)
}
- if err := m.Request.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
}
+ m.Workflow = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -21412,7 +22487,7 @@ func (m *LaunchSchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *MoveTablesCreateRequest) UnmarshalVT(dAtA []byte) error {
+func (m *StopWorkflowRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -21435,10 +22510,10 @@ func (m *MoveTablesCreateRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: MoveTablesCreateRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: StopWorkflowRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: MoveTablesCreateRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: StopWorkflowRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -21475,96 +22550,9 @@ func (m *MoveTablesCreateRequest) UnmarshalVT(dAtA []byte) error {
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Request", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Request == nil {
- m.Request = &vtctldata.MoveTablesCreateRequest{}
- }
- if err := m.Request.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := protohelpers.Skip(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if (skippy < 0) || (iNdEx+skippy) < 0 {
- return protohelpers.ErrInvalidLength
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *PingTabletRequest) UnmarshalVT(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: PingTabletRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: PingTabletRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Alias", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -21574,31 +22562,27 @@ func (m *PingTabletRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Alias == nil {
- m.Alias = &topodata.TabletAlias{}
- }
- if err := m.Alias.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ m.Keyspace = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 2:
+ case 3:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Workflow", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -21626,7 +22610,7 @@ func (m *PingTabletRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
+ m.Workflow = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -21650,7 +22634,7 @@ func (m *PingTabletRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *PingTabletResponse) UnmarshalVT(dAtA []byte) error {
+func (m *GetWorkflowsRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -21673,15 +22657,15 @@ func (m *PingTabletResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: PingTabletResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetWorkflowsRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: PingTabletResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetWorkflowsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -21709,13 +22693,13 @@ func (m *PingTabletResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Status = string(dAtA[iNdEx:postIndex])
+ m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType)
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ActiveOnly", wireType)
}
- var msglen int
+ var v int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -21725,82 +22709,15 @@ func (m *PingTabletResponse) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ v |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Cluster == nil {
- m.Cluster = &Cluster{}
- }
- if err := m.Cluster.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := protohelpers.Skip(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if (skippy < 0) || (iNdEx+skippy) < 0 {
- return protohelpers.ErrInvalidLength
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *PlannedFailoverShardRequest) UnmarshalVT(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: PlannedFailoverShardRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: PlannedFailoverShardRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
+ m.ActiveOnly = bool(v != 0)
+ case 3:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyspaces", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -21828,13 +22745,13 @@ func (m *PlannedFailoverShardRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterId = string(dAtA[iNdEx:postIndex])
+ m.Keyspaces = append(m.Keyspaces, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
- case 2:
+ case 4:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field IgnoreKeyspaces", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -21844,27 +22761,23 @@ func (m *PlannedFailoverShardRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Options == nil {
- m.Options = &vtctldata.PlannedReparentShardRequest{}
- }
- if err := m.Options.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ m.IgnoreKeyspaces = append(m.IgnoreKeyspaces, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -21888,7 +22801,7 @@ func (m *PlannedFailoverShardRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *PlannedFailoverShardResponse) UnmarshalVT(dAtA []byte) error {
+func (m *GetWorkflowsResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -21911,15 +22824,15 @@ func (m *PlannedFailoverShardResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: PlannedFailoverShardResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetWorkflowsResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: PlannedFailoverShardResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetWorkflowsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field WorkflowsByCluster", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -21946,48 +22859,160 @@ func (m *PlannedFailoverShardResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Cluster == nil {
- m.Cluster = &Cluster{}
- }
- if err := m.Cluster.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
+ if m.WorkflowsByCluster == nil {
+ m.WorkflowsByCluster = make(map[string]*ClusterWorkflows)
}
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
+ var mapkey string
+ var mapvalue *ClusterWorkflows
+ for iNdEx < postIndex {
+ entryPreIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ if fieldNum == 1 {
+ var stringLenmapkey uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLenmapkey |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLenmapkey := int(stringLenmapkey)
+ if intStringLenmapkey < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postStringIndexmapkey := iNdEx + intStringLenmapkey
+ if postStringIndexmapkey < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postStringIndexmapkey > l {
+ return io.ErrUnexpectedEOF
+ }
+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey])
+ iNdEx = postStringIndexmapkey
+ } else if fieldNum == 2 {
+ var mapmsglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ mapmsglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if mapmsglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postmsgIndex := iNdEx + mapmsglen
+ if postmsgIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postmsgIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ mapvalue = &ClusterWorkflows{}
+ if err := mapvalue.UnmarshalVT(dAtA[iNdEx:postmsgIndex]); err != nil {
+ return err
+ }
+ iNdEx = postmsgIndex
+ } else {
+ iNdEx = entryPreIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > postIndex {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return protohelpers.ErrInvalidLength
+ m.WorkflowsByCluster[mapkey] = mapvalue
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
}
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
return protohelpers.ErrInvalidLength
}
- if postIndex > l {
+ if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
- m.Keyspace = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 3:
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *LaunchSchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: LaunchSchemaMigrationRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: LaunchSchemaMigrationRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Shard", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -22015,11 +23040,11 @@ func (m *PlannedFailoverShardResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Shard = string(dAtA[iNdEx:postIndex])
+ m.ClusterId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 4:
+ case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field PromotedPrimary", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Request", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -22046,44 +23071,10 @@ func (m *PlannedFailoverShardResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.PromotedPrimary == nil {
- m.PromotedPrimary = &topodata.TabletAlias{}
- }
- if err := m.PromotedPrimary.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 5:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Events", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
+ if m.Request == nil {
+ m.Request = &vtctldata.LaunchSchemaMigrationRequest{}
}
- m.Events = append(m.Events, &logutil.Event{})
- if err := m.Events[len(m.Events)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Request.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -22109,7 +23100,7 @@ func (m *PlannedFailoverShardResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *RebuildKeyspaceGraphRequest) UnmarshalVT(dAtA []byte) error {
+func (m *MaterializeCreateRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -22132,10 +23123,10 @@ func (m *RebuildKeyspaceGraphRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: RebuildKeyspaceGraphRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: MaterializeCreateRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: RebuildKeyspaceGraphRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: MaterializeCreateRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -22172,7 +23163,7 @@ func (m *RebuildKeyspaceGraphRequest) UnmarshalVT(dAtA []byte) error {
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field TableSettings", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -22200,13 +23191,13 @@ func (m *RebuildKeyspaceGraphRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Keyspace = string(dAtA[iNdEx:postIndex])
+ m.TableSettings = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 3:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Cells", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Request", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -22216,44 +23207,28 @@ func (m *RebuildKeyspaceGraphRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Cells = append(m.Cells, string(dAtA[iNdEx:postIndex]))
- iNdEx = postIndex
- case 4:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field AllowPartial", wireType)
+ if m.Request == nil {
+ m.Request = &vtctldata.MaterializeCreateRequest{}
}
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
+ if err := m.Request.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
}
- m.AllowPartial = bool(v != 0)
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -22276,7 +23251,7 @@ func (m *RebuildKeyspaceGraphRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *RebuildKeyspaceGraphResponse) UnmarshalVT(dAtA []byte) error {
+func (m *MoveTablesCompleteRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -22299,15 +23274,15 @@ func (m *RebuildKeyspaceGraphResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: RebuildKeyspaceGraphResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: MoveTablesCompleteRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: RebuildKeyspaceGraphResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: MoveTablesCompleteRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -22335,15 +23310,51 @@ func (m *RebuildKeyspaceGraphResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Status = string(dAtA[iNdEx:postIndex])
+ m.ClusterId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := protohelpers.Skip(dAtA[iNdEx:])
- if err != nil {
- return err
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Request", wireType)
}
- if (skippy < 0) || (iNdEx+skippy) < 0 {
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Request == nil {
+ m.Request = &vtctldata.MoveTablesCompleteRequest{}
+ }
+ if err := m.Request.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
return protohelpers.ErrInvalidLength
}
if (iNdEx + skippy) > l {
@@ -22359,7 +23370,7 @@ func (m *RebuildKeyspaceGraphResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *RefreshStateRequest) UnmarshalVT(dAtA []byte) error {
+func (m *MoveTablesCreateRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -22382,10 +23393,129 @@ func (m *RefreshStateRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: RefreshStateRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: MoveTablesCreateRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: RefreshStateRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: MoveTablesCreateRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ClusterId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Request", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Request == nil {
+ m.Request = &vtctldata.MoveTablesCreateRequest{}
+ }
+ if err := m.Request.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *PingTabletRequest) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: PingTabletRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: PingTabletRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -22478,7 +23608,7 @@ func (m *RefreshStateRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *RefreshStateResponse) UnmarshalVT(dAtA []byte) error {
+func (m *PingTabletResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -22501,10 +23631,10 @@ func (m *RefreshStateResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: RefreshStateResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: PingTabletResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: RefreshStateResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: PingTabletResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -22597,7 +23727,7 @@ func (m *RefreshStateResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *ReloadSchemasRequest) UnmarshalVT(dAtA []byte) error {
+func (m *PlannedFailoverShardRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -22620,15 +23750,15 @@ func (m *ReloadSchemasRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: ReloadSchemasRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: PlannedFailoverShardRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: ReloadSchemasRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: PlannedFailoverShardRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keyspaces", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -22656,13 +23786,13 @@ func (m *ReloadSchemasRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Keyspaces = append(m.Keyspaces, string(dAtA[iNdEx:postIndex]))
+ m.ClusterId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field KeyspaceShards", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -22672,27 +23802,82 @@ func (m *ReloadSchemasRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.KeyspaceShards = append(m.KeyspaceShards, string(dAtA[iNdEx:postIndex]))
+ if m.Options == nil {
+ m.Options = &vtctldata.PlannedReparentShardRequest{}
+ }
+ if err := m.Options.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
iNdEx = postIndex
- case 3:
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *PlannedFailoverShardResponse) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: PlannedFailoverShardResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: PlannedFailoverShardResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Tablets", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -22719,14 +23904,16 @@ func (m *ReloadSchemasRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Tablets = append(m.Tablets, &topodata.TabletAlias{})
- if err := m.Tablets[len(m.Tablets)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ if m.Cluster == nil {
+ m.Cluster = &Cluster{}
+ }
+ if err := m.Cluster.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
iNdEx = postIndex
- case 4:
+ case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -22754,13 +23941,13 @@ func (m *ReloadSchemasRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
+ m.Keyspace = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 5:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Concurrency", wireType)
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Shard", wireType)
}
- m.Concurrency = 0
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -22770,16 +23957,29 @@ func (m *ReloadSchemasRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- m.Concurrency |= int32(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- case 6:
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Shard = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 4:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field WaitPosition", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field PromotedPrimary", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -22789,29 +23989,33 @@ func (m *ReloadSchemasRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.WaitPosition = string(dAtA[iNdEx:postIndex])
+ if m.PromotedPrimary == nil {
+ m.PromotedPrimary = &topodata.TabletAlias{}
+ }
+ if err := m.PromotedPrimary.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
iNdEx = postIndex
- case 7:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field IncludePrimary", wireType)
+ case 5:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Events", wireType)
}
- var v int
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -22821,12 +24025,26 @@ func (m *ReloadSchemasRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- v |= int(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- m.IncludePrimary = bool(v != 0)
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Events = append(m.Events, &logutil.Event{})
+ if err := m.Events[len(m.Events)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -22849,7 +24067,7 @@ func (m *ReloadSchemasRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *ReloadSchemasResponse_KeyspaceResult) UnmarshalVT(dAtA []byte) error {
+func (m *RebuildKeyspaceGraphRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -22872,17 +24090,17 @@ func (m *ReloadSchemasResponse_KeyspaceResult) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: ReloadSchemasResponse_KeyspaceResult: wiretype end group for non-group")
+ return fmt.Errorf("proto: RebuildKeyspaceGraphRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: ReloadSchemasResponse_KeyspaceResult: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: RebuildKeyspaceGraphRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -22892,33 +24110,29 @@ func (m *ReloadSchemasResponse_KeyspaceResult) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Keyspace == nil {
- m.Keyspace = &Keyspace{}
- }
- if err := m.Keyspace.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ m.ClusterId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Events", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -22928,26 +24142,76 @@ func (m *ReloadSchemasResponse_KeyspaceResult) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Events = append(m.Events, &logutil.Event{})
- if err := m.Events[len(m.Events)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
+ m.Keyspace = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Cells", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
}
+ m.Cells = append(m.Cells, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
+ case 4:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field AllowPartial", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.AllowPartial = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -22970,7 +24234,7 @@ func (m *ReloadSchemasResponse_KeyspaceResult) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *ReloadSchemasResponse_ShardResult) UnmarshalVT(dAtA []byte) error {
+func (m *RebuildKeyspaceGraphResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -22993,53 +24257,17 @@ func (m *ReloadSchemasResponse_ShardResult) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: ReloadSchemasResponse_ShardResult: wiretype end group for non-group")
+ return fmt.Errorf("proto: RebuildKeyspaceGraphResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: ReloadSchemasResponse_ShardResult: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: RebuildKeyspaceGraphResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Shard", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Shard == nil {
- m.Shard = &Shard{}
- }
- if err := m.Shard.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Events", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -23049,25 +24277,23 @@ func (m *ReloadSchemasResponse_ShardResult) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Events = append(m.Events, &logutil.Event{})
- if err := m.Events[len(m.Events)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ m.Status = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -23091,7 +24317,7 @@ func (m *ReloadSchemasResponse_ShardResult) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *ReloadSchemasResponse_TabletResult) UnmarshalVT(dAtA []byte) error {
+func (m *RefreshStateRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -23114,15 +24340,15 @@ func (m *ReloadSchemasResponse_TabletResult) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: ReloadSchemasResponse_TabletResult: wiretype end group for non-group")
+ return fmt.Errorf("proto: RefreshStateRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: ReloadSchemasResponse_TabletResult: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: RefreshStateRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Tablet", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Alias", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -23149,16 +24375,16 @@ func (m *ReloadSchemasResponse_TabletResult) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Tablet == nil {
- m.Tablet = &Tablet{}
+ if m.Alias == nil {
+ m.Alias = &topodata.TabletAlias{}
}
- if err := m.Tablet.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Alias.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Result", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -23186,7 +24412,7 @@ func (m *ReloadSchemasResponse_TabletResult) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Result = string(dAtA[iNdEx:postIndex])
+ m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -23210,7 +24436,7 @@ func (m *ReloadSchemasResponse_TabletResult) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *ReloadSchemasResponse) UnmarshalVT(dAtA []byte) error {
+func (m *RefreshStateResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -23233,17 +24459,17 @@ func (m *ReloadSchemasResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: ReloadSchemasResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: RefreshStateResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: ReloadSchemasResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: RefreshStateResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field KeyspaceResults", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -23253,29 +24479,27 @@ func (m *ReloadSchemasResponse) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.KeyspaceResults = append(m.KeyspaceResults, &ReloadSchemasResponse_KeyspaceResult{})
- if err := m.KeyspaceResults[len(m.KeyspaceResults)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ m.Status = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ShardResults", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -23302,42 +24526,10 @@ func (m *ReloadSchemasResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ShardResults = append(m.ShardResults, &ReloadSchemasResponse_ShardResult{})
- if err := m.ShardResults[len(m.ShardResults)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field TabletResults", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
+ if m.Cluster == nil {
+ m.Cluster = &Cluster{}
}
- m.TabletResults = append(m.TabletResults, &ReloadSchemasResponse_TabletResult{})
- if err := m.TabletResults[len(m.TabletResults)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Cluster.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -23363,7 +24555,7 @@ func (m *ReloadSchemasResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *ReloadSchemaShardRequest) UnmarshalVT(dAtA []byte) error {
+func (m *ReloadSchemasRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -23386,15 +24578,15 @@ func (m *ReloadSchemaShardRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: ReloadSchemaShardRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: ReloadSchemasRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: ReloadSchemaShardRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: ReloadSchemasRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyspaces", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -23422,11 +24614,11 @@ func (m *ReloadSchemaShardRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterId = string(dAtA[iNdEx:postIndex])
+ m.Keyspaces = append(m.Keyspaces, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field KeyspaceShards", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -23454,13 +24646,13 @@ func (m *ReloadSchemaShardRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Keyspace = string(dAtA[iNdEx:postIndex])
+ m.KeyspaceShards = append(m.KeyspaceShards, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
case 3:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Shard", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Tablets", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -23470,27 +24662,29 @@ func (m *ReloadSchemaShardRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Shard = string(dAtA[iNdEx:postIndex])
+ m.Tablets = append(m.Tablets, &topodata.TabletAlias{})
+ if err := m.Tablets[len(m.Tablets)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
iNdEx = postIndex
case 4:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field WaitPosition", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -23518,13 +24712,13 @@ func (m *ReloadSchemaShardRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.WaitPosition = string(dAtA[iNdEx:postIndex])
+ m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
case 5:
if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field IncludePrimary", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Concurrency", wireType)
}
- var v int
+ m.Concurrency = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -23534,17 +24728,48 @@ func (m *ReloadSchemaShardRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- v |= int(b&0x7F) << shift
+ m.Concurrency |= int32(b&0x7F) << shift
if b < 0x80 {
break
}
}
- m.IncludePrimary = bool(v != 0)
case 6:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field WaitPosition", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.WaitPosition = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 7:
if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Concurrency", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field IncludePrimary", wireType)
}
- m.Concurrency = 0
+ var v int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -23554,11 +24779,12 @@ func (m *ReloadSchemaShardRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- m.Concurrency |= int32(b&0x7F) << shift
+ v |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
+ m.IncludePrimary = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -23581,7 +24807,7 @@ func (m *ReloadSchemaShardRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *ReloadSchemaShardResponse) UnmarshalVT(dAtA []byte) error {
+func (m *ReloadSchemasResponse_KeyspaceResult) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -23604,13 +24830,49 @@ func (m *ReloadSchemaShardResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: ReloadSchemaShardResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: ReloadSchemasResponse_KeyspaceResult: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: ReloadSchemaShardResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: ReloadSchemasResponse_KeyspaceResult: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Keyspace == nil {
+ m.Keyspace = &Keyspace{}
+ }
+ if err := m.Keyspace.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Events", wireType)
}
@@ -23666,7 +24928,7 @@ func (m *ReloadSchemaShardResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *RefreshTabletReplicationSourceRequest) UnmarshalVT(dAtA []byte) error {
+func (m *ReloadSchemasResponse_ShardResult) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -23689,15 +24951,15 @@ func (m *RefreshTabletReplicationSourceRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: RefreshTabletReplicationSourceRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: ReloadSchemasResponse_ShardResult: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: RefreshTabletReplicationSourceRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: ReloadSchemasResponse_ShardResult: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Alias", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Shard", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -23724,18 +24986,18 @@ func (m *RefreshTabletReplicationSourceRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Alias == nil {
- m.Alias = &topodata.TabletAlias{}
+ if m.Shard == nil {
+ m.Shard = &Shard{}
}
- if err := m.Alias.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Shard.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Events", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -23745,23 +25007,25 @@ func (m *RefreshTabletReplicationSourceRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
+ m.Events = append(m.Events, &logutil.Event{})
+ if err := m.Events[len(m.Events)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -23785,7 +25049,7 @@ func (m *RefreshTabletReplicationSourceRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *RefreshTabletReplicationSourceResponse) UnmarshalVT(dAtA []byte) error {
+func (m *ReloadSchemasResponse_TabletResult) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -23808,17 +25072,17 @@ func (m *RefreshTabletReplicationSourceResponse) UnmarshalVT(dAtA []byte) error
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: RefreshTabletReplicationSourceResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: ReloadSchemasResponse_TabletResult: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: RefreshTabletReplicationSourceResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: ReloadSchemasResponse_TabletResult: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Tablet", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -23828,27 +25092,31 @@ func (m *RefreshTabletReplicationSourceResponse) UnmarshalVT(dAtA []byte) error
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Keyspace = string(dAtA[iNdEx:postIndex])
+ if m.Tablet == nil {
+ m.Tablet = &Tablet{}
+ }
+ if err := m.Tablet.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Shard", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Result", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -23876,26 +25144,77 @@ func (m *RefreshTabletReplicationSourceResponse) UnmarshalVT(dAtA []byte) error
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Shard = string(dAtA[iNdEx:postIndex])
+ m.Result = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Primary", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *ReloadSchemasResponse) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: ReloadSchemasResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: ReloadSchemasResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field KeyspaceResults", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
}
if msglen < 0 {
return protohelpers.ErrInvalidLength
@@ -23907,16 +25226,14 @@ func (m *RefreshTabletReplicationSourceResponse) UnmarshalVT(dAtA []byte) error
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Primary == nil {
- m.Primary = &topodata.TabletAlias{}
- }
- if err := m.Primary.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ m.KeyspaceResults = append(m.KeyspaceResults, &ReloadSchemasResponse_KeyspaceResult{})
+ if err := m.KeyspaceResults[len(m.KeyspaceResults)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
- case 4:
+ case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ShardResults", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -23943,10 +25260,42 @@ func (m *RefreshTabletReplicationSourceResponse) UnmarshalVT(dAtA []byte) error
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Cluster == nil {
- m.Cluster = &Cluster{}
+ m.ShardResults = append(m.ShardResults, &ReloadSchemasResponse_ShardResult{})
+ if err := m.ShardResults[len(m.ShardResults)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
}
- if err := m.Cluster.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TabletResults", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.TabletResults = append(m.TabletResults, &ReloadSchemasResponse_TabletResult{})
+ if err := m.TabletResults[len(m.TabletResults)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -23972,7 +25321,7 @@ func (m *RefreshTabletReplicationSourceResponse) UnmarshalVT(dAtA []byte) error
}
return nil
}
-func (m *RemoveKeyspaceCellRequest) UnmarshalVT(dAtA []byte) error {
+func (m *ReloadSchemaShardRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -23995,10 +25344,10 @@ func (m *RemoveKeyspaceCellRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: RemoveKeyspaceCellRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: ReloadSchemaShardRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: RemoveKeyspaceCellRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: ReloadSchemaShardRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -24067,7 +25416,7 @@ func (m *RemoveKeyspaceCellRequest) UnmarshalVT(dAtA []byte) error {
iNdEx = postIndex
case 3:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Cell", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Shard", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -24095,13 +25444,13 @@ func (m *RemoveKeyspaceCellRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Cell = string(dAtA[iNdEx:postIndex])
+ m.Shard = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 4:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Force", wireType)
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field WaitPosition", wireType)
}
- var v int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -24111,15 +25460,27 @@ func (m *RemoveKeyspaceCellRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- v |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- m.Force = bool(v != 0)
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.WaitPosition = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
case 5:
if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Recursive", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field IncludePrimary", wireType)
}
var v int
for shift := uint(0); ; shift += 7 {
@@ -24136,7 +25497,26 @@ func (m *RemoveKeyspaceCellRequest) UnmarshalVT(dAtA []byte) error {
break
}
}
- m.Recursive = bool(v != 0)
+ m.IncludePrimary = bool(v != 0)
+ case 6:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Concurrency", wireType)
+ }
+ m.Concurrency = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Concurrency |= int32(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -24159,7 +25539,7 @@ func (m *RemoveKeyspaceCellRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *RemoveKeyspaceCellResponse) UnmarshalVT(dAtA []byte) error {
+func (m *ReloadSchemaShardResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -24182,17 +25562,17 @@ func (m *RemoveKeyspaceCellResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: RemoveKeyspaceCellResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: ReloadSchemaShardResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: RemoveKeyspaceCellResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: ReloadSchemaShardResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Events", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -24202,23 +25582,25 @@ func (m *RemoveKeyspaceCellResponse) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Status = string(dAtA[iNdEx:postIndex])
+ m.Events = append(m.Events, &logutil.Event{})
+ if err := m.Events[len(m.Events)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -24242,7 +25624,7 @@ func (m *RemoveKeyspaceCellResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *RetrySchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
+func (m *RefreshTabletReplicationSourceRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -24265,17 +25647,17 @@ func (m *RetrySchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: RetrySchemaMigrationRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: RefreshTabletReplicationSourceRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: RetrySchemaMigrationRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: RefreshTabletReplicationSourceRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Alias", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -24285,29 +25667,33 @@ func (m *RetrySchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterId = string(dAtA[iNdEx:postIndex])
+ if m.Alias == nil {
+ m.Alias = &topodata.TabletAlias{}
+ }
+ if err := m.Alias.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Request", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -24317,27 +25703,23 @@ func (m *RetrySchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Request == nil {
- m.Request = &vtctldata.RetrySchemaMigrationRequest{}
- }
- if err := m.Request.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -24361,7 +25743,7 @@ func (m *RetrySchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *RunHealthCheckRequest) UnmarshalVT(dAtA []byte) error {
+func (m *RefreshTabletReplicationSourceResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -24384,17 +25766,17 @@ func (m *RunHealthCheckRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: RunHealthCheckRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: RefreshTabletReplicationSourceResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: RunHealthCheckRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: RefreshTabletReplicationSourceResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Alias", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -24404,31 +25786,27 @@ func (m *RunHealthCheckRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Alias == nil {
- m.Alias = &topodata.TabletAlias{}
- }
- if err := m.Alias.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ m.Keyspace = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Shard", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -24456,64 +25834,13 @@ func (m *RunHealthCheckRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
+ m.Shard = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := protohelpers.Skip(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if (skippy < 0) || (iNdEx+skippy) < 0 {
- return protohelpers.ErrInvalidLength
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *RunHealthCheckResponse) UnmarshalVT(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: RunHealthCheckResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: RunHealthCheckResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
+ case 3:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Primary", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -24523,25 +25850,29 @@ func (m *RunHealthCheckResponse) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Status = string(dAtA[iNdEx:postIndex])
+ if m.Primary == nil {
+ m.Primary = &topodata.TabletAlias{}
+ }
+ if err := m.Primary.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
iNdEx = postIndex
- case 2:
+ case 4:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType)
}
@@ -24599,7 +25930,7 @@ func (m *RunHealthCheckResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *SetReadOnlyRequest) UnmarshalVT(dAtA []byte) error {
+func (m *RemoveKeyspaceCellRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -24622,17 +25953,17 @@ func (m *SetReadOnlyRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: SetReadOnlyRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: RemoveKeyspaceCellRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: SetReadOnlyRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: RemoveKeyspaceCellRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Alias", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -24642,31 +25973,59 @@ func (m *SetReadOnlyRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Alias == nil {
- m.Alias = &topodata.TabletAlias{}
+ m.ClusterId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
}
- if err := m.Alias.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
}
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Keyspace = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 2:
+ case 3:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Cell", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -24694,8 +26053,48 @@ func (m *SetReadOnlyRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
+ m.Cell = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
+ case 4:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Force", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.Force = bool(v != 0)
+ case 5:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Recursive", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.Recursive = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -24718,7 +26117,7 @@ func (m *SetReadOnlyRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *SetReadOnlyResponse) UnmarshalVT(dAtA []byte) error {
+func (m *RemoveKeyspaceCellResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -24741,12 +26140,44 @@ func (m *SetReadOnlyResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: SetReadOnlyResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: RemoveKeyspaceCellResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: SetReadOnlyResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: RemoveKeyspaceCellResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Status = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -24769,7 +26200,7 @@ func (m *SetReadOnlyResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *SetReadWriteRequest) UnmarshalVT(dAtA []byte) error {
+func (m *RetrySchemaMigrationRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -24792,17 +26223,17 @@ func (m *SetReadWriteRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: SetReadWriteRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: RetrySchemaMigrationRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: SetReadWriteRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: RetrySchemaMigrationRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Alias", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -24812,33 +26243,29 @@ func (m *SetReadWriteRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Alias == nil {
- m.Alias = &topodata.TabletAlias{}
- }
- if err := m.Alias.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ m.ClusterId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Request", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -24848,23 +26275,27 @@ func (m *SetReadWriteRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
+ if m.Request == nil {
+ m.Request = &vtctldata.RetrySchemaMigrationRequest{}
+ }
+ if err := m.Request.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -24888,7 +26319,7 @@ func (m *SetReadWriteRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *SetReadWriteResponse) UnmarshalVT(dAtA []byte) error {
+func (m *RunHealthCheckRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -24911,61 +26342,10 @@ func (m *SetReadWriteResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: SetReadWriteResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: SetReadWriteResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- default:
- iNdEx = preIndex
- skippy, err := protohelpers.Skip(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if (skippy < 0) || (iNdEx+skippy) < 0 {
- return protohelpers.ErrInvalidLength
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *StartReplicationRequest) UnmarshalVT(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: StartReplicationRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: RunHealthCheckRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: StartReplicationRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: RunHealthCheckRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -25058,7 +26438,7 @@ func (m *StartReplicationRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *StartReplicationResponse) UnmarshalVT(dAtA []byte) error {
+func (m *RunHealthCheckResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -25081,10 +26461,10 @@ func (m *StartReplicationResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: StartReplicationResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: RunHealthCheckResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: StartReplicationResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: RunHealthCheckResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -25177,7 +26557,7 @@ func (m *StartReplicationResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *StopReplicationRequest) UnmarshalVT(dAtA []byte) error {
+func (m *ReshardCreateRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -25200,17 +26580,17 @@ func (m *StopReplicationRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: StopReplicationRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: ReshardCreateRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: StopReplicationRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: ReshardCreateRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Alias", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -25220,33 +26600,29 @@ func (m *StopReplicationRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Alias == nil {
- m.Alias = &topodata.TabletAlias{}
- }
- if err := m.Alias.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ m.ClusterId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Request", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -25256,23 +26632,27 @@ func (m *StopReplicationRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
+ if m.Request == nil {
+ m.Request = &vtctldata.ReshardCreateRequest{}
+ }
+ if err := m.Request.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -25296,7 +26676,7 @@ func (m *StopReplicationRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *StopReplicationResponse) UnmarshalVT(dAtA []byte) error {
+func (m *SetReadOnlyRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -25319,17 +26699,17 @@ func (m *StopReplicationResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: StopReplicationResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: SetReadOnlyRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: StopReplicationResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: SetReadOnlyRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Alias", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -25339,29 +26719,33 @@ func (m *StopReplicationResponse) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Status = string(dAtA[iNdEx:postIndex])
+ if m.Alias == nil {
+ m.Alias = &topodata.TabletAlias{}
+ }
+ if err := m.Alias.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -25371,28 +26755,75 @@ func (m *StopReplicationResponse) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Cluster == nil {
- m.Cluster = &Cluster{}
- }
- if err := m.Cluster.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
return err
}
- iNdEx = postIndex
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *SetReadOnlyResponse) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: SetReadOnlyResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: SetReadOnlyResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -25415,7 +26846,7 @@ func (m *StopReplicationResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *TabletExternallyPromotedRequest) UnmarshalVT(dAtA []byte) error {
+func (m *SetReadWriteRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -25438,10 +26869,10 @@ func (m *TabletExternallyPromotedRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: TabletExternallyPromotedRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: SetReadWriteRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: TabletExternallyPromotedRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: SetReadWriteRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -25534,7 +26965,7 @@ func (m *TabletExternallyPromotedRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *TabletExternallyPromotedResponse) UnmarshalVT(dAtA []byte) error {
+func (m *SetReadWriteResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -25557,15 +26988,66 @@ func (m *TabletExternallyPromotedResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: TabletExternallyPromotedResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: SetReadWriteResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: TabletExternallyPromotedResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: SetReadWriteResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *StartReplicationRequest) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: StartReplicationRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: StartReplicationRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Alias", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -25592,16 +27074,16 @@ func (m *TabletExternallyPromotedResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Cluster == nil {
- m.Cluster = &Cluster{}
+ if m.Alias == nil {
+ m.Alias = &topodata.TabletAlias{}
}
- if err := m.Cluster.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Alias.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -25629,45 +27111,64 @@ func (m *TabletExternallyPromotedResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Keyspace = string(dAtA[iNdEx:postIndex])
+ m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Shard", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
}
- if postIndex > l {
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *StartReplicationResponse) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
return io.ErrUnexpectedEOF
}
- m.Shard = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 4:
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: StartReplicationResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: StartReplicationResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field NewPrimary", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -25677,31 +27178,27 @@ func (m *TabletExternallyPromotedResponse) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.NewPrimary == nil {
- m.NewPrimary = &topodata.TabletAlias{}
- }
- if err := m.NewPrimary.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ m.Status = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 5:
+ case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field OldPrimary", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -25728,10 +27225,10 @@ func (m *TabletExternallyPromotedResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.OldPrimary == nil {
- m.OldPrimary = &topodata.TabletAlias{}
+ if m.Cluster == nil {
+ m.Cluster = &Cluster{}
}
- if err := m.OldPrimary.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Cluster.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -25757,7 +27254,7 @@ func (m *TabletExternallyPromotedResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *TabletExternallyReparentedRequest) UnmarshalVT(dAtA []byte) error {
+func (m *StopReplicationRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -25780,10 +27277,10 @@ func (m *TabletExternallyReparentedRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: TabletExternallyReparentedRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: StopReplicationRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: TabletExternallyReparentedRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: StopReplicationRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -25876,7 +27373,7 @@ func (m *TabletExternallyReparentedRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *ValidateRequest) UnmarshalVT(dAtA []byte) error {
+func (m *StopReplicationResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -25899,15 +27396,15 @@ func (m *ValidateRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: ValidateRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: StopReplicationResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: ValidateRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: StopReplicationResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -25935,13 +27432,13 @@ func (m *ValidateRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterId = string(dAtA[iNdEx:postIndex])
+ m.Status = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field PingTablets", wireType)
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType)
}
- var v int
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -25951,12 +27448,28 @@ func (m *ValidateRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- v |= int(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- m.PingTablets = bool(v != 0)
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Cluster == nil {
+ m.Cluster = &Cluster{}
+ }
+ if err := m.Cluster.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -25979,7 +27492,7 @@ func (m *ValidateRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *ValidateKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
+func (m *TabletExternallyPromotedRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -26002,17 +27515,17 @@ func (m *ValidateKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: ValidateKeyspaceRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: TabletExternallyPromotedRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: ValidateKeyspaceRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: TabletExternallyPromotedRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Alias", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -26022,27 +27535,31 @@ func (m *ValidateKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterId = string(dAtA[iNdEx:postIndex])
+ if m.Alias == nil {
+ m.Alias = &topodata.TabletAlias{}
+ }
+ if err := m.Alias.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -26070,28 +27587,8 @@ func (m *ValidateKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Keyspace = string(dAtA[iNdEx:postIndex])
+ m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
- case 3:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field PingTablets", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.PingTablets = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -26114,7 +27611,7 @@ func (m *ValidateKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *ValidateSchemaKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
+func (m *TabletExternallyPromotedResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -26137,17 +27634,17 @@ func (m *ValidateSchemaKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: ValidateSchemaKeyspaceRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: TabletExternallyPromotedResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: ValidateSchemaKeyspaceRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: TabletExternallyPromotedResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -26157,23 +27654,27 @@ func (m *ValidateSchemaKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterId = string(dAtA[iNdEx:postIndex])
+ if m.Cluster == nil {
+ m.Cluster = &Cluster{}
+ }
+ if err := m.Cluster.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
iNdEx = postIndex
case 2:
if wireType != 2 {
@@ -26207,16 +27708,120 @@ func (m *ValidateSchemaKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
}
m.Keyspace = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := protohelpers.Skip(dAtA[iNdEx:])
- if err != nil {
- return err
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Shard", wireType)
}
- if (skippy < 0) || (iNdEx+skippy) < 0 {
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- if (iNdEx + skippy) > l {
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Shard = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field NewPrimary", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.NewPrimary == nil {
+ m.NewPrimary = &topodata.TabletAlias{}
+ }
+ if err := m.NewPrimary.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 5:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field OldPrimary", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.OldPrimary == nil {
+ m.OldPrimary = &topodata.TabletAlias{}
+ }
+ if err := m.OldPrimary.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
@@ -26229,7 +27834,7 @@ func (m *ValidateSchemaKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *ValidateShardRequest) UnmarshalVT(dAtA []byte) error {
+func (m *TabletExternallyReparentedRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -26252,17 +27857,17 @@ func (m *ValidateShardRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: ValidateShardRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: TabletExternallyReparentedRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: ValidateShardRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: TabletExternallyReparentedRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Alias", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -26272,27 +27877,31 @@ func (m *ValidateShardRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ClusterId = string(dAtA[iNdEx:postIndex])
+ if m.Alias == nil {
+ m.Alias = &topodata.TabletAlias{}
+ }
+ if err := m.Alias.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterIds", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -26320,11 +27929,62 @@ func (m *ValidateShardRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Keyspace = string(dAtA[iNdEx:postIndex])
+ m.ClusterIds = append(m.ClusterIds, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
- case 3:
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *ValidateRequest) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: ValidateRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: ValidateRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Shard", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -26352,9 +28012,9 @@ func (m *ValidateShardRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Shard = string(dAtA[iNdEx:postIndex])
+ m.ClusterId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 4:
+ case 2:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field PingTablets", wireType)
}
@@ -26396,7 +28056,7 @@ func (m *ValidateShardRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *ValidateVersionKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
+func (m *ValidateKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -26419,10 +28079,10 @@ func (m *ValidateVersionKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: ValidateVersionKeyspaceRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: ValidateKeyspaceRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: ValidateVersionKeyspaceRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: ValidateKeyspaceRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -26489,6 +28149,26 @@ func (m *ValidateVersionKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
}
m.Keyspace = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
+ case 3:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field PingTablets", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.PingTablets = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -26511,7 +28191,7 @@ func (m *ValidateVersionKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *ValidateVersionShardRequest) UnmarshalVT(dAtA []byte) error {
+func (m *ValidateSchemaKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -26534,10 +28214,10 @@ func (m *ValidateVersionShardRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: ValidateVersionShardRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: ValidateSchemaKeyspaceRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: ValidateVersionShardRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: ValidateSchemaKeyspaceRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -26604,37 +28284,1168 @@ func (m *ValidateVersionShardRequest) UnmarshalVT(dAtA []byte) error {
}
m.Keyspace = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Shard", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return protohelpers.ErrInvalidLength
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
}
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
return protohelpers.ErrInvalidLength
}
- if postIndex > l {
+ if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
- m.Shard = string(dAtA[iNdEx:postIndex])
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *ValidateShardRequest) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: ValidateShardRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: ValidateShardRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ClusterId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Keyspace = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Shard", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Shard = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 4:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field PingTablets", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.PingTablets = bool(v != 0)
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *ValidateVersionKeyspaceRequest) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: ValidateVersionKeyspaceRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: ValidateVersionKeyspaceRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ClusterId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Keyspace = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *ValidateVersionShardRequest) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: ValidateVersionShardRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: ValidateVersionShardRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ClusterId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Keyspace = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Shard", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Shard = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *VDiffCreateRequest) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: VDiffCreateRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: VDiffCreateRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ClusterId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Request", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Request == nil {
+ m.Request = &vtctldata.VDiffCreateRequest{}
+ }
+ if err := m.Request.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *VDiffShowRequest) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: VDiffShowRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: VDiffShowRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ClusterId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Request", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Request == nil {
+ m.Request = &vtctldata.VDiffShowRequest{}
+ }
+ if err := m.Request.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *VDiffProgress) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: VDiffProgress: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: VDiffProgress: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 1 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Percentage", wireType)
+ }
+ var v uint64
+ if (iNdEx + 8) > l {
+ return io.ErrUnexpectedEOF
+ }
+ v = uint64(binary.LittleEndian.Uint64(dAtA[iNdEx:]))
+ iNdEx += 8
+ m.Percentage = float64(math.Float64frombits(v))
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Eta", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Eta = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *VDiffShardReport) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: VDiffShardReport: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: VDiffShardReport: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field State", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.State = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field RowsCompared", wireType)
+ }
+ m.RowsCompared = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.RowsCompared |= int64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 3:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field HasMismatch", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.HasMismatch = bool(v != 0)
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field StartedAt", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.StartedAt = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 5:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field CompletedAt", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.CompletedAt = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 6:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Progress", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Progress == nil {
+ m.Progress = &VDiffProgress{}
+ }
+ if err := m.Progress.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *VDiffShowResponse) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: VDiffShowResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: VDiffShowResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ShardReport", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.ShardReport == nil {
+ m.ShardReport = make(map[string]*VDiffShardReport)
+ }
+ var mapkey string
+ var mapvalue *VDiffShardReport
+ for iNdEx < postIndex {
+ entryPreIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ if fieldNum == 1 {
+ var stringLenmapkey uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLenmapkey |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLenmapkey := int(stringLenmapkey)
+ if intStringLenmapkey < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postStringIndexmapkey := iNdEx + intStringLenmapkey
+ if postStringIndexmapkey < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postStringIndexmapkey > l {
+ return io.ErrUnexpectedEOF
+ }
+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey])
+ iNdEx = postStringIndexmapkey
+ } else if fieldNum == 2 {
+ var mapmsglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ mapmsglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if mapmsglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postmsgIndex := iNdEx + mapmsglen
+ if postmsgIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postmsgIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ mapvalue = &VDiffShardReport{}
+ if err := mapvalue.UnmarshalVT(dAtA[iNdEx:postmsgIndex]); err != nil {
+ return err
+ }
+ iNdEx = postmsgIndex
+ } else {
+ iNdEx = entryPreIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > postIndex {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+ m.ShardReport[mapkey] = mapvalue
iNdEx = postIndex
default:
iNdEx = preIndex
diff --git a/go/vt/proto/vtctldata/vtctldata.pb.go b/go/vt/proto/vtctldata/vtctldata.pb.go
index 45ba61f166f..f675a190faa 100644
--- a/go/vt/proto/vtctldata/vtctldata.pb.go
+++ b/go/vt/proto/vtctldata/vtctldata.pb.go
@@ -18,7 +18,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.34.2
+// protoc-gen-go v1.35.1
// protoc v3.21.3
// source: vtctldata.proto
@@ -150,6 +150,55 @@ func (QueryOrdering) EnumDescriptor() ([]byte, []int) {
return file_vtctldata_proto_rawDescGZIP(), []int{1}
}
+type ShardedAutoIncrementHandling int32
+
+const (
+ ShardedAutoIncrementHandling_LEAVE ShardedAutoIncrementHandling = 0
+ ShardedAutoIncrementHandling_REMOVE ShardedAutoIncrementHandling = 1
+ ShardedAutoIncrementHandling_REPLACE ShardedAutoIncrementHandling = 2
+)
+
+// Enum value maps for ShardedAutoIncrementHandling.
+var (
+ ShardedAutoIncrementHandling_name = map[int32]string{
+ 0: "LEAVE",
+ 1: "REMOVE",
+ 2: "REPLACE",
+ }
+ ShardedAutoIncrementHandling_value = map[string]int32{
+ "LEAVE": 0,
+ "REMOVE": 1,
+ "REPLACE": 2,
+ }
+)
+
+func (x ShardedAutoIncrementHandling) Enum() *ShardedAutoIncrementHandling {
+ p := new(ShardedAutoIncrementHandling)
+ *p = x
+ return p
+}
+
+func (x ShardedAutoIncrementHandling) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (ShardedAutoIncrementHandling) Descriptor() protoreflect.EnumDescriptor {
+ return file_vtctldata_proto_enumTypes[2].Descriptor()
+}
+
+func (ShardedAutoIncrementHandling) Type() protoreflect.EnumType {
+ return &file_vtctldata_proto_enumTypes[2]
+}
+
+func (x ShardedAutoIncrementHandling) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use ShardedAutoIncrementHandling.Descriptor instead.
+func (ShardedAutoIncrementHandling) EnumDescriptor() ([]byte, []int) {
+ return file_vtctldata_proto_rawDescGZIP(), []int{2}
+}
+
type SchemaMigration_Strategy int32
const (
@@ -200,11 +249,11 @@ func (x SchemaMigration_Strategy) String() string {
}
func (SchemaMigration_Strategy) Descriptor() protoreflect.EnumDescriptor {
- return file_vtctldata_proto_enumTypes[2].Descriptor()
+ return file_vtctldata_proto_enumTypes[3].Descriptor()
}
func (SchemaMigration_Strategy) Type() protoreflect.EnumType {
- return &file_vtctldata_proto_enumTypes[2]
+ return &file_vtctldata_proto_enumTypes[3]
}
func (x SchemaMigration_Strategy) Number() protoreflect.EnumNumber {
@@ -264,11 +313,11 @@ func (x SchemaMigration_Status) String() string {
}
func (SchemaMigration_Status) Descriptor() protoreflect.EnumDescriptor {
- return file_vtctldata_proto_enumTypes[3].Descriptor()
+ return file_vtctldata_proto_enumTypes[4].Descriptor()
}
func (SchemaMigration_Status) Type() protoreflect.EnumType {
- return &file_vtctldata_proto_enumTypes[3]
+ return &file_vtctldata_proto_enumTypes[4]
}
func (x SchemaMigration_Status) Number() protoreflect.EnumNumber {
@@ -293,11 +342,9 @@ type ExecuteVtctlCommandRequest struct {
func (x *ExecuteVtctlCommandRequest) Reset() {
*x = ExecuteVtctlCommandRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteVtctlCommandRequest) String() string {
@@ -308,7 +355,7 @@ func (*ExecuteVtctlCommandRequest) ProtoMessage() {}
func (x *ExecuteVtctlCommandRequest) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[0]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -348,11 +395,9 @@ type ExecuteVtctlCommandResponse struct {
func (x *ExecuteVtctlCommandResponse) Reset() {
*x = ExecuteVtctlCommandResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[1]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteVtctlCommandResponse) String() string {
@@ -363,7 +408,7 @@ func (*ExecuteVtctlCommandResponse) ProtoMessage() {}
func (x *ExecuteVtctlCommandResponse) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[1]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -402,11 +447,9 @@ type TableMaterializeSettings struct {
func (x *TableMaterializeSettings) Reset() {
*x = TableMaterializeSettings{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[2]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *TableMaterializeSettings) String() string {
@@ -417,7 +460,7 @@ func (*TableMaterializeSettings) ProtoMessage() {}
func (x *TableMaterializeSettings) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[2]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -493,11 +536,9 @@ type MaterializeSettings struct {
func (x *MaterializeSettings) Reset() {
*x = MaterializeSettings{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[3]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MaterializeSettings) String() string {
@@ -508,7 +549,7 @@ func (*MaterializeSettings) ProtoMessage() {}
func (x *MaterializeSettings) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[3]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -660,11 +701,9 @@ type Keyspace struct {
func (x *Keyspace) Reset() {
*x = Keyspace{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[4]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Keyspace) String() string {
@@ -675,7 +714,7 @@ func (*Keyspace) ProtoMessage() {}
func (x *Keyspace) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[4]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -768,11 +807,9 @@ type SchemaMigration struct {
func (x *SchemaMigration) Reset() {
*x = SchemaMigration{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[5]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SchemaMigration) String() string {
@@ -783,7 +820,7 @@ func (*SchemaMigration) ProtoMessage() {}
func (x *SchemaMigration) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[5]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1188,11 +1225,9 @@ type Shard struct {
func (x *Shard) Reset() {
*x = Shard{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[6]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Shard) String() string {
@@ -1203,7 +1238,7 @@ func (*Shard) ProtoMessage() {}
func (x *Shard) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[6]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1246,21 +1281,23 @@ type WorkflowOptions struct {
TenantId string `protobuf:"bytes,1,opt,name=tenant_id,json=tenantId,proto3" json:"tenant_id,omitempty"`
// Remove auto_increment clauses on tables when moving them to a sharded
- // keyspace.
- StripShardedAutoIncrement bool `protobuf:"varint,2,opt,name=strip_sharded_auto_increment,json=stripShardedAutoIncrement,proto3" json:"strip_sharded_auto_increment,omitempty"`
+ // keyspace and optionally replace them with vschema AutoIncrement
+ // definitions.
+ ShardedAutoIncrementHandling ShardedAutoIncrementHandling `protobuf:"varint,2,opt,name=sharded_auto_increment_handling,json=shardedAutoIncrementHandling,proto3,enum=vtctldata.ShardedAutoIncrementHandling" json:"sharded_auto_increment_handling,omitempty"`
// Shards on which vreplication streams in the target keyspace are created for this workflow and to which the data
// from the source will be vreplicated.
Shards []string `protobuf:"bytes,3,rep,name=shards,proto3" json:"shards,omitempty"`
Config map[string]string `protobuf:"bytes,4,rep,name=config,proto3" json:"config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ // Where to create any related schema and vschema objects such as
+ // sequence tables.
+ GlobalKeyspace string `protobuf:"bytes,5,opt,name=global_keyspace,json=globalKeyspace,proto3" json:"global_keyspace,omitempty"`
}
func (x *WorkflowOptions) Reset() {
*x = WorkflowOptions{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[7]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *WorkflowOptions) String() string {
@@ -1271,7 +1308,7 @@ func (*WorkflowOptions) ProtoMessage() {}
func (x *WorkflowOptions) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[7]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1293,11 +1330,11 @@ func (x *WorkflowOptions) GetTenantId() string {
return ""
}
-func (x *WorkflowOptions) GetStripShardedAutoIncrement() bool {
+func (x *WorkflowOptions) GetShardedAutoIncrementHandling() ShardedAutoIncrementHandling {
if x != nil {
- return x.StripShardedAutoIncrement
+ return x.ShardedAutoIncrementHandling
}
- return false
+ return ShardedAutoIncrementHandling_LEAVE
}
func (x *WorkflowOptions) GetShards() []string {
@@ -1314,6 +1351,13 @@ func (x *WorkflowOptions) GetConfig() map[string]string {
return nil
}
+func (x *WorkflowOptions) GetGlobalKeyspace() string {
+ if x != nil {
+ return x.GlobalKeyspace
+ }
+ return ""
+}
+
// TODO: comment the hell out of this.
type Workflow struct {
state protoimpl.MessageState
@@ -1342,11 +1386,9 @@ type Workflow struct {
func (x *Workflow) Reset() {
*x = Workflow{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[8]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Workflow) String() string {
@@ -1357,7 +1399,7 @@ func (*Workflow) ProtoMessage() {}
func (x *Workflow) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[8]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1453,11 +1495,9 @@ type AddCellInfoRequest struct {
func (x *AddCellInfoRequest) Reset() {
*x = AddCellInfoRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[9]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *AddCellInfoRequest) String() string {
@@ -1468,7 +1508,7 @@ func (*AddCellInfoRequest) ProtoMessage() {}
func (x *AddCellInfoRequest) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[9]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1505,11 +1545,9 @@ type AddCellInfoResponse struct {
func (x *AddCellInfoResponse) Reset() {
*x = AddCellInfoResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[10]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[10]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *AddCellInfoResponse) String() string {
@@ -1520,7 +1558,7 @@ func (*AddCellInfoResponse) ProtoMessage() {}
func (x *AddCellInfoResponse) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[10]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1546,11 +1584,9 @@ type AddCellsAliasRequest struct {
func (x *AddCellsAliasRequest) Reset() {
*x = AddCellsAliasRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[11]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[11]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *AddCellsAliasRequest) String() string {
@@ -1561,7 +1597,7 @@ func (*AddCellsAliasRequest) ProtoMessage() {}
func (x *AddCellsAliasRequest) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[11]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1598,11 +1634,9 @@ type AddCellsAliasResponse struct {
func (x *AddCellsAliasResponse) Reset() {
*x = AddCellsAliasResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[12]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[12]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *AddCellsAliasResponse) String() string {
@@ -1613,7 +1647,7 @@ func (*AddCellsAliasResponse) ProtoMessage() {}
func (x *AddCellsAliasResponse) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[12]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1646,11 +1680,9 @@ type ApplyKeyspaceRoutingRulesRequest struct {
func (x *ApplyKeyspaceRoutingRulesRequest) Reset() {
*x = ApplyKeyspaceRoutingRulesRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[13]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[13]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ApplyKeyspaceRoutingRulesRequest) String() string {
@@ -1661,7 +1693,7 @@ func (*ApplyKeyspaceRoutingRulesRequest) ProtoMessage() {}
func (x *ApplyKeyspaceRoutingRulesRequest) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[13]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1708,11 +1740,9 @@ type ApplyKeyspaceRoutingRulesResponse struct {
func (x *ApplyKeyspaceRoutingRulesResponse) Reset() {
*x = ApplyKeyspaceRoutingRulesResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[14]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[14]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ApplyKeyspaceRoutingRulesResponse) String() string {
@@ -1723,7 +1753,7 @@ func (*ApplyKeyspaceRoutingRulesResponse) ProtoMessage() {}
func (x *ApplyKeyspaceRoutingRulesResponse) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[14]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1763,11 +1793,9 @@ type ApplyRoutingRulesRequest struct {
func (x *ApplyRoutingRulesRequest) Reset() {
*x = ApplyRoutingRulesRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[15]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[15]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ApplyRoutingRulesRequest) String() string {
@@ -1778,7 +1806,7 @@ func (*ApplyRoutingRulesRequest) ProtoMessage() {}
func (x *ApplyRoutingRulesRequest) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[15]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1822,11 +1850,9 @@ type ApplyRoutingRulesResponse struct {
func (x *ApplyRoutingRulesResponse) Reset() {
*x = ApplyRoutingRulesResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[16]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[16]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ApplyRoutingRulesResponse) String() string {
@@ -1837,7 +1863,7 @@ func (*ApplyRoutingRulesResponse) ProtoMessage() {}
func (x *ApplyRoutingRulesResponse) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[16]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1870,11 +1896,9 @@ type ApplyShardRoutingRulesRequest struct {
func (x *ApplyShardRoutingRulesRequest) Reset() {
*x = ApplyShardRoutingRulesRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[17]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[17]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ApplyShardRoutingRulesRequest) String() string {
@@ -1885,7 +1909,7 @@ func (*ApplyShardRoutingRulesRequest) ProtoMessage() {}
func (x *ApplyShardRoutingRulesRequest) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[17]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1929,11 +1953,9 @@ type ApplyShardRoutingRulesResponse struct {
func (x *ApplyShardRoutingRulesResponse) Reset() {
*x = ApplyShardRoutingRulesResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[18]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[18]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ApplyShardRoutingRulesResponse) String() string {
@@ -1944,7 +1966,7 @@ func (*ApplyShardRoutingRulesResponse) ProtoMessage() {}
func (x *ApplyShardRoutingRulesResponse) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[18]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1987,11 +2009,9 @@ type ApplySchemaRequest struct {
func (x *ApplySchemaRequest) Reset() {
*x = ApplySchemaRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[19]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[19]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ApplySchemaRequest) String() string {
@@ -2002,7 +2022,7 @@ func (*ApplySchemaRequest) ProtoMessage() {}
func (x *ApplySchemaRequest) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[19]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2084,11 +2104,9 @@ type ApplySchemaResponse struct {
func (x *ApplySchemaResponse) Reset() {
*x = ApplySchemaResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[20]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[20]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ApplySchemaResponse) String() string {
@@ -2099,7 +2117,7 @@ func (*ApplySchemaResponse) ProtoMessage() {}
func (x *ApplySchemaResponse) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[20]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2145,11 +2163,9 @@ type ApplyVSchemaRequest struct {
func (x *ApplyVSchemaRequest) Reset() {
*x = ApplyVSchemaRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[21]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[21]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ApplyVSchemaRequest) String() string {
@@ -2160,7 +2176,7 @@ func (*ApplyVSchemaRequest) ProtoMessage() {}
func (x *ApplyVSchemaRequest) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[21]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2243,11 +2259,9 @@ type ApplyVSchemaResponse struct {
func (x *ApplyVSchemaResponse) Reset() {
*x = ApplyVSchemaResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[22]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[22]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ApplyVSchemaResponse) String() string {
@@ -2258,7 +2272,7 @@ func (*ApplyVSchemaResponse) ProtoMessage() {}
func (x *ApplyVSchemaResponse) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[22]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2313,11 +2327,9 @@ type BackupRequest struct {
func (x *BackupRequest) Reset() {
*x = BackupRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[23]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[23]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *BackupRequest) String() string {
@@ -2328,7 +2340,7 @@ func (*BackupRequest) ProtoMessage() {}
func (x *BackupRequest) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[23]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2399,11 +2411,9 @@ type BackupResponse struct {
func (x *BackupResponse) Reset() {
*x = BackupResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[24]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[24]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *BackupResponse) String() string {
@@ -2414,7 +2424,7 @@ func (*BackupResponse) ProtoMessage() {}
func (x *BackupResponse) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[24]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2480,11 +2490,9 @@ type BackupShardRequest struct {
func (x *BackupShardRequest) Reset() {
*x = BackupShardRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[25]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[25]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *BackupShardRequest) String() string {
@@ -2495,7 +2503,7 @@ func (*BackupShardRequest) ProtoMessage() {}
func (x *BackupShardRequest) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[25]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2563,11 +2571,9 @@ type CancelSchemaMigrationRequest struct {
func (x *CancelSchemaMigrationRequest) Reset() {
*x = CancelSchemaMigrationRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[26]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[26]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CancelSchemaMigrationRequest) String() string {
@@ -2578,7 +2584,7 @@ func (*CancelSchemaMigrationRequest) ProtoMessage() {}
func (x *CancelSchemaMigrationRequest) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[26]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2617,11 +2623,9 @@ type CancelSchemaMigrationResponse struct {
func (x *CancelSchemaMigrationResponse) Reset() {
*x = CancelSchemaMigrationResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[27]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[27]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CancelSchemaMigrationResponse) String() string {
@@ -2632,7 +2636,7 @@ func (*CancelSchemaMigrationResponse) ProtoMessage() {}
func (x *CancelSchemaMigrationResponse) ProtoReflect() protoreflect.Message {
mi := &file_vtctldata_proto_msgTypes[27]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2654,6 +2658,120 @@ func (x *CancelSchemaMigrationResponse) GetRowsAffectedByShard() map[string]uint
return nil
}
+type ChangeTabletTagsRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ TabletAlias *topodata.TabletAlias `protobuf:"bytes,1,opt,name=tablet_alias,json=tabletAlias,proto3" json:"tablet_alias,omitempty"`
+ Tags map[string]string `protobuf:"bytes,2,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ Replace bool `protobuf:"varint,3,opt,name=replace,proto3" json:"replace,omitempty"`
+}
+
+func (x *ChangeTabletTagsRequest) Reset() {
+ *x = ChangeTabletTagsRequest{}
+ mi := &file_vtctldata_proto_msgTypes[28]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ChangeTabletTagsRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ChangeTabletTagsRequest) ProtoMessage() {}
+
+func (x *ChangeTabletTagsRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_vtctldata_proto_msgTypes[28]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ChangeTabletTagsRequest.ProtoReflect.Descriptor instead.
+func (*ChangeTabletTagsRequest) Descriptor() ([]byte, []int) {
+ return file_vtctldata_proto_rawDescGZIP(), []int{28}
+}
+
+func (x *ChangeTabletTagsRequest) GetTabletAlias() *topodata.TabletAlias {
+ if x != nil {
+ return x.TabletAlias
+ }
+ return nil
+}
+
+func (x *ChangeTabletTagsRequest) GetTags() map[string]string {
+ if x != nil {
+ return x.Tags
+ }
+ return nil
+}
+
+func (x *ChangeTabletTagsRequest) GetReplace() bool {
+ if x != nil {
+ return x.Replace
+ }
+ return false
+}
+
+type ChangeTabletTagsResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ BeforeTags map[string]string `protobuf:"bytes,1,rep,name=before_tags,json=beforeTags,proto3" json:"before_tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ AfterTags map[string]string `protobuf:"bytes,2,rep,name=after_tags,json=afterTags,proto3" json:"after_tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+}
+
+func (x *ChangeTabletTagsResponse) Reset() {
+ *x = ChangeTabletTagsResponse{}
+ mi := &file_vtctldata_proto_msgTypes[29]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ChangeTabletTagsResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ChangeTabletTagsResponse) ProtoMessage() {}
+
+func (x *ChangeTabletTagsResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_vtctldata_proto_msgTypes[29]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ChangeTabletTagsResponse.ProtoReflect.Descriptor instead.
+func (*ChangeTabletTagsResponse) Descriptor() ([]byte, []int) {
+ return file_vtctldata_proto_rawDescGZIP(), []int{29}
+}
+
+func (x *ChangeTabletTagsResponse) GetBeforeTags() map[string]string {
+ if x != nil {
+ return x.BeforeTags
+ }
+ return nil
+}
+
+func (x *ChangeTabletTagsResponse) GetAfterTags() map[string]string {
+ if x != nil {
+ return x.AfterTags
+ }
+ return nil
+}
+
type ChangeTabletTypeRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -2666,11 +2784,9 @@ type ChangeTabletTypeRequest struct {
func (x *ChangeTabletTypeRequest) Reset() {
*x = ChangeTabletTypeRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[28]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[30]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ChangeTabletTypeRequest) String() string {
@@ -2680,8 +2796,8 @@ func (x *ChangeTabletTypeRequest) String() string {
func (*ChangeTabletTypeRequest) ProtoMessage() {}
func (x *ChangeTabletTypeRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[28]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[30]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2693,7 +2809,7 @@ func (x *ChangeTabletTypeRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ChangeTabletTypeRequest.ProtoReflect.Descriptor instead.
func (*ChangeTabletTypeRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{28}
+ return file_vtctldata_proto_rawDescGZIP(), []int{30}
}
func (x *ChangeTabletTypeRequest) GetTabletAlias() *topodata.TabletAlias {
@@ -2729,11 +2845,9 @@ type ChangeTabletTypeResponse struct {
func (x *ChangeTabletTypeResponse) Reset() {
*x = ChangeTabletTypeResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[29]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[31]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ChangeTabletTypeResponse) String() string {
@@ -2743,8 +2857,8 @@ func (x *ChangeTabletTypeResponse) String() string {
func (*ChangeTabletTypeResponse) ProtoMessage() {}
func (x *ChangeTabletTypeResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[29]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[31]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2756,7 +2870,7 @@ func (x *ChangeTabletTypeResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ChangeTabletTypeResponse.ProtoReflect.Descriptor instead.
func (*ChangeTabletTypeResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{29}
+ return file_vtctldata_proto_rawDescGZIP(), []int{31}
}
func (x *ChangeTabletTypeResponse) GetBeforeTablet() *topodata.Tablet {
@@ -2796,11 +2910,9 @@ type CheckThrottlerRequest struct {
func (x *CheckThrottlerRequest) Reset() {
*x = CheckThrottlerRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[30]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[32]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CheckThrottlerRequest) String() string {
@@ -2810,9 +2922,9 @@ func (x *CheckThrottlerRequest) String() string {
func (*CheckThrottlerRequest) ProtoMessage() {}
func (x *CheckThrottlerRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[30]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ mi := &file_vtctldata_proto_msgTypes[32]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
@@ -2823,7 +2935,7 @@ func (x *CheckThrottlerRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use CheckThrottlerRequest.ProtoReflect.Descriptor instead.
func (*CheckThrottlerRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{30}
+ return file_vtctldata_proto_rawDescGZIP(), []int{32}
}
func (x *CheckThrottlerRequest) GetTabletAlias() *topodata.TabletAlias {
@@ -2872,11 +2984,9 @@ type CheckThrottlerResponse struct {
func (x *CheckThrottlerResponse) Reset() {
*x = CheckThrottlerResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[31]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[33]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CheckThrottlerResponse) String() string {
@@ -2886,8 +2996,8 @@ func (x *CheckThrottlerResponse) String() string {
func (*CheckThrottlerResponse) ProtoMessage() {}
func (x *CheckThrottlerResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[31]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[33]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2899,7 +3009,7 @@ func (x *CheckThrottlerResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use CheckThrottlerResponse.ProtoReflect.Descriptor instead.
func (*CheckThrottlerResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{31}
+ return file_vtctldata_proto_rawDescGZIP(), []int{33}
}
func (x *CheckThrottlerResponse) GetTabletAlias() *topodata.TabletAlias {
@@ -2927,11 +3037,9 @@ type CleanupSchemaMigrationRequest struct {
func (x *CleanupSchemaMigrationRequest) Reset() {
*x = CleanupSchemaMigrationRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[32]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[34]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CleanupSchemaMigrationRequest) String() string {
@@ -2941,8 +3049,8 @@ func (x *CleanupSchemaMigrationRequest) String() string {
func (*CleanupSchemaMigrationRequest) ProtoMessage() {}
func (x *CleanupSchemaMigrationRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[32]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[34]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2954,7 +3062,7 @@ func (x *CleanupSchemaMigrationRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use CleanupSchemaMigrationRequest.ProtoReflect.Descriptor instead.
func (*CleanupSchemaMigrationRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{32}
+ return file_vtctldata_proto_rawDescGZIP(), []int{34}
}
func (x *CleanupSchemaMigrationRequest) GetKeyspace() string {
@@ -2981,11 +3089,9 @@ type CleanupSchemaMigrationResponse struct {
func (x *CleanupSchemaMigrationResponse) Reset() {
*x = CleanupSchemaMigrationResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[33]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[35]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CleanupSchemaMigrationResponse) String() string {
@@ -2995,8 +3101,8 @@ func (x *CleanupSchemaMigrationResponse) String() string {
func (*CleanupSchemaMigrationResponse) ProtoMessage() {}
func (x *CleanupSchemaMigrationResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[33]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[35]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3008,7 +3114,7 @@ func (x *CleanupSchemaMigrationResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use CleanupSchemaMigrationResponse.ProtoReflect.Descriptor instead.
func (*CleanupSchemaMigrationResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{33}
+ return file_vtctldata_proto_rawDescGZIP(), []int{35}
}
func (x *CleanupSchemaMigrationResponse) GetRowsAffectedByShard() map[string]uint64 {
@@ -3029,11 +3135,9 @@ type CompleteSchemaMigrationRequest struct {
func (x *CompleteSchemaMigrationRequest) Reset() {
*x = CompleteSchemaMigrationRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[34]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[36]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CompleteSchemaMigrationRequest) String() string {
@@ -3043,8 +3147,8 @@ func (x *CompleteSchemaMigrationRequest) String() string {
func (*CompleteSchemaMigrationRequest) ProtoMessage() {}
func (x *CompleteSchemaMigrationRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[34]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[36]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3056,7 +3160,7 @@ func (x *CompleteSchemaMigrationRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use CompleteSchemaMigrationRequest.ProtoReflect.Descriptor instead.
func (*CompleteSchemaMigrationRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{34}
+ return file_vtctldata_proto_rawDescGZIP(), []int{36}
}
func (x *CompleteSchemaMigrationRequest) GetKeyspace() string {
@@ -3083,11 +3187,9 @@ type CompleteSchemaMigrationResponse struct {
func (x *CompleteSchemaMigrationResponse) Reset() {
*x = CompleteSchemaMigrationResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[35]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[37]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CompleteSchemaMigrationResponse) String() string {
@@ -3097,8 +3199,8 @@ func (x *CompleteSchemaMigrationResponse) String() string {
func (*CompleteSchemaMigrationResponse) ProtoMessage() {}
func (x *CompleteSchemaMigrationResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[35]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[37]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3110,7 +3212,7 @@ func (x *CompleteSchemaMigrationResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use CompleteSchemaMigrationResponse.ProtoReflect.Descriptor instead.
func (*CompleteSchemaMigrationResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{35}
+ return file_vtctldata_proto_rawDescGZIP(), []int{37}
}
func (x *CompleteSchemaMigrationResponse) GetRowsAffectedByShard() map[string]uint64 {
@@ -3149,11 +3251,9 @@ type CreateKeyspaceRequest struct {
func (x *CreateKeyspaceRequest) Reset() {
*x = CreateKeyspaceRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[36]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[38]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CreateKeyspaceRequest) String() string {
@@ -3163,8 +3263,8 @@ func (x *CreateKeyspaceRequest) String() string {
func (*CreateKeyspaceRequest) ProtoMessage() {}
func (x *CreateKeyspaceRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[36]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[38]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3176,7 +3276,7 @@ func (x *CreateKeyspaceRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use CreateKeyspaceRequest.ProtoReflect.Descriptor instead.
func (*CreateKeyspaceRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{36}
+ return file_vtctldata_proto_rawDescGZIP(), []int{38}
}
func (x *CreateKeyspaceRequest) GetName() string {
@@ -3246,11 +3346,9 @@ type CreateKeyspaceResponse struct {
func (x *CreateKeyspaceResponse) Reset() {
*x = CreateKeyspaceResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[37]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[39]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CreateKeyspaceResponse) String() string {
@@ -3260,8 +3358,8 @@ func (x *CreateKeyspaceResponse) String() string {
func (*CreateKeyspaceResponse) ProtoMessage() {}
func (x *CreateKeyspaceResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[37]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[39]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3273,7 +3371,7 @@ func (x *CreateKeyspaceResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use CreateKeyspaceResponse.ProtoReflect.Descriptor instead.
func (*CreateKeyspaceResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{37}
+ return file_vtctldata_proto_rawDescGZIP(), []int{39}
}
func (x *CreateKeyspaceResponse) GetKeyspace() *Keyspace {
@@ -3302,11 +3400,9 @@ type CreateShardRequest struct {
func (x *CreateShardRequest) Reset() {
*x = CreateShardRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[38]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[40]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CreateShardRequest) String() string {
@@ -3316,8 +3412,8 @@ func (x *CreateShardRequest) String() string {
func (*CreateShardRequest) ProtoMessage() {}
func (x *CreateShardRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[38]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[40]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3329,7 +3425,7 @@ func (x *CreateShardRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use CreateShardRequest.ProtoReflect.Descriptor instead.
func (*CreateShardRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{38}
+ return file_vtctldata_proto_rawDescGZIP(), []int{40}
}
func (x *CreateShardRequest) GetKeyspace() string {
@@ -3377,11 +3473,9 @@ type CreateShardResponse struct {
func (x *CreateShardResponse) Reset() {
*x = CreateShardResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[39]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[41]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CreateShardResponse) String() string {
@@ -3391,8 +3485,8 @@ func (x *CreateShardResponse) String() string {
func (*CreateShardResponse) ProtoMessage() {}
func (x *CreateShardResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[39]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[41]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3404,7 +3498,7 @@ func (x *CreateShardResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use CreateShardResponse.ProtoReflect.Descriptor instead.
func (*CreateShardResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{39}
+ return file_vtctldata_proto_rawDescGZIP(), []int{41}
}
func (x *CreateShardResponse) GetKeyspace() *Keyspace {
@@ -3439,11 +3533,9 @@ type DeleteCellInfoRequest struct {
func (x *DeleteCellInfoRequest) Reset() {
*x = DeleteCellInfoRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[40]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[42]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *DeleteCellInfoRequest) String() string {
@@ -3453,8 +3545,8 @@ func (x *DeleteCellInfoRequest) String() string {
func (*DeleteCellInfoRequest) ProtoMessage() {}
func (x *DeleteCellInfoRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[40]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[42]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3466,7 +3558,7 @@ func (x *DeleteCellInfoRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteCellInfoRequest.ProtoReflect.Descriptor instead.
func (*DeleteCellInfoRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{40}
+ return file_vtctldata_proto_rawDescGZIP(), []int{42}
}
func (x *DeleteCellInfoRequest) GetName() string {
@@ -3491,11 +3583,9 @@ type DeleteCellInfoResponse struct {
func (x *DeleteCellInfoResponse) Reset() {
*x = DeleteCellInfoResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[41]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[43]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *DeleteCellInfoResponse) String() string {
@@ -3505,8 +3595,8 @@ func (x *DeleteCellInfoResponse) String() string {
func (*DeleteCellInfoResponse) ProtoMessage() {}
func (x *DeleteCellInfoResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[41]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[43]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3518,7 +3608,7 @@ func (x *DeleteCellInfoResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteCellInfoResponse.ProtoReflect.Descriptor instead.
func (*DeleteCellInfoResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{41}
+ return file_vtctldata_proto_rawDescGZIP(), []int{43}
}
type DeleteCellsAliasRequest struct {
@@ -3531,11 +3621,9 @@ type DeleteCellsAliasRequest struct {
func (x *DeleteCellsAliasRequest) Reset() {
*x = DeleteCellsAliasRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[42]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[44]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *DeleteCellsAliasRequest) String() string {
@@ -3545,8 +3633,8 @@ func (x *DeleteCellsAliasRequest) String() string {
func (*DeleteCellsAliasRequest) ProtoMessage() {}
func (x *DeleteCellsAliasRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[42]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[44]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3558,7 +3646,7 @@ func (x *DeleteCellsAliasRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteCellsAliasRequest.ProtoReflect.Descriptor instead.
func (*DeleteCellsAliasRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{42}
+ return file_vtctldata_proto_rawDescGZIP(), []int{44}
}
func (x *DeleteCellsAliasRequest) GetName() string {
@@ -3576,11 +3664,9 @@ type DeleteCellsAliasResponse struct {
func (x *DeleteCellsAliasResponse) Reset() {
*x = DeleteCellsAliasResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[43]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[45]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *DeleteCellsAliasResponse) String() string {
@@ -3590,8 +3676,8 @@ func (x *DeleteCellsAliasResponse) String() string {
func (*DeleteCellsAliasResponse) ProtoMessage() {}
func (x *DeleteCellsAliasResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[43]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[45]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3603,7 +3689,7 @@ func (x *DeleteCellsAliasResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteCellsAliasResponse.ProtoReflect.Descriptor instead.
func (*DeleteCellsAliasResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{43}
+ return file_vtctldata_proto_rawDescGZIP(), []int{45}
}
type DeleteKeyspaceRequest struct {
@@ -3624,11 +3710,9 @@ type DeleteKeyspaceRequest struct {
func (x *DeleteKeyspaceRequest) Reset() {
*x = DeleteKeyspaceRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[44]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[46]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *DeleteKeyspaceRequest) String() string {
@@ -3638,8 +3722,8 @@ func (x *DeleteKeyspaceRequest) String() string {
func (*DeleteKeyspaceRequest) ProtoMessage() {}
func (x *DeleteKeyspaceRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[44]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[46]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3651,7 +3735,7 @@ func (x *DeleteKeyspaceRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteKeyspaceRequest.ProtoReflect.Descriptor instead.
func (*DeleteKeyspaceRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{44}
+ return file_vtctldata_proto_rawDescGZIP(), []int{46}
}
func (x *DeleteKeyspaceRequest) GetKeyspace() string {
@@ -3683,11 +3767,9 @@ type DeleteKeyspaceResponse struct {
func (x *DeleteKeyspaceResponse) Reset() {
*x = DeleteKeyspaceResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[45]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[47]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *DeleteKeyspaceResponse) String() string {
@@ -3697,8 +3779,8 @@ func (x *DeleteKeyspaceResponse) String() string {
func (*DeleteKeyspaceResponse) ProtoMessage() {}
func (x *DeleteKeyspaceResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[45]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[47]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3710,7 +3792,7 @@ func (x *DeleteKeyspaceResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteKeyspaceResponse.ProtoReflect.Descriptor instead.
func (*DeleteKeyspaceResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{45}
+ return file_vtctldata_proto_rawDescGZIP(), []int{47}
}
type DeleteShardsRequest struct {
@@ -3735,11 +3817,9 @@ type DeleteShardsRequest struct {
func (x *DeleteShardsRequest) Reset() {
*x = DeleteShardsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[46]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[48]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *DeleteShardsRequest) String() string {
@@ -3749,8 +3829,8 @@ func (x *DeleteShardsRequest) String() string {
func (*DeleteShardsRequest) ProtoMessage() {}
func (x *DeleteShardsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[46]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[48]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3762,7 +3842,7 @@ func (x *DeleteShardsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteShardsRequest.ProtoReflect.Descriptor instead.
func (*DeleteShardsRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{46}
+ return file_vtctldata_proto_rawDescGZIP(), []int{48}
}
func (x *DeleteShardsRequest) GetShards() []*Shard {
@@ -3801,11 +3881,9 @@ type DeleteShardsResponse struct {
func (x *DeleteShardsResponse) Reset() {
*x = DeleteShardsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[47]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[49]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *DeleteShardsResponse) String() string {
@@ -3815,8 +3893,8 @@ func (x *DeleteShardsResponse) String() string {
func (*DeleteShardsResponse) ProtoMessage() {}
func (x *DeleteShardsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[47]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[49]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3828,7 +3906,7 @@ func (x *DeleteShardsResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteShardsResponse.ProtoReflect.Descriptor instead.
func (*DeleteShardsResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{47}
+ return file_vtctldata_proto_rawDescGZIP(), []int{49}
}
type DeleteSrvVSchemaRequest struct {
@@ -3841,11 +3919,9 @@ type DeleteSrvVSchemaRequest struct {
func (x *DeleteSrvVSchemaRequest) Reset() {
*x = DeleteSrvVSchemaRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[48]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[50]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *DeleteSrvVSchemaRequest) String() string {
@@ -3855,8 +3931,8 @@ func (x *DeleteSrvVSchemaRequest) String() string {
func (*DeleteSrvVSchemaRequest) ProtoMessage() {}
func (x *DeleteSrvVSchemaRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[48]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[50]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3868,7 +3944,7 @@ func (x *DeleteSrvVSchemaRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteSrvVSchemaRequest.ProtoReflect.Descriptor instead.
func (*DeleteSrvVSchemaRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{48}
+ return file_vtctldata_proto_rawDescGZIP(), []int{50}
}
func (x *DeleteSrvVSchemaRequest) GetCell() string {
@@ -3886,11 +3962,9 @@ type DeleteSrvVSchemaResponse struct {
func (x *DeleteSrvVSchemaResponse) Reset() {
*x = DeleteSrvVSchemaResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[49]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[51]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *DeleteSrvVSchemaResponse) String() string {
@@ -3900,8 +3974,8 @@ func (x *DeleteSrvVSchemaResponse) String() string {
func (*DeleteSrvVSchemaResponse) ProtoMessage() {}
func (x *DeleteSrvVSchemaResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[49]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[51]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3913,7 +3987,7 @@ func (x *DeleteSrvVSchemaResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteSrvVSchemaResponse.ProtoReflect.Descriptor instead.
func (*DeleteSrvVSchemaResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{49}
+ return file_vtctldata_proto_rawDescGZIP(), []int{51}
}
type DeleteTabletsRequest struct {
@@ -3930,11 +4004,9 @@ type DeleteTabletsRequest struct {
func (x *DeleteTabletsRequest) Reset() {
*x = DeleteTabletsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[50]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[52]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *DeleteTabletsRequest) String() string {
@@ -3944,8 +4016,8 @@ func (x *DeleteTabletsRequest) String() string {
func (*DeleteTabletsRequest) ProtoMessage() {}
func (x *DeleteTabletsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[50]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[52]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3957,7 +4029,7 @@ func (x *DeleteTabletsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteTabletsRequest.ProtoReflect.Descriptor instead.
func (*DeleteTabletsRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{50}
+ return file_vtctldata_proto_rawDescGZIP(), []int{52}
}
func (x *DeleteTabletsRequest) GetTabletAliases() []*topodata.TabletAlias {
@@ -3982,11 +4054,9 @@ type DeleteTabletsResponse struct {
func (x *DeleteTabletsResponse) Reset() {
*x = DeleteTabletsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[51]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[53]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *DeleteTabletsResponse) String() string {
@@ -3996,8 +4066,8 @@ func (x *DeleteTabletsResponse) String() string {
func (*DeleteTabletsResponse) ProtoMessage() {}
func (x *DeleteTabletsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[51]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[53]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4009,7 +4079,7 @@ func (x *DeleteTabletsResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteTabletsResponse.ProtoReflect.Descriptor instead.
func (*DeleteTabletsResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{51}
+ return file_vtctldata_proto_rawDescGZIP(), []int{53}
}
type EmergencyReparentShardRequest struct {
@@ -4038,15 +4108,16 @@ type EmergencyReparentShardRequest struct {
// WaitForAllTablets makes ERS wait for a response from all the tablets before proceeding.
// Useful when all the tablets are up and reachable.
WaitForAllTablets bool `protobuf:"varint,7,opt,name=wait_for_all_tablets,json=waitForAllTablets,proto3" json:"wait_for_all_tablets,omitempty"`
+ // ExpectedPrimary is the optional alias we expect to be the current primary in order for
+ // the reparent operation to succeed.
+ ExpectedPrimary *topodata.TabletAlias `protobuf:"bytes,8,opt,name=expected_primary,json=expectedPrimary,proto3" json:"expected_primary,omitempty"`
}
func (x *EmergencyReparentShardRequest) Reset() {
*x = EmergencyReparentShardRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[52]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[54]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *EmergencyReparentShardRequest) String() string {
@@ -4056,8 +4127,8 @@ func (x *EmergencyReparentShardRequest) String() string {
func (*EmergencyReparentShardRequest) ProtoMessage() {}
func (x *EmergencyReparentShardRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[52]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[54]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4069,7 +4140,7 @@ func (x *EmergencyReparentShardRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use EmergencyReparentShardRequest.ProtoReflect.Descriptor instead.
func (*EmergencyReparentShardRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{52}
+ return file_vtctldata_proto_rawDescGZIP(), []int{54}
}
func (x *EmergencyReparentShardRequest) GetKeyspace() string {
@@ -4121,6 +4192,13 @@ func (x *EmergencyReparentShardRequest) GetWaitForAllTablets() bool {
return false
}
+func (x *EmergencyReparentShardRequest) GetExpectedPrimary() *topodata.TabletAlias {
+ if x != nil {
+ return x.ExpectedPrimary
+ }
+ return nil
+}
+
type EmergencyReparentShardResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -4140,11 +4218,9 @@ type EmergencyReparentShardResponse struct {
func (x *EmergencyReparentShardResponse) Reset() {
*x = EmergencyReparentShardResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[53]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[55]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *EmergencyReparentShardResponse) String() string {
@@ -4154,8 +4230,8 @@ func (x *EmergencyReparentShardResponse) String() string {
func (*EmergencyReparentShardResponse) ProtoMessage() {}
func (x *EmergencyReparentShardResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[53]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[55]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4167,7 +4243,7 @@ func (x *EmergencyReparentShardResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use EmergencyReparentShardResponse.ProtoReflect.Descriptor instead.
func (*EmergencyReparentShardResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{53}
+ return file_vtctldata_proto_rawDescGZIP(), []int{55}
}
func (x *EmergencyReparentShardResponse) GetKeyspace() string {
@@ -4218,11 +4294,9 @@ type ExecuteFetchAsAppRequest struct {
func (x *ExecuteFetchAsAppRequest) Reset() {
*x = ExecuteFetchAsAppRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[54]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[56]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteFetchAsAppRequest) String() string {
@@ -4232,8 +4306,8 @@ func (x *ExecuteFetchAsAppRequest) String() string {
func (*ExecuteFetchAsAppRequest) ProtoMessage() {}
func (x *ExecuteFetchAsAppRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[54]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[56]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4245,7 +4319,7 @@ func (x *ExecuteFetchAsAppRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ExecuteFetchAsAppRequest.ProtoReflect.Descriptor instead.
func (*ExecuteFetchAsAppRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{54}
+ return file_vtctldata_proto_rawDescGZIP(), []int{56}
}
func (x *ExecuteFetchAsAppRequest) GetTabletAlias() *topodata.TabletAlias {
@@ -4286,11 +4360,9 @@ type ExecuteFetchAsAppResponse struct {
func (x *ExecuteFetchAsAppResponse) Reset() {
*x = ExecuteFetchAsAppResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[55]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[57]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteFetchAsAppResponse) String() string {
@@ -4300,8 +4372,8 @@ func (x *ExecuteFetchAsAppResponse) String() string {
func (*ExecuteFetchAsAppResponse) ProtoMessage() {}
func (x *ExecuteFetchAsAppResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[55]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[57]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4313,7 +4385,7 @@ func (x *ExecuteFetchAsAppResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ExecuteFetchAsAppResponse.ProtoReflect.Descriptor instead.
func (*ExecuteFetchAsAppResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{55}
+ return file_vtctldata_proto_rawDescGZIP(), []int{57}
}
func (x *ExecuteFetchAsAppResponse) GetResult() *query.QueryResult {
@@ -4347,11 +4419,9 @@ type ExecuteFetchAsDBARequest struct {
func (x *ExecuteFetchAsDBARequest) Reset() {
*x = ExecuteFetchAsDBARequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[56]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[58]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteFetchAsDBARequest) String() string {
@@ -4361,8 +4431,8 @@ func (x *ExecuteFetchAsDBARequest) String() string {
func (*ExecuteFetchAsDBARequest) ProtoMessage() {}
func (x *ExecuteFetchAsDBARequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[56]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[58]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4374,7 +4444,7 @@ func (x *ExecuteFetchAsDBARequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ExecuteFetchAsDBARequest.ProtoReflect.Descriptor instead.
func (*ExecuteFetchAsDBARequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{56}
+ return file_vtctldata_proto_rawDescGZIP(), []int{58}
}
func (x *ExecuteFetchAsDBARequest) GetTabletAlias() *topodata.TabletAlias {
@@ -4422,11 +4492,9 @@ type ExecuteFetchAsDBAResponse struct {
func (x *ExecuteFetchAsDBAResponse) Reset() {
*x = ExecuteFetchAsDBAResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[57]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[59]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteFetchAsDBAResponse) String() string {
@@ -4436,8 +4504,8 @@ func (x *ExecuteFetchAsDBAResponse) String() string {
func (*ExecuteFetchAsDBAResponse) ProtoMessage() {}
func (x *ExecuteFetchAsDBAResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[57]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[59]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4449,7 +4517,7 @@ func (x *ExecuteFetchAsDBAResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ExecuteFetchAsDBAResponse.ProtoReflect.Descriptor instead.
func (*ExecuteFetchAsDBAResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{57}
+ return file_vtctldata_proto_rawDescGZIP(), []int{59}
}
func (x *ExecuteFetchAsDBAResponse) GetResult() *query.QueryResult {
@@ -4470,11 +4538,9 @@ type ExecuteHookRequest struct {
func (x *ExecuteHookRequest) Reset() {
*x = ExecuteHookRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[58]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[60]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteHookRequest) String() string {
@@ -4484,8 +4550,8 @@ func (x *ExecuteHookRequest) String() string {
func (*ExecuteHookRequest) ProtoMessage() {}
func (x *ExecuteHookRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[58]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[60]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4497,7 +4563,7 @@ func (x *ExecuteHookRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ExecuteHookRequest.ProtoReflect.Descriptor instead.
func (*ExecuteHookRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{58}
+ return file_vtctldata_proto_rawDescGZIP(), []int{60}
}
func (x *ExecuteHookRequest) GetTabletAlias() *topodata.TabletAlias {
@@ -4524,11 +4590,9 @@ type ExecuteHookResponse struct {
func (x *ExecuteHookResponse) Reset() {
*x = ExecuteHookResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[59]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[61]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteHookResponse) String() string {
@@ -4538,8 +4602,8 @@ func (x *ExecuteHookResponse) String() string {
func (*ExecuteHookResponse) ProtoMessage() {}
func (x *ExecuteHookResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[59]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[61]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4551,7 +4615,7 @@ func (x *ExecuteHookResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ExecuteHookResponse.ProtoReflect.Descriptor instead.
func (*ExecuteHookResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{59}
+ return file_vtctldata_proto_rawDescGZIP(), []int{61}
}
func (x *ExecuteHookResponse) GetHookResult() *tabletmanagerdata.ExecuteHookResponse {
@@ -4586,11 +4650,9 @@ type ExecuteMultiFetchAsDBARequest struct {
func (x *ExecuteMultiFetchAsDBARequest) Reset() {
*x = ExecuteMultiFetchAsDBARequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[60]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[62]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteMultiFetchAsDBARequest) String() string {
@@ -4600,8 +4662,8 @@ func (x *ExecuteMultiFetchAsDBARequest) String() string {
func (*ExecuteMultiFetchAsDBARequest) ProtoMessage() {}
func (x *ExecuteMultiFetchAsDBARequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[60]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[62]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4613,7 +4675,7 @@ func (x *ExecuteMultiFetchAsDBARequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ExecuteMultiFetchAsDBARequest.ProtoReflect.Descriptor instead.
func (*ExecuteMultiFetchAsDBARequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{60}
+ return file_vtctldata_proto_rawDescGZIP(), []int{62}
}
func (x *ExecuteMultiFetchAsDBARequest) GetTabletAlias() *topodata.TabletAlias {
@@ -4661,11 +4723,9 @@ type ExecuteMultiFetchAsDBAResponse struct {
func (x *ExecuteMultiFetchAsDBAResponse) Reset() {
*x = ExecuteMultiFetchAsDBAResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[61]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[63]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteMultiFetchAsDBAResponse) String() string {
@@ -4675,8 +4735,8 @@ func (x *ExecuteMultiFetchAsDBAResponse) String() string {
func (*ExecuteMultiFetchAsDBAResponse) ProtoMessage() {}
func (x *ExecuteMultiFetchAsDBAResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[61]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[63]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4688,7 +4748,7 @@ func (x *ExecuteMultiFetchAsDBAResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ExecuteMultiFetchAsDBAResponse.ProtoReflect.Descriptor instead.
func (*ExecuteMultiFetchAsDBAResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{61}
+ return file_vtctldata_proto_rawDescGZIP(), []int{63}
}
func (x *ExecuteMultiFetchAsDBAResponse) GetResults() []*query.QueryResult {
@@ -4708,11 +4768,9 @@ type FindAllShardsInKeyspaceRequest struct {
func (x *FindAllShardsInKeyspaceRequest) Reset() {
*x = FindAllShardsInKeyspaceRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[62]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[64]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *FindAllShardsInKeyspaceRequest) String() string {
@@ -4722,8 +4780,8 @@ func (x *FindAllShardsInKeyspaceRequest) String() string {
func (*FindAllShardsInKeyspaceRequest) ProtoMessage() {}
func (x *FindAllShardsInKeyspaceRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[62]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[64]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4735,7 +4793,7 @@ func (x *FindAllShardsInKeyspaceRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use FindAllShardsInKeyspaceRequest.ProtoReflect.Descriptor instead.
func (*FindAllShardsInKeyspaceRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{62}
+ return file_vtctldata_proto_rawDescGZIP(), []int{64}
}
func (x *FindAllShardsInKeyspaceRequest) GetKeyspace() string {
@@ -4755,11 +4813,9 @@ type FindAllShardsInKeyspaceResponse struct {
func (x *FindAllShardsInKeyspaceResponse) Reset() {
*x = FindAllShardsInKeyspaceResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[63]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[65]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *FindAllShardsInKeyspaceResponse) String() string {
@@ -4769,8 +4825,8 @@ func (x *FindAllShardsInKeyspaceResponse) String() string {
func (*FindAllShardsInKeyspaceResponse) ProtoMessage() {}
func (x *FindAllShardsInKeyspaceResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[63]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[65]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4782,7 +4838,7 @@ func (x *FindAllShardsInKeyspaceResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use FindAllShardsInKeyspaceResponse.ProtoReflect.Descriptor instead.
func (*FindAllShardsInKeyspaceResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{63}
+ return file_vtctldata_proto_rawDescGZIP(), []int{65}
}
func (x *FindAllShardsInKeyspaceResponse) GetShards() map[string]*Shard {
@@ -4803,11 +4859,9 @@ type ForceCutOverSchemaMigrationRequest struct {
func (x *ForceCutOverSchemaMigrationRequest) Reset() {
*x = ForceCutOverSchemaMigrationRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[64]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[66]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ForceCutOverSchemaMigrationRequest) String() string {
@@ -4817,8 +4871,8 @@ func (x *ForceCutOverSchemaMigrationRequest) String() string {
func (*ForceCutOverSchemaMigrationRequest) ProtoMessage() {}
func (x *ForceCutOverSchemaMigrationRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[64]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[66]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4830,7 +4884,7 @@ func (x *ForceCutOverSchemaMigrationRequest) ProtoReflect() protoreflect.Message
// Deprecated: Use ForceCutOverSchemaMigrationRequest.ProtoReflect.Descriptor instead.
func (*ForceCutOverSchemaMigrationRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{64}
+ return file_vtctldata_proto_rawDescGZIP(), []int{66}
}
func (x *ForceCutOverSchemaMigrationRequest) GetKeyspace() string {
@@ -4857,11 +4911,9 @@ type ForceCutOverSchemaMigrationResponse struct {
func (x *ForceCutOverSchemaMigrationResponse) Reset() {
*x = ForceCutOverSchemaMigrationResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[65]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[67]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ForceCutOverSchemaMigrationResponse) String() string {
@@ -4871,8 +4923,8 @@ func (x *ForceCutOverSchemaMigrationResponse) String() string {
func (*ForceCutOverSchemaMigrationResponse) ProtoMessage() {}
func (x *ForceCutOverSchemaMigrationResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[65]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[67]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4884,7 +4936,7 @@ func (x *ForceCutOverSchemaMigrationResponse) ProtoReflect() protoreflect.Messag
// Deprecated: Use ForceCutOverSchemaMigrationResponse.ProtoReflect.Descriptor instead.
func (*ForceCutOverSchemaMigrationResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{65}
+ return file_vtctldata_proto_rawDescGZIP(), []int{67}
}
func (x *ForceCutOverSchemaMigrationResponse) GetRowsAffectedByShard() map[string]uint64 {
@@ -4919,11 +4971,9 @@ type GetBackupsRequest struct {
func (x *GetBackupsRequest) Reset() {
*x = GetBackupsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[66]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[68]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetBackupsRequest) String() string {
@@ -4933,8 +4983,8 @@ func (x *GetBackupsRequest) String() string {
func (*GetBackupsRequest) ProtoMessage() {}
func (x *GetBackupsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[66]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[68]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4946,7 +4996,7 @@ func (x *GetBackupsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetBackupsRequest.ProtoReflect.Descriptor instead.
func (*GetBackupsRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{66}
+ return file_vtctldata_proto_rawDescGZIP(), []int{68}
}
func (x *GetBackupsRequest) GetKeyspace() string {
@@ -4994,11 +5044,9 @@ type GetBackupsResponse struct {
func (x *GetBackupsResponse) Reset() {
*x = GetBackupsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[67]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[69]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetBackupsResponse) String() string {
@@ -5008,8 +5056,8 @@ func (x *GetBackupsResponse) String() string {
func (*GetBackupsResponse) ProtoMessage() {}
func (x *GetBackupsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[67]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[69]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5021,7 +5069,7 @@ func (x *GetBackupsResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetBackupsResponse.ProtoReflect.Descriptor instead.
func (*GetBackupsResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{67}
+ return file_vtctldata_proto_rawDescGZIP(), []int{69}
}
func (x *GetBackupsResponse) GetBackups() []*mysqlctl.BackupInfo {
@@ -5041,11 +5089,9 @@ type GetCellInfoRequest struct {
func (x *GetCellInfoRequest) Reset() {
*x = GetCellInfoRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[68]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[70]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetCellInfoRequest) String() string {
@@ -5055,8 +5101,8 @@ func (x *GetCellInfoRequest) String() string {
func (*GetCellInfoRequest) ProtoMessage() {}
func (x *GetCellInfoRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[68]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[70]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5068,7 +5114,7 @@ func (x *GetCellInfoRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetCellInfoRequest.ProtoReflect.Descriptor instead.
func (*GetCellInfoRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{68}
+ return file_vtctldata_proto_rawDescGZIP(), []int{70}
}
func (x *GetCellInfoRequest) GetCell() string {
@@ -5088,11 +5134,9 @@ type GetCellInfoResponse struct {
func (x *GetCellInfoResponse) Reset() {
*x = GetCellInfoResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[69]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[71]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetCellInfoResponse) String() string {
@@ -5102,8 +5146,8 @@ func (x *GetCellInfoResponse) String() string {
func (*GetCellInfoResponse) ProtoMessage() {}
func (x *GetCellInfoResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[69]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[71]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5115,7 +5159,7 @@ func (x *GetCellInfoResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetCellInfoResponse.ProtoReflect.Descriptor instead.
func (*GetCellInfoResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{69}
+ return file_vtctldata_proto_rawDescGZIP(), []int{71}
}
func (x *GetCellInfoResponse) GetCellInfo() *topodata.CellInfo {
@@ -5133,11 +5177,9 @@ type GetCellInfoNamesRequest struct {
func (x *GetCellInfoNamesRequest) Reset() {
*x = GetCellInfoNamesRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[70]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[72]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetCellInfoNamesRequest) String() string {
@@ -5147,8 +5189,8 @@ func (x *GetCellInfoNamesRequest) String() string {
func (*GetCellInfoNamesRequest) ProtoMessage() {}
func (x *GetCellInfoNamesRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[70]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[72]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5160,7 +5202,7 @@ func (x *GetCellInfoNamesRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetCellInfoNamesRequest.ProtoReflect.Descriptor instead.
func (*GetCellInfoNamesRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{70}
+ return file_vtctldata_proto_rawDescGZIP(), []int{72}
}
type GetCellInfoNamesResponse struct {
@@ -5173,11 +5215,9 @@ type GetCellInfoNamesResponse struct {
func (x *GetCellInfoNamesResponse) Reset() {
*x = GetCellInfoNamesResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[71]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[73]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetCellInfoNamesResponse) String() string {
@@ -5187,8 +5227,8 @@ func (x *GetCellInfoNamesResponse) String() string {
func (*GetCellInfoNamesResponse) ProtoMessage() {}
func (x *GetCellInfoNamesResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[71]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[73]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5200,7 +5240,7 @@ func (x *GetCellInfoNamesResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetCellInfoNamesResponse.ProtoReflect.Descriptor instead.
func (*GetCellInfoNamesResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{71}
+ return file_vtctldata_proto_rawDescGZIP(), []int{73}
}
func (x *GetCellInfoNamesResponse) GetNames() []string {
@@ -5218,11 +5258,9 @@ type GetCellsAliasesRequest struct {
func (x *GetCellsAliasesRequest) Reset() {
*x = GetCellsAliasesRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[72]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[74]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetCellsAliasesRequest) String() string {
@@ -5232,8 +5270,8 @@ func (x *GetCellsAliasesRequest) String() string {
func (*GetCellsAliasesRequest) ProtoMessage() {}
func (x *GetCellsAliasesRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[72]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[74]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5245,7 +5283,7 @@ func (x *GetCellsAliasesRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetCellsAliasesRequest.ProtoReflect.Descriptor instead.
func (*GetCellsAliasesRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{72}
+ return file_vtctldata_proto_rawDescGZIP(), []int{74}
}
type GetCellsAliasesResponse struct {
@@ -5258,11 +5296,9 @@ type GetCellsAliasesResponse struct {
func (x *GetCellsAliasesResponse) Reset() {
*x = GetCellsAliasesResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[73]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[75]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetCellsAliasesResponse) String() string {
@@ -5272,8 +5308,8 @@ func (x *GetCellsAliasesResponse) String() string {
func (*GetCellsAliasesResponse) ProtoMessage() {}
func (x *GetCellsAliasesResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[73]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[75]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5285,7 +5321,7 @@ func (x *GetCellsAliasesResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetCellsAliasesResponse.ProtoReflect.Descriptor instead.
func (*GetCellsAliasesResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{73}
+ return file_vtctldata_proto_rawDescGZIP(), []int{75}
}
func (x *GetCellsAliasesResponse) GetAliases() map[string]*topodata.CellsAlias {
@@ -5305,11 +5341,9 @@ type GetFullStatusRequest struct {
func (x *GetFullStatusRequest) Reset() {
*x = GetFullStatusRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[74]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[76]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetFullStatusRequest) String() string {
@@ -5319,8 +5353,8 @@ func (x *GetFullStatusRequest) String() string {
func (*GetFullStatusRequest) ProtoMessage() {}
func (x *GetFullStatusRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[74]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[76]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5332,7 +5366,7 @@ func (x *GetFullStatusRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetFullStatusRequest.ProtoReflect.Descriptor instead.
func (*GetFullStatusRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{74}
+ return file_vtctldata_proto_rawDescGZIP(), []int{76}
}
func (x *GetFullStatusRequest) GetTabletAlias() *topodata.TabletAlias {
@@ -5352,11 +5386,9 @@ type GetFullStatusResponse struct {
func (x *GetFullStatusResponse) Reset() {
*x = GetFullStatusResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[75]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[77]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetFullStatusResponse) String() string {
@@ -5366,8 +5398,8 @@ func (x *GetFullStatusResponse) String() string {
func (*GetFullStatusResponse) ProtoMessage() {}
func (x *GetFullStatusResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[75]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[77]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5379,7 +5411,7 @@ func (x *GetFullStatusResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetFullStatusResponse.ProtoReflect.Descriptor instead.
func (*GetFullStatusResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{75}
+ return file_vtctldata_proto_rawDescGZIP(), []int{77}
}
func (x *GetFullStatusResponse) GetStatus() *replicationdata.FullStatus {
@@ -5397,11 +5429,9 @@ type GetKeyspacesRequest struct {
func (x *GetKeyspacesRequest) Reset() {
*x = GetKeyspacesRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[76]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[78]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetKeyspacesRequest) String() string {
@@ -5411,8 +5441,8 @@ func (x *GetKeyspacesRequest) String() string {
func (*GetKeyspacesRequest) ProtoMessage() {}
func (x *GetKeyspacesRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[76]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[78]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5424,7 +5454,7 @@ func (x *GetKeyspacesRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetKeyspacesRequest.ProtoReflect.Descriptor instead.
func (*GetKeyspacesRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{76}
+ return file_vtctldata_proto_rawDescGZIP(), []int{78}
}
type GetKeyspacesResponse struct {
@@ -5437,11 +5467,9 @@ type GetKeyspacesResponse struct {
func (x *GetKeyspacesResponse) Reset() {
*x = GetKeyspacesResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[77]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[79]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetKeyspacesResponse) String() string {
@@ -5451,8 +5479,8 @@ func (x *GetKeyspacesResponse) String() string {
func (*GetKeyspacesResponse) ProtoMessage() {}
func (x *GetKeyspacesResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[77]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[79]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5464,7 +5492,7 @@ func (x *GetKeyspacesResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetKeyspacesResponse.ProtoReflect.Descriptor instead.
func (*GetKeyspacesResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{77}
+ return file_vtctldata_proto_rawDescGZIP(), []int{79}
}
func (x *GetKeyspacesResponse) GetKeyspaces() []*Keyspace {
@@ -5484,11 +5512,9 @@ type GetKeyspaceRequest struct {
func (x *GetKeyspaceRequest) Reset() {
*x = GetKeyspaceRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[78]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[80]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetKeyspaceRequest) String() string {
@@ -5498,8 +5524,8 @@ func (x *GetKeyspaceRequest) String() string {
func (*GetKeyspaceRequest) ProtoMessage() {}
func (x *GetKeyspaceRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[78]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[80]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5511,7 +5537,7 @@ func (x *GetKeyspaceRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetKeyspaceRequest.ProtoReflect.Descriptor instead.
func (*GetKeyspaceRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{78}
+ return file_vtctldata_proto_rawDescGZIP(), []int{80}
}
func (x *GetKeyspaceRequest) GetKeyspace() string {
@@ -5531,11 +5557,9 @@ type GetKeyspaceResponse struct {
func (x *GetKeyspaceResponse) Reset() {
*x = GetKeyspaceResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[79]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[81]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetKeyspaceResponse) String() string {
@@ -5545,8 +5569,8 @@ func (x *GetKeyspaceResponse) String() string {
func (*GetKeyspaceResponse) ProtoMessage() {}
func (x *GetKeyspaceResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[79]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[81]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5558,7 +5582,7 @@ func (x *GetKeyspaceResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetKeyspaceResponse.ProtoReflect.Descriptor instead.
func (*GetKeyspaceResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{79}
+ return file_vtctldata_proto_rawDescGZIP(), []int{81}
}
func (x *GetKeyspaceResponse) GetKeyspace() *Keyspace {
@@ -5578,11 +5602,9 @@ type GetPermissionsRequest struct {
func (x *GetPermissionsRequest) Reset() {
*x = GetPermissionsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[80]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[82]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetPermissionsRequest) String() string {
@@ -5592,8 +5614,8 @@ func (x *GetPermissionsRequest) String() string {
func (*GetPermissionsRequest) ProtoMessage() {}
func (x *GetPermissionsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[80]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[82]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5605,7 +5627,7 @@ func (x *GetPermissionsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetPermissionsRequest.ProtoReflect.Descriptor instead.
func (*GetPermissionsRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{80}
+ return file_vtctldata_proto_rawDescGZIP(), []int{82}
}
func (x *GetPermissionsRequest) GetTabletAlias() *topodata.TabletAlias {
@@ -5625,11 +5647,9 @@ type GetPermissionsResponse struct {
func (x *GetPermissionsResponse) Reset() {
*x = GetPermissionsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[81]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[83]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetPermissionsResponse) String() string {
@@ -5639,8 +5659,8 @@ func (x *GetPermissionsResponse) String() string {
func (*GetPermissionsResponse) ProtoMessage() {}
func (x *GetPermissionsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[81]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[83]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5652,7 +5672,7 @@ func (x *GetPermissionsResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetPermissionsResponse.ProtoReflect.Descriptor instead.
func (*GetPermissionsResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{81}
+ return file_vtctldata_proto_rawDescGZIP(), []int{83}
}
func (x *GetPermissionsResponse) GetPermissions() *tabletmanagerdata.Permissions {
@@ -5670,11 +5690,9 @@ type GetKeyspaceRoutingRulesRequest struct {
func (x *GetKeyspaceRoutingRulesRequest) Reset() {
*x = GetKeyspaceRoutingRulesRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[82]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[84]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetKeyspaceRoutingRulesRequest) String() string {
@@ -5684,8 +5702,8 @@ func (x *GetKeyspaceRoutingRulesRequest) String() string {
func (*GetKeyspaceRoutingRulesRequest) ProtoMessage() {}
func (x *GetKeyspaceRoutingRulesRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[82]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[84]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5697,7 +5715,7 @@ func (x *GetKeyspaceRoutingRulesRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetKeyspaceRoutingRulesRequest.ProtoReflect.Descriptor instead.
func (*GetKeyspaceRoutingRulesRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{82}
+ return file_vtctldata_proto_rawDescGZIP(), []int{84}
}
type GetKeyspaceRoutingRulesResponse struct {
@@ -5710,11 +5728,9 @@ type GetKeyspaceRoutingRulesResponse struct {
func (x *GetKeyspaceRoutingRulesResponse) Reset() {
*x = GetKeyspaceRoutingRulesResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[83]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[85]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetKeyspaceRoutingRulesResponse) String() string {
@@ -5724,8 +5740,8 @@ func (x *GetKeyspaceRoutingRulesResponse) String() string {
func (*GetKeyspaceRoutingRulesResponse) ProtoMessage() {}
func (x *GetKeyspaceRoutingRulesResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[83]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[85]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5737,7 +5753,7 @@ func (x *GetKeyspaceRoutingRulesResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetKeyspaceRoutingRulesResponse.ProtoReflect.Descriptor instead.
func (*GetKeyspaceRoutingRulesResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{83}
+ return file_vtctldata_proto_rawDescGZIP(), []int{85}
}
func (x *GetKeyspaceRoutingRulesResponse) GetKeyspaceRoutingRules() *vschema.KeyspaceRoutingRules {
@@ -5755,11 +5771,9 @@ type GetRoutingRulesRequest struct {
func (x *GetRoutingRulesRequest) Reset() {
*x = GetRoutingRulesRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[84]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[86]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetRoutingRulesRequest) String() string {
@@ -5769,8 +5783,8 @@ func (x *GetRoutingRulesRequest) String() string {
func (*GetRoutingRulesRequest) ProtoMessage() {}
func (x *GetRoutingRulesRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[84]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[86]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5782,7 +5796,7 @@ func (x *GetRoutingRulesRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetRoutingRulesRequest.ProtoReflect.Descriptor instead.
func (*GetRoutingRulesRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{84}
+ return file_vtctldata_proto_rawDescGZIP(), []int{86}
}
type GetRoutingRulesResponse struct {
@@ -5795,11 +5809,9 @@ type GetRoutingRulesResponse struct {
func (x *GetRoutingRulesResponse) Reset() {
*x = GetRoutingRulesResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[85]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[87]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetRoutingRulesResponse) String() string {
@@ -5809,8 +5821,8 @@ func (x *GetRoutingRulesResponse) String() string {
func (*GetRoutingRulesResponse) ProtoMessage() {}
func (x *GetRoutingRulesResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[85]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[87]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5822,7 +5834,7 @@ func (x *GetRoutingRulesResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetRoutingRulesResponse.ProtoReflect.Descriptor instead.
func (*GetRoutingRulesResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{85}
+ return file_vtctldata_proto_rawDescGZIP(), []int{87}
}
func (x *GetRoutingRulesResponse) GetRoutingRules() *vschema.RoutingRules {
@@ -5860,11 +5872,9 @@ type GetSchemaRequest struct {
func (x *GetSchemaRequest) Reset() {
*x = GetSchemaRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[86]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[88]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSchemaRequest) String() string {
@@ -5874,8 +5884,8 @@ func (x *GetSchemaRequest) String() string {
func (*GetSchemaRequest) ProtoMessage() {}
func (x *GetSchemaRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[86]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[88]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5887,7 +5897,7 @@ func (x *GetSchemaRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetSchemaRequest.ProtoReflect.Descriptor instead.
func (*GetSchemaRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{86}
+ return file_vtctldata_proto_rawDescGZIP(), []int{88}
}
func (x *GetSchemaRequest) GetTabletAlias() *topodata.TabletAlias {
@@ -5949,11 +5959,9 @@ type GetSchemaResponse struct {
func (x *GetSchemaResponse) Reset() {
*x = GetSchemaResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[87]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[89]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSchemaResponse) String() string {
@@ -5963,8 +5971,8 @@ func (x *GetSchemaResponse) String() string {
func (*GetSchemaResponse) ProtoMessage() {}
func (x *GetSchemaResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[87]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[89]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -5976,7 +5984,7 @@ func (x *GetSchemaResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetSchemaResponse.ProtoReflect.Descriptor instead.
func (*GetSchemaResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{87}
+ return file_vtctldata_proto_rawDescGZIP(), []int{89}
}
func (x *GetSchemaResponse) GetSchema() *tabletmanagerdata.SchemaDefinition {
@@ -6021,11 +6029,9 @@ type GetSchemaMigrationsRequest struct {
func (x *GetSchemaMigrationsRequest) Reset() {
*x = GetSchemaMigrationsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[88]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[90]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSchemaMigrationsRequest) String() string {
@@ -6035,8 +6041,8 @@ func (x *GetSchemaMigrationsRequest) String() string {
func (*GetSchemaMigrationsRequest) ProtoMessage() {}
func (x *GetSchemaMigrationsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[88]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[90]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6048,7 +6054,7 @@ func (x *GetSchemaMigrationsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetSchemaMigrationsRequest.ProtoReflect.Descriptor instead.
func (*GetSchemaMigrationsRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{88}
+ return file_vtctldata_proto_rawDescGZIP(), []int{90}
}
func (x *GetSchemaMigrationsRequest) GetKeyspace() string {
@@ -6117,11 +6123,9 @@ type GetSchemaMigrationsResponse struct {
func (x *GetSchemaMigrationsResponse) Reset() {
*x = GetSchemaMigrationsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[89]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[91]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSchemaMigrationsResponse) String() string {
@@ -6131,8 +6135,8 @@ func (x *GetSchemaMigrationsResponse) String() string {
func (*GetSchemaMigrationsResponse) ProtoMessage() {}
func (x *GetSchemaMigrationsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[89]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[91]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6144,7 +6148,7 @@ func (x *GetSchemaMigrationsResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetSchemaMigrationsResponse.ProtoReflect.Descriptor instead.
func (*GetSchemaMigrationsResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{89}
+ return file_vtctldata_proto_rawDescGZIP(), []int{91}
}
func (x *GetSchemaMigrationsResponse) GetMigrations() []*SchemaMigration {
@@ -6168,11 +6172,9 @@ type GetShardReplicationRequest struct {
func (x *GetShardReplicationRequest) Reset() {
*x = GetShardReplicationRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[90]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[92]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetShardReplicationRequest) String() string {
@@ -6182,8 +6184,8 @@ func (x *GetShardReplicationRequest) String() string {
func (*GetShardReplicationRequest) ProtoMessage() {}
func (x *GetShardReplicationRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[90]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[92]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6195,7 +6197,7 @@ func (x *GetShardReplicationRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetShardReplicationRequest.ProtoReflect.Descriptor instead.
func (*GetShardReplicationRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{90}
+ return file_vtctldata_proto_rawDescGZIP(), []int{92}
}
func (x *GetShardReplicationRequest) GetKeyspace() string {
@@ -6229,11 +6231,9 @@ type GetShardReplicationResponse struct {
func (x *GetShardReplicationResponse) Reset() {
*x = GetShardReplicationResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[91]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[93]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetShardReplicationResponse) String() string {
@@ -6243,8 +6243,8 @@ func (x *GetShardReplicationResponse) String() string {
func (*GetShardReplicationResponse) ProtoMessage() {}
func (x *GetShardReplicationResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[91]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[93]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6256,7 +6256,7 @@ func (x *GetShardReplicationResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetShardReplicationResponse.ProtoReflect.Descriptor instead.
func (*GetShardReplicationResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{91}
+ return file_vtctldata_proto_rawDescGZIP(), []int{93}
}
func (x *GetShardReplicationResponse) GetShardReplicationByCell() map[string]*topodata.ShardReplication {
@@ -6277,11 +6277,9 @@ type GetShardRequest struct {
func (x *GetShardRequest) Reset() {
*x = GetShardRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[92]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[94]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetShardRequest) String() string {
@@ -6291,8 +6289,8 @@ func (x *GetShardRequest) String() string {
func (*GetShardRequest) ProtoMessage() {}
func (x *GetShardRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[92]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[94]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6304,7 +6302,7 @@ func (x *GetShardRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetShardRequest.ProtoReflect.Descriptor instead.
func (*GetShardRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{92}
+ return file_vtctldata_proto_rawDescGZIP(), []int{94}
}
func (x *GetShardRequest) GetKeyspace() string {
@@ -6331,11 +6329,9 @@ type GetShardResponse struct {
func (x *GetShardResponse) Reset() {
*x = GetShardResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[93]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[95]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetShardResponse) String() string {
@@ -6345,8 +6341,8 @@ func (x *GetShardResponse) String() string {
func (*GetShardResponse) ProtoMessage() {}
func (x *GetShardResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[93]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[95]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6358,7 +6354,7 @@ func (x *GetShardResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetShardResponse.ProtoReflect.Descriptor instead.
func (*GetShardResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{93}
+ return file_vtctldata_proto_rawDescGZIP(), []int{95}
}
func (x *GetShardResponse) GetShard() *Shard {
@@ -6376,11 +6372,9 @@ type GetShardRoutingRulesRequest struct {
func (x *GetShardRoutingRulesRequest) Reset() {
*x = GetShardRoutingRulesRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[94]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[96]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetShardRoutingRulesRequest) String() string {
@@ -6390,8 +6384,8 @@ func (x *GetShardRoutingRulesRequest) String() string {
func (*GetShardRoutingRulesRequest) ProtoMessage() {}
func (x *GetShardRoutingRulesRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[94]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[96]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6403,7 +6397,7 @@ func (x *GetShardRoutingRulesRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetShardRoutingRulesRequest.ProtoReflect.Descriptor instead.
func (*GetShardRoutingRulesRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{94}
+ return file_vtctldata_proto_rawDescGZIP(), []int{96}
}
type GetShardRoutingRulesResponse struct {
@@ -6416,11 +6410,9 @@ type GetShardRoutingRulesResponse struct {
func (x *GetShardRoutingRulesResponse) Reset() {
*x = GetShardRoutingRulesResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[95]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[97]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetShardRoutingRulesResponse) String() string {
@@ -6430,8 +6422,8 @@ func (x *GetShardRoutingRulesResponse) String() string {
func (*GetShardRoutingRulesResponse) ProtoMessage() {}
func (x *GetShardRoutingRulesResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[95]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[97]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6443,7 +6435,7 @@ func (x *GetShardRoutingRulesResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetShardRoutingRulesResponse.ProtoReflect.Descriptor instead.
func (*GetShardRoutingRulesResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{95}
+ return file_vtctldata_proto_rawDescGZIP(), []int{97}
}
func (x *GetShardRoutingRulesResponse) GetShardRoutingRules() *vschema.ShardRoutingRules {
@@ -6463,11 +6455,9 @@ type GetSrvKeyspaceNamesRequest struct {
func (x *GetSrvKeyspaceNamesRequest) Reset() {
*x = GetSrvKeyspaceNamesRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[96]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[98]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSrvKeyspaceNamesRequest) String() string {
@@ -6477,8 +6467,8 @@ func (x *GetSrvKeyspaceNamesRequest) String() string {
func (*GetSrvKeyspaceNamesRequest) ProtoMessage() {}
func (x *GetSrvKeyspaceNamesRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[96]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[98]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6490,7 +6480,7 @@ func (x *GetSrvKeyspaceNamesRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetSrvKeyspaceNamesRequest.ProtoReflect.Descriptor instead.
func (*GetSrvKeyspaceNamesRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{96}
+ return file_vtctldata_proto_rawDescGZIP(), []int{98}
}
func (x *GetSrvKeyspaceNamesRequest) GetCells() []string {
@@ -6511,11 +6501,9 @@ type GetSrvKeyspaceNamesResponse struct {
func (x *GetSrvKeyspaceNamesResponse) Reset() {
*x = GetSrvKeyspaceNamesResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[97]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[99]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSrvKeyspaceNamesResponse) String() string {
@@ -6525,8 +6513,8 @@ func (x *GetSrvKeyspaceNamesResponse) String() string {
func (*GetSrvKeyspaceNamesResponse) ProtoMessage() {}
func (x *GetSrvKeyspaceNamesResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[97]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[99]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6538,7 +6526,7 @@ func (x *GetSrvKeyspaceNamesResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetSrvKeyspaceNamesResponse.ProtoReflect.Descriptor instead.
func (*GetSrvKeyspaceNamesResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{97}
+ return file_vtctldata_proto_rawDescGZIP(), []int{99}
}
func (x *GetSrvKeyspaceNamesResponse) GetNames() map[string]*GetSrvKeyspaceNamesResponse_NameList {
@@ -6561,11 +6549,9 @@ type GetSrvKeyspacesRequest struct {
func (x *GetSrvKeyspacesRequest) Reset() {
*x = GetSrvKeyspacesRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[98]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[100]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSrvKeyspacesRequest) String() string {
@@ -6575,8 +6561,8 @@ func (x *GetSrvKeyspacesRequest) String() string {
func (*GetSrvKeyspacesRequest) ProtoMessage() {}
func (x *GetSrvKeyspacesRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[98]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[100]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6588,7 +6574,7 @@ func (x *GetSrvKeyspacesRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetSrvKeyspacesRequest.ProtoReflect.Descriptor instead.
func (*GetSrvKeyspacesRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{98}
+ return file_vtctldata_proto_rawDescGZIP(), []int{100}
}
func (x *GetSrvKeyspacesRequest) GetKeyspace() string {
@@ -6616,11 +6602,9 @@ type GetSrvKeyspacesResponse struct {
func (x *GetSrvKeyspacesResponse) Reset() {
*x = GetSrvKeyspacesResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[99]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[101]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSrvKeyspacesResponse) String() string {
@@ -6630,8 +6614,8 @@ func (x *GetSrvKeyspacesResponse) String() string {
func (*GetSrvKeyspacesResponse) ProtoMessage() {}
func (x *GetSrvKeyspacesResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[99]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[101]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6643,7 +6627,7 @@ func (x *GetSrvKeyspacesResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetSrvKeyspacesResponse.ProtoReflect.Descriptor instead.
func (*GetSrvKeyspacesResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{99}
+ return file_vtctldata_proto_rawDescGZIP(), []int{101}
}
func (x *GetSrvKeyspacesResponse) GetSrvKeyspaces() map[string]*topodata.SrvKeyspace {
@@ -6686,11 +6670,9 @@ type UpdateThrottlerConfigRequest struct {
func (x *UpdateThrottlerConfigRequest) Reset() {
*x = UpdateThrottlerConfigRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[100]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[102]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UpdateThrottlerConfigRequest) String() string {
@@ -6700,8 +6682,8 @@ func (x *UpdateThrottlerConfigRequest) String() string {
func (*UpdateThrottlerConfigRequest) ProtoMessage() {}
func (x *UpdateThrottlerConfigRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[100]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[102]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6713,7 +6695,7 @@ func (x *UpdateThrottlerConfigRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateThrottlerConfigRequest.ProtoReflect.Descriptor instead.
func (*UpdateThrottlerConfigRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{100}
+ return file_vtctldata_proto_rawDescGZIP(), []int{102}
}
func (x *UpdateThrottlerConfigRequest) GetKeyspace() string {
@@ -6808,11 +6790,9 @@ type UpdateThrottlerConfigResponse struct {
func (x *UpdateThrottlerConfigResponse) Reset() {
*x = UpdateThrottlerConfigResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[101]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[103]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UpdateThrottlerConfigResponse) String() string {
@@ -6822,8 +6802,8 @@ func (x *UpdateThrottlerConfigResponse) String() string {
func (*UpdateThrottlerConfigResponse) ProtoMessage() {}
func (x *UpdateThrottlerConfigResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[101]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[103]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6835,7 +6815,7 @@ func (x *UpdateThrottlerConfigResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateThrottlerConfigResponse.ProtoReflect.Descriptor instead.
func (*UpdateThrottlerConfigResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{101}
+ return file_vtctldata_proto_rawDescGZIP(), []int{103}
}
type GetSrvVSchemaRequest struct {
@@ -6848,11 +6828,9 @@ type GetSrvVSchemaRequest struct {
func (x *GetSrvVSchemaRequest) Reset() {
*x = GetSrvVSchemaRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[102]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[104]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSrvVSchemaRequest) String() string {
@@ -6862,8 +6840,8 @@ func (x *GetSrvVSchemaRequest) String() string {
func (*GetSrvVSchemaRequest) ProtoMessage() {}
func (x *GetSrvVSchemaRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[102]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[104]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6875,7 +6853,7 @@ func (x *GetSrvVSchemaRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetSrvVSchemaRequest.ProtoReflect.Descriptor instead.
func (*GetSrvVSchemaRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{102}
+ return file_vtctldata_proto_rawDescGZIP(), []int{104}
}
func (x *GetSrvVSchemaRequest) GetCell() string {
@@ -6895,11 +6873,9 @@ type GetSrvVSchemaResponse struct {
func (x *GetSrvVSchemaResponse) Reset() {
*x = GetSrvVSchemaResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[103]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[105]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSrvVSchemaResponse) String() string {
@@ -6909,8 +6885,8 @@ func (x *GetSrvVSchemaResponse) String() string {
func (*GetSrvVSchemaResponse) ProtoMessage() {}
func (x *GetSrvVSchemaResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[103]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[105]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6922,7 +6898,7 @@ func (x *GetSrvVSchemaResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetSrvVSchemaResponse.ProtoReflect.Descriptor instead.
func (*GetSrvVSchemaResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{103}
+ return file_vtctldata_proto_rawDescGZIP(), []int{105}
}
func (x *GetSrvVSchemaResponse) GetSrvVSchema() *vschema.SrvVSchema {
@@ -6942,11 +6918,9 @@ type GetSrvVSchemasRequest struct {
func (x *GetSrvVSchemasRequest) Reset() {
*x = GetSrvVSchemasRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[104]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[106]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSrvVSchemasRequest) String() string {
@@ -6956,8 +6930,8 @@ func (x *GetSrvVSchemasRequest) String() string {
func (*GetSrvVSchemasRequest) ProtoMessage() {}
func (x *GetSrvVSchemasRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[104]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[106]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -6969,7 +6943,7 @@ func (x *GetSrvVSchemasRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetSrvVSchemasRequest.ProtoReflect.Descriptor instead.
func (*GetSrvVSchemasRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{104}
+ return file_vtctldata_proto_rawDescGZIP(), []int{106}
}
func (x *GetSrvVSchemasRequest) GetCells() []string {
@@ -6990,11 +6964,9 @@ type GetSrvVSchemasResponse struct {
func (x *GetSrvVSchemasResponse) Reset() {
*x = GetSrvVSchemasResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[105]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[107]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSrvVSchemasResponse) String() string {
@@ -7004,8 +6976,8 @@ func (x *GetSrvVSchemasResponse) String() string {
func (*GetSrvVSchemasResponse) ProtoMessage() {}
func (x *GetSrvVSchemasResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[105]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[107]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7017,7 +6989,7 @@ func (x *GetSrvVSchemasResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetSrvVSchemasResponse.ProtoReflect.Descriptor instead.
func (*GetSrvVSchemasResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{105}
+ return file_vtctldata_proto_rawDescGZIP(), []int{107}
}
func (x *GetSrvVSchemasResponse) GetSrvVSchemas() map[string]*vschema.SrvVSchema {
@@ -7037,11 +7009,9 @@ type GetTabletRequest struct {
func (x *GetTabletRequest) Reset() {
*x = GetTabletRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[106]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[108]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetTabletRequest) String() string {
@@ -7051,8 +7021,8 @@ func (x *GetTabletRequest) String() string {
func (*GetTabletRequest) ProtoMessage() {}
func (x *GetTabletRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[106]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[108]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7064,7 +7034,7 @@ func (x *GetTabletRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetTabletRequest.ProtoReflect.Descriptor instead.
func (*GetTabletRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{106}
+ return file_vtctldata_proto_rawDescGZIP(), []int{108}
}
func (x *GetTabletRequest) GetTabletAlias() *topodata.TabletAlias {
@@ -7084,11 +7054,9 @@ type GetTabletResponse struct {
func (x *GetTabletResponse) Reset() {
*x = GetTabletResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[107]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[109]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetTabletResponse) String() string {
@@ -7098,8 +7066,8 @@ func (x *GetTabletResponse) String() string {
func (*GetTabletResponse) ProtoMessage() {}
func (x *GetTabletResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[107]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[109]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7111,7 +7079,7 @@ func (x *GetTabletResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetTabletResponse.ProtoReflect.Descriptor instead.
func (*GetTabletResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{107}
+ return file_vtctldata_proto_rawDescGZIP(), []int{109}
}
func (x *GetTabletResponse) GetTablet() *topodata.Tablet {
@@ -7152,11 +7120,9 @@ type GetTabletsRequest struct {
func (x *GetTabletsRequest) Reset() {
*x = GetTabletsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[108]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[110]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetTabletsRequest) String() string {
@@ -7166,8 +7132,8 @@ func (x *GetTabletsRequest) String() string {
func (*GetTabletsRequest) ProtoMessage() {}
func (x *GetTabletsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[108]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[110]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7179,7 +7145,7 @@ func (x *GetTabletsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetTabletsRequest.ProtoReflect.Descriptor instead.
func (*GetTabletsRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{108}
+ return file_vtctldata_proto_rawDescGZIP(), []int{110}
}
func (x *GetTabletsRequest) GetKeyspace() string {
@@ -7234,11 +7200,9 @@ type GetTabletsResponse struct {
func (x *GetTabletsResponse) Reset() {
*x = GetTabletsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[109]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[111]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetTabletsResponse) String() string {
@@ -7248,8 +7212,8 @@ func (x *GetTabletsResponse) String() string {
func (*GetTabletsResponse) ProtoMessage() {}
func (x *GetTabletsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[109]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[111]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7261,7 +7225,7 @@ func (x *GetTabletsResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetTabletsResponse.ProtoReflect.Descriptor instead.
func (*GetTabletsResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{109}
+ return file_vtctldata_proto_rawDescGZIP(), []int{111}
}
func (x *GetTabletsResponse) GetTablets() []*topodata.Tablet {
@@ -7282,11 +7246,9 @@ type GetThrottlerStatusRequest struct {
func (x *GetThrottlerStatusRequest) Reset() {
*x = GetThrottlerStatusRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[110]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[112]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetThrottlerStatusRequest) String() string {
@@ -7296,8 +7258,8 @@ func (x *GetThrottlerStatusRequest) String() string {
func (*GetThrottlerStatusRequest) ProtoMessage() {}
func (x *GetThrottlerStatusRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[110]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[112]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7309,7 +7271,7 @@ func (x *GetThrottlerStatusRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetThrottlerStatusRequest.ProtoReflect.Descriptor instead.
func (*GetThrottlerStatusRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{110}
+ return file_vtctldata_proto_rawDescGZIP(), []int{112}
}
func (x *GetThrottlerStatusRequest) GetTabletAlias() *topodata.TabletAlias {
@@ -7329,11 +7291,9 @@ type GetThrottlerStatusResponse struct {
func (x *GetThrottlerStatusResponse) Reset() {
*x = GetThrottlerStatusResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[111]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[113]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetThrottlerStatusResponse) String() string {
@@ -7343,8 +7303,8 @@ func (x *GetThrottlerStatusResponse) String() string {
func (*GetThrottlerStatusResponse) ProtoMessage() {}
func (x *GetThrottlerStatusResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[111]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[113]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7356,7 +7316,7 @@ func (x *GetThrottlerStatusResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetThrottlerStatusResponse.ProtoReflect.Descriptor instead.
func (*GetThrottlerStatusResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{111}
+ return file_vtctldata_proto_rawDescGZIP(), []int{113}
}
func (x *GetThrottlerStatusResponse) GetStatus() *tabletmanagerdata.GetThrottlerStatusResponse {
@@ -7378,11 +7338,9 @@ type GetTopologyPathRequest struct {
func (x *GetTopologyPathRequest) Reset() {
*x = GetTopologyPathRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[112]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[114]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetTopologyPathRequest) String() string {
@@ -7392,8 +7350,8 @@ func (x *GetTopologyPathRequest) String() string {
func (*GetTopologyPathRequest) ProtoMessage() {}
func (x *GetTopologyPathRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[112]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[114]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7405,7 +7363,7 @@ func (x *GetTopologyPathRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetTopologyPathRequest.ProtoReflect.Descriptor instead.
func (*GetTopologyPathRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{112}
+ return file_vtctldata_proto_rawDescGZIP(), []int{114}
}
func (x *GetTopologyPathRequest) GetPath() string {
@@ -7439,11 +7397,9 @@ type GetTopologyPathResponse struct {
func (x *GetTopologyPathResponse) Reset() {
*x = GetTopologyPathResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[113]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[115]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetTopologyPathResponse) String() string {
@@ -7453,8 +7409,8 @@ func (x *GetTopologyPathResponse) String() string {
func (*GetTopologyPathResponse) ProtoMessage() {}
func (x *GetTopologyPathResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[113]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[115]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7466,7 +7422,7 @@ func (x *GetTopologyPathResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetTopologyPathResponse.ProtoReflect.Descriptor instead.
func (*GetTopologyPathResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{113}
+ return file_vtctldata_proto_rawDescGZIP(), []int{115}
}
func (x *GetTopologyPathResponse) GetCell() *TopologyCell {
@@ -7492,11 +7448,9 @@ type TopologyCell struct {
func (x *TopologyCell) Reset() {
*x = TopologyCell{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[114]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[116]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *TopologyCell) String() string {
@@ -7506,8 +7460,8 @@ func (x *TopologyCell) String() string {
func (*TopologyCell) ProtoMessage() {}
func (x *TopologyCell) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[114]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[116]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7519,7 +7473,7 @@ func (x *TopologyCell) ProtoReflect() protoreflect.Message {
// Deprecated: Use TopologyCell.ProtoReflect.Descriptor instead.
func (*TopologyCell) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{114}
+ return file_vtctldata_proto_rawDescGZIP(), []int{116}
}
func (x *TopologyCell) GetName() string {
@@ -7568,11 +7522,9 @@ type GetUnresolvedTransactionsRequest struct {
func (x *GetUnresolvedTransactionsRequest) Reset() {
*x = GetUnresolvedTransactionsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[115]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[117]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetUnresolvedTransactionsRequest) String() string {
@@ -7582,8 +7534,8 @@ func (x *GetUnresolvedTransactionsRequest) String() string {
func (*GetUnresolvedTransactionsRequest) ProtoMessage() {}
func (x *GetUnresolvedTransactionsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[115]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[117]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7595,7 +7547,7 @@ func (x *GetUnresolvedTransactionsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetUnresolvedTransactionsRequest.ProtoReflect.Descriptor instead.
func (*GetUnresolvedTransactionsRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{115}
+ return file_vtctldata_proto_rawDescGZIP(), []int{117}
}
func (x *GetUnresolvedTransactionsRequest) GetKeyspace() string {
@@ -7622,11 +7574,9 @@ type GetUnresolvedTransactionsResponse struct {
func (x *GetUnresolvedTransactionsResponse) Reset() {
*x = GetUnresolvedTransactionsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[116]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[118]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetUnresolvedTransactionsResponse) String() string {
@@ -7636,8 +7586,8 @@ func (x *GetUnresolvedTransactionsResponse) String() string {
func (*GetUnresolvedTransactionsResponse) ProtoMessage() {}
func (x *GetUnresolvedTransactionsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[116]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[118]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7649,7 +7599,7 @@ func (x *GetUnresolvedTransactionsResponse) ProtoReflect() protoreflect.Message
// Deprecated: Use GetUnresolvedTransactionsResponse.ProtoReflect.Descriptor instead.
func (*GetUnresolvedTransactionsResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{116}
+ return file_vtctldata_proto_rawDescGZIP(), []int{118}
}
func (x *GetUnresolvedTransactionsResponse) GetTransactions() []*query.TransactionMetadata {
@@ -7659,33 +7609,30 @@ func (x *GetUnresolvedTransactionsResponse) GetTransactions() []*query.Transacti
return nil
}
-type ConcludeTransactionRequest struct {
+type GetTransactionInfoRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- Dtid string `protobuf:"bytes,1,opt,name=dtid,proto3" json:"dtid,omitempty"`
- Participants []*query.Target `protobuf:"bytes,2,rep,name=participants,proto3" json:"participants,omitempty"`
+ Dtid string `protobuf:"bytes,1,opt,name=dtid,proto3" json:"dtid,omitempty"`
}
-func (x *ConcludeTransactionRequest) Reset() {
- *x = ConcludeTransactionRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[117]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+func (x *GetTransactionInfoRequest) Reset() {
+ *x = GetTransactionInfoRequest{}
+ mi := &file_vtctldata_proto_msgTypes[119]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
-func (x *ConcludeTransactionRequest) String() string {
+func (x *GetTransactionInfoRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*ConcludeTransactionRequest) ProtoMessage() {}
+func (*GetTransactionInfoRequest) ProtoMessage() {}
-func (x *ConcludeTransactionRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[117]
- if protoimpl.UnsafeEnabled && x != nil {
+func (x *GetTransactionInfoRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_vtctldata_proto_msgTypes[119]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7695,49 +7642,46 @@ func (x *ConcludeTransactionRequest) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use ConcludeTransactionRequest.ProtoReflect.Descriptor instead.
-func (*ConcludeTransactionRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{117}
+// Deprecated: Use GetTransactionInfoRequest.ProtoReflect.Descriptor instead.
+func (*GetTransactionInfoRequest) Descriptor() ([]byte, []int) {
+ return file_vtctldata_proto_rawDescGZIP(), []int{119}
}
-func (x *ConcludeTransactionRequest) GetDtid() string {
+func (x *GetTransactionInfoRequest) GetDtid() string {
if x != nil {
return x.Dtid
}
return ""
}
-func (x *ConcludeTransactionRequest) GetParticipants() []*query.Target {
- if x != nil {
- return x.Participants
- }
- return nil
-}
-
-type ConcludeTransactionResponse struct {
+type ShardTransactionState struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
+
+ Shard string `protobuf:"bytes,1,opt,name=shard,proto3" json:"shard,omitempty"`
+ State string `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"`
+ Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"`
+ TimeCreated int64 `protobuf:"varint,4,opt,name=time_created,json=timeCreated,proto3" json:"time_created,omitempty"`
+ Statements []string `protobuf:"bytes,5,rep,name=statements,proto3" json:"statements,omitempty"`
}
-func (x *ConcludeTransactionResponse) Reset() {
- *x = ConcludeTransactionResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[118]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+func (x *ShardTransactionState) Reset() {
+ *x = ShardTransactionState{}
+ mi := &file_vtctldata_proto_msgTypes[120]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
-func (x *ConcludeTransactionResponse) String() string {
+func (x *ShardTransactionState) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*ConcludeTransactionResponse) ProtoMessage() {}
+func (*ShardTransactionState) ProtoMessage() {}
-func (x *ConcludeTransactionResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[118]
- if protoimpl.UnsafeEnabled && x != nil {
+func (x *ShardTransactionState) ProtoReflect() protoreflect.Message {
+ mi := &file_vtctldata_proto_msgTypes[120]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7747,37 +7691,212 @@ func (x *ConcludeTransactionResponse) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use ConcludeTransactionResponse.ProtoReflect.Descriptor instead.
-func (*ConcludeTransactionResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{118}
+// Deprecated: Use ShardTransactionState.ProtoReflect.Descriptor instead.
+func (*ShardTransactionState) Descriptor() ([]byte, []int) {
+ return file_vtctldata_proto_rawDescGZIP(), []int{120}
}
-type GetVSchemaRequest struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- Keyspace string `protobuf:"bytes,1,opt,name=keyspace,proto3" json:"keyspace,omitempty"`
+func (x *ShardTransactionState) GetShard() string {
+ if x != nil {
+ return x.Shard
+ }
+ return ""
}
-func (x *GetVSchemaRequest) Reset() {
- *x = GetVSchemaRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[119]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
+func (x *ShardTransactionState) GetState() string {
+ if x != nil {
+ return x.State
}
+ return ""
}
-func (x *GetVSchemaRequest) String() string {
- return protoimpl.X.MessageStringOf(x)
+func (x *ShardTransactionState) GetMessage() string {
+ if x != nil {
+ return x.Message
+ }
+ return ""
}
-func (*GetVSchemaRequest) ProtoMessage() {}
+func (x *ShardTransactionState) GetTimeCreated() int64 {
+ if x != nil {
+ return x.TimeCreated
+ }
+ return 0
+}
+
+func (x *ShardTransactionState) GetStatements() []string {
+ if x != nil {
+ return x.Statements
+ }
+ return nil
+}
+
+type GetTransactionInfoResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Metadata *query.TransactionMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
+ ShardStates []*ShardTransactionState `protobuf:"bytes,2,rep,name=shard_states,json=shardStates,proto3" json:"shard_states,omitempty"`
+}
+
+func (x *GetTransactionInfoResponse) Reset() {
+ *x = GetTransactionInfoResponse{}
+ mi := &file_vtctldata_proto_msgTypes[121]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *GetTransactionInfoResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetTransactionInfoResponse) ProtoMessage() {}
+
+func (x *GetTransactionInfoResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_vtctldata_proto_msgTypes[121]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetTransactionInfoResponse.ProtoReflect.Descriptor instead.
+func (*GetTransactionInfoResponse) Descriptor() ([]byte, []int) {
+ return file_vtctldata_proto_rawDescGZIP(), []int{121}
+}
+
+func (x *GetTransactionInfoResponse) GetMetadata() *query.TransactionMetadata {
+ if x != nil {
+ return x.Metadata
+ }
+ return nil
+}
+
+func (x *GetTransactionInfoResponse) GetShardStates() []*ShardTransactionState {
+ if x != nil {
+ return x.ShardStates
+ }
+ return nil
+}
+
+type ConcludeTransactionRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Dtid string `protobuf:"bytes,1,opt,name=dtid,proto3" json:"dtid,omitempty"`
+ Participants []*query.Target `protobuf:"bytes,2,rep,name=participants,proto3" json:"participants,omitempty"`
+}
+
+func (x *ConcludeTransactionRequest) Reset() {
+ *x = ConcludeTransactionRequest{}
+ mi := &file_vtctldata_proto_msgTypes[122]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ConcludeTransactionRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ConcludeTransactionRequest) ProtoMessage() {}
+
+func (x *ConcludeTransactionRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_vtctldata_proto_msgTypes[122]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ConcludeTransactionRequest.ProtoReflect.Descriptor instead.
+func (*ConcludeTransactionRequest) Descriptor() ([]byte, []int) {
+ return file_vtctldata_proto_rawDescGZIP(), []int{122}
+}
+
+func (x *ConcludeTransactionRequest) GetDtid() string {
+ if x != nil {
+ return x.Dtid
+ }
+ return ""
+}
+
+func (x *ConcludeTransactionRequest) GetParticipants() []*query.Target {
+ if x != nil {
+ return x.Participants
+ }
+ return nil
+}
+
+type ConcludeTransactionResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *ConcludeTransactionResponse) Reset() {
+ *x = ConcludeTransactionResponse{}
+ mi := &file_vtctldata_proto_msgTypes[123]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ConcludeTransactionResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ConcludeTransactionResponse) ProtoMessage() {}
+
+func (x *ConcludeTransactionResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_vtctldata_proto_msgTypes[123]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ConcludeTransactionResponse.ProtoReflect.Descriptor instead.
+func (*ConcludeTransactionResponse) Descriptor() ([]byte, []int) {
+ return file_vtctldata_proto_rawDescGZIP(), []int{123}
+}
+
+type GetVSchemaRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Keyspace string `protobuf:"bytes,1,opt,name=keyspace,proto3" json:"keyspace,omitempty"`
+}
+
+func (x *GetVSchemaRequest) Reset() {
+ *x = GetVSchemaRequest{}
+ mi := &file_vtctldata_proto_msgTypes[124]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *GetVSchemaRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetVSchemaRequest) ProtoMessage() {}
func (x *GetVSchemaRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[119]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[124]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7789,7 +7908,7 @@ func (x *GetVSchemaRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetVSchemaRequest.ProtoReflect.Descriptor instead.
func (*GetVSchemaRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{119}
+ return file_vtctldata_proto_rawDescGZIP(), []int{124}
}
func (x *GetVSchemaRequest) GetKeyspace() string {
@@ -7809,11 +7928,9 @@ type GetVersionRequest struct {
func (x *GetVersionRequest) Reset() {
*x = GetVersionRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[120]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[125]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetVersionRequest) String() string {
@@ -7823,8 +7940,8 @@ func (x *GetVersionRequest) String() string {
func (*GetVersionRequest) ProtoMessage() {}
func (x *GetVersionRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[120]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[125]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7836,7 +7953,7 @@ func (x *GetVersionRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetVersionRequest.ProtoReflect.Descriptor instead.
func (*GetVersionRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{120}
+ return file_vtctldata_proto_rawDescGZIP(), []int{125}
}
func (x *GetVersionRequest) GetTabletAlias() *topodata.TabletAlias {
@@ -7856,11 +7973,9 @@ type GetVersionResponse struct {
func (x *GetVersionResponse) Reset() {
*x = GetVersionResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[121]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[126]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetVersionResponse) String() string {
@@ -7870,8 +7985,8 @@ func (x *GetVersionResponse) String() string {
func (*GetVersionResponse) ProtoMessage() {}
func (x *GetVersionResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[121]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[126]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7883,7 +7998,7 @@ func (x *GetVersionResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetVersionResponse.ProtoReflect.Descriptor instead.
func (*GetVersionResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{121}
+ return file_vtctldata_proto_rawDescGZIP(), []int{126}
}
func (x *GetVersionResponse) GetVersion() string {
@@ -7903,11 +8018,9 @@ type GetVSchemaResponse struct {
func (x *GetVSchemaResponse) Reset() {
*x = GetVSchemaResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[122]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[127]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetVSchemaResponse) String() string {
@@ -7917,8 +8030,8 @@ func (x *GetVSchemaResponse) String() string {
func (*GetVSchemaResponse) ProtoMessage() {}
func (x *GetVSchemaResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[122]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[127]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7930,7 +8043,7 @@ func (x *GetVSchemaResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetVSchemaResponse.ProtoReflect.Descriptor instead.
func (*GetVSchemaResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{122}
+ return file_vtctldata_proto_rawDescGZIP(), []int{127}
}
func (x *GetVSchemaResponse) GetVSchema() *vschema.Keyspace {
@@ -7956,11 +8069,9 @@ type GetWorkflowsRequest struct {
func (x *GetWorkflowsRequest) Reset() {
*x = GetWorkflowsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[123]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[128]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetWorkflowsRequest) String() string {
@@ -7970,8 +8081,8 @@ func (x *GetWorkflowsRequest) String() string {
func (*GetWorkflowsRequest) ProtoMessage() {}
func (x *GetWorkflowsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[123]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[128]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -7983,7 +8094,7 @@ func (x *GetWorkflowsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetWorkflowsRequest.ProtoReflect.Descriptor instead.
func (*GetWorkflowsRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{123}
+ return file_vtctldata_proto_rawDescGZIP(), []int{128}
}
func (x *GetWorkflowsRequest) GetKeyspace() string {
@@ -8038,11 +8149,9 @@ type GetWorkflowsResponse struct {
func (x *GetWorkflowsResponse) Reset() {
*x = GetWorkflowsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[124]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[129]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetWorkflowsResponse) String() string {
@@ -8052,8 +8161,8 @@ func (x *GetWorkflowsResponse) String() string {
func (*GetWorkflowsResponse) ProtoMessage() {}
func (x *GetWorkflowsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[124]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[129]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -8065,7 +8174,7 @@ func (x *GetWorkflowsResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetWorkflowsResponse.ProtoReflect.Descriptor instead.
func (*GetWorkflowsResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{124}
+ return file_vtctldata_proto_rawDescGZIP(), []int{129}
}
func (x *GetWorkflowsResponse) GetWorkflows() []*Workflow {
@@ -8089,11 +8198,9 @@ type InitShardPrimaryRequest struct {
func (x *InitShardPrimaryRequest) Reset() {
*x = InitShardPrimaryRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[125]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[130]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *InitShardPrimaryRequest) String() string {
@@ -8103,8 +8210,8 @@ func (x *InitShardPrimaryRequest) String() string {
func (*InitShardPrimaryRequest) ProtoMessage() {}
func (x *InitShardPrimaryRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[125]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[130]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -8116,7 +8223,7 @@ func (x *InitShardPrimaryRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use InitShardPrimaryRequest.ProtoReflect.Descriptor instead.
func (*InitShardPrimaryRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{125}
+ return file_vtctldata_proto_rawDescGZIP(), []int{130}
}
func (x *InitShardPrimaryRequest) GetKeyspace() string {
@@ -8164,11 +8271,9 @@ type InitShardPrimaryResponse struct {
func (x *InitShardPrimaryResponse) Reset() {
*x = InitShardPrimaryResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[126]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[131]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *InitShardPrimaryResponse) String() string {
@@ -8178,8 +8283,8 @@ func (x *InitShardPrimaryResponse) String() string {
func (*InitShardPrimaryResponse) ProtoMessage() {}
func (x *InitShardPrimaryResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[126]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[131]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -8191,7 +8296,7 @@ func (x *InitShardPrimaryResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use InitShardPrimaryResponse.ProtoReflect.Descriptor instead.
func (*InitShardPrimaryResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{126}
+ return file_vtctldata_proto_rawDescGZIP(), []int{131}
}
func (x *InitShardPrimaryResponse) GetEvents() []*logutil.Event {
@@ -8212,11 +8317,9 @@ type LaunchSchemaMigrationRequest struct {
func (x *LaunchSchemaMigrationRequest) Reset() {
*x = LaunchSchemaMigrationRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[127]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[132]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *LaunchSchemaMigrationRequest) String() string {
@@ -8226,8 +8329,8 @@ func (x *LaunchSchemaMigrationRequest) String() string {
func (*LaunchSchemaMigrationRequest) ProtoMessage() {}
func (x *LaunchSchemaMigrationRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[127]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[132]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -8239,7 +8342,7 @@ func (x *LaunchSchemaMigrationRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use LaunchSchemaMigrationRequest.ProtoReflect.Descriptor instead.
func (*LaunchSchemaMigrationRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{127}
+ return file_vtctldata_proto_rawDescGZIP(), []int{132}
}
func (x *LaunchSchemaMigrationRequest) GetKeyspace() string {
@@ -8266,11 +8369,9 @@ type LaunchSchemaMigrationResponse struct {
func (x *LaunchSchemaMigrationResponse) Reset() {
*x = LaunchSchemaMigrationResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[128]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[133]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *LaunchSchemaMigrationResponse) String() string {
@@ -8280,8 +8381,8 @@ func (x *LaunchSchemaMigrationResponse) String() string {
func (*LaunchSchemaMigrationResponse) ProtoMessage() {}
func (x *LaunchSchemaMigrationResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[128]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[133]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -8293,7 +8394,7 @@ func (x *LaunchSchemaMigrationResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use LaunchSchemaMigrationResponse.ProtoReflect.Descriptor instead.
func (*LaunchSchemaMigrationResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{128}
+ return file_vtctldata_proto_rawDescGZIP(), []int{133}
}
func (x *LaunchSchemaMigrationResponse) GetRowsAffectedByShard() map[string]uint64 {
@@ -8319,11 +8420,9 @@ type LookupVindexCreateRequest struct {
func (x *LookupVindexCreateRequest) Reset() {
*x = LookupVindexCreateRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[129]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[134]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *LookupVindexCreateRequest) String() string {
@@ -8333,8 +8432,8 @@ func (x *LookupVindexCreateRequest) String() string {
func (*LookupVindexCreateRequest) ProtoMessage() {}
func (x *LookupVindexCreateRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[129]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[134]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -8346,7 +8445,7 @@ func (x *LookupVindexCreateRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use LookupVindexCreateRequest.ProtoReflect.Descriptor instead.
func (*LookupVindexCreateRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{129}
+ return file_vtctldata_proto_rawDescGZIP(), []int{134}
}
func (x *LookupVindexCreateRequest) GetKeyspace() string {
@@ -8406,11 +8505,9 @@ type LookupVindexCreateResponse struct {
func (x *LookupVindexCreateResponse) Reset() {
*x = LookupVindexCreateResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[130]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[135]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *LookupVindexCreateResponse) String() string {
@@ -8420,8 +8517,8 @@ func (x *LookupVindexCreateResponse) String() string {
func (*LookupVindexCreateResponse) ProtoMessage() {}
func (x *LookupVindexCreateResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[130]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[135]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -8433,7 +8530,7 @@ func (x *LookupVindexCreateResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use LookupVindexCreateResponse.ProtoReflect.Descriptor instead.
func (*LookupVindexCreateResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{130}
+ return file_vtctldata_proto_rawDescGZIP(), []int{135}
}
type LookupVindexExternalizeRequest struct {
@@ -8451,11 +8548,9 @@ type LookupVindexExternalizeRequest struct {
func (x *LookupVindexExternalizeRequest) Reset() {
*x = LookupVindexExternalizeRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[131]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[136]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *LookupVindexExternalizeRequest) String() string {
@@ -8465,8 +8560,8 @@ func (x *LookupVindexExternalizeRequest) String() string {
func (*LookupVindexExternalizeRequest) ProtoMessage() {}
func (x *LookupVindexExternalizeRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[131]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[136]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -8478,7 +8573,7 @@ func (x *LookupVindexExternalizeRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use LookupVindexExternalizeRequest.ProtoReflect.Descriptor instead.
func (*LookupVindexExternalizeRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{131}
+ return file_vtctldata_proto_rawDescGZIP(), []int{136}
}
func (x *LookupVindexExternalizeRequest) GetKeyspace() string {
@@ -8513,11 +8608,9 @@ type LookupVindexExternalizeResponse struct {
func (x *LookupVindexExternalizeResponse) Reset() {
*x = LookupVindexExternalizeResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[132]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[137]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *LookupVindexExternalizeResponse) String() string {
@@ -8527,8 +8620,8 @@ func (x *LookupVindexExternalizeResponse) String() string {
func (*LookupVindexExternalizeResponse) ProtoMessage() {}
func (x *LookupVindexExternalizeResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[132]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[137]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -8540,7 +8633,7 @@ func (x *LookupVindexExternalizeResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use LookupVindexExternalizeResponse.ProtoReflect.Descriptor instead.
func (*LookupVindexExternalizeResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{132}
+ return file_vtctldata_proto_rawDescGZIP(), []int{137}
}
func (x *LookupVindexExternalizeResponse) GetWorkflowDeleted() bool {
@@ -8560,11 +8653,9 @@ type MaterializeCreateRequest struct {
func (x *MaterializeCreateRequest) Reset() {
*x = MaterializeCreateRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[133]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[138]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MaterializeCreateRequest) String() string {
@@ -8574,8 +8665,8 @@ func (x *MaterializeCreateRequest) String() string {
func (*MaterializeCreateRequest) ProtoMessage() {}
func (x *MaterializeCreateRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[133]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[138]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -8587,7 +8678,7 @@ func (x *MaterializeCreateRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use MaterializeCreateRequest.ProtoReflect.Descriptor instead.
func (*MaterializeCreateRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{133}
+ return file_vtctldata_proto_rawDescGZIP(), []int{138}
}
func (x *MaterializeCreateRequest) GetSettings() *MaterializeSettings {
@@ -8605,11 +8696,9 @@ type MaterializeCreateResponse struct {
func (x *MaterializeCreateResponse) Reset() {
*x = MaterializeCreateResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[134]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[139]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MaterializeCreateResponse) String() string {
@@ -8619,8 +8708,8 @@ func (x *MaterializeCreateResponse) String() string {
func (*MaterializeCreateResponse) ProtoMessage() {}
func (x *MaterializeCreateResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[134]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[139]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -8632,7 +8721,7 @@ func (x *MaterializeCreateResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use MaterializeCreateResponse.ProtoReflect.Descriptor instead.
func (*MaterializeCreateResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{134}
+ return file_vtctldata_proto_rawDescGZIP(), []int{139}
}
type MigrateCreateRequest struct {
@@ -8670,11 +8759,9 @@ type MigrateCreateRequest struct {
func (x *MigrateCreateRequest) Reset() {
*x = MigrateCreateRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[135]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[140]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MigrateCreateRequest) String() string {
@@ -8684,8 +8771,8 @@ func (x *MigrateCreateRequest) String() string {
func (*MigrateCreateRequest) ProtoMessage() {}
func (x *MigrateCreateRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[135]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[140]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -8697,7 +8784,7 @@ func (x *MigrateCreateRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use MigrateCreateRequest.ProtoReflect.Descriptor instead.
func (*MigrateCreateRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{135}
+ return file_vtctldata_proto_rawDescGZIP(), []int{140}
}
func (x *MigrateCreateRequest) GetWorkflow() string {
@@ -8834,11 +8921,9 @@ type MigrateCompleteRequest struct {
func (x *MigrateCompleteRequest) Reset() {
*x = MigrateCompleteRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[136]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[141]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MigrateCompleteRequest) String() string {
@@ -8848,8 +8933,8 @@ func (x *MigrateCompleteRequest) String() string {
func (*MigrateCompleteRequest) ProtoMessage() {}
func (x *MigrateCompleteRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[136]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[141]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -8861,7 +8946,7 @@ func (x *MigrateCompleteRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use MigrateCompleteRequest.ProtoReflect.Descriptor instead.
func (*MigrateCompleteRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{136}
+ return file_vtctldata_proto_rawDescGZIP(), []int{141}
}
func (x *MigrateCompleteRequest) GetWorkflow() string {
@@ -8917,11 +9002,9 @@ type MigrateCompleteResponse struct {
func (x *MigrateCompleteResponse) Reset() {
*x = MigrateCompleteResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[137]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[142]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MigrateCompleteResponse) String() string {
@@ -8931,8 +9014,8 @@ func (x *MigrateCompleteResponse) String() string {
func (*MigrateCompleteResponse) ProtoMessage() {}
func (x *MigrateCompleteResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[137]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[142]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -8944,7 +9027,7 @@ func (x *MigrateCompleteResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use MigrateCompleteResponse.ProtoReflect.Descriptor instead.
func (*MigrateCompleteResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{137}
+ return file_vtctldata_proto_rawDescGZIP(), []int{142}
}
func (x *MigrateCompleteResponse) GetSummary() string {
@@ -8974,11 +9057,9 @@ type MountRegisterRequest struct {
func (x *MountRegisterRequest) Reset() {
*x = MountRegisterRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[138]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[143]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MountRegisterRequest) String() string {
@@ -8988,8 +9069,8 @@ func (x *MountRegisterRequest) String() string {
func (*MountRegisterRequest) ProtoMessage() {}
func (x *MountRegisterRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[138]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[143]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -9001,7 +9082,7 @@ func (x *MountRegisterRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use MountRegisterRequest.ProtoReflect.Descriptor instead.
func (*MountRegisterRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{138}
+ return file_vtctldata_proto_rawDescGZIP(), []int{143}
}
func (x *MountRegisterRequest) GetTopoType() string {
@@ -9040,11 +9121,9 @@ type MountRegisterResponse struct {
func (x *MountRegisterResponse) Reset() {
*x = MountRegisterResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[139]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[144]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MountRegisterResponse) String() string {
@@ -9054,8 +9133,8 @@ func (x *MountRegisterResponse) String() string {
func (*MountRegisterResponse) ProtoMessage() {}
func (x *MountRegisterResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[139]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[144]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -9067,7 +9146,7 @@ func (x *MountRegisterResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use MountRegisterResponse.ProtoReflect.Descriptor instead.
func (*MountRegisterResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{139}
+ return file_vtctldata_proto_rawDescGZIP(), []int{144}
}
type MountUnregisterRequest struct {
@@ -9080,11 +9159,9 @@ type MountUnregisterRequest struct {
func (x *MountUnregisterRequest) Reset() {
*x = MountUnregisterRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[140]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[145]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MountUnregisterRequest) String() string {
@@ -9094,8 +9171,8 @@ func (x *MountUnregisterRequest) String() string {
func (*MountUnregisterRequest) ProtoMessage() {}
func (x *MountUnregisterRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[140]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[145]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -9107,7 +9184,7 @@ func (x *MountUnregisterRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use MountUnregisterRequest.ProtoReflect.Descriptor instead.
func (*MountUnregisterRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{140}
+ return file_vtctldata_proto_rawDescGZIP(), []int{145}
}
func (x *MountUnregisterRequest) GetName() string {
@@ -9125,11 +9202,9 @@ type MountUnregisterResponse struct {
func (x *MountUnregisterResponse) Reset() {
*x = MountUnregisterResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[141]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[146]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MountUnregisterResponse) String() string {
@@ -9139,8 +9214,8 @@ func (x *MountUnregisterResponse) String() string {
func (*MountUnregisterResponse) ProtoMessage() {}
func (x *MountUnregisterResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[141]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[146]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -9152,7 +9227,7 @@ func (x *MountUnregisterResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use MountUnregisterResponse.ProtoReflect.Descriptor instead.
func (*MountUnregisterResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{141}
+ return file_vtctldata_proto_rawDescGZIP(), []int{146}
}
type MountShowRequest struct {
@@ -9165,11 +9240,9 @@ type MountShowRequest struct {
func (x *MountShowRequest) Reset() {
*x = MountShowRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[142]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[147]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MountShowRequest) String() string {
@@ -9179,8 +9252,8 @@ func (x *MountShowRequest) String() string {
func (*MountShowRequest) ProtoMessage() {}
func (x *MountShowRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[142]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[147]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -9192,7 +9265,7 @@ func (x *MountShowRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use MountShowRequest.ProtoReflect.Descriptor instead.
func (*MountShowRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{142}
+ return file_vtctldata_proto_rawDescGZIP(), []int{147}
}
func (x *MountShowRequest) GetName() string {
@@ -9215,11 +9288,9 @@ type MountShowResponse struct {
func (x *MountShowResponse) Reset() {
*x = MountShowResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[143]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[148]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MountShowResponse) String() string {
@@ -9229,8 +9300,8 @@ func (x *MountShowResponse) String() string {
func (*MountShowResponse) ProtoMessage() {}
func (x *MountShowResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[143]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[148]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -9242,7 +9313,7 @@ func (x *MountShowResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use MountShowResponse.ProtoReflect.Descriptor instead.
func (*MountShowResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{143}
+ return file_vtctldata_proto_rawDescGZIP(), []int{148}
}
func (x *MountShowResponse) GetTopoType() string {
@@ -9281,11 +9352,9 @@ type MountListRequest struct {
func (x *MountListRequest) Reset() {
*x = MountListRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[144]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[149]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MountListRequest) String() string {
@@ -9295,8 +9364,8 @@ func (x *MountListRequest) String() string {
func (*MountListRequest) ProtoMessage() {}
func (x *MountListRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[144]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[149]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -9308,7 +9377,7 @@ func (x *MountListRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use MountListRequest.ProtoReflect.Descriptor instead.
func (*MountListRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{144}
+ return file_vtctldata_proto_rawDescGZIP(), []int{149}
}
type MountListResponse struct {
@@ -9321,11 +9390,9 @@ type MountListResponse struct {
func (x *MountListResponse) Reset() {
*x = MountListResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[145]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[150]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MountListResponse) String() string {
@@ -9335,8 +9402,8 @@ func (x *MountListResponse) String() string {
func (*MountListResponse) ProtoMessage() {}
func (x *MountListResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[145]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[150]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -9348,7 +9415,7 @@ func (x *MountListResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use MountListResponse.ProtoReflect.Descriptor instead.
func (*MountListResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{145}
+ return file_vtctldata_proto_rawDescGZIP(), []int{150}
}
func (x *MountListResponse) GetNames() []string {
@@ -9398,11 +9465,9 @@ type MoveTablesCreateRequest struct {
func (x *MoveTablesCreateRequest) Reset() {
*x = MoveTablesCreateRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[146]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[151]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MoveTablesCreateRequest) String() string {
@@ -9412,8 +9477,8 @@ func (x *MoveTablesCreateRequest) String() string {
func (*MoveTablesCreateRequest) ProtoMessage() {}
func (x *MoveTablesCreateRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[146]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[151]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -9425,7 +9490,7 @@ func (x *MoveTablesCreateRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use MoveTablesCreateRequest.ProtoReflect.Descriptor instead.
func (*MoveTablesCreateRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{146}
+ return file_vtctldata_proto_rawDescGZIP(), []int{151}
}
func (x *MoveTablesCreateRequest) GetWorkflow() string {
@@ -9579,11 +9644,9 @@ type MoveTablesCreateResponse struct {
func (x *MoveTablesCreateResponse) Reset() {
*x = MoveTablesCreateResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[147]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[152]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MoveTablesCreateResponse) String() string {
@@ -9593,8 +9656,8 @@ func (x *MoveTablesCreateResponse) String() string {
func (*MoveTablesCreateResponse) ProtoMessage() {}
func (x *MoveTablesCreateResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[147]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[152]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -9606,7 +9669,7 @@ func (x *MoveTablesCreateResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use MoveTablesCreateResponse.ProtoReflect.Descriptor instead.
func (*MoveTablesCreateResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{147}
+ return file_vtctldata_proto_rawDescGZIP(), []int{152}
}
func (x *MoveTablesCreateResponse) GetSummary() string {
@@ -9639,11 +9702,9 @@ type MoveTablesCompleteRequest struct {
func (x *MoveTablesCompleteRequest) Reset() {
*x = MoveTablesCompleteRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[148]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[153]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MoveTablesCompleteRequest) String() string {
@@ -9653,8 +9714,8 @@ func (x *MoveTablesCompleteRequest) String() string {
func (*MoveTablesCompleteRequest) ProtoMessage() {}
func (x *MoveTablesCompleteRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[148]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[153]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -9666,7 +9727,7 @@ func (x *MoveTablesCompleteRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use MoveTablesCompleteRequest.ProtoReflect.Descriptor instead.
func (*MoveTablesCompleteRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{148}
+ return file_vtctldata_proto_rawDescGZIP(), []int{153}
}
func (x *MoveTablesCompleteRequest) GetWorkflow() string {
@@ -9729,11 +9790,9 @@ type MoveTablesCompleteResponse struct {
func (x *MoveTablesCompleteResponse) Reset() {
*x = MoveTablesCompleteResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[149]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[154]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MoveTablesCompleteResponse) String() string {
@@ -9743,8 +9802,8 @@ func (x *MoveTablesCompleteResponse) String() string {
func (*MoveTablesCompleteResponse) ProtoMessage() {}
func (x *MoveTablesCompleteResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[149]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[154]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -9756,7 +9815,7 @@ func (x *MoveTablesCompleteResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use MoveTablesCompleteResponse.ProtoReflect.Descriptor instead.
func (*MoveTablesCompleteResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{149}
+ return file_vtctldata_proto_rawDescGZIP(), []int{154}
}
func (x *MoveTablesCompleteResponse) GetSummary() string {
@@ -9783,11 +9842,9 @@ type PingTabletRequest struct {
func (x *PingTabletRequest) Reset() {
*x = PingTabletRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[150]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[155]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *PingTabletRequest) String() string {
@@ -9797,8 +9854,8 @@ func (x *PingTabletRequest) String() string {
func (*PingTabletRequest) ProtoMessage() {}
func (x *PingTabletRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[150]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[155]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -9810,7 +9867,7 @@ func (x *PingTabletRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use PingTabletRequest.ProtoReflect.Descriptor instead.
func (*PingTabletRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{150}
+ return file_vtctldata_proto_rawDescGZIP(), []int{155}
}
func (x *PingTabletRequest) GetTabletAlias() *topodata.TabletAlias {
@@ -9828,11 +9885,9 @@ type PingTabletResponse struct {
func (x *PingTabletResponse) Reset() {
*x = PingTabletResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[151]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[156]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *PingTabletResponse) String() string {
@@ -9842,8 +9897,8 @@ func (x *PingTabletResponse) String() string {
func (*PingTabletResponse) ProtoMessage() {}
func (x *PingTabletResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[151]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[156]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -9855,7 +9910,7 @@ func (x *PingTabletResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use PingTabletResponse.ProtoReflect.Descriptor instead.
func (*PingTabletResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{151}
+ return file_vtctldata_proto_rawDescGZIP(), []int{156}
}
type PlannedReparentShardRequest struct {
@@ -9891,15 +9946,16 @@ type PlannedReparentShardRequest struct {
TolerableReplicationLag *vttime.Duration `protobuf:"bytes,6,opt,name=tolerable_replication_lag,json=tolerableReplicationLag,proto3" json:"tolerable_replication_lag,omitempty"`
// AllowCrossCellPromotion allows cross cell promotion,
AllowCrossCellPromotion bool `protobuf:"varint,7,opt,name=allow_cross_cell_promotion,json=allowCrossCellPromotion,proto3" json:"allow_cross_cell_promotion,omitempty"`
+ // ExpectedPrimary is the optional alias we expect to be the current primary in order for
+ // the reparent operation to succeed.
+ ExpectedPrimary *topodata.TabletAlias `protobuf:"bytes,8,opt,name=expected_primary,json=expectedPrimary,proto3" json:"expected_primary,omitempty"`
}
func (x *PlannedReparentShardRequest) Reset() {
*x = PlannedReparentShardRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[152]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[157]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *PlannedReparentShardRequest) String() string {
@@ -9909,8 +9965,8 @@ func (x *PlannedReparentShardRequest) String() string {
func (*PlannedReparentShardRequest) ProtoMessage() {}
func (x *PlannedReparentShardRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[152]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[157]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -9922,7 +9978,7 @@ func (x *PlannedReparentShardRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use PlannedReparentShardRequest.ProtoReflect.Descriptor instead.
func (*PlannedReparentShardRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{152}
+ return file_vtctldata_proto_rawDescGZIP(), []int{157}
}
func (x *PlannedReparentShardRequest) GetKeyspace() string {
@@ -9974,6 +10030,13 @@ func (x *PlannedReparentShardRequest) GetAllowCrossCellPromotion() bool {
return false
}
+func (x *PlannedReparentShardRequest) GetExpectedPrimary() *topodata.TabletAlias {
+ if x != nil {
+ return x.ExpectedPrimary
+ }
+ return nil
+}
+
type PlannedReparentShardResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -9993,11 +10056,9 @@ type PlannedReparentShardResponse struct {
func (x *PlannedReparentShardResponse) Reset() {
*x = PlannedReparentShardResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[153]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[158]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *PlannedReparentShardResponse) String() string {
@@ -10007,8 +10068,8 @@ func (x *PlannedReparentShardResponse) String() string {
func (*PlannedReparentShardResponse) ProtoMessage() {}
func (x *PlannedReparentShardResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[153]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[158]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -10020,7 +10081,7 @@ func (x *PlannedReparentShardResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use PlannedReparentShardResponse.ProtoReflect.Descriptor instead.
func (*PlannedReparentShardResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{153}
+ return file_vtctldata_proto_rawDescGZIP(), []int{158}
}
func (x *PlannedReparentShardResponse) GetKeyspace() string {
@@ -10065,11 +10126,9 @@ type RebuildKeyspaceGraphRequest struct {
func (x *RebuildKeyspaceGraphRequest) Reset() {
*x = RebuildKeyspaceGraphRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[154]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[159]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RebuildKeyspaceGraphRequest) String() string {
@@ -10079,8 +10138,8 @@ func (x *RebuildKeyspaceGraphRequest) String() string {
func (*RebuildKeyspaceGraphRequest) ProtoMessage() {}
func (x *RebuildKeyspaceGraphRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[154]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[159]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -10092,7 +10151,7 @@ func (x *RebuildKeyspaceGraphRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use RebuildKeyspaceGraphRequest.ProtoReflect.Descriptor instead.
func (*RebuildKeyspaceGraphRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{154}
+ return file_vtctldata_proto_rawDescGZIP(), []int{159}
}
func (x *RebuildKeyspaceGraphRequest) GetKeyspace() string {
@@ -10124,11 +10183,9 @@ type RebuildKeyspaceGraphResponse struct {
func (x *RebuildKeyspaceGraphResponse) Reset() {
*x = RebuildKeyspaceGraphResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[155]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[160]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RebuildKeyspaceGraphResponse) String() string {
@@ -10138,8 +10195,8 @@ func (x *RebuildKeyspaceGraphResponse) String() string {
func (*RebuildKeyspaceGraphResponse) ProtoMessage() {}
func (x *RebuildKeyspaceGraphResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[155]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[160]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -10151,7 +10208,7 @@ func (x *RebuildKeyspaceGraphResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use RebuildKeyspaceGraphResponse.ProtoReflect.Descriptor instead.
func (*RebuildKeyspaceGraphResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{155}
+ return file_vtctldata_proto_rawDescGZIP(), []int{160}
}
type RebuildVSchemaGraphRequest struct {
@@ -10166,11 +10223,9 @@ type RebuildVSchemaGraphRequest struct {
func (x *RebuildVSchemaGraphRequest) Reset() {
*x = RebuildVSchemaGraphRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[156]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[161]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RebuildVSchemaGraphRequest) String() string {
@@ -10180,8 +10235,8 @@ func (x *RebuildVSchemaGraphRequest) String() string {
func (*RebuildVSchemaGraphRequest) ProtoMessage() {}
func (x *RebuildVSchemaGraphRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[156]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[161]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -10193,7 +10248,7 @@ func (x *RebuildVSchemaGraphRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use RebuildVSchemaGraphRequest.ProtoReflect.Descriptor instead.
func (*RebuildVSchemaGraphRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{156}
+ return file_vtctldata_proto_rawDescGZIP(), []int{161}
}
func (x *RebuildVSchemaGraphRequest) GetCells() []string {
@@ -10211,11 +10266,9 @@ type RebuildVSchemaGraphResponse struct {
func (x *RebuildVSchemaGraphResponse) Reset() {
*x = RebuildVSchemaGraphResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[157]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[162]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RebuildVSchemaGraphResponse) String() string {
@@ -10225,8 +10278,8 @@ func (x *RebuildVSchemaGraphResponse) String() string {
func (*RebuildVSchemaGraphResponse) ProtoMessage() {}
func (x *RebuildVSchemaGraphResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[157]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[162]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -10238,7 +10291,7 @@ func (x *RebuildVSchemaGraphResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use RebuildVSchemaGraphResponse.ProtoReflect.Descriptor instead.
func (*RebuildVSchemaGraphResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{157}
+ return file_vtctldata_proto_rawDescGZIP(), []int{162}
}
type RefreshStateRequest struct {
@@ -10251,11 +10304,9 @@ type RefreshStateRequest struct {
func (x *RefreshStateRequest) Reset() {
*x = RefreshStateRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[158]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[163]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RefreshStateRequest) String() string {
@@ -10265,8 +10316,8 @@ func (x *RefreshStateRequest) String() string {
func (*RefreshStateRequest) ProtoMessage() {}
func (x *RefreshStateRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[158]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[163]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -10278,7 +10329,7 @@ func (x *RefreshStateRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use RefreshStateRequest.ProtoReflect.Descriptor instead.
func (*RefreshStateRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{158}
+ return file_vtctldata_proto_rawDescGZIP(), []int{163}
}
func (x *RefreshStateRequest) GetTabletAlias() *topodata.TabletAlias {
@@ -10296,11 +10347,9 @@ type RefreshStateResponse struct {
func (x *RefreshStateResponse) Reset() {
*x = RefreshStateResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[159]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[164]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RefreshStateResponse) String() string {
@@ -10310,8 +10359,8 @@ func (x *RefreshStateResponse) String() string {
func (*RefreshStateResponse) ProtoMessage() {}
func (x *RefreshStateResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[159]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[164]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -10323,7 +10372,7 @@ func (x *RefreshStateResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use RefreshStateResponse.ProtoReflect.Descriptor instead.
func (*RefreshStateResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{159}
+ return file_vtctldata_proto_rawDescGZIP(), []int{164}
}
type RefreshStateByShardRequest struct {
@@ -10338,11 +10387,9 @@ type RefreshStateByShardRequest struct {
func (x *RefreshStateByShardRequest) Reset() {
*x = RefreshStateByShardRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[160]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[165]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RefreshStateByShardRequest) String() string {
@@ -10352,8 +10399,8 @@ func (x *RefreshStateByShardRequest) String() string {
func (*RefreshStateByShardRequest) ProtoMessage() {}
func (x *RefreshStateByShardRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[160]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[165]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -10365,7 +10412,7 @@ func (x *RefreshStateByShardRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use RefreshStateByShardRequest.ProtoReflect.Descriptor instead.
func (*RefreshStateByShardRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{160}
+ return file_vtctldata_proto_rawDescGZIP(), []int{165}
}
func (x *RefreshStateByShardRequest) GetKeyspace() string {
@@ -10401,11 +10448,9 @@ type RefreshStateByShardResponse struct {
func (x *RefreshStateByShardResponse) Reset() {
*x = RefreshStateByShardResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[161]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[166]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RefreshStateByShardResponse) String() string {
@@ -10415,8 +10460,8 @@ func (x *RefreshStateByShardResponse) String() string {
func (*RefreshStateByShardResponse) ProtoMessage() {}
func (x *RefreshStateByShardResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[161]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[166]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -10428,7 +10473,7 @@ func (x *RefreshStateByShardResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use RefreshStateByShardResponse.ProtoReflect.Descriptor instead.
func (*RefreshStateByShardResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{161}
+ return file_vtctldata_proto_rawDescGZIP(), []int{166}
}
func (x *RefreshStateByShardResponse) GetIsPartialRefresh() bool {
@@ -10455,11 +10500,9 @@ type ReloadSchemaRequest struct {
func (x *ReloadSchemaRequest) Reset() {
*x = ReloadSchemaRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[162]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[167]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReloadSchemaRequest) String() string {
@@ -10469,8 +10512,8 @@ func (x *ReloadSchemaRequest) String() string {
func (*ReloadSchemaRequest) ProtoMessage() {}
func (x *ReloadSchemaRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[162]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[167]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -10482,7 +10525,7 @@ func (x *ReloadSchemaRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ReloadSchemaRequest.ProtoReflect.Descriptor instead.
func (*ReloadSchemaRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{162}
+ return file_vtctldata_proto_rawDescGZIP(), []int{167}
}
func (x *ReloadSchemaRequest) GetTabletAlias() *topodata.TabletAlias {
@@ -10500,11 +10543,9 @@ type ReloadSchemaResponse struct {
func (x *ReloadSchemaResponse) Reset() {
*x = ReloadSchemaResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[163]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[168]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReloadSchemaResponse) String() string {
@@ -10514,8 +10555,8 @@ func (x *ReloadSchemaResponse) String() string {
func (*ReloadSchemaResponse) ProtoMessage() {}
func (x *ReloadSchemaResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[163]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[168]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -10527,7 +10568,7 @@ func (x *ReloadSchemaResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ReloadSchemaResponse.ProtoReflect.Descriptor instead.
func (*ReloadSchemaResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{163}
+ return file_vtctldata_proto_rawDescGZIP(), []int{168}
}
type ReloadSchemaKeyspaceRequest struct {
@@ -10546,11 +10587,9 @@ type ReloadSchemaKeyspaceRequest struct {
func (x *ReloadSchemaKeyspaceRequest) Reset() {
*x = ReloadSchemaKeyspaceRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[164]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[169]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReloadSchemaKeyspaceRequest) String() string {
@@ -10560,8 +10599,8 @@ func (x *ReloadSchemaKeyspaceRequest) String() string {
func (*ReloadSchemaKeyspaceRequest) ProtoMessage() {}
func (x *ReloadSchemaKeyspaceRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[164]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[169]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -10573,7 +10612,7 @@ func (x *ReloadSchemaKeyspaceRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ReloadSchemaKeyspaceRequest.ProtoReflect.Descriptor instead.
func (*ReloadSchemaKeyspaceRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{164}
+ return file_vtctldata_proto_rawDescGZIP(), []int{169}
}
func (x *ReloadSchemaKeyspaceRequest) GetKeyspace() string {
@@ -10614,11 +10653,9 @@ type ReloadSchemaKeyspaceResponse struct {
func (x *ReloadSchemaKeyspaceResponse) Reset() {
*x = ReloadSchemaKeyspaceResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[165]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[170]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReloadSchemaKeyspaceResponse) String() string {
@@ -10628,8 +10665,8 @@ func (x *ReloadSchemaKeyspaceResponse) String() string {
func (*ReloadSchemaKeyspaceResponse) ProtoMessage() {}
func (x *ReloadSchemaKeyspaceResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[165]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[170]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -10641,7 +10678,7 @@ func (x *ReloadSchemaKeyspaceResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ReloadSchemaKeyspaceResponse.ProtoReflect.Descriptor instead.
func (*ReloadSchemaKeyspaceResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{165}
+ return file_vtctldata_proto_rawDescGZIP(), []int{170}
}
func (x *ReloadSchemaKeyspaceResponse) GetEvents() []*logutil.Event {
@@ -10666,11 +10703,9 @@ type ReloadSchemaShardRequest struct {
func (x *ReloadSchemaShardRequest) Reset() {
*x = ReloadSchemaShardRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[166]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[171]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReloadSchemaShardRequest) String() string {
@@ -10680,8 +10715,8 @@ func (x *ReloadSchemaShardRequest) String() string {
func (*ReloadSchemaShardRequest) ProtoMessage() {}
func (x *ReloadSchemaShardRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[166]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[171]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -10693,7 +10728,7 @@ func (x *ReloadSchemaShardRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ReloadSchemaShardRequest.ProtoReflect.Descriptor instead.
func (*ReloadSchemaShardRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{166}
+ return file_vtctldata_proto_rawDescGZIP(), []int{171}
}
func (x *ReloadSchemaShardRequest) GetKeyspace() string {
@@ -10741,11 +10776,9 @@ type ReloadSchemaShardResponse struct {
func (x *ReloadSchemaShardResponse) Reset() {
*x = ReloadSchemaShardResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[167]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[172]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReloadSchemaShardResponse) String() string {
@@ -10755,8 +10788,8 @@ func (x *ReloadSchemaShardResponse) String() string {
func (*ReloadSchemaShardResponse) ProtoMessage() {}
func (x *ReloadSchemaShardResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[167]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[172]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -10768,7 +10801,7 @@ func (x *ReloadSchemaShardResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ReloadSchemaShardResponse.ProtoReflect.Descriptor instead.
func (*ReloadSchemaShardResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{167}
+ return file_vtctldata_proto_rawDescGZIP(), []int{172}
}
func (x *ReloadSchemaShardResponse) GetEvents() []*logutil.Event {
@@ -10790,11 +10823,9 @@ type RemoveBackupRequest struct {
func (x *RemoveBackupRequest) Reset() {
*x = RemoveBackupRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[168]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[173]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RemoveBackupRequest) String() string {
@@ -10804,8 +10835,8 @@ func (x *RemoveBackupRequest) String() string {
func (*RemoveBackupRequest) ProtoMessage() {}
func (x *RemoveBackupRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[168]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[173]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -10817,7 +10848,7 @@ func (x *RemoveBackupRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use RemoveBackupRequest.ProtoReflect.Descriptor instead.
func (*RemoveBackupRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{168}
+ return file_vtctldata_proto_rawDescGZIP(), []int{173}
}
func (x *RemoveBackupRequest) GetKeyspace() string {
@@ -10849,11 +10880,9 @@ type RemoveBackupResponse struct {
func (x *RemoveBackupResponse) Reset() {
*x = RemoveBackupResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[169]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[174]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RemoveBackupResponse) String() string {
@@ -10863,8 +10892,8 @@ func (x *RemoveBackupResponse) String() string {
func (*RemoveBackupResponse) ProtoMessage() {}
func (x *RemoveBackupResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[169]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[174]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -10876,7 +10905,7 @@ func (x *RemoveBackupResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use RemoveBackupResponse.ProtoReflect.Descriptor instead.
func (*RemoveBackupResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{169}
+ return file_vtctldata_proto_rawDescGZIP(), []int{174}
}
type RemoveKeyspaceCellRequest struct {
@@ -10897,11 +10926,9 @@ type RemoveKeyspaceCellRequest struct {
func (x *RemoveKeyspaceCellRequest) Reset() {
*x = RemoveKeyspaceCellRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[170]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[175]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RemoveKeyspaceCellRequest) String() string {
@@ -10911,8 +10938,8 @@ func (x *RemoveKeyspaceCellRequest) String() string {
func (*RemoveKeyspaceCellRequest) ProtoMessage() {}
func (x *RemoveKeyspaceCellRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[170]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[175]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -10924,7 +10951,7 @@ func (x *RemoveKeyspaceCellRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use RemoveKeyspaceCellRequest.ProtoReflect.Descriptor instead.
func (*RemoveKeyspaceCellRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{170}
+ return file_vtctldata_proto_rawDescGZIP(), []int{175}
}
func (x *RemoveKeyspaceCellRequest) GetKeyspace() string {
@@ -10963,11 +10990,9 @@ type RemoveKeyspaceCellResponse struct {
func (x *RemoveKeyspaceCellResponse) Reset() {
*x = RemoveKeyspaceCellResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[171]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[176]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RemoveKeyspaceCellResponse) String() string {
@@ -10977,8 +11002,8 @@ func (x *RemoveKeyspaceCellResponse) String() string {
func (*RemoveKeyspaceCellResponse) ProtoMessage() {}
func (x *RemoveKeyspaceCellResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[171]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[176]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -10990,7 +11015,7 @@ func (x *RemoveKeyspaceCellResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use RemoveKeyspaceCellResponse.ProtoReflect.Descriptor instead.
func (*RemoveKeyspaceCellResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{171}
+ return file_vtctldata_proto_rawDescGZIP(), []int{176}
}
type RemoveShardCellRequest struct {
@@ -11012,11 +11037,9 @@ type RemoveShardCellRequest struct {
func (x *RemoveShardCellRequest) Reset() {
*x = RemoveShardCellRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[172]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[177]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RemoveShardCellRequest) String() string {
@@ -11026,8 +11049,8 @@ func (x *RemoveShardCellRequest) String() string {
func (*RemoveShardCellRequest) ProtoMessage() {}
func (x *RemoveShardCellRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[172]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[177]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -11039,7 +11062,7 @@ func (x *RemoveShardCellRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use RemoveShardCellRequest.ProtoReflect.Descriptor instead.
func (*RemoveShardCellRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{172}
+ return file_vtctldata_proto_rawDescGZIP(), []int{177}
}
func (x *RemoveShardCellRequest) GetKeyspace() string {
@@ -11085,11 +11108,9 @@ type RemoveShardCellResponse struct {
func (x *RemoveShardCellResponse) Reset() {
*x = RemoveShardCellResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[173]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[178]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RemoveShardCellResponse) String() string {
@@ -11099,8 +11120,8 @@ func (x *RemoveShardCellResponse) String() string {
func (*RemoveShardCellResponse) ProtoMessage() {}
func (x *RemoveShardCellResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[173]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[178]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -11112,7 +11133,7 @@ func (x *RemoveShardCellResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use RemoveShardCellResponse.ProtoReflect.Descriptor instead.
func (*RemoveShardCellResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{173}
+ return file_vtctldata_proto_rawDescGZIP(), []int{178}
}
type ReparentTabletRequest struct {
@@ -11127,11 +11148,9 @@ type ReparentTabletRequest struct {
func (x *ReparentTabletRequest) Reset() {
*x = ReparentTabletRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[174]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[179]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReparentTabletRequest) String() string {
@@ -11141,8 +11160,8 @@ func (x *ReparentTabletRequest) String() string {
func (*ReparentTabletRequest) ProtoMessage() {}
func (x *ReparentTabletRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[174]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[179]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -11154,7 +11173,7 @@ func (x *ReparentTabletRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ReparentTabletRequest.ProtoReflect.Descriptor instead.
func (*ReparentTabletRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{174}
+ return file_vtctldata_proto_rawDescGZIP(), []int{179}
}
func (x *ReparentTabletRequest) GetTablet() *topodata.TabletAlias {
@@ -11179,11 +11198,9 @@ type ReparentTabletResponse struct {
func (x *ReparentTabletResponse) Reset() {
*x = ReparentTabletResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[175]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[180]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReparentTabletResponse) String() string {
@@ -11193,8 +11210,8 @@ func (x *ReparentTabletResponse) String() string {
func (*ReparentTabletResponse) ProtoMessage() {}
func (x *ReparentTabletResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[175]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[180]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -11206,7 +11223,7 @@ func (x *ReparentTabletResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ReparentTabletResponse.ProtoReflect.Descriptor instead.
func (*ReparentTabletResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{175}
+ return file_vtctldata_proto_rawDescGZIP(), []int{180}
}
func (x *ReparentTabletResponse) GetKeyspace() string {
@@ -11258,11 +11275,9 @@ type ReshardCreateRequest struct {
func (x *ReshardCreateRequest) Reset() {
*x = ReshardCreateRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[176]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[181]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReshardCreateRequest) String() string {
@@ -11272,8 +11287,8 @@ func (x *ReshardCreateRequest) String() string {
func (*ReshardCreateRequest) ProtoMessage() {}
func (x *ReshardCreateRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[176]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[181]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -11285,7 +11300,7 @@ func (x *ReshardCreateRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ReshardCreateRequest.ProtoReflect.Descriptor instead.
func (*ReshardCreateRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{176}
+ return file_vtctldata_proto_rawDescGZIP(), []int{181}
}
func (x *ReshardCreateRequest) GetWorkflow() string {
@@ -11403,11 +11418,9 @@ type RestoreFromBackupRequest struct {
func (x *RestoreFromBackupRequest) Reset() {
*x = RestoreFromBackupRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[177]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[182]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RestoreFromBackupRequest) String() string {
@@ -11417,8 +11430,8 @@ func (x *RestoreFromBackupRequest) String() string {
func (*RestoreFromBackupRequest) ProtoMessage() {}
func (x *RestoreFromBackupRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[177]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[182]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -11430,7 +11443,7 @@ func (x *RestoreFromBackupRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use RestoreFromBackupRequest.ProtoReflect.Descriptor instead.
func (*RestoreFromBackupRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{177}
+ return file_vtctldata_proto_rawDescGZIP(), []int{182}
}
func (x *RestoreFromBackupRequest) GetTabletAlias() *topodata.TabletAlias {
@@ -11489,11 +11502,9 @@ type RestoreFromBackupResponse struct {
func (x *RestoreFromBackupResponse) Reset() {
*x = RestoreFromBackupResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[178]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[183]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RestoreFromBackupResponse) String() string {
@@ -11503,8 +11514,8 @@ func (x *RestoreFromBackupResponse) String() string {
func (*RestoreFromBackupResponse) ProtoMessage() {}
func (x *RestoreFromBackupResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[178]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[183]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -11516,7 +11527,7 @@ func (x *RestoreFromBackupResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use RestoreFromBackupResponse.ProtoReflect.Descriptor instead.
func (*RestoreFromBackupResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{178}
+ return file_vtctldata_proto_rawDescGZIP(), []int{183}
}
func (x *RestoreFromBackupResponse) GetTabletAlias() *topodata.TabletAlias {
@@ -11558,11 +11569,9 @@ type RetrySchemaMigrationRequest struct {
func (x *RetrySchemaMigrationRequest) Reset() {
*x = RetrySchemaMigrationRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[179]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[184]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RetrySchemaMigrationRequest) String() string {
@@ -11572,8 +11581,8 @@ func (x *RetrySchemaMigrationRequest) String() string {
func (*RetrySchemaMigrationRequest) ProtoMessage() {}
func (x *RetrySchemaMigrationRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[179]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[184]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -11585,7 +11594,7 @@ func (x *RetrySchemaMigrationRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use RetrySchemaMigrationRequest.ProtoReflect.Descriptor instead.
func (*RetrySchemaMigrationRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{179}
+ return file_vtctldata_proto_rawDescGZIP(), []int{184}
}
func (x *RetrySchemaMigrationRequest) GetKeyspace() string {
@@ -11612,11 +11621,9 @@ type RetrySchemaMigrationResponse struct {
func (x *RetrySchemaMigrationResponse) Reset() {
*x = RetrySchemaMigrationResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[180]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[185]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RetrySchemaMigrationResponse) String() string {
@@ -11626,8 +11633,8 @@ func (x *RetrySchemaMigrationResponse) String() string {
func (*RetrySchemaMigrationResponse) ProtoMessage() {}
func (x *RetrySchemaMigrationResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[180]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[185]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -11639,7 +11646,7 @@ func (x *RetrySchemaMigrationResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use RetrySchemaMigrationResponse.ProtoReflect.Descriptor instead.
func (*RetrySchemaMigrationResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{180}
+ return file_vtctldata_proto_rawDescGZIP(), []int{185}
}
func (x *RetrySchemaMigrationResponse) GetRowsAffectedByShard() map[string]uint64 {
@@ -11659,11 +11666,9 @@ type RunHealthCheckRequest struct {
func (x *RunHealthCheckRequest) Reset() {
*x = RunHealthCheckRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[181]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[186]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RunHealthCheckRequest) String() string {
@@ -11673,8 +11678,8 @@ func (x *RunHealthCheckRequest) String() string {
func (*RunHealthCheckRequest) ProtoMessage() {}
func (x *RunHealthCheckRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[181]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[186]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -11686,7 +11691,7 @@ func (x *RunHealthCheckRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use RunHealthCheckRequest.ProtoReflect.Descriptor instead.
func (*RunHealthCheckRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{181}
+ return file_vtctldata_proto_rawDescGZIP(), []int{186}
}
func (x *RunHealthCheckRequest) GetTabletAlias() *topodata.TabletAlias {
@@ -11704,11 +11709,9 @@ type RunHealthCheckResponse struct {
func (x *RunHealthCheckResponse) Reset() {
*x = RunHealthCheckResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[182]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[187]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RunHealthCheckResponse) String() string {
@@ -11718,8 +11721,8 @@ func (x *RunHealthCheckResponse) String() string {
func (*RunHealthCheckResponse) ProtoMessage() {}
func (x *RunHealthCheckResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[182]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[187]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -11731,7 +11734,7 @@ func (x *RunHealthCheckResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use RunHealthCheckResponse.ProtoReflect.Descriptor instead.
func (*RunHealthCheckResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{182}
+ return file_vtctldata_proto_rawDescGZIP(), []int{187}
}
type SetKeyspaceDurabilityPolicyRequest struct {
@@ -11745,11 +11748,9 @@ type SetKeyspaceDurabilityPolicyRequest struct {
func (x *SetKeyspaceDurabilityPolicyRequest) Reset() {
*x = SetKeyspaceDurabilityPolicyRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[183]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[188]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SetKeyspaceDurabilityPolicyRequest) String() string {
@@ -11759,8 +11760,8 @@ func (x *SetKeyspaceDurabilityPolicyRequest) String() string {
func (*SetKeyspaceDurabilityPolicyRequest) ProtoMessage() {}
func (x *SetKeyspaceDurabilityPolicyRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[183]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[188]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -11772,7 +11773,7 @@ func (x *SetKeyspaceDurabilityPolicyRequest) ProtoReflect() protoreflect.Message
// Deprecated: Use SetKeyspaceDurabilityPolicyRequest.ProtoReflect.Descriptor instead.
func (*SetKeyspaceDurabilityPolicyRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{183}
+ return file_vtctldata_proto_rawDescGZIP(), []int{188}
}
func (x *SetKeyspaceDurabilityPolicyRequest) GetKeyspace() string {
@@ -11800,11 +11801,9 @@ type SetKeyspaceDurabilityPolicyResponse struct {
func (x *SetKeyspaceDurabilityPolicyResponse) Reset() {
*x = SetKeyspaceDurabilityPolicyResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[184]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[189]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SetKeyspaceDurabilityPolicyResponse) String() string {
@@ -11814,8 +11813,8 @@ func (x *SetKeyspaceDurabilityPolicyResponse) String() string {
func (*SetKeyspaceDurabilityPolicyResponse) ProtoMessage() {}
func (x *SetKeyspaceDurabilityPolicyResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[184]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[189]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -11827,7 +11826,7 @@ func (x *SetKeyspaceDurabilityPolicyResponse) ProtoReflect() protoreflect.Messag
// Deprecated: Use SetKeyspaceDurabilityPolicyResponse.ProtoReflect.Descriptor instead.
func (*SetKeyspaceDurabilityPolicyResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{184}
+ return file_vtctldata_proto_rawDescGZIP(), []int{189}
}
func (x *SetKeyspaceDurabilityPolicyResponse) GetKeyspace() *topodata.Keyspace {
@@ -11848,11 +11847,9 @@ type SetKeyspaceShardingInfoRequest struct {
func (x *SetKeyspaceShardingInfoRequest) Reset() {
*x = SetKeyspaceShardingInfoRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[185]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[190]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SetKeyspaceShardingInfoRequest) String() string {
@@ -11862,8 +11859,8 @@ func (x *SetKeyspaceShardingInfoRequest) String() string {
func (*SetKeyspaceShardingInfoRequest) ProtoMessage() {}
func (x *SetKeyspaceShardingInfoRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[185]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[190]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -11875,7 +11872,7 @@ func (x *SetKeyspaceShardingInfoRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use SetKeyspaceShardingInfoRequest.ProtoReflect.Descriptor instead.
func (*SetKeyspaceShardingInfoRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{185}
+ return file_vtctldata_proto_rawDescGZIP(), []int{190}
}
func (x *SetKeyspaceShardingInfoRequest) GetKeyspace() string {
@@ -11903,11 +11900,9 @@ type SetKeyspaceShardingInfoResponse struct {
func (x *SetKeyspaceShardingInfoResponse) Reset() {
*x = SetKeyspaceShardingInfoResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[186]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[191]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SetKeyspaceShardingInfoResponse) String() string {
@@ -11917,8 +11912,8 @@ func (x *SetKeyspaceShardingInfoResponse) String() string {
func (*SetKeyspaceShardingInfoResponse) ProtoMessage() {}
func (x *SetKeyspaceShardingInfoResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[186]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[191]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -11930,7 +11925,7 @@ func (x *SetKeyspaceShardingInfoResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use SetKeyspaceShardingInfoResponse.ProtoReflect.Descriptor instead.
func (*SetKeyspaceShardingInfoResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{186}
+ return file_vtctldata_proto_rawDescGZIP(), []int{191}
}
func (x *SetKeyspaceShardingInfoResponse) GetKeyspace() *topodata.Keyspace {
@@ -11952,11 +11947,9 @@ type SetShardIsPrimaryServingRequest struct {
func (x *SetShardIsPrimaryServingRequest) Reset() {
*x = SetShardIsPrimaryServingRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[187]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[192]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SetShardIsPrimaryServingRequest) String() string {
@@ -11966,8 +11959,8 @@ func (x *SetShardIsPrimaryServingRequest) String() string {
func (*SetShardIsPrimaryServingRequest) ProtoMessage() {}
func (x *SetShardIsPrimaryServingRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[187]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[192]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -11979,7 +11972,7 @@ func (x *SetShardIsPrimaryServingRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use SetShardIsPrimaryServingRequest.ProtoReflect.Descriptor instead.
func (*SetShardIsPrimaryServingRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{187}
+ return file_vtctldata_proto_rawDescGZIP(), []int{192}
}
func (x *SetShardIsPrimaryServingRequest) GetKeyspace() string {
@@ -12014,11 +12007,9 @@ type SetShardIsPrimaryServingResponse struct {
func (x *SetShardIsPrimaryServingResponse) Reset() {
*x = SetShardIsPrimaryServingResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[188]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[193]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SetShardIsPrimaryServingResponse) String() string {
@@ -12028,8 +12019,8 @@ func (x *SetShardIsPrimaryServingResponse) String() string {
func (*SetShardIsPrimaryServingResponse) ProtoMessage() {}
func (x *SetShardIsPrimaryServingResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[188]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[193]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -12041,7 +12032,7 @@ func (x *SetShardIsPrimaryServingResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use SetShardIsPrimaryServingResponse.ProtoReflect.Descriptor instead.
func (*SetShardIsPrimaryServingResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{188}
+ return file_vtctldata_proto_rawDescGZIP(), []int{193}
}
func (x *SetShardIsPrimaryServingResponse) GetShard() *topodata.Shard {
@@ -12081,11 +12072,9 @@ type SetShardTabletControlRequest struct {
func (x *SetShardTabletControlRequest) Reset() {
*x = SetShardTabletControlRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[189]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[194]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SetShardTabletControlRequest) String() string {
@@ -12095,8 +12084,8 @@ func (x *SetShardTabletControlRequest) String() string {
func (*SetShardTabletControlRequest) ProtoMessage() {}
func (x *SetShardTabletControlRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[189]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[194]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -12108,7 +12097,7 @@ func (x *SetShardTabletControlRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use SetShardTabletControlRequest.ProtoReflect.Descriptor instead.
func (*SetShardTabletControlRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{189}
+ return file_vtctldata_proto_rawDescGZIP(), []int{194}
}
func (x *SetShardTabletControlRequest) GetKeyspace() string {
@@ -12171,11 +12160,9 @@ type SetShardTabletControlResponse struct {
func (x *SetShardTabletControlResponse) Reset() {
*x = SetShardTabletControlResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[190]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[195]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SetShardTabletControlResponse) String() string {
@@ -12185,8 +12172,8 @@ func (x *SetShardTabletControlResponse) String() string {
func (*SetShardTabletControlResponse) ProtoMessage() {}
func (x *SetShardTabletControlResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[190]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[195]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -12198,7 +12185,7 @@ func (x *SetShardTabletControlResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use SetShardTabletControlResponse.ProtoReflect.Descriptor instead.
func (*SetShardTabletControlResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{190}
+ return file_vtctldata_proto_rawDescGZIP(), []int{195}
}
func (x *SetShardTabletControlResponse) GetShard() *topodata.Shard {
@@ -12219,11 +12206,9 @@ type SetWritableRequest struct {
func (x *SetWritableRequest) Reset() {
*x = SetWritableRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[191]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[196]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SetWritableRequest) String() string {
@@ -12233,8 +12218,8 @@ func (x *SetWritableRequest) String() string {
func (*SetWritableRequest) ProtoMessage() {}
func (x *SetWritableRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[191]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[196]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -12246,7 +12231,7 @@ func (x *SetWritableRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use SetWritableRequest.ProtoReflect.Descriptor instead.
func (*SetWritableRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{191}
+ return file_vtctldata_proto_rawDescGZIP(), []int{196}
}
func (x *SetWritableRequest) GetTabletAlias() *topodata.TabletAlias {
@@ -12271,11 +12256,9 @@ type SetWritableResponse struct {
func (x *SetWritableResponse) Reset() {
*x = SetWritableResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[192]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[197]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SetWritableResponse) String() string {
@@ -12285,8 +12268,8 @@ func (x *SetWritableResponse) String() string {
func (*SetWritableResponse) ProtoMessage() {}
func (x *SetWritableResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[192]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[197]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -12298,7 +12281,7 @@ func (x *SetWritableResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use SetWritableResponse.ProtoReflect.Descriptor instead.
func (*SetWritableResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{192}
+ return file_vtctldata_proto_rawDescGZIP(), []int{197}
}
type ShardReplicationAddRequest struct {
@@ -12313,11 +12296,9 @@ type ShardReplicationAddRequest struct {
func (x *ShardReplicationAddRequest) Reset() {
*x = ShardReplicationAddRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[193]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[198]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ShardReplicationAddRequest) String() string {
@@ -12327,8 +12308,8 @@ func (x *ShardReplicationAddRequest) String() string {
func (*ShardReplicationAddRequest) ProtoMessage() {}
func (x *ShardReplicationAddRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[193]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[198]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -12340,7 +12321,7 @@ func (x *ShardReplicationAddRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ShardReplicationAddRequest.ProtoReflect.Descriptor instead.
func (*ShardReplicationAddRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{193}
+ return file_vtctldata_proto_rawDescGZIP(), []int{198}
}
func (x *ShardReplicationAddRequest) GetKeyspace() string {
@@ -12372,11 +12353,9 @@ type ShardReplicationAddResponse struct {
func (x *ShardReplicationAddResponse) Reset() {
*x = ShardReplicationAddResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[194]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[199]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ShardReplicationAddResponse) String() string {
@@ -12386,8 +12365,8 @@ func (x *ShardReplicationAddResponse) String() string {
func (*ShardReplicationAddResponse) ProtoMessage() {}
func (x *ShardReplicationAddResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[194]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[199]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -12399,7 +12378,7 @@ func (x *ShardReplicationAddResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ShardReplicationAddResponse.ProtoReflect.Descriptor instead.
func (*ShardReplicationAddResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{194}
+ return file_vtctldata_proto_rawDescGZIP(), []int{199}
}
type ShardReplicationFixRequest struct {
@@ -12414,11 +12393,9 @@ type ShardReplicationFixRequest struct {
func (x *ShardReplicationFixRequest) Reset() {
*x = ShardReplicationFixRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[195]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[200]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ShardReplicationFixRequest) String() string {
@@ -12428,8 +12405,8 @@ func (x *ShardReplicationFixRequest) String() string {
func (*ShardReplicationFixRequest) ProtoMessage() {}
func (x *ShardReplicationFixRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[195]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[200]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -12441,7 +12418,7 @@ func (x *ShardReplicationFixRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ShardReplicationFixRequest.ProtoReflect.Descriptor instead.
func (*ShardReplicationFixRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{195}
+ return file_vtctldata_proto_rawDescGZIP(), []int{200}
}
func (x *ShardReplicationFixRequest) GetKeyspace() string {
@@ -12478,11 +12455,9 @@ type ShardReplicationFixResponse struct {
func (x *ShardReplicationFixResponse) Reset() {
*x = ShardReplicationFixResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[196]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[201]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ShardReplicationFixResponse) String() string {
@@ -12492,8 +12467,8 @@ func (x *ShardReplicationFixResponse) String() string {
func (*ShardReplicationFixResponse) ProtoMessage() {}
func (x *ShardReplicationFixResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[196]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[201]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -12505,7 +12480,7 @@ func (x *ShardReplicationFixResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ShardReplicationFixResponse.ProtoReflect.Descriptor instead.
func (*ShardReplicationFixResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{196}
+ return file_vtctldata_proto_rawDescGZIP(), []int{201}
}
func (x *ShardReplicationFixResponse) GetError() *topodata.ShardReplicationError {
@@ -12526,11 +12501,9 @@ type ShardReplicationPositionsRequest struct {
func (x *ShardReplicationPositionsRequest) Reset() {
*x = ShardReplicationPositionsRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[197]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[202]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ShardReplicationPositionsRequest) String() string {
@@ -12540,8 +12513,8 @@ func (x *ShardReplicationPositionsRequest) String() string {
func (*ShardReplicationPositionsRequest) ProtoMessage() {}
func (x *ShardReplicationPositionsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[197]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[202]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -12553,7 +12526,7 @@ func (x *ShardReplicationPositionsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ShardReplicationPositionsRequest.ProtoReflect.Descriptor instead.
func (*ShardReplicationPositionsRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{197}
+ return file_vtctldata_proto_rawDescGZIP(), []int{202}
}
func (x *ShardReplicationPositionsRequest) GetKeyspace() string {
@@ -12585,11 +12558,9 @@ type ShardReplicationPositionsResponse struct {
func (x *ShardReplicationPositionsResponse) Reset() {
*x = ShardReplicationPositionsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[198]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[203]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ShardReplicationPositionsResponse) String() string {
@@ -12599,8 +12570,8 @@ func (x *ShardReplicationPositionsResponse) String() string {
func (*ShardReplicationPositionsResponse) ProtoMessage() {}
func (x *ShardReplicationPositionsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[198]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[203]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -12612,7 +12583,7 @@ func (x *ShardReplicationPositionsResponse) ProtoReflect() protoreflect.Message
// Deprecated: Use ShardReplicationPositionsResponse.ProtoReflect.Descriptor instead.
func (*ShardReplicationPositionsResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{198}
+ return file_vtctldata_proto_rawDescGZIP(), []int{203}
}
func (x *ShardReplicationPositionsResponse) GetReplicationStatuses() map[string]*replicationdata.Status {
@@ -12641,11 +12612,9 @@ type ShardReplicationRemoveRequest struct {
func (x *ShardReplicationRemoveRequest) Reset() {
*x = ShardReplicationRemoveRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[199]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[204]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ShardReplicationRemoveRequest) String() string {
@@ -12655,8 +12624,8 @@ func (x *ShardReplicationRemoveRequest) String() string {
func (*ShardReplicationRemoveRequest) ProtoMessage() {}
func (x *ShardReplicationRemoveRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[199]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[204]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -12668,7 +12637,7 @@ func (x *ShardReplicationRemoveRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ShardReplicationRemoveRequest.ProtoReflect.Descriptor instead.
func (*ShardReplicationRemoveRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{199}
+ return file_vtctldata_proto_rawDescGZIP(), []int{204}
}
func (x *ShardReplicationRemoveRequest) GetKeyspace() string {
@@ -12700,11 +12669,9 @@ type ShardReplicationRemoveResponse struct {
func (x *ShardReplicationRemoveResponse) Reset() {
*x = ShardReplicationRemoveResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[200]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[205]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ShardReplicationRemoveResponse) String() string {
@@ -12714,8 +12681,8 @@ func (x *ShardReplicationRemoveResponse) String() string {
func (*ShardReplicationRemoveResponse) ProtoMessage() {}
func (x *ShardReplicationRemoveResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[200]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[205]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -12727,7 +12694,7 @@ func (x *ShardReplicationRemoveResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ShardReplicationRemoveResponse.ProtoReflect.Descriptor instead.
func (*ShardReplicationRemoveResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{200}
+ return file_vtctldata_proto_rawDescGZIP(), []int{205}
}
type SleepTabletRequest struct {
@@ -12741,11 +12708,9 @@ type SleepTabletRequest struct {
func (x *SleepTabletRequest) Reset() {
*x = SleepTabletRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[201]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[206]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SleepTabletRequest) String() string {
@@ -12755,8 +12720,8 @@ func (x *SleepTabletRequest) String() string {
func (*SleepTabletRequest) ProtoMessage() {}
func (x *SleepTabletRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[201]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[206]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -12768,7 +12733,7 @@ func (x *SleepTabletRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use SleepTabletRequest.ProtoReflect.Descriptor instead.
func (*SleepTabletRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{201}
+ return file_vtctldata_proto_rawDescGZIP(), []int{206}
}
func (x *SleepTabletRequest) GetTabletAlias() *topodata.TabletAlias {
@@ -12793,11 +12758,9 @@ type SleepTabletResponse struct {
func (x *SleepTabletResponse) Reset() {
*x = SleepTabletResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[202]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[207]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SleepTabletResponse) String() string {
@@ -12807,8 +12770,8 @@ func (x *SleepTabletResponse) String() string {
func (*SleepTabletResponse) ProtoMessage() {}
func (x *SleepTabletResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[202]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[207]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -12820,7 +12783,7 @@ func (x *SleepTabletResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use SleepTabletResponse.ProtoReflect.Descriptor instead.
func (*SleepTabletResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{202}
+ return file_vtctldata_proto_rawDescGZIP(), []int{207}
}
type SourceShardAddRequest struct {
@@ -12843,11 +12806,9 @@ type SourceShardAddRequest struct {
func (x *SourceShardAddRequest) Reset() {
*x = SourceShardAddRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[203]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[208]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SourceShardAddRequest) String() string {
@@ -12857,8 +12818,8 @@ func (x *SourceShardAddRequest) String() string {
func (*SourceShardAddRequest) ProtoMessage() {}
func (x *SourceShardAddRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[203]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[208]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -12870,7 +12831,7 @@ func (x *SourceShardAddRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use SourceShardAddRequest.ProtoReflect.Descriptor instead.
func (*SourceShardAddRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{203}
+ return file_vtctldata_proto_rawDescGZIP(), []int{208}
}
func (x *SourceShardAddRequest) GetKeyspace() string {
@@ -12933,11 +12894,9 @@ type SourceShardAddResponse struct {
func (x *SourceShardAddResponse) Reset() {
*x = SourceShardAddResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[204]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[209]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SourceShardAddResponse) String() string {
@@ -12947,8 +12906,8 @@ func (x *SourceShardAddResponse) String() string {
func (*SourceShardAddResponse) ProtoMessage() {}
func (x *SourceShardAddResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[204]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[209]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -12960,7 +12919,7 @@ func (x *SourceShardAddResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use SourceShardAddResponse.ProtoReflect.Descriptor instead.
func (*SourceShardAddResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{204}
+ return file_vtctldata_proto_rawDescGZIP(), []int{209}
}
func (x *SourceShardAddResponse) GetShard() *topodata.Shard {
@@ -12982,11 +12941,9 @@ type SourceShardDeleteRequest struct {
func (x *SourceShardDeleteRequest) Reset() {
*x = SourceShardDeleteRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[205]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[210]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SourceShardDeleteRequest) String() string {
@@ -12996,8 +12953,8 @@ func (x *SourceShardDeleteRequest) String() string {
func (*SourceShardDeleteRequest) ProtoMessage() {}
func (x *SourceShardDeleteRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[205]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[210]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -13009,7 +12966,7 @@ func (x *SourceShardDeleteRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use SourceShardDeleteRequest.ProtoReflect.Descriptor instead.
func (*SourceShardDeleteRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{205}
+ return file_vtctldata_proto_rawDescGZIP(), []int{210}
}
func (x *SourceShardDeleteRequest) GetKeyspace() string {
@@ -13044,11 +13001,9 @@ type SourceShardDeleteResponse struct {
func (x *SourceShardDeleteResponse) Reset() {
*x = SourceShardDeleteResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[206]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[211]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SourceShardDeleteResponse) String() string {
@@ -13058,8 +13013,8 @@ func (x *SourceShardDeleteResponse) String() string {
func (*SourceShardDeleteResponse) ProtoMessage() {}
func (x *SourceShardDeleteResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[206]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[211]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -13071,7 +13026,7 @@ func (x *SourceShardDeleteResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use SourceShardDeleteResponse.ProtoReflect.Descriptor instead.
func (*SourceShardDeleteResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{206}
+ return file_vtctldata_proto_rawDescGZIP(), []int{211}
}
func (x *SourceShardDeleteResponse) GetShard() *topodata.Shard {
@@ -13091,11 +13046,9 @@ type StartReplicationRequest struct {
func (x *StartReplicationRequest) Reset() {
*x = StartReplicationRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[207]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[212]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StartReplicationRequest) String() string {
@@ -13105,8 +13058,8 @@ func (x *StartReplicationRequest) String() string {
func (*StartReplicationRequest) ProtoMessage() {}
func (x *StartReplicationRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[207]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[212]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -13118,7 +13071,7 @@ func (x *StartReplicationRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use StartReplicationRequest.ProtoReflect.Descriptor instead.
func (*StartReplicationRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{207}
+ return file_vtctldata_proto_rawDescGZIP(), []int{212}
}
func (x *StartReplicationRequest) GetTabletAlias() *topodata.TabletAlias {
@@ -13136,11 +13089,9 @@ type StartReplicationResponse struct {
func (x *StartReplicationResponse) Reset() {
*x = StartReplicationResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[208]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[213]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StartReplicationResponse) String() string {
@@ -13150,8 +13101,8 @@ func (x *StartReplicationResponse) String() string {
func (*StartReplicationResponse) ProtoMessage() {}
func (x *StartReplicationResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[208]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[213]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -13163,7 +13114,7 @@ func (x *StartReplicationResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use StartReplicationResponse.ProtoReflect.Descriptor instead.
func (*StartReplicationResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{208}
+ return file_vtctldata_proto_rawDescGZIP(), []int{213}
}
type StopReplicationRequest struct {
@@ -13176,11 +13127,9 @@ type StopReplicationRequest struct {
func (x *StopReplicationRequest) Reset() {
*x = StopReplicationRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[209]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[214]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StopReplicationRequest) String() string {
@@ -13190,8 +13139,8 @@ func (x *StopReplicationRequest) String() string {
func (*StopReplicationRequest) ProtoMessage() {}
func (x *StopReplicationRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[209]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[214]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -13203,7 +13152,7 @@ func (x *StopReplicationRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use StopReplicationRequest.ProtoReflect.Descriptor instead.
func (*StopReplicationRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{209}
+ return file_vtctldata_proto_rawDescGZIP(), []int{214}
}
func (x *StopReplicationRequest) GetTabletAlias() *topodata.TabletAlias {
@@ -13221,11 +13170,9 @@ type StopReplicationResponse struct {
func (x *StopReplicationResponse) Reset() {
*x = StopReplicationResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[210]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[215]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StopReplicationResponse) String() string {
@@ -13235,8 +13182,8 @@ func (x *StopReplicationResponse) String() string {
func (*StopReplicationResponse) ProtoMessage() {}
func (x *StopReplicationResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[210]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[215]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -13248,7 +13195,7 @@ func (x *StopReplicationResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use StopReplicationResponse.ProtoReflect.Descriptor instead.
func (*StopReplicationResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{210}
+ return file_vtctldata_proto_rawDescGZIP(), []int{215}
}
type TabletExternallyReparentedRequest struct {
@@ -13263,11 +13210,9 @@ type TabletExternallyReparentedRequest struct {
func (x *TabletExternallyReparentedRequest) Reset() {
*x = TabletExternallyReparentedRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[211]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[216]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *TabletExternallyReparentedRequest) String() string {
@@ -13277,8 +13222,8 @@ func (x *TabletExternallyReparentedRequest) String() string {
func (*TabletExternallyReparentedRequest) ProtoMessage() {}
func (x *TabletExternallyReparentedRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[211]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[216]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -13290,7 +13235,7 @@ func (x *TabletExternallyReparentedRequest) ProtoReflect() protoreflect.Message
// Deprecated: Use TabletExternallyReparentedRequest.ProtoReflect.Descriptor instead.
func (*TabletExternallyReparentedRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{211}
+ return file_vtctldata_proto_rawDescGZIP(), []int{216}
}
func (x *TabletExternallyReparentedRequest) GetTablet() *topodata.TabletAlias {
@@ -13313,11 +13258,9 @@ type TabletExternallyReparentedResponse struct {
func (x *TabletExternallyReparentedResponse) Reset() {
*x = TabletExternallyReparentedResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[212]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[217]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *TabletExternallyReparentedResponse) String() string {
@@ -13327,8 +13270,8 @@ func (x *TabletExternallyReparentedResponse) String() string {
func (*TabletExternallyReparentedResponse) ProtoMessage() {}
func (x *TabletExternallyReparentedResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[212]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[217]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -13340,7 +13283,7 @@ func (x *TabletExternallyReparentedResponse) ProtoReflect() protoreflect.Message
// Deprecated: Use TabletExternallyReparentedResponse.ProtoReflect.Descriptor instead.
func (*TabletExternallyReparentedResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{212}
+ return file_vtctldata_proto_rawDescGZIP(), []int{217}
}
func (x *TabletExternallyReparentedResponse) GetKeyspace() string {
@@ -13382,11 +13325,9 @@ type UpdateCellInfoRequest struct {
func (x *UpdateCellInfoRequest) Reset() {
*x = UpdateCellInfoRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[213]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[218]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UpdateCellInfoRequest) String() string {
@@ -13396,8 +13337,8 @@ func (x *UpdateCellInfoRequest) String() string {
func (*UpdateCellInfoRequest) ProtoMessage() {}
func (x *UpdateCellInfoRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[213]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[218]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -13409,7 +13350,7 @@ func (x *UpdateCellInfoRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateCellInfoRequest.ProtoReflect.Descriptor instead.
func (*UpdateCellInfoRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{213}
+ return file_vtctldata_proto_rawDescGZIP(), []int{218}
}
func (x *UpdateCellInfoRequest) GetName() string {
@@ -13437,11 +13378,9 @@ type UpdateCellInfoResponse struct {
func (x *UpdateCellInfoResponse) Reset() {
*x = UpdateCellInfoResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[214]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[219]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UpdateCellInfoResponse) String() string {
@@ -13451,8 +13390,8 @@ func (x *UpdateCellInfoResponse) String() string {
func (*UpdateCellInfoResponse) ProtoMessage() {}
func (x *UpdateCellInfoResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[214]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[219]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -13464,7 +13403,7 @@ func (x *UpdateCellInfoResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateCellInfoResponse.ProtoReflect.Descriptor instead.
func (*UpdateCellInfoResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{214}
+ return file_vtctldata_proto_rawDescGZIP(), []int{219}
}
func (x *UpdateCellInfoResponse) GetName() string {
@@ -13492,11 +13431,9 @@ type UpdateCellsAliasRequest struct {
func (x *UpdateCellsAliasRequest) Reset() {
*x = UpdateCellsAliasRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[215]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[220]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UpdateCellsAliasRequest) String() string {
@@ -13506,8 +13443,8 @@ func (x *UpdateCellsAliasRequest) String() string {
func (*UpdateCellsAliasRequest) ProtoMessage() {}
func (x *UpdateCellsAliasRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[215]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[220]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -13519,7 +13456,7 @@ func (x *UpdateCellsAliasRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateCellsAliasRequest.ProtoReflect.Descriptor instead.
func (*UpdateCellsAliasRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{215}
+ return file_vtctldata_proto_rawDescGZIP(), []int{220}
}
func (x *UpdateCellsAliasRequest) GetName() string {
@@ -13547,11 +13484,9 @@ type UpdateCellsAliasResponse struct {
func (x *UpdateCellsAliasResponse) Reset() {
*x = UpdateCellsAliasResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[216]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[221]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UpdateCellsAliasResponse) String() string {
@@ -13561,8 +13496,8 @@ func (x *UpdateCellsAliasResponse) String() string {
func (*UpdateCellsAliasResponse) ProtoMessage() {}
func (x *UpdateCellsAliasResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[216]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[221]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -13574,7 +13509,7 @@ func (x *UpdateCellsAliasResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateCellsAliasResponse.ProtoReflect.Descriptor instead.
func (*UpdateCellsAliasResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{216}
+ return file_vtctldata_proto_rawDescGZIP(), []int{221}
}
func (x *UpdateCellsAliasResponse) GetName() string {
@@ -13601,11 +13536,9 @@ type ValidateRequest struct {
func (x *ValidateRequest) Reset() {
*x = ValidateRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[217]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[222]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ValidateRequest) String() string {
@@ -13615,8 +13548,8 @@ func (x *ValidateRequest) String() string {
func (*ValidateRequest) ProtoMessage() {}
func (x *ValidateRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[217]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[222]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -13628,7 +13561,7 @@ func (x *ValidateRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateRequest.ProtoReflect.Descriptor instead.
func (*ValidateRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{217}
+ return file_vtctldata_proto_rawDescGZIP(), []int{222}
}
func (x *ValidateRequest) GetPingTablets() bool {
@@ -13649,11 +13582,9 @@ type ValidateResponse struct {
func (x *ValidateResponse) Reset() {
*x = ValidateResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[218]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[223]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ValidateResponse) String() string {
@@ -13663,8 +13594,8 @@ func (x *ValidateResponse) String() string {
func (*ValidateResponse) ProtoMessage() {}
func (x *ValidateResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[218]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[223]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -13676,7 +13607,7 @@ func (x *ValidateResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateResponse.ProtoReflect.Descriptor instead.
func (*ValidateResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{218}
+ return file_vtctldata_proto_rawDescGZIP(), []int{223}
}
func (x *ValidateResponse) GetResults() []string {
@@ -13704,11 +13635,9 @@ type ValidateKeyspaceRequest struct {
func (x *ValidateKeyspaceRequest) Reset() {
*x = ValidateKeyspaceRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[219]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[224]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ValidateKeyspaceRequest) String() string {
@@ -13718,8 +13647,8 @@ func (x *ValidateKeyspaceRequest) String() string {
func (*ValidateKeyspaceRequest) ProtoMessage() {}
func (x *ValidateKeyspaceRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[219]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[224]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -13731,7 +13660,7 @@ func (x *ValidateKeyspaceRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateKeyspaceRequest.ProtoReflect.Descriptor instead.
func (*ValidateKeyspaceRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{219}
+ return file_vtctldata_proto_rawDescGZIP(), []int{224}
}
func (x *ValidateKeyspaceRequest) GetKeyspace() string {
@@ -13759,11 +13688,9 @@ type ValidateKeyspaceResponse struct {
func (x *ValidateKeyspaceResponse) Reset() {
*x = ValidateKeyspaceResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[220]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[225]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ValidateKeyspaceResponse) String() string {
@@ -13773,8 +13700,8 @@ func (x *ValidateKeyspaceResponse) String() string {
func (*ValidateKeyspaceResponse) ProtoMessage() {}
func (x *ValidateKeyspaceResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[220]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[225]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -13786,7 +13713,7 @@ func (x *ValidateKeyspaceResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateKeyspaceResponse.ProtoReflect.Descriptor instead.
func (*ValidateKeyspaceResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{220}
+ return file_vtctldata_proto_rawDescGZIP(), []int{225}
}
func (x *ValidateKeyspaceResponse) GetResults() []string {
@@ -13817,11 +13744,9 @@ type ValidateSchemaKeyspaceRequest struct {
func (x *ValidateSchemaKeyspaceRequest) Reset() {
*x = ValidateSchemaKeyspaceRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[221]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[226]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ValidateSchemaKeyspaceRequest) String() string {
@@ -13831,8 +13756,8 @@ func (x *ValidateSchemaKeyspaceRequest) String() string {
func (*ValidateSchemaKeyspaceRequest) ProtoMessage() {}
func (x *ValidateSchemaKeyspaceRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[221]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[226]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -13844,7 +13769,7 @@ func (x *ValidateSchemaKeyspaceRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateSchemaKeyspaceRequest.ProtoReflect.Descriptor instead.
func (*ValidateSchemaKeyspaceRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{221}
+ return file_vtctldata_proto_rawDescGZIP(), []int{226}
}
func (x *ValidateSchemaKeyspaceRequest) GetKeyspace() string {
@@ -13893,11 +13818,9 @@ type ValidateSchemaKeyspaceResponse struct {
func (x *ValidateSchemaKeyspaceResponse) Reset() {
*x = ValidateSchemaKeyspaceResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[222]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[227]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ValidateSchemaKeyspaceResponse) String() string {
@@ -13907,8 +13830,8 @@ func (x *ValidateSchemaKeyspaceResponse) String() string {
func (*ValidateSchemaKeyspaceResponse) ProtoMessage() {}
func (x *ValidateSchemaKeyspaceResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[222]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[227]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -13920,7 +13843,7 @@ func (x *ValidateSchemaKeyspaceResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateSchemaKeyspaceResponse.ProtoReflect.Descriptor instead.
func (*ValidateSchemaKeyspaceResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{222}
+ return file_vtctldata_proto_rawDescGZIP(), []int{227}
}
func (x *ValidateSchemaKeyspaceResponse) GetResults() []string {
@@ -13949,11 +13872,9 @@ type ValidateShardRequest struct {
func (x *ValidateShardRequest) Reset() {
*x = ValidateShardRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[223]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[228]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ValidateShardRequest) String() string {
@@ -13963,8 +13884,8 @@ func (x *ValidateShardRequest) String() string {
func (*ValidateShardRequest) ProtoMessage() {}
func (x *ValidateShardRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[223]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[228]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -13976,7 +13897,7 @@ func (x *ValidateShardRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateShardRequest.ProtoReflect.Descriptor instead.
func (*ValidateShardRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{223}
+ return file_vtctldata_proto_rawDescGZIP(), []int{228}
}
func (x *ValidateShardRequest) GetKeyspace() string {
@@ -14010,11 +13931,9 @@ type ValidateShardResponse struct {
func (x *ValidateShardResponse) Reset() {
*x = ValidateShardResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[224]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[229]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ValidateShardResponse) String() string {
@@ -14024,8 +13943,8 @@ func (x *ValidateShardResponse) String() string {
func (*ValidateShardResponse) ProtoMessage() {}
func (x *ValidateShardResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[224]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[229]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -14037,7 +13956,7 @@ func (x *ValidateShardResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateShardResponse.ProtoReflect.Descriptor instead.
func (*ValidateShardResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{224}
+ return file_vtctldata_proto_rawDescGZIP(), []int{229}
}
func (x *ValidateShardResponse) GetResults() []string {
@@ -14057,11 +13976,9 @@ type ValidateVersionKeyspaceRequest struct {
func (x *ValidateVersionKeyspaceRequest) Reset() {
*x = ValidateVersionKeyspaceRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[225]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[230]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ValidateVersionKeyspaceRequest) String() string {
@@ -14071,8 +13988,8 @@ func (x *ValidateVersionKeyspaceRequest) String() string {
func (*ValidateVersionKeyspaceRequest) ProtoMessage() {}
func (x *ValidateVersionKeyspaceRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[225]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[230]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -14084,7 +14001,7 @@ func (x *ValidateVersionKeyspaceRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateVersionKeyspaceRequest.ProtoReflect.Descriptor instead.
func (*ValidateVersionKeyspaceRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{225}
+ return file_vtctldata_proto_rawDescGZIP(), []int{230}
}
func (x *ValidateVersionKeyspaceRequest) GetKeyspace() string {
@@ -14105,11 +14022,9 @@ type ValidateVersionKeyspaceResponse struct {
func (x *ValidateVersionKeyspaceResponse) Reset() {
*x = ValidateVersionKeyspaceResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[226]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[231]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ValidateVersionKeyspaceResponse) String() string {
@@ -14119,8 +14034,8 @@ func (x *ValidateVersionKeyspaceResponse) String() string {
func (*ValidateVersionKeyspaceResponse) ProtoMessage() {}
func (x *ValidateVersionKeyspaceResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[226]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[231]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -14132,7 +14047,7 @@ func (x *ValidateVersionKeyspaceResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateVersionKeyspaceResponse.ProtoReflect.Descriptor instead.
func (*ValidateVersionKeyspaceResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{226}
+ return file_vtctldata_proto_rawDescGZIP(), []int{231}
}
func (x *ValidateVersionKeyspaceResponse) GetResults() []string {
@@ -14160,11 +14075,9 @@ type ValidateVersionShardRequest struct {
func (x *ValidateVersionShardRequest) Reset() {
*x = ValidateVersionShardRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[227]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[232]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ValidateVersionShardRequest) String() string {
@@ -14174,8 +14087,8 @@ func (x *ValidateVersionShardRequest) String() string {
func (*ValidateVersionShardRequest) ProtoMessage() {}
func (x *ValidateVersionShardRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[227]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[232]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -14187,7 +14100,7 @@ func (x *ValidateVersionShardRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateVersionShardRequest.ProtoReflect.Descriptor instead.
func (*ValidateVersionShardRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{227}
+ return file_vtctldata_proto_rawDescGZIP(), []int{232}
}
func (x *ValidateVersionShardRequest) GetKeyspace() string {
@@ -14214,11 +14127,9 @@ type ValidateVersionShardResponse struct {
func (x *ValidateVersionShardResponse) Reset() {
*x = ValidateVersionShardResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[228]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[233]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ValidateVersionShardResponse) String() string {
@@ -14228,8 +14139,8 @@ func (x *ValidateVersionShardResponse) String() string {
func (*ValidateVersionShardResponse) ProtoMessage() {}
func (x *ValidateVersionShardResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[228]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[233]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -14241,7 +14152,7 @@ func (x *ValidateVersionShardResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateVersionShardResponse.ProtoReflect.Descriptor instead.
func (*ValidateVersionShardResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{228}
+ return file_vtctldata_proto_rawDescGZIP(), []int{233}
}
func (x *ValidateVersionShardResponse) GetResults() []string {
@@ -14264,11 +14175,9 @@ type ValidateVSchemaRequest struct {
func (x *ValidateVSchemaRequest) Reset() {
*x = ValidateVSchemaRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[229]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[234]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ValidateVSchemaRequest) String() string {
@@ -14278,8 +14187,8 @@ func (x *ValidateVSchemaRequest) String() string {
func (*ValidateVSchemaRequest) ProtoMessage() {}
func (x *ValidateVSchemaRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[229]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[234]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -14291,7 +14200,7 @@ func (x *ValidateVSchemaRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateVSchemaRequest.ProtoReflect.Descriptor instead.
func (*ValidateVSchemaRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{229}
+ return file_vtctldata_proto_rawDescGZIP(), []int{234}
}
func (x *ValidateVSchemaRequest) GetKeyspace() string {
@@ -14333,11 +14242,9 @@ type ValidateVSchemaResponse struct {
func (x *ValidateVSchemaResponse) Reset() {
*x = ValidateVSchemaResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[230]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[235]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ValidateVSchemaResponse) String() string {
@@ -14347,8 +14254,8 @@ func (x *ValidateVSchemaResponse) String() string {
func (*ValidateVSchemaResponse) ProtoMessage() {}
func (x *ValidateVSchemaResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[230]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[235]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -14360,7 +14267,7 @@ func (x *ValidateVSchemaResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateVSchemaResponse.ProtoReflect.Descriptor instead.
func (*ValidateVSchemaResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{230}
+ return file_vtctldata_proto_rawDescGZIP(), []int{235}
}
func (x *ValidateVSchemaResponse) GetResults() []string {
@@ -14382,37 +14289,93 @@ type VDiffCreateRequest struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- Workflow string `protobuf:"bytes,1,opt,name=workflow,proto3" json:"workflow,omitempty"`
- TargetKeyspace string `protobuf:"bytes,2,opt,name=target_keyspace,json=targetKeyspace,proto3" json:"target_keyspace,omitempty"`
- Uuid string `protobuf:"bytes,3,opt,name=uuid,proto3" json:"uuid,omitempty"`
- SourceCells []string `protobuf:"bytes,4,rep,name=source_cells,json=sourceCells,proto3" json:"source_cells,omitempty"`
- TargetCells []string `protobuf:"bytes,5,rep,name=target_cells,json=targetCells,proto3" json:"target_cells,omitempty"`
- TabletTypes []topodata.TabletType `protobuf:"varint,6,rep,packed,name=tablet_types,json=tabletTypes,proto3,enum=topodata.TabletType" json:"tablet_types,omitempty"`
- TabletSelectionPreference tabletmanagerdata.TabletSelectionPreference `protobuf:"varint,7,opt,name=tablet_selection_preference,json=tabletSelectionPreference,proto3,enum=tabletmanagerdata.TabletSelectionPreference" json:"tablet_selection_preference,omitempty"`
- Tables []string `protobuf:"bytes,8,rep,name=tables,proto3" json:"tables,omitempty"`
- Limit int64 `protobuf:"varint,9,opt,name=limit,proto3" json:"limit,omitempty"`
- FilteredReplicationWaitTime *vttime.Duration `protobuf:"bytes,10,opt,name=filtered_replication_wait_time,json=filteredReplicationWaitTime,proto3" json:"filtered_replication_wait_time,omitempty"`
- DebugQuery bool `protobuf:"varint,11,opt,name=debug_query,json=debugQuery,proto3" json:"debug_query,omitempty"`
- OnlyPKs bool `protobuf:"varint,12,opt,name=only_p_ks,json=onlyPKs,proto3" json:"only_p_ks,omitempty"`
- UpdateTableStats bool `protobuf:"varint,13,opt,name=update_table_stats,json=updateTableStats,proto3" json:"update_table_stats,omitempty"`
- MaxExtraRowsToCompare int64 `protobuf:"varint,14,opt,name=max_extra_rows_to_compare,json=maxExtraRowsToCompare,proto3" json:"max_extra_rows_to_compare,omitempty"`
- Wait bool `protobuf:"varint,15,opt,name=wait,proto3" json:"wait,omitempty"`
- WaitUpdateInterval *vttime.Duration `protobuf:"bytes,16,opt,name=wait_update_interval,json=waitUpdateInterval,proto3" json:"wait_update_interval,omitempty"`
- AutoRetry bool `protobuf:"varint,17,opt,name=auto_retry,json=autoRetry,proto3" json:"auto_retry,omitempty"`
- Verbose bool `protobuf:"varint,18,opt,name=verbose,proto3" json:"verbose,omitempty"`
- MaxReportSampleRows int64 `protobuf:"varint,19,opt,name=max_report_sample_rows,json=maxReportSampleRows,proto3" json:"max_report_sample_rows,omitempty"`
- MaxDiffDuration *vttime.Duration `protobuf:"bytes,20,opt,name=max_diff_duration,json=maxDiffDuration,proto3" json:"max_diff_duration,omitempty"`
- RowDiffColumnTruncateAt int64 `protobuf:"varint,21,opt,name=row_diff_column_truncate_at,json=rowDiffColumnTruncateAt,proto3" json:"row_diff_column_truncate_at,omitempty"`
- AutoStart *bool `protobuf:"varint,22,opt,name=auto_start,json=autoStart,proto3,oneof" json:"auto_start,omitempty"`
+ // The name of the workflow that we're diffing tables for.
+ Workflow string `protobuf:"bytes,1,opt,name=workflow,proto3" json:"workflow,omitempty"`
+ // The keyspace where the vreplication workflow is running.
+ TargetKeyspace string `protobuf:"bytes,2,opt,name=target_keyspace,json=targetKeyspace,proto3" json:"target_keyspace,omitempty"`
+ // A unique identifier for the vdiff.
+ // If empty, a new UUID will be generated.
+ Uuid string `protobuf:"bytes,3,opt,name=uuid,proto3" json:"uuid,omitempty"`
+ // The cells to look for source tablets in.
+ // If empty, all cells are used.
+ SourceCells []string `protobuf:"bytes,4,rep,name=source_cells,json=sourceCells,proto3" json:"source_cells,omitempty"`
+ // The cells to look for target tablets in.
+ // If empty, all cells are used.
+ TargetCells []string `protobuf:"bytes,5,rep,name=target_cells,json=targetCells,proto3" json:"target_cells,omitempty"`
+ // The tablet types to use when searching for tablets to use when streaming
+ // results.
+ // A default value of "replica,rdonly,primary" is used by the tablet picker.
+ TabletTypes []topodata.TabletType `protobuf:"varint,6,rep,packed,name=tablet_types,json=tabletTypes,proto3,enum=topodata.TabletType" json:"tablet_types,omitempty"`
+ // When performing source tablet selection, look for candidates in the type
+ // order as they are listed in the tablet_types value (or the default of
+ // "replica,rdonly,primary" that the tablet picker uses).
+ // The default is ANY (0) and you can use INORDER (1) to e.g. ensure that a
+ // primary tablet is only used if there are no available replica or rdonly
+ // tablets.
+ TabletSelectionPreference tabletmanagerdata.TabletSelectionPreference `protobuf:"varint,7,opt,name=tablet_selection_preference,json=tabletSelectionPreference,proto3,enum=tabletmanagerdata.TabletSelectionPreference" json:"tablet_selection_preference,omitempty"`
+ // The tables to compare. If empty, all tables in the workflow are compared.
+ Tables []string `protobuf:"bytes,8,rep,name=tables,proto3" json:"tables,omitempty"`
+ // The maximum number of rows to compare for each table on each shard.
+ // The default is a max int64 value: 2^63 - 1 or 9,223,372,036,854,775,807.
+ Limit int64 `protobuf:"varint,9,opt,name=limit,proto3" json:"limit,omitempty"`
+ // How long to wait for the relevant vreplication stream(s) to catch up when
+ // attempting to setup the table snapshots on the source and target to use for
+ // the diff on each shard.
+ // The default is 30s.
+ FilteredReplicationWaitTime *vttime.Duration `protobuf:"bytes,10,opt,name=filtered_replication_wait_time,json=filteredReplicationWaitTime,proto3" json:"filtered_replication_wait_time,omitempty"`
+ // Include the MySQL query used for the diff in the report that is stored on
+ // each shard primary tablet in the _vt.vdiff_table records.
+ DebugQuery bool `protobuf:"varint,11,opt,name=debug_query,json=debugQuery,proto3" json:"debug_query,omitempty"`
+ // Only show the Primary Key columns in any row diff output. You would
+ // typically want to use this if you set the max_sample_rows very high.
+ OnlyPKs bool `protobuf:"varint,12,opt,name=only_p_ks,json=onlyPKs,proto3" json:"only_p_ks,omitempty"`
+ // Update the table statistics, using ANALYZE TABLE, on each table involved
+ // in the vdiff during initialization on each target shard. This will ensure
+ // that progress estimates are as accurate as possible -- but it does involve
+ // locks and can potentially impact query processing on the target keyspace.
+ UpdateTableStats bool `protobuf:"varint,13,opt,name=update_table_stats,json=updateTableStats,proto3" json:"update_table_stats,omitempty"`
+ // If there are collation differences between the source and target, you can
+ // have rows that are identical but simply returned in a different order from
+ // MySQL. We will do a second pass to compare the rows for any actual
+ // differences in this case and this flag allows you to control the resources
+ // used for this operation.
+ // The default is 0, comparing no extra rows.
+ MaxExtraRowsToCompare int64 `protobuf:"varint,14,opt,name=max_extra_rows_to_compare,json=maxExtraRowsToCompare,proto3" json:"max_extra_rows_to_compare,omitempty"`
+ // Wait for the vdiff to complete before returning (making the call synchronous
+ // vs asynchronous by default).
+ Wait bool `protobuf:"varint,15,opt,name=wait,proto3" json:"wait,omitempty"`
+ // When wait is true, this is how frequently the vdiff progress will be shown.
+ WaitUpdateInterval *vttime.Duration `protobuf:"bytes,16,opt,name=wait_update_interval,json=waitUpdateInterval,proto3" json:"wait_update_interval,omitempty"`
+ // Automatically retry the vdiff if we encounter an error. This should almost
+ // always be set to true (default is false).
+ AutoRetry bool `protobuf:"varint,17,opt,name=auto_retry,json=autoRetry,proto3" json:"auto_retry,omitempty"`
+ // Include additional information in the vdiff report that is produced and
+ // stored on each target shard primary's _vt sidecar database.
+ Verbose bool `protobuf:"varint,18,opt,name=verbose,proto3" json:"verbose,omitempty"`
+ // The maximum number of rows to include in the row diff report (when
+ // differences are found) for each table on each shard.
+ // The default is 0, which will include no sample rows that differed.
+ MaxReportSampleRows int64 `protobuf:"varint,19,opt,name=max_report_sample_rows,json=maxReportSampleRows,proto3" json:"max_report_sample_rows,omitempty"`
+ // The maximum time that a diff of a single table can run on each target shard
+ // before it is stopped and then later resumed from where we left off. This
+ // can be helpful in limiting the impact of holding open that large transaction
+ // where we scan up to every row in the table.
+ // The default is 0 or no limit.
+ MaxDiffDuration *vttime.Duration `protobuf:"bytes,20,opt,name=max_diff_duration,json=maxDiffDuration,proto3" json:"max_diff_duration,omitempty"`
+ // At what length should we truncate the column values in the row diff report
+ // generated for each table on each shard when differences are detected.
+ // The default is 0, meaning do not truncate.
+ RowDiffColumnTruncateAt int64 `protobuf:"varint,21,opt,name=row_diff_column_truncate_at,json=rowDiffColumnTruncateAt,proto3" json:"row_diff_column_truncate_at,omitempty"`
+ // Auto start the vdiff after creating it.
+ // The default is true if no value is specified.
+ AutoStart *bool `protobuf:"varint,22,opt,name=auto_start,json=autoStart,proto3,oneof" json:"auto_start,omitempty"`
}
func (x *VDiffCreateRequest) Reset() {
*x = VDiffCreateRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[231]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[236]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VDiffCreateRequest) String() string {
@@ -14422,8 +14385,8 @@ func (x *VDiffCreateRequest) String() string {
func (*VDiffCreateRequest) ProtoMessage() {}
func (x *VDiffCreateRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[231]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[236]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -14435,7 +14398,7 @@ func (x *VDiffCreateRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use VDiffCreateRequest.ProtoReflect.Descriptor instead.
func (*VDiffCreateRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{231}
+ return file_vtctldata_proto_rawDescGZIP(), []int{236}
}
func (x *VDiffCreateRequest) GetWorkflow() string {
@@ -14604,11 +14567,9 @@ type VDiffCreateResponse struct {
func (x *VDiffCreateResponse) Reset() {
*x = VDiffCreateResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[232]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[237]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VDiffCreateResponse) String() string {
@@ -14618,8 +14579,8 @@ func (x *VDiffCreateResponse) String() string {
func (*VDiffCreateResponse) ProtoMessage() {}
func (x *VDiffCreateResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[232]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[237]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -14631,7 +14592,7 @@ func (x *VDiffCreateResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use VDiffCreateResponse.ProtoReflect.Descriptor instead.
func (*VDiffCreateResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{232}
+ return file_vtctldata_proto_rawDescGZIP(), []int{237}
}
func (x *VDiffCreateResponse) GetUUID() string {
@@ -14654,11 +14615,9 @@ type VDiffDeleteRequest struct {
func (x *VDiffDeleteRequest) Reset() {
*x = VDiffDeleteRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[233]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[238]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VDiffDeleteRequest) String() string {
@@ -14668,8 +14627,8 @@ func (x *VDiffDeleteRequest) String() string {
func (*VDiffDeleteRequest) ProtoMessage() {}
func (x *VDiffDeleteRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[233]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[238]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -14681,7 +14640,7 @@ func (x *VDiffDeleteRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use VDiffDeleteRequest.ProtoReflect.Descriptor instead.
func (*VDiffDeleteRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{233}
+ return file_vtctldata_proto_rawDescGZIP(), []int{238}
}
func (x *VDiffDeleteRequest) GetWorkflow() string {
@@ -14713,11 +14672,9 @@ type VDiffDeleteResponse struct {
func (x *VDiffDeleteResponse) Reset() {
*x = VDiffDeleteResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[234]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[239]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VDiffDeleteResponse) String() string {
@@ -14727,8 +14684,8 @@ func (x *VDiffDeleteResponse) String() string {
func (*VDiffDeleteResponse) ProtoMessage() {}
func (x *VDiffDeleteResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[234]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[239]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -14740,7 +14697,7 @@ func (x *VDiffDeleteResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use VDiffDeleteResponse.ProtoReflect.Descriptor instead.
func (*VDiffDeleteResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{234}
+ return file_vtctldata_proto_rawDescGZIP(), []int{239}
}
type VDiffResumeRequest struct {
@@ -14756,11 +14713,9 @@ type VDiffResumeRequest struct {
func (x *VDiffResumeRequest) Reset() {
*x = VDiffResumeRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[235]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[240]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VDiffResumeRequest) String() string {
@@ -14770,8 +14725,8 @@ func (x *VDiffResumeRequest) String() string {
func (*VDiffResumeRequest) ProtoMessage() {}
func (x *VDiffResumeRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[235]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[240]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -14783,7 +14738,7 @@ func (x *VDiffResumeRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use VDiffResumeRequest.ProtoReflect.Descriptor instead.
func (*VDiffResumeRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{235}
+ return file_vtctldata_proto_rawDescGZIP(), []int{240}
}
func (x *VDiffResumeRequest) GetWorkflow() string {
@@ -14822,11 +14777,9 @@ type VDiffResumeResponse struct {
func (x *VDiffResumeResponse) Reset() {
*x = VDiffResumeResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[236]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[241]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VDiffResumeResponse) String() string {
@@ -14836,8 +14789,8 @@ func (x *VDiffResumeResponse) String() string {
func (*VDiffResumeResponse) ProtoMessage() {}
func (x *VDiffResumeResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[236]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[241]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -14849,7 +14802,7 @@ func (x *VDiffResumeResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use VDiffResumeResponse.ProtoReflect.Descriptor instead.
func (*VDiffResumeResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{236}
+ return file_vtctldata_proto_rawDescGZIP(), []int{241}
}
type VDiffShowRequest struct {
@@ -14865,11 +14818,9 @@ type VDiffShowRequest struct {
func (x *VDiffShowRequest) Reset() {
*x = VDiffShowRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[237]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[242]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VDiffShowRequest) String() string {
@@ -14879,8 +14830,8 @@ func (x *VDiffShowRequest) String() string {
func (*VDiffShowRequest) ProtoMessage() {}
func (x *VDiffShowRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[237]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[242]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -14892,7 +14843,7 @@ func (x *VDiffShowRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use VDiffShowRequest.ProtoReflect.Descriptor instead.
func (*VDiffShowRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{237}
+ return file_vtctldata_proto_rawDescGZIP(), []int{242}
}
func (x *VDiffShowRequest) GetWorkflow() string {
@@ -14927,11 +14878,9 @@ type VDiffShowResponse struct {
func (x *VDiffShowResponse) Reset() {
*x = VDiffShowResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[238]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[243]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VDiffShowResponse) String() string {
@@ -14941,8 +14890,8 @@ func (x *VDiffShowResponse) String() string {
func (*VDiffShowResponse) ProtoMessage() {}
func (x *VDiffShowResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[238]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[243]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -14954,7 +14903,7 @@ func (x *VDiffShowResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use VDiffShowResponse.ProtoReflect.Descriptor instead.
func (*VDiffShowResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{238}
+ return file_vtctldata_proto_rawDescGZIP(), []int{243}
}
func (x *VDiffShowResponse) GetTabletResponses() map[string]*tabletmanagerdata.VDiffResponse {
@@ -14977,11 +14926,9 @@ type VDiffStopRequest struct {
func (x *VDiffStopRequest) Reset() {
*x = VDiffStopRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[239]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[244]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VDiffStopRequest) String() string {
@@ -14991,8 +14938,8 @@ func (x *VDiffStopRequest) String() string {
func (*VDiffStopRequest) ProtoMessage() {}
func (x *VDiffStopRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[239]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[244]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -15004,7 +14951,7 @@ func (x *VDiffStopRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use VDiffStopRequest.ProtoReflect.Descriptor instead.
func (*VDiffStopRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{239}
+ return file_vtctldata_proto_rawDescGZIP(), []int{244}
}
func (x *VDiffStopRequest) GetWorkflow() string {
@@ -15043,11 +14990,9 @@ type VDiffStopResponse struct {
func (x *VDiffStopResponse) Reset() {
*x = VDiffStopResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[240]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[245]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VDiffStopResponse) String() string {
@@ -15057,8 +15002,8 @@ func (x *VDiffStopResponse) String() string {
func (*VDiffStopResponse) ProtoMessage() {}
func (x *VDiffStopResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[240]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[245]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -15070,7 +15015,7 @@ func (x *VDiffStopResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use VDiffStopResponse.ProtoReflect.Descriptor instead.
func (*VDiffStopResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{240}
+ return file_vtctldata_proto_rawDescGZIP(), []int{245}
}
type WorkflowDeleteRequest struct {
@@ -15083,15 +15028,17 @@ type WorkflowDeleteRequest struct {
KeepData bool `protobuf:"varint,3,opt,name=keep_data,json=keepData,proto3" json:"keep_data,omitempty"`
KeepRoutingRules bool `protobuf:"varint,4,opt,name=keep_routing_rules,json=keepRoutingRules,proto3" json:"keep_routing_rules,omitempty"`
Shards []string `protobuf:"bytes,5,rep,name=shards,proto3" json:"shards,omitempty"`
+ // The max records to delete from the moved tables when cleaning
+ // up the migrated data. This is only used with multi-tenant
+ // MoveTables migrations.
+ DeleteBatchSize int64 `protobuf:"varint,6,opt,name=delete_batch_size,json=deleteBatchSize,proto3" json:"delete_batch_size,omitempty"`
}
func (x *WorkflowDeleteRequest) Reset() {
*x = WorkflowDeleteRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[241]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[246]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *WorkflowDeleteRequest) String() string {
@@ -15101,8 +15048,8 @@ func (x *WorkflowDeleteRequest) String() string {
func (*WorkflowDeleteRequest) ProtoMessage() {}
func (x *WorkflowDeleteRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[241]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[246]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -15114,7 +15061,7 @@ func (x *WorkflowDeleteRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use WorkflowDeleteRequest.ProtoReflect.Descriptor instead.
func (*WorkflowDeleteRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{241}
+ return file_vtctldata_proto_rawDescGZIP(), []int{246}
}
func (x *WorkflowDeleteRequest) GetKeyspace() string {
@@ -15152,6 +15099,13 @@ func (x *WorkflowDeleteRequest) GetShards() []string {
return nil
}
+func (x *WorkflowDeleteRequest) GetDeleteBatchSize() int64 {
+ if x != nil {
+ return x.DeleteBatchSize
+ }
+ return 0
+}
+
type WorkflowDeleteResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -15163,11 +15117,9 @@ type WorkflowDeleteResponse struct {
func (x *WorkflowDeleteResponse) Reset() {
*x = WorkflowDeleteResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[242]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[247]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *WorkflowDeleteResponse) String() string {
@@ -15177,8 +15129,8 @@ func (x *WorkflowDeleteResponse) String() string {
func (*WorkflowDeleteResponse) ProtoMessage() {}
func (x *WorkflowDeleteResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[242]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[247]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -15190,7 +15142,7 @@ func (x *WorkflowDeleteResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use WorkflowDeleteResponse.ProtoReflect.Descriptor instead.
func (*WorkflowDeleteResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{242}
+ return file_vtctldata_proto_rawDescGZIP(), []int{247}
}
func (x *WorkflowDeleteResponse) GetSummary() string {
@@ -15219,11 +15171,9 @@ type WorkflowStatusRequest struct {
func (x *WorkflowStatusRequest) Reset() {
*x = WorkflowStatusRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[243]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[248]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *WorkflowStatusRequest) String() string {
@@ -15233,8 +15183,8 @@ func (x *WorkflowStatusRequest) String() string {
func (*WorkflowStatusRequest) ProtoMessage() {}
func (x *WorkflowStatusRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[243]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[248]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -15246,7 +15196,7 @@ func (x *WorkflowStatusRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use WorkflowStatusRequest.ProtoReflect.Descriptor instead.
func (*WorkflowStatusRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{243}
+ return file_vtctldata_proto_rawDescGZIP(), []int{248}
}
func (x *WorkflowStatusRequest) GetKeyspace() string {
@@ -15283,11 +15233,9 @@ type WorkflowStatusResponse struct {
func (x *WorkflowStatusResponse) Reset() {
*x = WorkflowStatusResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[244]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[249]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *WorkflowStatusResponse) String() string {
@@ -15297,8 +15245,8 @@ func (x *WorkflowStatusResponse) String() string {
func (*WorkflowStatusResponse) ProtoMessage() {}
func (x *WorkflowStatusResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[244]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[249]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -15310,7 +15258,7 @@ func (x *WorkflowStatusResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use WorkflowStatusResponse.ProtoReflect.Descriptor instead.
func (*WorkflowStatusResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{244}
+ return file_vtctldata_proto_rawDescGZIP(), []int{249}
}
func (x *WorkflowStatusResponse) GetTableCopyState() map[string]*WorkflowStatusResponse_TableCopyState {
@@ -15355,11 +15303,9 @@ type WorkflowSwitchTrafficRequest struct {
func (x *WorkflowSwitchTrafficRequest) Reset() {
*x = WorkflowSwitchTrafficRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[245]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[250]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *WorkflowSwitchTrafficRequest) String() string {
@@ -15369,8 +15315,8 @@ func (x *WorkflowSwitchTrafficRequest) String() string {
func (*WorkflowSwitchTrafficRequest) ProtoMessage() {}
func (x *WorkflowSwitchTrafficRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[245]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[250]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -15382,7 +15328,7 @@ func (x *WorkflowSwitchTrafficRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use WorkflowSwitchTrafficRequest.ProtoReflect.Descriptor instead.
func (*WorkflowSwitchTrafficRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{245}
+ return file_vtctldata_proto_rawDescGZIP(), []int{250}
}
func (x *WorkflowSwitchTrafficRequest) GetKeyspace() string {
@@ -15482,11 +15428,9 @@ type WorkflowSwitchTrafficResponse struct {
func (x *WorkflowSwitchTrafficResponse) Reset() {
*x = WorkflowSwitchTrafficResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[246]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[251]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *WorkflowSwitchTrafficResponse) String() string {
@@ -15496,8 +15440,8 @@ func (x *WorkflowSwitchTrafficResponse) String() string {
func (*WorkflowSwitchTrafficResponse) ProtoMessage() {}
func (x *WorkflowSwitchTrafficResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[246]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[251]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -15509,7 +15453,7 @@ func (x *WorkflowSwitchTrafficResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use WorkflowSwitchTrafficResponse.ProtoReflect.Descriptor instead.
func (*WorkflowSwitchTrafficResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{246}
+ return file_vtctldata_proto_rawDescGZIP(), []int{251}
}
func (x *WorkflowSwitchTrafficResponse) GetSummary() string {
@@ -15553,11 +15497,9 @@ type WorkflowUpdateRequest struct {
func (x *WorkflowUpdateRequest) Reset() {
*x = WorkflowUpdateRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[247]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[252]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *WorkflowUpdateRequest) String() string {
@@ -15567,8 +15509,8 @@ func (x *WorkflowUpdateRequest) String() string {
func (*WorkflowUpdateRequest) ProtoMessage() {}
func (x *WorkflowUpdateRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[247]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[252]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -15580,7 +15522,7 @@ func (x *WorkflowUpdateRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use WorkflowUpdateRequest.ProtoReflect.Descriptor instead.
func (*WorkflowUpdateRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{247}
+ return file_vtctldata_proto_rawDescGZIP(), []int{252}
}
func (x *WorkflowUpdateRequest) GetKeyspace() string {
@@ -15608,11 +15550,9 @@ type WorkflowUpdateResponse struct {
func (x *WorkflowUpdateResponse) Reset() {
*x = WorkflowUpdateResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[248]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[253]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *WorkflowUpdateResponse) String() string {
@@ -15622,8 +15562,8 @@ func (x *WorkflowUpdateResponse) String() string {
func (*WorkflowUpdateResponse) ProtoMessage() {}
func (x *WorkflowUpdateResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[248]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[253]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -15635,7 +15575,7 @@ func (x *WorkflowUpdateResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use WorkflowUpdateResponse.ProtoReflect.Descriptor instead.
func (*WorkflowUpdateResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{248}
+ return file_vtctldata_proto_rawDescGZIP(), []int{253}
}
func (x *WorkflowUpdateResponse) GetSummary() string {
@@ -15660,11 +15600,9 @@ type GetMirrorRulesRequest struct {
func (x *GetMirrorRulesRequest) Reset() {
*x = GetMirrorRulesRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[249]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[254]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetMirrorRulesRequest) String() string {
@@ -15674,8 +15612,8 @@ func (x *GetMirrorRulesRequest) String() string {
func (*GetMirrorRulesRequest) ProtoMessage() {}
func (x *GetMirrorRulesRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[249]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[254]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -15687,7 +15625,7 @@ func (x *GetMirrorRulesRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetMirrorRulesRequest.ProtoReflect.Descriptor instead.
func (*GetMirrorRulesRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{249}
+ return file_vtctldata_proto_rawDescGZIP(), []int{254}
}
type GetMirrorRulesResponse struct {
@@ -15700,11 +15638,9 @@ type GetMirrorRulesResponse struct {
func (x *GetMirrorRulesResponse) Reset() {
*x = GetMirrorRulesResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[250]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[255]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetMirrorRulesResponse) String() string {
@@ -15714,8 +15650,8 @@ func (x *GetMirrorRulesResponse) String() string {
func (*GetMirrorRulesResponse) ProtoMessage() {}
func (x *GetMirrorRulesResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[250]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[255]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -15727,7 +15663,7 @@ func (x *GetMirrorRulesResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetMirrorRulesResponse.ProtoReflect.Descriptor instead.
func (*GetMirrorRulesResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{250}
+ return file_vtctldata_proto_rawDescGZIP(), []int{255}
}
func (x *GetMirrorRulesResponse) GetMirrorRules() *vschema.MirrorRules {
@@ -15750,11 +15686,9 @@ type WorkflowMirrorTrafficRequest struct {
func (x *WorkflowMirrorTrafficRequest) Reset() {
*x = WorkflowMirrorTrafficRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[251]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[256]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *WorkflowMirrorTrafficRequest) String() string {
@@ -15764,8 +15698,8 @@ func (x *WorkflowMirrorTrafficRequest) String() string {
func (*WorkflowMirrorTrafficRequest) ProtoMessage() {}
func (x *WorkflowMirrorTrafficRequest) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[251]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[256]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -15777,7 +15711,7 @@ func (x *WorkflowMirrorTrafficRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use WorkflowMirrorTrafficRequest.ProtoReflect.Descriptor instead.
func (*WorkflowMirrorTrafficRequest) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{251}
+ return file_vtctldata_proto_rawDescGZIP(), []int{256}
}
func (x *WorkflowMirrorTrafficRequest) GetKeyspace() string {
@@ -15820,11 +15754,9 @@ type WorkflowMirrorTrafficResponse struct {
func (x *WorkflowMirrorTrafficResponse) Reset() {
*x = WorkflowMirrorTrafficResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[252]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[257]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *WorkflowMirrorTrafficResponse) String() string {
@@ -15834,8 +15766,8 @@ func (x *WorkflowMirrorTrafficResponse) String() string {
func (*WorkflowMirrorTrafficResponse) ProtoMessage() {}
func (x *WorkflowMirrorTrafficResponse) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[252]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[257]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -15847,7 +15779,7 @@ func (x *WorkflowMirrorTrafficResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use WorkflowMirrorTrafficResponse.ProtoReflect.Descriptor instead.
func (*WorkflowMirrorTrafficResponse) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{252}
+ return file_vtctldata_proto_rawDescGZIP(), []int{257}
}
func (x *WorkflowMirrorTrafficResponse) GetSummary() string {
@@ -15882,11 +15814,9 @@ type Workflow_ReplicationLocation struct {
func (x *Workflow_ReplicationLocation) Reset() {
*x = Workflow_ReplicationLocation{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[255]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[260]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Workflow_ReplicationLocation) String() string {
@@ -15896,8 +15826,8 @@ func (x *Workflow_ReplicationLocation) String() string {
func (*Workflow_ReplicationLocation) ProtoMessage() {}
func (x *Workflow_ReplicationLocation) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[255]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[260]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -15938,11 +15868,9 @@ type Workflow_ShardStream struct {
func (x *Workflow_ShardStream) Reset() {
*x = Workflow_ShardStream{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[256]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[261]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Workflow_ShardStream) String() string {
@@ -15952,8 +15880,8 @@ func (x *Workflow_ShardStream) String() string {
func (*Workflow_ShardStream) ProtoMessage() {}
func (x *Workflow_ShardStream) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[256]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[261]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -16026,11 +15954,9 @@ type Workflow_Stream struct {
func (x *Workflow_Stream) Reset() {
*x = Workflow_Stream{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[257]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[262]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Workflow_Stream) String() string {
@@ -16040,8 +15966,8 @@ func (x *Workflow_Stream) String() string {
func (*Workflow_Stream) ProtoMessage() {}
func (x *Workflow_Stream) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[257]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[262]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -16208,11 +16134,9 @@ type Workflow_Stream_CopyState struct {
func (x *Workflow_Stream_CopyState) Reset() {
*x = Workflow_Stream_CopyState{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[258]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[263]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Workflow_Stream_CopyState) String() string {
@@ -16222,8 +16146,8 @@ func (x *Workflow_Stream_CopyState) String() string {
func (*Workflow_Stream_CopyState) ProtoMessage() {}
func (x *Workflow_Stream_CopyState) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[258]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[263]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -16276,11 +16200,9 @@ type Workflow_Stream_Log struct {
func (x *Workflow_Stream_Log) Reset() {
*x = Workflow_Stream_Log{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[259]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[264]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Workflow_Stream_Log) String() string {
@@ -16290,8 +16212,8 @@ func (x *Workflow_Stream_Log) String() string {
func (*Workflow_Stream_Log) ProtoMessage() {}
func (x *Workflow_Stream_Log) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[259]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[264]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -16373,11 +16295,9 @@ type Workflow_Stream_ThrottlerStatus struct {
func (x *Workflow_Stream_ThrottlerStatus) Reset() {
*x = Workflow_Stream_ThrottlerStatus{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[260]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[265]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Workflow_Stream_ThrottlerStatus) String() string {
@@ -16387,8 +16307,8 @@ func (x *Workflow_Stream_ThrottlerStatus) String() string {
func (*Workflow_Stream_ThrottlerStatus) ProtoMessage() {}
func (x *Workflow_Stream_ThrottlerStatus) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[260]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[265]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -16427,11 +16347,9 @@ type ApplyVSchemaResponse_ParamList struct {
func (x *ApplyVSchemaResponse_ParamList) Reset() {
*x = ApplyVSchemaResponse_ParamList{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[263]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[268]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ApplyVSchemaResponse_ParamList) String() string {
@@ -16441,8 +16359,8 @@ func (x *ApplyVSchemaResponse_ParamList) String() string {
func (*ApplyVSchemaResponse_ParamList) ProtoMessage() {}
func (x *ApplyVSchemaResponse_ParamList) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[263]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[268]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -16474,11 +16392,9 @@ type GetSrvKeyspaceNamesResponse_NameList struct {
func (x *GetSrvKeyspaceNamesResponse_NameList) Reset() {
*x = GetSrvKeyspaceNamesResponse_NameList{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[272]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[280]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GetSrvKeyspaceNamesResponse_NameList) String() string {
@@ -16488,8 +16404,8 @@ func (x *GetSrvKeyspaceNamesResponse_NameList) String() string {
func (*GetSrvKeyspaceNamesResponse_NameList) ProtoMessage() {}
func (x *GetSrvKeyspaceNamesResponse_NameList) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[272]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[280]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -16501,7 +16417,7 @@ func (x *GetSrvKeyspaceNamesResponse_NameList) ProtoReflect() protoreflect.Messa
// Deprecated: Use GetSrvKeyspaceNamesResponse_NameList.ProtoReflect.Descriptor instead.
func (*GetSrvKeyspaceNamesResponse_NameList) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{97, 1}
+ return file_vtctldata_proto_rawDescGZIP(), []int{99, 1}
}
func (x *GetSrvKeyspaceNamesResponse_NameList) GetNames() []string {
@@ -16523,11 +16439,9 @@ type MoveTablesCreateResponse_TabletInfo struct {
func (x *MoveTablesCreateResponse_TabletInfo) Reset() {
*x = MoveTablesCreateResponse_TabletInfo{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[276]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[284]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MoveTablesCreateResponse_TabletInfo) String() string {
@@ -16537,8 +16451,8 @@ func (x *MoveTablesCreateResponse_TabletInfo) String() string {
func (*MoveTablesCreateResponse_TabletInfo) ProtoMessage() {}
func (x *MoveTablesCreateResponse_TabletInfo) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[276]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[284]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -16550,7 +16464,7 @@ func (x *MoveTablesCreateResponse_TabletInfo) ProtoReflect() protoreflect.Messag
// Deprecated: Use MoveTablesCreateResponse_TabletInfo.ProtoReflect.Descriptor instead.
func (*MoveTablesCreateResponse_TabletInfo) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{147, 0}
+ return file_vtctldata_proto_rawDescGZIP(), []int{152, 0}
}
func (x *MoveTablesCreateResponse_TabletInfo) GetTablet() *topodata.TabletAlias {
@@ -16579,11 +16493,9 @@ type WorkflowDeleteResponse_TabletInfo struct {
func (x *WorkflowDeleteResponse_TabletInfo) Reset() {
*x = WorkflowDeleteResponse_TabletInfo{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[286]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[294]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *WorkflowDeleteResponse_TabletInfo) String() string {
@@ -16593,8 +16505,8 @@ func (x *WorkflowDeleteResponse_TabletInfo) String() string {
func (*WorkflowDeleteResponse_TabletInfo) ProtoMessage() {}
func (x *WorkflowDeleteResponse_TabletInfo) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[286]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[294]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -16606,7 +16518,7 @@ func (x *WorkflowDeleteResponse_TabletInfo) ProtoReflect() protoreflect.Message
// Deprecated: Use WorkflowDeleteResponse_TabletInfo.ProtoReflect.Descriptor instead.
func (*WorkflowDeleteResponse_TabletInfo) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{242, 0}
+ return file_vtctldata_proto_rawDescGZIP(), []int{247, 0}
}
func (x *WorkflowDeleteResponse_TabletInfo) GetTablet() *topodata.TabletAlias {
@@ -16638,11 +16550,9 @@ type WorkflowStatusResponse_TableCopyState struct {
func (x *WorkflowStatusResponse_TableCopyState) Reset() {
*x = WorkflowStatusResponse_TableCopyState{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[287]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[295]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *WorkflowStatusResponse_TableCopyState) String() string {
@@ -16652,8 +16562,8 @@ func (x *WorkflowStatusResponse_TableCopyState) String() string {
func (*WorkflowStatusResponse_TableCopyState) ProtoMessage() {}
func (x *WorkflowStatusResponse_TableCopyState) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[287]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[295]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -16665,7 +16575,7 @@ func (x *WorkflowStatusResponse_TableCopyState) ProtoReflect() protoreflect.Mess
// Deprecated: Use WorkflowStatusResponse_TableCopyState.ProtoReflect.Descriptor instead.
func (*WorkflowStatusResponse_TableCopyState) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{244, 0}
+ return file_vtctldata_proto_rawDescGZIP(), []int{249, 0}
}
func (x *WorkflowStatusResponse_TableCopyState) GetRowsCopied() int64 {
@@ -16725,11 +16635,9 @@ type WorkflowStatusResponse_ShardStreamState struct {
func (x *WorkflowStatusResponse_ShardStreamState) Reset() {
*x = WorkflowStatusResponse_ShardStreamState{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[288]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[296]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *WorkflowStatusResponse_ShardStreamState) String() string {
@@ -16739,8 +16647,8 @@ func (x *WorkflowStatusResponse_ShardStreamState) String() string {
func (*WorkflowStatusResponse_ShardStreamState) ProtoMessage() {}
func (x *WorkflowStatusResponse_ShardStreamState) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[288]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[296]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -16752,7 +16660,7 @@ func (x *WorkflowStatusResponse_ShardStreamState) ProtoReflect() protoreflect.Me
// Deprecated: Use WorkflowStatusResponse_ShardStreamState.ProtoReflect.Descriptor instead.
func (*WorkflowStatusResponse_ShardStreamState) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{244, 1}
+ return file_vtctldata_proto_rawDescGZIP(), []int{249, 1}
}
func (x *WorkflowStatusResponse_ShardStreamState) GetId() int32 {
@@ -16807,11 +16715,9 @@ type WorkflowStatusResponse_ShardStreams struct {
func (x *WorkflowStatusResponse_ShardStreams) Reset() {
*x = WorkflowStatusResponse_ShardStreams{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[289]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[297]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *WorkflowStatusResponse_ShardStreams) String() string {
@@ -16821,8 +16727,8 @@ func (x *WorkflowStatusResponse_ShardStreams) String() string {
func (*WorkflowStatusResponse_ShardStreams) ProtoMessage() {}
func (x *WorkflowStatusResponse_ShardStreams) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[289]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[297]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -16834,7 +16740,7 @@ func (x *WorkflowStatusResponse_ShardStreams) ProtoReflect() protoreflect.Messag
// Deprecated: Use WorkflowStatusResponse_ShardStreams.ProtoReflect.Descriptor instead.
func (*WorkflowStatusResponse_ShardStreams) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{244, 2}
+ return file_vtctldata_proto_rawDescGZIP(), []int{249, 2}
}
func (x *WorkflowStatusResponse_ShardStreams) GetStreams() []*WorkflowStatusResponse_ShardStreamState {
@@ -16857,11 +16763,9 @@ type WorkflowUpdateResponse_TabletInfo struct {
func (x *WorkflowUpdateResponse_TabletInfo) Reset() {
*x = WorkflowUpdateResponse_TabletInfo{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[292]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtctldata_proto_msgTypes[300]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *WorkflowUpdateResponse_TabletInfo) String() string {
@@ -16871,8 +16775,8 @@ func (x *WorkflowUpdateResponse_TabletInfo) String() string {
func (*WorkflowUpdateResponse_TabletInfo) ProtoMessage() {}
func (x *WorkflowUpdateResponse_TabletInfo) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[292]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_vtctldata_proto_msgTypes[300]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -16884,7 +16788,7 @@ func (x *WorkflowUpdateResponse_TabletInfo) ProtoReflect() protoreflect.Message
// Deprecated: Use WorkflowUpdateResponse_TabletInfo.ProtoReflect.Descriptor instead.
func (*WorkflowUpdateResponse_TabletInfo) Descriptor() ([]byte, []int) {
- return file_vtctldata_proto_rawDescGZIP(), []int{248, 0}
+ return file_vtctldata_proto_rawDescGZIP(), []int{253, 0}
}
func (x *WorkflowUpdateResponse_TabletInfo) GetTablet() *topodata.TabletAlias {
@@ -17157,410 +17061,352 @@ var file_vtctldata_proto_rawDesc = []byte{
0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
0x6d, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61,
- 0x72, 0x64, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x22, 0x82, 0x02, 0x0a, 0x0f, 0x57, 0x6f,
+ 0x72, 0x64, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x22, 0xda, 0x02, 0x0a, 0x0f, 0x57, 0x6f,
0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1b, 0x0a,
0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x3f, 0x0a, 0x1c, 0x73, 0x74,
- 0x72, 0x69, 0x70, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x65, 0x64, 0x5f, 0x61, 0x75, 0x74, 0x6f,
- 0x5f, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08,
- 0x52, 0x19, 0x73, 0x74, 0x72, 0x69, 0x70, 0x53, 0x68, 0x61, 0x72, 0x64, 0x65, 0x64, 0x41, 0x75,
- 0x74, 0x6f, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73,
- 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61,
- 0x72, 0x64, 0x73, 0x12, 0x3e, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20,
- 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,
- 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x63, 0x6f, 0x6e,
- 0x66, 0x69, 0x67, 0x1a, 0x39, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74,
- 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xcf,
- 0x11, 0x0a, 0x08, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x6e,
- 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
- 0x3f, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b,
- 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
- 0x12, 0x3f, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72,
- 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65,
- 0x74, 0x12, 0x31, 0x0a, 0x15, 0x6d, 0x61, 0x78, 0x5f, 0x76, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69,
- 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03,
- 0x52, 0x12, 0x6d, 0x61, 0x78, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x4c, 0x61, 0x67, 0x12, 0x4a, 0x0a, 0x0d, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x74,
- 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x76, 0x74,
- 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
- 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74,
- 0x72, 0x79, 0x52, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73,
- 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x79, 0x70,
- 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
- 0x77, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
- 0x77, 0x5f, 0x73, 0x75, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x0f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x75, 0x62, 0x54, 0x79, 0x70,
- 0x65, 0x12, 0x48, 0x0a, 0x21, 0x6d, 0x61, 0x78, 0x5f, 0x76, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69,
- 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69,
- 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1d, 0x6d, 0x61,
- 0x78, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x61,
- 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, 0x12, 0x30, 0x0a, 0x14, 0x64,
- 0x65, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x6b,
- 0x65, 0x79, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x64, 0x65, 0x66, 0x65, 0x72,
- 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x34, 0x0a,
- 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a,
- 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66,
- 0x6c, 0x6f, 0x77, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69,
- 0x6f, 0x6e, 0x73, 0x1a, 0x60, 0x0a, 0x11, 0x53, 0x68, 0x61, 0x72, 0x64, 0x53, 0x74, 0x72, 0x65,
- 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x35, 0x0a, 0x05, 0x76, 0x61,
- 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74,
+ 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x6e, 0x0a, 0x1f, 0x73, 0x68,
+ 0x61, 0x72, 0x64, 0x65, 0x64, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x69, 0x6e, 0x63, 0x72, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x53, 0x68, 0x61, 0x72, 0x64, 0x65, 0x64, 0x41, 0x75, 0x74, 0x6f, 0x49, 0x6e, 0x63, 0x72, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x1c, 0x73, 0x68,
+ 0x61, 0x72, 0x64, 0x65, 0x64, 0x41, 0x75, 0x74, 0x6f, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65,
+ 0x6e, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68,
+ 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72,
+ 0x64, 0x73, 0x12, 0x3e, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57,
+ 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43,
+ 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66,
+ 0x69, 0x67, 0x12, 0x27, 0x0a, 0x0f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x6b, 0x65, 0x79,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x67, 0x6c, 0x6f,
+ 0x62, 0x61, 0x6c, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x43,
+ 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
+ 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xcf, 0x11, 0x0a, 0x08, 0x57, 0x6f, 0x72, 0x6b, 0x66,
+ 0x6c, 0x6f, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x65, 0x70,
+ 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67,
+ 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x65,
+ 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x31, 0x0a, 0x15, 0x6d, 0x61, 0x78,
+ 0x5f, 0x76, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c,
+ 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x56, 0x52, 0x65,
+ 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, 0x12, 0x4a, 0x0a, 0x0d,
+ 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20,
+ 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x53, 0x74,
+ 0x72, 0x65, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x68, 0x61, 0x72,
+ 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x6f, 0x72, 0x6b,
+ 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2a, 0x0a,
+ 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x75, 0x62, 0x5f, 0x74, 0x79,
+ 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
+ 0x6f, 0x77, 0x53, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12, 0x48, 0x0a, 0x21, 0x6d, 0x61, 0x78,
+ 0x5f, 0x76, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74,
+ 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67, 0x18, 0x08,
+ 0x20, 0x01, 0x28, 0x03, 0x52, 0x1d, 0x6d, 0x61, 0x78, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x4c, 0x61, 0x67, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x65, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63,
+ 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28,
+ 0x08, 0x52, 0x12, 0x64, 0x65, 0x66, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72,
+ 0x79, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x34, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4f, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x60, 0x0a, 0x11, 0x53,
+ 0x68, 0x61, 0x72, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
+ 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
+ 0x65, 0x79, 0x12, 0x35, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f,
+ 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x53, 0x74, 0x72, 0x65,
+ 0x61, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x49, 0x0a,
+ 0x13, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09,
+ 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x1a, 0xb9, 0x01, 0x0a, 0x0b, 0x53, 0x68, 0x61,
+ 0x72, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x34, 0x0a, 0x07, 0x73, 0x74, 0x72, 0x65,
+ 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x76, 0x74, 0x63, 0x74,
0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x53,
- 0x68, 0x61, 0x72, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x49, 0x0a, 0x13, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08,
- 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
- 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72,
- 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73,
- 0x1a, 0xb9, 0x01, 0x0a, 0x0b, 0x53, 0x68, 0x61, 0x72, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d,
- 0x12, 0x34, 0x0a, 0x07, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
- 0x0b, 0x32, 0x1a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f,
- 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x07, 0x73,
- 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x46, 0x0a, 0x0f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
- 0x1d, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64,
- 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x0e,
- 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x73, 0x12, 0x2c,
- 0x0a, 0x12, 0x69, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x73, 0x65, 0x72,
- 0x76, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x73, 0x50, 0x72,
- 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x1a, 0xc1, 0x0a, 0x0a,
- 0x06, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x2d, 0x0a,
- 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
- 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41,
- 0x6c, 0x69, 0x61, 0x73, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x3d, 0x0a, 0x0d,
- 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0c, 0x62,
- 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70,
- 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70,
- 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x70, 0x5f,
- 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c,
- 0x73, 0x74, 0x6f, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05,
- 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61,
- 0x74, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x15, 0x74,
- 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73,
- 0x74, 0x61, 0x6d, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74,
- 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x14, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61,
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2f,
- 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0a,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69,
- 0x6d, 0x65, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12,
- 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x45, 0x0a, 0x0b, 0x63, 0x6f, 0x70,
- 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24,
- 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66,
- 0x6c, 0x6f, 0x77, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x53,
- 0x74, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x63, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73,
- 0x12, 0x32, 0x0a, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e,
- 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66,
- 0x6c, 0x6f, 0x77, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x4c, 0x6f, 0x67, 0x52, 0x04,
- 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x6f, 0x67, 0x5f, 0x66, 0x65, 0x74, 0x63,
- 0x68, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c,
- 0x6f, 0x67, 0x46, 0x65, 0x74, 0x63, 0x68, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04,
- 0x74, 0x61, 0x67, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73,
- 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x64, 0x18,
- 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x6f, 0x77, 0x73, 0x43, 0x6f, 0x70, 0x69, 0x65,
- 0x64, 0x12, 0x55, 0x0a, 0x10, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x5f, 0x73,
- 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x76, 0x74,
- 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
- 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65,
- 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c,
- 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x14,
- 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65,
- 0x73, 0x12, 0x6c, 0x0a, 0x1b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65,
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
- 0x18, 0x13, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d,
- 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72,
- 0x65, 0x6e, 0x63, 0x65, 0x52, 0x19, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65,
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12,
- 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05,
- 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x1a, 0x57, 0x0a, 0x09, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61,
- 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6c, 0x61, 0x73, 0x74,
- 0x5f, 0x70, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x61, 0x73, 0x74, 0x50,
- 0x6b, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x1a, 0xe6,
- 0x01, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d,
- 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x74, 0x72, 0x65, 0x61,
- 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65,
- 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x0a,
- 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52,
- 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x2b, 0x0a, 0x0a, 0x75, 0x70,
- 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c,
- 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x09, 0x75, 0x70,
- 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61,
- 0x67, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
- 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03,
- 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x77, 0x0a, 0x0f, 0x54, 0x68, 0x72, 0x6f, 0x74,
- 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2f, 0x0a, 0x13, 0x63, 0x6f,
- 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65,
- 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65,
- 0x6e, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x0e, 0x74,
- 0x69, 0x6d, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d,
- 0x65, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64,
- 0x22, 0x59, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x63, 0x65,
- 0x6c, 0x6c, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e,
- 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66,
- 0x6f, 0x52, 0x08, 0x63, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x15, 0x0a, 0x13, 0x41,
- 0x64, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x40, 0x0a, 0x14, 0x41, 0x64, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c,
- 0x69, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,
- 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14,
- 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63,
- 0x65, 0x6c, 0x6c, 0x73, 0x22, 0x17, 0x0a, 0x15, 0x41, 0x64, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x73,
- 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xbf, 0x01,
- 0x0a, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52,
- 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x12, 0x53, 0x0a, 0x16, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x72,
- 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65,
- 0x73, 0x52, 0x14, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69,
- 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x6b, 0x69, 0x70, 0x5f,
- 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x73,
- 0x6b, 0x69, 0x70, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65,
- 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28,
- 0x09, 0x52, 0x0c, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x22,
- 0x78, 0x0a, 0x21, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x16, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b,
+ 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x07, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x46,
+ 0x0a, 0x0f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
+ 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43,
+ 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f,
+ 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x69, 0x73, 0x5f, 0x70, 0x72, 0x69,
+ 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01,
+ 0x28, 0x08, 0x52, 0x10, 0x69, 0x73, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x65, 0x72,
+ 0x76, 0x69, 0x6e, 0x67, 0x1a, 0xc1, 0x0a, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12,
+ 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12,
+ 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+ 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x2d, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18,
+ 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x06, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x12, 0x3d, 0x0a, 0x0d, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x5f, 0x73,
+ 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x62, 0x69,
+ 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x53,
+ 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0c, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x53, 0x6f, 0x75,
+ 0x72, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18,
+ 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+ 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+ 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x70, 0x50, 0x6f, 0x73, 0x69,
+ 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x62,
+ 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x62, 0x4e,
+ 0x61, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x09, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65,
+ 0x52, 0x14, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d,
+ 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2f, 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x75,
+ 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76,
+ 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65,
+ 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61,
+ 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
+ 0x65, 0x12, 0x45, 0x0a, 0x0b, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73,
+ 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x53, 0x74, 0x72, 0x65,
+ 0x61, 0x6d, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x63, 0x6f,
+ 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x04, 0x6c, 0x6f, 0x67, 0x73,
+ 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x53, 0x74, 0x72, 0x65,
+ 0x61, 0x6d, 0x2e, 0x4c, 0x6f, 0x67, 0x52, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x26, 0x0a, 0x0f,
+ 0x6c, 0x6f, 0x67, 0x5f, 0x66, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18,
+ 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x6f, 0x67, 0x46, 0x65, 0x74, 0x63, 0x68, 0x45,
+ 0x72, 0x72, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x0f, 0x20, 0x03,
+ 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x6f, 0x77, 0x73,
+ 0x5f, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72,
+ 0x6f, 0x77, 0x73, 0x43, 0x6f, 0x70, 0x69, 0x65, 0x64, 0x12, 0x55, 0x0a, 0x10, 0x74, 0x68, 0x72,
+ 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x11, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e,
+ 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52,
+ 0x0f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
+ 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73,
+ 0x18, 0x12, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x6c, 0x0a, 0x1b, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72,
+ 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c,
+ 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x19, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65,
+ 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73,
+ 0x18, 0x14, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x1a, 0x57, 0x0a,
+ 0x09, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x12, 0x17, 0x0a, 0x07, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x06, 0x6c, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x72,
+ 0x65, 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x74,
+ 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x1a, 0xe6, 0x01, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x12, 0x0e,
+ 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b,
+ 0x0a, 0x09, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x03, 0x52, 0x08, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74,
+ 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12,
+ 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+ 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64,
+ 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69,
+ 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64,
+ 0x41, 0x74, 0x12, 0x2b, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74,
+ 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e,
+ 0x54, 0x69, 0x6d, 0x65, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12,
+ 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75,
+ 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x1a,
+ 0x77, 0x0a, 0x0f, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74,
+ 0x75, 0x73, 0x12, 0x2f, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5f,
+ 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x12, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74,
+ 0x6c, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x6f,
+ 0x74, 0x74, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74,
+ 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x54,
+ 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x22, 0x59, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x43,
+ 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12,
+ 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
+ 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x63, 0x65, 0x6c, 0x6c, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x63, 0x65, 0x6c, 0x6c, 0x49,
+ 0x6e, 0x66, 0x6f, 0x22, 0x15, 0x0a, 0x13, 0x41, 0x64, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e,
+ 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x40, 0x0a, 0x14, 0x41, 0x64,
+ 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18,
+ 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0x17, 0x0a, 0x15,
+ 0x41, 0x64, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xbf, 0x01, 0x0a, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x4b,
0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75,
- 0x6c, 0x65, 0x73, 0x52, 0x14, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75,
- 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x9e, 0x01, 0x0a, 0x18, 0x41, 0x70,
- 0x70, 0x6c, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x0d, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e,
- 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
- 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52,
- 0x75, 0x6c, 0x65, 0x73, 0x52, 0x0c, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c,
- 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x72, 0x65, 0x62, 0x75, 0x69,
- 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x73, 0x6b, 0x69, 0x70, 0x52, 0x65,
- 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64,
- 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65,
- 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0x1b, 0x0a, 0x19, 0x41, 0x70,
- 0x70, 0x6c, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb3, 0x01, 0x0a, 0x1d, 0x41, 0x70, 0x70, 0x6c,
- 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c,
- 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x13, 0x73, 0x68, 0x61,
- 0x72, 0x64, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61,
- 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c,
- 0x65, 0x73, 0x52, 0x11, 0x73, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67,
- 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x72, 0x65,
- 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x73, 0x6b, 0x69,
- 0x70, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x62, 0x75,
- 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52,
- 0x0c, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0x20, 0x0a,
- 0x1e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69,
- 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
- 0xce, 0x02, 0x0a, 0x12, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52,
- 0x03, 0x73, 0x71, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x64, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x61,
- 0x74, 0x65, 0x67, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x64, 0x6c, 0x53,
- 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x75, 0x69, 0x64, 0x5f,
- 0x6c, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x75, 0x75, 0x69, 0x64,
- 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x10, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78,
- 0x74, 0x12, 0x44, 0x0a, 0x15, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x52, 0x13, 0x77, 0x61, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73,
- 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x2c, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x65,
- 0x72, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72,
- 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x08, 0x63, 0x61, 0x6c,
- 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x73,
- 0x69, 0x7a, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x62, 0x61, 0x74, 0x63, 0x68,
- 0x53, 0x69, 0x7a, 0x65, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09,
- 0x22, 0xe8, 0x01, 0x0a, 0x13, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x75, 0x69, 0x64,
- 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x75, 0x75, 0x69,
- 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x6c, 0x0a, 0x16, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x66,
- 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18,
- 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74,
- 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13,
- 0x72, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68,
- 0x61, 0x72, 0x64, 0x1a, 0x46, 0x0a, 0x18, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63,
- 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
- 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
- 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04,
- 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xdb, 0x01, 0x0a, 0x13,
- 0x41, 0x70, 0x70, 0x6c, 0x79, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12,
+ 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x16, 0x6b, 0x65,
+ 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72,
+ 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x76, 0x73, 0x63,
+ 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75,
+ 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x14, 0x6b, 0x65, 0x79, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12,
0x21, 0x0a, 0x0c, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18,
0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x73, 0x6b, 0x69, 0x70, 0x52, 0x65, 0x62, 0x75, 0x69,
- 0x6c, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x03, 0x20,
- 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x63,
- 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c,
- 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x76, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x05, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65,
- 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x07, 0x76, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12,
- 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x71,
- 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28,
- 0x08, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x22, 0xca, 0x02, 0x0a, 0x14, 0x41, 0x70,
- 0x70, 0x6c, 0x79, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x76, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b,
- 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x07, 0x76, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
- 0x12, 0x6c, 0x0a, 0x15, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x76, 0x69, 0x6e, 0x64,
- 0x65, 0x78, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
- 0x38, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x70, 0x70, 0x6c,
- 0x79, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x2e, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x50, 0x61,
- 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x75, 0x6e, 0x6b, 0x6e, 0x6f,
- 0x77, 0x6e, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x71,
- 0x0a, 0x18, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x50,
- 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
- 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3f, 0x0a, 0x05,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x76, 0x74,
- 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x56, 0x53, 0x63,
- 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x61, 0x72,
- 0x61, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
- 0x01, 0x1a, 0x23, 0x0a, 0x09, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16,
- 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06,
- 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xa1, 0x02, 0x0a, 0x0d, 0x42, 0x61, 0x63, 0x6b, 0x75,
- 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15,
- 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69,
- 0x61, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x72, 0x69, 0x6d,
- 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77,
- 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75,
- 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x6f,
- 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x30, 0x0a, 0x14, 0x69, 0x6e, 0x63,
- 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x70, 0x6f,
- 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65,
- 0x6e, 0x74, 0x61, 0x6c, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x6f, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x75,
- 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x5f, 0x73, 0x61, 0x66, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28,
- 0x08, 0x52, 0x0b, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x53, 0x61, 0x66, 0x65, 0x12, 0x28,
- 0x0a, 0x0d, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x18,
- 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x45,
- 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x88, 0x01, 0x01, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x62, 0x61, 0x63,
- 0x6b, 0x75, 0x70, 0x5f, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x22, 0xa2, 0x01, 0x0a, 0x0e, 0x42,
- 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a,
- 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x05, 0x65, 0x76, 0x65,
- 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74,
- 0x69, 0x6c, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22,
- 0xe2, 0x01, 0x0a, 0x12, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f,
- 0x77, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52,
- 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x20, 0x0a,
- 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x04, 0x20, 0x01,
- 0x28, 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12,
- 0x21, 0x0a, 0x0c, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x5f, 0x73, 0x61, 0x66, 0x65, 0x18,
- 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x53, 0x61,
- 0x66, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61,
- 0x6c, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x70, 0x6f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x12, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x46, 0x72, 0x6f,
- 0x6d, 0x50, 0x6f, 0x73, 0x22, 0x4e, 0x0a, 0x1c, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53, 0x63,
- 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
- 0x75, 0x75, 0x69, 0x64, 0x22, 0xdf, 0x01, 0x0a, 0x1d, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53,
- 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x16, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x61,
- 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64,
- 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d,
- 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x2e, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53,
- 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x72, 0x6f, 0x77, 0x73, 0x41,
- 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x1a, 0x46,
- 0x0a, 0x18, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79,
- 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
- 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x9b, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67,
- 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69,
- 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52,
- 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x2d, 0x0a, 0x07,
- 0x64, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e,
- 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54,
- 0x79, 0x70, 0x65, 0x52, 0x06, 0x64, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x64,
- 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x72,
- 0x79, 0x52, 0x75, 0x6e, 0x22, 0xa6, 0x01, 0x0a, 0x18, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x12, 0x35, 0x0a, 0x0d, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x0c, 0x62, 0x65, 0x66, 0x6f,
- 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x33, 0x0a, 0x0c, 0x61, 0x66, 0x74, 0x65,
- 0x72, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10,
- 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x52, 0x0b, 0x61, 0x66, 0x74, 0x65, 0x72, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x1e, 0x0a,
- 0x0b, 0x77, 0x61, 0x73, 0x5f, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x03, 0x20, 0x01,
- 0x28, 0x08, 0x52, 0x09, 0x77, 0x61, 0x73, 0x44, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x22, 0xe3, 0x01,
- 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
- 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41,
- 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61,
- 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05,
- 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f,
- 0x70, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x18, 0x04, 0x20,
- 0x01, 0x28, 0x08, 0x52, 0x15, 0x73, 0x6b, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x12, 0x27, 0x0a, 0x10, 0x6f, 0x6b,
- 0x5f, 0x69, 0x66, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x05,
- 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6f, 0x6b, 0x49, 0x66, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69,
- 0x73, 0x74, 0x73, 0x22, 0x93, 0x01, 0x0a, 0x16, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72,
- 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38,
- 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x3f, 0x0a, 0x05, 0x43, 0x68, 0x65, 0x63,
- 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63,
- 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x52, 0x05, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x22, 0x4f, 0x0a, 0x1d, 0x43, 0x6c, 0x65,
- 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65,
- 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65,
- 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0xe1, 0x01, 0x0a, 0x1e, 0x43,
- 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a,
+ 0x6c, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x65,
+ 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x62, 0x75, 0x69,
+ 0x6c, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0x78, 0x0a, 0x21, 0x41, 0x70, 0x70, 0x6c, 0x79,
+ 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52,
+ 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x16,
+ 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67,
+ 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x76,
+ 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52,
+ 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x14, 0x6b, 0x65, 0x79,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65,
+ 0x73, 0x22, 0x9e, 0x01, 0x0a, 0x18, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x69,
+ 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a,
+ 0x0a, 0x0d, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e,
+ 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x0c, 0x72, 0x6f,
+ 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x6b,
+ 0x69, 0x70, 0x5f, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08,
+ 0x52, 0x0b, 0x73, 0x6b, 0x69, 0x70, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x23, 0x0a,
+ 0x0d, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x03,
+ 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43, 0x65, 0x6c,
+ 0x6c, 0x73, 0x22, 0x1b, 0x0a, 0x19, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x69,
+ 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0xb3, 0x01, 0x0a, 0x1d, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f,
+ 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x4a, 0x0a, 0x13, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x69,
+ 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a,
+ 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f,
+ 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x11, 0x73, 0x68, 0x61, 0x72,
+ 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x21, 0x0a,
+ 0x0c, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x08, 0x52, 0x0b, 0x73, 0x6b, 0x69, 0x70, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64,
+ 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x65, 0x6c, 0x6c,
+ 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64,
+ 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0x20, 0x0a, 0x1e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x68,
+ 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xce, 0x02, 0x0a, 0x12, 0x41, 0x70, 0x70, 0x6c,
+ 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a,
+ 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x71,
+ 0x6c, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x73, 0x71, 0x6c, 0x12, 0x21, 0x0a, 0x0c,
+ 0x64, 0x64, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x0b, 0x64, 0x64, 0x6c, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12,
+ 0x1b, 0x0a, 0x09, 0x75, 0x75, 0x69, 0x64, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x03,
+ 0x28, 0x09, 0x52, 0x08, 0x75, 0x75, 0x69, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x11,
+ 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78,
+ 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x44, 0x0a, 0x15, 0x77, 0x61, 0x69,
+ 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f,
+ 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d,
+ 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x77, 0x61, 0x69, 0x74,
+ 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12,
+ 0x2c, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65,
+ 0x72, 0x49, 0x44, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a,
+ 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28,
+ 0x03, 0x52, 0x09, 0x62, 0x61, 0x74, 0x63, 0x68, 0x53, 0x69, 0x7a, 0x65, 0x4a, 0x04, 0x08, 0x02,
+ 0x10, 0x03, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x22, 0xe8, 0x01, 0x0a, 0x13, 0x41, 0x70, 0x70,
+ 0x6c, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x75, 0x69, 0x64, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20,
+ 0x03, 0x28, 0x09, 0x52, 0x08, 0x75, 0x75, 0x69, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x6c, 0x0a,
0x16, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62,
- 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e,
- 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75,
- 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e,
+ 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53,
+ 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x6f,
+ 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72,
+ 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x72, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65,
+ 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x1a, 0x46, 0x0a, 0x18, 0x52,
+ 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61,
+ 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
+ 0x02, 0x38, 0x01, 0x22, 0xdb, 0x01, 0x0a, 0x13, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x56, 0x53, 0x63,
+ 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x6b, 0x69, 0x70, 0x5f,
+ 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x73,
+ 0x6b, 0x69, 0x70, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72,
+ 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x72, 0x79,
+ 0x52, 0x75, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03,
+ 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x76, 0x5f, 0x73,
+ 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x73,
+ 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x07,
+ 0x76, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x06,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x71, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72,
+ 0x69, 0x63, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x63,
+ 0x74, 0x22, 0xca, 0x02, 0x0a, 0x14, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x56, 0x53, 0x63, 0x68, 0x65,
+ 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x76, 0x5f,
+ 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76,
+ 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52,
+ 0x07, 0x76, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x6c, 0x0a, 0x15, 0x75, 0x6e, 0x6b, 0x6e,
+ 0x6f, 0x77, 0x6e, 0x5f, 0x76, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d,
+ 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e,
+ 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72,
+ 0x79, 0x52, 0x13, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78,
+ 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x71, 0x0a, 0x18, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77,
+ 0x6e, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74,
+ 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x41, 0x70, 0x70, 0x6c, 0x79, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x23, 0x0a, 0x09, 0x50, 0x61, 0x72,
+ 0x61, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73,
+ 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xa1,
+ 0x02, 0x0a, 0x0d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c,
+ 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12,
+ 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x03,
+ 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63,
+ 0x79, 0x12, 0x30, 0x0a, 0x14, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c,
+ 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x70, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x12, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x46, 0x72, 0x6f, 0x6d,
+ 0x50, 0x6f, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x5f, 0x73,
+ 0x61, 0x66, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x70, 0x67, 0x72, 0x61,
+ 0x64, 0x65, 0x53, 0x61, 0x66, 0x65, 0x12, 0x28, 0x0a, 0x0d, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70,
+ 0x5f, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52,
+ 0x0c, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x88, 0x01, 0x01,
+ 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x65, 0x6e, 0x67, 0x69,
+ 0x6e, 0x65, 0x22, 0xa2, 0x01, 0x0a, 0x0e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f,
+ 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f,
+ 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69,
+ 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12,
+ 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73,
+ 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72,
+ 0x64, 0x12, 0x24, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74,
+ 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0xe2, 0x01, 0x0a, 0x12, 0x42, 0x61, 0x63, 0x6b,
+ 0x75, 0x70, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a,
+ 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68,
+ 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64,
+ 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72,
+ 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x72,
+ 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72,
+ 0x65, 0x6e, 0x63, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x63,
+ 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x70, 0x67, 0x72, 0x61,
+ 0x64, 0x65, 0x5f, 0x73, 0x61, 0x66, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75,
+ 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x53, 0x61, 0x66, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x69, 0x6e,
+ 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x70,
+ 0x6f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x6f, 0x73, 0x22, 0x4e, 0x0a, 0x1c,
+ 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08,
+ 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
+ 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0xdf, 0x01, 0x0a,
+ 0x1d, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76,
+ 0x0a, 0x16, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f,
+ 0x62, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41,
+ 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65,
+ 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66,
0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72,
0x79, 0x52, 0x13, 0x72, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42,
@@ -17568,671 +17414,1280 @@ var file_vtctldata_proto_rawDesc = []byte{
0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74,
0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x50,
- 0x0a, 0x1e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe8,
+ 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54,
+ 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41,
+ 0x6c, 0x69, 0x61, 0x73, 0x12, 0x40, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43,
+ 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
+ 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63,
+ 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65,
+ 0x1a, 0x37, 0x0a, 0x09, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
+ 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
+ 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc0, 0x02, 0x0a, 0x18, 0x43, 0x68,
+ 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x0b, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65,
+ 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x76, 0x74,
+ 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x2e, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
+ 0x52, 0x0a, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x54, 0x61, 0x67, 0x73, 0x12, 0x51, 0x0a, 0x0a,
+ 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
+ 0x32, 0x32, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61,
+ 0x6e, 0x67, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x66, 0x74, 0x65, 0x72, 0x54, 0x61, 0x67, 0x73, 0x45,
+ 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x61, 0x66, 0x74, 0x65, 0x72, 0x54, 0x61, 0x67, 0x73, 0x1a,
+ 0x3d, 0x0a, 0x0f, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74,
+ 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c,
+ 0x0a, 0x0e, 0x41, 0x66, 0x74, 0x65, 0x72, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
+ 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
+ 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x9b, 0x01, 0x0a,
+ 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70,
+ 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15,
+ 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69,
+ 0x61, 0x73, 0x12, 0x2d, 0x0a, 0x07, 0x64, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x64, 0x62, 0x54, 0x79, 0x70,
+ 0x65, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x03, 0x20, 0x01,
+ 0x28, 0x08, 0x52, 0x06, 0x64, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x22, 0xa6, 0x01, 0x0a, 0x18, 0x43,
+ 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x0d, 0x62, 0x65, 0x66, 0x6f, 0x72,
+ 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10,
+ 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x52, 0x0c, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x33,
+ 0x0a, 0x0c, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x0b, 0x61, 0x66, 0x74, 0x65, 0x72, 0x54, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x12, 0x1e, 0x0a, 0x0b, 0x77, 0x61, 0x73, 0x5f, 0x64, 0x72, 0x79, 0x5f, 0x72,
+ 0x75, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x77, 0x61, 0x73, 0x44, 0x72, 0x79,
+ 0x52, 0x75, 0x6e, 0x22, 0xe3, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72,
+ 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a,
+ 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e,
+ 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61,
+ 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x73, 0x6b, 0x69, 0x70,
+ 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65,
+ 0x61, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x73, 0x6b, 0x69, 0x70, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73,
+ 0x12, 0x27, 0x0a, 0x10, 0x6f, 0x6b, 0x5f, 0x69, 0x66, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x78,
+ 0x69, 0x73, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6f, 0x6b, 0x49, 0x66,
+ 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0x93, 0x01, 0x0a, 0x16, 0x43, 0x68,
+ 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61,
+ 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70,
+ 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61,
+ 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x3f,
+ 0x0a, 0x05, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x22,
+ 0x4f, 0x0a, 0x1d, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04,
0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64,
- 0x22, 0xe3, 0x01, 0x0a, 0x1f, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68,
- 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, 0x16, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x66, 0x66,
- 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x01,
- 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d,
- 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x2e, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53,
- 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x72, 0x6f, 0x77, 0x73, 0x41,
- 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x1a, 0x46,
- 0x0a, 0x18, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79,
- 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
- 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xdd, 0x02, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74,
- 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
- 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x2f, 0x0a, 0x14, 0x61, 0x6c,
- 0x6c, 0x6f, 0x77, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x76, 0x5f, 0x73, 0x63, 0x68, 0x65,
- 0x6d, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x45,
- 0x6d, 0x70, 0x74, 0x79, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x2a, 0x0a, 0x04, 0x74,
- 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x74, 0x6f, 0x70, 0x6f,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70,
- 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x61, 0x73, 0x65, 0x5f,
- 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c,
- 0x62, 0x61, 0x73, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x31, 0x0a, 0x0d,
- 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d,
- 0x65, 0x52, 0x0c, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12,
- 0x2b, 0x0a, 0x11, 0x64, 0x75, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f,
- 0x6c, 0x69, 0x63, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x64, 0x75, 0x72, 0x61,
- 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x26, 0x0a, 0x0f,
- 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x5f, 0x64, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18,
- 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x44, 0x62,
- 0x4e, 0x61, 0x6d, 0x65, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06,
- 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0x49, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
- 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x12, 0x2f, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b,
- 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x22, 0x8c, 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72,
- 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x6e, 0x61,
- 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, 0x61, 0x72, 0x64, 0x4e,
- 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01,
- 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x63,
- 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28,
- 0x08, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74,
- 0x22, 0xa0, 0x01, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x76, 0x74, 0x63,
- 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52,
- 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x26, 0x0a, 0x05, 0x73, 0x68, 0x61,
- 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72,
- 0x64, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x61, 0x6c, 0x72, 0x65, 0x61,
- 0x64, 0x79, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52,
- 0x12, 0x73, 0x68, 0x61, 0x72, 0x64, 0x41, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x45, 0x78, 0x69,
- 0x73, 0x74, 0x73, 0x22, 0x41, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x6c,
- 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04,
- 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
- 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52,
- 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
- 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x2d, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41,
- 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e,
- 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22,
- 0x1a, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c,
- 0x69, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x67, 0x0a, 0x15, 0x44,
- 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, 0x14,
- 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66,
- 0x6f, 0x72, 0x63, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65,
- 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9b,
- 0x01, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73,
- 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73,
- 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, 0x26,
- 0x0a, 0x0f, 0x65, 0x76, 0x65, 0x6e, 0x5f, 0x69, 0x66, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e,
- 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x65, 0x76, 0x65, 0x6e, 0x49, 0x66, 0x53,
- 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18,
- 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x16, 0x0a, 0x14,
- 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x72,
- 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
- 0x12, 0x0a, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63,
- 0x65, 0x6c, 0x6c, 0x22, 0x1a, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x72, 0x76,
- 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
- 0x79, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
- 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c,
- 0x69, 0x61, 0x73, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70,
- 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c,
- 0x6c, 0x6f, 0x77, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x17, 0x0a, 0x15, 0x44, 0x65,
- 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x22, 0x81, 0x03, 0x0a, 0x1d, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63,
- 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x36, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x5f, 0x70,
- 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74,
- 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c,
- 0x69, 0x61, 0x73, 0x52, 0x0a, 0x6e, 0x65, 0x77, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12,
- 0x3e, 0x0a, 0x0f, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52,
- 0x0e, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12,
- 0x44, 0x0a, 0x15, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73,
- 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10,
- 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x52, 0x13, 0x77, 0x61, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x54, 0x69,
- 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74,
- 0x5f, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x6d,
- 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x70, 0x72, 0x65,
- 0x76, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x65, 0x6c, 0x6c, 0x50, 0x72, 0x6f,
- 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x14, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x66,
- 0x6f, 0x72, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x07,
- 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x77, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x41, 0x6c, 0x6c,
- 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x22, 0xbc, 0x01, 0x0a, 0x1e, 0x45, 0x6d, 0x65, 0x72,
- 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x68, 0x61,
- 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65,
+ 0x22, 0xe1, 0x01, 0x0a, 0x1e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65,
+ 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x16, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x66, 0x66, 0x65,
+ 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20,
+ 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52,
+ 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61,
+ 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x72, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66,
+ 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x1a, 0x46, 0x0a, 0x18,
+ 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68,
+ 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x3a, 0x02, 0x38, 0x01, 0x22, 0x50, 0x0a, 0x1e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65,
+ 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0xe3, 0x01, 0x0a, 0x1f, 0x43, 0x6f, 0x6d, 0x70, 0x6c,
+ 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, 0x16, 0x72, 0x6f,
+ 0x77, 0x73, 0x5f, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x73,
+ 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53,
+ 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63,
+ 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52,
+ 0x13, 0x72, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53,
+ 0x68, 0x61, 0x72, 0x64, 0x1a, 0x46, 0x0a, 0x18, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65,
+ 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79,
+ 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
+ 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xdd, 0x02, 0x0a,
+ 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f,
+ 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65,
+ 0x12, 0x2f, 0x0a, 0x14, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f,
+ 0x76, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11,
+ 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d,
+ 0x61, 0x12, 0x2a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32,
+ 0x16, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a,
+ 0x0d, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x08,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, 0x61, 0x73, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x12, 0x31, 0x0a, 0x0d, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x74,
+ 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69,
+ 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0c, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f,
+ 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x75, 0x72, 0x61, 0x62, 0x69, 0x6c,
+ 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x10, 0x64, 0x75, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69,
+ 0x63, 0x79, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x5f, 0x64, 0x62,
+ 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x69, 0x64,
+ 0x65, 0x63, 0x61, 0x72, 0x44, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05,
+ 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0x49, 0x0a, 0x16,
+ 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x08, 0x6b,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x8c, 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61,
+ 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a,
+ 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68,
+ 0x61, 0x72, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
+ 0x73, 0x68, 0x61, 0x72, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72,
+ 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12,
+ 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e,
+ 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65,
+ 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x22, 0xa0, 0x01, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f,
+ 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x13, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12,
+ 0x26, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10,
+ 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64,
+ 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x68, 0x61, 0x72, 0x64,
+ 0x5f, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18,
+ 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x73, 0x68, 0x61, 0x72, 0x64, 0x41, 0x6c, 0x72, 0x65,
+ 0x61, 0x64, 0x79, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0x41, 0x0a, 0x15, 0x44, 0x65, 0x6c,
+ 0x65, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x18, 0x0a, 0x16,
+ 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+ 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x1a, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43,
+ 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x67, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65,
0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65,
- 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x40, 0x0a, 0x10,
- 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79,
- 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0f, 0x70,
- 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x26,
- 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e,
- 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06,
- 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xa0, 0x01, 0x0a, 0x18, 0x45, 0x78, 0x65, 0x63, 0x75,
- 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c,
- 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73,
- 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x14, 0x0a,
- 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75,
- 0x65, 0x72, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18,
- 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x19,
- 0x0a, 0x08, 0x75, 0x73, 0x65, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08,
- 0x52, 0x07, 0x75, 0x73, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0x47, 0x0a, 0x19, 0x45, 0x78, 0x65,
- 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x70, 0x70, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51,
- 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75,
- 0x6c, 0x74, 0x22, 0xd3, 0x01, 0x0a, 0x18, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65,
- 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x42, 0x41, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
- 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65,
- 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12,
- 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
- 0x03, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x69,
- 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x04, 0x20,
- 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x6c,
- 0x6f, 0x67, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x63,
- 0x68, 0x65, 0x6d, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x6f,
- 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0x47, 0x0a, 0x19, 0x45, 0x78, 0x65, 0x63,
- 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x42, 0x41, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75,
- 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c,
- 0x74, 0x22, 0xa5, 0x01, 0x0a, 0x12, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x48, 0x6f, 0x6f,
- 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15,
+ 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73,
+ 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72,
+ 0x73, 0x69, 0x76, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20,
+ 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x44, 0x65,
+ 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9b, 0x01, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53,
+ 0x68, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x06,
+ 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76,
+ 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x06,
+ 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73,
+ 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72,
+ 0x73, 0x69, 0x76, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x76, 0x65, 0x6e, 0x5f, 0x69, 0x66, 0x5f,
+ 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x65,
+ 0x76, 0x65, 0x6e, 0x49, 0x66, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x0a, 0x05,
+ 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72,
+ 0x63, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72,
+ 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x0a, 0x17, 0x44, 0x65,
+ 0x6c, 0x65, 0x74, 0x65, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x22, 0x1a, 0x0a, 0x18, 0x44, 0x65, 0x6c,
+ 0x65, 0x74, 0x65, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x79, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a,
+ 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x18,
+ 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0d, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61,
+ 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79,
+ 0x22, 0x17, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc3, 0x03, 0x0a, 0x1d, 0x45, 0x6d,
+ 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53,
+ 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x36, 0x0a,
+ 0x0b, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0a, 0x6e, 0x65, 0x77, 0x50, 0x72,
+ 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x3e, 0x0a, 0x0f, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f,
+ 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15,
0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69,
- 0x61, 0x73, 0x12, 0x55, 0x0a, 0x13, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x68, 0x6f, 0x6f,
- 0x6b, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x11, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x48, 0x6f,
- 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5e, 0x0a, 0x13, 0x45, 0x78, 0x65,
- 0x63, 0x75, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x12, 0x47, 0x0a, 0x0b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
- 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74,
- 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x68,
- 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xd4, 0x01, 0x0a, 0x1d, 0x45, 0x78,
- 0x65, 0x63, 0x75, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41,
- 0x73, 0x44, 0x42, 0x41, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74,
+ 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0e, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x70,
+ 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x44, 0x0a, 0x15, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x72, 0x65,
+ 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x05,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x77, 0x61, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c,
+ 0x69, 0x63, 0x61, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x3f, 0x0a, 0x1c, 0x70,
+ 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x5f, 0x63, 0x65, 0x6c,
+ 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28,
+ 0x08, 0x52, 0x19, 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43,
+ 0x65, 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x14,
+ 0x77, 0x61, 0x69, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x77, 0x61, 0x69, 0x74,
+ 0x46, 0x6f, 0x72, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x40, 0x0a,
+ 0x10, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72,
+ 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0f,
+ 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x22,
+ 0xbc, 0x01, 0x0a, 0x1e, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x70,
+ 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14,
+ 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73,
+ 0x68, 0x61, 0x72, 0x64, 0x12, 0x40, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64,
+ 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15,
+ 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x50,
+ 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73,
+ 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c,
+ 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xa0,
+ 0x01, 0x0a, 0x18, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41,
+ 0x73, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74,
0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62,
0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x03, 0x73, 0x71, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x72,
+ 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x6d,
+ 0x61, 0x78, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d,
+ 0x61, 0x78, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x5f, 0x70, 0x6f,
+ 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x75, 0x73, 0x65, 0x50, 0x6f, 0x6f,
+ 0x6c, 0x22, 0x47, 0x0a, 0x19, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63,
+ 0x68, 0x41, 0x73, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a,
+ 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12,
+ 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75,
+ 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xd3, 0x01, 0x0a, 0x18, 0x45,
+ 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x42, 0x41,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
+ 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41,
+ 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61,
+ 0x73, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x72,
0x6f, 0x77, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x52, 0x6f,
0x77, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x69,
0x6e, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x69, 0x73,
0x61, 0x62, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72,
0x65, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x05, 0x20, 0x01,
0x28, 0x08, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
- 0x22, 0x4e, 0x0a, 0x1e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69,
- 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x42, 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20,
- 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72,
- 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
- 0x22, 0x3c, 0x0a, 0x1e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x64,
- 0x73, 0x49, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0xbe,
- 0x01, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73,
- 0x49, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03,
- 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46,
- 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x49, 0x6e, 0x4b, 0x65,
- 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53,
- 0x68, 0x61, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72,
- 0x64, 0x73, 0x1a, 0x4b, 0x0a, 0x0b, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72,
- 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
- 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
+ 0x22, 0x47, 0x0a, 0x19, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68,
+ 0x41, 0x73, 0x44, 0x42, 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a,
+ 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e,
+ 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c,
+ 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xa5, 0x01, 0x0a, 0x12, 0x45, 0x78,
+ 0x65, 0x63, 0x75, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x55, 0x0a, 0x13, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63,
+ 0x75, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x11,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x22, 0x5e, 0x0a, 0x13, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x0b, 0x68, 0x6f, 0x6f, 0x6b,
+ 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c,
+ 0x74, 0x22, 0xd4, 0x01, 0x0a, 0x1d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4d, 0x75, 0x6c,
+ 0x74, 0x69, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x42, 0x41, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c,
+ 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73,
+ 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x10, 0x0a,
+ 0x03, 0x73, 0x71, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x71, 0x6c, 0x12,
+ 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
+ 0x03, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x69,
+ 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x04, 0x20,
+ 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x6c,
+ 0x6f, 0x67, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x63,
+ 0x68, 0x65, 0x6d, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x6f,
+ 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0x4e, 0x0a, 0x1e, 0x45, 0x78, 0x65, 0x63,
+ 0x75, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44,
+ 0x42, 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x07, 0x72, 0x65,
+ 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75,
+ 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52,
+ 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x3c, 0x0a, 0x1e, 0x46, 0x69, 0x6e, 0x64,
+ 0x41, 0x6c, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x49, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65,
+ 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65,
+ 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0xbe, 0x01, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x41,
+ 0x6c, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x49, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x73, 0x68,
+ 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x53, 0x68,
+ 0x61, 0x72, 0x64, 0x73, 0x49, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x74,
+ 0x72, 0x79, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x1a, 0x4b, 0x0a, 0x0b, 0x53, 0x68,
+ 0x61, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x05, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x54, 0x0a, 0x22, 0x46, 0x6f, 0x72, 0x63, 0x65,
+ 0x43, 0x75, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a,
+ 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69,
+ 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0xeb, 0x01,
+ 0x0a, 0x23, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x43, 0x75, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x53, 0x63,
+ 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7c, 0x0a, 0x16, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x66,
+ 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18,
+ 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x43, 0x75, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x53, 0x63,
+ 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74,
+ 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13,
+ 0x72, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68,
+ 0x61, 0x72, 0x64, 0x1a, 0x46, 0x0a, 0x18, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63,
+ 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
+ 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
+ 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04,
+ 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x9e, 0x01, 0x0a, 0x11,
+ 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a,
+ 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68,
+ 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01,
+ 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x65, 0x74,
+ 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x65, 0x74,
+ 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65,
+ 0x64, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x64,
+ 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x44, 0x0a, 0x12,
+ 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20,
+ 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x2e, 0x42,
+ 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x75,
+ 0x70, 0x73, 0x22, 0x28, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66,
+ 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x65, 0x6c, 0x6c,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x22, 0x46, 0x0a, 0x13,
+ 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x63, 0x65, 0x6c, 0x6c, 0x5f, 0x69, 0x6e, 0x66, 0x6f,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x63, 0x65, 0x6c, 0x6c,
+ 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x19, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49,
+ 0x6e, 0x66, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22,
+ 0x30, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x4e, 0x61,
+ 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e,
+ 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x61, 0x6d, 0x65,
+ 0x73, 0x22, 0x18, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69,
+ 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xb6, 0x01, 0x0a, 0x17,
+ 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x07, 0x61, 0x6c, 0x69, 0x61, 0x73,
+ 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69,
+ 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x6c, 0x69,
+ 0x61, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x61, 0x6c, 0x69, 0x61, 0x73,
+ 0x65, 0x73, 0x1a, 0x50, 0x0a, 0x0c, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74,
+ 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43,
+ 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x3a, 0x02, 0x38, 0x01, 0x22, 0x50, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x53,
+ 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x4c, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6c,
+ 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+ 0x33, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x1b, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74,
+ 0x61, 0x74, 0x75, 0x73, 0x22, 0x15, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x49, 0x0a, 0x14, 0x47,
+ 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73,
+ 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x09, 0x6b, 0x65, 0x79,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0x30, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08,
+ 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
+ 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x46, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4b,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+ 0x2f, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x13, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65,
+ 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x22, 0x51, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f,
+ 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c,
+ 0x69, 0x61, 0x73, 0x22, 0x5a, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73,
+ 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a,
+ 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
+ 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f,
+ 0x6e, 0x73, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22,
+ 0x20, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f,
+ 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x22, 0x76, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x16, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75,
+ 0x6c, 0x65, 0x73, 0x52, 0x14, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75,
+ 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x18, 0x0a, 0x16, 0x47, 0x65, 0x74,
+ 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x22, 0x55, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e,
+ 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a,
+ 0x0a, 0x0d, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e,
+ 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x0c, 0x72, 0x6f,
+ 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x22, 0xb0, 0x02, 0x0a, 0x10, 0x47,
+ 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75,
+ 0x64, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c,
+ 0x75, 0x64, 0x65, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52,
+ 0x0c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x56, 0x69, 0x65, 0x77, 0x73, 0x12, 0x28, 0x0a,
+ 0x10, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x5f, 0x6f, 0x6e, 0x6c,
+ 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61,
+ 0x6d, 0x65, 0x73, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x73, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28,
+ 0x08, 0x52, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x73, 0x4f, 0x6e, 0x6c,
+ 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d,
+ 0x61, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x50, 0x0a,
+ 0x11, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
+ 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x44, 0x65, 0x66,
+ 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22,
+ 0xb8, 0x02, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a,
+ 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75,
+ 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x2b,
+ 0x0a, 0x11, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x74,
+ 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6d, 0x69, 0x67, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x39, 0x0a, 0x06, 0x73,
+ 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x76, 0x74,
+ 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69,
+ 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06,
+ 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x28, 0x0a, 0x06, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74,
+ 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e,
+ 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74,
+ 0x12, 0x2e, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32,
+ 0x18, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x51, 0x75, 0x65, 0x72,
+ 0x79, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72,
+ 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52,
+ 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x18, 0x08,
+ 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x22, 0x59, 0x0a, 0x1b, 0x47, 0x65,
+ 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x0a, 0x6d, 0x69, 0x67,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
+ 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6d, 0x69, 0x67, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x64, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72,
+ 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12,
+ 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+ 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x03,
+ 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0x83, 0x02, 0x0a, 0x1b,
+ 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x19, 0x73,
+ 0x68, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x5f, 0x62, 0x79, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42,
+ 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68,
+ 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x43, 0x65, 0x6c, 0x6c, 0x45, 0x6e, 0x74,
+ 0x72, 0x79, 0x52, 0x16, 0x73, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x43, 0x65, 0x6c, 0x6c, 0x1a, 0x65, 0x0a, 0x1b, 0x53, 0x68,
+ 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x79,
+ 0x43, 0x65, 0x6c, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x6f, 0x70,
+ 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
+ 0x01, 0x22, 0x4c, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, 0x61, 0x72, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x22,
+ 0x3a, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53,
- 0x68, 0x61, 0x72, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22,
- 0x54, 0x0a, 0x22, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x43, 0x75, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x53,
- 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0xeb, 0x01, 0x0a, 0x23, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x43,
- 0x75, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7c, 0x0a,
- 0x16, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62,
- 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e,
- 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x43,
- 0x75, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x6f,
- 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72,
- 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x72, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65,
- 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x1a, 0x46, 0x0a, 0x18, 0x52,
- 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61,
- 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
- 0x02, 0x38, 0x01, 0x22, 0x9e, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75,
- 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79,
+ 0x68, 0x61, 0x72, 0x64, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x22, 0x1d, 0x0a, 0x1b, 0x47,
+ 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75,
+ 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6a, 0x0a, 0x1c, 0x47, 0x65,
+ 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c,
+ 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x13, 0x73, 0x68,
+ 0x61, 0x72, 0x64, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65,
+ 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d,
+ 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75,
+ 0x6c, 0x65, 0x73, 0x52, 0x11, 0x73, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e,
+ 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x32, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76,
+ 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x01, 0x20,
+ 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0xf3, 0x01, 0x0a, 0x1b, 0x47,
+ 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d,
+ 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x05, 0x6e, 0x61,
+ 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x76, 0x74, 0x63, 0x74,
+ 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x6e, 0x61,
+ 0x6d, 0x65, 0x73, 0x1a, 0x69, 0x0a, 0x0a, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72,
+ 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
+ 0x6b, 0x65, 0x79, 0x12, 0x45, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47,
+ 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d,
+ 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x4c,
+ 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x20,
+ 0x0a, 0x08, 0x4e, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61,
+ 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73,
+ 0x22, 0x4a, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65,
+ 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65,
+ 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18,
+ 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0xcc, 0x01, 0x0a,
+ 0x17, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x0d, 0x73, 0x72, 0x76, 0x5f,
+ 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
+ 0x34, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53,
+ 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73,
+ 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x73, 0x1a, 0x56, 0x0a, 0x11, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2b, 0x0a, 0x05, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe4, 0x03, 0x0a, 0x1c,
+ 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x43,
+ 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08,
+ 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
+ 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x61, 0x62,
+ 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65,
+ 0x12, 0x18, 0x0a, 0x07, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
+ 0x08, 0x52, 0x07, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x68,
+ 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x74,
+ 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x75, 0x73, 0x74,
+ 0x6f, 0x6d, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
+ 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x28, 0x0a, 0x10, 0x63,
+ 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x18,
+ 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x51, 0x75, 0x65,
+ 0x72, 0x79, 0x53, 0x65, 0x74, 0x12, 0x2d, 0x0a, 0x13, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x61,
+ 0x73, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x07, 0x20, 0x01,
+ 0x28, 0x08, 0x52, 0x10, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b,
+ 0x53, 0x65, 0x6c, 0x66, 0x12, 0x2f, 0x0a, 0x14, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x61, 0x73,
+ 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, 0x01,
+ 0x28, 0x08, 0x52, 0x11, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b,
+ 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x3f, 0x0a, 0x0d, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c,
+ 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74,
+ 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65,
+ 0x64, 0x41, 0x70, 0x70, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x0c, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74,
+ 0x6c, 0x65, 0x64, 0x41, 0x70, 0x70, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63,
+ 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74,
+ 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e,
+ 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61,
+ 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65,
+ 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52,
+ 0x11, 0x61, 0x70, 0x70, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69,
+ 0x63, 0x73, 0x22, 0x1f, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x68, 0x72, 0x6f,
+ 0x74, 0x74, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63,
+ 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63,
+ 0x65, 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x22,
+ 0x4e, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x0c, 0x73, 0x72, 0x76, 0x5f,
+ 0x76, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13,
+ 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68,
+ 0x65, 0x6d, 0x61, 0x52, 0x0a, 0x73, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22,
+ 0x2d, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c,
+ 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0xc5,
+ 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x0d, 0x73, 0x72, 0x76,
+ 0x5f, 0x76, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
+ 0x32, 0x32, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74,
+ 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x45,
+ 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x73, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x73, 0x1a, 0x53, 0x0a, 0x10, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73,
+ 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x2e, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4c, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41,
+ 0x6c, 0x69, 0x61, 0x73, 0x22, 0x3d, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x06, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x6f, 0x70, 0x6f,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x22, 0xe8, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79,
0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79,
0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c,
- 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69,
- 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20,
- 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x25, 0x0a,
- 0x0e, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18,
- 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x4c,
- 0x69, 0x6d, 0x69, 0x74, 0x22, 0x44, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75,
- 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x62, 0x61,
- 0x63, 0x6b, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x79,
- 0x73, 0x71, 0x6c, 0x63, 0x74, 0x6c, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x6e, 0x66,
- 0x6f, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x22, 0x28, 0x0a, 0x12, 0x47, 0x65,
- 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x12, 0x12, 0x0a, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
- 0x63, 0x65, 0x6c, 0x6c, 0x22, 0x46, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49,
- 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x63,
- 0x65, 0x6c, 0x6c, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12,
- 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e,
- 0x66, 0x6f, 0x52, 0x08, 0x63, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x19, 0x0a, 0x17,
- 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x73,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x30, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x43, 0x65,
- 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03,
- 0x28, 0x09, 0x52, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x18, 0x0a, 0x16, 0x47, 0x65, 0x74,
- 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x22, 0xb6, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x73,
- 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
- 0x49, 0x0a, 0x07, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
- 0x32, 0x2f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74,
- 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72,
- 0x79, 0x52, 0x07, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x1a, 0x50, 0x0a, 0x0c, 0x41, 0x6c,
- 0x69, 0x61, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
- 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x6f,
- 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61,
- 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x50, 0x0a, 0x14,
- 0x47, 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61,
- 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70,
- 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61,
- 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x4c,
- 0x0a, 0x15, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75,
- 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74,
- 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x15, 0x0a, 0x13,
- 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x22, 0x49, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x09, 0x6b,
- 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13,
- 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0x30,
- 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x22, 0x46, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x76, 0x74, 0x63, 0x74,
- 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x08,
- 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x51, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50,
- 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61,
- 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b,
- 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x5a, 0x0a, 0x16, 0x47,
- 0x65, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73,
- 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50,
- 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x6d,
- 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x20, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x4b, 0x65,
- 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c,
- 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x76, 0x0a, 0x1f, 0x47, 0x65, 0x74,
- 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52,
- 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x16,
- 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67,
- 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x76,
- 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52,
- 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x14, 0x6b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65,
- 0x73, 0x22, 0x18, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52,
- 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x55, 0x0a, 0x17, 0x47,
- 0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x0d, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e,
- 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
- 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52,
- 0x75, 0x6c, 0x65, 0x73, 0x52, 0x0c, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c,
- 0x65, 0x73, 0x22, 0xb0, 0x02, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
- 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41,
- 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61,
- 0x73, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
- 0x09, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x63,
- 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28,
- 0x09, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73,
- 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x76, 0x69, 0x65, 0x77,
- 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65,
- 0x56, 0x69, 0x65, 0x77, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e,
- 0x61, 0x6d, 0x65, 0x73, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52,
- 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x4f, 0x6e, 0x6c, 0x79, 0x12,
- 0x28, 0x0a, 0x10, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x73, 0x5f, 0x6f,
- 0x6e, 0x6c, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65,
- 0x53, 0x69, 0x7a, 0x65, 0x73, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x61, 0x62,
- 0x6c, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x07,
- 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d,
- 0x61, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x50, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65,
- 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x73, 0x63,
- 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53,
- 0x63, 0x68, 0x65, 0x6d, 0x61, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52,
- 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0xb8, 0x02, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x53,
- 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63,
+ 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c,
+ 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28,
+ 0x08, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x12, 0x3c, 0x0a, 0x0e, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28,
+ 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74,
+ 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79,
+ 0x70, 0x65, 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x22, 0x40,
+ 0x0a, 0x12, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18,
+ 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73,
+ 0x22, 0x55, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72,
+ 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a,
+ 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x63, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x54, 0x68,
+ 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
+ 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72,
+ 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x5f, 0x0a, 0x16,
+ 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x50, 0x61, 0x74, 0x68, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72,
+ 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x73, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18,
+ 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x73, 0x4a, 0x73, 0x6f, 0x6e, 0x22, 0x46, 0x0a,
+ 0x17, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x50, 0x61, 0x74, 0x68,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x63, 0x65, 0x6c, 0x6c,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x43, 0x65, 0x6c, 0x6c, 0x52,
+ 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x22, 0x80, 0x01, 0x0a, 0x0c, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f,
+ 0x67, 0x79, 0x43, 0x65, 0x6c, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61,
+ 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12,
+ 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61,
+ 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x04,
+ 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, 0x18,
+ 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52,
+ 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x5f, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x55,
+ 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08,
+ 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
+ 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x62, 0x61, 0x6e,
+ 0x64, 0x6f, 0x6e, 0x5f, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x61,
+ 0x62, 0x61, 0x6e, 0x64, 0x6f, 0x6e, 0x41, 0x67, 0x65, 0x22, 0x63, 0x0a, 0x21, 0x47, 0x65, 0x74,
+ 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e,
+ 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01,
+ 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61,
+ 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+ 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x2f,
+ 0x0a, 0x19, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64,
+ 0x74, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, 0x64, 0x22,
+ 0xa0, 0x01, 0x0a, 0x15, 0x53, 0x68, 0x61, 0x72, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61,
+ 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12,
+ 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+ 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12,
+ 0x21, 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18,
+ 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73,
+ 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x73, 0x22, 0x99, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x36, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e,
+ 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52,
+ 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x43, 0x0a, 0x0c, 0x73, 0x68, 0x61,
+ 0x72, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
+ 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72,
+ 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74,
+ 0x65, 0x52, 0x0b, 0x73, 0x68, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x22, 0x63,
+ 0x0a, 0x1a, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04,
+ 0x64, 0x74, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, 0x64,
+ 0x12, 0x31, 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73,
+ 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54,
+ 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61,
+ 0x6e, 0x74, 0x73, 0x22, 0x1d, 0x0a, 0x1b, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54,
+ 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x2f, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x22, 0x4d, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
+ 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15,
+ 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69,
+ 0x61, 0x73, 0x22, 0x2e, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73,
+ 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69,
+ 0x6f, 0x6e, 0x22, 0x42, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x76, 0x5f, 0x73, 0x63,
+ 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x73, 0x63,
+ 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x07, 0x76,
+ 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0xc6, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x57, 0x6f,
+ 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a,
+ 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63,
+ 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52,
+ 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x6e,
+ 0x61, 0x6d, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08,
+ 0x6e, 0x61, 0x6d, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b,
+ 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b,
+ 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f,
+ 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x6e, 0x63, 0x6c,
+ 0x75, 0x64, 0x65, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64,
+ 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x22,
+ 0x49, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x66,
+ 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52,
+ 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x22, 0xfb, 0x01, 0x0a, 0x17, 0x49,
+ 0x6e, 0x69, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x10, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74,
- 0x65, 0x78, 0x74, 0x12, 0x39, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20,
- 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
- 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x28,
- 0x0a, 0x06, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10,
- 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x52, 0x06, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65,
- 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e,
- 0x67, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69,
- 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12,
- 0x0a, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6b,
- 0x69, 0x70, 0x22, 0x59, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d,
- 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x12, 0x3a, 0x0a, 0x0a, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
- 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x52, 0x0a, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x64, 0x0a,
- 0x1a, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b,
- 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b,
- 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a,
- 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65,
- 0x6c, 0x6c, 0x73, 0x22, 0x83, 0x02, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64,
- 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x19, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x65, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x79, 0x5f, 0x63, 0x65, 0x6c, 0x6c,
- 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69,
- 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53,
- 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42,
- 0x79, 0x43, 0x65, 0x6c, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x73, 0x68, 0x61, 0x72,
- 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x43, 0x65,
- 0x6c, 0x6c, 0x1a, 0x65, 0x0a, 0x1b, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69,
- 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x43, 0x65, 0x6c, 0x6c, 0x45, 0x6e, 0x74, 0x72,
- 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
- 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68,
- 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4c, 0x0a, 0x0f, 0x47, 0x65, 0x74,
+ 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x52, 0x0a, 0x1a, 0x70, 0x72, 0x69, 0x6d,
+ 0x61, 0x72, 0x79, 0x5f, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74,
+ 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c,
+ 0x69, 0x61, 0x73, 0x52, 0x17, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x45, 0x6c, 0x65, 0x63,
+ 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x14, 0x0a, 0x05,
+ 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72,
+ 0x63, 0x65, 0x12, 0x44, 0x0a, 0x15, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x77, 0x61, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x73, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0x42, 0x0a, 0x18, 0x49, 0x6e, 0x69, 0x74,
+ 0x53, 0x68, 0x61, 0x72, 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01,
+ 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x45,
+ 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x4e, 0x0a, 0x1c,
+ 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08,
+ 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
+ 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0xdf, 0x01, 0x0a,
+ 0x1d, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76,
+ 0x0a, 0x16, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f,
+ 0x62, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41,
+ 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63,
+ 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66,
+ 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72,
+ 0x79, 0x52, 0x13, 0x72, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42,
+ 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x1a, 0x46, 0x0a, 0x18, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66,
+ 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74,
+ 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xff,
+ 0x02, 0x0a, 0x19, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x43,
+ 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08,
+ 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
+ 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b,
+ 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b,
+ 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20,
+ 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x29, 0x0a, 0x06, 0x76, 0x69,
+ 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x73, 0x63,
+ 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x06, 0x76,
+ 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x42, 0x0a, 0x1e, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75,
+ 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x77, 0x69, 0x74,
+ 0x68, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x63,
+ 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x70, 0x79,
+ 0x57, 0x69, 0x74, 0x68, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0e, 0x32,
+ 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70,
+ 0x65, 0x73, 0x12, 0x6c, 0x0a, 0x1b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x6c,
+ 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
+ 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x19, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c,
+ 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x22, 0x1c, 0x0a, 0x1a, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78,
+ 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x77,
+ 0x0a, 0x1e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x45, 0x78,
+ 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04,
+ 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+ 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4b,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x4c, 0x0a, 0x1f, 0x4c, 0x6f, 0x6f, 0x6b, 0x75,
+ 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69,
+ 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x77, 0x6f,
+ 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x44, 0x65,
+ 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0x56, 0x0a, 0x18, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61,
+ 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x3a, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69,
+ 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x1b, 0x0a,
+ 0x19, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x72, 0x65, 0x61,
+ 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xdd, 0x05, 0x0a, 0x14, 0x4d,
+ 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12,
+ 0x27, 0x0a, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+ 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67,
+ 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18,
+ 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65,
+ 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52,
+ 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74,
+ 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79,
+ 0x70, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12,
+ 0x6c, 0x0a, 0x1b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x07,
+ 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e,
+ 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53,
+ 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
+ 0x63, 0x65, 0x52, 0x19, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1d, 0x0a,
+ 0x0a, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28,
+ 0x08, 0x52, 0x09, 0x61, 0x6c, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e,
+ 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x09,
+ 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x61, 0x62,
+ 0x6c, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x63,
+ 0x6c, 0x75, 0x64, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x6f,
+ 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x0b,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65,
+ 0x5a, 0x6f, 0x6e, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x6e, 0x5f, 0x64, 0x64, 0x6c, 0x18, 0x0c,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x6e, 0x44, 0x64, 0x6c, 0x12, 0x26, 0x0a, 0x0f, 0x73,
+ 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x18, 0x0d,
+ 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x74, 0x6f, 0x70, 0x41, 0x66, 0x74, 0x65, 0x72, 0x43,
+ 0x6f, 0x70, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x66, 0x6f, 0x72, 0x65,
+ 0x69, 0x67, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f,
+ 0x64, 0x72, 0x6f, 0x70, 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x12,
+ 0x30, 0x0a, 0x14, 0x64, 0x65, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61,
+ 0x72, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x64,
+ 0x65, 0x66, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x4b, 0x65, 0x79,
+ 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18,
+ 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x53, 0x74, 0x61, 0x72, 0x74,
+ 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x6f, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72,
+ 0x75, 0x6c, 0x65, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x6e, 0x6f, 0x52, 0x6f,
+ 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x22, 0xe6, 0x01, 0x0a, 0x16, 0x4d,
+ 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
+ 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
+ 0x77, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67,
+ 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6b, 0x65,
+ 0x65, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6b,
+ 0x65, 0x65, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x12, 0x6b, 0x65, 0x65, 0x70, 0x5f,
+ 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20,
+ 0x01, 0x28, 0x08, 0x52, 0x10, 0x6b, 0x65, 0x65, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67,
+ 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x5f,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x72, 0x65,
+ 0x6e, 0x61, 0x6d, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72,
+ 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x72, 0x79,
+ 0x52, 0x75, 0x6e, 0x22, 0x5b, 0x0a, 0x17, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f,
+ 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18,
+ 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x72, 0x79, 0x5f,
+ 0x72, 0x75, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
+ 0x09, 0x52, 0x0d, 0x64, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
+ 0x22, 0x85, 0x01, 0x0a, 0x14, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
+ 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x70,
+ 0x6f, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f,
+ 0x70, 0x6f, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x70, 0x6f, 0x5f, 0x73,
+ 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x6f, 0x70,
+ 0x6f, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x70, 0x6f, 0x5f,
+ 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x70, 0x6f,
+ 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x4d, 0x6f, 0x75, 0x6e,
+ 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x2c, 0x0a, 0x16, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69,
+ 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e,
+ 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22,
+ 0x19, 0x0a, 0x17, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74,
+ 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x0a, 0x10, 0x4d, 0x6f,
+ 0x75, 0x6e, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12,
+ 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
+ 0x6d, 0x65, 0x22, 0x82, 0x01, 0x0a, 0x11, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x68, 0x6f, 0x77,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x70, 0x6f,
+ 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x70,
+ 0x6f, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x70, 0x6f, 0x5f, 0x73, 0x65,
+ 0x72, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x6f, 0x70, 0x6f,
+ 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x70, 0x6f, 0x5f, 0x72,
+ 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x70, 0x6f, 0x52,
+ 0x6f, 0x6f, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x4d, 0x6f, 0x75, 0x6e, 0x74,
+ 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x29, 0x0a, 0x11, 0x4d,
+ 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52,
+ 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x82, 0x07, 0x0a, 0x17, 0x4d, 0x6f, 0x76, 0x65, 0x54,
+ 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x27,
+ 0x0a, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65,
+ 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52,
+ 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74,
+ 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79,
+ 0x70, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12,
+ 0x6c, 0x0a, 0x1b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x06,
+ 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e,
+ 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53,
+ 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
+ 0x63, 0x65, 0x52, 0x19, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x23, 0x0a,
+ 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x07,
+ 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72,
+ 0x64, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73,
+ 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x6c, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65,
+ 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75,
+ 0x64, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x63, 0x6c,
+ 0x75, 0x64, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09,
+ 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12,
+ 0x32, 0x0a, 0x15, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x6c, 0x75, 0x73,
+ 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13,
+ 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e,
+ 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x69,
+ 0x6d, 0x65, 0x5f, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73,
+ 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x12, 0x15, 0x0a,
+ 0x06, 0x6f, 0x6e, 0x5f, 0x64, 0x64, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f,
+ 0x6e, 0x44, 0x64, 0x6c, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x66, 0x74,
+ 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73,
+ 0x74, 0x6f, 0x70, 0x41, 0x66, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x70, 0x79, 0x12, 0x2a, 0x0a, 0x11,
+ 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x5f, 0x6b, 0x65, 0x79,
+ 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x64, 0x72, 0x6f, 0x70, 0x46, 0x6f, 0x72,
+ 0x65, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x65, 0x66, 0x65,
+ 0x72, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x73,
+ 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x64, 0x65, 0x66, 0x65, 0x72, 0x53, 0x65, 0x63,
+ 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75,
+ 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09,
+ 0x61, 0x75, 0x74, 0x6f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x6f, 0x5f,
+ 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x12, 0x20,
+ 0x01, 0x28, 0x08, 0x52, 0x0e, 0x6e, 0x6f, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75,
+ 0x6c, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x5f, 0x63, 0x6f,
+ 0x70, 0x79, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63,
+ 0x43, 0x6f, 0x70, 0x79, 0x12, 0x45, 0x0a, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
+ 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a,
+ 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66,
+ 0x6c, 0x6f, 0x77, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0f, 0x77, 0x6f, 0x72, 0x6b,
+ 0x66, 0x6c, 0x6f, 0x77, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xd5, 0x01, 0x0a, 0x18,
+ 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d,
+ 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61,
+ 0x72, 0x79, 0x12, 0x48, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20,
+ 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x49,
+ 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0x55, 0x0a, 0x0a,
+ 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2d, 0x0a, 0x06, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70,
+ 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61,
+ 0x73, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65,
+ 0x61, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61,
+ 0x74, 0x65, 0x64, 0x22, 0x81, 0x02, 0x0a, 0x19, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c,
+ 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x27, 0x0a,
+ 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4b, 0x65,
+ 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6b, 0x65, 0x65, 0x70, 0x5f, 0x64,
+ 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6b, 0x65, 0x65, 0x70, 0x44,
+ 0x61, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x12, 0x6b, 0x65, 0x65, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74,
+ 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52,
+ 0x10, 0x6b, 0x65, 0x65, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65,
+ 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65,
+ 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75,
+ 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x12,
+ 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52,
+ 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x22, 0x5e, 0x0a, 0x1a, 0x4d, 0x6f, 0x76, 0x65, 0x54,
+ 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12,
+ 0x26, 0x0a, 0x0f, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c,
+ 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x72, 0x79, 0x52, 0x75, 0x6e,
+ 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x4d, 0x0a, 0x11, 0x50, 0x69, 0x6e, 0x67, 0x54,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x14, 0x0a, 0x12, 0x50, 0x69, 0x6e, 0x67, 0x54, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd6, 0x03, 0x0a,
+ 0x1b, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74,
0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08,
0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
- 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72,
- 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68,
- 0x61, 0x72, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x68,
- 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x05, 0x73,
- 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x63,
- 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x05, 0x73, 0x68,
- 0x61, 0x72, 0x64, 0x22, 0x1d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52,
- 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x22, 0x6a, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f,
- 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x13, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x6f, 0x75, 0x74,
- 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x1a, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52,
- 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x11, 0x73, 0x68, 0x61,
- 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x32,
- 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05,
- 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c,
- 0x6c, 0x73, 0x22, 0xf3, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x12, 0x47, 0x0a, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
- 0x0b, 0x32, 0x31, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65,
- 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65,
- 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x45,
- 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x1a, 0x69, 0x0a, 0x0a, 0x4e,
- 0x61, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x45, 0x0a, 0x05, 0x76,
- 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x76, 0x74, 0x63,
- 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x20, 0x0a, 0x08, 0x4e, 0x61, 0x6d, 0x65, 0x4c, 0x69,
- 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
- 0x09, 0x52, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x4a, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53,
- 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14,
- 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63,
- 0x65, 0x6c, 0x6c, 0x73, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b,
- 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x12, 0x59, 0x0a, 0x0d, 0x73, 0x72, 0x76, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x72, 0x76, 0x4b,
- 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73,
- 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x1a, 0x56, 0x0a, 0x11, 0x53,
- 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
- 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
- 0x65, 0x79, 0x12, 0x2b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x72, 0x76,
- 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
- 0x02, 0x38, 0x01, 0x22, 0xe4, 0x03, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x68,
- 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08,
- 0x52, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x69, 0x73, 0x61,
- 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x69, 0x73, 0x61, 0x62,
- 0x6c, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18,
- 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64,
- 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79,
- 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x51, 0x75,
- 0x65, 0x72, 0x79, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x71, 0x75,
- 0x65, 0x72, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x63,
- 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x74, 0x12, 0x2d, 0x0a,
- 0x13, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x61, 0x73, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f,
- 0x73, 0x65, 0x6c, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x63, 0x68, 0x65, 0x63,
- 0x6b, 0x41, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x65, 0x6c, 0x66, 0x12, 0x2f, 0x0a, 0x14,
- 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x61, 0x73, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x73,
- 0x68, 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x63, 0x68, 0x65, 0x63,
- 0x6b, 0x41, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x3f, 0x0a,
- 0x0d, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x18, 0x09,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x41, 0x70, 0x70, 0x52, 0x75, 0x6c, 0x65,
- 0x52, 0x0c, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x41, 0x70, 0x70, 0x12, 0x1f,
- 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12,
- 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x61, 0x70,
- 0x70, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63,
- 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x61, 0x70, 0x70, 0x43, 0x68, 0x65, 0x63,
- 0x6b, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x1f, 0x0a, 0x1d, 0x55, 0x70,
- 0x64, 0x61, 0x74, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x6e,
- 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x0a, 0x14, 0x47,
- 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x22, 0x4e, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x53, 0x72,
- 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x12, 0x35, 0x0a, 0x0c, 0x73, 0x72, 0x76, 0x5f, 0x76, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61,
- 0x2e, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0a, 0x73, 0x72, 0x76,
- 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0x2d, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x53, 0x72,
- 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52,
- 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0xc5, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x72,
- 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x12, 0x56, 0x0a, 0x0d, 0x73, 0x72, 0x76, 0x5f, 0x76, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d,
- 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65,
- 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x72, 0x76, 0x56,
- 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x73, 0x72,
- 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x1a, 0x53, 0x0a, 0x10, 0x53, 0x72, 0x76,
- 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
- 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
- 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13,
- 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68,
- 0x65, 0x6d, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4c,
- 0x0a, 0x10, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72,
+ 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x36,
+ 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x03, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0a, 0x6e, 0x65, 0x77, 0x50,
+ 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x3a, 0x0a, 0x0d, 0x61, 0x76, 0x6f, 0x69, 0x64, 0x5f,
+ 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
+ 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41,
+ 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0c, 0x61, 0x76, 0x6f, 0x69, 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61,
+ 0x72, 0x79, 0x12, 0x44, 0x0a, 0x15, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x77, 0x61, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x73, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x4c, 0x0a, 0x19, 0x74, 0x6f, 0x6c, 0x65,
+ 0x72, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x5f, 0x6c, 0x61, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74,
+ 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x17, 0x74,
+ 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, 0x12, 0x3b, 0x0a, 0x1a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f,
+ 0x63, 0x72, 0x6f, 0x73, 0x73, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x6d, 0x6f,
+ 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x61, 0x6c, 0x6c, 0x6f,
+ 0x77, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x65, 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74,
+ 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x10, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f,
+ 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
+ 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41,
+ 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0f, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72,
+ 0x69, 0x6d, 0x61, 0x72, 0x79, 0x22, 0xba, 0x01, 0x0a, 0x1c, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65,
+ 0x64, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x40, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6d,
+ 0x6f, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x6d, 0x6f,
+ 0x74, 0x65, 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x76,
+ 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67,
+ 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e,
+ 0x74, 0x73, 0x22, 0x74, 0x0a, 0x1b, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a,
+ 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65,
+ 0x6c, 0x6c, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x61, 0x72,
+ 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f,
+ 0x77, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x22, 0x1e, 0x0a, 0x1c, 0x52, 0x65, 0x62, 0x75,
+ 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x0a, 0x1a, 0x52, 0x65, 0x62, 0x75,
+ 0x69, 0x6c, 0x64, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18,
+ 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0x1d, 0x0a, 0x1b,
+ 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x47, 0x72,
+ 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4f, 0x0a, 0x13, 0x52,
+ 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69,
0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64,
0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52,
- 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x3d, 0x0a, 0x11,
- 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x12, 0x28, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x22, 0xe8, 0x01, 0x0a, 0x11,
- 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a,
- 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68,
- 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03,
- 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72,
- 0x69, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x63,
- 0x74, 0x12, 0x3c, 0x0a, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61,
- 0x73, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73,
- 0x52, 0x0d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x12,
- 0x35, 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06,
- 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x22, 0x40, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x07,
- 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e,
- 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52,
- 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x22, 0x55, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x54,
- 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f,
+ 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x16, 0x0a, 0x14,
+ 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x64, 0x0a, 0x1a, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53,
+ 0x74, 0x61, 0x74, 0x65, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14,
+ 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73,
+ 0x68, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20,
+ 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x1b, 0x52,
+ 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x79, 0x53, 0x68, 0x61,
+ 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x69, 0x73,
+ 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x73, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61,
+ 0x6c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x12, 0x36, 0x0a, 0x17, 0x70, 0x61, 0x72, 0x74,
+ 0x69, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x64, 0x65, 0x74, 0x61,
+ 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x70, 0x61, 0x72, 0x74, 0x69,
+ 0x61, 0x6c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73,
+ 0x22, 0x4f, 0x0a, 0x13, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
+ 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41,
+ 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61,
+ 0x73, 0x22, 0x16, 0x0a, 0x14, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d,
+ 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa9, 0x01, 0x0a, 0x1b, 0x52, 0x65,
+ 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x70, 0x6f,
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x61,
+ 0x69, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e,
+ 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x03, 0x20,
+ 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x72, 0x69, 0x6d,
+ 0x61, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e,
+ 0x63, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72,
+ 0x72, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x46, 0x0a, 0x1c, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53,
+ 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18,
+ 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e,
+ 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xbc, 0x01,
+ 0x0a, 0x18, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x68,
+ 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65,
+ 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65,
+ 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x23, 0x0a, 0x0d,
+ 0x77, 0x61, 0x69, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x61, 0x69, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f,
+ 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70, 0x72, 0x69,
+ 0x6d, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c,
+ 0x75, 0x64, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f,
+ 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52,
+ 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x43, 0x0a, 0x19,
+ 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x68, 0x61, 0x72,
+ 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x76, 0x65,
+ 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75,
+ 0x74, 0x69, 0x6c, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74,
+ 0x73, 0x22, 0x5b, 0x0a, 0x13, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75,
+ 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,
+ 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x16,
+ 0x0a, 0x14, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7f, 0x0a, 0x19, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65,
+ 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12,
+ 0x12, 0x0a, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63,
+ 0x65, 0x6c, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01,
+ 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63,
+ 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65,
+ 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x22, 0x1c, 0x0a, 0x1a, 0x52, 0x65, 0x6d, 0x6f, 0x76,
+ 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9b, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65,
+ 0x53, 0x68, 0x61, 0x72, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a,
+ 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x09, 0x73, 0x68, 0x61, 0x72, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63,
+ 0x65, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x12,
+ 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05,
+ 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69,
+ 0x76, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73,
+ 0x69, 0x76, 0x65, 0x22, 0x19, 0x0a, 0x17, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x68, 0x61,
+ 0x72, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x46,
+ 0x0a, 0x15, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x06,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x22, 0x7b, 0x0a, 0x16, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65,
+ 0x6e, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05,
+ 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61,
+ 0x72, 0x64, 0x12, 0x2f, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x03, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x07, 0x70, 0x72, 0x69, 0x6d,
+ 0x61, 0x72, 0x79, 0x22, 0xd6, 0x04, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x68, 0x61, 0x72, 0x64, 0x43,
+ 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08,
+ 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
+ 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73,
+ 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x6f, 0x75,
+ 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x61, 0x72,
+ 0x67, 0x65, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09,
+ 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, 0x14,
+ 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63,
+ 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74,
+ 0x79, 0x70, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70,
+ 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65,
+ 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x6c, 0x0a,
+ 0x1b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01,
+ 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
+ 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c,
+ 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x52, 0x19, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x73,
+ 0x6b, 0x69, 0x70, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x18,
+ 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x6b, 0x69, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d,
+ 0x61, 0x43, 0x6f, 0x70, 0x79, 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x6e, 0x5f, 0x64, 0x64, 0x6c, 0x18,
+ 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x6e, 0x44, 0x64, 0x6c, 0x12, 0x26, 0x0a, 0x0f,
+ 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x18,
+ 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x74, 0x6f, 0x70, 0x41, 0x66, 0x74, 0x65, 0x72,
+ 0x43, 0x6f, 0x70, 0x79, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x65, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x65,
+ 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x0b, 0x20, 0x01,
+ 0x28, 0x08, 0x52, 0x12, 0x64, 0x65, 0x66, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61,
+ 0x72, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73,
+ 0x74, 0x61, 0x72, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f,
+ 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x45, 0x0a, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
+ 0x77, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x1a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b,
+ 0x66, 0x6c, 0x6f, 0x77, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0f, 0x77, 0x6f, 0x72,
+ 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xb8, 0x02, 0x0a,
+ 0x18, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b,
+ 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c,
+ 0x69, 0x61, 0x73, 0x12, 0x2d, 0x0a, 0x0b, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x74, 0x69,
+ 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d,
+ 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x54, 0x69,
+ 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x6f,
+ 0x5f, 0x70, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x74,
+ 0x6f, 0x72, 0x65, 0x54, 0x6f, 0x50, 0x6f, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, 0x79, 0x5f,
+ 0x72, 0x75, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x72, 0x79, 0x52, 0x75,
+ 0x6e, 0x12, 0x3e, 0x0a, 0x14, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x6f, 0x5f,
+ 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x12, 0x72,
+ 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x6f, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
+ 0x70, 0x12, 0x34, 0x0a, 0x16, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x62, 0x61, 0x63,
+ 0x6b, 0x75, 0x70, 0x5f, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28,
+ 0x09, 0x52, 0x14, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70,
+ 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x73, 0x22, 0xad, 0x01, 0x0a, 0x19, 0x52, 0x65, 0x73, 0x74,
+ 0x6f, 0x72, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f,
0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f,
0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69,
- 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22,
- 0x63, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53,
- 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a,
- 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e,
- 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74,
- 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x06, 0x73, 0x74,
- 0x61, 0x74, 0x75, 0x73, 0x22, 0x5f, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c,
- 0x6f, 0x67, 0x79, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12,
- 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61,
- 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07,
- 0x61, 0x73, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61,
- 0x73, 0x4a, 0x73, 0x6f, 0x6e, 0x22, 0x46, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x6f,
- 0x6c, 0x6f, 0x67, 0x79, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x12, 0x2b, 0x0a, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17,
- 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x6f, 0x70, 0x6f, 0x6c,
- 0x6f, 0x67, 0x79, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x22, 0x80, 0x01,
- 0x0a, 0x0c, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x43, 0x65, 0x6c, 0x6c, 0x12, 0x12,
- 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
- 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68,
- 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68,
- 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
- 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
- 0x22, 0x5f, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65,
- 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x62, 0x61, 0x6e, 0x64, 0x6f, 0x6e, 0x5f, 0x61, 0x67, 0x65, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x61, 0x62, 0x61, 0x6e, 0x64, 0x6f, 0x6e, 0x41, 0x67,
- 0x65, 0x22, 0x63, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76,
- 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61,
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x71,
- 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61,
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x63, 0x0a, 0x1a, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75,
- 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x74, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, 0x64, 0x12, 0x31, 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x74,
- 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d,
- 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x0c, 0x70,
- 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x22, 0x1d, 0x0a, 0x1b, 0x43,
- 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69,
- 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x0a, 0x11, 0x47, 0x65,
- 0x74, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
- 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x4d, 0x0a, 0x11, 0x47,
- 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x2e, 0x0a, 0x12, 0x47, 0x65,
- 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x42, 0x0a, 0x12, 0x47, 0x65,
- 0x74, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x12, 0x2c, 0x0a, 0x08, 0x76, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x07, 0x76, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0xc6,
- 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52,
+ 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12,
+ 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73,
+ 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72,
+ 0x64, 0x12, 0x24, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74,
+ 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x4d, 0x0a, 0x1b, 0x52, 0x65, 0x74, 0x72, 0x79,
+ 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x6e, 0x6c,
- 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4f,
- 0x6e, 0x6c, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79,
- 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, 0x61, 0x6d, 0x65, 0x4f, 0x6e, 0x6c, 0x79,
- 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x04, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x21, 0x0a, 0x0c,
- 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x05, 0x20, 0x01,
- 0x28, 0x08, 0x52, 0x0b, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4c, 0x6f, 0x67, 0x73, 0x12,
- 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52,
- 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x22, 0x49, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x57, 0x6f,
- 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
- 0x31, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03,
- 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57,
- 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
- 0x77, 0x73, 0x22, 0xfb, 0x01, 0x0a, 0x17, 0x49, 0x6e, 0x69, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64,
- 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a,
- 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68,
- 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64,
- 0x12, 0x52, 0x0a, 0x1a, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x65, 0x6c, 0x65, 0x63,
- 0x74, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x17, 0x70, 0x72, 0x69,
- 0x6d, 0x61, 0x72, 0x79, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41,
- 0x6c, 0x69, 0x61, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20,
- 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x44, 0x0a, 0x15, 0x77, 0x61,
- 0x69, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65,
- 0x6f, 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69,
- 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x77, 0x61, 0x69,
- 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74,
- 0x22, 0x42, 0x0a, 0x18, 0x49, 0x6e, 0x69, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x50, 0x72, 0x69,
- 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x06,
- 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c,
- 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76,
- 0x65, 0x6e, 0x74, 0x73, 0x22, 0x4e, 0x0a, 0x1c, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x63,
- 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
- 0x75, 0x75, 0x69, 0x64, 0x22, 0xdf, 0x01, 0x0a, 0x1d, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53,
- 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x16, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x61,
- 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64,
- 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d,
+ 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0xdd, 0x01, 0x0a, 0x1c, 0x52, 0x65, 0x74, 0x72, 0x79,
+ 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x16, 0x72, 0x6f, 0x77, 0x73, 0x5f,
+ 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72,
+ 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d,
0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x2e, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53,
0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x72, 0x6f, 0x77, 0x73, 0x41,
@@ -18241,614 +18696,80 @@ var file_vtctldata_proto_rawDesc = []byte{
0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05,
0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xff, 0x02, 0x0a, 0x19, 0x4c, 0x6f, 0x6f, 0x6b, 0x75,
- 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x14, 0x0a, 0x05,
- 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c,
- 0x6c, 0x73, 0x12, 0x29, 0x0a, 0x06, 0x76, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x06, 0x76, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x42, 0x0a,
- 0x1e, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f,
- 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18,
- 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x41,
- 0x66, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x70, 0x79, 0x57, 0x69, 0x74, 0x68, 0x4f, 0x77, 0x6e, 0x65,
- 0x72, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65,
- 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x6c, 0x0a, 0x1b, 0x74, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70,
- 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32,
- 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74,
- 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x19, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72,
- 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x1c, 0x0a, 0x1a, 0x4c, 0x6f, 0x6f, 0x6b,
- 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x77, 0x0a, 0x1e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70,
- 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a,
- 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x0d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22,
- 0x4c, 0x0a, 0x1f, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x45,
- 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x64,
- 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x77, 0x6f,
- 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0x56, 0x0a,
- 0x18, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x72, 0x65, 0x61,
- 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x08, 0x73, 0x65, 0x74,
- 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x76, 0x74,
- 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c,
- 0x69, 0x7a, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74,
- 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x1b, 0x0a, 0x19, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61,
- 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0xdd, 0x05, 0x0a, 0x14, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x43, 0x72,
- 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77,
- 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77,
- 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63,
- 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65,
- 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x6f, 0x75,
- 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d,
- 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c,
- 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x37,
- 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x06,
- 0x20, 0x03, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x6c, 0x0a, 0x1b, 0x74, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66,
- 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x19, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65,
- 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x61, 0x62,
- 0x6c, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x6c, 0x6c, 0x54, 0x61,
- 0x62, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f,
- 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e,
- 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65,
- 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x0a, 0x20,
- 0x03, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x61, 0x62, 0x6c,
- 0x65, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x69, 0x6d,
- 0x65, 0x5f, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x6f,
- 0x75, 0x72, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x12, 0x15, 0x0a, 0x06,
- 0x6f, 0x6e, 0x5f, 0x64, 0x64, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x6e,
- 0x44, 0x64, 0x6c, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x66, 0x74, 0x65,
- 0x72, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x74,
- 0x6f, 0x70, 0x41, 0x66, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x70, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x64,
- 0x72, 0x6f, 0x70, 0x5f, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x73,
- 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x64, 0x72, 0x6f, 0x70, 0x46, 0x6f, 0x72, 0x65,
- 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x65, 0x66, 0x65, 0x72,
- 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18,
- 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x64, 0x65, 0x66, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f,
- 0x6e, 0x64, 0x61, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74,
- 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61,
- 0x75, 0x74, 0x6f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x6f, 0x5f, 0x72,
- 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x11, 0x20, 0x01,
- 0x28, 0x08, 0x52, 0x0e, 0x6e, 0x6f, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c,
- 0x65, 0x73, 0x22, 0xe6, 0x01, 0x0a, 0x16, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f,
- 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a,
- 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72,
- 0x67, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6b, 0x65, 0x65, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18,
- 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6b, 0x65, 0x65, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12,
- 0x2c, 0x0a, 0x12, 0x6b, 0x65, 0x65, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f,
- 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6b, 0x65, 0x65,
- 0x70, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x23, 0x0a,
- 0x0d, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x06,
- 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x54, 0x61, 0x62, 0x6c,
- 0x65, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x07, 0x20,
- 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x22, 0x5b, 0x0a, 0x17, 0x4d,
- 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72,
- 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79,
- 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x75,
- 0x6c, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x72, 0x79, 0x52, 0x75,
- 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x85, 0x01, 0x0a, 0x14, 0x4d, 0x6f, 0x75,
- 0x6e, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x70, 0x6f, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x70, 0x6f, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f,
- 0x0a, 0x0b, 0x74, 0x6f, 0x70, 0x6f, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x6f, 0x70, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12,
- 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x70, 0x6f, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x70, 0x6f, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x12, 0x0a, 0x04,
- 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
- 0x22, 0x17, 0x0a, 0x15, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65,
- 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x0a, 0x16, 0x4d, 0x6f, 0x75,
- 0x6e, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x19, 0x0a, 0x17, 0x4d, 0x6f, 0x75, 0x6e, 0x74,
- 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x26, 0x0a, 0x10, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x82, 0x01, 0x0a, 0x11, 0x4d,
- 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x70, 0x6f, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x70, 0x6f, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a,
- 0x0b, 0x74, 0x6f, 0x70, 0x6f, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x0a, 0x74, 0x6f, 0x70, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x1b,
- 0x0a, 0x09, 0x74, 0x6f, 0x70, 0x6f, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x08, 0x74, 0x6f, 0x70, 0x6f, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e,
- 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22,
- 0x12, 0x0a, 0x10, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x22, 0x29, 0x0a, 0x11, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6d, 0x65,
- 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x82,
- 0x07, 0x0a, 0x17, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x72, 0x65,
- 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f,
- 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f,
- 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
- 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12,
- 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74,
- 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c,
- 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x37,
- 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x05,
- 0x20, 0x03, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x6c, 0x0a, 0x1b, 0x74, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66,
- 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x19, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65,
- 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f,
- 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x6f,
- 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x6c,
- 0x6c, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09,
- 0x61, 0x6c, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x63,
- 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28,
- 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73,
- 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64,
- 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x78, 0x74, 0x65, 0x72,
- 0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
- 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
- 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x73,
- 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x7a, 0x6f, 0x6e, 0x65, 0x18,
- 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x69, 0x6d,
- 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x6e, 0x5f, 0x64, 0x64, 0x6c, 0x18,
- 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x6e, 0x44, 0x64, 0x6c, 0x12, 0x26, 0x0a, 0x0f,
- 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x18,
- 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x74, 0x6f, 0x70, 0x41, 0x66, 0x74, 0x65, 0x72,
- 0x43, 0x6f, 0x70, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x66, 0x6f, 0x72,
- 0x65, 0x69, 0x67, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52,
- 0x0f, 0x64, 0x72, 0x6f, 0x70, 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x73,
- 0x12, 0x30, 0x0a, 0x14, 0x64, 0x65, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64,
- 0x61, 0x72, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12,
- 0x64, 0x65, 0x66, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x4b, 0x65,
- 0x79, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74,
- 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x53, 0x74, 0x61, 0x72,
- 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x6f, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f,
- 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x6e, 0x6f, 0x52,
- 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x61,
- 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08,
- 0x52, 0x0a, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x43, 0x6f, 0x70, 0x79, 0x12, 0x45, 0x0a, 0x10,
- 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4f, 0x70, 0x74, 0x69, 0x6f,
- 0x6e, 0x73, 0x52, 0x0f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4f, 0x70, 0x74, 0x69,
- 0x6f, 0x6e, 0x73, 0x22, 0xd5, 0x01, 0x0a, 0x18, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c,
- 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x48, 0x0a, 0x07, 0x64, 0x65,
- 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x76, 0x74,
- 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c,
- 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x64, 0x65, 0x74,
- 0x61, 0x69, 0x6c, 0x73, 0x1a, 0x55, 0x0a, 0x0a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x49, 0x6e,
- 0x66, 0x6f, 0x12, 0x2d, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x08, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x81, 0x02, 0x0a, 0x19,
- 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65,
- 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72,
- 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72,
- 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f,
- 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e,
- 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1b,
- 0x0a, 0x09, 0x6b, 0x65, 0x65, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28,
- 0x08, 0x52, 0x08, 0x6b, 0x65, 0x65, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x12, 0x6b,
- 0x65, 0x65, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65,
- 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6b, 0x65, 0x65, 0x70, 0x52, 0x6f, 0x75,
- 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x6e,
- 0x61, 0x6d, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08,
- 0x52, 0x0c, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x17,
- 0x0a, 0x07, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52,
- 0x06, 0x64, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64,
- 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x22,
- 0x5e, 0x0a, 0x1a, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6d,
- 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a,
- 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
- 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x72, 0x79, 0x5f, 0x72,
- 0x75, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09,
- 0x52, 0x0d, 0x64, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22,
- 0x4d, 0x0a, 0x11, 0x50, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61,
- 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70,
- 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61,
- 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x14,
- 0x0a, 0x12, 0x50, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x94, 0x03, 0x0a, 0x1b, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64,
- 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x36, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x72,
- 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f,
- 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69,
- 0x61, 0x73, 0x52, 0x0a, 0x6e, 0x65, 0x77, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x3a,
- 0x0a, 0x0d, 0x61, 0x76, 0x6f, 0x69, 0x64, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18,
- 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0c, 0x61, 0x76,
- 0x6f, 0x69, 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x44, 0x0a, 0x15, 0x77, 0x61,
- 0x69, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65,
- 0x6f, 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69,
- 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x77, 0x61, 0x69,
- 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74,
- 0x12, 0x4c, 0x0a, 0x19, 0x74, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65,
- 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67, 0x18, 0x06, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x17, 0x74, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x65,
- 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, 0x12, 0x3b,
- 0x0a, 0x1a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x5f, 0x63, 0x65,
- 0x6c, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01,
- 0x28, 0x08, 0x52, 0x17, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x65,
- 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xba, 0x01, 0x0a, 0x1c,
- 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53,
- 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08,
- 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
- 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72,
- 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x40,
- 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61,
- 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52,
- 0x0f, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79,
- 0x12, 0x26, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b,
- 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74,
- 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x74, 0x0a, 0x1b, 0x52, 0x65, 0x62, 0x75,
- 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03,
- 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c,
- 0x6f, 0x77, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08,
- 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x22, 0x1e,
- 0x0a, 0x1c, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32,
- 0x0a, 0x1a, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
- 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05,
- 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c,
- 0x6c, 0x73, 0x22, 0x1d, 0x0a, 0x1b, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x56, 0x53, 0x63,
- 0x68, 0x65, 0x6d, 0x61, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x4f, 0x0a, 0x13, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74,
- 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15,
- 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69,
- 0x61, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61,
- 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x64, 0x0a, 0x1a, 0x52, 0x65,
- 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72,
- 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65,
- 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73,
- 0x22, 0x83, 0x01, 0x0a, 0x1b, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74,
- 0x65, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x12, 0x2c, 0x0a, 0x12, 0x69, 0x73, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x72,
- 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x73,
- 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x12, 0x36,
- 0x0a, 0x17, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73,
- 0x68, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x15, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x44,
- 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x4f, 0x0a, 0x13, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64,
- 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a,
- 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x52, 0x65, 0x6c, 0x6f, 0x61,
- 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
- 0xa9, 0x01, 0x0a, 0x1b, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
- 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
- 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x77,
- 0x61, 0x69, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x0c, 0x77, 0x61, 0x69, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
- 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70, 0x72, 0x69, 0x6d,
- 0x61, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75,
- 0x64, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e,
- 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b,
- 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x46, 0x0a, 0x1c, 0x52,
- 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x65,
- 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f,
- 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65,
- 0x6e, 0x74, 0x73, 0x22, 0xbc, 0x01, 0x0a, 0x18, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63,
- 0x68, 0x65, 0x6d, 0x61, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05,
- 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61,
- 0x72, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74,
- 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x61, 0x69, 0x74, 0x50,
- 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75,
- 0x64, 0x65, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08,
- 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79,
- 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18,
- 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e,
- 0x63, 0x79, 0x22, 0x43, 0x0a, 0x19, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65,
- 0x6d, 0x61, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
- 0x26, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
- 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52,
- 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x5b, 0x0a, 0x13, 0x52, 0x65, 0x6d, 0x6f, 0x76,
- 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a,
- 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68,
- 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64,
- 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
- 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x61,
- 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7f, 0x0a, 0x19,
- 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x65,
- 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72,
- 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12,
- 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x04, 0x20, 0x01,
- 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x22, 0x1c, 0x0a,
- 0x1a, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43,
- 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9b, 0x01, 0x0a, 0x16,
- 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, 0x61, 0x72, 0x64, 0x4e, 0x61, 0x6d,
- 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x04,
- 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72,
- 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09,
- 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x22, 0x19, 0x0a, 0x17, 0x52, 0x65, 0x6d,
- 0x6f, 0x76, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x46, 0x0a, 0x15, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74,
- 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a,
- 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
- 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41,
- 0x6c, 0x69, 0x61, 0x73, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x22, 0x7b, 0x0a, 0x16,
- 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x2f, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x6d,
- 0x61, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73,
- 0x52, 0x07, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x22, 0xd6, 0x04, 0x0a, 0x14, 0x52, 0x65,
- 0x73, 0x68, 0x61, 0x72, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x1a,
- 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x6f,
- 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28,
- 0x09, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x12,
- 0x23, 0x0a, 0x0d, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73,
- 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x68,
- 0x61, 0x72, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x05, 0x20,
- 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0e,
- 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79,
- 0x70, 0x65, 0x73, 0x12, 0x6c, 0x0a, 0x1b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73, 0x65,
- 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
- 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66,
- 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x19, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65,
- 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
- 0x65, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61,
- 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x6b, 0x69,
- 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x43, 0x6f, 0x70, 0x79, 0x12, 0x15, 0x0a, 0x06, 0x6f,
- 0x6e, 0x5f, 0x64, 0x64, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x6e, 0x44,
- 0x64, 0x6c, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72,
- 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x74, 0x6f,
- 0x70, 0x41, 0x66, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x70, 0x79, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x65,
- 0x66, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x6b, 0x65,
- 0x79, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x64, 0x65, 0x66, 0x65, 0x72, 0x53,
- 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x1d, 0x0a, 0x0a,
- 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08,
- 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x45, 0x0a, 0x10, 0x77,
- 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
- 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
- 0x73, 0x52, 0x0f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4f, 0x70, 0x74, 0x69, 0x6f,
- 0x6e, 0x73, 0x22, 0xb8, 0x02, 0x0a, 0x18, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x72,
- 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x51, 0x0a, 0x15, 0x52, 0x75, 0x6e, 0x48, 0x65, 0x61,
+ 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18,
0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61,
0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x2d, 0x0a, 0x0b, 0x62, 0x61, 0x63,
- 0x6b, 0x75, 0x70, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c,
- 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0a, 0x62, 0x61,
- 0x63, 0x6b, 0x75, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x74,
- 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x6f, 0x5f, 0x70, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x0c, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x6f, 0x50, 0x6f, 0x73, 0x12, 0x17,
- 0x0a, 0x07, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52,
- 0x06, 0x64, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x12, 0x3e, 0x0a, 0x14, 0x72, 0x65, 0x73, 0x74, 0x6f,
- 0x72, 0x65, 0x5f, 0x74, 0x6f, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18,
- 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54,
- 0x69, 0x6d, 0x65, 0x52, 0x12, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x6f, 0x54, 0x69,
- 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x34, 0x0a, 0x16, 0x61, 0x6c, 0x6c, 0x6f, 0x77,
- 0x65, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65,
- 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x14, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64,
- 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x73, 0x22, 0xad, 0x01,
- 0x0a, 0x19, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61, 0x63,
- 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0c, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74,
- 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x6f, 0x67, 0x75, 0x74, 0x69, 0x6c,
- 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x4d, 0x0a,
- 0x1b, 0x52, 0x65, 0x74, 0x72, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08,
- 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
- 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0xdd, 0x01, 0x0a,
- 0x1c, 0x52, 0x65, 0x74, 0x72, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a,
- 0x16, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62,
- 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e,
- 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x53,
- 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63,
- 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52,
- 0x13, 0x72, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53,
- 0x68, 0x61, 0x72, 0x64, 0x1a, 0x46, 0x0a, 0x18, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65,
- 0x63, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79,
- 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
- 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x51, 0x0a, 0x15,
- 0x52, 0x75, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f,
- 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f,
- 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69,
- 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22,
- 0x18, 0x0a, 0x16, 0x52, 0x75, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63,
- 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6d, 0x0a, 0x22, 0x53, 0x65, 0x74,
- 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x75, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69,
- 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x18, 0x0a, 0x16, 0x52, 0x75, 0x6e,
+ 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x6d, 0x0a, 0x22, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x44, 0x75, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69,
+ 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x75, 0x72, 0x61, 0x62, 0x69, 0x6c,
+ 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x10, 0x64, 0x75, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69,
+ 0x63, 0x79, 0x22, 0x55, 0x0a, 0x23, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x44, 0x75, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63,
+ 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x6b, 0x65, 0x79,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x6f,
+ 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52,
+ 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x5e, 0x0a, 0x1e, 0x53, 0x65, 0x74,
+ 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67,
+ 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65,
+ 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x4a, 0x04, 0x08,
+ 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x51, 0x0a, 0x1f, 0x53, 0x65, 0x74,
+ 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67,
+ 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x08,
+ 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12,
+ 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x72, 0x0a, 0x1f,
+ 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x49, 0x73, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72,
+ 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x64,
- 0x75, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x64, 0x75, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69,
- 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x55, 0x0a, 0x23, 0x53, 0x65, 0x74, 0x4b,
- 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x75, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74,
- 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
- 0x2e, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22,
- 0x5e, 0x0a, 0x1e, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x68,
- 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a,
- 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f,
- 0x72, 0x63, 0x65, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22,
- 0x51, 0x0a, 0x1f, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x68,
- 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x22, 0x72, 0x0a, 0x1f, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x49, 0x73,
- 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x73, 0x65,
- 0x72, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x53,
- 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x22, 0x49, 0x0a, 0x20, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61,
- 0x72, 0x64, 0x49, 0x73, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69,
- 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x73, 0x68,
- 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x6f, 0x70, 0x6f,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72,
- 0x64, 0x22, 0x8e, 0x02, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x54, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14,
- 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73,
- 0x68, 0x61, 0x72, 0x64, 0x12, 0x35, 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74,
- 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52,
- 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63,
- 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c,
- 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x6e, 0x69, 0x65, 0x64, 0x5f, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x6e, 0x69, 0x65, 0x64,
- 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c,
- 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18,
- 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x51, 0x75,
- 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65,
- 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f,
- 0x76, 0x65, 0x22, 0x46, 0x0a, 0x1d, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x54, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68,
- 0x61, 0x72, 0x64, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x22, 0x6a, 0x0a, 0x12, 0x53, 0x65,
- 0x74, 0x57, 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x72,
- 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x77, 0x72,
- 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x57, 0x72, 0x69,
- 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x88, 0x01,
- 0x0a, 0x1a, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08,
+ 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73,
+ 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72,
+ 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x18,
+ 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67,
+ 0x22, 0x49, 0x0a, 0x20, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x49, 0x73, 0x50, 0x72,
+ 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53,
+ 0x68, 0x61, 0x72, 0x64, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x22, 0x8e, 0x02, 0x0a, 0x1c,
+ 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f,
+ 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08,
0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72,
- 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x38,
- 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x1d, 0x0a, 0x1b, 0x53, 0x68, 0x61, 0x72,
+ 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x35,
+ 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20,
+ 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x04,
+ 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x64,
+ 0x65, 0x6e, 0x69, 0x65, 0x64, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03,
+ 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x6e, 0x69, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73,
+ 0x12, 0x32, 0x0a, 0x15, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72,
+ 0x79, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52,
+ 0x13, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72,
+ 0x76, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x07,
+ 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x22, 0x46, 0x0a, 0x1d,
+ 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f,
+ 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a,
+ 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74,
+ 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x05, 0x73,
+ 0x68, 0x61, 0x72, 0x64, 0x22, 0x6a, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x57, 0x72, 0x69, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41,
+ 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x77, 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x22, 0x15, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x57, 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x1a, 0x53, 0x68, 0x61, 0x72,
0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x62, 0x0a, 0x1a, 0x53, 0x68, 0x61, 0x72, 0x64,
- 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x78, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x18,
- 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x22, 0x54, 0x0a, 0x1b, 0x53,
- 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46,
- 0x69, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x05, 0x65, 0x72,
- 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x6f, 0x70, 0x6f,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f,
- 0x72, 0x22, 0x54, 0x0a, 0x20, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x22, 0xaa, 0x03, 0x0a, 0x21, 0x53, 0x68, 0x61, 0x72,
- 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69,
- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a,
- 0x14, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61,
- 0x74, 0x75, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x76, 0x74,
- 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
- 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74,
- 0x72, 0x79, 0x52, 0x13, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53,
- 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x12, 0x5a, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x76, 0x74,
- 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
- 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x4d, 0x61, 0x70, 0x1a, 0x5f, 0x0a, 0x18, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
- 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
- 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x17, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
- 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4e, 0x0a, 0x0e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x4d, 0x61,
- 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
- 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8b, 0x01, 0x0a, 0x1d, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65,
- 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
@@ -18856,135 +18777,220 @@ var file_vtctldata_proto_rawDesc = []byte{
0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15,
0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69,
- 0x61, 0x73, 0x22, 0x20, 0x0a, 0x1e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69,
- 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7c, 0x0a, 0x12, 0x53, 0x6c, 0x65, 0x65, 0x70, 0x54, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41,
- 0x6c, 0x69, 0x61, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e,
- 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x6c, 0x65, 0x65, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xf0, 0x01, 0x0a, 0x15, 0x53, 0x6f,
- 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75,
+ 0x61, 0x73, 0x22, 0x1d, 0x0a, 0x1b, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x62, 0x0a, 0x1a, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73,
+ 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72,
+ 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x22, 0x54, 0x0a, 0x1b, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65,
+ 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x78, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53,
+ 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45,
+ 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x54, 0x0a, 0x20, 0x53,
+ 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50,
+ 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73,
+ 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72,
+ 0x64, 0x22, 0xaa, 0x03, 0x0a, 0x21, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, 0x14, 0x72, 0x65, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x18,
+ 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53,
+ 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x72, 0x65,
+ 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65,
+ 0x73, 0x12, 0x5a, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x6d, 0x61, 0x70, 0x18,
+ 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74,
+ 0x72, 0x79, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x4d, 0x61, 0x70, 0x1a, 0x5f, 0x0a,
+ 0x18, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74,
+ 0x75, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x72, 0x65, 0x70,
+ 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x61,
+ 0x74, 0x75, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4e,
+ 0x0a, 0x0e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79,
+ 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
+ 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8b,
+ 0x01, 0x0a, 0x1d, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05,
+ 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61,
+ 0x72, 0x64, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69,
+ 0x61, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52,
+ 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x20, 0x0a, 0x1e,
+ 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7c,
+ 0x0a, 0x12, 0x53, 0x6c, 0x65, 0x65, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61,
+ 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70,
+ 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61,
+ 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x2c,
+ 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x15, 0x0a, 0x13,
+ 0x53, 0x6c, 0x65, 0x65, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0xf0, 0x01, 0x0a, 0x15, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68,
+ 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a,
+ 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61,
+ 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12,
+ 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x75, 0x69,
+ 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x6f,
+ 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x2f, 0x0a,
+ 0x09, 0x6b, 0x65, 0x79, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x12, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x52,
+ 0x61, 0x6e, 0x67, 0x65, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x16,
+ 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0x3f, 0x0a, 0x16, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65,
+ 0x53, 0x68, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x12, 0x25, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x0f, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64,
+ 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x22, 0x5e, 0x0a, 0x18, 0x53, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12,
0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01,
- 0x28, 0x05, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63,
- 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64,
- 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68,
- 0x61, 0x72, 0x64, 0x12, 0x2f, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65,
- 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x52,
- 0x61, 0x6e, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x07,
- 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0x3f, 0x0a, 0x16,
- 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x22, 0x5e, 0x0a,
- 0x18, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x44, 0x65, 0x6c, 0x65,
- 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75,
- 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x75, 0x69, 0x64, 0x22, 0x42, 0x0a,
- 0x19, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x44, 0x65, 0x6c, 0x65,
- 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x73, 0x68,
- 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x6f, 0x70, 0x6f,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72,
- 0x64, 0x22, 0x53, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c,
- 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x1a, 0x0a, 0x18, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52,
- 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x52, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c,
- 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x19, 0x0a, 0x17, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65,
- 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x52, 0x0a, 0x21, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72,
- 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x06, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x22, 0xc6, 0x01, 0x0a, 0x22, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65,
- 0x6e, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08,
- 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
- 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72,
- 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x36,
- 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x03, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0a, 0x6e, 0x65, 0x77, 0x50,
- 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x36, 0x0a, 0x0b, 0x6f, 0x6c, 0x64, 0x5f, 0x70, 0x72,
- 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f,
- 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69,
- 0x61, 0x73, 0x52, 0x0a, 0x6f, 0x6c, 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x5c,
- 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x63,
- 0x65, 0x6c, 0x6c, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12,
- 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e,
- 0x66, 0x6f, 0x52, 0x08, 0x63, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x5d, 0x0a, 0x16,
- 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x63, 0x65,
- 0x6c, 0x6c, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e,
- 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66,
- 0x6f, 0x52, 0x08, 0x63, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x64, 0x0a, 0x17, 0x55,
+ 0x28, 0x05, 0x52, 0x03, 0x75, 0x69, 0x64, 0x22, 0x42, 0x0a, 0x19, 0x53, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53,
+ 0x68, 0x61, 0x72, 0x64, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x22, 0x53, 0x0a, 0x17, 0x53,
+ 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74,
+ 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c,
+ 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73,
+ 0x22, 0x1a, 0x0a, 0x18, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x52, 0x0a, 0x16,
+ 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74,
+ 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c,
+ 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73,
+ 0x22, 0x19, 0x0a, 0x17, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x52, 0x0a, 0x21, 0x54,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x52,
+ 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x12, 0x2d, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x22,
+ 0xc6, 0x01, 0x0a, 0x22, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x6c, 0x6c, 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x36, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x5f,
+ 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
+ 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41,
+ 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0a, 0x6e, 0x65, 0x77, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79,
+ 0x12, 0x36, 0x0a, 0x0b, 0x6f, 0x6c, 0x64, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18,
+ 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0a, 0x6f, 0x6c,
+ 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x5c, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61,
+ 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x63, 0x65, 0x6c, 0x6c, 0x5f, 0x69, 0x6e,
+ 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x63, 0x65,
+ 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x5d, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+ 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
+ 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x63, 0x65, 0x6c, 0x6c, 0x5f, 0x69, 0x6e, 0x66,
+ 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x63, 0x65, 0x6c,
+ 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x64, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43,
+ 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
+ 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x0b, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x5f, 0x61, 0x6c,
+ 0x69, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52,
+ 0x0a, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x65, 0x0a, 0x18, 0x55,
0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x0b, 0x63, 0x65,
- 0x6c, 0x6c, 0x73, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x73,
- 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0a, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61,
- 0x73, 0x22, 0x65, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x73,
- 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a,
- 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d,
- 0x65, 0x12, 0x35, 0x0a, 0x0b, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0a, 0x63, 0x65,
- 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x34, 0x0a, 0x0f, 0x56, 0x61, 0x6c, 0x69,
- 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70,
- 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x08, 0x52, 0x0b, 0x70, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x22, 0xfb,
- 0x01, 0x0a, 0x10, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01,
- 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x62, 0x0a,
- 0x13, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x62, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x76, 0x74, 0x63,
- 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42,
- 0x79, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11,
- 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x1a, 0x69, 0x0a, 0x16, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, 0x4b, 0x65,
- 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b,
- 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x39, 0x0a,
- 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x76,
- 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
- 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x58, 0x0a, 0x17,
- 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x69, 0x6e, 0x67, 0x54,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x22, 0xfc, 0x01, 0x0a, 0x18, 0x56, 0x61, 0x6c, 0x69, 0x64,
- 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01,
- 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x61, 0x0a,
- 0x10, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x62, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72,
- 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x0b, 0x63,
+ 0x65, 0x6c, 0x6c, 0x73, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x65, 0x6c, 0x6c,
+ 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0a, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69,
+ 0x61, 0x73, 0x22, 0x34, 0x0a, 0x0f, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x69, 0x6e,
+ 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x22, 0xfb, 0x01, 0x0a, 0x10, 0x56, 0x61, 0x6c,
+ 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a,
+ 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07,
+ 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x62, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x75, 0x6c,
+ 0x74, 0x73, 0x5f, 0x62, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02,
+ 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
+ 0x73, 0x42, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x1a, 0x69, 0x0a, 0x16, 0x52,
+ 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x58, 0x0a, 0x17, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61,
+ 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a,
+ 0x0c, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73,
+ 0x22, 0xfc, 0x01, 0x0a, 0x18, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a,
+ 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07,
+ 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x61, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x75, 0x6c,
+ 0x74, 0x73, 0x5f, 0x62, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28,
+ 0x0b, 0x32, 0x37, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61,
+ 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79,
+ 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x75,
+ 0x6c, 0x74, 0x73, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x1a, 0x63, 0x0a, 0x13, 0x52, 0x65,
+ 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72,
+ 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
+ 0x6b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56,
+ 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22,
+ 0xd8, 0x01, 0x0a, 0x1d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65,
+ 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x25, 0x0a,
+ 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18,
+ 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x61,
+ 0x62, 0x6c, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f,
+ 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x6e, 0x63,
+ 0x6c, 0x75, 0x64, 0x65, 0x56, 0x69, 0x65, 0x77, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x6b, 0x69,
+ 0x70, 0x5f, 0x6e, 0x6f, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x08, 0x52, 0x0d, 0x73, 0x6b, 0x69, 0x70, 0x4e, 0x6f, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72,
+ 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x76, 0x73, 0x63,
+ 0x68, 0x65, 0x6d, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c,
+ 0x75, 0x64, 0x65, 0x56, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0x88, 0x02, 0x0a, 0x1e, 0x56,
+ 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a,
+ 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07,
+ 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x67, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x75, 0x6c,
+ 0x74, 0x73, 0x5f, 0x62, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28,
+ 0x0b, 0x32, 0x3d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61,
+ 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73,
0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73,
0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79,
0x52, 0x0e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64,
@@ -18994,415 +19000,391 @@ var file_vtctldata_proto_rawDesc = []byte{
0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61,
0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd8, 0x01, 0x0a, 0x1d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61,
- 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6b, 0x0a, 0x14, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
+ 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a,
+ 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61,
+ 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12,
+ 0x21, 0x0a, 0x0c, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18,
+ 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x73, 0x22, 0x31, 0x0a, 0x15, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68,
+ 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72,
+ 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65,
+ 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x3c, 0x0a, 0x1e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
+ 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70,
0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x63,
- 0x6c, 0x75, 0x64, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e,
- 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
- 0x08, 0x52, 0x0c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x56, 0x69, 0x65, 0x77, 0x73, 0x12,
- 0x26, 0x0a, 0x0f, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x6e, 0x6f, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61,
- 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x6b, 0x69, 0x70, 0x4e, 0x6f,
- 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75,
- 0x64, 0x65, 0x5f, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08,
- 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x56, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61,
- 0x22, 0x88, 0x02, 0x0a, 0x1e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68,
- 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01,
- 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x67, 0x0a,
- 0x10, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x62, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72,
- 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65,
- 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72,
- 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42,
- 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x1a, 0x63, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
- 0x73, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
- 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
- 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20,
- 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64,
- 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6b, 0x0a, 0x14, 0x56,
- 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12,
- 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
- 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x69, 0x6e,
- 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x22, 0x31, 0x0a, 0x15, 0x56, 0x61, 0x6c, 0x69,
- 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03,
- 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x3c, 0x0a, 0x1e, 0x56,
- 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65,
- 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a,
- 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x8a, 0x02, 0x0a, 0x1f, 0x56, 0x61,
- 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a,
- 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07,
- 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x68, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x75, 0x6c,
- 0x74, 0x73, 0x5f, 0x62, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28,
- 0x0b, 0x32, 0x3e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61,
- 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65,
- 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72,
- 0x79, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72,
- 0x64, 0x1a, 0x63, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, 0x53, 0x68,
- 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61,
- 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74,
- 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68,
- 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4f, 0x0a, 0x1b, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61,
- 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x22, 0x38, 0x0a, 0x1c, 0x56, 0x61, 0x6c, 0x69, 0x64,
- 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52,
+ 0x61, 0x63, 0x65, 0x22, 0x8a, 0x02, 0x0a, 0x1f, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65,
+ 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c,
0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
- 0x73, 0x22, 0x98, 0x01, 0x0a, 0x16, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x53,
- 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08,
- 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
- 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72,
- 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73,
- 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64,
- 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75,
- 0x64, 0x65, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c,
- 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0xfa, 0x01, 0x0a,
- 0x17, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75,
- 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c,
- 0x74, 0x73, 0x12, 0x60, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x62, 0x79,
- 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x76,
- 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
- 0x65, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45,
- 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, 0x53,
- 0x68, 0x61, 0x72, 0x64, 0x1a, 0x63, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42,
- 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b,
- 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x36, 0x0a,
- 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x76,
- 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
- 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf9, 0x07, 0x0a, 0x12, 0x56, 0x44,
- 0x69, 0x66, 0x66, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x73, 0x12, 0x68, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x62, 0x79, 0x5f,
+ 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x76, 0x74,
+ 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65,
+ 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42,
+ 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x72, 0x65, 0x73,
+ 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x1a, 0x63, 0x0a, 0x13, 0x52,
+ 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74,
+ 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x03, 0x6b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
+ 0x22, 0x4f, 0x0a, 0x1b, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73,
+ 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73,
+ 0x68, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72,
+ 0x64, 0x22, 0x38, 0x0a, 0x1c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72,
+ 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03,
+ 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x98, 0x01, 0x0a, 0x16,
+ 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03,
+ 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78,
+ 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03,
+ 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65,
+ 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x76, 0x69, 0x65,
+ 0x77, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64,
+ 0x65, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0xfa, 0x01, 0x0a, 0x17, 0x56, 0x61, 0x6c, 0x69, 0x64,
+ 0x61, 0x74, 0x65, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20,
+ 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x60, 0x0a, 0x10,
+ 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x62, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64,
+ 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x53, 0x63, 0x68, 0x65,
+ 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c,
+ 0x74, 0x73, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e,
+ 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x1a, 0x63,
+ 0x0a, 0x13, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64,
+ 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
+ 0x02, 0x38, 0x01, 0x22, 0xf9, 0x07, 0x0a, 0x12, 0x56, 0x44, 0x69, 0x66, 0x66, 0x43, 0x72, 0x65,
+ 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f,
+ 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f,
+ 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74,
+ 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12,
+ 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75,
+ 0x75, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x65,
+ 0x6c, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74,
+ 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x61,
+ 0x72, 0x67, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0e, 0x32,
+ 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70,
+ 0x65, 0x73, 0x12, 0x6c, 0x0a, 0x1b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x6c,
+ 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
+ 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x19, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c,
+ 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09,
+ 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69,
+ 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x55,
+ 0x0a, 0x1e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65,
+ 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e,
+ 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1b, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72,
+ 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x61, 0x69,
+ 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x71,
+ 0x75, 0x65, 0x72, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x62, 0x75,
+ 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x09, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x70,
+ 0x5f, 0x6b, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6f, 0x6e, 0x6c, 0x79, 0x50,
+ 0x4b, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10,
+ 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73,
+ 0x12, 0x38, 0x0a, 0x19, 0x6d, 0x61, 0x78, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x72, 0x6f,
+ 0x77, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x18, 0x0e, 0x20,
+ 0x01, 0x28, 0x03, 0x52, 0x15, 0x6d, 0x61, 0x78, 0x45, 0x78, 0x74, 0x72, 0x61, 0x52, 0x6f, 0x77,
+ 0x73, 0x54, 0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x77, 0x61,
+ 0x69, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x77, 0x61, 0x69, 0x74, 0x12, 0x42,
+ 0x0a, 0x14, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e,
+ 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76,
+ 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12,
+ 0x77, 0x61, 0x69, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76,
+ 0x61, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x79,
+ 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x74, 0x72,
+ 0x79, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x18, 0x12, 0x20, 0x01,
+ 0x28, 0x08, 0x52, 0x07, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x16, 0x6d,
+ 0x61, 0x78, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65,
+ 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x6d, 0x61, 0x78,
+ 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x73,
+ 0x12, 0x3c, 0x0a, 0x11, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x64, 0x75, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74,
+ 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x6d,
+ 0x61, 0x78, 0x44, 0x69, 0x66, 0x66, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c,
+ 0x0a, 0x1b, 0x72, 0x6f, 0x77, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d,
+ 0x6e, 0x5f, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x74, 0x18, 0x15, 0x20,
+ 0x01, 0x28, 0x03, 0x52, 0x17, 0x72, 0x6f, 0x77, 0x44, 0x69, 0x66, 0x66, 0x43, 0x6f, 0x6c, 0x75,
+ 0x6d, 0x6e, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x41, 0x74, 0x12, 0x22, 0x0a, 0x0a,
+ 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08,
+ 0x48, 0x00, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x88, 0x01, 0x01,
+ 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x22,
+ 0x29, 0x0a, 0x13, 0x56, 0x44, 0x69, 0x66, 0x66, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x55, 0x55, 0x49, 0x44, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x55, 0x55, 0x49, 0x44, 0x22, 0x6b, 0x0a, 0x12, 0x56, 0x44,
+ 0x69, 0x66, 0x66, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x27, 0x0a, 0x0f,
0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x6f, 0x75,
- 0x72, 0x63, 0x65, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52,
- 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x21, 0x0a, 0x0c,
- 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03,
- 0x28, 0x09, 0x52, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x12,
- 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18,
- 0x06, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x6c, 0x0a, 0x1b, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65,
- 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e,
- 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
- 0x6e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x19, 0x74, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66,
- 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73,
- 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x14,
- 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6c,
- 0x69, 0x6d, 0x69, 0x74, 0x12, 0x55, 0x0a, 0x1e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64,
- 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x61, 0x69,
- 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76,
- 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1b,
- 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x57, 0x61, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x64,
- 0x65, 0x62, 0x75, 0x67, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08,
- 0x52, 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x09,
- 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x70, 0x5f, 0x6b, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52,
- 0x07, 0x6f, 0x6e, 0x6c, 0x79, 0x50, 0x4b, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x75, 0x70, 0x64, 0x61,
- 0x74, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x0d,
- 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c,
- 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x38, 0x0a, 0x19, 0x6d, 0x61, 0x78, 0x5f, 0x65, 0x78,
- 0x74, 0x72, 0x61, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x63, 0x6f, 0x6d, 0x70,
- 0x61, 0x72, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x6d, 0x61, 0x78, 0x45, 0x78,
- 0x74, 0x72, 0x61, 0x52, 0x6f, 0x77, 0x73, 0x54, 0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65,
- 0x12, 0x12, 0x0a, 0x04, 0x77, 0x61, 0x69, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04,
- 0x77, 0x61, 0x69, 0x74, 0x12, 0x42, 0x0a, 0x14, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x75, 0x70, 0x64,
- 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x10, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x77, 0x61, 0x69, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
- 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f,
- 0x5f, 0x72, 0x65, 0x74, 0x72, 0x79, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x75,
- 0x74, 0x6f, 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x62, 0x6f,
- 0x73, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73,
- 0x65, 0x12, 0x33, 0x0a, 0x16, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f,
- 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28,
- 0x03, 0x52, 0x13, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x61, 0x6d, 0x70,
- 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x3c, 0x0a, 0x11, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x69,
- 0x66, 0x66, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x6d, 0x61, 0x78, 0x44, 0x69, 0x66, 0x66, 0x44, 0x75, 0x72, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x1b, 0x72, 0x6f, 0x77, 0x5f, 0x64, 0x69, 0x66, 0x66,
- 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65,
- 0x5f, 0x61, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x72, 0x6f, 0x77, 0x44, 0x69,
- 0x66, 0x66, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65,
- 0x41, 0x74, 0x12, 0x22, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74,
- 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x53, 0x74,
- 0x61, 0x72, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f,
- 0x73, 0x74, 0x61, 0x72, 0x74, 0x22, 0x29, 0x0a, 0x13, 0x56, 0x44, 0x69, 0x66, 0x66, 0x43, 0x72,
- 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04,
- 0x55, 0x55, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x55, 0x55, 0x49, 0x44,
- 0x22, 0x6b, 0x0a, 0x12, 0x56, 0x44, 0x69, 0x66, 0x66, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
- 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
- 0x6f, 0x77, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72,
- 0x67, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61,
- 0x72, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x72, 0x67, 0x22, 0x15, 0x0a,
- 0x13, 0x56, 0x44, 0x69, 0x66, 0x66, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x92, 0x01, 0x0a, 0x12, 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65,
- 0x73, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77,
- 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77,
- 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65,
- 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
- 0x75, 0x75, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x73,
- 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x61, 0x72,
- 0x67, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x22, 0x15, 0x0a, 0x13, 0x56, 0x44, 0x69,
- 0x66, 0x66, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x69, 0x0a, 0x10, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x71,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x72, 0x67, 0x18, 0x03, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x03, 0x61, 0x72, 0x67, 0x22, 0x15, 0x0a, 0x13, 0x56, 0x44, 0x69, 0x66, 0x66,
+ 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x92,
+ 0x01, 0x0a, 0x12, 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
+ 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
+ 0x77, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67,
+ 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75,
+ 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x23,
+ 0x0a, 0x0d, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18,
+ 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x68, 0x61,
+ 0x72, 0x64, 0x73, 0x22, 0x15, 0x0a, 0x13, 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x73, 0x75,
+ 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x69, 0x0a, 0x10, 0x56, 0x44,
+ 0x69, 0x66, 0x66, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a,
+ 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61,
+ 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x72, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x03, 0x61, 0x72, 0x67, 0x22, 0xd7, 0x01, 0x0a, 0x11, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53,
+ 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x10, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18,
+ 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x1a, 0x64, 0x0a, 0x14, 0x54, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72,
+ 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
+ 0x6b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
+ 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22,
+ 0x90, 0x01, 0x0a, 0x10, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70,
0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65,
- 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x72, 0x67,
- 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x72, 0x67, 0x22, 0xd7, 0x01, 0x0a, 0x11,
- 0x56, 0x44, 0x69, 0x66, 0x66, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x12, 0x5c, 0x0a, 0x10, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x76, 0x74,
- 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53, 0x68, 0x6f,
- 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f,
- 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x1a,
- 0x64, 0x0a, 0x14, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69,
- 0x66, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x90, 0x01, 0x0a, 0x10, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53,
- 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f,
- 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f,
- 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74,
- 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12,
- 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75,
- 0x75, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x68,
- 0x61, 0x72, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67,
- 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x22, 0x13, 0x0a, 0x11, 0x56, 0x44, 0x69, 0x66,
- 0x66, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb2, 0x01,
- 0x0a, 0x15, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12,
- 0x1b, 0x0a, 0x09, 0x6b, 0x65, 0x65, 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01,
- 0x28, 0x08, 0x52, 0x08, 0x6b, 0x65, 0x65, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x12,
- 0x6b, 0x65, 0x65, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c,
- 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6b, 0x65, 0x65, 0x70, 0x52, 0x6f,
- 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68,
- 0x61, 0x72, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72,
- 0x64, 0x73, 0x22, 0xd1, 0x01, 0x0a, 0x16, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x44,
- 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a,
- 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
- 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x46, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69,
- 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x44, 0x65, 0x6c,
- 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a,
- 0x55, 0x0a, 0x0a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2d, 0x0a,
- 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
- 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41,
- 0x6c, 0x69, 0x61, 0x73, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07,
- 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64,
- 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0x67, 0x0a, 0x15, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
- 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69,
+ 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x23, 0x0a,
+ 0x0d, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x04,
+ 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72,
+ 0x64, 0x73, 0x22, 0x13, 0x0a, 0x11, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53, 0x74, 0x6f, 0x70, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xde, 0x01, 0x0a, 0x15, 0x57, 0x6f, 0x72, 0x6b,
+ 0x66, 0x6c, 0x6f, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a,
+ 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x1b, 0x0a, 0x09, 0x6b, 0x65, 0x65,
+ 0x70, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6b, 0x65,
+ 0x65, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x12, 0x6b, 0x65, 0x65, 0x70, 0x5f, 0x72,
+ 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x08, 0x52, 0x10, 0x6b, 0x65, 0x65, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52,
+ 0x75, 0x6c, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x05,
+ 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, 0x2a, 0x0a, 0x11,
+ 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x73, 0x69, 0x7a,
+ 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42,
+ 0x61, 0x74, 0x63, 0x68, 0x53, 0x69, 0x7a, 0x65, 0x22, 0xd1, 0x01, 0x0a, 0x16, 0x57, 0x6f, 0x72,
+ 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x46, 0x0a,
+ 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c,
+ 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66,
+ 0x6c, 0x6f, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x64, 0x65,
+ 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0x55, 0x0a, 0x0a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x49,
+ 0x6e, 0x66, 0x6f, 0x12, 0x2d, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0x67, 0x0a, 0x15,
+ 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x16, 0x0a,
+ 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73,
+ 0x68, 0x61, 0x72, 0x64, 0x73, 0x22, 0xe6, 0x07, 0x0a, 0x16, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
+ 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x12, 0x5f, 0x0a, 0x10, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x73,
+ 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53,
+ 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61,
+ 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72,
+ 0x79, 0x52, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74,
+ 0x65, 0x12, 0x58, 0x0a, 0x0d, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61,
+ 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61,
+ 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72,
+ 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73,
+ 0x68, 0x61, 0x72, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x74,
+ 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x53, 0x74, 0x61, 0x74, 0x65,
+ 0x1a, 0xe8, 0x01, 0x0a, 0x0e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74,
+ 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x63, 0x6f, 0x70, 0x69,
+ 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x6f, 0x77, 0x73, 0x43, 0x6f,
+ 0x70, 0x69, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x74, 0x6f, 0x74,
+ 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x72, 0x6f, 0x77, 0x73, 0x54, 0x6f,
+ 0x74, 0x61, 0x6c, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x63,
+ 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x72, 0x6f,
+ 0x77, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x21, 0x0a, 0x0c,
+ 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x03, 0x52, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x43, 0x6f, 0x70, 0x69, 0x65, 0x64, 0x12,
+ 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x05,
+ 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c,
+ 0x12, 0x29, 0x0a, 0x10, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e,
+ 0x74, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x62, 0x79, 0x74, 0x65,
+ 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x1a, 0xbc, 0x01, 0x0a, 0x10,
+ 0x53, 0x68, 0x61, 0x72, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65,
+ 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64,
+ 0x12, 0x2d, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12,
+ 0x21, 0x0a, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18,
+ 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61,
+ 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16,
+ 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+ 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x06,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x1a, 0x5c, 0x0a, 0x0c, 0x53, 0x68,
+ 0x61, 0x72, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x4c, 0x0a, 0x07, 0x73, 0x74,
+ 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x76, 0x74,
+ 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
+ 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53,
+ 0x68, 0x61, 0x72, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52,
+ 0x07, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x1a, 0x73, 0x0a, 0x13, 0x54, 0x61, 0x62, 0x6c,
+ 0x65, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
+ 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
+ 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x30, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72,
+ 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61,
+ 0x74, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x6f, 0x0a,
+ 0x11, 0x53, 0x68, 0x61, 0x72, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74,
+ 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x03, 0x6b, 0x65, 0x79, 0x12, 0x44, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x53, 0x74, 0x72, 0x65,
+ 0x61, 0x6d, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x85,
+ 0x04, 0x0a, 0x1c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x77, 0x69, 0x74, 0x63,
+ 0x68, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x77,
0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77,
- 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64,
- 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x22,
- 0xe6, 0x07, 0x0a, 0x16, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74,
- 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x10, 0x74, 0x61,
- 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01,
- 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x70,
- 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x74, 0x61, 0x62,
- 0x6c, 0x65, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x58, 0x0a, 0x0d, 0x73,
- 0x68, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03,
- 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57,
- 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61,
- 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x64, 0x53, 0x74,
- 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63,
- 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x72,
- 0x61, 0x66, 0x66, 0x69, 0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x1a, 0xe8, 0x01, 0x0a, 0x0e, 0x54,
- 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a,
- 0x0b, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x03, 0x52, 0x0a, 0x72, 0x6f, 0x77, 0x73, 0x43, 0x6f, 0x70, 0x69, 0x65, 0x64, 0x12, 0x1d,
- 0x0a, 0x0a, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x03, 0x52, 0x09, 0x72, 0x6f, 0x77, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x27, 0x0a,
- 0x0f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65,
- 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x72, 0x6f, 0x77, 0x73, 0x50, 0x65, 0x72, 0x63,
- 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f,
- 0x63, 0x6f, 0x70, 0x69, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x62, 0x79,
- 0x74, 0x65, 0x73, 0x43, 0x6f, 0x70, 0x69, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74,
- 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a,
- 0x62, 0x79, 0x74, 0x65, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x29, 0x0a, 0x10, 0x62, 0x79,
- 0x74, 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x06,
- 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65,
- 0x6e, 0x74, 0x61, 0x67, 0x65, 0x1a, 0xbc, 0x01, 0x0a, 0x10, 0x53, 0x68, 0x61, 0x72, 0x64, 0x53,
- 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2d, 0x0a, 0x06, 0x74, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70,
- 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61,
- 0x73, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x6f, 0x75,
- 0x72, 0x63, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08,
- 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
- 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
- 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
- 0x12, 0x12, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
- 0x69, 0x6e, 0x66, 0x6f, 0x1a, 0x5c, 0x0a, 0x0c, 0x53, 0x68, 0x61, 0x72, 0x64, 0x53, 0x74, 0x72,
- 0x65, 0x61, 0x6d, 0x73, 0x12, 0x4c, 0x0a, 0x07, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18,
- 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x53, 0x74,
- 0x72, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x07, 0x73, 0x74, 0x72, 0x65, 0x61,
- 0x6d, 0x73, 0x1a, 0x73, 0x0a, 0x13, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x70, 0x79, 0x53,
- 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76,
- 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x76, 0x74, 0x63,
- 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53,
- 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61,
- 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x76, 0x61,
- 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x6f, 0x0a, 0x11, 0x53, 0x68, 0x61, 0x72, 0x64,
- 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
- 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x44,
- 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e,
- 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
- 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x52, 0x05, 0x76,
- 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x85, 0x04, 0x0a, 0x1c, 0x57, 0x6f, 0x72,
- 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x66, 0x66,
- 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
- 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
- 0x77, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09,
- 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x14, 0x2e,
- 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54,
- 0x79, 0x70, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73,
- 0x12, 0x4f, 0x0a, 0x1b, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x18,
- 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44,
- 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x18, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x70, 0x6c,
- 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65,
- 0x64, 0x12, 0x3c, 0x0a, 0x1a, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x65,
- 0x72, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
- 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x76,
- 0x65, 0x72, 0x73, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
- 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01,
- 0x28, 0x05, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a,
- 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10,
- 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, 0x79,
- 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x72, 0x79, 0x52,
- 0x75, 0x6e, 0x12, 0x3e, 0x0a, 0x1b, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65,
- 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65,
- 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c,
- 0x69, 0x7a, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63,
- 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x03,
- 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f,
- 0x72, 0x63, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65,
- 0x22, 0xa7, 0x01, 0x0a, 0x1d, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x77, 0x69,
- 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x0b,
- 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a,
- 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61,
- 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x72, 0x65,
- 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x72, 0x79,
- 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x90, 0x01, 0x0a, 0x15, 0x57,
- 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x12, 0x5b, 0x0a, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64,
- 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57,
- 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0d,
- 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xd1, 0x01,
- 0x0a, 0x16, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+ 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73,
+ 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x37, 0x0a,
+ 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20,
+ 0x03, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x4f, 0x0a, 0x1b, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65,
+ 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67, 0x5f, 0x61, 0x6c,
+ 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74,
+ 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x18, 0x6d,
+ 0x61, 0x78, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67,
+ 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x12, 0x3c, 0x0a, 0x1a, 0x65, 0x6e, 0x61, 0x62, 0x6c,
+ 0x65, 0x5f, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x65, 0x6e, 0x61,
+ 0x62, 0x6c, 0x65, 0x52, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x08,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x44, 0x75,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12,
+ 0x17, 0x0a, 0x07, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08,
+ 0x52, 0x06, 0x64, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x12, 0x3e, 0x0a, 0x1b, 0x69, 0x6e, 0x69, 0x74,
+ 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x65,
+ 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x69,
+ 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53,
+ 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72,
+ 0x64, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73,
+ 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52,
+ 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0xa7, 0x01, 0x0a, 0x1d, 0x57, 0x6f, 0x72, 0x6b, 0x66,
+ 0x6c, 0x6f, 0x77, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d,
0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61,
- 0x72, 0x79, 0x12, 0x46, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20,
- 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x49, 0x6e, 0x66,
- 0x6f, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x1a, 0x55, 0x0a, 0x0a, 0x54, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2d, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52,
- 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67,
- 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65,
- 0x64, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x75,
- 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x51, 0x0a, 0x16, 0x47, 0x65,
- 0x74, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0c, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x72,
- 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x76, 0x73, 0x63,
- 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x75, 0x6c, 0x65, 0x73,
- 0x52, 0x0b, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x22, 0xa9, 0x01,
- 0x0a, 0x1c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72,
- 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a,
- 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f,
- 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f,
- 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74,
- 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79,
- 0x70, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12,
- 0x18, 0x0a, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02,
- 0x52, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x22, 0x7f, 0x0a, 0x1d, 0x57, 0x6f, 0x72,
- 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x72, 0x61, 0x66, 0x66,
- 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75,
- 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d,
- 0x6d, 0x61, 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x73, 0x74,
- 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74,
- 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74,
- 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75,
- 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2a, 0x4a, 0x0a, 0x15, 0x4d, 0x61,
- 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x74,
- 0x65, 0x6e, 0x74, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x10, 0x00, 0x12,
- 0x0e, 0x0a, 0x0a, 0x4d, 0x4f, 0x56, 0x45, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x53, 0x10, 0x01, 0x12,
- 0x15, 0x0a, 0x11, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x49,
- 0x4e, 0x44, 0x45, 0x58, 0x10, 0x02, 0x2a, 0x38, 0x0a, 0x0d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f,
- 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10,
- 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x53, 0x43, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01,
- 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x45, 0x53, 0x43, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02,
- 0x42, 0x28, 0x5a, 0x26, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69,
- 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x2f, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x33,
+ 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74,
+ 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x74,
+ 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73,
+ 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72,
+ 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x72, 0x79, 0x5f,
+ 0x72, 0x75, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28,
+ 0x09, 0x52, 0x0d, 0x64, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
+ 0x22, 0x90, 0x01, 0x0a, 0x15, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x64,
+ 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65,
+ 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65,
+ 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34,
+ 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x52, 0x0d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x22, 0xd1, 0x01, 0x0a, 0x16, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
+ 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18,
+ 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x46, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61,
+ 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x76, 0x74, 0x63, 0x74,
+ 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x55, 0x70,
+ 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73,
+ 0x1a, 0x55, 0x0a, 0x0a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2d,
+ 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15,
+ 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x18, 0x0a,
+ 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07,
+ 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x4d, 0x69,
+ 0x72, 0x72, 0x6f, 0x72, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x22, 0x51, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x75, 0x6c,
+ 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0c, 0x6d, 0x69,
+ 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x14, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x69, 0x72, 0x72, 0x6f,
+ 0x72, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x0b, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x75,
+ 0x6c, 0x65, 0x73, 0x22, 0xa9, 0x01, 0x0a, 0x1c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
+ 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x37, 0x0a, 0x0c,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03,
+ 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74,
+ 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x22,
+ 0x7f, 0x0a, 0x1d, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x72, 0x72, 0x6f,
+ 0x72, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74,
+ 0x61, 0x72, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63,
+ 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65,
+ 0x2a, 0x4a, 0x0a, 0x15, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x55, 0x53,
+ 0x54, 0x4f, 0x4d, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4d, 0x4f, 0x56, 0x45, 0x54, 0x41, 0x42,
+ 0x4c, 0x45, 0x53, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x4c,
+ 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x10, 0x02, 0x2a, 0x38, 0x0a, 0x0d,
+ 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x08, 0x0a,
+ 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x53, 0x43, 0x45, 0x4e,
+ 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x45, 0x53, 0x43, 0x45, 0x4e,
+ 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x2a, 0x42, 0x0a, 0x1c, 0x53, 0x68, 0x61, 0x72, 0x64, 0x65,
+ 0x64, 0x41, 0x75, 0x74, 0x6f, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x61,
+ 0x6e, 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x09, 0x0a, 0x05, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10,
+ 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a,
+ 0x07, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x10, 0x02, 0x42, 0x28, 0x5a, 0x26, 0x76, 0x69,
+ 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67,
+ 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x74, 0x63, 0x74, 0x6c,
+ 0x64, 0x61, 0x74, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -19417,585 +19399,603 @@ func file_vtctldata_proto_rawDescGZIP() []byte {
return file_vtctldata_proto_rawDescData
}
-var file_vtctldata_proto_enumTypes = make([]protoimpl.EnumInfo, 4)
-var file_vtctldata_proto_msgTypes = make([]protoimpl.MessageInfo, 293)
+var file_vtctldata_proto_enumTypes = make([]protoimpl.EnumInfo, 5)
+var file_vtctldata_proto_msgTypes = make([]protoimpl.MessageInfo, 301)
var file_vtctldata_proto_goTypes = []any{
(MaterializationIntent)(0), // 0: vtctldata.MaterializationIntent
(QueryOrdering)(0), // 1: vtctldata.QueryOrdering
- (SchemaMigration_Strategy)(0), // 2: vtctldata.SchemaMigration.Strategy
- (SchemaMigration_Status)(0), // 3: vtctldata.SchemaMigration.Status
- (*ExecuteVtctlCommandRequest)(nil), // 4: vtctldata.ExecuteVtctlCommandRequest
- (*ExecuteVtctlCommandResponse)(nil), // 5: vtctldata.ExecuteVtctlCommandResponse
- (*TableMaterializeSettings)(nil), // 6: vtctldata.TableMaterializeSettings
- (*MaterializeSettings)(nil), // 7: vtctldata.MaterializeSettings
- (*Keyspace)(nil), // 8: vtctldata.Keyspace
- (*SchemaMigration)(nil), // 9: vtctldata.SchemaMigration
- (*Shard)(nil), // 10: vtctldata.Shard
- (*WorkflowOptions)(nil), // 11: vtctldata.WorkflowOptions
- (*Workflow)(nil), // 12: vtctldata.Workflow
- (*AddCellInfoRequest)(nil), // 13: vtctldata.AddCellInfoRequest
- (*AddCellInfoResponse)(nil), // 14: vtctldata.AddCellInfoResponse
- (*AddCellsAliasRequest)(nil), // 15: vtctldata.AddCellsAliasRequest
- (*AddCellsAliasResponse)(nil), // 16: vtctldata.AddCellsAliasResponse
- (*ApplyKeyspaceRoutingRulesRequest)(nil), // 17: vtctldata.ApplyKeyspaceRoutingRulesRequest
- (*ApplyKeyspaceRoutingRulesResponse)(nil), // 18: vtctldata.ApplyKeyspaceRoutingRulesResponse
- (*ApplyRoutingRulesRequest)(nil), // 19: vtctldata.ApplyRoutingRulesRequest
- (*ApplyRoutingRulesResponse)(nil), // 20: vtctldata.ApplyRoutingRulesResponse
- (*ApplyShardRoutingRulesRequest)(nil), // 21: vtctldata.ApplyShardRoutingRulesRequest
- (*ApplyShardRoutingRulesResponse)(nil), // 22: vtctldata.ApplyShardRoutingRulesResponse
- (*ApplySchemaRequest)(nil), // 23: vtctldata.ApplySchemaRequest
- (*ApplySchemaResponse)(nil), // 24: vtctldata.ApplySchemaResponse
- (*ApplyVSchemaRequest)(nil), // 25: vtctldata.ApplyVSchemaRequest
- (*ApplyVSchemaResponse)(nil), // 26: vtctldata.ApplyVSchemaResponse
- (*BackupRequest)(nil), // 27: vtctldata.BackupRequest
- (*BackupResponse)(nil), // 28: vtctldata.BackupResponse
- (*BackupShardRequest)(nil), // 29: vtctldata.BackupShardRequest
- (*CancelSchemaMigrationRequest)(nil), // 30: vtctldata.CancelSchemaMigrationRequest
- (*CancelSchemaMigrationResponse)(nil), // 31: vtctldata.CancelSchemaMigrationResponse
- (*ChangeTabletTypeRequest)(nil), // 32: vtctldata.ChangeTabletTypeRequest
- (*ChangeTabletTypeResponse)(nil), // 33: vtctldata.ChangeTabletTypeResponse
- (*CheckThrottlerRequest)(nil), // 34: vtctldata.CheckThrottlerRequest
- (*CheckThrottlerResponse)(nil), // 35: vtctldata.CheckThrottlerResponse
- (*CleanupSchemaMigrationRequest)(nil), // 36: vtctldata.CleanupSchemaMigrationRequest
- (*CleanupSchemaMigrationResponse)(nil), // 37: vtctldata.CleanupSchemaMigrationResponse
- (*CompleteSchemaMigrationRequest)(nil), // 38: vtctldata.CompleteSchemaMigrationRequest
- (*CompleteSchemaMigrationResponse)(nil), // 39: vtctldata.CompleteSchemaMigrationResponse
- (*CreateKeyspaceRequest)(nil), // 40: vtctldata.CreateKeyspaceRequest
- (*CreateKeyspaceResponse)(nil), // 41: vtctldata.CreateKeyspaceResponse
- (*CreateShardRequest)(nil), // 42: vtctldata.CreateShardRequest
- (*CreateShardResponse)(nil), // 43: vtctldata.CreateShardResponse
- (*DeleteCellInfoRequest)(nil), // 44: vtctldata.DeleteCellInfoRequest
- (*DeleteCellInfoResponse)(nil), // 45: vtctldata.DeleteCellInfoResponse
- (*DeleteCellsAliasRequest)(nil), // 46: vtctldata.DeleteCellsAliasRequest
- (*DeleteCellsAliasResponse)(nil), // 47: vtctldata.DeleteCellsAliasResponse
- (*DeleteKeyspaceRequest)(nil), // 48: vtctldata.DeleteKeyspaceRequest
- (*DeleteKeyspaceResponse)(nil), // 49: vtctldata.DeleteKeyspaceResponse
- (*DeleteShardsRequest)(nil), // 50: vtctldata.DeleteShardsRequest
- (*DeleteShardsResponse)(nil), // 51: vtctldata.DeleteShardsResponse
- (*DeleteSrvVSchemaRequest)(nil), // 52: vtctldata.DeleteSrvVSchemaRequest
- (*DeleteSrvVSchemaResponse)(nil), // 53: vtctldata.DeleteSrvVSchemaResponse
- (*DeleteTabletsRequest)(nil), // 54: vtctldata.DeleteTabletsRequest
- (*DeleteTabletsResponse)(nil), // 55: vtctldata.DeleteTabletsResponse
- (*EmergencyReparentShardRequest)(nil), // 56: vtctldata.EmergencyReparentShardRequest
- (*EmergencyReparentShardResponse)(nil), // 57: vtctldata.EmergencyReparentShardResponse
- (*ExecuteFetchAsAppRequest)(nil), // 58: vtctldata.ExecuteFetchAsAppRequest
- (*ExecuteFetchAsAppResponse)(nil), // 59: vtctldata.ExecuteFetchAsAppResponse
- (*ExecuteFetchAsDBARequest)(nil), // 60: vtctldata.ExecuteFetchAsDBARequest
- (*ExecuteFetchAsDBAResponse)(nil), // 61: vtctldata.ExecuteFetchAsDBAResponse
- (*ExecuteHookRequest)(nil), // 62: vtctldata.ExecuteHookRequest
- (*ExecuteHookResponse)(nil), // 63: vtctldata.ExecuteHookResponse
- (*ExecuteMultiFetchAsDBARequest)(nil), // 64: vtctldata.ExecuteMultiFetchAsDBARequest
- (*ExecuteMultiFetchAsDBAResponse)(nil), // 65: vtctldata.ExecuteMultiFetchAsDBAResponse
- (*FindAllShardsInKeyspaceRequest)(nil), // 66: vtctldata.FindAllShardsInKeyspaceRequest
- (*FindAllShardsInKeyspaceResponse)(nil), // 67: vtctldata.FindAllShardsInKeyspaceResponse
- (*ForceCutOverSchemaMigrationRequest)(nil), // 68: vtctldata.ForceCutOverSchemaMigrationRequest
- (*ForceCutOverSchemaMigrationResponse)(nil), // 69: vtctldata.ForceCutOverSchemaMigrationResponse
- (*GetBackupsRequest)(nil), // 70: vtctldata.GetBackupsRequest
- (*GetBackupsResponse)(nil), // 71: vtctldata.GetBackupsResponse
- (*GetCellInfoRequest)(nil), // 72: vtctldata.GetCellInfoRequest
- (*GetCellInfoResponse)(nil), // 73: vtctldata.GetCellInfoResponse
- (*GetCellInfoNamesRequest)(nil), // 74: vtctldata.GetCellInfoNamesRequest
- (*GetCellInfoNamesResponse)(nil), // 75: vtctldata.GetCellInfoNamesResponse
- (*GetCellsAliasesRequest)(nil), // 76: vtctldata.GetCellsAliasesRequest
- (*GetCellsAliasesResponse)(nil), // 77: vtctldata.GetCellsAliasesResponse
- (*GetFullStatusRequest)(nil), // 78: vtctldata.GetFullStatusRequest
- (*GetFullStatusResponse)(nil), // 79: vtctldata.GetFullStatusResponse
- (*GetKeyspacesRequest)(nil), // 80: vtctldata.GetKeyspacesRequest
- (*GetKeyspacesResponse)(nil), // 81: vtctldata.GetKeyspacesResponse
- (*GetKeyspaceRequest)(nil), // 82: vtctldata.GetKeyspaceRequest
- (*GetKeyspaceResponse)(nil), // 83: vtctldata.GetKeyspaceResponse
- (*GetPermissionsRequest)(nil), // 84: vtctldata.GetPermissionsRequest
- (*GetPermissionsResponse)(nil), // 85: vtctldata.GetPermissionsResponse
- (*GetKeyspaceRoutingRulesRequest)(nil), // 86: vtctldata.GetKeyspaceRoutingRulesRequest
- (*GetKeyspaceRoutingRulesResponse)(nil), // 87: vtctldata.GetKeyspaceRoutingRulesResponse
- (*GetRoutingRulesRequest)(nil), // 88: vtctldata.GetRoutingRulesRequest
- (*GetRoutingRulesResponse)(nil), // 89: vtctldata.GetRoutingRulesResponse
- (*GetSchemaRequest)(nil), // 90: vtctldata.GetSchemaRequest
- (*GetSchemaResponse)(nil), // 91: vtctldata.GetSchemaResponse
- (*GetSchemaMigrationsRequest)(nil), // 92: vtctldata.GetSchemaMigrationsRequest
- (*GetSchemaMigrationsResponse)(nil), // 93: vtctldata.GetSchemaMigrationsResponse
- (*GetShardReplicationRequest)(nil), // 94: vtctldata.GetShardReplicationRequest
- (*GetShardReplicationResponse)(nil), // 95: vtctldata.GetShardReplicationResponse
- (*GetShardRequest)(nil), // 96: vtctldata.GetShardRequest
- (*GetShardResponse)(nil), // 97: vtctldata.GetShardResponse
- (*GetShardRoutingRulesRequest)(nil), // 98: vtctldata.GetShardRoutingRulesRequest
- (*GetShardRoutingRulesResponse)(nil), // 99: vtctldata.GetShardRoutingRulesResponse
- (*GetSrvKeyspaceNamesRequest)(nil), // 100: vtctldata.GetSrvKeyspaceNamesRequest
- (*GetSrvKeyspaceNamesResponse)(nil), // 101: vtctldata.GetSrvKeyspaceNamesResponse
- (*GetSrvKeyspacesRequest)(nil), // 102: vtctldata.GetSrvKeyspacesRequest
- (*GetSrvKeyspacesResponse)(nil), // 103: vtctldata.GetSrvKeyspacesResponse
- (*UpdateThrottlerConfigRequest)(nil), // 104: vtctldata.UpdateThrottlerConfigRequest
- (*UpdateThrottlerConfigResponse)(nil), // 105: vtctldata.UpdateThrottlerConfigResponse
- (*GetSrvVSchemaRequest)(nil), // 106: vtctldata.GetSrvVSchemaRequest
- (*GetSrvVSchemaResponse)(nil), // 107: vtctldata.GetSrvVSchemaResponse
- (*GetSrvVSchemasRequest)(nil), // 108: vtctldata.GetSrvVSchemasRequest
- (*GetSrvVSchemasResponse)(nil), // 109: vtctldata.GetSrvVSchemasResponse
- (*GetTabletRequest)(nil), // 110: vtctldata.GetTabletRequest
- (*GetTabletResponse)(nil), // 111: vtctldata.GetTabletResponse
- (*GetTabletsRequest)(nil), // 112: vtctldata.GetTabletsRequest
- (*GetTabletsResponse)(nil), // 113: vtctldata.GetTabletsResponse
- (*GetThrottlerStatusRequest)(nil), // 114: vtctldata.GetThrottlerStatusRequest
- (*GetThrottlerStatusResponse)(nil), // 115: vtctldata.GetThrottlerStatusResponse
- (*GetTopologyPathRequest)(nil), // 116: vtctldata.GetTopologyPathRequest
- (*GetTopologyPathResponse)(nil), // 117: vtctldata.GetTopologyPathResponse
- (*TopologyCell)(nil), // 118: vtctldata.TopologyCell
- (*GetUnresolvedTransactionsRequest)(nil), // 119: vtctldata.GetUnresolvedTransactionsRequest
- (*GetUnresolvedTransactionsResponse)(nil), // 120: vtctldata.GetUnresolvedTransactionsResponse
- (*ConcludeTransactionRequest)(nil), // 121: vtctldata.ConcludeTransactionRequest
- (*ConcludeTransactionResponse)(nil), // 122: vtctldata.ConcludeTransactionResponse
- (*GetVSchemaRequest)(nil), // 123: vtctldata.GetVSchemaRequest
- (*GetVersionRequest)(nil), // 124: vtctldata.GetVersionRequest
- (*GetVersionResponse)(nil), // 125: vtctldata.GetVersionResponse
- (*GetVSchemaResponse)(nil), // 126: vtctldata.GetVSchemaResponse
- (*GetWorkflowsRequest)(nil), // 127: vtctldata.GetWorkflowsRequest
- (*GetWorkflowsResponse)(nil), // 128: vtctldata.GetWorkflowsResponse
- (*InitShardPrimaryRequest)(nil), // 129: vtctldata.InitShardPrimaryRequest
- (*InitShardPrimaryResponse)(nil), // 130: vtctldata.InitShardPrimaryResponse
- (*LaunchSchemaMigrationRequest)(nil), // 131: vtctldata.LaunchSchemaMigrationRequest
- (*LaunchSchemaMigrationResponse)(nil), // 132: vtctldata.LaunchSchemaMigrationResponse
- (*LookupVindexCreateRequest)(nil), // 133: vtctldata.LookupVindexCreateRequest
- (*LookupVindexCreateResponse)(nil), // 134: vtctldata.LookupVindexCreateResponse
- (*LookupVindexExternalizeRequest)(nil), // 135: vtctldata.LookupVindexExternalizeRequest
- (*LookupVindexExternalizeResponse)(nil), // 136: vtctldata.LookupVindexExternalizeResponse
- (*MaterializeCreateRequest)(nil), // 137: vtctldata.MaterializeCreateRequest
- (*MaterializeCreateResponse)(nil), // 138: vtctldata.MaterializeCreateResponse
- (*MigrateCreateRequest)(nil), // 139: vtctldata.MigrateCreateRequest
- (*MigrateCompleteRequest)(nil), // 140: vtctldata.MigrateCompleteRequest
- (*MigrateCompleteResponse)(nil), // 141: vtctldata.MigrateCompleteResponse
- (*MountRegisterRequest)(nil), // 142: vtctldata.MountRegisterRequest
- (*MountRegisterResponse)(nil), // 143: vtctldata.MountRegisterResponse
- (*MountUnregisterRequest)(nil), // 144: vtctldata.MountUnregisterRequest
- (*MountUnregisterResponse)(nil), // 145: vtctldata.MountUnregisterResponse
- (*MountShowRequest)(nil), // 146: vtctldata.MountShowRequest
- (*MountShowResponse)(nil), // 147: vtctldata.MountShowResponse
- (*MountListRequest)(nil), // 148: vtctldata.MountListRequest
- (*MountListResponse)(nil), // 149: vtctldata.MountListResponse
- (*MoveTablesCreateRequest)(nil), // 150: vtctldata.MoveTablesCreateRequest
- (*MoveTablesCreateResponse)(nil), // 151: vtctldata.MoveTablesCreateResponse
- (*MoveTablesCompleteRequest)(nil), // 152: vtctldata.MoveTablesCompleteRequest
- (*MoveTablesCompleteResponse)(nil), // 153: vtctldata.MoveTablesCompleteResponse
- (*PingTabletRequest)(nil), // 154: vtctldata.PingTabletRequest
- (*PingTabletResponse)(nil), // 155: vtctldata.PingTabletResponse
- (*PlannedReparentShardRequest)(nil), // 156: vtctldata.PlannedReparentShardRequest
- (*PlannedReparentShardResponse)(nil), // 157: vtctldata.PlannedReparentShardResponse
- (*RebuildKeyspaceGraphRequest)(nil), // 158: vtctldata.RebuildKeyspaceGraphRequest
- (*RebuildKeyspaceGraphResponse)(nil), // 159: vtctldata.RebuildKeyspaceGraphResponse
- (*RebuildVSchemaGraphRequest)(nil), // 160: vtctldata.RebuildVSchemaGraphRequest
- (*RebuildVSchemaGraphResponse)(nil), // 161: vtctldata.RebuildVSchemaGraphResponse
- (*RefreshStateRequest)(nil), // 162: vtctldata.RefreshStateRequest
- (*RefreshStateResponse)(nil), // 163: vtctldata.RefreshStateResponse
- (*RefreshStateByShardRequest)(nil), // 164: vtctldata.RefreshStateByShardRequest
- (*RefreshStateByShardResponse)(nil), // 165: vtctldata.RefreshStateByShardResponse
- (*ReloadSchemaRequest)(nil), // 166: vtctldata.ReloadSchemaRequest
- (*ReloadSchemaResponse)(nil), // 167: vtctldata.ReloadSchemaResponse
- (*ReloadSchemaKeyspaceRequest)(nil), // 168: vtctldata.ReloadSchemaKeyspaceRequest
- (*ReloadSchemaKeyspaceResponse)(nil), // 169: vtctldata.ReloadSchemaKeyspaceResponse
- (*ReloadSchemaShardRequest)(nil), // 170: vtctldata.ReloadSchemaShardRequest
- (*ReloadSchemaShardResponse)(nil), // 171: vtctldata.ReloadSchemaShardResponse
- (*RemoveBackupRequest)(nil), // 172: vtctldata.RemoveBackupRequest
- (*RemoveBackupResponse)(nil), // 173: vtctldata.RemoveBackupResponse
- (*RemoveKeyspaceCellRequest)(nil), // 174: vtctldata.RemoveKeyspaceCellRequest
- (*RemoveKeyspaceCellResponse)(nil), // 175: vtctldata.RemoveKeyspaceCellResponse
- (*RemoveShardCellRequest)(nil), // 176: vtctldata.RemoveShardCellRequest
- (*RemoveShardCellResponse)(nil), // 177: vtctldata.RemoveShardCellResponse
- (*ReparentTabletRequest)(nil), // 178: vtctldata.ReparentTabletRequest
- (*ReparentTabletResponse)(nil), // 179: vtctldata.ReparentTabletResponse
- (*ReshardCreateRequest)(nil), // 180: vtctldata.ReshardCreateRequest
- (*RestoreFromBackupRequest)(nil), // 181: vtctldata.RestoreFromBackupRequest
- (*RestoreFromBackupResponse)(nil), // 182: vtctldata.RestoreFromBackupResponse
- (*RetrySchemaMigrationRequest)(nil), // 183: vtctldata.RetrySchemaMigrationRequest
- (*RetrySchemaMigrationResponse)(nil), // 184: vtctldata.RetrySchemaMigrationResponse
- (*RunHealthCheckRequest)(nil), // 185: vtctldata.RunHealthCheckRequest
- (*RunHealthCheckResponse)(nil), // 186: vtctldata.RunHealthCheckResponse
- (*SetKeyspaceDurabilityPolicyRequest)(nil), // 187: vtctldata.SetKeyspaceDurabilityPolicyRequest
- (*SetKeyspaceDurabilityPolicyResponse)(nil), // 188: vtctldata.SetKeyspaceDurabilityPolicyResponse
- (*SetKeyspaceShardingInfoRequest)(nil), // 189: vtctldata.SetKeyspaceShardingInfoRequest
- (*SetKeyspaceShardingInfoResponse)(nil), // 190: vtctldata.SetKeyspaceShardingInfoResponse
- (*SetShardIsPrimaryServingRequest)(nil), // 191: vtctldata.SetShardIsPrimaryServingRequest
- (*SetShardIsPrimaryServingResponse)(nil), // 192: vtctldata.SetShardIsPrimaryServingResponse
- (*SetShardTabletControlRequest)(nil), // 193: vtctldata.SetShardTabletControlRequest
- (*SetShardTabletControlResponse)(nil), // 194: vtctldata.SetShardTabletControlResponse
- (*SetWritableRequest)(nil), // 195: vtctldata.SetWritableRequest
- (*SetWritableResponse)(nil), // 196: vtctldata.SetWritableResponse
- (*ShardReplicationAddRequest)(nil), // 197: vtctldata.ShardReplicationAddRequest
- (*ShardReplicationAddResponse)(nil), // 198: vtctldata.ShardReplicationAddResponse
- (*ShardReplicationFixRequest)(nil), // 199: vtctldata.ShardReplicationFixRequest
- (*ShardReplicationFixResponse)(nil), // 200: vtctldata.ShardReplicationFixResponse
- (*ShardReplicationPositionsRequest)(nil), // 201: vtctldata.ShardReplicationPositionsRequest
- (*ShardReplicationPositionsResponse)(nil), // 202: vtctldata.ShardReplicationPositionsResponse
- (*ShardReplicationRemoveRequest)(nil), // 203: vtctldata.ShardReplicationRemoveRequest
- (*ShardReplicationRemoveResponse)(nil), // 204: vtctldata.ShardReplicationRemoveResponse
- (*SleepTabletRequest)(nil), // 205: vtctldata.SleepTabletRequest
- (*SleepTabletResponse)(nil), // 206: vtctldata.SleepTabletResponse
- (*SourceShardAddRequest)(nil), // 207: vtctldata.SourceShardAddRequest
- (*SourceShardAddResponse)(nil), // 208: vtctldata.SourceShardAddResponse
- (*SourceShardDeleteRequest)(nil), // 209: vtctldata.SourceShardDeleteRequest
- (*SourceShardDeleteResponse)(nil), // 210: vtctldata.SourceShardDeleteResponse
- (*StartReplicationRequest)(nil), // 211: vtctldata.StartReplicationRequest
- (*StartReplicationResponse)(nil), // 212: vtctldata.StartReplicationResponse
- (*StopReplicationRequest)(nil), // 213: vtctldata.StopReplicationRequest
- (*StopReplicationResponse)(nil), // 214: vtctldata.StopReplicationResponse
- (*TabletExternallyReparentedRequest)(nil), // 215: vtctldata.TabletExternallyReparentedRequest
- (*TabletExternallyReparentedResponse)(nil), // 216: vtctldata.TabletExternallyReparentedResponse
- (*UpdateCellInfoRequest)(nil), // 217: vtctldata.UpdateCellInfoRequest
- (*UpdateCellInfoResponse)(nil), // 218: vtctldata.UpdateCellInfoResponse
- (*UpdateCellsAliasRequest)(nil), // 219: vtctldata.UpdateCellsAliasRequest
- (*UpdateCellsAliasResponse)(nil), // 220: vtctldata.UpdateCellsAliasResponse
- (*ValidateRequest)(nil), // 221: vtctldata.ValidateRequest
- (*ValidateResponse)(nil), // 222: vtctldata.ValidateResponse
- (*ValidateKeyspaceRequest)(nil), // 223: vtctldata.ValidateKeyspaceRequest
- (*ValidateKeyspaceResponse)(nil), // 224: vtctldata.ValidateKeyspaceResponse
- (*ValidateSchemaKeyspaceRequest)(nil), // 225: vtctldata.ValidateSchemaKeyspaceRequest
- (*ValidateSchemaKeyspaceResponse)(nil), // 226: vtctldata.ValidateSchemaKeyspaceResponse
- (*ValidateShardRequest)(nil), // 227: vtctldata.ValidateShardRequest
- (*ValidateShardResponse)(nil), // 228: vtctldata.ValidateShardResponse
- (*ValidateVersionKeyspaceRequest)(nil), // 229: vtctldata.ValidateVersionKeyspaceRequest
- (*ValidateVersionKeyspaceResponse)(nil), // 230: vtctldata.ValidateVersionKeyspaceResponse
- (*ValidateVersionShardRequest)(nil), // 231: vtctldata.ValidateVersionShardRequest
- (*ValidateVersionShardResponse)(nil), // 232: vtctldata.ValidateVersionShardResponse
- (*ValidateVSchemaRequest)(nil), // 233: vtctldata.ValidateVSchemaRequest
- (*ValidateVSchemaResponse)(nil), // 234: vtctldata.ValidateVSchemaResponse
- (*VDiffCreateRequest)(nil), // 235: vtctldata.VDiffCreateRequest
- (*VDiffCreateResponse)(nil), // 236: vtctldata.VDiffCreateResponse
- (*VDiffDeleteRequest)(nil), // 237: vtctldata.VDiffDeleteRequest
- (*VDiffDeleteResponse)(nil), // 238: vtctldata.VDiffDeleteResponse
- (*VDiffResumeRequest)(nil), // 239: vtctldata.VDiffResumeRequest
- (*VDiffResumeResponse)(nil), // 240: vtctldata.VDiffResumeResponse
- (*VDiffShowRequest)(nil), // 241: vtctldata.VDiffShowRequest
- (*VDiffShowResponse)(nil), // 242: vtctldata.VDiffShowResponse
- (*VDiffStopRequest)(nil), // 243: vtctldata.VDiffStopRequest
- (*VDiffStopResponse)(nil), // 244: vtctldata.VDiffStopResponse
- (*WorkflowDeleteRequest)(nil), // 245: vtctldata.WorkflowDeleteRequest
- (*WorkflowDeleteResponse)(nil), // 246: vtctldata.WorkflowDeleteResponse
- (*WorkflowStatusRequest)(nil), // 247: vtctldata.WorkflowStatusRequest
- (*WorkflowStatusResponse)(nil), // 248: vtctldata.WorkflowStatusResponse
- (*WorkflowSwitchTrafficRequest)(nil), // 249: vtctldata.WorkflowSwitchTrafficRequest
- (*WorkflowSwitchTrafficResponse)(nil), // 250: vtctldata.WorkflowSwitchTrafficResponse
- (*WorkflowUpdateRequest)(nil), // 251: vtctldata.WorkflowUpdateRequest
- (*WorkflowUpdateResponse)(nil), // 252: vtctldata.WorkflowUpdateResponse
- (*GetMirrorRulesRequest)(nil), // 253: vtctldata.GetMirrorRulesRequest
- (*GetMirrorRulesResponse)(nil), // 254: vtctldata.GetMirrorRulesResponse
- (*WorkflowMirrorTrafficRequest)(nil), // 255: vtctldata.WorkflowMirrorTrafficRequest
- (*WorkflowMirrorTrafficResponse)(nil), // 256: vtctldata.WorkflowMirrorTrafficResponse
- nil, // 257: vtctldata.WorkflowOptions.ConfigEntry
- nil, // 258: vtctldata.Workflow.ShardStreamsEntry
- (*Workflow_ReplicationLocation)(nil), // 259: vtctldata.Workflow.ReplicationLocation
- (*Workflow_ShardStream)(nil), // 260: vtctldata.Workflow.ShardStream
- (*Workflow_Stream)(nil), // 261: vtctldata.Workflow.Stream
- (*Workflow_Stream_CopyState)(nil), // 262: vtctldata.Workflow.Stream.CopyState
- (*Workflow_Stream_Log)(nil), // 263: vtctldata.Workflow.Stream.Log
- (*Workflow_Stream_ThrottlerStatus)(nil), // 264: vtctldata.Workflow.Stream.ThrottlerStatus
- nil, // 265: vtctldata.ApplySchemaResponse.RowsAffectedByShardEntry
- nil, // 266: vtctldata.ApplyVSchemaResponse.UnknownVindexParamsEntry
- (*ApplyVSchemaResponse_ParamList)(nil), // 267: vtctldata.ApplyVSchemaResponse.ParamList
- nil, // 268: vtctldata.CancelSchemaMigrationResponse.RowsAffectedByShardEntry
- nil, // 269: vtctldata.CleanupSchemaMigrationResponse.RowsAffectedByShardEntry
- nil, // 270: vtctldata.CompleteSchemaMigrationResponse.RowsAffectedByShardEntry
- nil, // 271: vtctldata.FindAllShardsInKeyspaceResponse.ShardsEntry
- nil, // 272: vtctldata.ForceCutOverSchemaMigrationResponse.RowsAffectedByShardEntry
- nil, // 273: vtctldata.GetCellsAliasesResponse.AliasesEntry
- nil, // 274: vtctldata.GetShardReplicationResponse.ShardReplicationByCellEntry
- nil, // 275: vtctldata.GetSrvKeyspaceNamesResponse.NamesEntry
- (*GetSrvKeyspaceNamesResponse_NameList)(nil), // 276: vtctldata.GetSrvKeyspaceNamesResponse.NameList
- nil, // 277: vtctldata.GetSrvKeyspacesResponse.SrvKeyspacesEntry
- nil, // 278: vtctldata.GetSrvVSchemasResponse.SrvVSchemasEntry
- nil, // 279: vtctldata.LaunchSchemaMigrationResponse.RowsAffectedByShardEntry
- (*MoveTablesCreateResponse_TabletInfo)(nil), // 280: vtctldata.MoveTablesCreateResponse.TabletInfo
- nil, // 281: vtctldata.RetrySchemaMigrationResponse.RowsAffectedByShardEntry
- nil, // 282: vtctldata.ShardReplicationPositionsResponse.ReplicationStatusesEntry
- nil, // 283: vtctldata.ShardReplicationPositionsResponse.TabletMapEntry
- nil, // 284: vtctldata.ValidateResponse.ResultsByKeyspaceEntry
- nil, // 285: vtctldata.ValidateKeyspaceResponse.ResultsByShardEntry
- nil, // 286: vtctldata.ValidateSchemaKeyspaceResponse.ResultsByShardEntry
- nil, // 287: vtctldata.ValidateVersionKeyspaceResponse.ResultsByShardEntry
- nil, // 288: vtctldata.ValidateVSchemaResponse.ResultsByShardEntry
- nil, // 289: vtctldata.VDiffShowResponse.TabletResponsesEntry
- (*WorkflowDeleteResponse_TabletInfo)(nil), // 290: vtctldata.WorkflowDeleteResponse.TabletInfo
- (*WorkflowStatusResponse_TableCopyState)(nil), // 291: vtctldata.WorkflowStatusResponse.TableCopyState
- (*WorkflowStatusResponse_ShardStreamState)(nil), // 292: vtctldata.WorkflowStatusResponse.ShardStreamState
- (*WorkflowStatusResponse_ShardStreams)(nil), // 293: vtctldata.WorkflowStatusResponse.ShardStreams
- nil, // 294: vtctldata.WorkflowStatusResponse.TableCopyStateEntry
- nil, // 295: vtctldata.WorkflowStatusResponse.ShardStreamsEntry
- (*WorkflowUpdateResponse_TabletInfo)(nil), // 296: vtctldata.WorkflowUpdateResponse.TabletInfo
- (*logutil.Event)(nil), // 297: logutil.Event
- (tabletmanagerdata.TabletSelectionPreference)(0), // 298: tabletmanagerdata.TabletSelectionPreference
- (*topodata.Keyspace)(nil), // 299: topodata.Keyspace
- (*vttime.Time)(nil), // 300: vttime.Time
- (*topodata.TabletAlias)(nil), // 301: topodata.TabletAlias
- (*vttime.Duration)(nil), // 302: vttime.Duration
- (*topodata.Shard)(nil), // 303: topodata.Shard
- (*topodata.CellInfo)(nil), // 304: topodata.CellInfo
- (*vschema.KeyspaceRoutingRules)(nil), // 305: vschema.KeyspaceRoutingRules
- (*vschema.RoutingRules)(nil), // 306: vschema.RoutingRules
- (*vschema.ShardRoutingRules)(nil), // 307: vschema.ShardRoutingRules
- (*vtrpc.CallerID)(nil), // 308: vtrpc.CallerID
- (*vschema.Keyspace)(nil), // 309: vschema.Keyspace
- (topodata.TabletType)(0), // 310: topodata.TabletType
- (*topodata.Tablet)(nil), // 311: topodata.Tablet
- (*tabletmanagerdata.CheckThrottlerResponse)(nil), // 312: tabletmanagerdata.CheckThrottlerResponse
- (topodata.KeyspaceType)(0), // 313: topodata.KeyspaceType
- (*query.QueryResult)(nil), // 314: query.QueryResult
- (*tabletmanagerdata.ExecuteHookRequest)(nil), // 315: tabletmanagerdata.ExecuteHookRequest
- (*tabletmanagerdata.ExecuteHookResponse)(nil), // 316: tabletmanagerdata.ExecuteHookResponse
- (*mysqlctl.BackupInfo)(nil), // 317: mysqlctl.BackupInfo
- (*replicationdata.FullStatus)(nil), // 318: replicationdata.FullStatus
- (*tabletmanagerdata.Permissions)(nil), // 319: tabletmanagerdata.Permissions
- (*tabletmanagerdata.SchemaDefinition)(nil), // 320: tabletmanagerdata.SchemaDefinition
- (*topodata.ThrottledAppRule)(nil), // 321: topodata.ThrottledAppRule
- (*vschema.SrvVSchema)(nil), // 322: vschema.SrvVSchema
- (*tabletmanagerdata.GetThrottlerStatusResponse)(nil), // 323: tabletmanagerdata.GetThrottlerStatusResponse
- (*query.TransactionMetadata)(nil), // 324: query.TransactionMetadata
- (*query.Target)(nil), // 325: query.Target
- (*topodata.ShardReplicationError)(nil), // 326: topodata.ShardReplicationError
- (*topodata.KeyRange)(nil), // 327: topodata.KeyRange
- (*topodata.CellsAlias)(nil), // 328: topodata.CellsAlias
- (*tabletmanagerdata.UpdateVReplicationWorkflowRequest)(nil), // 329: tabletmanagerdata.UpdateVReplicationWorkflowRequest
- (*vschema.MirrorRules)(nil), // 330: vschema.MirrorRules
- (*topodata.Shard_TabletControl)(nil), // 331: topodata.Shard.TabletControl
- (*binlogdata.BinlogSource)(nil), // 332: binlogdata.BinlogSource
- (*topodata.ShardReplication)(nil), // 333: topodata.ShardReplication
- (*topodata.SrvKeyspace)(nil), // 334: topodata.SrvKeyspace
- (*replicationdata.Status)(nil), // 335: replicationdata.Status
- (*tabletmanagerdata.VDiffResponse)(nil), // 336: tabletmanagerdata.VDiffResponse
+ (ShardedAutoIncrementHandling)(0), // 2: vtctldata.ShardedAutoIncrementHandling
+ (SchemaMigration_Strategy)(0), // 3: vtctldata.SchemaMigration.Strategy
+ (SchemaMigration_Status)(0), // 4: vtctldata.SchemaMigration.Status
+ (*ExecuteVtctlCommandRequest)(nil), // 5: vtctldata.ExecuteVtctlCommandRequest
+ (*ExecuteVtctlCommandResponse)(nil), // 6: vtctldata.ExecuteVtctlCommandResponse
+ (*TableMaterializeSettings)(nil), // 7: vtctldata.TableMaterializeSettings
+ (*MaterializeSettings)(nil), // 8: vtctldata.MaterializeSettings
+ (*Keyspace)(nil), // 9: vtctldata.Keyspace
+ (*SchemaMigration)(nil), // 10: vtctldata.SchemaMigration
+ (*Shard)(nil), // 11: vtctldata.Shard
+ (*WorkflowOptions)(nil), // 12: vtctldata.WorkflowOptions
+ (*Workflow)(nil), // 13: vtctldata.Workflow
+ (*AddCellInfoRequest)(nil), // 14: vtctldata.AddCellInfoRequest
+ (*AddCellInfoResponse)(nil), // 15: vtctldata.AddCellInfoResponse
+ (*AddCellsAliasRequest)(nil), // 16: vtctldata.AddCellsAliasRequest
+ (*AddCellsAliasResponse)(nil), // 17: vtctldata.AddCellsAliasResponse
+ (*ApplyKeyspaceRoutingRulesRequest)(nil), // 18: vtctldata.ApplyKeyspaceRoutingRulesRequest
+ (*ApplyKeyspaceRoutingRulesResponse)(nil), // 19: vtctldata.ApplyKeyspaceRoutingRulesResponse
+ (*ApplyRoutingRulesRequest)(nil), // 20: vtctldata.ApplyRoutingRulesRequest
+ (*ApplyRoutingRulesResponse)(nil), // 21: vtctldata.ApplyRoutingRulesResponse
+ (*ApplyShardRoutingRulesRequest)(nil), // 22: vtctldata.ApplyShardRoutingRulesRequest
+ (*ApplyShardRoutingRulesResponse)(nil), // 23: vtctldata.ApplyShardRoutingRulesResponse
+ (*ApplySchemaRequest)(nil), // 24: vtctldata.ApplySchemaRequest
+ (*ApplySchemaResponse)(nil), // 25: vtctldata.ApplySchemaResponse
+ (*ApplyVSchemaRequest)(nil), // 26: vtctldata.ApplyVSchemaRequest
+ (*ApplyVSchemaResponse)(nil), // 27: vtctldata.ApplyVSchemaResponse
+ (*BackupRequest)(nil), // 28: vtctldata.BackupRequest
+ (*BackupResponse)(nil), // 29: vtctldata.BackupResponse
+ (*BackupShardRequest)(nil), // 30: vtctldata.BackupShardRequest
+ (*CancelSchemaMigrationRequest)(nil), // 31: vtctldata.CancelSchemaMigrationRequest
+ (*CancelSchemaMigrationResponse)(nil), // 32: vtctldata.CancelSchemaMigrationResponse
+ (*ChangeTabletTagsRequest)(nil), // 33: vtctldata.ChangeTabletTagsRequest
+ (*ChangeTabletTagsResponse)(nil), // 34: vtctldata.ChangeTabletTagsResponse
+ (*ChangeTabletTypeRequest)(nil), // 35: vtctldata.ChangeTabletTypeRequest
+ (*ChangeTabletTypeResponse)(nil), // 36: vtctldata.ChangeTabletTypeResponse
+ (*CheckThrottlerRequest)(nil), // 37: vtctldata.CheckThrottlerRequest
+ (*CheckThrottlerResponse)(nil), // 38: vtctldata.CheckThrottlerResponse
+ (*CleanupSchemaMigrationRequest)(nil), // 39: vtctldata.CleanupSchemaMigrationRequest
+ (*CleanupSchemaMigrationResponse)(nil), // 40: vtctldata.CleanupSchemaMigrationResponse
+ (*CompleteSchemaMigrationRequest)(nil), // 41: vtctldata.CompleteSchemaMigrationRequest
+ (*CompleteSchemaMigrationResponse)(nil), // 42: vtctldata.CompleteSchemaMigrationResponse
+ (*CreateKeyspaceRequest)(nil), // 43: vtctldata.CreateKeyspaceRequest
+ (*CreateKeyspaceResponse)(nil), // 44: vtctldata.CreateKeyspaceResponse
+ (*CreateShardRequest)(nil), // 45: vtctldata.CreateShardRequest
+ (*CreateShardResponse)(nil), // 46: vtctldata.CreateShardResponse
+ (*DeleteCellInfoRequest)(nil), // 47: vtctldata.DeleteCellInfoRequest
+ (*DeleteCellInfoResponse)(nil), // 48: vtctldata.DeleteCellInfoResponse
+ (*DeleteCellsAliasRequest)(nil), // 49: vtctldata.DeleteCellsAliasRequest
+ (*DeleteCellsAliasResponse)(nil), // 50: vtctldata.DeleteCellsAliasResponse
+ (*DeleteKeyspaceRequest)(nil), // 51: vtctldata.DeleteKeyspaceRequest
+ (*DeleteKeyspaceResponse)(nil), // 52: vtctldata.DeleteKeyspaceResponse
+ (*DeleteShardsRequest)(nil), // 53: vtctldata.DeleteShardsRequest
+ (*DeleteShardsResponse)(nil), // 54: vtctldata.DeleteShardsResponse
+ (*DeleteSrvVSchemaRequest)(nil), // 55: vtctldata.DeleteSrvVSchemaRequest
+ (*DeleteSrvVSchemaResponse)(nil), // 56: vtctldata.DeleteSrvVSchemaResponse
+ (*DeleteTabletsRequest)(nil), // 57: vtctldata.DeleteTabletsRequest
+ (*DeleteTabletsResponse)(nil), // 58: vtctldata.DeleteTabletsResponse
+ (*EmergencyReparentShardRequest)(nil), // 59: vtctldata.EmergencyReparentShardRequest
+ (*EmergencyReparentShardResponse)(nil), // 60: vtctldata.EmergencyReparentShardResponse
+ (*ExecuteFetchAsAppRequest)(nil), // 61: vtctldata.ExecuteFetchAsAppRequest
+ (*ExecuteFetchAsAppResponse)(nil), // 62: vtctldata.ExecuteFetchAsAppResponse
+ (*ExecuteFetchAsDBARequest)(nil), // 63: vtctldata.ExecuteFetchAsDBARequest
+ (*ExecuteFetchAsDBAResponse)(nil), // 64: vtctldata.ExecuteFetchAsDBAResponse
+ (*ExecuteHookRequest)(nil), // 65: vtctldata.ExecuteHookRequest
+ (*ExecuteHookResponse)(nil), // 66: vtctldata.ExecuteHookResponse
+ (*ExecuteMultiFetchAsDBARequest)(nil), // 67: vtctldata.ExecuteMultiFetchAsDBARequest
+ (*ExecuteMultiFetchAsDBAResponse)(nil), // 68: vtctldata.ExecuteMultiFetchAsDBAResponse
+ (*FindAllShardsInKeyspaceRequest)(nil), // 69: vtctldata.FindAllShardsInKeyspaceRequest
+ (*FindAllShardsInKeyspaceResponse)(nil), // 70: vtctldata.FindAllShardsInKeyspaceResponse
+ (*ForceCutOverSchemaMigrationRequest)(nil), // 71: vtctldata.ForceCutOverSchemaMigrationRequest
+ (*ForceCutOverSchemaMigrationResponse)(nil), // 72: vtctldata.ForceCutOverSchemaMigrationResponse
+ (*GetBackupsRequest)(nil), // 73: vtctldata.GetBackupsRequest
+ (*GetBackupsResponse)(nil), // 74: vtctldata.GetBackupsResponse
+ (*GetCellInfoRequest)(nil), // 75: vtctldata.GetCellInfoRequest
+ (*GetCellInfoResponse)(nil), // 76: vtctldata.GetCellInfoResponse
+ (*GetCellInfoNamesRequest)(nil), // 77: vtctldata.GetCellInfoNamesRequest
+ (*GetCellInfoNamesResponse)(nil), // 78: vtctldata.GetCellInfoNamesResponse
+ (*GetCellsAliasesRequest)(nil), // 79: vtctldata.GetCellsAliasesRequest
+ (*GetCellsAliasesResponse)(nil), // 80: vtctldata.GetCellsAliasesResponse
+ (*GetFullStatusRequest)(nil), // 81: vtctldata.GetFullStatusRequest
+ (*GetFullStatusResponse)(nil), // 82: vtctldata.GetFullStatusResponse
+ (*GetKeyspacesRequest)(nil), // 83: vtctldata.GetKeyspacesRequest
+ (*GetKeyspacesResponse)(nil), // 84: vtctldata.GetKeyspacesResponse
+ (*GetKeyspaceRequest)(nil), // 85: vtctldata.GetKeyspaceRequest
+ (*GetKeyspaceResponse)(nil), // 86: vtctldata.GetKeyspaceResponse
+ (*GetPermissionsRequest)(nil), // 87: vtctldata.GetPermissionsRequest
+ (*GetPermissionsResponse)(nil), // 88: vtctldata.GetPermissionsResponse
+ (*GetKeyspaceRoutingRulesRequest)(nil), // 89: vtctldata.GetKeyspaceRoutingRulesRequest
+ (*GetKeyspaceRoutingRulesResponse)(nil), // 90: vtctldata.GetKeyspaceRoutingRulesResponse
+ (*GetRoutingRulesRequest)(nil), // 91: vtctldata.GetRoutingRulesRequest
+ (*GetRoutingRulesResponse)(nil), // 92: vtctldata.GetRoutingRulesResponse
+ (*GetSchemaRequest)(nil), // 93: vtctldata.GetSchemaRequest
+ (*GetSchemaResponse)(nil), // 94: vtctldata.GetSchemaResponse
+ (*GetSchemaMigrationsRequest)(nil), // 95: vtctldata.GetSchemaMigrationsRequest
+ (*GetSchemaMigrationsResponse)(nil), // 96: vtctldata.GetSchemaMigrationsResponse
+ (*GetShardReplicationRequest)(nil), // 97: vtctldata.GetShardReplicationRequest
+ (*GetShardReplicationResponse)(nil), // 98: vtctldata.GetShardReplicationResponse
+ (*GetShardRequest)(nil), // 99: vtctldata.GetShardRequest
+ (*GetShardResponse)(nil), // 100: vtctldata.GetShardResponse
+ (*GetShardRoutingRulesRequest)(nil), // 101: vtctldata.GetShardRoutingRulesRequest
+ (*GetShardRoutingRulesResponse)(nil), // 102: vtctldata.GetShardRoutingRulesResponse
+ (*GetSrvKeyspaceNamesRequest)(nil), // 103: vtctldata.GetSrvKeyspaceNamesRequest
+ (*GetSrvKeyspaceNamesResponse)(nil), // 104: vtctldata.GetSrvKeyspaceNamesResponse
+ (*GetSrvKeyspacesRequest)(nil), // 105: vtctldata.GetSrvKeyspacesRequest
+ (*GetSrvKeyspacesResponse)(nil), // 106: vtctldata.GetSrvKeyspacesResponse
+ (*UpdateThrottlerConfigRequest)(nil), // 107: vtctldata.UpdateThrottlerConfigRequest
+ (*UpdateThrottlerConfigResponse)(nil), // 108: vtctldata.UpdateThrottlerConfigResponse
+ (*GetSrvVSchemaRequest)(nil), // 109: vtctldata.GetSrvVSchemaRequest
+ (*GetSrvVSchemaResponse)(nil), // 110: vtctldata.GetSrvVSchemaResponse
+ (*GetSrvVSchemasRequest)(nil), // 111: vtctldata.GetSrvVSchemasRequest
+ (*GetSrvVSchemasResponse)(nil), // 112: vtctldata.GetSrvVSchemasResponse
+ (*GetTabletRequest)(nil), // 113: vtctldata.GetTabletRequest
+ (*GetTabletResponse)(nil), // 114: vtctldata.GetTabletResponse
+ (*GetTabletsRequest)(nil), // 115: vtctldata.GetTabletsRequest
+ (*GetTabletsResponse)(nil), // 116: vtctldata.GetTabletsResponse
+ (*GetThrottlerStatusRequest)(nil), // 117: vtctldata.GetThrottlerStatusRequest
+ (*GetThrottlerStatusResponse)(nil), // 118: vtctldata.GetThrottlerStatusResponse
+ (*GetTopologyPathRequest)(nil), // 119: vtctldata.GetTopologyPathRequest
+ (*GetTopologyPathResponse)(nil), // 120: vtctldata.GetTopologyPathResponse
+ (*TopologyCell)(nil), // 121: vtctldata.TopologyCell
+ (*GetUnresolvedTransactionsRequest)(nil), // 122: vtctldata.GetUnresolvedTransactionsRequest
+ (*GetUnresolvedTransactionsResponse)(nil), // 123: vtctldata.GetUnresolvedTransactionsResponse
+ (*GetTransactionInfoRequest)(nil), // 124: vtctldata.GetTransactionInfoRequest
+ (*ShardTransactionState)(nil), // 125: vtctldata.ShardTransactionState
+ (*GetTransactionInfoResponse)(nil), // 126: vtctldata.GetTransactionInfoResponse
+ (*ConcludeTransactionRequest)(nil), // 127: vtctldata.ConcludeTransactionRequest
+ (*ConcludeTransactionResponse)(nil), // 128: vtctldata.ConcludeTransactionResponse
+ (*GetVSchemaRequest)(nil), // 129: vtctldata.GetVSchemaRequest
+ (*GetVersionRequest)(nil), // 130: vtctldata.GetVersionRequest
+ (*GetVersionResponse)(nil), // 131: vtctldata.GetVersionResponse
+ (*GetVSchemaResponse)(nil), // 132: vtctldata.GetVSchemaResponse
+ (*GetWorkflowsRequest)(nil), // 133: vtctldata.GetWorkflowsRequest
+ (*GetWorkflowsResponse)(nil), // 134: vtctldata.GetWorkflowsResponse
+ (*InitShardPrimaryRequest)(nil), // 135: vtctldata.InitShardPrimaryRequest
+ (*InitShardPrimaryResponse)(nil), // 136: vtctldata.InitShardPrimaryResponse
+ (*LaunchSchemaMigrationRequest)(nil), // 137: vtctldata.LaunchSchemaMigrationRequest
+ (*LaunchSchemaMigrationResponse)(nil), // 138: vtctldata.LaunchSchemaMigrationResponse
+ (*LookupVindexCreateRequest)(nil), // 139: vtctldata.LookupVindexCreateRequest
+ (*LookupVindexCreateResponse)(nil), // 140: vtctldata.LookupVindexCreateResponse
+ (*LookupVindexExternalizeRequest)(nil), // 141: vtctldata.LookupVindexExternalizeRequest
+ (*LookupVindexExternalizeResponse)(nil), // 142: vtctldata.LookupVindexExternalizeResponse
+ (*MaterializeCreateRequest)(nil), // 143: vtctldata.MaterializeCreateRequest
+ (*MaterializeCreateResponse)(nil), // 144: vtctldata.MaterializeCreateResponse
+ (*MigrateCreateRequest)(nil), // 145: vtctldata.MigrateCreateRequest
+ (*MigrateCompleteRequest)(nil), // 146: vtctldata.MigrateCompleteRequest
+ (*MigrateCompleteResponse)(nil), // 147: vtctldata.MigrateCompleteResponse
+ (*MountRegisterRequest)(nil), // 148: vtctldata.MountRegisterRequest
+ (*MountRegisterResponse)(nil), // 149: vtctldata.MountRegisterResponse
+ (*MountUnregisterRequest)(nil), // 150: vtctldata.MountUnregisterRequest
+ (*MountUnregisterResponse)(nil), // 151: vtctldata.MountUnregisterResponse
+ (*MountShowRequest)(nil), // 152: vtctldata.MountShowRequest
+ (*MountShowResponse)(nil), // 153: vtctldata.MountShowResponse
+ (*MountListRequest)(nil), // 154: vtctldata.MountListRequest
+ (*MountListResponse)(nil), // 155: vtctldata.MountListResponse
+ (*MoveTablesCreateRequest)(nil), // 156: vtctldata.MoveTablesCreateRequest
+ (*MoveTablesCreateResponse)(nil), // 157: vtctldata.MoveTablesCreateResponse
+ (*MoveTablesCompleteRequest)(nil), // 158: vtctldata.MoveTablesCompleteRequest
+ (*MoveTablesCompleteResponse)(nil), // 159: vtctldata.MoveTablesCompleteResponse
+ (*PingTabletRequest)(nil), // 160: vtctldata.PingTabletRequest
+ (*PingTabletResponse)(nil), // 161: vtctldata.PingTabletResponse
+ (*PlannedReparentShardRequest)(nil), // 162: vtctldata.PlannedReparentShardRequest
+ (*PlannedReparentShardResponse)(nil), // 163: vtctldata.PlannedReparentShardResponse
+ (*RebuildKeyspaceGraphRequest)(nil), // 164: vtctldata.RebuildKeyspaceGraphRequest
+ (*RebuildKeyspaceGraphResponse)(nil), // 165: vtctldata.RebuildKeyspaceGraphResponse
+ (*RebuildVSchemaGraphRequest)(nil), // 166: vtctldata.RebuildVSchemaGraphRequest
+ (*RebuildVSchemaGraphResponse)(nil), // 167: vtctldata.RebuildVSchemaGraphResponse
+ (*RefreshStateRequest)(nil), // 168: vtctldata.RefreshStateRequest
+ (*RefreshStateResponse)(nil), // 169: vtctldata.RefreshStateResponse
+ (*RefreshStateByShardRequest)(nil), // 170: vtctldata.RefreshStateByShardRequest
+ (*RefreshStateByShardResponse)(nil), // 171: vtctldata.RefreshStateByShardResponse
+ (*ReloadSchemaRequest)(nil), // 172: vtctldata.ReloadSchemaRequest
+ (*ReloadSchemaResponse)(nil), // 173: vtctldata.ReloadSchemaResponse
+ (*ReloadSchemaKeyspaceRequest)(nil), // 174: vtctldata.ReloadSchemaKeyspaceRequest
+ (*ReloadSchemaKeyspaceResponse)(nil), // 175: vtctldata.ReloadSchemaKeyspaceResponse
+ (*ReloadSchemaShardRequest)(nil), // 176: vtctldata.ReloadSchemaShardRequest
+ (*ReloadSchemaShardResponse)(nil), // 177: vtctldata.ReloadSchemaShardResponse
+ (*RemoveBackupRequest)(nil), // 178: vtctldata.RemoveBackupRequest
+ (*RemoveBackupResponse)(nil), // 179: vtctldata.RemoveBackupResponse
+ (*RemoveKeyspaceCellRequest)(nil), // 180: vtctldata.RemoveKeyspaceCellRequest
+ (*RemoveKeyspaceCellResponse)(nil), // 181: vtctldata.RemoveKeyspaceCellResponse
+ (*RemoveShardCellRequest)(nil), // 182: vtctldata.RemoveShardCellRequest
+ (*RemoveShardCellResponse)(nil), // 183: vtctldata.RemoveShardCellResponse
+ (*ReparentTabletRequest)(nil), // 184: vtctldata.ReparentTabletRequest
+ (*ReparentTabletResponse)(nil), // 185: vtctldata.ReparentTabletResponse
+ (*ReshardCreateRequest)(nil), // 186: vtctldata.ReshardCreateRequest
+ (*RestoreFromBackupRequest)(nil), // 187: vtctldata.RestoreFromBackupRequest
+ (*RestoreFromBackupResponse)(nil), // 188: vtctldata.RestoreFromBackupResponse
+ (*RetrySchemaMigrationRequest)(nil), // 189: vtctldata.RetrySchemaMigrationRequest
+ (*RetrySchemaMigrationResponse)(nil), // 190: vtctldata.RetrySchemaMigrationResponse
+ (*RunHealthCheckRequest)(nil), // 191: vtctldata.RunHealthCheckRequest
+ (*RunHealthCheckResponse)(nil), // 192: vtctldata.RunHealthCheckResponse
+ (*SetKeyspaceDurabilityPolicyRequest)(nil), // 193: vtctldata.SetKeyspaceDurabilityPolicyRequest
+ (*SetKeyspaceDurabilityPolicyResponse)(nil), // 194: vtctldata.SetKeyspaceDurabilityPolicyResponse
+ (*SetKeyspaceShardingInfoRequest)(nil), // 195: vtctldata.SetKeyspaceShardingInfoRequest
+ (*SetKeyspaceShardingInfoResponse)(nil), // 196: vtctldata.SetKeyspaceShardingInfoResponse
+ (*SetShardIsPrimaryServingRequest)(nil), // 197: vtctldata.SetShardIsPrimaryServingRequest
+ (*SetShardIsPrimaryServingResponse)(nil), // 198: vtctldata.SetShardIsPrimaryServingResponse
+ (*SetShardTabletControlRequest)(nil), // 199: vtctldata.SetShardTabletControlRequest
+ (*SetShardTabletControlResponse)(nil), // 200: vtctldata.SetShardTabletControlResponse
+ (*SetWritableRequest)(nil), // 201: vtctldata.SetWritableRequest
+ (*SetWritableResponse)(nil), // 202: vtctldata.SetWritableResponse
+ (*ShardReplicationAddRequest)(nil), // 203: vtctldata.ShardReplicationAddRequest
+ (*ShardReplicationAddResponse)(nil), // 204: vtctldata.ShardReplicationAddResponse
+ (*ShardReplicationFixRequest)(nil), // 205: vtctldata.ShardReplicationFixRequest
+ (*ShardReplicationFixResponse)(nil), // 206: vtctldata.ShardReplicationFixResponse
+ (*ShardReplicationPositionsRequest)(nil), // 207: vtctldata.ShardReplicationPositionsRequest
+ (*ShardReplicationPositionsResponse)(nil), // 208: vtctldata.ShardReplicationPositionsResponse
+ (*ShardReplicationRemoveRequest)(nil), // 209: vtctldata.ShardReplicationRemoveRequest
+ (*ShardReplicationRemoveResponse)(nil), // 210: vtctldata.ShardReplicationRemoveResponse
+ (*SleepTabletRequest)(nil), // 211: vtctldata.SleepTabletRequest
+ (*SleepTabletResponse)(nil), // 212: vtctldata.SleepTabletResponse
+ (*SourceShardAddRequest)(nil), // 213: vtctldata.SourceShardAddRequest
+ (*SourceShardAddResponse)(nil), // 214: vtctldata.SourceShardAddResponse
+ (*SourceShardDeleteRequest)(nil), // 215: vtctldata.SourceShardDeleteRequest
+ (*SourceShardDeleteResponse)(nil), // 216: vtctldata.SourceShardDeleteResponse
+ (*StartReplicationRequest)(nil), // 217: vtctldata.StartReplicationRequest
+ (*StartReplicationResponse)(nil), // 218: vtctldata.StartReplicationResponse
+ (*StopReplicationRequest)(nil), // 219: vtctldata.StopReplicationRequest
+ (*StopReplicationResponse)(nil), // 220: vtctldata.StopReplicationResponse
+ (*TabletExternallyReparentedRequest)(nil), // 221: vtctldata.TabletExternallyReparentedRequest
+ (*TabletExternallyReparentedResponse)(nil), // 222: vtctldata.TabletExternallyReparentedResponse
+ (*UpdateCellInfoRequest)(nil), // 223: vtctldata.UpdateCellInfoRequest
+ (*UpdateCellInfoResponse)(nil), // 224: vtctldata.UpdateCellInfoResponse
+ (*UpdateCellsAliasRequest)(nil), // 225: vtctldata.UpdateCellsAliasRequest
+ (*UpdateCellsAliasResponse)(nil), // 226: vtctldata.UpdateCellsAliasResponse
+ (*ValidateRequest)(nil), // 227: vtctldata.ValidateRequest
+ (*ValidateResponse)(nil), // 228: vtctldata.ValidateResponse
+ (*ValidateKeyspaceRequest)(nil), // 229: vtctldata.ValidateKeyspaceRequest
+ (*ValidateKeyspaceResponse)(nil), // 230: vtctldata.ValidateKeyspaceResponse
+ (*ValidateSchemaKeyspaceRequest)(nil), // 231: vtctldata.ValidateSchemaKeyspaceRequest
+ (*ValidateSchemaKeyspaceResponse)(nil), // 232: vtctldata.ValidateSchemaKeyspaceResponse
+ (*ValidateShardRequest)(nil), // 233: vtctldata.ValidateShardRequest
+ (*ValidateShardResponse)(nil), // 234: vtctldata.ValidateShardResponse
+ (*ValidateVersionKeyspaceRequest)(nil), // 235: vtctldata.ValidateVersionKeyspaceRequest
+ (*ValidateVersionKeyspaceResponse)(nil), // 236: vtctldata.ValidateVersionKeyspaceResponse
+ (*ValidateVersionShardRequest)(nil), // 237: vtctldata.ValidateVersionShardRequest
+ (*ValidateVersionShardResponse)(nil), // 238: vtctldata.ValidateVersionShardResponse
+ (*ValidateVSchemaRequest)(nil), // 239: vtctldata.ValidateVSchemaRequest
+ (*ValidateVSchemaResponse)(nil), // 240: vtctldata.ValidateVSchemaResponse
+ (*VDiffCreateRequest)(nil), // 241: vtctldata.VDiffCreateRequest
+ (*VDiffCreateResponse)(nil), // 242: vtctldata.VDiffCreateResponse
+ (*VDiffDeleteRequest)(nil), // 243: vtctldata.VDiffDeleteRequest
+ (*VDiffDeleteResponse)(nil), // 244: vtctldata.VDiffDeleteResponse
+ (*VDiffResumeRequest)(nil), // 245: vtctldata.VDiffResumeRequest
+ (*VDiffResumeResponse)(nil), // 246: vtctldata.VDiffResumeResponse
+ (*VDiffShowRequest)(nil), // 247: vtctldata.VDiffShowRequest
+ (*VDiffShowResponse)(nil), // 248: vtctldata.VDiffShowResponse
+ (*VDiffStopRequest)(nil), // 249: vtctldata.VDiffStopRequest
+ (*VDiffStopResponse)(nil), // 250: vtctldata.VDiffStopResponse
+ (*WorkflowDeleteRequest)(nil), // 251: vtctldata.WorkflowDeleteRequest
+ (*WorkflowDeleteResponse)(nil), // 252: vtctldata.WorkflowDeleteResponse
+ (*WorkflowStatusRequest)(nil), // 253: vtctldata.WorkflowStatusRequest
+ (*WorkflowStatusResponse)(nil), // 254: vtctldata.WorkflowStatusResponse
+ (*WorkflowSwitchTrafficRequest)(nil), // 255: vtctldata.WorkflowSwitchTrafficRequest
+ (*WorkflowSwitchTrafficResponse)(nil), // 256: vtctldata.WorkflowSwitchTrafficResponse
+ (*WorkflowUpdateRequest)(nil), // 257: vtctldata.WorkflowUpdateRequest
+ (*WorkflowUpdateResponse)(nil), // 258: vtctldata.WorkflowUpdateResponse
+ (*GetMirrorRulesRequest)(nil), // 259: vtctldata.GetMirrorRulesRequest
+ (*GetMirrorRulesResponse)(nil), // 260: vtctldata.GetMirrorRulesResponse
+ (*WorkflowMirrorTrafficRequest)(nil), // 261: vtctldata.WorkflowMirrorTrafficRequest
+ (*WorkflowMirrorTrafficResponse)(nil), // 262: vtctldata.WorkflowMirrorTrafficResponse
+ nil, // 263: vtctldata.WorkflowOptions.ConfigEntry
+ nil, // 264: vtctldata.Workflow.ShardStreamsEntry
+ (*Workflow_ReplicationLocation)(nil), // 265: vtctldata.Workflow.ReplicationLocation
+ (*Workflow_ShardStream)(nil), // 266: vtctldata.Workflow.ShardStream
+ (*Workflow_Stream)(nil), // 267: vtctldata.Workflow.Stream
+ (*Workflow_Stream_CopyState)(nil), // 268: vtctldata.Workflow.Stream.CopyState
+ (*Workflow_Stream_Log)(nil), // 269: vtctldata.Workflow.Stream.Log
+ (*Workflow_Stream_ThrottlerStatus)(nil), // 270: vtctldata.Workflow.Stream.ThrottlerStatus
+ nil, // 271: vtctldata.ApplySchemaResponse.RowsAffectedByShardEntry
+ nil, // 272: vtctldata.ApplyVSchemaResponse.UnknownVindexParamsEntry
+ (*ApplyVSchemaResponse_ParamList)(nil), // 273: vtctldata.ApplyVSchemaResponse.ParamList
+ nil, // 274: vtctldata.CancelSchemaMigrationResponse.RowsAffectedByShardEntry
+ nil, // 275: vtctldata.ChangeTabletTagsRequest.TagsEntry
+ nil, // 276: vtctldata.ChangeTabletTagsResponse.BeforeTagsEntry
+ nil, // 277: vtctldata.ChangeTabletTagsResponse.AfterTagsEntry
+ nil, // 278: vtctldata.CleanupSchemaMigrationResponse.RowsAffectedByShardEntry
+ nil, // 279: vtctldata.CompleteSchemaMigrationResponse.RowsAffectedByShardEntry
+ nil, // 280: vtctldata.FindAllShardsInKeyspaceResponse.ShardsEntry
+ nil, // 281: vtctldata.ForceCutOverSchemaMigrationResponse.RowsAffectedByShardEntry
+ nil, // 282: vtctldata.GetCellsAliasesResponse.AliasesEntry
+ nil, // 283: vtctldata.GetShardReplicationResponse.ShardReplicationByCellEntry
+ nil, // 284: vtctldata.GetSrvKeyspaceNamesResponse.NamesEntry
+ (*GetSrvKeyspaceNamesResponse_NameList)(nil), // 285: vtctldata.GetSrvKeyspaceNamesResponse.NameList
+ nil, // 286: vtctldata.GetSrvKeyspacesResponse.SrvKeyspacesEntry
+ nil, // 287: vtctldata.GetSrvVSchemasResponse.SrvVSchemasEntry
+ nil, // 288: vtctldata.LaunchSchemaMigrationResponse.RowsAffectedByShardEntry
+ (*MoveTablesCreateResponse_TabletInfo)(nil), // 289: vtctldata.MoveTablesCreateResponse.TabletInfo
+ nil, // 290: vtctldata.RetrySchemaMigrationResponse.RowsAffectedByShardEntry
+ nil, // 291: vtctldata.ShardReplicationPositionsResponse.ReplicationStatusesEntry
+ nil, // 292: vtctldata.ShardReplicationPositionsResponse.TabletMapEntry
+ nil, // 293: vtctldata.ValidateResponse.ResultsByKeyspaceEntry
+ nil, // 294: vtctldata.ValidateKeyspaceResponse.ResultsByShardEntry
+ nil, // 295: vtctldata.ValidateSchemaKeyspaceResponse.ResultsByShardEntry
+ nil, // 296: vtctldata.ValidateVersionKeyspaceResponse.ResultsByShardEntry
+ nil, // 297: vtctldata.ValidateVSchemaResponse.ResultsByShardEntry
+ nil, // 298: vtctldata.VDiffShowResponse.TabletResponsesEntry
+ (*WorkflowDeleteResponse_TabletInfo)(nil), // 299: vtctldata.WorkflowDeleteResponse.TabletInfo
+ (*WorkflowStatusResponse_TableCopyState)(nil), // 300: vtctldata.WorkflowStatusResponse.TableCopyState
+ (*WorkflowStatusResponse_ShardStreamState)(nil), // 301: vtctldata.WorkflowStatusResponse.ShardStreamState
+ (*WorkflowStatusResponse_ShardStreams)(nil), // 302: vtctldata.WorkflowStatusResponse.ShardStreams
+ nil, // 303: vtctldata.WorkflowStatusResponse.TableCopyStateEntry
+ nil, // 304: vtctldata.WorkflowStatusResponse.ShardStreamsEntry
+ (*WorkflowUpdateResponse_TabletInfo)(nil), // 305: vtctldata.WorkflowUpdateResponse.TabletInfo
+ (*logutil.Event)(nil), // 306: logutil.Event
+ (tabletmanagerdata.TabletSelectionPreference)(0), // 307: tabletmanagerdata.TabletSelectionPreference
+ (*topodata.Keyspace)(nil), // 308: topodata.Keyspace
+ (*vttime.Time)(nil), // 309: vttime.Time
+ (*topodata.TabletAlias)(nil), // 310: topodata.TabletAlias
+ (*vttime.Duration)(nil), // 311: vttime.Duration
+ (*topodata.Shard)(nil), // 312: topodata.Shard
+ (*topodata.CellInfo)(nil), // 313: topodata.CellInfo
+ (*vschema.KeyspaceRoutingRules)(nil), // 314: vschema.KeyspaceRoutingRules
+ (*vschema.RoutingRules)(nil), // 315: vschema.RoutingRules
+ (*vschema.ShardRoutingRules)(nil), // 316: vschema.ShardRoutingRules
+ (*vtrpc.CallerID)(nil), // 317: vtrpc.CallerID
+ (*vschema.Keyspace)(nil), // 318: vschema.Keyspace
+ (topodata.TabletType)(0), // 319: topodata.TabletType
+ (*topodata.Tablet)(nil), // 320: topodata.Tablet
+ (*tabletmanagerdata.CheckThrottlerResponse)(nil), // 321: tabletmanagerdata.CheckThrottlerResponse
+ (topodata.KeyspaceType)(0), // 322: topodata.KeyspaceType
+ (*query.QueryResult)(nil), // 323: query.QueryResult
+ (*tabletmanagerdata.ExecuteHookRequest)(nil), // 324: tabletmanagerdata.ExecuteHookRequest
+ (*tabletmanagerdata.ExecuteHookResponse)(nil), // 325: tabletmanagerdata.ExecuteHookResponse
+ (*mysqlctl.BackupInfo)(nil), // 326: mysqlctl.BackupInfo
+ (*replicationdata.FullStatus)(nil), // 327: replicationdata.FullStatus
+ (*tabletmanagerdata.Permissions)(nil), // 328: tabletmanagerdata.Permissions
+ (*tabletmanagerdata.SchemaDefinition)(nil), // 329: tabletmanagerdata.SchemaDefinition
+ (*topodata.ThrottledAppRule)(nil), // 330: topodata.ThrottledAppRule
+ (*vschema.SrvVSchema)(nil), // 331: vschema.SrvVSchema
+ (*tabletmanagerdata.GetThrottlerStatusResponse)(nil), // 332: tabletmanagerdata.GetThrottlerStatusResponse
+ (*query.TransactionMetadata)(nil), // 333: query.TransactionMetadata
+ (*query.Target)(nil), // 334: query.Target
+ (*topodata.ShardReplicationError)(nil), // 335: topodata.ShardReplicationError
+ (*topodata.KeyRange)(nil), // 336: topodata.KeyRange
+ (*topodata.CellsAlias)(nil), // 337: topodata.CellsAlias
+ (*tabletmanagerdata.UpdateVReplicationWorkflowRequest)(nil), // 338: tabletmanagerdata.UpdateVReplicationWorkflowRequest
+ (*vschema.MirrorRules)(nil), // 339: vschema.MirrorRules
+ (*topodata.Shard_TabletControl)(nil), // 340: topodata.Shard.TabletControl
+ (*binlogdata.BinlogSource)(nil), // 341: binlogdata.BinlogSource
+ (*topodata.ShardReplication)(nil), // 342: topodata.ShardReplication
+ (*topodata.SrvKeyspace)(nil), // 343: topodata.SrvKeyspace
+ (*replicationdata.Status)(nil), // 344: replicationdata.Status
+ (*tabletmanagerdata.VDiffResponse)(nil), // 345: tabletmanagerdata.VDiffResponse
}
var file_vtctldata_proto_depIdxs = []int32{
- 297, // 0: vtctldata.ExecuteVtctlCommandResponse.event:type_name -> logutil.Event
- 6, // 1: vtctldata.MaterializeSettings.table_settings:type_name -> vtctldata.TableMaterializeSettings
+ 306, // 0: vtctldata.ExecuteVtctlCommandResponse.event:type_name -> logutil.Event
+ 7, // 1: vtctldata.MaterializeSettings.table_settings:type_name -> vtctldata.TableMaterializeSettings
0, // 2: vtctldata.MaterializeSettings.materialization_intent:type_name -> vtctldata.MaterializationIntent
- 298, // 3: vtctldata.MaterializeSettings.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
- 11, // 4: vtctldata.MaterializeSettings.workflow_options:type_name -> vtctldata.WorkflowOptions
- 299, // 5: vtctldata.Keyspace.keyspace:type_name -> topodata.Keyspace
- 2, // 6: vtctldata.SchemaMigration.strategy:type_name -> vtctldata.SchemaMigration.Strategy
- 300, // 7: vtctldata.SchemaMigration.added_at:type_name -> vttime.Time
- 300, // 8: vtctldata.SchemaMigration.requested_at:type_name -> vttime.Time
- 300, // 9: vtctldata.SchemaMigration.ready_at:type_name -> vttime.Time
- 300, // 10: vtctldata.SchemaMigration.started_at:type_name -> vttime.Time
- 300, // 11: vtctldata.SchemaMigration.liveness_timestamp:type_name -> vttime.Time
- 300, // 12: vtctldata.SchemaMigration.completed_at:type_name -> vttime.Time
- 300, // 13: vtctldata.SchemaMigration.cleaned_up_at:type_name -> vttime.Time
- 3, // 14: vtctldata.SchemaMigration.status:type_name -> vtctldata.SchemaMigration.Status
- 301, // 15: vtctldata.SchemaMigration.tablet:type_name -> topodata.TabletAlias
- 302, // 16: vtctldata.SchemaMigration.artifact_retention:type_name -> vttime.Duration
- 300, // 17: vtctldata.SchemaMigration.last_throttled_at:type_name -> vttime.Time
- 300, // 18: vtctldata.SchemaMigration.cancelled_at:type_name -> vttime.Time
- 300, // 19: vtctldata.SchemaMigration.reviewed_at:type_name -> vttime.Time
- 300, // 20: vtctldata.SchemaMigration.ready_to_complete_at:type_name -> vttime.Time
- 303, // 21: vtctldata.Shard.shard:type_name -> topodata.Shard
- 257, // 22: vtctldata.WorkflowOptions.config:type_name -> vtctldata.WorkflowOptions.ConfigEntry
- 259, // 23: vtctldata.Workflow.source:type_name -> vtctldata.Workflow.ReplicationLocation
- 259, // 24: vtctldata.Workflow.target:type_name -> vtctldata.Workflow.ReplicationLocation
- 258, // 25: vtctldata.Workflow.shard_streams:type_name -> vtctldata.Workflow.ShardStreamsEntry
- 11, // 26: vtctldata.Workflow.options:type_name -> vtctldata.WorkflowOptions
- 304, // 27: vtctldata.AddCellInfoRequest.cell_info:type_name -> topodata.CellInfo
- 305, // 28: vtctldata.ApplyKeyspaceRoutingRulesRequest.keyspace_routing_rules:type_name -> vschema.KeyspaceRoutingRules
- 305, // 29: vtctldata.ApplyKeyspaceRoutingRulesResponse.keyspace_routing_rules:type_name -> vschema.KeyspaceRoutingRules
- 306, // 30: vtctldata.ApplyRoutingRulesRequest.routing_rules:type_name -> vschema.RoutingRules
- 307, // 31: vtctldata.ApplyShardRoutingRulesRequest.shard_routing_rules:type_name -> vschema.ShardRoutingRules
- 302, // 32: vtctldata.ApplySchemaRequest.wait_replicas_timeout:type_name -> vttime.Duration
- 308, // 33: vtctldata.ApplySchemaRequest.caller_id:type_name -> vtrpc.CallerID
- 265, // 34: vtctldata.ApplySchemaResponse.rows_affected_by_shard:type_name -> vtctldata.ApplySchemaResponse.RowsAffectedByShardEntry
- 309, // 35: vtctldata.ApplyVSchemaRequest.v_schema:type_name -> vschema.Keyspace
- 309, // 36: vtctldata.ApplyVSchemaResponse.v_schema:type_name -> vschema.Keyspace
- 266, // 37: vtctldata.ApplyVSchemaResponse.unknown_vindex_params:type_name -> vtctldata.ApplyVSchemaResponse.UnknownVindexParamsEntry
- 301, // 38: vtctldata.BackupRequest.tablet_alias:type_name -> topodata.TabletAlias
- 301, // 39: vtctldata.BackupResponse.tablet_alias:type_name -> topodata.TabletAlias
- 297, // 40: vtctldata.BackupResponse.event:type_name -> logutil.Event
- 268, // 41: vtctldata.CancelSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.CancelSchemaMigrationResponse.RowsAffectedByShardEntry
- 301, // 42: vtctldata.ChangeTabletTypeRequest.tablet_alias:type_name -> topodata.TabletAlias
- 310, // 43: vtctldata.ChangeTabletTypeRequest.db_type:type_name -> topodata.TabletType
- 311, // 44: vtctldata.ChangeTabletTypeResponse.before_tablet:type_name -> topodata.Tablet
- 311, // 45: vtctldata.ChangeTabletTypeResponse.after_tablet:type_name -> topodata.Tablet
- 301, // 46: vtctldata.CheckThrottlerRequest.tablet_alias:type_name -> topodata.TabletAlias
- 301, // 47: vtctldata.CheckThrottlerResponse.tablet_alias:type_name -> topodata.TabletAlias
- 312, // 48: vtctldata.CheckThrottlerResponse.Check:type_name -> tabletmanagerdata.CheckThrottlerResponse
- 269, // 49: vtctldata.CleanupSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.CleanupSchemaMigrationResponse.RowsAffectedByShardEntry
- 270, // 50: vtctldata.CompleteSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.CompleteSchemaMigrationResponse.RowsAffectedByShardEntry
- 313, // 51: vtctldata.CreateKeyspaceRequest.type:type_name -> topodata.KeyspaceType
- 300, // 52: vtctldata.CreateKeyspaceRequest.snapshot_time:type_name -> vttime.Time
- 8, // 53: vtctldata.CreateKeyspaceResponse.keyspace:type_name -> vtctldata.Keyspace
- 8, // 54: vtctldata.CreateShardResponse.keyspace:type_name -> vtctldata.Keyspace
- 10, // 55: vtctldata.CreateShardResponse.shard:type_name -> vtctldata.Shard
- 10, // 56: vtctldata.DeleteShardsRequest.shards:type_name -> vtctldata.Shard
- 301, // 57: vtctldata.DeleteTabletsRequest.tablet_aliases:type_name -> topodata.TabletAlias
- 301, // 58: vtctldata.EmergencyReparentShardRequest.new_primary:type_name -> topodata.TabletAlias
- 301, // 59: vtctldata.EmergencyReparentShardRequest.ignore_replicas:type_name -> topodata.TabletAlias
- 302, // 60: vtctldata.EmergencyReparentShardRequest.wait_replicas_timeout:type_name -> vttime.Duration
- 301, // 61: vtctldata.EmergencyReparentShardResponse.promoted_primary:type_name -> topodata.TabletAlias
- 297, // 62: vtctldata.EmergencyReparentShardResponse.events:type_name -> logutil.Event
- 301, // 63: vtctldata.ExecuteFetchAsAppRequest.tablet_alias:type_name -> topodata.TabletAlias
- 314, // 64: vtctldata.ExecuteFetchAsAppResponse.result:type_name -> query.QueryResult
- 301, // 65: vtctldata.ExecuteFetchAsDBARequest.tablet_alias:type_name -> topodata.TabletAlias
- 314, // 66: vtctldata.ExecuteFetchAsDBAResponse.result:type_name -> query.QueryResult
- 301, // 67: vtctldata.ExecuteHookRequest.tablet_alias:type_name -> topodata.TabletAlias
- 315, // 68: vtctldata.ExecuteHookRequest.tablet_hook_request:type_name -> tabletmanagerdata.ExecuteHookRequest
- 316, // 69: vtctldata.ExecuteHookResponse.hook_result:type_name -> tabletmanagerdata.ExecuteHookResponse
- 301, // 70: vtctldata.ExecuteMultiFetchAsDBARequest.tablet_alias:type_name -> topodata.TabletAlias
- 314, // 71: vtctldata.ExecuteMultiFetchAsDBAResponse.results:type_name -> query.QueryResult
- 271, // 72: vtctldata.FindAllShardsInKeyspaceResponse.shards:type_name -> vtctldata.FindAllShardsInKeyspaceResponse.ShardsEntry
- 272, // 73: vtctldata.ForceCutOverSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.ForceCutOverSchemaMigrationResponse.RowsAffectedByShardEntry
- 317, // 74: vtctldata.GetBackupsResponse.backups:type_name -> mysqlctl.BackupInfo
- 304, // 75: vtctldata.GetCellInfoResponse.cell_info:type_name -> topodata.CellInfo
- 273, // 76: vtctldata.GetCellsAliasesResponse.aliases:type_name -> vtctldata.GetCellsAliasesResponse.AliasesEntry
- 301, // 77: vtctldata.GetFullStatusRequest.tablet_alias:type_name -> topodata.TabletAlias
- 318, // 78: vtctldata.GetFullStatusResponse.status:type_name -> replicationdata.FullStatus
- 8, // 79: vtctldata.GetKeyspacesResponse.keyspaces:type_name -> vtctldata.Keyspace
- 8, // 80: vtctldata.GetKeyspaceResponse.keyspace:type_name -> vtctldata.Keyspace
- 301, // 81: vtctldata.GetPermissionsRequest.tablet_alias:type_name -> topodata.TabletAlias
- 319, // 82: vtctldata.GetPermissionsResponse.permissions:type_name -> tabletmanagerdata.Permissions
- 305, // 83: vtctldata.GetKeyspaceRoutingRulesResponse.keyspace_routing_rules:type_name -> vschema.KeyspaceRoutingRules
- 306, // 84: vtctldata.GetRoutingRulesResponse.routing_rules:type_name -> vschema.RoutingRules
- 301, // 85: vtctldata.GetSchemaRequest.tablet_alias:type_name -> topodata.TabletAlias
- 320, // 86: vtctldata.GetSchemaResponse.schema:type_name -> tabletmanagerdata.SchemaDefinition
- 3, // 87: vtctldata.GetSchemaMigrationsRequest.status:type_name -> vtctldata.SchemaMigration.Status
- 302, // 88: vtctldata.GetSchemaMigrationsRequest.recent:type_name -> vttime.Duration
- 1, // 89: vtctldata.GetSchemaMigrationsRequest.order:type_name -> vtctldata.QueryOrdering
- 9, // 90: vtctldata.GetSchemaMigrationsResponse.migrations:type_name -> vtctldata.SchemaMigration
- 274, // 91: vtctldata.GetShardReplicationResponse.shard_replication_by_cell:type_name -> vtctldata.GetShardReplicationResponse.ShardReplicationByCellEntry
- 10, // 92: vtctldata.GetShardResponse.shard:type_name -> vtctldata.Shard
- 307, // 93: vtctldata.GetShardRoutingRulesResponse.shard_routing_rules:type_name -> vschema.ShardRoutingRules
- 275, // 94: vtctldata.GetSrvKeyspaceNamesResponse.names:type_name -> vtctldata.GetSrvKeyspaceNamesResponse.NamesEntry
- 277, // 95: vtctldata.GetSrvKeyspacesResponse.srv_keyspaces:type_name -> vtctldata.GetSrvKeyspacesResponse.SrvKeyspacesEntry
- 321, // 96: vtctldata.UpdateThrottlerConfigRequest.throttled_app:type_name -> topodata.ThrottledAppRule
- 322, // 97: vtctldata.GetSrvVSchemaResponse.srv_v_schema:type_name -> vschema.SrvVSchema
- 278, // 98: vtctldata.GetSrvVSchemasResponse.srv_v_schemas:type_name -> vtctldata.GetSrvVSchemasResponse.SrvVSchemasEntry
- 301, // 99: vtctldata.GetTabletRequest.tablet_alias:type_name -> topodata.TabletAlias
- 311, // 100: vtctldata.GetTabletResponse.tablet:type_name -> topodata.Tablet
- 301, // 101: vtctldata.GetTabletsRequest.tablet_aliases:type_name -> topodata.TabletAlias
- 310, // 102: vtctldata.GetTabletsRequest.tablet_type:type_name -> topodata.TabletType
- 311, // 103: vtctldata.GetTabletsResponse.tablets:type_name -> topodata.Tablet
- 301, // 104: vtctldata.GetThrottlerStatusRequest.tablet_alias:type_name -> topodata.TabletAlias
- 323, // 105: vtctldata.GetThrottlerStatusResponse.status:type_name -> tabletmanagerdata.GetThrottlerStatusResponse
- 118, // 106: vtctldata.GetTopologyPathResponse.cell:type_name -> vtctldata.TopologyCell
- 324, // 107: vtctldata.GetUnresolvedTransactionsResponse.transactions:type_name -> query.TransactionMetadata
- 325, // 108: vtctldata.ConcludeTransactionRequest.participants:type_name -> query.Target
- 301, // 109: vtctldata.GetVersionRequest.tablet_alias:type_name -> topodata.TabletAlias
- 309, // 110: vtctldata.GetVSchemaResponse.v_schema:type_name -> vschema.Keyspace
- 12, // 111: vtctldata.GetWorkflowsResponse.workflows:type_name -> vtctldata.Workflow
- 301, // 112: vtctldata.InitShardPrimaryRequest.primary_elect_tablet_alias:type_name -> topodata.TabletAlias
- 302, // 113: vtctldata.InitShardPrimaryRequest.wait_replicas_timeout:type_name -> vttime.Duration
- 297, // 114: vtctldata.InitShardPrimaryResponse.events:type_name -> logutil.Event
- 279, // 115: vtctldata.LaunchSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.LaunchSchemaMigrationResponse.RowsAffectedByShardEntry
- 309, // 116: vtctldata.LookupVindexCreateRequest.vindex:type_name -> vschema.Keyspace
- 310, // 117: vtctldata.LookupVindexCreateRequest.tablet_types:type_name -> topodata.TabletType
- 298, // 118: vtctldata.LookupVindexCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
- 7, // 119: vtctldata.MaterializeCreateRequest.settings:type_name -> vtctldata.MaterializeSettings
- 310, // 120: vtctldata.MigrateCreateRequest.tablet_types:type_name -> topodata.TabletType
- 298, // 121: vtctldata.MigrateCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
- 310, // 122: vtctldata.MoveTablesCreateRequest.tablet_types:type_name -> topodata.TabletType
- 298, // 123: vtctldata.MoveTablesCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
- 11, // 124: vtctldata.MoveTablesCreateRequest.workflow_options:type_name -> vtctldata.WorkflowOptions
- 280, // 125: vtctldata.MoveTablesCreateResponse.details:type_name -> vtctldata.MoveTablesCreateResponse.TabletInfo
- 301, // 126: vtctldata.PingTabletRequest.tablet_alias:type_name -> topodata.TabletAlias
- 301, // 127: vtctldata.PlannedReparentShardRequest.new_primary:type_name -> topodata.TabletAlias
- 301, // 128: vtctldata.PlannedReparentShardRequest.avoid_primary:type_name -> topodata.TabletAlias
- 302, // 129: vtctldata.PlannedReparentShardRequest.wait_replicas_timeout:type_name -> vttime.Duration
- 302, // 130: vtctldata.PlannedReparentShardRequest.tolerable_replication_lag:type_name -> vttime.Duration
- 301, // 131: vtctldata.PlannedReparentShardResponse.promoted_primary:type_name -> topodata.TabletAlias
- 297, // 132: vtctldata.PlannedReparentShardResponse.events:type_name -> logutil.Event
- 301, // 133: vtctldata.RefreshStateRequest.tablet_alias:type_name -> topodata.TabletAlias
- 301, // 134: vtctldata.ReloadSchemaRequest.tablet_alias:type_name -> topodata.TabletAlias
- 297, // 135: vtctldata.ReloadSchemaKeyspaceResponse.events:type_name -> logutil.Event
- 297, // 136: vtctldata.ReloadSchemaShardResponse.events:type_name -> logutil.Event
- 301, // 137: vtctldata.ReparentTabletRequest.tablet:type_name -> topodata.TabletAlias
- 301, // 138: vtctldata.ReparentTabletResponse.primary:type_name -> topodata.TabletAlias
- 310, // 139: vtctldata.ReshardCreateRequest.tablet_types:type_name -> topodata.TabletType
- 298, // 140: vtctldata.ReshardCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
- 11, // 141: vtctldata.ReshardCreateRequest.workflow_options:type_name -> vtctldata.WorkflowOptions
- 301, // 142: vtctldata.RestoreFromBackupRequest.tablet_alias:type_name -> topodata.TabletAlias
- 300, // 143: vtctldata.RestoreFromBackupRequest.backup_time:type_name -> vttime.Time
- 300, // 144: vtctldata.RestoreFromBackupRequest.restore_to_timestamp:type_name -> vttime.Time
- 301, // 145: vtctldata.RestoreFromBackupResponse.tablet_alias:type_name -> topodata.TabletAlias
- 297, // 146: vtctldata.RestoreFromBackupResponse.event:type_name -> logutil.Event
- 281, // 147: vtctldata.RetrySchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.RetrySchemaMigrationResponse.RowsAffectedByShardEntry
- 301, // 148: vtctldata.RunHealthCheckRequest.tablet_alias:type_name -> topodata.TabletAlias
- 299, // 149: vtctldata.SetKeyspaceDurabilityPolicyResponse.keyspace:type_name -> topodata.Keyspace
- 299, // 150: vtctldata.SetKeyspaceShardingInfoResponse.keyspace:type_name -> topodata.Keyspace
- 303, // 151: vtctldata.SetShardIsPrimaryServingResponse.shard:type_name -> topodata.Shard
- 310, // 152: vtctldata.SetShardTabletControlRequest.tablet_type:type_name -> topodata.TabletType
- 303, // 153: vtctldata.SetShardTabletControlResponse.shard:type_name -> topodata.Shard
- 301, // 154: vtctldata.SetWritableRequest.tablet_alias:type_name -> topodata.TabletAlias
- 301, // 155: vtctldata.ShardReplicationAddRequest.tablet_alias:type_name -> topodata.TabletAlias
- 326, // 156: vtctldata.ShardReplicationFixResponse.error:type_name -> topodata.ShardReplicationError
- 282, // 157: vtctldata.ShardReplicationPositionsResponse.replication_statuses:type_name -> vtctldata.ShardReplicationPositionsResponse.ReplicationStatusesEntry
- 283, // 158: vtctldata.ShardReplicationPositionsResponse.tablet_map:type_name -> vtctldata.ShardReplicationPositionsResponse.TabletMapEntry
- 301, // 159: vtctldata.ShardReplicationRemoveRequest.tablet_alias:type_name -> topodata.TabletAlias
- 301, // 160: vtctldata.SleepTabletRequest.tablet_alias:type_name -> topodata.TabletAlias
- 302, // 161: vtctldata.SleepTabletRequest.duration:type_name -> vttime.Duration
- 327, // 162: vtctldata.SourceShardAddRequest.key_range:type_name -> topodata.KeyRange
- 303, // 163: vtctldata.SourceShardAddResponse.shard:type_name -> topodata.Shard
- 303, // 164: vtctldata.SourceShardDeleteResponse.shard:type_name -> topodata.Shard
- 301, // 165: vtctldata.StartReplicationRequest.tablet_alias:type_name -> topodata.TabletAlias
- 301, // 166: vtctldata.StopReplicationRequest.tablet_alias:type_name -> topodata.TabletAlias
- 301, // 167: vtctldata.TabletExternallyReparentedRequest.tablet:type_name -> topodata.TabletAlias
- 301, // 168: vtctldata.TabletExternallyReparentedResponse.new_primary:type_name -> topodata.TabletAlias
- 301, // 169: vtctldata.TabletExternallyReparentedResponse.old_primary:type_name -> topodata.TabletAlias
- 304, // 170: vtctldata.UpdateCellInfoRequest.cell_info:type_name -> topodata.CellInfo
- 304, // 171: vtctldata.UpdateCellInfoResponse.cell_info:type_name -> topodata.CellInfo
- 328, // 172: vtctldata.UpdateCellsAliasRequest.cells_alias:type_name -> topodata.CellsAlias
- 328, // 173: vtctldata.UpdateCellsAliasResponse.cells_alias:type_name -> topodata.CellsAlias
- 284, // 174: vtctldata.ValidateResponse.results_by_keyspace:type_name -> vtctldata.ValidateResponse.ResultsByKeyspaceEntry
- 285, // 175: vtctldata.ValidateKeyspaceResponse.results_by_shard:type_name -> vtctldata.ValidateKeyspaceResponse.ResultsByShardEntry
- 286, // 176: vtctldata.ValidateSchemaKeyspaceResponse.results_by_shard:type_name -> vtctldata.ValidateSchemaKeyspaceResponse.ResultsByShardEntry
- 287, // 177: vtctldata.ValidateVersionKeyspaceResponse.results_by_shard:type_name -> vtctldata.ValidateVersionKeyspaceResponse.ResultsByShardEntry
- 288, // 178: vtctldata.ValidateVSchemaResponse.results_by_shard:type_name -> vtctldata.ValidateVSchemaResponse.ResultsByShardEntry
- 310, // 179: vtctldata.VDiffCreateRequest.tablet_types:type_name -> topodata.TabletType
- 298, // 180: vtctldata.VDiffCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
- 302, // 181: vtctldata.VDiffCreateRequest.filtered_replication_wait_time:type_name -> vttime.Duration
- 302, // 182: vtctldata.VDiffCreateRequest.wait_update_interval:type_name -> vttime.Duration
- 302, // 183: vtctldata.VDiffCreateRequest.max_diff_duration:type_name -> vttime.Duration
- 289, // 184: vtctldata.VDiffShowResponse.tablet_responses:type_name -> vtctldata.VDiffShowResponse.TabletResponsesEntry
- 290, // 185: vtctldata.WorkflowDeleteResponse.details:type_name -> vtctldata.WorkflowDeleteResponse.TabletInfo
- 294, // 186: vtctldata.WorkflowStatusResponse.table_copy_state:type_name -> vtctldata.WorkflowStatusResponse.TableCopyStateEntry
- 295, // 187: vtctldata.WorkflowStatusResponse.shard_streams:type_name -> vtctldata.WorkflowStatusResponse.ShardStreamsEntry
- 310, // 188: vtctldata.WorkflowSwitchTrafficRequest.tablet_types:type_name -> topodata.TabletType
- 302, // 189: vtctldata.WorkflowSwitchTrafficRequest.max_replication_lag_allowed:type_name -> vttime.Duration
- 302, // 190: vtctldata.WorkflowSwitchTrafficRequest.timeout:type_name -> vttime.Duration
- 329, // 191: vtctldata.WorkflowUpdateRequest.tablet_request:type_name -> tabletmanagerdata.UpdateVReplicationWorkflowRequest
- 296, // 192: vtctldata.WorkflowUpdateResponse.details:type_name -> vtctldata.WorkflowUpdateResponse.TabletInfo
- 330, // 193: vtctldata.GetMirrorRulesResponse.mirror_rules:type_name -> vschema.MirrorRules
- 310, // 194: vtctldata.WorkflowMirrorTrafficRequest.tablet_types:type_name -> topodata.TabletType
- 260, // 195: vtctldata.Workflow.ShardStreamsEntry.value:type_name -> vtctldata.Workflow.ShardStream
- 261, // 196: vtctldata.Workflow.ShardStream.streams:type_name -> vtctldata.Workflow.Stream
- 331, // 197: vtctldata.Workflow.ShardStream.tablet_controls:type_name -> topodata.Shard.TabletControl
- 301, // 198: vtctldata.Workflow.Stream.tablet:type_name -> topodata.TabletAlias
- 332, // 199: vtctldata.Workflow.Stream.binlog_source:type_name -> binlogdata.BinlogSource
- 300, // 200: vtctldata.Workflow.Stream.transaction_timestamp:type_name -> vttime.Time
- 300, // 201: vtctldata.Workflow.Stream.time_updated:type_name -> vttime.Time
- 262, // 202: vtctldata.Workflow.Stream.copy_states:type_name -> vtctldata.Workflow.Stream.CopyState
- 263, // 203: vtctldata.Workflow.Stream.logs:type_name -> vtctldata.Workflow.Stream.Log
- 264, // 204: vtctldata.Workflow.Stream.throttler_status:type_name -> vtctldata.Workflow.Stream.ThrottlerStatus
- 310, // 205: vtctldata.Workflow.Stream.tablet_types:type_name -> topodata.TabletType
- 298, // 206: vtctldata.Workflow.Stream.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
- 300, // 207: vtctldata.Workflow.Stream.Log.created_at:type_name -> vttime.Time
- 300, // 208: vtctldata.Workflow.Stream.Log.updated_at:type_name -> vttime.Time
- 300, // 209: vtctldata.Workflow.Stream.ThrottlerStatus.time_throttled:type_name -> vttime.Time
- 267, // 210: vtctldata.ApplyVSchemaResponse.UnknownVindexParamsEntry.value:type_name -> vtctldata.ApplyVSchemaResponse.ParamList
- 10, // 211: vtctldata.FindAllShardsInKeyspaceResponse.ShardsEntry.value:type_name -> vtctldata.Shard
- 328, // 212: vtctldata.GetCellsAliasesResponse.AliasesEntry.value:type_name -> topodata.CellsAlias
- 333, // 213: vtctldata.GetShardReplicationResponse.ShardReplicationByCellEntry.value:type_name -> topodata.ShardReplication
- 276, // 214: vtctldata.GetSrvKeyspaceNamesResponse.NamesEntry.value:type_name -> vtctldata.GetSrvKeyspaceNamesResponse.NameList
- 334, // 215: vtctldata.GetSrvKeyspacesResponse.SrvKeyspacesEntry.value:type_name -> topodata.SrvKeyspace
- 322, // 216: vtctldata.GetSrvVSchemasResponse.SrvVSchemasEntry.value:type_name -> vschema.SrvVSchema
- 301, // 217: vtctldata.MoveTablesCreateResponse.TabletInfo.tablet:type_name -> topodata.TabletAlias
- 335, // 218: vtctldata.ShardReplicationPositionsResponse.ReplicationStatusesEntry.value:type_name -> replicationdata.Status
- 311, // 219: vtctldata.ShardReplicationPositionsResponse.TabletMapEntry.value:type_name -> topodata.Tablet
- 224, // 220: vtctldata.ValidateResponse.ResultsByKeyspaceEntry.value:type_name -> vtctldata.ValidateKeyspaceResponse
- 228, // 221: vtctldata.ValidateKeyspaceResponse.ResultsByShardEntry.value:type_name -> vtctldata.ValidateShardResponse
- 228, // 222: vtctldata.ValidateSchemaKeyspaceResponse.ResultsByShardEntry.value:type_name -> vtctldata.ValidateShardResponse
- 228, // 223: vtctldata.ValidateVersionKeyspaceResponse.ResultsByShardEntry.value:type_name -> vtctldata.ValidateShardResponse
- 228, // 224: vtctldata.ValidateVSchemaResponse.ResultsByShardEntry.value:type_name -> vtctldata.ValidateShardResponse
- 336, // 225: vtctldata.VDiffShowResponse.TabletResponsesEntry.value:type_name -> tabletmanagerdata.VDiffResponse
- 301, // 226: vtctldata.WorkflowDeleteResponse.TabletInfo.tablet:type_name -> topodata.TabletAlias
- 301, // 227: vtctldata.WorkflowStatusResponse.ShardStreamState.tablet:type_name -> topodata.TabletAlias
- 292, // 228: vtctldata.WorkflowStatusResponse.ShardStreams.streams:type_name -> vtctldata.WorkflowStatusResponse.ShardStreamState
- 291, // 229: vtctldata.WorkflowStatusResponse.TableCopyStateEntry.value:type_name -> vtctldata.WorkflowStatusResponse.TableCopyState
- 293, // 230: vtctldata.WorkflowStatusResponse.ShardStreamsEntry.value:type_name -> vtctldata.WorkflowStatusResponse.ShardStreams
- 301, // 231: vtctldata.WorkflowUpdateResponse.TabletInfo.tablet:type_name -> topodata.TabletAlias
- 232, // [232:232] is the sub-list for method output_type
- 232, // [232:232] is the sub-list for method input_type
- 232, // [232:232] is the sub-list for extension type_name
- 232, // [232:232] is the sub-list for extension extendee
- 0, // [0:232] is the sub-list for field type_name
+ 307, // 3: vtctldata.MaterializeSettings.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
+ 12, // 4: vtctldata.MaterializeSettings.workflow_options:type_name -> vtctldata.WorkflowOptions
+ 308, // 5: vtctldata.Keyspace.keyspace:type_name -> topodata.Keyspace
+ 3, // 6: vtctldata.SchemaMigration.strategy:type_name -> vtctldata.SchemaMigration.Strategy
+ 309, // 7: vtctldata.SchemaMigration.added_at:type_name -> vttime.Time
+ 309, // 8: vtctldata.SchemaMigration.requested_at:type_name -> vttime.Time
+ 309, // 9: vtctldata.SchemaMigration.ready_at:type_name -> vttime.Time
+ 309, // 10: vtctldata.SchemaMigration.started_at:type_name -> vttime.Time
+ 309, // 11: vtctldata.SchemaMigration.liveness_timestamp:type_name -> vttime.Time
+ 309, // 12: vtctldata.SchemaMigration.completed_at:type_name -> vttime.Time
+ 309, // 13: vtctldata.SchemaMigration.cleaned_up_at:type_name -> vttime.Time
+ 4, // 14: vtctldata.SchemaMigration.status:type_name -> vtctldata.SchemaMigration.Status
+ 310, // 15: vtctldata.SchemaMigration.tablet:type_name -> topodata.TabletAlias
+ 311, // 16: vtctldata.SchemaMigration.artifact_retention:type_name -> vttime.Duration
+ 309, // 17: vtctldata.SchemaMigration.last_throttled_at:type_name -> vttime.Time
+ 309, // 18: vtctldata.SchemaMigration.cancelled_at:type_name -> vttime.Time
+ 309, // 19: vtctldata.SchemaMigration.reviewed_at:type_name -> vttime.Time
+ 309, // 20: vtctldata.SchemaMigration.ready_to_complete_at:type_name -> vttime.Time
+ 312, // 21: vtctldata.Shard.shard:type_name -> topodata.Shard
+ 2, // 22: vtctldata.WorkflowOptions.sharded_auto_increment_handling:type_name -> vtctldata.ShardedAutoIncrementHandling
+ 263, // 23: vtctldata.WorkflowOptions.config:type_name -> vtctldata.WorkflowOptions.ConfigEntry
+ 265, // 24: vtctldata.Workflow.source:type_name -> vtctldata.Workflow.ReplicationLocation
+ 265, // 25: vtctldata.Workflow.target:type_name -> vtctldata.Workflow.ReplicationLocation
+ 264, // 26: vtctldata.Workflow.shard_streams:type_name -> vtctldata.Workflow.ShardStreamsEntry
+ 12, // 27: vtctldata.Workflow.options:type_name -> vtctldata.WorkflowOptions
+ 313, // 28: vtctldata.AddCellInfoRequest.cell_info:type_name -> topodata.CellInfo
+ 314, // 29: vtctldata.ApplyKeyspaceRoutingRulesRequest.keyspace_routing_rules:type_name -> vschema.KeyspaceRoutingRules
+ 314, // 30: vtctldata.ApplyKeyspaceRoutingRulesResponse.keyspace_routing_rules:type_name -> vschema.KeyspaceRoutingRules
+ 315, // 31: vtctldata.ApplyRoutingRulesRequest.routing_rules:type_name -> vschema.RoutingRules
+ 316, // 32: vtctldata.ApplyShardRoutingRulesRequest.shard_routing_rules:type_name -> vschema.ShardRoutingRules
+ 311, // 33: vtctldata.ApplySchemaRequest.wait_replicas_timeout:type_name -> vttime.Duration
+ 317, // 34: vtctldata.ApplySchemaRequest.caller_id:type_name -> vtrpc.CallerID
+ 271, // 35: vtctldata.ApplySchemaResponse.rows_affected_by_shard:type_name -> vtctldata.ApplySchemaResponse.RowsAffectedByShardEntry
+ 318, // 36: vtctldata.ApplyVSchemaRequest.v_schema:type_name -> vschema.Keyspace
+ 318, // 37: vtctldata.ApplyVSchemaResponse.v_schema:type_name -> vschema.Keyspace
+ 272, // 38: vtctldata.ApplyVSchemaResponse.unknown_vindex_params:type_name -> vtctldata.ApplyVSchemaResponse.UnknownVindexParamsEntry
+ 310, // 39: vtctldata.BackupRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 310, // 40: vtctldata.BackupResponse.tablet_alias:type_name -> topodata.TabletAlias
+ 306, // 41: vtctldata.BackupResponse.event:type_name -> logutil.Event
+ 274, // 42: vtctldata.CancelSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.CancelSchemaMigrationResponse.RowsAffectedByShardEntry
+ 310, // 43: vtctldata.ChangeTabletTagsRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 275, // 44: vtctldata.ChangeTabletTagsRequest.tags:type_name -> vtctldata.ChangeTabletTagsRequest.TagsEntry
+ 276, // 45: vtctldata.ChangeTabletTagsResponse.before_tags:type_name -> vtctldata.ChangeTabletTagsResponse.BeforeTagsEntry
+ 277, // 46: vtctldata.ChangeTabletTagsResponse.after_tags:type_name -> vtctldata.ChangeTabletTagsResponse.AfterTagsEntry
+ 310, // 47: vtctldata.ChangeTabletTypeRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 319, // 48: vtctldata.ChangeTabletTypeRequest.db_type:type_name -> topodata.TabletType
+ 320, // 49: vtctldata.ChangeTabletTypeResponse.before_tablet:type_name -> topodata.Tablet
+ 320, // 50: vtctldata.ChangeTabletTypeResponse.after_tablet:type_name -> topodata.Tablet
+ 310, // 51: vtctldata.CheckThrottlerRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 310, // 52: vtctldata.CheckThrottlerResponse.tablet_alias:type_name -> topodata.TabletAlias
+ 321, // 53: vtctldata.CheckThrottlerResponse.Check:type_name -> tabletmanagerdata.CheckThrottlerResponse
+ 278, // 54: vtctldata.CleanupSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.CleanupSchemaMigrationResponse.RowsAffectedByShardEntry
+ 279, // 55: vtctldata.CompleteSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.CompleteSchemaMigrationResponse.RowsAffectedByShardEntry
+ 322, // 56: vtctldata.CreateKeyspaceRequest.type:type_name -> topodata.KeyspaceType
+ 309, // 57: vtctldata.CreateKeyspaceRequest.snapshot_time:type_name -> vttime.Time
+ 9, // 58: vtctldata.CreateKeyspaceResponse.keyspace:type_name -> vtctldata.Keyspace
+ 9, // 59: vtctldata.CreateShardResponse.keyspace:type_name -> vtctldata.Keyspace
+ 11, // 60: vtctldata.CreateShardResponse.shard:type_name -> vtctldata.Shard
+ 11, // 61: vtctldata.DeleteShardsRequest.shards:type_name -> vtctldata.Shard
+ 310, // 62: vtctldata.DeleteTabletsRequest.tablet_aliases:type_name -> topodata.TabletAlias
+ 310, // 63: vtctldata.EmergencyReparentShardRequest.new_primary:type_name -> topodata.TabletAlias
+ 310, // 64: vtctldata.EmergencyReparentShardRequest.ignore_replicas:type_name -> topodata.TabletAlias
+ 311, // 65: vtctldata.EmergencyReparentShardRequest.wait_replicas_timeout:type_name -> vttime.Duration
+ 310, // 66: vtctldata.EmergencyReparentShardRequest.expected_primary:type_name -> topodata.TabletAlias
+ 310, // 67: vtctldata.EmergencyReparentShardResponse.promoted_primary:type_name -> topodata.TabletAlias
+ 306, // 68: vtctldata.EmergencyReparentShardResponse.events:type_name -> logutil.Event
+ 310, // 69: vtctldata.ExecuteFetchAsAppRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 323, // 70: vtctldata.ExecuteFetchAsAppResponse.result:type_name -> query.QueryResult
+ 310, // 71: vtctldata.ExecuteFetchAsDBARequest.tablet_alias:type_name -> topodata.TabletAlias
+ 323, // 72: vtctldata.ExecuteFetchAsDBAResponse.result:type_name -> query.QueryResult
+ 310, // 73: vtctldata.ExecuteHookRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 324, // 74: vtctldata.ExecuteHookRequest.tablet_hook_request:type_name -> tabletmanagerdata.ExecuteHookRequest
+ 325, // 75: vtctldata.ExecuteHookResponse.hook_result:type_name -> tabletmanagerdata.ExecuteHookResponse
+ 310, // 76: vtctldata.ExecuteMultiFetchAsDBARequest.tablet_alias:type_name -> topodata.TabletAlias
+ 323, // 77: vtctldata.ExecuteMultiFetchAsDBAResponse.results:type_name -> query.QueryResult
+ 280, // 78: vtctldata.FindAllShardsInKeyspaceResponse.shards:type_name -> vtctldata.FindAllShardsInKeyspaceResponse.ShardsEntry
+ 281, // 79: vtctldata.ForceCutOverSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.ForceCutOverSchemaMigrationResponse.RowsAffectedByShardEntry
+ 326, // 80: vtctldata.GetBackupsResponse.backups:type_name -> mysqlctl.BackupInfo
+ 313, // 81: vtctldata.GetCellInfoResponse.cell_info:type_name -> topodata.CellInfo
+ 282, // 82: vtctldata.GetCellsAliasesResponse.aliases:type_name -> vtctldata.GetCellsAliasesResponse.AliasesEntry
+ 310, // 83: vtctldata.GetFullStatusRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 327, // 84: vtctldata.GetFullStatusResponse.status:type_name -> replicationdata.FullStatus
+ 9, // 85: vtctldata.GetKeyspacesResponse.keyspaces:type_name -> vtctldata.Keyspace
+ 9, // 86: vtctldata.GetKeyspaceResponse.keyspace:type_name -> vtctldata.Keyspace
+ 310, // 87: vtctldata.GetPermissionsRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 328, // 88: vtctldata.GetPermissionsResponse.permissions:type_name -> tabletmanagerdata.Permissions
+ 314, // 89: vtctldata.GetKeyspaceRoutingRulesResponse.keyspace_routing_rules:type_name -> vschema.KeyspaceRoutingRules
+ 315, // 90: vtctldata.GetRoutingRulesResponse.routing_rules:type_name -> vschema.RoutingRules
+ 310, // 91: vtctldata.GetSchemaRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 329, // 92: vtctldata.GetSchemaResponse.schema:type_name -> tabletmanagerdata.SchemaDefinition
+ 4, // 93: vtctldata.GetSchemaMigrationsRequest.status:type_name -> vtctldata.SchemaMigration.Status
+ 311, // 94: vtctldata.GetSchemaMigrationsRequest.recent:type_name -> vttime.Duration
+ 1, // 95: vtctldata.GetSchemaMigrationsRequest.order:type_name -> vtctldata.QueryOrdering
+ 10, // 96: vtctldata.GetSchemaMigrationsResponse.migrations:type_name -> vtctldata.SchemaMigration
+ 283, // 97: vtctldata.GetShardReplicationResponse.shard_replication_by_cell:type_name -> vtctldata.GetShardReplicationResponse.ShardReplicationByCellEntry
+ 11, // 98: vtctldata.GetShardResponse.shard:type_name -> vtctldata.Shard
+ 316, // 99: vtctldata.GetShardRoutingRulesResponse.shard_routing_rules:type_name -> vschema.ShardRoutingRules
+ 284, // 100: vtctldata.GetSrvKeyspaceNamesResponse.names:type_name -> vtctldata.GetSrvKeyspaceNamesResponse.NamesEntry
+ 286, // 101: vtctldata.GetSrvKeyspacesResponse.srv_keyspaces:type_name -> vtctldata.GetSrvKeyspacesResponse.SrvKeyspacesEntry
+ 330, // 102: vtctldata.UpdateThrottlerConfigRequest.throttled_app:type_name -> topodata.ThrottledAppRule
+ 331, // 103: vtctldata.GetSrvVSchemaResponse.srv_v_schema:type_name -> vschema.SrvVSchema
+ 287, // 104: vtctldata.GetSrvVSchemasResponse.srv_v_schemas:type_name -> vtctldata.GetSrvVSchemasResponse.SrvVSchemasEntry
+ 310, // 105: vtctldata.GetTabletRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 320, // 106: vtctldata.GetTabletResponse.tablet:type_name -> topodata.Tablet
+ 310, // 107: vtctldata.GetTabletsRequest.tablet_aliases:type_name -> topodata.TabletAlias
+ 319, // 108: vtctldata.GetTabletsRequest.tablet_type:type_name -> topodata.TabletType
+ 320, // 109: vtctldata.GetTabletsResponse.tablets:type_name -> topodata.Tablet
+ 310, // 110: vtctldata.GetThrottlerStatusRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 332, // 111: vtctldata.GetThrottlerStatusResponse.status:type_name -> tabletmanagerdata.GetThrottlerStatusResponse
+ 121, // 112: vtctldata.GetTopologyPathResponse.cell:type_name -> vtctldata.TopologyCell
+ 333, // 113: vtctldata.GetUnresolvedTransactionsResponse.transactions:type_name -> query.TransactionMetadata
+ 333, // 114: vtctldata.GetTransactionInfoResponse.metadata:type_name -> query.TransactionMetadata
+ 125, // 115: vtctldata.GetTransactionInfoResponse.shard_states:type_name -> vtctldata.ShardTransactionState
+ 334, // 116: vtctldata.ConcludeTransactionRequest.participants:type_name -> query.Target
+ 310, // 117: vtctldata.GetVersionRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 318, // 118: vtctldata.GetVSchemaResponse.v_schema:type_name -> vschema.Keyspace
+ 13, // 119: vtctldata.GetWorkflowsResponse.workflows:type_name -> vtctldata.Workflow
+ 310, // 120: vtctldata.InitShardPrimaryRequest.primary_elect_tablet_alias:type_name -> topodata.TabletAlias
+ 311, // 121: vtctldata.InitShardPrimaryRequest.wait_replicas_timeout:type_name -> vttime.Duration
+ 306, // 122: vtctldata.InitShardPrimaryResponse.events:type_name -> logutil.Event
+ 288, // 123: vtctldata.LaunchSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.LaunchSchemaMigrationResponse.RowsAffectedByShardEntry
+ 318, // 124: vtctldata.LookupVindexCreateRequest.vindex:type_name -> vschema.Keyspace
+ 319, // 125: vtctldata.LookupVindexCreateRequest.tablet_types:type_name -> topodata.TabletType
+ 307, // 126: vtctldata.LookupVindexCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
+ 8, // 127: vtctldata.MaterializeCreateRequest.settings:type_name -> vtctldata.MaterializeSettings
+ 319, // 128: vtctldata.MigrateCreateRequest.tablet_types:type_name -> topodata.TabletType
+ 307, // 129: vtctldata.MigrateCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
+ 319, // 130: vtctldata.MoveTablesCreateRequest.tablet_types:type_name -> topodata.TabletType
+ 307, // 131: vtctldata.MoveTablesCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
+ 12, // 132: vtctldata.MoveTablesCreateRequest.workflow_options:type_name -> vtctldata.WorkflowOptions
+ 289, // 133: vtctldata.MoveTablesCreateResponse.details:type_name -> vtctldata.MoveTablesCreateResponse.TabletInfo
+ 310, // 134: vtctldata.PingTabletRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 310, // 135: vtctldata.PlannedReparentShardRequest.new_primary:type_name -> topodata.TabletAlias
+ 310, // 136: vtctldata.PlannedReparentShardRequest.avoid_primary:type_name -> topodata.TabletAlias
+ 311, // 137: vtctldata.PlannedReparentShardRequest.wait_replicas_timeout:type_name -> vttime.Duration
+ 311, // 138: vtctldata.PlannedReparentShardRequest.tolerable_replication_lag:type_name -> vttime.Duration
+ 310, // 139: vtctldata.PlannedReparentShardRequest.expected_primary:type_name -> topodata.TabletAlias
+ 310, // 140: vtctldata.PlannedReparentShardResponse.promoted_primary:type_name -> topodata.TabletAlias
+ 306, // 141: vtctldata.PlannedReparentShardResponse.events:type_name -> logutil.Event
+ 310, // 142: vtctldata.RefreshStateRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 310, // 143: vtctldata.ReloadSchemaRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 306, // 144: vtctldata.ReloadSchemaKeyspaceResponse.events:type_name -> logutil.Event
+ 306, // 145: vtctldata.ReloadSchemaShardResponse.events:type_name -> logutil.Event
+ 310, // 146: vtctldata.ReparentTabletRequest.tablet:type_name -> topodata.TabletAlias
+ 310, // 147: vtctldata.ReparentTabletResponse.primary:type_name -> topodata.TabletAlias
+ 319, // 148: vtctldata.ReshardCreateRequest.tablet_types:type_name -> topodata.TabletType
+ 307, // 149: vtctldata.ReshardCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
+ 12, // 150: vtctldata.ReshardCreateRequest.workflow_options:type_name -> vtctldata.WorkflowOptions
+ 310, // 151: vtctldata.RestoreFromBackupRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 309, // 152: vtctldata.RestoreFromBackupRequest.backup_time:type_name -> vttime.Time
+ 309, // 153: vtctldata.RestoreFromBackupRequest.restore_to_timestamp:type_name -> vttime.Time
+ 310, // 154: vtctldata.RestoreFromBackupResponse.tablet_alias:type_name -> topodata.TabletAlias
+ 306, // 155: vtctldata.RestoreFromBackupResponse.event:type_name -> logutil.Event
+ 290, // 156: vtctldata.RetrySchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.RetrySchemaMigrationResponse.RowsAffectedByShardEntry
+ 310, // 157: vtctldata.RunHealthCheckRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 308, // 158: vtctldata.SetKeyspaceDurabilityPolicyResponse.keyspace:type_name -> topodata.Keyspace
+ 308, // 159: vtctldata.SetKeyspaceShardingInfoResponse.keyspace:type_name -> topodata.Keyspace
+ 312, // 160: vtctldata.SetShardIsPrimaryServingResponse.shard:type_name -> topodata.Shard
+ 319, // 161: vtctldata.SetShardTabletControlRequest.tablet_type:type_name -> topodata.TabletType
+ 312, // 162: vtctldata.SetShardTabletControlResponse.shard:type_name -> topodata.Shard
+ 310, // 163: vtctldata.SetWritableRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 310, // 164: vtctldata.ShardReplicationAddRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 335, // 165: vtctldata.ShardReplicationFixResponse.error:type_name -> topodata.ShardReplicationError
+ 291, // 166: vtctldata.ShardReplicationPositionsResponse.replication_statuses:type_name -> vtctldata.ShardReplicationPositionsResponse.ReplicationStatusesEntry
+ 292, // 167: vtctldata.ShardReplicationPositionsResponse.tablet_map:type_name -> vtctldata.ShardReplicationPositionsResponse.TabletMapEntry
+ 310, // 168: vtctldata.ShardReplicationRemoveRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 310, // 169: vtctldata.SleepTabletRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 311, // 170: vtctldata.SleepTabletRequest.duration:type_name -> vttime.Duration
+ 336, // 171: vtctldata.SourceShardAddRequest.key_range:type_name -> topodata.KeyRange
+ 312, // 172: vtctldata.SourceShardAddResponse.shard:type_name -> topodata.Shard
+ 312, // 173: vtctldata.SourceShardDeleteResponse.shard:type_name -> topodata.Shard
+ 310, // 174: vtctldata.StartReplicationRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 310, // 175: vtctldata.StopReplicationRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 310, // 176: vtctldata.TabletExternallyReparentedRequest.tablet:type_name -> topodata.TabletAlias
+ 310, // 177: vtctldata.TabletExternallyReparentedResponse.new_primary:type_name -> topodata.TabletAlias
+ 310, // 178: vtctldata.TabletExternallyReparentedResponse.old_primary:type_name -> topodata.TabletAlias
+ 313, // 179: vtctldata.UpdateCellInfoRequest.cell_info:type_name -> topodata.CellInfo
+ 313, // 180: vtctldata.UpdateCellInfoResponse.cell_info:type_name -> topodata.CellInfo
+ 337, // 181: vtctldata.UpdateCellsAliasRequest.cells_alias:type_name -> topodata.CellsAlias
+ 337, // 182: vtctldata.UpdateCellsAliasResponse.cells_alias:type_name -> topodata.CellsAlias
+ 293, // 183: vtctldata.ValidateResponse.results_by_keyspace:type_name -> vtctldata.ValidateResponse.ResultsByKeyspaceEntry
+ 294, // 184: vtctldata.ValidateKeyspaceResponse.results_by_shard:type_name -> vtctldata.ValidateKeyspaceResponse.ResultsByShardEntry
+ 295, // 185: vtctldata.ValidateSchemaKeyspaceResponse.results_by_shard:type_name -> vtctldata.ValidateSchemaKeyspaceResponse.ResultsByShardEntry
+ 296, // 186: vtctldata.ValidateVersionKeyspaceResponse.results_by_shard:type_name -> vtctldata.ValidateVersionKeyspaceResponse.ResultsByShardEntry
+ 297, // 187: vtctldata.ValidateVSchemaResponse.results_by_shard:type_name -> vtctldata.ValidateVSchemaResponse.ResultsByShardEntry
+ 319, // 188: vtctldata.VDiffCreateRequest.tablet_types:type_name -> topodata.TabletType
+ 307, // 189: vtctldata.VDiffCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
+ 311, // 190: vtctldata.VDiffCreateRequest.filtered_replication_wait_time:type_name -> vttime.Duration
+ 311, // 191: vtctldata.VDiffCreateRequest.wait_update_interval:type_name -> vttime.Duration
+ 311, // 192: vtctldata.VDiffCreateRequest.max_diff_duration:type_name -> vttime.Duration
+ 298, // 193: vtctldata.VDiffShowResponse.tablet_responses:type_name -> vtctldata.VDiffShowResponse.TabletResponsesEntry
+ 299, // 194: vtctldata.WorkflowDeleteResponse.details:type_name -> vtctldata.WorkflowDeleteResponse.TabletInfo
+ 303, // 195: vtctldata.WorkflowStatusResponse.table_copy_state:type_name -> vtctldata.WorkflowStatusResponse.TableCopyStateEntry
+ 304, // 196: vtctldata.WorkflowStatusResponse.shard_streams:type_name -> vtctldata.WorkflowStatusResponse.ShardStreamsEntry
+ 319, // 197: vtctldata.WorkflowSwitchTrafficRequest.tablet_types:type_name -> topodata.TabletType
+ 311, // 198: vtctldata.WorkflowSwitchTrafficRequest.max_replication_lag_allowed:type_name -> vttime.Duration
+ 311, // 199: vtctldata.WorkflowSwitchTrafficRequest.timeout:type_name -> vttime.Duration
+ 338, // 200: vtctldata.WorkflowUpdateRequest.tablet_request:type_name -> tabletmanagerdata.UpdateVReplicationWorkflowRequest
+ 305, // 201: vtctldata.WorkflowUpdateResponse.details:type_name -> vtctldata.WorkflowUpdateResponse.TabletInfo
+ 339, // 202: vtctldata.GetMirrorRulesResponse.mirror_rules:type_name -> vschema.MirrorRules
+ 319, // 203: vtctldata.WorkflowMirrorTrafficRequest.tablet_types:type_name -> topodata.TabletType
+ 266, // 204: vtctldata.Workflow.ShardStreamsEntry.value:type_name -> vtctldata.Workflow.ShardStream
+ 267, // 205: vtctldata.Workflow.ShardStream.streams:type_name -> vtctldata.Workflow.Stream
+ 340, // 206: vtctldata.Workflow.ShardStream.tablet_controls:type_name -> topodata.Shard.TabletControl
+ 310, // 207: vtctldata.Workflow.Stream.tablet:type_name -> topodata.TabletAlias
+ 341, // 208: vtctldata.Workflow.Stream.binlog_source:type_name -> binlogdata.BinlogSource
+ 309, // 209: vtctldata.Workflow.Stream.transaction_timestamp:type_name -> vttime.Time
+ 309, // 210: vtctldata.Workflow.Stream.time_updated:type_name -> vttime.Time
+ 268, // 211: vtctldata.Workflow.Stream.copy_states:type_name -> vtctldata.Workflow.Stream.CopyState
+ 269, // 212: vtctldata.Workflow.Stream.logs:type_name -> vtctldata.Workflow.Stream.Log
+ 270, // 213: vtctldata.Workflow.Stream.throttler_status:type_name -> vtctldata.Workflow.Stream.ThrottlerStatus
+ 319, // 214: vtctldata.Workflow.Stream.tablet_types:type_name -> topodata.TabletType
+ 307, // 215: vtctldata.Workflow.Stream.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
+ 309, // 216: vtctldata.Workflow.Stream.Log.created_at:type_name -> vttime.Time
+ 309, // 217: vtctldata.Workflow.Stream.Log.updated_at:type_name -> vttime.Time
+ 309, // 218: vtctldata.Workflow.Stream.ThrottlerStatus.time_throttled:type_name -> vttime.Time
+ 273, // 219: vtctldata.ApplyVSchemaResponse.UnknownVindexParamsEntry.value:type_name -> vtctldata.ApplyVSchemaResponse.ParamList
+ 11, // 220: vtctldata.FindAllShardsInKeyspaceResponse.ShardsEntry.value:type_name -> vtctldata.Shard
+ 337, // 221: vtctldata.GetCellsAliasesResponse.AliasesEntry.value:type_name -> topodata.CellsAlias
+ 342, // 222: vtctldata.GetShardReplicationResponse.ShardReplicationByCellEntry.value:type_name -> topodata.ShardReplication
+ 285, // 223: vtctldata.GetSrvKeyspaceNamesResponse.NamesEntry.value:type_name -> vtctldata.GetSrvKeyspaceNamesResponse.NameList
+ 343, // 224: vtctldata.GetSrvKeyspacesResponse.SrvKeyspacesEntry.value:type_name -> topodata.SrvKeyspace
+ 331, // 225: vtctldata.GetSrvVSchemasResponse.SrvVSchemasEntry.value:type_name -> vschema.SrvVSchema
+ 310, // 226: vtctldata.MoveTablesCreateResponse.TabletInfo.tablet:type_name -> topodata.TabletAlias
+ 344, // 227: vtctldata.ShardReplicationPositionsResponse.ReplicationStatusesEntry.value:type_name -> replicationdata.Status
+ 320, // 228: vtctldata.ShardReplicationPositionsResponse.TabletMapEntry.value:type_name -> topodata.Tablet
+ 230, // 229: vtctldata.ValidateResponse.ResultsByKeyspaceEntry.value:type_name -> vtctldata.ValidateKeyspaceResponse
+ 234, // 230: vtctldata.ValidateKeyspaceResponse.ResultsByShardEntry.value:type_name -> vtctldata.ValidateShardResponse
+ 234, // 231: vtctldata.ValidateSchemaKeyspaceResponse.ResultsByShardEntry.value:type_name -> vtctldata.ValidateShardResponse
+ 234, // 232: vtctldata.ValidateVersionKeyspaceResponse.ResultsByShardEntry.value:type_name -> vtctldata.ValidateShardResponse
+ 234, // 233: vtctldata.ValidateVSchemaResponse.ResultsByShardEntry.value:type_name -> vtctldata.ValidateShardResponse
+ 345, // 234: vtctldata.VDiffShowResponse.TabletResponsesEntry.value:type_name -> tabletmanagerdata.VDiffResponse
+ 310, // 235: vtctldata.WorkflowDeleteResponse.TabletInfo.tablet:type_name -> topodata.TabletAlias
+ 310, // 236: vtctldata.WorkflowStatusResponse.ShardStreamState.tablet:type_name -> topodata.TabletAlias
+ 301, // 237: vtctldata.WorkflowStatusResponse.ShardStreams.streams:type_name -> vtctldata.WorkflowStatusResponse.ShardStreamState
+ 300, // 238: vtctldata.WorkflowStatusResponse.TableCopyStateEntry.value:type_name -> vtctldata.WorkflowStatusResponse.TableCopyState
+ 302, // 239: vtctldata.WorkflowStatusResponse.ShardStreamsEntry.value:type_name -> vtctldata.WorkflowStatusResponse.ShardStreams
+ 310, // 240: vtctldata.WorkflowUpdateResponse.TabletInfo.tablet:type_name -> topodata.TabletAlias
+ 241, // [241:241] is the sub-list for method output_type
+ 241, // [241:241] is the sub-list for method input_type
+ 241, // [241:241] is the sub-list for extension type_name
+ 241, // [241:241] is the sub-list for extension extendee
+ 0, // [0:241] is the sub-list for field type_name
}
func init() { file_vtctldata_proto_init() }
@@ -20003,3221 +20003,15 @@ func file_vtctldata_proto_init() {
if File_vtctldata_proto != nil {
return
}
- if !protoimpl.UnsafeEnabled {
- file_vtctldata_proto_msgTypes[0].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteVtctlCommandRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[1].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteVtctlCommandResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[2].Exporter = func(v any, i int) any {
- switch v := v.(*TableMaterializeSettings); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[3].Exporter = func(v any, i int) any {
- switch v := v.(*MaterializeSettings); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[4].Exporter = func(v any, i int) any {
- switch v := v.(*Keyspace); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[5].Exporter = func(v any, i int) any {
- switch v := v.(*SchemaMigration); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[6].Exporter = func(v any, i int) any {
- switch v := v.(*Shard); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[7].Exporter = func(v any, i int) any {
- switch v := v.(*WorkflowOptions); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[8].Exporter = func(v any, i int) any {
- switch v := v.(*Workflow); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[9].Exporter = func(v any, i int) any {
- switch v := v.(*AddCellInfoRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[10].Exporter = func(v any, i int) any {
- switch v := v.(*AddCellInfoResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[11].Exporter = func(v any, i int) any {
- switch v := v.(*AddCellsAliasRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[12].Exporter = func(v any, i int) any {
- switch v := v.(*AddCellsAliasResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[13].Exporter = func(v any, i int) any {
- switch v := v.(*ApplyKeyspaceRoutingRulesRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[14].Exporter = func(v any, i int) any {
- switch v := v.(*ApplyKeyspaceRoutingRulesResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[15].Exporter = func(v any, i int) any {
- switch v := v.(*ApplyRoutingRulesRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[16].Exporter = func(v any, i int) any {
- switch v := v.(*ApplyRoutingRulesResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[17].Exporter = func(v any, i int) any {
- switch v := v.(*ApplyShardRoutingRulesRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[18].Exporter = func(v any, i int) any {
- switch v := v.(*ApplyShardRoutingRulesResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[19].Exporter = func(v any, i int) any {
- switch v := v.(*ApplySchemaRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[20].Exporter = func(v any, i int) any {
- switch v := v.(*ApplySchemaResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[21].Exporter = func(v any, i int) any {
- switch v := v.(*ApplyVSchemaRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[22].Exporter = func(v any, i int) any {
- switch v := v.(*ApplyVSchemaResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[23].Exporter = func(v any, i int) any {
- switch v := v.(*BackupRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[24].Exporter = func(v any, i int) any {
- switch v := v.(*BackupResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[25].Exporter = func(v any, i int) any {
- switch v := v.(*BackupShardRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[26].Exporter = func(v any, i int) any {
- switch v := v.(*CancelSchemaMigrationRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[27].Exporter = func(v any, i int) any {
- switch v := v.(*CancelSchemaMigrationResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[28].Exporter = func(v any, i int) any {
- switch v := v.(*ChangeTabletTypeRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[29].Exporter = func(v any, i int) any {
- switch v := v.(*ChangeTabletTypeResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[30].Exporter = func(v any, i int) any {
- switch v := v.(*CheckThrottlerRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[31].Exporter = func(v any, i int) any {
- switch v := v.(*CheckThrottlerResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[32].Exporter = func(v any, i int) any {
- switch v := v.(*CleanupSchemaMigrationRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[33].Exporter = func(v any, i int) any {
- switch v := v.(*CleanupSchemaMigrationResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[34].Exporter = func(v any, i int) any {
- switch v := v.(*CompleteSchemaMigrationRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[35].Exporter = func(v any, i int) any {
- switch v := v.(*CompleteSchemaMigrationResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[36].Exporter = func(v any, i int) any {
- switch v := v.(*CreateKeyspaceRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[37].Exporter = func(v any, i int) any {
- switch v := v.(*CreateKeyspaceResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[38].Exporter = func(v any, i int) any {
- switch v := v.(*CreateShardRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[39].Exporter = func(v any, i int) any {
- switch v := v.(*CreateShardResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[40].Exporter = func(v any, i int) any {
- switch v := v.(*DeleteCellInfoRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[41].Exporter = func(v any, i int) any {
- switch v := v.(*DeleteCellInfoResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[42].Exporter = func(v any, i int) any {
- switch v := v.(*DeleteCellsAliasRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[43].Exporter = func(v any, i int) any {
- switch v := v.(*DeleteCellsAliasResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[44].Exporter = func(v any, i int) any {
- switch v := v.(*DeleteKeyspaceRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[45].Exporter = func(v any, i int) any {
- switch v := v.(*DeleteKeyspaceResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[46].Exporter = func(v any, i int) any {
- switch v := v.(*DeleteShardsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[47].Exporter = func(v any, i int) any {
- switch v := v.(*DeleteShardsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[48].Exporter = func(v any, i int) any {
- switch v := v.(*DeleteSrvVSchemaRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[49].Exporter = func(v any, i int) any {
- switch v := v.(*DeleteSrvVSchemaResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[50].Exporter = func(v any, i int) any {
- switch v := v.(*DeleteTabletsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[51].Exporter = func(v any, i int) any {
- switch v := v.(*DeleteTabletsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[52].Exporter = func(v any, i int) any {
- switch v := v.(*EmergencyReparentShardRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[53].Exporter = func(v any, i int) any {
- switch v := v.(*EmergencyReparentShardResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[54].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteFetchAsAppRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[55].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteFetchAsAppResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[56].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteFetchAsDBARequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[57].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteFetchAsDBAResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[58].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteHookRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[59].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteHookResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[60].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteMultiFetchAsDBARequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[61].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteMultiFetchAsDBAResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[62].Exporter = func(v any, i int) any {
- switch v := v.(*FindAllShardsInKeyspaceRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[63].Exporter = func(v any, i int) any {
- switch v := v.(*FindAllShardsInKeyspaceResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[64].Exporter = func(v any, i int) any {
- switch v := v.(*ForceCutOverSchemaMigrationRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[65].Exporter = func(v any, i int) any {
- switch v := v.(*ForceCutOverSchemaMigrationResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[66].Exporter = func(v any, i int) any {
- switch v := v.(*GetBackupsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[67].Exporter = func(v any, i int) any {
- switch v := v.(*GetBackupsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[68].Exporter = func(v any, i int) any {
- switch v := v.(*GetCellInfoRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[69].Exporter = func(v any, i int) any {
- switch v := v.(*GetCellInfoResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[70].Exporter = func(v any, i int) any {
- switch v := v.(*GetCellInfoNamesRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[71].Exporter = func(v any, i int) any {
- switch v := v.(*GetCellInfoNamesResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[72].Exporter = func(v any, i int) any {
- switch v := v.(*GetCellsAliasesRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[73].Exporter = func(v any, i int) any {
- switch v := v.(*GetCellsAliasesResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[74].Exporter = func(v any, i int) any {
- switch v := v.(*GetFullStatusRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[75].Exporter = func(v any, i int) any {
- switch v := v.(*GetFullStatusResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[76].Exporter = func(v any, i int) any {
- switch v := v.(*GetKeyspacesRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[77].Exporter = func(v any, i int) any {
- switch v := v.(*GetKeyspacesResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[78].Exporter = func(v any, i int) any {
- switch v := v.(*GetKeyspaceRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[79].Exporter = func(v any, i int) any {
- switch v := v.(*GetKeyspaceResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[80].Exporter = func(v any, i int) any {
- switch v := v.(*GetPermissionsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[81].Exporter = func(v any, i int) any {
- switch v := v.(*GetPermissionsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[82].Exporter = func(v any, i int) any {
- switch v := v.(*GetKeyspaceRoutingRulesRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[83].Exporter = func(v any, i int) any {
- switch v := v.(*GetKeyspaceRoutingRulesResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[84].Exporter = func(v any, i int) any {
- switch v := v.(*GetRoutingRulesRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[85].Exporter = func(v any, i int) any {
- switch v := v.(*GetRoutingRulesResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[86].Exporter = func(v any, i int) any {
- switch v := v.(*GetSchemaRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[87].Exporter = func(v any, i int) any {
- switch v := v.(*GetSchemaResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[88].Exporter = func(v any, i int) any {
- switch v := v.(*GetSchemaMigrationsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[89].Exporter = func(v any, i int) any {
- switch v := v.(*GetSchemaMigrationsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[90].Exporter = func(v any, i int) any {
- switch v := v.(*GetShardReplicationRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[91].Exporter = func(v any, i int) any {
- switch v := v.(*GetShardReplicationResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[92].Exporter = func(v any, i int) any {
- switch v := v.(*GetShardRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[93].Exporter = func(v any, i int) any {
- switch v := v.(*GetShardResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[94].Exporter = func(v any, i int) any {
- switch v := v.(*GetShardRoutingRulesRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[95].Exporter = func(v any, i int) any {
- switch v := v.(*GetShardRoutingRulesResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[96].Exporter = func(v any, i int) any {
- switch v := v.(*GetSrvKeyspaceNamesRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[97].Exporter = func(v any, i int) any {
- switch v := v.(*GetSrvKeyspaceNamesResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[98].Exporter = func(v any, i int) any {
- switch v := v.(*GetSrvKeyspacesRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[99].Exporter = func(v any, i int) any {
- switch v := v.(*GetSrvKeyspacesResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[100].Exporter = func(v any, i int) any {
- switch v := v.(*UpdateThrottlerConfigRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[101].Exporter = func(v any, i int) any {
- switch v := v.(*UpdateThrottlerConfigResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[102].Exporter = func(v any, i int) any {
- switch v := v.(*GetSrvVSchemaRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[103].Exporter = func(v any, i int) any {
- switch v := v.(*GetSrvVSchemaResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[104].Exporter = func(v any, i int) any {
- switch v := v.(*GetSrvVSchemasRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[105].Exporter = func(v any, i int) any {
- switch v := v.(*GetSrvVSchemasResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[106].Exporter = func(v any, i int) any {
- switch v := v.(*GetTabletRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[107].Exporter = func(v any, i int) any {
- switch v := v.(*GetTabletResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[108].Exporter = func(v any, i int) any {
- switch v := v.(*GetTabletsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[109].Exporter = func(v any, i int) any {
- switch v := v.(*GetTabletsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[110].Exporter = func(v any, i int) any {
- switch v := v.(*GetThrottlerStatusRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[111].Exporter = func(v any, i int) any {
- switch v := v.(*GetThrottlerStatusResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[112].Exporter = func(v any, i int) any {
- switch v := v.(*GetTopologyPathRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[113].Exporter = func(v any, i int) any {
- switch v := v.(*GetTopologyPathResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[114].Exporter = func(v any, i int) any {
- switch v := v.(*TopologyCell); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[115].Exporter = func(v any, i int) any {
- switch v := v.(*GetUnresolvedTransactionsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[116].Exporter = func(v any, i int) any {
- switch v := v.(*GetUnresolvedTransactionsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[117].Exporter = func(v any, i int) any {
- switch v := v.(*ConcludeTransactionRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[118].Exporter = func(v any, i int) any {
- switch v := v.(*ConcludeTransactionResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[119].Exporter = func(v any, i int) any {
- switch v := v.(*GetVSchemaRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[120].Exporter = func(v any, i int) any {
- switch v := v.(*GetVersionRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[121].Exporter = func(v any, i int) any {
- switch v := v.(*GetVersionResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[122].Exporter = func(v any, i int) any {
- switch v := v.(*GetVSchemaResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[123].Exporter = func(v any, i int) any {
- switch v := v.(*GetWorkflowsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[124].Exporter = func(v any, i int) any {
- switch v := v.(*GetWorkflowsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[125].Exporter = func(v any, i int) any {
- switch v := v.(*InitShardPrimaryRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[126].Exporter = func(v any, i int) any {
- switch v := v.(*InitShardPrimaryResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[127].Exporter = func(v any, i int) any {
- switch v := v.(*LaunchSchemaMigrationRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[128].Exporter = func(v any, i int) any {
- switch v := v.(*LaunchSchemaMigrationResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[129].Exporter = func(v any, i int) any {
- switch v := v.(*LookupVindexCreateRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[130].Exporter = func(v any, i int) any {
- switch v := v.(*LookupVindexCreateResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[131].Exporter = func(v any, i int) any {
- switch v := v.(*LookupVindexExternalizeRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[132].Exporter = func(v any, i int) any {
- switch v := v.(*LookupVindexExternalizeResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[133].Exporter = func(v any, i int) any {
- switch v := v.(*MaterializeCreateRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[134].Exporter = func(v any, i int) any {
- switch v := v.(*MaterializeCreateResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[135].Exporter = func(v any, i int) any {
- switch v := v.(*MigrateCreateRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[136].Exporter = func(v any, i int) any {
- switch v := v.(*MigrateCompleteRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[137].Exporter = func(v any, i int) any {
- switch v := v.(*MigrateCompleteResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[138].Exporter = func(v any, i int) any {
- switch v := v.(*MountRegisterRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[139].Exporter = func(v any, i int) any {
- switch v := v.(*MountRegisterResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[140].Exporter = func(v any, i int) any {
- switch v := v.(*MountUnregisterRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[141].Exporter = func(v any, i int) any {
- switch v := v.(*MountUnregisterResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[142].Exporter = func(v any, i int) any {
- switch v := v.(*MountShowRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[143].Exporter = func(v any, i int) any {
- switch v := v.(*MountShowResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[144].Exporter = func(v any, i int) any {
- switch v := v.(*MountListRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[145].Exporter = func(v any, i int) any {
- switch v := v.(*MountListResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[146].Exporter = func(v any, i int) any {
- switch v := v.(*MoveTablesCreateRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[147].Exporter = func(v any, i int) any {
- switch v := v.(*MoveTablesCreateResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[148].Exporter = func(v any, i int) any {
- switch v := v.(*MoveTablesCompleteRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[149].Exporter = func(v any, i int) any {
- switch v := v.(*MoveTablesCompleteResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[150].Exporter = func(v any, i int) any {
- switch v := v.(*PingTabletRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[151].Exporter = func(v any, i int) any {
- switch v := v.(*PingTabletResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[152].Exporter = func(v any, i int) any {
- switch v := v.(*PlannedReparentShardRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[153].Exporter = func(v any, i int) any {
- switch v := v.(*PlannedReparentShardResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[154].Exporter = func(v any, i int) any {
- switch v := v.(*RebuildKeyspaceGraphRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[155].Exporter = func(v any, i int) any {
- switch v := v.(*RebuildKeyspaceGraphResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[156].Exporter = func(v any, i int) any {
- switch v := v.(*RebuildVSchemaGraphRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[157].Exporter = func(v any, i int) any {
- switch v := v.(*RebuildVSchemaGraphResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[158].Exporter = func(v any, i int) any {
- switch v := v.(*RefreshStateRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[159].Exporter = func(v any, i int) any {
- switch v := v.(*RefreshStateResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[160].Exporter = func(v any, i int) any {
- switch v := v.(*RefreshStateByShardRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[161].Exporter = func(v any, i int) any {
- switch v := v.(*RefreshStateByShardResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[162].Exporter = func(v any, i int) any {
- switch v := v.(*ReloadSchemaRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[163].Exporter = func(v any, i int) any {
- switch v := v.(*ReloadSchemaResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[164].Exporter = func(v any, i int) any {
- switch v := v.(*ReloadSchemaKeyspaceRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[165].Exporter = func(v any, i int) any {
- switch v := v.(*ReloadSchemaKeyspaceResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[166].Exporter = func(v any, i int) any {
- switch v := v.(*ReloadSchemaShardRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[167].Exporter = func(v any, i int) any {
- switch v := v.(*ReloadSchemaShardResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[168].Exporter = func(v any, i int) any {
- switch v := v.(*RemoveBackupRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[169].Exporter = func(v any, i int) any {
- switch v := v.(*RemoveBackupResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[170].Exporter = func(v any, i int) any {
- switch v := v.(*RemoveKeyspaceCellRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[171].Exporter = func(v any, i int) any {
- switch v := v.(*RemoveKeyspaceCellResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[172].Exporter = func(v any, i int) any {
- switch v := v.(*RemoveShardCellRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[173].Exporter = func(v any, i int) any {
- switch v := v.(*RemoveShardCellResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[174].Exporter = func(v any, i int) any {
- switch v := v.(*ReparentTabletRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[175].Exporter = func(v any, i int) any {
- switch v := v.(*ReparentTabletResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[176].Exporter = func(v any, i int) any {
- switch v := v.(*ReshardCreateRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[177].Exporter = func(v any, i int) any {
- switch v := v.(*RestoreFromBackupRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[178].Exporter = func(v any, i int) any {
- switch v := v.(*RestoreFromBackupResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[179].Exporter = func(v any, i int) any {
- switch v := v.(*RetrySchemaMigrationRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[180].Exporter = func(v any, i int) any {
- switch v := v.(*RetrySchemaMigrationResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[181].Exporter = func(v any, i int) any {
- switch v := v.(*RunHealthCheckRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[182].Exporter = func(v any, i int) any {
- switch v := v.(*RunHealthCheckResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[183].Exporter = func(v any, i int) any {
- switch v := v.(*SetKeyspaceDurabilityPolicyRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[184].Exporter = func(v any, i int) any {
- switch v := v.(*SetKeyspaceDurabilityPolicyResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[185].Exporter = func(v any, i int) any {
- switch v := v.(*SetKeyspaceShardingInfoRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[186].Exporter = func(v any, i int) any {
- switch v := v.(*SetKeyspaceShardingInfoResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[187].Exporter = func(v any, i int) any {
- switch v := v.(*SetShardIsPrimaryServingRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[188].Exporter = func(v any, i int) any {
- switch v := v.(*SetShardIsPrimaryServingResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[189].Exporter = func(v any, i int) any {
- switch v := v.(*SetShardTabletControlRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[190].Exporter = func(v any, i int) any {
- switch v := v.(*SetShardTabletControlResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[191].Exporter = func(v any, i int) any {
- switch v := v.(*SetWritableRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[192].Exporter = func(v any, i int) any {
- switch v := v.(*SetWritableResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[193].Exporter = func(v any, i int) any {
- switch v := v.(*ShardReplicationAddRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[194].Exporter = func(v any, i int) any {
- switch v := v.(*ShardReplicationAddResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[195].Exporter = func(v any, i int) any {
- switch v := v.(*ShardReplicationFixRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[196].Exporter = func(v any, i int) any {
- switch v := v.(*ShardReplicationFixResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[197].Exporter = func(v any, i int) any {
- switch v := v.(*ShardReplicationPositionsRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[198].Exporter = func(v any, i int) any {
- switch v := v.(*ShardReplicationPositionsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[199].Exporter = func(v any, i int) any {
- switch v := v.(*ShardReplicationRemoveRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[200].Exporter = func(v any, i int) any {
- switch v := v.(*ShardReplicationRemoveResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[201].Exporter = func(v any, i int) any {
- switch v := v.(*SleepTabletRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[202].Exporter = func(v any, i int) any {
- switch v := v.(*SleepTabletResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[203].Exporter = func(v any, i int) any {
- switch v := v.(*SourceShardAddRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[204].Exporter = func(v any, i int) any {
- switch v := v.(*SourceShardAddResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[205].Exporter = func(v any, i int) any {
- switch v := v.(*SourceShardDeleteRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[206].Exporter = func(v any, i int) any {
- switch v := v.(*SourceShardDeleteResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[207].Exporter = func(v any, i int) any {
- switch v := v.(*StartReplicationRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[208].Exporter = func(v any, i int) any {
- switch v := v.(*StartReplicationResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[209].Exporter = func(v any, i int) any {
- switch v := v.(*StopReplicationRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[210].Exporter = func(v any, i int) any {
- switch v := v.(*StopReplicationResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[211].Exporter = func(v any, i int) any {
- switch v := v.(*TabletExternallyReparentedRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[212].Exporter = func(v any, i int) any {
- switch v := v.(*TabletExternallyReparentedResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[213].Exporter = func(v any, i int) any {
- switch v := v.(*UpdateCellInfoRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[214].Exporter = func(v any, i int) any {
- switch v := v.(*UpdateCellInfoResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[215].Exporter = func(v any, i int) any {
- switch v := v.(*UpdateCellsAliasRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[216].Exporter = func(v any, i int) any {
- switch v := v.(*UpdateCellsAliasResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[217].Exporter = func(v any, i int) any {
- switch v := v.(*ValidateRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[218].Exporter = func(v any, i int) any {
- switch v := v.(*ValidateResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[219].Exporter = func(v any, i int) any {
- switch v := v.(*ValidateKeyspaceRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[220].Exporter = func(v any, i int) any {
- switch v := v.(*ValidateKeyspaceResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[221].Exporter = func(v any, i int) any {
- switch v := v.(*ValidateSchemaKeyspaceRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[222].Exporter = func(v any, i int) any {
- switch v := v.(*ValidateSchemaKeyspaceResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[223].Exporter = func(v any, i int) any {
- switch v := v.(*ValidateShardRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[224].Exporter = func(v any, i int) any {
- switch v := v.(*ValidateShardResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[225].Exporter = func(v any, i int) any {
- switch v := v.(*ValidateVersionKeyspaceRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[226].Exporter = func(v any, i int) any {
- switch v := v.(*ValidateVersionKeyspaceResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[227].Exporter = func(v any, i int) any {
- switch v := v.(*ValidateVersionShardRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[228].Exporter = func(v any, i int) any {
- switch v := v.(*ValidateVersionShardResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[229].Exporter = func(v any, i int) any {
- switch v := v.(*ValidateVSchemaRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[230].Exporter = func(v any, i int) any {
- switch v := v.(*ValidateVSchemaResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[231].Exporter = func(v any, i int) any {
- switch v := v.(*VDiffCreateRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[232].Exporter = func(v any, i int) any {
- switch v := v.(*VDiffCreateResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[233].Exporter = func(v any, i int) any {
- switch v := v.(*VDiffDeleteRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[234].Exporter = func(v any, i int) any {
- switch v := v.(*VDiffDeleteResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[235].Exporter = func(v any, i int) any {
- switch v := v.(*VDiffResumeRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[236].Exporter = func(v any, i int) any {
- switch v := v.(*VDiffResumeResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[237].Exporter = func(v any, i int) any {
- switch v := v.(*VDiffShowRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[238].Exporter = func(v any, i int) any {
- switch v := v.(*VDiffShowResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[239].Exporter = func(v any, i int) any {
- switch v := v.(*VDiffStopRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[240].Exporter = func(v any, i int) any {
- switch v := v.(*VDiffStopResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[241].Exporter = func(v any, i int) any {
- switch v := v.(*WorkflowDeleteRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[242].Exporter = func(v any, i int) any {
- switch v := v.(*WorkflowDeleteResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[243].Exporter = func(v any, i int) any {
- switch v := v.(*WorkflowStatusRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[244].Exporter = func(v any, i int) any {
- switch v := v.(*WorkflowStatusResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[245].Exporter = func(v any, i int) any {
- switch v := v.(*WorkflowSwitchTrafficRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[246].Exporter = func(v any, i int) any {
- switch v := v.(*WorkflowSwitchTrafficResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[247].Exporter = func(v any, i int) any {
- switch v := v.(*WorkflowUpdateRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[248].Exporter = func(v any, i int) any {
- switch v := v.(*WorkflowUpdateResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[249].Exporter = func(v any, i int) any {
- switch v := v.(*GetMirrorRulesRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[250].Exporter = func(v any, i int) any {
- switch v := v.(*GetMirrorRulesResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[251].Exporter = func(v any, i int) any {
- switch v := v.(*WorkflowMirrorTrafficRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[252].Exporter = func(v any, i int) any {
- switch v := v.(*WorkflowMirrorTrafficResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[255].Exporter = func(v any, i int) any {
- switch v := v.(*Workflow_ReplicationLocation); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[256].Exporter = func(v any, i int) any {
- switch v := v.(*Workflow_ShardStream); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[257].Exporter = func(v any, i int) any {
- switch v := v.(*Workflow_Stream); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[258].Exporter = func(v any, i int) any {
- switch v := v.(*Workflow_Stream_CopyState); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[259].Exporter = func(v any, i int) any {
- switch v := v.(*Workflow_Stream_Log); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[260].Exporter = func(v any, i int) any {
- switch v := v.(*Workflow_Stream_ThrottlerStatus); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[263].Exporter = func(v any, i int) any {
- switch v := v.(*ApplyVSchemaResponse_ParamList); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[272].Exporter = func(v any, i int) any {
- switch v := v.(*GetSrvKeyspaceNamesResponse_NameList); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[276].Exporter = func(v any, i int) any {
- switch v := v.(*MoveTablesCreateResponse_TabletInfo); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[286].Exporter = func(v any, i int) any {
- switch v := v.(*WorkflowDeleteResponse_TabletInfo); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[287].Exporter = func(v any, i int) any {
- switch v := v.(*WorkflowStatusResponse_TableCopyState); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[288].Exporter = func(v any, i int) any {
- switch v := v.(*WorkflowStatusResponse_ShardStreamState); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[289].Exporter = func(v any, i int) any {
- switch v := v.(*WorkflowStatusResponse_ShardStreams); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtctldata_proto_msgTypes[292].Exporter = func(v any, i int) any {
- switch v := v.(*WorkflowUpdateResponse_TabletInfo); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
file_vtctldata_proto_msgTypes[23].OneofWrappers = []any{}
- file_vtctldata_proto_msgTypes[231].OneofWrappers = []any{}
+ file_vtctldata_proto_msgTypes[236].OneofWrappers = []any{}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_vtctldata_proto_rawDesc,
- NumEnums: 4,
- NumMessages: 293,
+ NumEnums: 5,
+ NumMessages: 301,
NumExtensions: 0,
NumServices: 0,
},
diff --git a/go/vt/proto/vtctldata/vtctldata_vtproto.pb.go b/go/vt/proto/vtctldata/vtctldata_vtproto.pb.go
index c2e62998df1..947b5ce9f43 100644
--- a/go/vt/proto/vtctldata/vtctldata_vtproto.pb.go
+++ b/go/vt/proto/vtctldata/vtctldata_vtproto.pb.go
@@ -1,5 +1,5 @@
// Code generated by protoc-gen-go-vtproto. DO NOT EDIT.
-// protoc-gen-go-vtproto version: v0.6.1-0.20240319094008-0393e58bdf10
+// protoc-gen-go-vtproto version: v0.6.1-0.20241011083415-71c992bc3c87
// source: vtctldata.proto
package vtctldata
@@ -250,7 +250,8 @@ func (m *WorkflowOptions) CloneVT() *WorkflowOptions {
}
r := new(WorkflowOptions)
r.TenantId = m.TenantId
- r.StripShardedAutoIncrement = m.StripShardedAutoIncrement
+ r.ShardedAutoIncrementHandling = m.ShardedAutoIncrementHandling
+ r.GlobalKeyspace = m.GlobalKeyspace
if rhs := m.Shards; rhs != nil {
tmpContainer := make([]string, len(rhs))
copy(tmpContainer, rhs)
@@ -910,6 +911,61 @@ func (m *CancelSchemaMigrationResponse) CloneMessageVT() proto.Message {
return m.CloneVT()
}
+func (m *ChangeTabletTagsRequest) CloneVT() *ChangeTabletTagsRequest {
+ if m == nil {
+ return (*ChangeTabletTagsRequest)(nil)
+ }
+ r := new(ChangeTabletTagsRequest)
+ r.TabletAlias = m.TabletAlias.CloneVT()
+ r.Replace = m.Replace
+ if rhs := m.Tags; rhs != nil {
+ tmpContainer := make(map[string]string, len(rhs))
+ for k, v := range rhs {
+ tmpContainer[k] = v
+ }
+ r.Tags = tmpContainer
+ }
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *ChangeTabletTagsRequest) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
+func (m *ChangeTabletTagsResponse) CloneVT() *ChangeTabletTagsResponse {
+ if m == nil {
+ return (*ChangeTabletTagsResponse)(nil)
+ }
+ r := new(ChangeTabletTagsResponse)
+ if rhs := m.BeforeTags; rhs != nil {
+ tmpContainer := make(map[string]string, len(rhs))
+ for k, v := range rhs {
+ tmpContainer[k] = v
+ }
+ r.BeforeTags = tmpContainer
+ }
+ if rhs := m.AfterTags; rhs != nil {
+ tmpContainer := make(map[string]string, len(rhs))
+ for k, v := range rhs {
+ tmpContainer[k] = v
+ }
+ r.AfterTags = tmpContainer
+ }
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *ChangeTabletTagsResponse) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
func (m *ChangeTabletTypeRequest) CloneVT() *ChangeTabletTypeRequest {
if m == nil {
return (*ChangeTabletTypeRequest)(nil)
@@ -1377,6 +1433,7 @@ func (m *EmergencyReparentShardRequest) CloneVT() *EmergencyReparentShardRequest
r.WaitReplicasTimeout = m.WaitReplicasTimeout.CloneVT()
r.PreventCrossCellPromotion = m.PreventCrossCellPromotion
r.WaitForAllTablets = m.WaitForAllTablets
+ r.ExpectedPrimary = m.ExpectedPrimary.CloneVT()
if rhs := m.IgnoreReplicas; rhs != nil {
tmpContainer := make([]*topodata.TabletAlias, len(rhs))
for k, v := range rhs {
@@ -2687,6 +2744,72 @@ func (m *GetUnresolvedTransactionsResponse) CloneMessageVT() proto.Message {
return m.CloneVT()
}
+func (m *GetTransactionInfoRequest) CloneVT() *GetTransactionInfoRequest {
+ if m == nil {
+ return (*GetTransactionInfoRequest)(nil)
+ }
+ r := new(GetTransactionInfoRequest)
+ r.Dtid = m.Dtid
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *GetTransactionInfoRequest) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
+func (m *ShardTransactionState) CloneVT() *ShardTransactionState {
+ if m == nil {
+ return (*ShardTransactionState)(nil)
+ }
+ r := new(ShardTransactionState)
+ r.Shard = m.Shard
+ r.State = m.State
+ r.Message = m.Message
+ r.TimeCreated = m.TimeCreated
+ if rhs := m.Statements; rhs != nil {
+ tmpContainer := make([]string, len(rhs))
+ copy(tmpContainer, rhs)
+ r.Statements = tmpContainer
+ }
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *ShardTransactionState) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
+func (m *GetTransactionInfoResponse) CloneVT() *GetTransactionInfoResponse {
+ if m == nil {
+ return (*GetTransactionInfoResponse)(nil)
+ }
+ r := new(GetTransactionInfoResponse)
+ r.Metadata = m.Metadata.CloneVT()
+ if rhs := m.ShardStates; rhs != nil {
+ tmpContainer := make([]*ShardTransactionState, len(rhs))
+ for k, v := range rhs {
+ tmpContainer[k] = v.CloneVT()
+ }
+ r.ShardStates = tmpContainer
+ }
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *GetTransactionInfoResponse) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
func (m *ConcludeTransactionRequest) CloneVT() *ConcludeTransactionRequest {
if m == nil {
return (*ConcludeTransactionRequest)(nil)
@@ -3473,6 +3596,7 @@ func (m *PlannedReparentShardRequest) CloneVT() *PlannedReparentShardRequest {
r.WaitReplicasTimeout = m.WaitReplicasTimeout.CloneVT()
r.TolerableReplicationLag = m.TolerableReplicationLag.CloneVT()
r.AllowCrossCellPromotion = m.AllowCrossCellPromotion
+ r.ExpectedPrimary = m.ExpectedPrimary.CloneVT()
if len(m.unknownFields) > 0 {
r.unknownFields = make([]byte, len(m.unknownFields))
copy(r.unknownFields, m.unknownFields)
@@ -5284,6 +5408,7 @@ func (m *WorkflowDeleteRequest) CloneVT() *WorkflowDeleteRequest {
r.Workflow = m.Workflow
r.KeepData = m.KeepData
r.KeepRoutingRules = m.KeepRoutingRules
+ r.DeleteBatchSize = m.DeleteBatchSize
if rhs := m.Shards; rhs != nil {
tmpContainer := make([]string, len(rhs))
copy(tmpContainer, rhs)
@@ -6653,6 +6778,13 @@ func (m *WorkflowOptions) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
+ if len(m.GlobalKeyspace) > 0 {
+ i -= len(m.GlobalKeyspace)
+ copy(dAtA[i:], m.GlobalKeyspace)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.GlobalKeyspace)))
+ i--
+ dAtA[i] = 0x2a
+ }
if len(m.Config) > 0 {
for k := range m.Config {
v := m.Config[k]
@@ -6681,13 +6813,8 @@ func (m *WorkflowOptions) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
dAtA[i] = 0x1a
}
}
- if m.StripShardedAutoIncrement {
- i--
- if m.StripShardedAutoIncrement {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
+ if m.ShardedAutoIncrementHandling != 0 {
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(m.ShardedAutoIncrementHandling))
i--
dAtA[i] = 0x10
}
@@ -8498,6 +8625,149 @@ func (m *CancelSchemaMigrationResponse) MarshalToSizedBufferVT(dAtA []byte) (int
return len(dAtA) - i, nil
}
+func (m *ChangeTabletTagsRequest) MarshalVT() (dAtA []byte, err error) {
+ if m == nil {
+ return nil, nil
+ }
+ size := m.SizeVT()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBufferVT(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *ChangeTabletTagsRequest) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *ChangeTabletTagsRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+ if m == nil {
+ return 0, nil
+ }
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.unknownFields != nil {
+ i -= len(m.unknownFields)
+ copy(dAtA[i:], m.unknownFields)
+ }
+ if m.Replace {
+ i--
+ if m.Replace {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i--
+ dAtA[i] = 0x18
+ }
+ if len(m.Tags) > 0 {
+ for k := range m.Tags {
+ v := m.Tags[k]
+ baseI := i
+ i -= len(v)
+ copy(dAtA[i:], v)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(v)))
+ i--
+ dAtA[i] = 0x12
+ i -= len(k)
+ copy(dAtA[i:], k)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(k)))
+ i--
+ dAtA[i] = 0xa
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(baseI-i))
+ i--
+ dAtA[i] = 0x12
+ }
+ }
+ if m.TabletAlias != nil {
+ size, err := m.TabletAlias.MarshalToSizedBufferVT(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *ChangeTabletTagsResponse) MarshalVT() (dAtA []byte, err error) {
+ if m == nil {
+ return nil, nil
+ }
+ size := m.SizeVT()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBufferVT(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *ChangeTabletTagsResponse) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *ChangeTabletTagsResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+ if m == nil {
+ return 0, nil
+ }
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.unknownFields != nil {
+ i -= len(m.unknownFields)
+ copy(dAtA[i:], m.unknownFields)
+ }
+ if len(m.AfterTags) > 0 {
+ for k := range m.AfterTags {
+ v := m.AfterTags[k]
+ baseI := i
+ i -= len(v)
+ copy(dAtA[i:], v)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(v)))
+ i--
+ dAtA[i] = 0x12
+ i -= len(k)
+ copy(dAtA[i:], k)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(k)))
+ i--
+ dAtA[i] = 0xa
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(baseI-i))
+ i--
+ dAtA[i] = 0x12
+ }
+ }
+ if len(m.BeforeTags) > 0 {
+ for k := range m.BeforeTags {
+ v := m.BeforeTags[k]
+ baseI := i
+ i -= len(v)
+ copy(dAtA[i:], v)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(v)))
+ i--
+ dAtA[i] = 0x12
+ i -= len(k)
+ copy(dAtA[i:], k)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(k)))
+ i--
+ dAtA[i] = 0xa
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(baseI-i))
+ i--
+ dAtA[i] = 0xa
+ }
+ }
+ return len(dAtA) - i, nil
+}
+
func (m *ChangeTabletTypeRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
@@ -9760,6 +10030,16 @@ func (m *EmergencyReparentShardRequest) MarshalToSizedBufferVT(dAtA []byte) (int
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
+ if m.ExpectedPrimary != nil {
+ size, err := m.ExpectedPrimary.MarshalToSizedBufferVT(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
+ i--
+ dAtA[i] = 0x42
+ }
if m.WaitForAllTablets {
i--
if m.WaitForAllTablets {
@@ -13073,6 +13353,169 @@ func (m *GetUnresolvedTransactionsResponse) MarshalToSizedBufferVT(dAtA []byte)
return len(dAtA) - i, nil
}
+func (m *GetTransactionInfoRequest) MarshalVT() (dAtA []byte, err error) {
+ if m == nil {
+ return nil, nil
+ }
+ size := m.SizeVT()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBufferVT(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *GetTransactionInfoRequest) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *GetTransactionInfoRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+ if m == nil {
+ return 0, nil
+ }
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.unknownFields != nil {
+ i -= len(m.unknownFields)
+ copy(dAtA[i:], m.unknownFields)
+ }
+ if len(m.Dtid) > 0 {
+ i -= len(m.Dtid)
+ copy(dAtA[i:], m.Dtid)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Dtid)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *ShardTransactionState) MarshalVT() (dAtA []byte, err error) {
+ if m == nil {
+ return nil, nil
+ }
+ size := m.SizeVT()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBufferVT(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *ShardTransactionState) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *ShardTransactionState) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+ if m == nil {
+ return 0, nil
+ }
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.unknownFields != nil {
+ i -= len(m.unknownFields)
+ copy(dAtA[i:], m.unknownFields)
+ }
+ if len(m.Statements) > 0 {
+ for iNdEx := len(m.Statements) - 1; iNdEx >= 0; iNdEx-- {
+ i -= len(m.Statements[iNdEx])
+ copy(dAtA[i:], m.Statements[iNdEx])
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Statements[iNdEx])))
+ i--
+ dAtA[i] = 0x2a
+ }
+ }
+ if m.TimeCreated != 0 {
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(m.TimeCreated))
+ i--
+ dAtA[i] = 0x20
+ }
+ if len(m.Message) > 0 {
+ i -= len(m.Message)
+ copy(dAtA[i:], m.Message)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Message)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.State) > 0 {
+ i -= len(m.State)
+ copy(dAtA[i:], m.State)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.State)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.Shard) > 0 {
+ i -= len(m.Shard)
+ copy(dAtA[i:], m.Shard)
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Shard)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *GetTransactionInfoResponse) MarshalVT() (dAtA []byte, err error) {
+ if m == nil {
+ return nil, nil
+ }
+ size := m.SizeVT()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBufferVT(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *GetTransactionInfoResponse) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *GetTransactionInfoResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
+ if m == nil {
+ return 0, nil
+ }
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.unknownFields != nil {
+ i -= len(m.unknownFields)
+ copy(dAtA[i:], m.unknownFields)
+ }
+ if len(m.ShardStates) > 0 {
+ for iNdEx := len(m.ShardStates) - 1; iNdEx >= 0; iNdEx-- {
+ size, err := m.ShardStates[iNdEx].MarshalToSizedBufferVT(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
+ i--
+ dAtA[i] = 0x12
+ }
+ }
+ if m.Metadata != nil {
+ size, err := m.Metadata.MarshalToSizedBufferVT(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
func (m *ConcludeTransactionRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
@@ -15236,6 +15679,16 @@ func (m *PlannedReparentShardRequest) MarshalToSizedBufferVT(dAtA []byte) (int,
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
+ if m.ExpectedPrimary != nil {
+ size, err := m.ExpectedPrimary.MarshalToSizedBufferVT(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(size))
+ i--
+ dAtA[i] = 0x42
+ }
if m.AllowCrossCellPromotion {
i--
if m.AllowCrossCellPromotion {
@@ -20059,6 +20512,11 @@ func (m *WorkflowDeleteRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error)
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
+ if m.DeleteBatchSize != 0 {
+ i = protohelpers.EncodeVarint(dAtA, i, uint64(m.DeleteBatchSize))
+ i--
+ dAtA[i] = 0x30
+ }
if len(m.Shards) > 0 {
for iNdEx := len(m.Shards) - 1; iNdEx >= 0; iNdEx-- {
i -= len(m.Shards[iNdEx])
@@ -21504,8 +21962,8 @@ func (m *WorkflowOptions) SizeVT() (n int) {
if l > 0 {
n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
}
- if m.StripShardedAutoIncrement {
- n += 2
+ if m.ShardedAutoIncrementHandling != 0 {
+ n += 1 + protohelpers.SizeOfVarint(uint64(m.ShardedAutoIncrementHandling))
}
if len(m.Shards) > 0 {
for _, s := range m.Shards {
@@ -21521,6 +21979,10 @@ func (m *WorkflowOptions) SizeVT() (n int) {
n += mapEntrySize + 1 + protohelpers.SizeOfVarint(uint64(mapEntrySize))
}
}
+ l = len(m.GlobalKeyspace)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
n += len(m.unknownFields)
return n
}
@@ -22236,6 +22698,57 @@ func (m *CancelSchemaMigrationResponse) SizeVT() (n int) {
return n
}
+func (m *ChangeTabletTagsRequest) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.TabletAlias != nil {
+ l = m.TabletAlias.SizeVT()
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ if len(m.Tags) > 0 {
+ for k, v := range m.Tags {
+ _ = k
+ _ = v
+ mapEntrySize := 1 + len(k) + protohelpers.SizeOfVarint(uint64(len(k))) + 1 + len(v) + protohelpers.SizeOfVarint(uint64(len(v)))
+ n += mapEntrySize + 1 + protohelpers.SizeOfVarint(uint64(mapEntrySize))
+ }
+ }
+ if m.Replace {
+ n += 2
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
+func (m *ChangeTabletTagsResponse) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if len(m.BeforeTags) > 0 {
+ for k, v := range m.BeforeTags {
+ _ = k
+ _ = v
+ mapEntrySize := 1 + len(k) + protohelpers.SizeOfVarint(uint64(len(k))) + 1 + len(v) + protohelpers.SizeOfVarint(uint64(len(v)))
+ n += mapEntrySize + 1 + protohelpers.SizeOfVarint(uint64(mapEntrySize))
+ }
+ }
+ if len(m.AfterTags) > 0 {
+ for k, v := range m.AfterTags {
+ _ = k
+ _ = v
+ mapEntrySize := 1 + len(k) + protohelpers.SizeOfVarint(uint64(len(k))) + 1 + len(v) + protohelpers.SizeOfVarint(uint64(len(v)))
+ n += mapEntrySize + 1 + protohelpers.SizeOfVarint(uint64(mapEntrySize))
+ }
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
func (m *ChangeTabletTypeRequest) SizeVT() (n int) {
if m == nil {
return 0
@@ -22696,6 +23209,10 @@ func (m *EmergencyReparentShardRequest) SizeVT() (n int) {
if m.WaitForAllTablets {
n += 2
}
+ if m.ExpectedPrimary != nil {
+ l = m.ExpectedPrimary.SizeVT()
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
n += len(m.unknownFields)
return n
}
@@ -23887,6 +24404,71 @@ func (m *GetUnresolvedTransactionsResponse) SizeVT() (n int) {
return n
}
+func (m *GetTransactionInfoRequest) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Dtid)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
+func (m *ShardTransactionState) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Shard)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ l = len(m.State)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ l = len(m.Message)
+ if l > 0 {
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ if m.TimeCreated != 0 {
+ n += 1 + protohelpers.SizeOfVarint(uint64(m.TimeCreated))
+ }
+ if len(m.Statements) > 0 {
+ for _, s := range m.Statements {
+ l = len(s)
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
+func (m *GetTransactionInfoResponse) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Metadata != nil {
+ l = m.Metadata.SizeVT()
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ if len(m.ShardStates) > 0 {
+ for _, e := range m.ShardStates {
+ l = e.SizeVT()
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
func (m *ConcludeTransactionRequest) SizeVT() (n int) {
if m == nil {
return 0
@@ -24712,6 +25294,10 @@ func (m *PlannedReparentShardRequest) SizeVT() (n int) {
if m.AllowCrossCellPromotion {
n += 2
}
+ if m.ExpectedPrimary != nil {
+ l = m.ExpectedPrimary.SizeVT()
+ n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
+ }
n += len(m.unknownFields)
return n
}
@@ -26517,6 +27103,9 @@ func (m *WorkflowDeleteRequest) SizeVT() (n int) {
n += 1 + l + protohelpers.SizeOfVarint(uint64(l))
}
}
+ if m.DeleteBatchSize != 0 {
+ n += 1 + protohelpers.SizeOfVarint(uint64(m.DeleteBatchSize))
+ }
n += len(m.unknownFields)
return n
}
@@ -29731,9 +30320,9 @@ func (m *WorkflowOptions) UnmarshalVT(dAtA []byte) error {
iNdEx = postIndex
case 2:
if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field StripShardedAutoIncrement", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ShardedAutoIncrementHandling", wireType)
}
- var v int
+ m.ShardedAutoIncrementHandling = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -29743,12 +30332,11 @@ func (m *WorkflowOptions) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- v |= int(b&0x7F) << shift
+ m.ShardedAutoIncrementHandling |= ShardedAutoIncrementHandling(b&0x7F) << shift
if b < 0x80 {
break
}
}
- m.StripShardedAutoIncrement = bool(v != 0)
case 3:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Shards", wireType)
@@ -29908,92 +30496,9 @@ func (m *WorkflowOptions) UnmarshalVT(dAtA []byte) error {
}
m.Config[mapkey] = mapvalue
iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := protohelpers.Skip(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if (skippy < 0) || (iNdEx+skippy) < 0 {
- return protohelpers.ErrInvalidLength
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *Workflow_ReplicationLocation) UnmarshalVT(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: Workflow_ReplicationLocation: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: Workflow_ReplicationLocation: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Keyspace = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 2:
+ case 5:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Shards", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field GlobalKeyspace", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -30021,7 +30526,7 @@ func (m *Workflow_ReplicationLocation) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Shards = append(m.Shards, string(dAtA[iNdEx:postIndex]))
+ m.GlobalKeyspace = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -30045,7 +30550,7 @@ func (m *Workflow_ReplicationLocation) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *Workflow_ShardStream) UnmarshalVT(dAtA []byte) error {
+func (m *Workflow_ReplicationLocation) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -30068,17 +30573,17 @@ func (m *Workflow_ShardStream) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: Workflow_ShardStream: wiretype end group for non-group")
+ return fmt.Errorf("proto: Workflow_ReplicationLocation: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: Workflow_ShardStream: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: Workflow_ReplicationLocation: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Streams", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -30088,31 +30593,29 @@ func (m *Workflow_ShardStream) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Streams = append(m.Streams, &Workflow_Stream{})
- if err := m.Streams[len(m.Streams)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ m.Keyspace = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field TabletControls", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Shards", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -30122,46 +30625,163 @@ func (m *Workflow_ShardStream) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.TabletControls = append(m.TabletControls, &topodata.Shard_TabletControl{})
- if err := m.TabletControls[len(m.TabletControls)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ m.Shards = append(m.Shards, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
- case 3:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field IsPrimaryServing", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.IsPrimaryServing = bool(v != 0)
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *Workflow_ShardStream) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Workflow_ShardStream: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Workflow_ShardStream: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Streams", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Streams = append(m.Streams, &Workflow_Stream{})
+ if err := m.Streams[len(m.Streams)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TabletControls", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.TabletControls = append(m.TabletControls, &topodata.Shard_TabletControl{})
+ if err := m.TabletControls[len(m.TabletControls)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 3:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field IsPrimaryServing", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.IsPrimaryServing = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -34733,7 +35353,7 @@ func (m *CancelSchemaMigrationResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *ChangeTabletTypeRequest) UnmarshalVT(dAtA []byte) error {
+func (m *ChangeTabletTagsRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -34756,10 +35376,10 @@ func (m *ChangeTabletTypeRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: ChangeTabletTypeRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: ChangeTabletTagsRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: ChangeTabletTypeRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: ChangeTabletTagsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -34799,10 +35419,10 @@ func (m *ChangeTabletTypeRequest) UnmarshalVT(dAtA []byte) error {
}
iNdEx = postIndex
case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field DbType", wireType)
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Tags", wireType)
}
- m.DbType = 0
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -34812,14 +35432,122 @@ func (m *ChangeTabletTypeRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- m.DbType |= topodata.TabletType(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Tags == nil {
+ m.Tags = make(map[string]string)
+ }
+ var mapkey string
+ var mapvalue string
+ for iNdEx < postIndex {
+ entryPreIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ if fieldNum == 1 {
+ var stringLenmapkey uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLenmapkey |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLenmapkey := int(stringLenmapkey)
+ if intStringLenmapkey < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postStringIndexmapkey := iNdEx + intStringLenmapkey
+ if postStringIndexmapkey < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postStringIndexmapkey > l {
+ return io.ErrUnexpectedEOF
+ }
+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey])
+ iNdEx = postStringIndexmapkey
+ } else if fieldNum == 2 {
+ var stringLenmapvalue uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLenmapvalue |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLenmapvalue := int(stringLenmapvalue)
+ if intStringLenmapvalue < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue
+ if postStringIndexmapvalue < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postStringIndexmapvalue > l {
+ return io.ErrUnexpectedEOF
+ }
+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue])
+ iNdEx = postStringIndexmapvalue
+ } else {
+ iNdEx = entryPreIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > postIndex {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+ m.Tags[mapkey] = mapvalue
+ iNdEx = postIndex
case 3:
if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field DryRun", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Replace", wireType)
}
var v int
for shift := uint(0); ; shift += 7 {
@@ -34836,7 +35564,438 @@ func (m *ChangeTabletTypeRequest) UnmarshalVT(dAtA []byte) error {
break
}
}
- m.DryRun = bool(v != 0)
+ m.Replace = bool(v != 0)
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *ChangeTabletTagsResponse) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: ChangeTabletTagsResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: ChangeTabletTagsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field BeforeTags", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.BeforeTags == nil {
+ m.BeforeTags = make(map[string]string)
+ }
+ var mapkey string
+ var mapvalue string
+ for iNdEx < postIndex {
+ entryPreIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ if fieldNum == 1 {
+ var stringLenmapkey uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLenmapkey |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLenmapkey := int(stringLenmapkey)
+ if intStringLenmapkey < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postStringIndexmapkey := iNdEx + intStringLenmapkey
+ if postStringIndexmapkey < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postStringIndexmapkey > l {
+ return io.ErrUnexpectedEOF
+ }
+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey])
+ iNdEx = postStringIndexmapkey
+ } else if fieldNum == 2 {
+ var stringLenmapvalue uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLenmapvalue |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLenmapvalue := int(stringLenmapvalue)
+ if intStringLenmapvalue < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue
+ if postStringIndexmapvalue < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postStringIndexmapvalue > l {
+ return io.ErrUnexpectedEOF
+ }
+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue])
+ iNdEx = postStringIndexmapvalue
+ } else {
+ iNdEx = entryPreIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > postIndex {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+ m.BeforeTags[mapkey] = mapvalue
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field AfterTags", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.AfterTags == nil {
+ m.AfterTags = make(map[string]string)
+ }
+ var mapkey string
+ var mapvalue string
+ for iNdEx < postIndex {
+ entryPreIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ if fieldNum == 1 {
+ var stringLenmapkey uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLenmapkey |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLenmapkey := int(stringLenmapkey)
+ if intStringLenmapkey < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postStringIndexmapkey := iNdEx + intStringLenmapkey
+ if postStringIndexmapkey < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postStringIndexmapkey > l {
+ return io.ErrUnexpectedEOF
+ }
+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey])
+ iNdEx = postStringIndexmapkey
+ } else if fieldNum == 2 {
+ var stringLenmapvalue uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLenmapvalue |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLenmapvalue := int(stringLenmapvalue)
+ if intStringLenmapvalue < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue
+ if postStringIndexmapvalue < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postStringIndexmapvalue > l {
+ return io.ErrUnexpectedEOF
+ }
+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue])
+ iNdEx = postStringIndexmapvalue
+ } else {
+ iNdEx = entryPreIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > postIndex {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+ m.AfterTags[mapkey] = mapvalue
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *ChangeTabletTypeRequest) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: ChangeTabletTypeRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: ChangeTabletTypeRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TabletAlias", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.TabletAlias == nil {
+ m.TabletAlias = &topodata.TabletAlias{}
+ }
+ if err := m.TabletAlias.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field DbType", wireType)
+ }
+ m.DbType = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.DbType |= topodata.TabletType(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 3:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field DryRun", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.DryRun = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -37720,6 +38879,42 @@ func (m *EmergencyReparentShardRequest) UnmarshalVT(dAtA []byte) error {
}
}
m.WaitForAllTablets = bool(v != 0)
+ case 8:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ExpectedPrimary", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.ExpectedPrimary == nil {
+ m.ExpectedPrimary = &topodata.TabletAlias{}
+ }
+ if err := m.ExpectedPrimary.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -44010,17 +45205,670 @@ func (m *GetTabletRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetTabletRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetTabletRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: GetTabletRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TabletAlias", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.TabletAlias == nil {
+ m.TabletAlias = &topodata.TabletAlias{}
+ }
+ if err := m.TabletAlias.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GetTabletResponse) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: GetTabletResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: GetTabletResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Tablet", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Tablet == nil {
+ m.Tablet = &topodata.Tablet{}
+ }
+ if err := m.Tablet.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GetTabletsRequest) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: GetTabletsRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: GetTabletsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Keyspace = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Shard", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Shard = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Cells", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Cells = append(m.Cells, string(dAtA[iNdEx:postIndex]))
+ iNdEx = postIndex
+ case 4:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Strict", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.Strict = bool(v != 0)
+ case 5:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TabletAliases", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.TabletAliases = append(m.TabletAliases, &topodata.TabletAlias{})
+ if err := m.TabletAliases[len(m.TabletAliases)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 6:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TabletType", wireType)
+ }
+ m.TabletType = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.TabletType |= topodata.TabletType(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GetTabletsResponse) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: GetTabletsResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: GetTabletsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Tablets", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Tablets = append(m.Tablets, &topodata.Tablet{})
+ if err := m.Tablets[len(m.Tablets)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GetThrottlerStatusRequest) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: GetThrottlerStatusRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: GetThrottlerStatusRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TabletAlias", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.TabletAlias == nil {
+ m.TabletAlias = &topodata.TabletAlias{}
+ }
+ if err := m.TabletAlias.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GetThrottlerStatusResponse) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: GetThrottlerStatusResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: GetThrottlerStatusResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Status == nil {
+ m.Status = &tabletmanagerdata.GetThrottlerStatusResponse{}
+ }
+ if err := m.Status.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := protohelpers.Skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GetTopologyPathRequest) UnmarshalVT(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: GetTopologyPathRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetTabletRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetTopologyPathRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field TabletAlias", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -44030,28 +45878,63 @@ func (m *GetTabletRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.TabletAlias == nil {
- m.TabletAlias = &topodata.TabletAlias{}
+ m.Path = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType)
}
- if err := m.TabletAlias.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
+ m.Version = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Version |= int64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
}
- iNdEx = postIndex
+ case 3:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field AsJson", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.AsJson = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -44074,7 +45957,7 @@ func (m *GetTabletRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetTabletResponse) UnmarshalVT(dAtA []byte) error {
+func (m *GetTopologyPathResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -44097,15 +45980,15 @@ func (m *GetTabletResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetTabletResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetTopologyPathResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetTabletResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetTopologyPathResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Tablet", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Cell", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -44132,10 +46015,10 @@ func (m *GetTabletResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Tablet == nil {
- m.Tablet = &topodata.Tablet{}
+ if m.Cell == nil {
+ m.Cell = &TopologyCell{}
}
- if err := m.Tablet.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Cell.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -44161,7 +46044,7 @@ func (m *GetTabletResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetTabletsRequest) UnmarshalVT(dAtA []byte) error {
+func (m *TopologyCell) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -44184,15 +46067,15 @@ func (m *GetTabletsRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetTabletsRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: TopologyCell: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetTabletsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: TopologyCell: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -44220,11 +46103,11 @@ func (m *GetTabletsRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Keyspace = string(dAtA[iNdEx:postIndex])
+ m.Name = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Shard", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -44252,11 +46135,11 @@ func (m *GetTabletsRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Shard = string(dAtA[iNdEx:postIndex])
+ m.Path = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 3:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Cells", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -44284,33 +46167,13 @@ func (m *GetTabletsRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Cells = append(m.Cells, string(dAtA[iNdEx:postIndex]))
+ m.Data = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 4:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Strict", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.Strict = bool(v != 0)
- case 5:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field TabletAliases", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Children", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -44320,31 +46183,29 @@ func (m *GetTabletsRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.TabletAliases = append(m.TabletAliases, &topodata.TabletAlias{})
- if err := m.TabletAliases[len(m.TabletAliases)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ m.Children = append(m.Children, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
- case 6:
+ case 5:
if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field TabletType", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType)
}
- m.TabletType = 0
+ m.Version = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -44354,7 +46215,7 @@ func (m *GetTabletsRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- m.TabletType |= topodata.TabletType(b&0x7F) << shift
+ m.Version |= int64(b&0x7F) << shift
if b < 0x80 {
break
}
@@ -44381,7 +46242,7 @@ func (m *GetTabletsRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetTabletsResponse) UnmarshalVT(dAtA []byte) error {
+func (m *GetUnresolvedTransactionsRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -44404,17 +46265,17 @@ func (m *GetTabletsResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetTabletsResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetUnresolvedTransactionsRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetTabletsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetUnresolvedTransactionsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Tablets", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -44424,82 +46285,29 @@ func (m *GetTabletsResponse) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Tablets = append(m.Tablets, &topodata.Tablet{})
- if err := m.Tablets[len(m.Tablets)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ m.Keyspace = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := protohelpers.Skip(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if (skippy < 0) || (iNdEx+skippy) < 0 {
- return protohelpers.ErrInvalidLength
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *GetThrottlerStatusRequest) UnmarshalVT(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: GetThrottlerStatusRequest: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: GetThrottlerStatusRequest: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field TabletAlias", wireType)
+ case 2:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field AbandonAge", wireType)
}
- var msglen int
+ m.AbandonAge = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -44509,28 +46317,11 @@ func (m *GetThrottlerStatusRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ m.AbandonAge |= int64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.TabletAlias == nil {
- m.TabletAlias = &topodata.TabletAlias{}
- }
- if err := m.TabletAlias.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -44553,7 +46344,7 @@ func (m *GetThrottlerStatusRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetThrottlerStatusResponse) UnmarshalVT(dAtA []byte) error {
+func (m *GetUnresolvedTransactionsResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -44576,15 +46367,15 @@ func (m *GetThrottlerStatusResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetThrottlerStatusResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetUnresolvedTransactionsResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetThrottlerStatusResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetUnresolvedTransactionsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Transactions", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -44611,10 +46402,8 @@ func (m *GetThrottlerStatusResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Status == nil {
- m.Status = &tabletmanagerdata.GetThrottlerStatusResponse{}
- }
- if err := m.Status.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ m.Transactions = append(m.Transactions, &query.TransactionMetadata{})
+ if err := m.Transactions[len(m.Transactions)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -44640,7 +46429,7 @@ func (m *GetThrottlerStatusResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetTopologyPathRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetTransactionInfoRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -44663,15 +46452,15 @@ func (m *GetTopologyPathRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetTopologyPathRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetTransactionInfoRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetTopologyPathRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetTransactionInfoRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Dtid", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -44699,47 +46488,8 @@ func (m *GetTopologyPathRequest) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Path = string(dAtA[iNdEx:postIndex])
+ m.Dtid = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType)
- }
- m.Version = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Version |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- case 3:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field AsJson", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.AsJson = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -44762,7 +46512,7 @@ func (m *GetTopologyPathRequest) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetTopologyPathResponse) UnmarshalVT(dAtA []byte) error {
+func (m *ShardTransactionState) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -44785,17 +46535,17 @@ func (m *GetTopologyPathResponse) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetTopologyPathResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: ShardTransactionState: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetTopologyPathResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: ShardTransactionState: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Cell", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Shard", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -44805,82 +46555,27 @@ func (m *GetTopologyPathResponse) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Cell == nil {
- m.Cell = &TopologyCell{}
- }
- if err := m.Cell.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ m.Shard = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := protohelpers.Skip(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if (skippy < 0) || (iNdEx+skippy) < 0 {
- return protohelpers.ErrInvalidLength
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *TopologyCell) UnmarshalVT(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: TopologyCell: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: TopologyCell: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
+ case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field State", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -44908,11 +46603,11 @@ func (m *TopologyCell) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Name = string(dAtA[iNdEx:postIndex])
+ m.State = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 2:
+ case 3:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -44940,13 +46635,13 @@ func (m *TopologyCell) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Path = string(dAtA[iNdEx:postIndex])
+ m.Message = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType)
+ case 4:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TimeCreated", wireType)
}
- var stringLen uint64
+ m.TimeCreated = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -44956,27 +46651,14 @@ func (m *TopologyCell) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ m.TimeCreated |= int64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return protohelpers.ErrInvalidLength
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return protohelpers.ErrInvalidLength
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Data = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 4:
+ case 5:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Children", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Statements", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -45004,27 +46686,8 @@ func (m *TopologyCell) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Children = append(m.Children, string(dAtA[iNdEx:postIndex]))
+ m.Statements = append(m.Statements, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
- case 5:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType)
- }
- m.Version = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Version |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -45047,7 +46710,7 @@ func (m *TopologyCell) UnmarshalVT(dAtA []byte) error {
}
return nil
}
-func (m *GetUnresolvedTransactionsRequest) UnmarshalVT(dAtA []byte) error {
+func (m *GetTransactionInfoResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -45070,17 +46733,17 @@ func (m *GetUnresolvedTransactionsRequest) UnmarshalVT(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: GetUnresolvedTransactionsRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: GetTransactionInfoResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: GetUnresolvedTransactionsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: GetTransactionInfoResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return protohelpers.ErrIntOverflow
@@ -45090,97 +46753,31 @@ func (m *GetUnresolvedTransactionsRequest) UnmarshalVT(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return protohelpers.ErrInvalidLength
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return protohelpers.ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Keyspace = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 2:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field AbandonAge", wireType)
+ if m.Metadata == nil {
+ m.Metadata = &query.TransactionMetadata{}
}
- m.AbandonAge = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.AbandonAge |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- default:
- iNdEx = preIndex
- skippy, err := protohelpers.Skip(dAtA[iNdEx:])
- if err != nil {
+ if err := m.Metadata.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
- if (skippy < 0) || (iNdEx+skippy) < 0 {
- return protohelpers.ErrInvalidLength
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
-func (m *GetUnresolvedTransactionsResponse) UnmarshalVT(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return protohelpers.ErrIntOverflow
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: GetUnresolvedTransactionsResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: GetUnresolvedTransactionsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
+ iNdEx = postIndex
+ case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Transactions", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ShardStates", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -45207,8 +46804,8 @@ func (m *GetUnresolvedTransactionsResponse) UnmarshalVT(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Transactions = append(m.Transactions, &query.TransactionMetadata{})
- if err := m.Transactions[len(m.Transactions)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ m.ShardStates = append(m.ShardStates, &ShardTransactionState{})
+ if err := m.ShardStates[len(m.ShardStates)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -50516,6 +52113,42 @@ func (m *PlannedReparentShardRequest) UnmarshalVT(dAtA []byte) error {
}
}
m.AllowCrossCellPromotion = bool(v != 0)
+ case 8:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ExpectedPrimary", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return protohelpers.ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.ExpectedPrimary == nil {
+ m.ExpectedPrimary = &topodata.TabletAlias{}
+ }
+ if err := m.ExpectedPrimary.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
@@ -62150,6 +63783,25 @@ func (m *WorkflowDeleteRequest) UnmarshalVT(dAtA []byte) error {
}
m.Shards = append(m.Shards, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
+ case 6:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field DeleteBatchSize", wireType)
+ }
+ m.DeleteBatchSize = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.DeleteBatchSize |= int64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
diff --git a/go/vt/proto/vtctlservice/vtctlservice.pb.go b/go/vt/proto/vtctlservice/vtctlservice.pb.go
index 85e5a2e7291..9ffe2fa9aae 100644
--- a/go/vt/proto/vtctlservice/vtctlservice.pb.go
+++ b/go/vt/proto/vtctlservice/vtctlservice.pb.go
@@ -18,7 +18,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.34.2
+// protoc-gen-go v1.35.1
// protoc v3.21.3
// source: vtctlservice.proto
@@ -51,7 +51,7 @@ var file_vtctlservice_proto_rawDesc = []byte{
0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x76, 0x74, 0x63,
0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x56, 0x74,
0x63, 0x74, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x32, 0xc1, 0x59, 0x0a, 0x06, 0x56, 0x74, 0x63, 0x74, 0x6c,
+ 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x32, 0x85, 0x5b, 0x0a, 0x06, 0x56, 0x74, 0x63, 0x74, 0x6c,
0x64, 0x12, 0x4e, 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f,
0x12, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64,
0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
@@ -110,667 +110,680 @@ var file_vtctlservice_proto_rawDesc = []byte{
0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53, 0x63, 0x68, 0x65,
0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x10, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54,
- 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74,
0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e,
+ 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e,
0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65,
- 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72,
- 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65,
- 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74,
- 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6f, 0x0a,
- 0x16, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69,
- 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d,
- 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x1a, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6c,
- 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72,
- 0x0a, 0x17, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
- 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74,
- 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63,
- 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d,
- 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72,
- 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74,
- 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72,
- 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6e,
- 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x43, 0x72,
- 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x20, 0x2e, 0x76,
- 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b,
- 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21,
- 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
- 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61,
- 0x72, 0x64, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43,
- 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x72,
- 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x6c,
- 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f,
+ 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x10, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61,
+ 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76,
+ 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f,
+ 0x74, 0x74, 0x6c, 0x65, 0x72, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e,
- 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x10,
+ 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c,
+ 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x16,
+ 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6c, 0x65,
+ 0x61, 0x6e, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a,
+ 0x17, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d,
+ 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68,
+ 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69,
+ 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x00, 0x12, 0x66, 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61,
+ 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61,
+ 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x63,
+ 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x43, 0x72, 0x65,
+ 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x20, 0x2e, 0x76, 0x74,
+ 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65,
+ 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e,
+ 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72,
+ 0x64, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x72,
+ 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x72, 0x65,
+ 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c,
+ 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66,
+ 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x10, 0x44,
+ 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12,
+ 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65,
+ 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73,
- 0x12, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c,
- 0x65, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61,
- 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x44,
- 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x20, 0x2e,
- 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
- 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65,
- 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68,
- 0x61, 0x72, 0x64, 0x73, 0x12, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74,
- 0x65, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x22, 0x2e, 0x76, 0x74,
- 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x72,
- 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65,
- 0x74, 0x65, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
- 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x44, 0x65,
+ 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x20, 0x2e, 0x76,
+ 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21,
+ 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74,
+ 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x61,
+ 0x72, 0x64, 0x73, 0x12, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+ 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x72, 0x76,
+ 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23,
+ 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74,
+ 0x65, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65,
- 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x16,
- 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e,
- 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x28, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x70, 0x61,
- 0x72, 0x65, 0x6e, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x6d, 0x65,
- 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x68,
- 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x60, 0x0a,
- 0x11, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x41,
- 0x70, 0x70, 0x12, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45,
- 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x70, 0x70,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68,
- 0x41, 0x73, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
- 0x60, 0x0a, 0x11, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41,
- 0x73, 0x44, 0x42, 0x41, 0x12, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44,
- 0x42, 0x41, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74,
- 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74,
- 0x63, 0x68, 0x41, 0x73, 0x44, 0x42, 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
- 0x00, 0x12, 0x4c, 0x0a, 0x0b, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b,
- 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65,
- 0x63, 0x75, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63,
- 0x75, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
- 0x6f, 0x0a, 0x16, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46,
- 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x42, 0x41, 0x12, 0x28, 0x2e, 0x76, 0x74, 0x63, 0x74,
- 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4d, 0x75, 0x6c,
- 0x74, 0x69, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x42, 0x41, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x65, 0x74, 0x63,
+ 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x16, 0x45,
+ 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74,
+ 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x28, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x70, 0x61, 0x72,
+ 0x65, 0x6e, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x6d, 0x65, 0x72,
+ 0x67, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x68, 0x61,
+ 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x11,
+ 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x70,
+ 0x70, 0x12, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78,
+ 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x41, 0x70, 0x70, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41,
+ 0x73, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x60,
+ 0x0a, 0x11, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73,
+ 0x44, 0x42, 0x41, 0x12, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x42,
+ 0x41, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63,
0x68, 0x41, 0x73, 0x44, 0x42, 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
- 0x12, 0x72, 0x0a, 0x17, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x64,
- 0x73, 0x49, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x29, 0x2e, 0x76, 0x74,
- 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x53,
- 0x68, 0x61, 0x72, 0x64, 0x73, 0x49, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73,
- 0x49, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x00, 0x12, 0x7e, 0x0a, 0x1b, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x43, 0x75, 0x74,
- 0x4f, 0x76, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x46, 0x6f, 0x72, 0x63, 0x65, 0x43, 0x75, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65,
- 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46,
+ 0x12, 0x4c, 0x0a, 0x0b, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12,
+ 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63,
+ 0x75, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e,
+ 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75,
+ 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f,
+ 0x0a, 0x16, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x65,
+ 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x42, 0x41, 0x12, 0x28, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74,
+ 0x69, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x44, 0x42, 0x41, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x45,
+ 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x65, 0x74, 0x63, 0x68,
+ 0x41, 0x73, 0x44, 0x42, 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
+ 0x72, 0x0a, 0x17, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73,
+ 0x49, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x29, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x53, 0x68,
+ 0x61, 0x72, 0x64, 0x73, 0x49, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x49,
+ 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x00, 0x12, 0x7e, 0x0a, 0x1b, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x43, 0x75, 0x74, 0x4f,
+ 0x76, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x12, 0x2d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46,
0x6f, 0x72, 0x63, 0x65, 0x43, 0x75, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d,
- 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75,
- 0x70, 0x73, 0x12, 0x1c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47,
- 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74,
- 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
- 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f,
- 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74,
- 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x43,
- 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
- 0x00, 0x12, 0x5d, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f,
- 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x4e, 0x61, 0x6d,
- 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74,
- 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66,
- 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
- 0x12, 0x5a, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61,
- 0x73, 0x65, 0x73, 0x12, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73,
- 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d,
- 0x47, 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x2e,
+ 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x1a, 0x2e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x6f,
+ 0x72, 0x63, 0x65, 0x43, 0x75, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70,
+ 0x73, 0x12, 0x1c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65,
+ 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x42,
+ 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+ 0x12, 0x4e, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12,
+ 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x43,
+ 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e,
+ 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x65,
+ 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+ 0x12, 0x5d, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x4e,
+ 0x61, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x4e, 0x61, 0x6d, 0x65,
+ 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f,
+ 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
+ 0x5a, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73,
+ 0x65, 0x73, 0x12, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47,
+ 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65,
+ 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x47,
+ 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x2e, 0x76,
+ 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6c, 0x6c,
+ 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e,
0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6c,
- 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20,
- 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x75,
- 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65,
- 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74,
- 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47,
- 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47,
- 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73,
- 0x12, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74,
- 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52,
- 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x76, 0x74,
- 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x47, 0x65, 0x74,
- 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x20, 0x2e, 0x76, 0x74,
- 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69,
- 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e,
- 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72,
- 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67,
- 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65,
- 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52,
- 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48,
- 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1b, 0x2e, 0x76, 0x74,
- 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d,
- 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x53,
- 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12,
- 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53,
- 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
- 0x12, 0x66, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c,
- 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c,
- 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26,
+ 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74,
+ 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x4b,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x00, 0x12, 0x51, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x73, 0x12, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65,
+ 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x1a, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65,
+ 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12,
+ 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x4b,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75,
+ 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x50,
+ 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73,
+ 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76,
+ 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x6d,
+ 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52,
+ 0x75, 0x6c, 0x65, 0x73, 0x12, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75,
+ 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a,
+ 0x09, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x53, 0x63,
+ 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25,
+ 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63,
+ 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
+ 0x66, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e,
+ 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61,
+ 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x53, 0x68,
+ 0x61, 0x72, 0x64, 0x12, 0x1a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x1b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53,
+ 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69,
+ 0x0a, 0x14, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e,
+ 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69,
+ 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27,
0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68,
- 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x53,
- 0x68, 0x61, 0x72, 0x64, 0x12, 0x1a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x1b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74,
- 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
- 0x69, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69,
- 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74,
- 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53,
- 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13, 0x47, 0x65,
- 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65,
- 0x73, 0x12, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65,
- 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65,
- 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c,
- 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65,
- 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74,
- 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x28, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64,
- 0x61, 0x74, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66,
- 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d,
- 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1f, 0x2e,
+ 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13, 0x47, 0x65, 0x74,
+ 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73,
+ 0x12, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74,
+ 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x73, 0x12, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a,
+ 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72,
+ 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c,
+ 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x28, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61,
+ 0x74, 0x65, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69,
+ 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x47,
+ 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1f, 0x2e, 0x76,
+ 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56,
+ 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e,
0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76,
- 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20,
- 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72,
- 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68,
- 0x65, 0x6d, 0x61, 0x73, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
- 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x09, 0x47,
- 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x73, 0x12, 0x1c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x1a, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65,
- 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x00, 0x12, 0x63, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c,
- 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65,
- 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25,
- 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68,
- 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x54, 0x6f,
- 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x50, 0x61, 0x74, 0x68, 0x12, 0x21, 0x2e, 0x76, 0x74, 0x63,
- 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f,
- 0x67, 0x79, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e,
- 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70,
- 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x00, 0x12, 0x78, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f,
- 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x12, 0x2b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74,
- 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61,
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e,
- 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72,
- 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69,
- 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a,
- 0x0a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x2e, 0x76, 0x74,
- 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69,
- 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74,
- 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0a, 0x47, 0x65,
- 0x74, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x57, 0x6f,
- 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x10, 0x49, 0x6e,
- 0x69, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x22,
- 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x53,
- 0x68, 0x61, 0x72, 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x49,
+ 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65,
+ 0x6d, 0x61, 0x73, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x09, 0x47, 0x65,
+ 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x73, 0x12, 0x1c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47,
+ 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74,
+ 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x00, 0x12, 0x63, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65,
+ 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72,
+ 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e,
+ 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x72,
+ 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70,
+ 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x50, 0x61, 0x74, 0x68, 0x12, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74,
+ 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67,
+ 0x79, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76,
+ 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x6f,
+ 0x6c, 0x6f, 0x67, 0x79, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x00, 0x12, 0x63, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25,
+ 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72,
+ 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x78, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x55, 0x6e,
+ 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72,
+ 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x1a, 0x2c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65,
+ 0x74, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73,
+ 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x00, 0x12, 0x4b, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12,
+ 0x1c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x56,
+ 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e,
+ 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72,
+ 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b,
+ 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1c, 0x2e, 0x76,
+ 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x53, 0x63, 0x68,
+ 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d,
+ 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0c, 0x47,
+ 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x1e, 0x2e, 0x76, 0x74,
+ 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66,
+ 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x76, 0x74,
+ 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66,
+ 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d,
+ 0x0a, 0x10, 0x49, 0x6e, 0x69, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61,
+ 0x72, 0x79, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x49,
0x6e, 0x69, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x15, 0x4c, 0x61, 0x75,
- 0x6e, 0x63, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x12, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c,
- 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x76, 0x74,
- 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x63,
- 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x63, 0x0a, 0x12, 0x4c, 0x6f, 0x6f, 0x6b, 0x75,
- 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x24, 0x2e,
- 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70,
- 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x43, 0x72, 0x65, 0x61,
- 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17,
- 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x45, 0x78, 0x74, 0x65,
- 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x12, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x50, 0x72, 0x69, 0x6d,
+ 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a,
+ 0x15, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d,
+ 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x28, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x61, 0x75, 0x6e,
+ 0x63, 0x68, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x63, 0x0a, 0x12, 0x4c,
+ 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x43, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x12, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x6f,
+ 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
0x61, 0x74, 0x61, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78,
- 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c,
- 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x45, 0x78, 0x74, 0x65, 0x72,
- 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
- 0x12, 0x60, 0x0a, 0x11, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43,
- 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x72, 0x65,
- 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x76, 0x74, 0x63,
- 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69,
- 0x7a, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0d, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65,
- 0x61, 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x4d, 0x6f, 0x75,
- 0x6e, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x2e, 0x76, 0x74, 0x63,
- 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x67, 0x69,
- 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x76, 0x74,
- 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x67,
+ 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+ 0x12, 0x72, 0x0a, 0x17, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78,
+ 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x12, 0x29, 0x2e, 0x76, 0x74,
+ 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69,
+ 0x6e, 0x64, 0x65, 0x78, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x56, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x45,
+ 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x11, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c,
+ 0x69, 0x7a, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74,
+ 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a,
+ 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24,
+ 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x61, 0x74, 0x65, 0x72,
+ 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0d, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74,
+ 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61,
+ 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a,
+ 0x0d, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1f,
+ 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74,
+ 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, 0x75, 0x6e,
+ 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x6e, 0x72, 0x65,
+ 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74,
+ 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74,
+ 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x67,
0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
- 0x5a, 0x0a, 0x0f, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74,
- 0x65, 0x72, 0x12, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d,
- 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65,
- 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x09, 0x4d,
- 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x09, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x69,
- 0x73, 0x74, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d,
- 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x1c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, 0x75, 0x6e,
- 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
- 0x5b, 0x0a, 0x10, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x72, 0x65,
- 0x61, 0x74, 0x65, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74,
- 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x63, 0x0a, 0x12,
- 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65,
- 0x74, 0x65, 0x12, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d,
- 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74,
- 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43,
- 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
- 0x00, 0x12, 0x4b, 0x0a, 0x0a, 0x50, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12,
- 0x1c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x69, 0x6e, 0x67,
- 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e,
- 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x54, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69,
- 0x0a, 0x14, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e,
- 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65,
- 0x6e, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27,
- 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x6e,
- 0x65, 0x64, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x14, 0x52, 0x65, 0x62,
- 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x72, 0x61, 0x70,
- 0x68, 0x12, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65,
- 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x72, 0x61,
- 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74,
- 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x56,
- 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x25, 0x2e, 0x76, 0x74,
- 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x56,
- 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52,
- 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x47, 0x72, 0x61,
- 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0c,
- 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x2e, 0x76,
- 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68,
- 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x76,
- 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68,
- 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
- 0x66, 0x0a, 0x13, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42,
- 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42,
- 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e,
- 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73,
- 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0c, 0x52, 0x65, 0x6c, 0x6f, 0x61,
- 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x14, 0x52, 0x65,
- 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x12, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52,
- 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x76, 0x74, 0x63,
- 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68,
- 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x11, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53,
- 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x23, 0x2e, 0x76, 0x74, 0x63,
- 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68,
- 0x65, 0x6d, 0x61, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x6f,
- 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76,
- 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x63, 0x0a, 0x12, 0x52, 0x65,
- 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c,
- 0x12, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6d,
- 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
- 0x5a, 0x0a, 0x0f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x43, 0x65,
- 0x6c, 0x6c, 0x12, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52,
- 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x43, 0x65, 0x6c,
- 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x52,
- 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x20, 0x2e,
- 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65,
- 0x6e, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x70, 0x61,
- 0x72, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x68, 0x61, 0x72, 0x64, 0x43,
- 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x52, 0x65, 0x73, 0x68, 0x61, 0x72, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75,
- 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x11, 0x52,
- 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70,
- 0x12, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73,
- 0x74, 0x6f, 0x72, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61, 0x63,
- 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12,
- 0x69, 0x0a, 0x14, 0x52, 0x65, 0x74, 0x72, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69,
- 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d,
- 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x74, 0x72,
- 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x52, 0x75,
- 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x20, 0x2e, 0x76,
- 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x75, 0x6e, 0x48, 0x65, 0x61, 0x6c,
- 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21,
- 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x75, 0x6e, 0x48, 0x65,
- 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x00, 0x12, 0x7e, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x44, 0x75, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69,
- 0x63, 0x79, 0x12, 0x2d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53,
- 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x75, 0x72, 0x61, 0x62, 0x69,
- 0x6c, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x1a, 0x2e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65,
- 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x75, 0x72, 0x61, 0x62, 0x69, 0x6c,
- 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x18, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x49,
- 0x73, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x12,
- 0x2a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x53,
- 0x68, 0x61, 0x72, 0x64, 0x49, 0x73, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x65, 0x72,
- 0x76, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x76, 0x74,
- 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64,
- 0x49, 0x73, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x15, 0x53, 0x65,
- 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74,
- 0x72, 0x6f, 0x6c, 0x12, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f,
- 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x76,
- 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72,
- 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x57,
- 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x57, 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x57, 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13, 0x53, 0x68, 0x61, 0x72,
- 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x12,
- 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72,
- 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x52,
+ 0x48, 0x0a, 0x09, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x12, 0x1b, 0x2e, 0x76,
+ 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x68,
+ 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x76, 0x74, 0x63, 0x74,
+ 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x09, 0x4d, 0x6f, 0x75,
+ 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x10, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65,
+ 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x72,
+ 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74,
+ 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
+ 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+ 0x12, 0x63, 0x0a, 0x12, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6f,
+ 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6d,
+ 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x76,
+ 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62,
+ 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0a, 0x50, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62,
+ 0x6c, 0x65, 0x74, 0x12, 0x1c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x50, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x1a, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x69,
+ 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x00, 0x12, 0x69, 0x0a, 0x14, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x70,
+ 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x26, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65,
+ 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50,
+ 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x68,
+ 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a,
+ 0x14, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e,
+ 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c,
+ 0x64, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13, 0x52, 0x65, 0x62, 0x75,
+ 0x69, 0x6c, 0x64, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12,
+ 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x62, 0x75,
+ 0x69, 0x6c, 0x64, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d,
+ 0x61, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+ 0x12, 0x51, 0x0a, 0x0c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65,
+ 0x12, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x66,
+ 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x66,
+ 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74,
+ 0x61, 0x74, 0x65, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x25, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74,
+ 0x61, 0x74, 0x65, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x1a, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65,
+ 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x79, 0x53, 0x68, 0x61, 0x72,
+ 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0c, 0x52,
+ 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1e, 0x2e, 0x76, 0x74,
+ 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63,
+ 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x76, 0x74,
+ 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63,
+ 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69,
+ 0x0a, 0x14, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65,
+ 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b,
+ 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27,
+ 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61,
+ 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x11, 0x52, 0x65, 0x6c,
+ 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x23,
+ 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61,
+ 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x68, 0x61, 0x72,
+ 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0c, 0x52,
+ 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x1e, 0x2e, 0x76, 0x74,
+ 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x61,
+ 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x76, 0x74,
+ 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x61,
+ 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x63,
+ 0x0a, 0x12, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x43, 0x65, 0x6c, 0x6c, 0x12, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43,
+ 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x68, 0x61,
+ 0x72, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x12, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x43, 0x65,
+ 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74,
+ 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x68, 0x61, 0x72,
+ 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
+ 0x57, 0x0a, 0x0e, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65,
+ 0x74, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65,
+ 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x68,
+ 0x61, 0x72, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74,
+ 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x68, 0x61, 0x72, 0x64, 0x43, 0x72, 0x65,
+ 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53,
+ 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
+ 0x62, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61,
+ 0x63, 0x6b, 0x75, 0x70, 0x12, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b,
+ 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74,
+ 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x72, 0x6f,
+ 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x00, 0x30, 0x01, 0x12, 0x69, 0x0a, 0x14, 0x52, 0x65, 0x74, 0x72, 0x79, 0x53, 0x63, 0x68, 0x65,
+ 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x76, 0x74,
+ 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x53, 0x63, 0x68,
+ 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x52, 0x65, 0x74, 0x72, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x69, 0x67, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57,
+ 0x0a, 0x0e, 0x52, 0x75, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b,
+ 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x75, 0x6e,
+ 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52,
+ 0x75, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7e, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x4b, 0x65,
+ 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x75, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79,
+ 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x75,
+ 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x75, 0x72,
+ 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x18, 0x53, 0x65, 0x74, 0x53, 0x68,
+ 0x61, 0x72, 0x64, 0x49, 0x73, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76,
+ 0x69, 0x6e, 0x67, 0x12, 0x2a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x49, 0x73, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72,
+ 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x2b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x53,
+ 0x68, 0x61, 0x72, 0x64, 0x49, 0x73, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x53, 0x65, 0x72,
+ 0x76, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c,
+ 0x0a, 0x15, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
+ 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x6c,
+ 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x28, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74,
+ 0x53, 0x68, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72,
+ 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b,
+ 0x53, 0x65, 0x74, 0x57, 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1d, 0x2e, 0x76, 0x74,
+ 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x57, 0x72, 0x69, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x57, 0x72, 0x69, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13,
+ 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x41, 0x64, 0x64, 0x12, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70,
+ 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x78, 0x12, 0x25, 0x2e, 0x76, 0x74,
+ 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70,
+ 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53,
+ 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46,
+ 0x69, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x78, 0x0a, 0x19,
+ 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2b, 0x2e, 0x76, 0x74, 0x63, 0x74,
+ 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
- 0x12, 0x66, 0x0a, 0x13, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x78, 0x12, 0x25, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26,
- 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64,
- 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x78, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x78, 0x0a, 0x19, 0x53, 0x68, 0x61, 0x72,
- 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69,
- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53,
- 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50,
- 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x16, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69,
- 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x28, 0x2e, 0x76,
- 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65,
- 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x53, 0x6c, 0x65, 0x65, 0x70, 0x54, 0x61, 0x62, 0x6c,
- 0x65, 0x74, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53,
- 0x6c, 0x65, 0x65, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x6c,
- 0x65, 0x65, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61,
- 0x72, 0x64, 0x41, 0x64, 0x64, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x41,
- 0x64, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x11,
- 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74,
- 0x65, 0x12, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x6f,
- 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x44, 0x65,
- 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d,
- 0x0a, 0x10, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53,
- 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x16, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52,
+ 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65,
+ 0x12, 0x28, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61,
+ 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6d,
+ 0x6f, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x70, 0x6c,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x53, 0x6c, 0x65, 0x65, 0x70,
+ 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x53, 0x6c, 0x65, 0x65, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x53, 0x6c, 0x65, 0x65, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x53, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74,
+ 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72,
+ 0x64, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74,
+ 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68,
+ 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+ 0x12, 0x60, 0x0a, 0x11, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x44,
+ 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x44, 0x65, 0x6c,
+ 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x68, 0x61,
+ 0x72, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x10, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
0x74, 0x61, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a,
- 0x0f, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x12, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x6f,
- 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7b, 0x0a, 0x1a, 0x54, 0x61, 0x62,
- 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x52, 0x65, 0x70,
- 0x61, 0x72, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x12, 0x2c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e,
- 0x61, 0x6c, 0x6c, 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
- 0x6c, 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
- 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x49,
- 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63,
- 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x65, 0x6c,
- 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
- 0x5d, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c,
- 0x69, 0x61, 0x73, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
+ 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7b, 0x0a,
+ 0x1a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c,
+ 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x12, 0x2c, 0x2e, 0x76, 0x74,
+ 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x45, 0x78,
+ 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74,
+ 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x76, 0x74, 0x63, 0x74,
+ 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65,
+ 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x65, 0x64,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x55, 0x70,
+ 0x64, 0x61, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x2e, 0x76,
+ 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43,
+ 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21,
+ 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74,
+ 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x65, 0x6c,
+ 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
0x61, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x41,
- 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45,
- 0x0a, 0x08, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x2e, 0x76, 0x74, 0x63,
- 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x10, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
- 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74,
- 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65,
- 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e,
- 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61,
- 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x16, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65,
- 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x28,
+ 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x74,
+ 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x65,
+ 0x6c, 0x6c, 0x73, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x00, 0x12, 0x45, 0x0a, 0x08, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1a,
0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64,
- 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
- 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68,
- 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
- 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x1f, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72,
- 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x56,
- 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65,
- 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x29, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61,
- 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69,
- 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x1a, 0x2a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61,
- 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
- 0x69, 0x0a, 0x14, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69,
- 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x26, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73,
- 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69,
- 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x64,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x56, 0x61,
- 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x21, 0x2e,
+ 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x10, 0x56, 0x61, 0x6c,
+ 0x69, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x22, 0x2e,
0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61,
- 0x74, 0x65, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c,
- 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x56, 0x44, 0x69, 0x66, 0x66, 0x43,
- 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x56, 0x44, 0x69, 0x66, 0x66, 0x44,
- 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x56, 0x44, 0x69, 0x66, 0x66, 0x52,
- 0x65, 0x73, 0x75, 0x6d, 0x65, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x09, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53,
- 0x68, 0x6f, 0x77, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
- 0x56, 0x44, 0x69, 0x66, 0x66, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x1c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69,
- 0x66, 0x66, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
- 0x12, 0x48, 0x0a, 0x09, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x1b, 0x2e,
- 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53,
- 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x76, 0x74, 0x63,
- 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53, 0x74, 0x6f, 0x70,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x57, 0x6f,
- 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x76,
- 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
- 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21,
- 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66,
- 0x6c, 0x6f, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53,
- 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74,
- 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x15,
- 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x54, 0x72,
- 0x61, 0x66, 0x66, 0x69, 0x63, 0x12, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68,
- 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28,
- 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66,
- 0x6c, 0x6f, 0x77, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x57, 0x6f,
- 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x76,
- 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
- 0x77, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21,
- 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66,
- 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72,
- 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x75, 0x6c, 0x65, 0x73,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
- 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x75, 0x6c,
- 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x15,
- 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x72,
- 0x61, 0x66, 0x66, 0x69, 0x63, 0x12, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
- 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72,
- 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28,
- 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66,
- 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x2b, 0x5a, 0x29, 0x76, 0x69,
- 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67,
- 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x74, 0x63, 0x74, 0x6c,
- 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61,
+ 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x16, 0x56, 0x61, 0x6c, 0x69,
+ 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x12, 0x28, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56,
+ 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x76,
+ 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
+ 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x56, 0x61, 0x6c,
+ 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x1f, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53,
+ 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x76, 0x74,
+ 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65,
+ 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
+ 0x72, 0x0a, 0x17, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69,
+ 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x29, 0x2e, 0x76, 0x74, 0x63,
+ 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56,
+ 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74,
+ 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
+ 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x14, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56,
+ 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x26, 0x2e, 0x76, 0x74,
+ 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65,
+ 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53,
+ 0x68, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a,
+ 0x0a, 0x0f, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d,
+ 0x61, 0x12, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x61,
+ 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x56, 0x44,
+ 0x69, 0x66, 0x66, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74,
+ 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x43, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x56, 0x44,
+ 0x69, 0x66, 0x66, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74,
+ 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x44, 0x65, 0x6c, 0x65, 0x74,
+ 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x56, 0x44,
+ 0x69, 0x66, 0x66, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x12, 0x1d, 0x2e, 0x76, 0x74, 0x63, 0x74,
+ 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x73, 0x75, 0x6d,
+ 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c,
+ 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x09, 0x56, 0x44,
+ 0x69, 0x66, 0x66, 0x53, 0x68, 0x6f, 0x77, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64,
+ 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61,
+ 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x09, 0x56, 0x44, 0x69, 0x66, 0x66, 0x53, 0x74, 0x6f,
+ 0x70, 0x12, 0x1b, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44,
+ 0x69, 0x66, 0x66, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c,
+ 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x44, 0x69, 0x66, 0x66,
+ 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57,
+ 0x0a, 0x0e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+ 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72,
+ 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57,
+ 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x57, 0x6f, 0x72, 0x6b, 0x66,
+ 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74,
+ 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74,
+ 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74,
+ 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
+ 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+ 0x12, 0x6c, 0x0a, 0x15, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x77, 0x69, 0x74,
+ 0x63, 0x68, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x12, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74,
+ 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x77,
+ 0x69, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57,
+ 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61,
+ 0x66, 0x66, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57,
+ 0x0a, 0x0e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+ 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72,
+ 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57,
+ 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4d, 0x69,
+ 0x72, 0x72, 0x6f, 0x72, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x76, 0x74, 0x63, 0x74,
+ 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52,
+ 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x74,
+ 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x72, 0x72, 0x6f,
+ 0x72, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+ 0x12, 0x6c, 0x0a, 0x15, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x72, 0x72,
+ 0x6f, 0x72, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x12, 0x27, 0x2e, 0x76, 0x74, 0x63, 0x74,
+ 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4d, 0x69,
+ 0x72, 0x72, 0x6f, 0x72, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x76, 0x74, 0x63, 0x74, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x57,
+ 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x72, 0x61,
+ 0x66, 0x66, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x2b,
+ 0x5a, 0x29, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65,
+ 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76,
+ 0x74, 0x63, 0x74, 0x6c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x33,
}
var file_vtctlservice_proto_goTypes = []any{
@@ -785,235 +798,239 @@ var file_vtctlservice_proto_goTypes = []any{
(*vtctldata.BackupRequest)(nil), // 8: vtctldata.BackupRequest
(*vtctldata.BackupShardRequest)(nil), // 9: vtctldata.BackupShardRequest
(*vtctldata.CancelSchemaMigrationRequest)(nil), // 10: vtctldata.CancelSchemaMigrationRequest
- (*vtctldata.ChangeTabletTypeRequest)(nil), // 11: vtctldata.ChangeTabletTypeRequest
- (*vtctldata.CheckThrottlerRequest)(nil), // 12: vtctldata.CheckThrottlerRequest
- (*vtctldata.CleanupSchemaMigrationRequest)(nil), // 13: vtctldata.CleanupSchemaMigrationRequest
- (*vtctldata.CompleteSchemaMigrationRequest)(nil), // 14: vtctldata.CompleteSchemaMigrationRequest
- (*vtctldata.ConcludeTransactionRequest)(nil), // 15: vtctldata.ConcludeTransactionRequest
- (*vtctldata.CreateKeyspaceRequest)(nil), // 16: vtctldata.CreateKeyspaceRequest
- (*vtctldata.CreateShardRequest)(nil), // 17: vtctldata.CreateShardRequest
- (*vtctldata.DeleteCellInfoRequest)(nil), // 18: vtctldata.DeleteCellInfoRequest
- (*vtctldata.DeleteCellsAliasRequest)(nil), // 19: vtctldata.DeleteCellsAliasRequest
- (*vtctldata.DeleteKeyspaceRequest)(nil), // 20: vtctldata.DeleteKeyspaceRequest
- (*vtctldata.DeleteShardsRequest)(nil), // 21: vtctldata.DeleteShardsRequest
- (*vtctldata.DeleteSrvVSchemaRequest)(nil), // 22: vtctldata.DeleteSrvVSchemaRequest
- (*vtctldata.DeleteTabletsRequest)(nil), // 23: vtctldata.DeleteTabletsRequest
- (*vtctldata.EmergencyReparentShardRequest)(nil), // 24: vtctldata.EmergencyReparentShardRequest
- (*vtctldata.ExecuteFetchAsAppRequest)(nil), // 25: vtctldata.ExecuteFetchAsAppRequest
- (*vtctldata.ExecuteFetchAsDBARequest)(nil), // 26: vtctldata.ExecuteFetchAsDBARequest
- (*vtctldata.ExecuteHookRequest)(nil), // 27: vtctldata.ExecuteHookRequest
- (*vtctldata.ExecuteMultiFetchAsDBARequest)(nil), // 28: vtctldata.ExecuteMultiFetchAsDBARequest
- (*vtctldata.FindAllShardsInKeyspaceRequest)(nil), // 29: vtctldata.FindAllShardsInKeyspaceRequest
- (*vtctldata.ForceCutOverSchemaMigrationRequest)(nil), // 30: vtctldata.ForceCutOverSchemaMigrationRequest
- (*vtctldata.GetBackupsRequest)(nil), // 31: vtctldata.GetBackupsRequest
- (*vtctldata.GetCellInfoRequest)(nil), // 32: vtctldata.GetCellInfoRequest
- (*vtctldata.GetCellInfoNamesRequest)(nil), // 33: vtctldata.GetCellInfoNamesRequest
- (*vtctldata.GetCellsAliasesRequest)(nil), // 34: vtctldata.GetCellsAliasesRequest
- (*vtctldata.GetFullStatusRequest)(nil), // 35: vtctldata.GetFullStatusRequest
- (*vtctldata.GetKeyspaceRequest)(nil), // 36: vtctldata.GetKeyspaceRequest
- (*vtctldata.GetKeyspacesRequest)(nil), // 37: vtctldata.GetKeyspacesRequest
- (*vtctldata.GetKeyspaceRoutingRulesRequest)(nil), // 38: vtctldata.GetKeyspaceRoutingRulesRequest
- (*vtctldata.GetPermissionsRequest)(nil), // 39: vtctldata.GetPermissionsRequest
- (*vtctldata.GetRoutingRulesRequest)(nil), // 40: vtctldata.GetRoutingRulesRequest
- (*vtctldata.GetSchemaRequest)(nil), // 41: vtctldata.GetSchemaRequest
- (*vtctldata.GetSchemaMigrationsRequest)(nil), // 42: vtctldata.GetSchemaMigrationsRequest
- (*vtctldata.GetShardReplicationRequest)(nil), // 43: vtctldata.GetShardReplicationRequest
- (*vtctldata.GetShardRequest)(nil), // 44: vtctldata.GetShardRequest
- (*vtctldata.GetShardRoutingRulesRequest)(nil), // 45: vtctldata.GetShardRoutingRulesRequest
- (*vtctldata.GetSrvKeyspaceNamesRequest)(nil), // 46: vtctldata.GetSrvKeyspaceNamesRequest
- (*vtctldata.GetSrvKeyspacesRequest)(nil), // 47: vtctldata.GetSrvKeyspacesRequest
- (*vtctldata.UpdateThrottlerConfigRequest)(nil), // 48: vtctldata.UpdateThrottlerConfigRequest
- (*vtctldata.GetSrvVSchemaRequest)(nil), // 49: vtctldata.GetSrvVSchemaRequest
- (*vtctldata.GetSrvVSchemasRequest)(nil), // 50: vtctldata.GetSrvVSchemasRequest
- (*vtctldata.GetTabletRequest)(nil), // 51: vtctldata.GetTabletRequest
- (*vtctldata.GetTabletsRequest)(nil), // 52: vtctldata.GetTabletsRequest
- (*vtctldata.GetThrottlerStatusRequest)(nil), // 53: vtctldata.GetThrottlerStatusRequest
- (*vtctldata.GetTopologyPathRequest)(nil), // 54: vtctldata.GetTopologyPathRequest
- (*vtctldata.GetUnresolvedTransactionsRequest)(nil), // 55: vtctldata.GetUnresolvedTransactionsRequest
- (*vtctldata.GetVersionRequest)(nil), // 56: vtctldata.GetVersionRequest
- (*vtctldata.GetVSchemaRequest)(nil), // 57: vtctldata.GetVSchemaRequest
- (*vtctldata.GetWorkflowsRequest)(nil), // 58: vtctldata.GetWorkflowsRequest
- (*vtctldata.InitShardPrimaryRequest)(nil), // 59: vtctldata.InitShardPrimaryRequest
- (*vtctldata.LaunchSchemaMigrationRequest)(nil), // 60: vtctldata.LaunchSchemaMigrationRequest
- (*vtctldata.LookupVindexCreateRequest)(nil), // 61: vtctldata.LookupVindexCreateRequest
- (*vtctldata.LookupVindexExternalizeRequest)(nil), // 62: vtctldata.LookupVindexExternalizeRequest
- (*vtctldata.MaterializeCreateRequest)(nil), // 63: vtctldata.MaterializeCreateRequest
- (*vtctldata.MigrateCreateRequest)(nil), // 64: vtctldata.MigrateCreateRequest
- (*vtctldata.MountRegisterRequest)(nil), // 65: vtctldata.MountRegisterRequest
- (*vtctldata.MountUnregisterRequest)(nil), // 66: vtctldata.MountUnregisterRequest
- (*vtctldata.MountShowRequest)(nil), // 67: vtctldata.MountShowRequest
- (*vtctldata.MountListRequest)(nil), // 68: vtctldata.MountListRequest
- (*vtctldata.MoveTablesCreateRequest)(nil), // 69: vtctldata.MoveTablesCreateRequest
- (*vtctldata.MoveTablesCompleteRequest)(nil), // 70: vtctldata.MoveTablesCompleteRequest
- (*vtctldata.PingTabletRequest)(nil), // 71: vtctldata.PingTabletRequest
- (*vtctldata.PlannedReparentShardRequest)(nil), // 72: vtctldata.PlannedReparentShardRequest
- (*vtctldata.RebuildKeyspaceGraphRequest)(nil), // 73: vtctldata.RebuildKeyspaceGraphRequest
- (*vtctldata.RebuildVSchemaGraphRequest)(nil), // 74: vtctldata.RebuildVSchemaGraphRequest
- (*vtctldata.RefreshStateRequest)(nil), // 75: vtctldata.RefreshStateRequest
- (*vtctldata.RefreshStateByShardRequest)(nil), // 76: vtctldata.RefreshStateByShardRequest
- (*vtctldata.ReloadSchemaRequest)(nil), // 77: vtctldata.ReloadSchemaRequest
- (*vtctldata.ReloadSchemaKeyspaceRequest)(nil), // 78: vtctldata.ReloadSchemaKeyspaceRequest
- (*vtctldata.ReloadSchemaShardRequest)(nil), // 79: vtctldata.ReloadSchemaShardRequest
- (*vtctldata.RemoveBackupRequest)(nil), // 80: vtctldata.RemoveBackupRequest
- (*vtctldata.RemoveKeyspaceCellRequest)(nil), // 81: vtctldata.RemoveKeyspaceCellRequest
- (*vtctldata.RemoveShardCellRequest)(nil), // 82: vtctldata.RemoveShardCellRequest
- (*vtctldata.ReparentTabletRequest)(nil), // 83: vtctldata.ReparentTabletRequest
- (*vtctldata.ReshardCreateRequest)(nil), // 84: vtctldata.ReshardCreateRequest
- (*vtctldata.RestoreFromBackupRequest)(nil), // 85: vtctldata.RestoreFromBackupRequest
- (*vtctldata.RetrySchemaMigrationRequest)(nil), // 86: vtctldata.RetrySchemaMigrationRequest
- (*vtctldata.RunHealthCheckRequest)(nil), // 87: vtctldata.RunHealthCheckRequest
- (*vtctldata.SetKeyspaceDurabilityPolicyRequest)(nil), // 88: vtctldata.SetKeyspaceDurabilityPolicyRequest
- (*vtctldata.SetShardIsPrimaryServingRequest)(nil), // 89: vtctldata.SetShardIsPrimaryServingRequest
- (*vtctldata.SetShardTabletControlRequest)(nil), // 90: vtctldata.SetShardTabletControlRequest
- (*vtctldata.SetWritableRequest)(nil), // 91: vtctldata.SetWritableRequest
- (*vtctldata.ShardReplicationAddRequest)(nil), // 92: vtctldata.ShardReplicationAddRequest
- (*vtctldata.ShardReplicationFixRequest)(nil), // 93: vtctldata.ShardReplicationFixRequest
- (*vtctldata.ShardReplicationPositionsRequest)(nil), // 94: vtctldata.ShardReplicationPositionsRequest
- (*vtctldata.ShardReplicationRemoveRequest)(nil), // 95: vtctldata.ShardReplicationRemoveRequest
- (*vtctldata.SleepTabletRequest)(nil), // 96: vtctldata.SleepTabletRequest
- (*vtctldata.SourceShardAddRequest)(nil), // 97: vtctldata.SourceShardAddRequest
- (*vtctldata.SourceShardDeleteRequest)(nil), // 98: vtctldata.SourceShardDeleteRequest
- (*vtctldata.StartReplicationRequest)(nil), // 99: vtctldata.StartReplicationRequest
- (*vtctldata.StopReplicationRequest)(nil), // 100: vtctldata.StopReplicationRequest
- (*vtctldata.TabletExternallyReparentedRequest)(nil), // 101: vtctldata.TabletExternallyReparentedRequest
- (*vtctldata.UpdateCellInfoRequest)(nil), // 102: vtctldata.UpdateCellInfoRequest
- (*vtctldata.UpdateCellsAliasRequest)(nil), // 103: vtctldata.UpdateCellsAliasRequest
- (*vtctldata.ValidateRequest)(nil), // 104: vtctldata.ValidateRequest
- (*vtctldata.ValidateKeyspaceRequest)(nil), // 105: vtctldata.ValidateKeyspaceRequest
- (*vtctldata.ValidateSchemaKeyspaceRequest)(nil), // 106: vtctldata.ValidateSchemaKeyspaceRequest
- (*vtctldata.ValidateShardRequest)(nil), // 107: vtctldata.ValidateShardRequest
- (*vtctldata.ValidateVersionKeyspaceRequest)(nil), // 108: vtctldata.ValidateVersionKeyspaceRequest
- (*vtctldata.ValidateVersionShardRequest)(nil), // 109: vtctldata.ValidateVersionShardRequest
- (*vtctldata.ValidateVSchemaRequest)(nil), // 110: vtctldata.ValidateVSchemaRequest
- (*vtctldata.VDiffCreateRequest)(nil), // 111: vtctldata.VDiffCreateRequest
- (*vtctldata.VDiffDeleteRequest)(nil), // 112: vtctldata.VDiffDeleteRequest
- (*vtctldata.VDiffResumeRequest)(nil), // 113: vtctldata.VDiffResumeRequest
- (*vtctldata.VDiffShowRequest)(nil), // 114: vtctldata.VDiffShowRequest
- (*vtctldata.VDiffStopRequest)(nil), // 115: vtctldata.VDiffStopRequest
- (*vtctldata.WorkflowDeleteRequest)(nil), // 116: vtctldata.WorkflowDeleteRequest
- (*vtctldata.WorkflowStatusRequest)(nil), // 117: vtctldata.WorkflowStatusRequest
- (*vtctldata.WorkflowSwitchTrafficRequest)(nil), // 118: vtctldata.WorkflowSwitchTrafficRequest
- (*vtctldata.WorkflowUpdateRequest)(nil), // 119: vtctldata.WorkflowUpdateRequest
- (*vtctldata.GetMirrorRulesRequest)(nil), // 120: vtctldata.GetMirrorRulesRequest
- (*vtctldata.WorkflowMirrorTrafficRequest)(nil), // 121: vtctldata.WorkflowMirrorTrafficRequest
- (*vtctldata.ExecuteVtctlCommandResponse)(nil), // 122: vtctldata.ExecuteVtctlCommandResponse
- (*vtctldata.AddCellInfoResponse)(nil), // 123: vtctldata.AddCellInfoResponse
- (*vtctldata.AddCellsAliasResponse)(nil), // 124: vtctldata.AddCellsAliasResponse
- (*vtctldata.ApplyRoutingRulesResponse)(nil), // 125: vtctldata.ApplyRoutingRulesResponse
- (*vtctldata.ApplySchemaResponse)(nil), // 126: vtctldata.ApplySchemaResponse
- (*vtctldata.ApplyKeyspaceRoutingRulesResponse)(nil), // 127: vtctldata.ApplyKeyspaceRoutingRulesResponse
- (*vtctldata.ApplyShardRoutingRulesResponse)(nil), // 128: vtctldata.ApplyShardRoutingRulesResponse
- (*vtctldata.ApplyVSchemaResponse)(nil), // 129: vtctldata.ApplyVSchemaResponse
- (*vtctldata.BackupResponse)(nil), // 130: vtctldata.BackupResponse
- (*vtctldata.CancelSchemaMigrationResponse)(nil), // 131: vtctldata.CancelSchemaMigrationResponse
- (*vtctldata.ChangeTabletTypeResponse)(nil), // 132: vtctldata.ChangeTabletTypeResponse
- (*vtctldata.CheckThrottlerResponse)(nil), // 133: vtctldata.CheckThrottlerResponse
- (*vtctldata.CleanupSchemaMigrationResponse)(nil), // 134: vtctldata.CleanupSchemaMigrationResponse
- (*vtctldata.CompleteSchemaMigrationResponse)(nil), // 135: vtctldata.CompleteSchemaMigrationResponse
- (*vtctldata.ConcludeTransactionResponse)(nil), // 136: vtctldata.ConcludeTransactionResponse
- (*vtctldata.CreateKeyspaceResponse)(nil), // 137: vtctldata.CreateKeyspaceResponse
- (*vtctldata.CreateShardResponse)(nil), // 138: vtctldata.CreateShardResponse
- (*vtctldata.DeleteCellInfoResponse)(nil), // 139: vtctldata.DeleteCellInfoResponse
- (*vtctldata.DeleteCellsAliasResponse)(nil), // 140: vtctldata.DeleteCellsAliasResponse
- (*vtctldata.DeleteKeyspaceResponse)(nil), // 141: vtctldata.DeleteKeyspaceResponse
- (*vtctldata.DeleteShardsResponse)(nil), // 142: vtctldata.DeleteShardsResponse
- (*vtctldata.DeleteSrvVSchemaResponse)(nil), // 143: vtctldata.DeleteSrvVSchemaResponse
- (*vtctldata.DeleteTabletsResponse)(nil), // 144: vtctldata.DeleteTabletsResponse
- (*vtctldata.EmergencyReparentShardResponse)(nil), // 145: vtctldata.EmergencyReparentShardResponse
- (*vtctldata.ExecuteFetchAsAppResponse)(nil), // 146: vtctldata.ExecuteFetchAsAppResponse
- (*vtctldata.ExecuteFetchAsDBAResponse)(nil), // 147: vtctldata.ExecuteFetchAsDBAResponse
- (*vtctldata.ExecuteHookResponse)(nil), // 148: vtctldata.ExecuteHookResponse
- (*vtctldata.ExecuteMultiFetchAsDBAResponse)(nil), // 149: vtctldata.ExecuteMultiFetchAsDBAResponse
- (*vtctldata.FindAllShardsInKeyspaceResponse)(nil), // 150: vtctldata.FindAllShardsInKeyspaceResponse
- (*vtctldata.ForceCutOverSchemaMigrationResponse)(nil), // 151: vtctldata.ForceCutOverSchemaMigrationResponse
- (*vtctldata.GetBackupsResponse)(nil), // 152: vtctldata.GetBackupsResponse
- (*vtctldata.GetCellInfoResponse)(nil), // 153: vtctldata.GetCellInfoResponse
- (*vtctldata.GetCellInfoNamesResponse)(nil), // 154: vtctldata.GetCellInfoNamesResponse
- (*vtctldata.GetCellsAliasesResponse)(nil), // 155: vtctldata.GetCellsAliasesResponse
- (*vtctldata.GetFullStatusResponse)(nil), // 156: vtctldata.GetFullStatusResponse
- (*vtctldata.GetKeyspaceResponse)(nil), // 157: vtctldata.GetKeyspaceResponse
- (*vtctldata.GetKeyspacesResponse)(nil), // 158: vtctldata.GetKeyspacesResponse
- (*vtctldata.GetKeyspaceRoutingRulesResponse)(nil), // 159: vtctldata.GetKeyspaceRoutingRulesResponse
- (*vtctldata.GetPermissionsResponse)(nil), // 160: vtctldata.GetPermissionsResponse
- (*vtctldata.GetRoutingRulesResponse)(nil), // 161: vtctldata.GetRoutingRulesResponse
- (*vtctldata.GetSchemaResponse)(nil), // 162: vtctldata.GetSchemaResponse
- (*vtctldata.GetSchemaMigrationsResponse)(nil), // 163: vtctldata.GetSchemaMigrationsResponse
- (*vtctldata.GetShardReplicationResponse)(nil), // 164: vtctldata.GetShardReplicationResponse
- (*vtctldata.GetShardResponse)(nil), // 165: vtctldata.GetShardResponse
- (*vtctldata.GetShardRoutingRulesResponse)(nil), // 166: vtctldata.GetShardRoutingRulesResponse
- (*vtctldata.GetSrvKeyspaceNamesResponse)(nil), // 167: vtctldata.GetSrvKeyspaceNamesResponse
- (*vtctldata.GetSrvKeyspacesResponse)(nil), // 168: vtctldata.GetSrvKeyspacesResponse
- (*vtctldata.UpdateThrottlerConfigResponse)(nil), // 169: vtctldata.UpdateThrottlerConfigResponse
- (*vtctldata.GetSrvVSchemaResponse)(nil), // 170: vtctldata.GetSrvVSchemaResponse
- (*vtctldata.GetSrvVSchemasResponse)(nil), // 171: vtctldata.GetSrvVSchemasResponse
- (*vtctldata.GetTabletResponse)(nil), // 172: vtctldata.GetTabletResponse
- (*vtctldata.GetTabletsResponse)(nil), // 173: vtctldata.GetTabletsResponse
- (*vtctldata.GetThrottlerStatusResponse)(nil), // 174: vtctldata.GetThrottlerStatusResponse
- (*vtctldata.GetTopologyPathResponse)(nil), // 175: vtctldata.GetTopologyPathResponse
- (*vtctldata.GetUnresolvedTransactionsResponse)(nil), // 176: vtctldata.GetUnresolvedTransactionsResponse
- (*vtctldata.GetVersionResponse)(nil), // 177: vtctldata.GetVersionResponse
- (*vtctldata.GetVSchemaResponse)(nil), // 178: vtctldata.GetVSchemaResponse
- (*vtctldata.GetWorkflowsResponse)(nil), // 179: vtctldata.GetWorkflowsResponse
- (*vtctldata.InitShardPrimaryResponse)(nil), // 180: vtctldata.InitShardPrimaryResponse
- (*vtctldata.LaunchSchemaMigrationResponse)(nil), // 181: vtctldata.LaunchSchemaMigrationResponse
- (*vtctldata.LookupVindexCreateResponse)(nil), // 182: vtctldata.LookupVindexCreateResponse
- (*vtctldata.LookupVindexExternalizeResponse)(nil), // 183: vtctldata.LookupVindexExternalizeResponse
- (*vtctldata.MaterializeCreateResponse)(nil), // 184: vtctldata.MaterializeCreateResponse
- (*vtctldata.WorkflowStatusResponse)(nil), // 185: vtctldata.WorkflowStatusResponse
- (*vtctldata.MountRegisterResponse)(nil), // 186: vtctldata.MountRegisterResponse
- (*vtctldata.MountUnregisterResponse)(nil), // 187: vtctldata.MountUnregisterResponse
- (*vtctldata.MountShowResponse)(nil), // 188: vtctldata.MountShowResponse
- (*vtctldata.MountListResponse)(nil), // 189: vtctldata.MountListResponse
- (*vtctldata.MoveTablesCompleteResponse)(nil), // 190: vtctldata.MoveTablesCompleteResponse
- (*vtctldata.PingTabletResponse)(nil), // 191: vtctldata.PingTabletResponse
- (*vtctldata.PlannedReparentShardResponse)(nil), // 192: vtctldata.PlannedReparentShardResponse
- (*vtctldata.RebuildKeyspaceGraphResponse)(nil), // 193: vtctldata.RebuildKeyspaceGraphResponse
- (*vtctldata.RebuildVSchemaGraphResponse)(nil), // 194: vtctldata.RebuildVSchemaGraphResponse
- (*vtctldata.RefreshStateResponse)(nil), // 195: vtctldata.RefreshStateResponse
- (*vtctldata.RefreshStateByShardResponse)(nil), // 196: vtctldata.RefreshStateByShardResponse
- (*vtctldata.ReloadSchemaResponse)(nil), // 197: vtctldata.ReloadSchemaResponse
- (*vtctldata.ReloadSchemaKeyspaceResponse)(nil), // 198: vtctldata.ReloadSchemaKeyspaceResponse
- (*vtctldata.ReloadSchemaShardResponse)(nil), // 199: vtctldata.ReloadSchemaShardResponse
- (*vtctldata.RemoveBackupResponse)(nil), // 200: vtctldata.RemoveBackupResponse
- (*vtctldata.RemoveKeyspaceCellResponse)(nil), // 201: vtctldata.RemoveKeyspaceCellResponse
- (*vtctldata.RemoveShardCellResponse)(nil), // 202: vtctldata.RemoveShardCellResponse
- (*vtctldata.ReparentTabletResponse)(nil), // 203: vtctldata.ReparentTabletResponse
- (*vtctldata.RestoreFromBackupResponse)(nil), // 204: vtctldata.RestoreFromBackupResponse
- (*vtctldata.RetrySchemaMigrationResponse)(nil), // 205: vtctldata.RetrySchemaMigrationResponse
- (*vtctldata.RunHealthCheckResponse)(nil), // 206: vtctldata.RunHealthCheckResponse
- (*vtctldata.SetKeyspaceDurabilityPolicyResponse)(nil), // 207: vtctldata.SetKeyspaceDurabilityPolicyResponse
- (*vtctldata.SetShardIsPrimaryServingResponse)(nil), // 208: vtctldata.SetShardIsPrimaryServingResponse
- (*vtctldata.SetShardTabletControlResponse)(nil), // 209: vtctldata.SetShardTabletControlResponse
- (*vtctldata.SetWritableResponse)(nil), // 210: vtctldata.SetWritableResponse
- (*vtctldata.ShardReplicationAddResponse)(nil), // 211: vtctldata.ShardReplicationAddResponse
- (*vtctldata.ShardReplicationFixResponse)(nil), // 212: vtctldata.ShardReplicationFixResponse
- (*vtctldata.ShardReplicationPositionsResponse)(nil), // 213: vtctldata.ShardReplicationPositionsResponse
- (*vtctldata.ShardReplicationRemoveResponse)(nil), // 214: vtctldata.ShardReplicationRemoveResponse
- (*vtctldata.SleepTabletResponse)(nil), // 215: vtctldata.SleepTabletResponse
- (*vtctldata.SourceShardAddResponse)(nil), // 216: vtctldata.SourceShardAddResponse
- (*vtctldata.SourceShardDeleteResponse)(nil), // 217: vtctldata.SourceShardDeleteResponse
- (*vtctldata.StartReplicationResponse)(nil), // 218: vtctldata.StartReplicationResponse
- (*vtctldata.StopReplicationResponse)(nil), // 219: vtctldata.StopReplicationResponse
- (*vtctldata.TabletExternallyReparentedResponse)(nil), // 220: vtctldata.TabletExternallyReparentedResponse
- (*vtctldata.UpdateCellInfoResponse)(nil), // 221: vtctldata.UpdateCellInfoResponse
- (*vtctldata.UpdateCellsAliasResponse)(nil), // 222: vtctldata.UpdateCellsAliasResponse
- (*vtctldata.ValidateResponse)(nil), // 223: vtctldata.ValidateResponse
- (*vtctldata.ValidateKeyspaceResponse)(nil), // 224: vtctldata.ValidateKeyspaceResponse
- (*vtctldata.ValidateSchemaKeyspaceResponse)(nil), // 225: vtctldata.ValidateSchemaKeyspaceResponse
- (*vtctldata.ValidateShardResponse)(nil), // 226: vtctldata.ValidateShardResponse
- (*vtctldata.ValidateVersionKeyspaceResponse)(nil), // 227: vtctldata.ValidateVersionKeyspaceResponse
- (*vtctldata.ValidateVersionShardResponse)(nil), // 228: vtctldata.ValidateVersionShardResponse
- (*vtctldata.ValidateVSchemaResponse)(nil), // 229: vtctldata.ValidateVSchemaResponse
- (*vtctldata.VDiffCreateResponse)(nil), // 230: vtctldata.VDiffCreateResponse
- (*vtctldata.VDiffDeleteResponse)(nil), // 231: vtctldata.VDiffDeleteResponse
- (*vtctldata.VDiffResumeResponse)(nil), // 232: vtctldata.VDiffResumeResponse
- (*vtctldata.VDiffShowResponse)(nil), // 233: vtctldata.VDiffShowResponse
- (*vtctldata.VDiffStopResponse)(nil), // 234: vtctldata.VDiffStopResponse
- (*vtctldata.WorkflowDeleteResponse)(nil), // 235: vtctldata.WorkflowDeleteResponse
- (*vtctldata.WorkflowSwitchTrafficResponse)(nil), // 236: vtctldata.WorkflowSwitchTrafficResponse
- (*vtctldata.WorkflowUpdateResponse)(nil), // 237: vtctldata.WorkflowUpdateResponse
- (*vtctldata.GetMirrorRulesResponse)(nil), // 238: vtctldata.GetMirrorRulesResponse
- (*vtctldata.WorkflowMirrorTrafficResponse)(nil), // 239: vtctldata.WorkflowMirrorTrafficResponse
+ (*vtctldata.ChangeTabletTagsRequest)(nil), // 11: vtctldata.ChangeTabletTagsRequest
+ (*vtctldata.ChangeTabletTypeRequest)(nil), // 12: vtctldata.ChangeTabletTypeRequest
+ (*vtctldata.CheckThrottlerRequest)(nil), // 13: vtctldata.CheckThrottlerRequest
+ (*vtctldata.CleanupSchemaMigrationRequest)(nil), // 14: vtctldata.CleanupSchemaMigrationRequest
+ (*vtctldata.CompleteSchemaMigrationRequest)(nil), // 15: vtctldata.CompleteSchemaMigrationRequest
+ (*vtctldata.ConcludeTransactionRequest)(nil), // 16: vtctldata.ConcludeTransactionRequest
+ (*vtctldata.CreateKeyspaceRequest)(nil), // 17: vtctldata.CreateKeyspaceRequest
+ (*vtctldata.CreateShardRequest)(nil), // 18: vtctldata.CreateShardRequest
+ (*vtctldata.DeleteCellInfoRequest)(nil), // 19: vtctldata.DeleteCellInfoRequest
+ (*vtctldata.DeleteCellsAliasRequest)(nil), // 20: vtctldata.DeleteCellsAliasRequest
+ (*vtctldata.DeleteKeyspaceRequest)(nil), // 21: vtctldata.DeleteKeyspaceRequest
+ (*vtctldata.DeleteShardsRequest)(nil), // 22: vtctldata.DeleteShardsRequest
+ (*vtctldata.DeleteSrvVSchemaRequest)(nil), // 23: vtctldata.DeleteSrvVSchemaRequest
+ (*vtctldata.DeleteTabletsRequest)(nil), // 24: vtctldata.DeleteTabletsRequest
+ (*vtctldata.EmergencyReparentShardRequest)(nil), // 25: vtctldata.EmergencyReparentShardRequest
+ (*vtctldata.ExecuteFetchAsAppRequest)(nil), // 26: vtctldata.ExecuteFetchAsAppRequest
+ (*vtctldata.ExecuteFetchAsDBARequest)(nil), // 27: vtctldata.ExecuteFetchAsDBARequest
+ (*vtctldata.ExecuteHookRequest)(nil), // 28: vtctldata.ExecuteHookRequest
+ (*vtctldata.ExecuteMultiFetchAsDBARequest)(nil), // 29: vtctldata.ExecuteMultiFetchAsDBARequest
+ (*vtctldata.FindAllShardsInKeyspaceRequest)(nil), // 30: vtctldata.FindAllShardsInKeyspaceRequest
+ (*vtctldata.ForceCutOverSchemaMigrationRequest)(nil), // 31: vtctldata.ForceCutOverSchemaMigrationRequest
+ (*vtctldata.GetBackupsRequest)(nil), // 32: vtctldata.GetBackupsRequest
+ (*vtctldata.GetCellInfoRequest)(nil), // 33: vtctldata.GetCellInfoRequest
+ (*vtctldata.GetCellInfoNamesRequest)(nil), // 34: vtctldata.GetCellInfoNamesRequest
+ (*vtctldata.GetCellsAliasesRequest)(nil), // 35: vtctldata.GetCellsAliasesRequest
+ (*vtctldata.GetFullStatusRequest)(nil), // 36: vtctldata.GetFullStatusRequest
+ (*vtctldata.GetKeyspaceRequest)(nil), // 37: vtctldata.GetKeyspaceRequest
+ (*vtctldata.GetKeyspacesRequest)(nil), // 38: vtctldata.GetKeyspacesRequest
+ (*vtctldata.GetKeyspaceRoutingRulesRequest)(nil), // 39: vtctldata.GetKeyspaceRoutingRulesRequest
+ (*vtctldata.GetPermissionsRequest)(nil), // 40: vtctldata.GetPermissionsRequest
+ (*vtctldata.GetRoutingRulesRequest)(nil), // 41: vtctldata.GetRoutingRulesRequest
+ (*vtctldata.GetSchemaRequest)(nil), // 42: vtctldata.GetSchemaRequest
+ (*vtctldata.GetSchemaMigrationsRequest)(nil), // 43: vtctldata.GetSchemaMigrationsRequest
+ (*vtctldata.GetShardReplicationRequest)(nil), // 44: vtctldata.GetShardReplicationRequest
+ (*vtctldata.GetShardRequest)(nil), // 45: vtctldata.GetShardRequest
+ (*vtctldata.GetShardRoutingRulesRequest)(nil), // 46: vtctldata.GetShardRoutingRulesRequest
+ (*vtctldata.GetSrvKeyspaceNamesRequest)(nil), // 47: vtctldata.GetSrvKeyspaceNamesRequest
+ (*vtctldata.GetSrvKeyspacesRequest)(nil), // 48: vtctldata.GetSrvKeyspacesRequest
+ (*vtctldata.UpdateThrottlerConfigRequest)(nil), // 49: vtctldata.UpdateThrottlerConfigRequest
+ (*vtctldata.GetSrvVSchemaRequest)(nil), // 50: vtctldata.GetSrvVSchemaRequest
+ (*vtctldata.GetSrvVSchemasRequest)(nil), // 51: vtctldata.GetSrvVSchemasRequest
+ (*vtctldata.GetTabletRequest)(nil), // 52: vtctldata.GetTabletRequest
+ (*vtctldata.GetTabletsRequest)(nil), // 53: vtctldata.GetTabletsRequest
+ (*vtctldata.GetThrottlerStatusRequest)(nil), // 54: vtctldata.GetThrottlerStatusRequest
+ (*vtctldata.GetTopologyPathRequest)(nil), // 55: vtctldata.GetTopologyPathRequest
+ (*vtctldata.GetTransactionInfoRequest)(nil), // 56: vtctldata.GetTransactionInfoRequest
+ (*vtctldata.GetUnresolvedTransactionsRequest)(nil), // 57: vtctldata.GetUnresolvedTransactionsRequest
+ (*vtctldata.GetVersionRequest)(nil), // 58: vtctldata.GetVersionRequest
+ (*vtctldata.GetVSchemaRequest)(nil), // 59: vtctldata.GetVSchemaRequest
+ (*vtctldata.GetWorkflowsRequest)(nil), // 60: vtctldata.GetWorkflowsRequest
+ (*vtctldata.InitShardPrimaryRequest)(nil), // 61: vtctldata.InitShardPrimaryRequest
+ (*vtctldata.LaunchSchemaMigrationRequest)(nil), // 62: vtctldata.LaunchSchemaMigrationRequest
+ (*vtctldata.LookupVindexCreateRequest)(nil), // 63: vtctldata.LookupVindexCreateRequest
+ (*vtctldata.LookupVindexExternalizeRequest)(nil), // 64: vtctldata.LookupVindexExternalizeRequest
+ (*vtctldata.MaterializeCreateRequest)(nil), // 65: vtctldata.MaterializeCreateRequest
+ (*vtctldata.MigrateCreateRequest)(nil), // 66: vtctldata.MigrateCreateRequest
+ (*vtctldata.MountRegisterRequest)(nil), // 67: vtctldata.MountRegisterRequest
+ (*vtctldata.MountUnregisterRequest)(nil), // 68: vtctldata.MountUnregisterRequest
+ (*vtctldata.MountShowRequest)(nil), // 69: vtctldata.MountShowRequest
+ (*vtctldata.MountListRequest)(nil), // 70: vtctldata.MountListRequest
+ (*vtctldata.MoveTablesCreateRequest)(nil), // 71: vtctldata.MoveTablesCreateRequest
+ (*vtctldata.MoveTablesCompleteRequest)(nil), // 72: vtctldata.MoveTablesCompleteRequest
+ (*vtctldata.PingTabletRequest)(nil), // 73: vtctldata.PingTabletRequest
+ (*vtctldata.PlannedReparentShardRequest)(nil), // 74: vtctldata.PlannedReparentShardRequest
+ (*vtctldata.RebuildKeyspaceGraphRequest)(nil), // 75: vtctldata.RebuildKeyspaceGraphRequest
+ (*vtctldata.RebuildVSchemaGraphRequest)(nil), // 76: vtctldata.RebuildVSchemaGraphRequest
+ (*vtctldata.RefreshStateRequest)(nil), // 77: vtctldata.RefreshStateRequest
+ (*vtctldata.RefreshStateByShardRequest)(nil), // 78: vtctldata.RefreshStateByShardRequest
+ (*vtctldata.ReloadSchemaRequest)(nil), // 79: vtctldata.ReloadSchemaRequest
+ (*vtctldata.ReloadSchemaKeyspaceRequest)(nil), // 80: vtctldata.ReloadSchemaKeyspaceRequest
+ (*vtctldata.ReloadSchemaShardRequest)(nil), // 81: vtctldata.ReloadSchemaShardRequest
+ (*vtctldata.RemoveBackupRequest)(nil), // 82: vtctldata.RemoveBackupRequest
+ (*vtctldata.RemoveKeyspaceCellRequest)(nil), // 83: vtctldata.RemoveKeyspaceCellRequest
+ (*vtctldata.RemoveShardCellRequest)(nil), // 84: vtctldata.RemoveShardCellRequest
+ (*vtctldata.ReparentTabletRequest)(nil), // 85: vtctldata.ReparentTabletRequest
+ (*vtctldata.ReshardCreateRequest)(nil), // 86: vtctldata.ReshardCreateRequest
+ (*vtctldata.RestoreFromBackupRequest)(nil), // 87: vtctldata.RestoreFromBackupRequest
+ (*vtctldata.RetrySchemaMigrationRequest)(nil), // 88: vtctldata.RetrySchemaMigrationRequest
+ (*vtctldata.RunHealthCheckRequest)(nil), // 89: vtctldata.RunHealthCheckRequest
+ (*vtctldata.SetKeyspaceDurabilityPolicyRequest)(nil), // 90: vtctldata.SetKeyspaceDurabilityPolicyRequest
+ (*vtctldata.SetShardIsPrimaryServingRequest)(nil), // 91: vtctldata.SetShardIsPrimaryServingRequest
+ (*vtctldata.SetShardTabletControlRequest)(nil), // 92: vtctldata.SetShardTabletControlRequest
+ (*vtctldata.SetWritableRequest)(nil), // 93: vtctldata.SetWritableRequest
+ (*vtctldata.ShardReplicationAddRequest)(nil), // 94: vtctldata.ShardReplicationAddRequest
+ (*vtctldata.ShardReplicationFixRequest)(nil), // 95: vtctldata.ShardReplicationFixRequest
+ (*vtctldata.ShardReplicationPositionsRequest)(nil), // 96: vtctldata.ShardReplicationPositionsRequest
+ (*vtctldata.ShardReplicationRemoveRequest)(nil), // 97: vtctldata.ShardReplicationRemoveRequest
+ (*vtctldata.SleepTabletRequest)(nil), // 98: vtctldata.SleepTabletRequest
+ (*vtctldata.SourceShardAddRequest)(nil), // 99: vtctldata.SourceShardAddRequest
+ (*vtctldata.SourceShardDeleteRequest)(nil), // 100: vtctldata.SourceShardDeleteRequest
+ (*vtctldata.StartReplicationRequest)(nil), // 101: vtctldata.StartReplicationRequest
+ (*vtctldata.StopReplicationRequest)(nil), // 102: vtctldata.StopReplicationRequest
+ (*vtctldata.TabletExternallyReparentedRequest)(nil), // 103: vtctldata.TabletExternallyReparentedRequest
+ (*vtctldata.UpdateCellInfoRequest)(nil), // 104: vtctldata.UpdateCellInfoRequest
+ (*vtctldata.UpdateCellsAliasRequest)(nil), // 105: vtctldata.UpdateCellsAliasRequest
+ (*vtctldata.ValidateRequest)(nil), // 106: vtctldata.ValidateRequest
+ (*vtctldata.ValidateKeyspaceRequest)(nil), // 107: vtctldata.ValidateKeyspaceRequest
+ (*vtctldata.ValidateSchemaKeyspaceRequest)(nil), // 108: vtctldata.ValidateSchemaKeyspaceRequest
+ (*vtctldata.ValidateShardRequest)(nil), // 109: vtctldata.ValidateShardRequest
+ (*vtctldata.ValidateVersionKeyspaceRequest)(nil), // 110: vtctldata.ValidateVersionKeyspaceRequest
+ (*vtctldata.ValidateVersionShardRequest)(nil), // 111: vtctldata.ValidateVersionShardRequest
+ (*vtctldata.ValidateVSchemaRequest)(nil), // 112: vtctldata.ValidateVSchemaRequest
+ (*vtctldata.VDiffCreateRequest)(nil), // 113: vtctldata.VDiffCreateRequest
+ (*vtctldata.VDiffDeleteRequest)(nil), // 114: vtctldata.VDiffDeleteRequest
+ (*vtctldata.VDiffResumeRequest)(nil), // 115: vtctldata.VDiffResumeRequest
+ (*vtctldata.VDiffShowRequest)(nil), // 116: vtctldata.VDiffShowRequest
+ (*vtctldata.VDiffStopRequest)(nil), // 117: vtctldata.VDiffStopRequest
+ (*vtctldata.WorkflowDeleteRequest)(nil), // 118: vtctldata.WorkflowDeleteRequest
+ (*vtctldata.WorkflowStatusRequest)(nil), // 119: vtctldata.WorkflowStatusRequest
+ (*vtctldata.WorkflowSwitchTrafficRequest)(nil), // 120: vtctldata.WorkflowSwitchTrafficRequest
+ (*vtctldata.WorkflowUpdateRequest)(nil), // 121: vtctldata.WorkflowUpdateRequest
+ (*vtctldata.GetMirrorRulesRequest)(nil), // 122: vtctldata.GetMirrorRulesRequest
+ (*vtctldata.WorkflowMirrorTrafficRequest)(nil), // 123: vtctldata.WorkflowMirrorTrafficRequest
+ (*vtctldata.ExecuteVtctlCommandResponse)(nil), // 124: vtctldata.ExecuteVtctlCommandResponse
+ (*vtctldata.AddCellInfoResponse)(nil), // 125: vtctldata.AddCellInfoResponse
+ (*vtctldata.AddCellsAliasResponse)(nil), // 126: vtctldata.AddCellsAliasResponse
+ (*vtctldata.ApplyRoutingRulesResponse)(nil), // 127: vtctldata.ApplyRoutingRulesResponse
+ (*vtctldata.ApplySchemaResponse)(nil), // 128: vtctldata.ApplySchemaResponse
+ (*vtctldata.ApplyKeyspaceRoutingRulesResponse)(nil), // 129: vtctldata.ApplyKeyspaceRoutingRulesResponse
+ (*vtctldata.ApplyShardRoutingRulesResponse)(nil), // 130: vtctldata.ApplyShardRoutingRulesResponse
+ (*vtctldata.ApplyVSchemaResponse)(nil), // 131: vtctldata.ApplyVSchemaResponse
+ (*vtctldata.BackupResponse)(nil), // 132: vtctldata.BackupResponse
+ (*vtctldata.CancelSchemaMigrationResponse)(nil), // 133: vtctldata.CancelSchemaMigrationResponse
+ (*vtctldata.ChangeTabletTagsResponse)(nil), // 134: vtctldata.ChangeTabletTagsResponse
+ (*vtctldata.ChangeTabletTypeResponse)(nil), // 135: vtctldata.ChangeTabletTypeResponse
+ (*vtctldata.CheckThrottlerResponse)(nil), // 136: vtctldata.CheckThrottlerResponse
+ (*vtctldata.CleanupSchemaMigrationResponse)(nil), // 137: vtctldata.CleanupSchemaMigrationResponse
+ (*vtctldata.CompleteSchemaMigrationResponse)(nil), // 138: vtctldata.CompleteSchemaMigrationResponse
+ (*vtctldata.ConcludeTransactionResponse)(nil), // 139: vtctldata.ConcludeTransactionResponse
+ (*vtctldata.CreateKeyspaceResponse)(nil), // 140: vtctldata.CreateKeyspaceResponse
+ (*vtctldata.CreateShardResponse)(nil), // 141: vtctldata.CreateShardResponse
+ (*vtctldata.DeleteCellInfoResponse)(nil), // 142: vtctldata.DeleteCellInfoResponse
+ (*vtctldata.DeleteCellsAliasResponse)(nil), // 143: vtctldata.DeleteCellsAliasResponse
+ (*vtctldata.DeleteKeyspaceResponse)(nil), // 144: vtctldata.DeleteKeyspaceResponse
+ (*vtctldata.DeleteShardsResponse)(nil), // 145: vtctldata.DeleteShardsResponse
+ (*vtctldata.DeleteSrvVSchemaResponse)(nil), // 146: vtctldata.DeleteSrvVSchemaResponse
+ (*vtctldata.DeleteTabletsResponse)(nil), // 147: vtctldata.DeleteTabletsResponse
+ (*vtctldata.EmergencyReparentShardResponse)(nil), // 148: vtctldata.EmergencyReparentShardResponse
+ (*vtctldata.ExecuteFetchAsAppResponse)(nil), // 149: vtctldata.ExecuteFetchAsAppResponse
+ (*vtctldata.ExecuteFetchAsDBAResponse)(nil), // 150: vtctldata.ExecuteFetchAsDBAResponse
+ (*vtctldata.ExecuteHookResponse)(nil), // 151: vtctldata.ExecuteHookResponse
+ (*vtctldata.ExecuteMultiFetchAsDBAResponse)(nil), // 152: vtctldata.ExecuteMultiFetchAsDBAResponse
+ (*vtctldata.FindAllShardsInKeyspaceResponse)(nil), // 153: vtctldata.FindAllShardsInKeyspaceResponse
+ (*vtctldata.ForceCutOverSchemaMigrationResponse)(nil), // 154: vtctldata.ForceCutOverSchemaMigrationResponse
+ (*vtctldata.GetBackupsResponse)(nil), // 155: vtctldata.GetBackupsResponse
+ (*vtctldata.GetCellInfoResponse)(nil), // 156: vtctldata.GetCellInfoResponse
+ (*vtctldata.GetCellInfoNamesResponse)(nil), // 157: vtctldata.GetCellInfoNamesResponse
+ (*vtctldata.GetCellsAliasesResponse)(nil), // 158: vtctldata.GetCellsAliasesResponse
+ (*vtctldata.GetFullStatusResponse)(nil), // 159: vtctldata.GetFullStatusResponse
+ (*vtctldata.GetKeyspaceResponse)(nil), // 160: vtctldata.GetKeyspaceResponse
+ (*vtctldata.GetKeyspacesResponse)(nil), // 161: vtctldata.GetKeyspacesResponse
+ (*vtctldata.GetKeyspaceRoutingRulesResponse)(nil), // 162: vtctldata.GetKeyspaceRoutingRulesResponse
+ (*vtctldata.GetPermissionsResponse)(nil), // 163: vtctldata.GetPermissionsResponse
+ (*vtctldata.GetRoutingRulesResponse)(nil), // 164: vtctldata.GetRoutingRulesResponse
+ (*vtctldata.GetSchemaResponse)(nil), // 165: vtctldata.GetSchemaResponse
+ (*vtctldata.GetSchemaMigrationsResponse)(nil), // 166: vtctldata.GetSchemaMigrationsResponse
+ (*vtctldata.GetShardReplicationResponse)(nil), // 167: vtctldata.GetShardReplicationResponse
+ (*vtctldata.GetShardResponse)(nil), // 168: vtctldata.GetShardResponse
+ (*vtctldata.GetShardRoutingRulesResponse)(nil), // 169: vtctldata.GetShardRoutingRulesResponse
+ (*vtctldata.GetSrvKeyspaceNamesResponse)(nil), // 170: vtctldata.GetSrvKeyspaceNamesResponse
+ (*vtctldata.GetSrvKeyspacesResponse)(nil), // 171: vtctldata.GetSrvKeyspacesResponse
+ (*vtctldata.UpdateThrottlerConfigResponse)(nil), // 172: vtctldata.UpdateThrottlerConfigResponse
+ (*vtctldata.GetSrvVSchemaResponse)(nil), // 173: vtctldata.GetSrvVSchemaResponse
+ (*vtctldata.GetSrvVSchemasResponse)(nil), // 174: vtctldata.GetSrvVSchemasResponse
+ (*vtctldata.GetTabletResponse)(nil), // 175: vtctldata.GetTabletResponse
+ (*vtctldata.GetTabletsResponse)(nil), // 176: vtctldata.GetTabletsResponse
+ (*vtctldata.GetThrottlerStatusResponse)(nil), // 177: vtctldata.GetThrottlerStatusResponse
+ (*vtctldata.GetTopologyPathResponse)(nil), // 178: vtctldata.GetTopologyPathResponse
+ (*vtctldata.GetTransactionInfoResponse)(nil), // 179: vtctldata.GetTransactionInfoResponse
+ (*vtctldata.GetUnresolvedTransactionsResponse)(nil), // 180: vtctldata.GetUnresolvedTransactionsResponse
+ (*vtctldata.GetVersionResponse)(nil), // 181: vtctldata.GetVersionResponse
+ (*vtctldata.GetVSchemaResponse)(nil), // 182: vtctldata.GetVSchemaResponse
+ (*vtctldata.GetWorkflowsResponse)(nil), // 183: vtctldata.GetWorkflowsResponse
+ (*vtctldata.InitShardPrimaryResponse)(nil), // 184: vtctldata.InitShardPrimaryResponse
+ (*vtctldata.LaunchSchemaMigrationResponse)(nil), // 185: vtctldata.LaunchSchemaMigrationResponse
+ (*vtctldata.LookupVindexCreateResponse)(nil), // 186: vtctldata.LookupVindexCreateResponse
+ (*vtctldata.LookupVindexExternalizeResponse)(nil), // 187: vtctldata.LookupVindexExternalizeResponse
+ (*vtctldata.MaterializeCreateResponse)(nil), // 188: vtctldata.MaterializeCreateResponse
+ (*vtctldata.WorkflowStatusResponse)(nil), // 189: vtctldata.WorkflowStatusResponse
+ (*vtctldata.MountRegisterResponse)(nil), // 190: vtctldata.MountRegisterResponse
+ (*vtctldata.MountUnregisterResponse)(nil), // 191: vtctldata.MountUnregisterResponse
+ (*vtctldata.MountShowResponse)(nil), // 192: vtctldata.MountShowResponse
+ (*vtctldata.MountListResponse)(nil), // 193: vtctldata.MountListResponse
+ (*vtctldata.MoveTablesCompleteResponse)(nil), // 194: vtctldata.MoveTablesCompleteResponse
+ (*vtctldata.PingTabletResponse)(nil), // 195: vtctldata.PingTabletResponse
+ (*vtctldata.PlannedReparentShardResponse)(nil), // 196: vtctldata.PlannedReparentShardResponse
+ (*vtctldata.RebuildKeyspaceGraphResponse)(nil), // 197: vtctldata.RebuildKeyspaceGraphResponse
+ (*vtctldata.RebuildVSchemaGraphResponse)(nil), // 198: vtctldata.RebuildVSchemaGraphResponse
+ (*vtctldata.RefreshStateResponse)(nil), // 199: vtctldata.RefreshStateResponse
+ (*vtctldata.RefreshStateByShardResponse)(nil), // 200: vtctldata.RefreshStateByShardResponse
+ (*vtctldata.ReloadSchemaResponse)(nil), // 201: vtctldata.ReloadSchemaResponse
+ (*vtctldata.ReloadSchemaKeyspaceResponse)(nil), // 202: vtctldata.ReloadSchemaKeyspaceResponse
+ (*vtctldata.ReloadSchemaShardResponse)(nil), // 203: vtctldata.ReloadSchemaShardResponse
+ (*vtctldata.RemoveBackupResponse)(nil), // 204: vtctldata.RemoveBackupResponse
+ (*vtctldata.RemoveKeyspaceCellResponse)(nil), // 205: vtctldata.RemoveKeyspaceCellResponse
+ (*vtctldata.RemoveShardCellResponse)(nil), // 206: vtctldata.RemoveShardCellResponse
+ (*vtctldata.ReparentTabletResponse)(nil), // 207: vtctldata.ReparentTabletResponse
+ (*vtctldata.RestoreFromBackupResponse)(nil), // 208: vtctldata.RestoreFromBackupResponse
+ (*vtctldata.RetrySchemaMigrationResponse)(nil), // 209: vtctldata.RetrySchemaMigrationResponse
+ (*vtctldata.RunHealthCheckResponse)(nil), // 210: vtctldata.RunHealthCheckResponse
+ (*vtctldata.SetKeyspaceDurabilityPolicyResponse)(nil), // 211: vtctldata.SetKeyspaceDurabilityPolicyResponse
+ (*vtctldata.SetShardIsPrimaryServingResponse)(nil), // 212: vtctldata.SetShardIsPrimaryServingResponse
+ (*vtctldata.SetShardTabletControlResponse)(nil), // 213: vtctldata.SetShardTabletControlResponse
+ (*vtctldata.SetWritableResponse)(nil), // 214: vtctldata.SetWritableResponse
+ (*vtctldata.ShardReplicationAddResponse)(nil), // 215: vtctldata.ShardReplicationAddResponse
+ (*vtctldata.ShardReplicationFixResponse)(nil), // 216: vtctldata.ShardReplicationFixResponse
+ (*vtctldata.ShardReplicationPositionsResponse)(nil), // 217: vtctldata.ShardReplicationPositionsResponse
+ (*vtctldata.ShardReplicationRemoveResponse)(nil), // 218: vtctldata.ShardReplicationRemoveResponse
+ (*vtctldata.SleepTabletResponse)(nil), // 219: vtctldata.SleepTabletResponse
+ (*vtctldata.SourceShardAddResponse)(nil), // 220: vtctldata.SourceShardAddResponse
+ (*vtctldata.SourceShardDeleteResponse)(nil), // 221: vtctldata.SourceShardDeleteResponse
+ (*vtctldata.StartReplicationResponse)(nil), // 222: vtctldata.StartReplicationResponse
+ (*vtctldata.StopReplicationResponse)(nil), // 223: vtctldata.StopReplicationResponse
+ (*vtctldata.TabletExternallyReparentedResponse)(nil), // 224: vtctldata.TabletExternallyReparentedResponse
+ (*vtctldata.UpdateCellInfoResponse)(nil), // 225: vtctldata.UpdateCellInfoResponse
+ (*vtctldata.UpdateCellsAliasResponse)(nil), // 226: vtctldata.UpdateCellsAliasResponse
+ (*vtctldata.ValidateResponse)(nil), // 227: vtctldata.ValidateResponse
+ (*vtctldata.ValidateKeyspaceResponse)(nil), // 228: vtctldata.ValidateKeyspaceResponse
+ (*vtctldata.ValidateSchemaKeyspaceResponse)(nil), // 229: vtctldata.ValidateSchemaKeyspaceResponse
+ (*vtctldata.ValidateShardResponse)(nil), // 230: vtctldata.ValidateShardResponse
+ (*vtctldata.ValidateVersionKeyspaceResponse)(nil), // 231: vtctldata.ValidateVersionKeyspaceResponse
+ (*vtctldata.ValidateVersionShardResponse)(nil), // 232: vtctldata.ValidateVersionShardResponse
+ (*vtctldata.ValidateVSchemaResponse)(nil), // 233: vtctldata.ValidateVSchemaResponse
+ (*vtctldata.VDiffCreateResponse)(nil), // 234: vtctldata.VDiffCreateResponse
+ (*vtctldata.VDiffDeleteResponse)(nil), // 235: vtctldata.VDiffDeleteResponse
+ (*vtctldata.VDiffResumeResponse)(nil), // 236: vtctldata.VDiffResumeResponse
+ (*vtctldata.VDiffShowResponse)(nil), // 237: vtctldata.VDiffShowResponse
+ (*vtctldata.VDiffStopResponse)(nil), // 238: vtctldata.VDiffStopResponse
+ (*vtctldata.WorkflowDeleteResponse)(nil), // 239: vtctldata.WorkflowDeleteResponse
+ (*vtctldata.WorkflowSwitchTrafficResponse)(nil), // 240: vtctldata.WorkflowSwitchTrafficResponse
+ (*vtctldata.WorkflowUpdateResponse)(nil), // 241: vtctldata.WorkflowUpdateResponse
+ (*vtctldata.GetMirrorRulesResponse)(nil), // 242: vtctldata.GetMirrorRulesResponse
+ (*vtctldata.WorkflowMirrorTrafficResponse)(nil), // 243: vtctldata.WorkflowMirrorTrafficResponse
}
var file_vtctlservice_proto_depIdxs = []int32{
0, // 0: vtctlservice.Vtctl.ExecuteVtctlCommand:input_type -> vtctldata.ExecuteVtctlCommandRequest
@@ -1027,241 +1044,245 @@ var file_vtctlservice_proto_depIdxs = []int32{
8, // 8: vtctlservice.Vtctld.Backup:input_type -> vtctldata.BackupRequest
9, // 9: vtctlservice.Vtctld.BackupShard:input_type -> vtctldata.BackupShardRequest
10, // 10: vtctlservice.Vtctld.CancelSchemaMigration:input_type -> vtctldata.CancelSchemaMigrationRequest
- 11, // 11: vtctlservice.Vtctld.ChangeTabletType:input_type -> vtctldata.ChangeTabletTypeRequest
- 12, // 12: vtctlservice.Vtctld.CheckThrottler:input_type -> vtctldata.CheckThrottlerRequest
- 13, // 13: vtctlservice.Vtctld.CleanupSchemaMigration:input_type -> vtctldata.CleanupSchemaMigrationRequest
- 14, // 14: vtctlservice.Vtctld.CompleteSchemaMigration:input_type -> vtctldata.CompleteSchemaMigrationRequest
- 15, // 15: vtctlservice.Vtctld.ConcludeTransaction:input_type -> vtctldata.ConcludeTransactionRequest
- 16, // 16: vtctlservice.Vtctld.CreateKeyspace:input_type -> vtctldata.CreateKeyspaceRequest
- 17, // 17: vtctlservice.Vtctld.CreateShard:input_type -> vtctldata.CreateShardRequest
- 18, // 18: vtctlservice.Vtctld.DeleteCellInfo:input_type -> vtctldata.DeleteCellInfoRequest
- 19, // 19: vtctlservice.Vtctld.DeleteCellsAlias:input_type -> vtctldata.DeleteCellsAliasRequest
- 20, // 20: vtctlservice.Vtctld.DeleteKeyspace:input_type -> vtctldata.DeleteKeyspaceRequest
- 21, // 21: vtctlservice.Vtctld.DeleteShards:input_type -> vtctldata.DeleteShardsRequest
- 22, // 22: vtctlservice.Vtctld.DeleteSrvVSchema:input_type -> vtctldata.DeleteSrvVSchemaRequest
- 23, // 23: vtctlservice.Vtctld.DeleteTablets:input_type -> vtctldata.DeleteTabletsRequest
- 24, // 24: vtctlservice.Vtctld.EmergencyReparentShard:input_type -> vtctldata.EmergencyReparentShardRequest
- 25, // 25: vtctlservice.Vtctld.ExecuteFetchAsApp:input_type -> vtctldata.ExecuteFetchAsAppRequest
- 26, // 26: vtctlservice.Vtctld.ExecuteFetchAsDBA:input_type -> vtctldata.ExecuteFetchAsDBARequest
- 27, // 27: vtctlservice.Vtctld.ExecuteHook:input_type -> vtctldata.ExecuteHookRequest
- 28, // 28: vtctlservice.Vtctld.ExecuteMultiFetchAsDBA:input_type -> vtctldata.ExecuteMultiFetchAsDBARequest
- 29, // 29: vtctlservice.Vtctld.FindAllShardsInKeyspace:input_type -> vtctldata.FindAllShardsInKeyspaceRequest
- 30, // 30: vtctlservice.Vtctld.ForceCutOverSchemaMigration:input_type -> vtctldata.ForceCutOverSchemaMigrationRequest
- 31, // 31: vtctlservice.Vtctld.GetBackups:input_type -> vtctldata.GetBackupsRequest
- 32, // 32: vtctlservice.Vtctld.GetCellInfo:input_type -> vtctldata.GetCellInfoRequest
- 33, // 33: vtctlservice.Vtctld.GetCellInfoNames:input_type -> vtctldata.GetCellInfoNamesRequest
- 34, // 34: vtctlservice.Vtctld.GetCellsAliases:input_type -> vtctldata.GetCellsAliasesRequest
- 35, // 35: vtctlservice.Vtctld.GetFullStatus:input_type -> vtctldata.GetFullStatusRequest
- 36, // 36: vtctlservice.Vtctld.GetKeyspace:input_type -> vtctldata.GetKeyspaceRequest
- 37, // 37: vtctlservice.Vtctld.GetKeyspaces:input_type -> vtctldata.GetKeyspacesRequest
- 38, // 38: vtctlservice.Vtctld.GetKeyspaceRoutingRules:input_type -> vtctldata.GetKeyspaceRoutingRulesRequest
- 39, // 39: vtctlservice.Vtctld.GetPermissions:input_type -> vtctldata.GetPermissionsRequest
- 40, // 40: vtctlservice.Vtctld.GetRoutingRules:input_type -> vtctldata.GetRoutingRulesRequest
- 41, // 41: vtctlservice.Vtctld.GetSchema:input_type -> vtctldata.GetSchemaRequest
- 42, // 42: vtctlservice.Vtctld.GetSchemaMigrations:input_type -> vtctldata.GetSchemaMigrationsRequest
- 43, // 43: vtctlservice.Vtctld.GetShardReplication:input_type -> vtctldata.GetShardReplicationRequest
- 44, // 44: vtctlservice.Vtctld.GetShard:input_type -> vtctldata.GetShardRequest
- 45, // 45: vtctlservice.Vtctld.GetShardRoutingRules:input_type -> vtctldata.GetShardRoutingRulesRequest
- 46, // 46: vtctlservice.Vtctld.GetSrvKeyspaceNames:input_type -> vtctldata.GetSrvKeyspaceNamesRequest
- 47, // 47: vtctlservice.Vtctld.GetSrvKeyspaces:input_type -> vtctldata.GetSrvKeyspacesRequest
- 48, // 48: vtctlservice.Vtctld.UpdateThrottlerConfig:input_type -> vtctldata.UpdateThrottlerConfigRequest
- 49, // 49: vtctlservice.Vtctld.GetSrvVSchema:input_type -> vtctldata.GetSrvVSchemaRequest
- 50, // 50: vtctlservice.Vtctld.GetSrvVSchemas:input_type -> vtctldata.GetSrvVSchemasRequest
- 51, // 51: vtctlservice.Vtctld.GetTablet:input_type -> vtctldata.GetTabletRequest
- 52, // 52: vtctlservice.Vtctld.GetTablets:input_type -> vtctldata.GetTabletsRequest
- 53, // 53: vtctlservice.Vtctld.GetThrottlerStatus:input_type -> vtctldata.GetThrottlerStatusRequest
- 54, // 54: vtctlservice.Vtctld.GetTopologyPath:input_type -> vtctldata.GetTopologyPathRequest
- 55, // 55: vtctlservice.Vtctld.GetUnresolvedTransactions:input_type -> vtctldata.GetUnresolvedTransactionsRequest
- 56, // 56: vtctlservice.Vtctld.GetVersion:input_type -> vtctldata.GetVersionRequest
- 57, // 57: vtctlservice.Vtctld.GetVSchema:input_type -> vtctldata.GetVSchemaRequest
- 58, // 58: vtctlservice.Vtctld.GetWorkflows:input_type -> vtctldata.GetWorkflowsRequest
- 59, // 59: vtctlservice.Vtctld.InitShardPrimary:input_type -> vtctldata.InitShardPrimaryRequest
- 60, // 60: vtctlservice.Vtctld.LaunchSchemaMigration:input_type -> vtctldata.LaunchSchemaMigrationRequest
- 61, // 61: vtctlservice.Vtctld.LookupVindexCreate:input_type -> vtctldata.LookupVindexCreateRequest
- 62, // 62: vtctlservice.Vtctld.LookupVindexExternalize:input_type -> vtctldata.LookupVindexExternalizeRequest
- 63, // 63: vtctlservice.Vtctld.MaterializeCreate:input_type -> vtctldata.MaterializeCreateRequest
- 64, // 64: vtctlservice.Vtctld.MigrateCreate:input_type -> vtctldata.MigrateCreateRequest
- 65, // 65: vtctlservice.Vtctld.MountRegister:input_type -> vtctldata.MountRegisterRequest
- 66, // 66: vtctlservice.Vtctld.MountUnregister:input_type -> vtctldata.MountUnregisterRequest
- 67, // 67: vtctlservice.Vtctld.MountShow:input_type -> vtctldata.MountShowRequest
- 68, // 68: vtctlservice.Vtctld.MountList:input_type -> vtctldata.MountListRequest
- 69, // 69: vtctlservice.Vtctld.MoveTablesCreate:input_type -> vtctldata.MoveTablesCreateRequest
- 70, // 70: vtctlservice.Vtctld.MoveTablesComplete:input_type -> vtctldata.MoveTablesCompleteRequest
- 71, // 71: vtctlservice.Vtctld.PingTablet:input_type -> vtctldata.PingTabletRequest
- 72, // 72: vtctlservice.Vtctld.PlannedReparentShard:input_type -> vtctldata.PlannedReparentShardRequest
- 73, // 73: vtctlservice.Vtctld.RebuildKeyspaceGraph:input_type -> vtctldata.RebuildKeyspaceGraphRequest
- 74, // 74: vtctlservice.Vtctld.RebuildVSchemaGraph:input_type -> vtctldata.RebuildVSchemaGraphRequest
- 75, // 75: vtctlservice.Vtctld.RefreshState:input_type -> vtctldata.RefreshStateRequest
- 76, // 76: vtctlservice.Vtctld.RefreshStateByShard:input_type -> vtctldata.RefreshStateByShardRequest
- 77, // 77: vtctlservice.Vtctld.ReloadSchema:input_type -> vtctldata.ReloadSchemaRequest
- 78, // 78: vtctlservice.Vtctld.ReloadSchemaKeyspace:input_type -> vtctldata.ReloadSchemaKeyspaceRequest
- 79, // 79: vtctlservice.Vtctld.ReloadSchemaShard:input_type -> vtctldata.ReloadSchemaShardRequest
- 80, // 80: vtctlservice.Vtctld.RemoveBackup:input_type -> vtctldata.RemoveBackupRequest
- 81, // 81: vtctlservice.Vtctld.RemoveKeyspaceCell:input_type -> vtctldata.RemoveKeyspaceCellRequest
- 82, // 82: vtctlservice.Vtctld.RemoveShardCell:input_type -> vtctldata.RemoveShardCellRequest
- 83, // 83: vtctlservice.Vtctld.ReparentTablet:input_type -> vtctldata.ReparentTabletRequest
- 84, // 84: vtctlservice.Vtctld.ReshardCreate:input_type -> vtctldata.ReshardCreateRequest
- 85, // 85: vtctlservice.Vtctld.RestoreFromBackup:input_type -> vtctldata.RestoreFromBackupRequest
- 86, // 86: vtctlservice.Vtctld.RetrySchemaMigration:input_type -> vtctldata.RetrySchemaMigrationRequest
- 87, // 87: vtctlservice.Vtctld.RunHealthCheck:input_type -> vtctldata.RunHealthCheckRequest
- 88, // 88: vtctlservice.Vtctld.SetKeyspaceDurabilityPolicy:input_type -> vtctldata.SetKeyspaceDurabilityPolicyRequest
- 89, // 89: vtctlservice.Vtctld.SetShardIsPrimaryServing:input_type -> vtctldata.SetShardIsPrimaryServingRequest
- 90, // 90: vtctlservice.Vtctld.SetShardTabletControl:input_type -> vtctldata.SetShardTabletControlRequest
- 91, // 91: vtctlservice.Vtctld.SetWritable:input_type -> vtctldata.SetWritableRequest
- 92, // 92: vtctlservice.Vtctld.ShardReplicationAdd:input_type -> vtctldata.ShardReplicationAddRequest
- 93, // 93: vtctlservice.Vtctld.ShardReplicationFix:input_type -> vtctldata.ShardReplicationFixRequest
- 94, // 94: vtctlservice.Vtctld.ShardReplicationPositions:input_type -> vtctldata.ShardReplicationPositionsRequest
- 95, // 95: vtctlservice.Vtctld.ShardReplicationRemove:input_type -> vtctldata.ShardReplicationRemoveRequest
- 96, // 96: vtctlservice.Vtctld.SleepTablet:input_type -> vtctldata.SleepTabletRequest
- 97, // 97: vtctlservice.Vtctld.SourceShardAdd:input_type -> vtctldata.SourceShardAddRequest
- 98, // 98: vtctlservice.Vtctld.SourceShardDelete:input_type -> vtctldata.SourceShardDeleteRequest
- 99, // 99: vtctlservice.Vtctld.StartReplication:input_type -> vtctldata.StartReplicationRequest
- 100, // 100: vtctlservice.Vtctld.StopReplication:input_type -> vtctldata.StopReplicationRequest
- 101, // 101: vtctlservice.Vtctld.TabletExternallyReparented:input_type -> vtctldata.TabletExternallyReparentedRequest
- 102, // 102: vtctlservice.Vtctld.UpdateCellInfo:input_type -> vtctldata.UpdateCellInfoRequest
- 103, // 103: vtctlservice.Vtctld.UpdateCellsAlias:input_type -> vtctldata.UpdateCellsAliasRequest
- 104, // 104: vtctlservice.Vtctld.Validate:input_type -> vtctldata.ValidateRequest
- 105, // 105: vtctlservice.Vtctld.ValidateKeyspace:input_type -> vtctldata.ValidateKeyspaceRequest
- 106, // 106: vtctlservice.Vtctld.ValidateSchemaKeyspace:input_type -> vtctldata.ValidateSchemaKeyspaceRequest
- 107, // 107: vtctlservice.Vtctld.ValidateShard:input_type -> vtctldata.ValidateShardRequest
- 108, // 108: vtctlservice.Vtctld.ValidateVersionKeyspace:input_type -> vtctldata.ValidateVersionKeyspaceRequest
- 109, // 109: vtctlservice.Vtctld.ValidateVersionShard:input_type -> vtctldata.ValidateVersionShardRequest
- 110, // 110: vtctlservice.Vtctld.ValidateVSchema:input_type -> vtctldata.ValidateVSchemaRequest
- 111, // 111: vtctlservice.Vtctld.VDiffCreate:input_type -> vtctldata.VDiffCreateRequest
- 112, // 112: vtctlservice.Vtctld.VDiffDelete:input_type -> vtctldata.VDiffDeleteRequest
- 113, // 113: vtctlservice.Vtctld.VDiffResume:input_type -> vtctldata.VDiffResumeRequest
- 114, // 114: vtctlservice.Vtctld.VDiffShow:input_type -> vtctldata.VDiffShowRequest
- 115, // 115: vtctlservice.Vtctld.VDiffStop:input_type -> vtctldata.VDiffStopRequest
- 116, // 116: vtctlservice.Vtctld.WorkflowDelete:input_type -> vtctldata.WorkflowDeleteRequest
- 117, // 117: vtctlservice.Vtctld.WorkflowStatus:input_type -> vtctldata.WorkflowStatusRequest
- 118, // 118: vtctlservice.Vtctld.WorkflowSwitchTraffic:input_type -> vtctldata.WorkflowSwitchTrafficRequest
- 119, // 119: vtctlservice.Vtctld.WorkflowUpdate:input_type -> vtctldata.WorkflowUpdateRequest
- 120, // 120: vtctlservice.Vtctld.GetMirrorRules:input_type -> vtctldata.GetMirrorRulesRequest
- 121, // 121: vtctlservice.Vtctld.WorkflowMirrorTraffic:input_type -> vtctldata.WorkflowMirrorTrafficRequest
- 122, // 122: vtctlservice.Vtctl.ExecuteVtctlCommand:output_type -> vtctldata.ExecuteVtctlCommandResponse
- 123, // 123: vtctlservice.Vtctld.AddCellInfo:output_type -> vtctldata.AddCellInfoResponse
- 124, // 124: vtctlservice.Vtctld.AddCellsAlias:output_type -> vtctldata.AddCellsAliasResponse
- 125, // 125: vtctlservice.Vtctld.ApplyRoutingRules:output_type -> vtctldata.ApplyRoutingRulesResponse
- 126, // 126: vtctlservice.Vtctld.ApplySchema:output_type -> vtctldata.ApplySchemaResponse
- 127, // 127: vtctlservice.Vtctld.ApplyKeyspaceRoutingRules:output_type -> vtctldata.ApplyKeyspaceRoutingRulesResponse
- 128, // 128: vtctlservice.Vtctld.ApplyShardRoutingRules:output_type -> vtctldata.ApplyShardRoutingRulesResponse
- 129, // 129: vtctlservice.Vtctld.ApplyVSchema:output_type -> vtctldata.ApplyVSchemaResponse
- 130, // 130: vtctlservice.Vtctld.Backup:output_type -> vtctldata.BackupResponse
- 130, // 131: vtctlservice.Vtctld.BackupShard:output_type -> vtctldata.BackupResponse
- 131, // 132: vtctlservice.Vtctld.CancelSchemaMigration:output_type -> vtctldata.CancelSchemaMigrationResponse
- 132, // 133: vtctlservice.Vtctld.ChangeTabletType:output_type -> vtctldata.ChangeTabletTypeResponse
- 133, // 134: vtctlservice.Vtctld.CheckThrottler:output_type -> vtctldata.CheckThrottlerResponse
- 134, // 135: vtctlservice.Vtctld.CleanupSchemaMigration:output_type -> vtctldata.CleanupSchemaMigrationResponse
- 135, // 136: vtctlservice.Vtctld.CompleteSchemaMigration:output_type -> vtctldata.CompleteSchemaMigrationResponse
- 136, // 137: vtctlservice.Vtctld.ConcludeTransaction:output_type -> vtctldata.ConcludeTransactionResponse
- 137, // 138: vtctlservice.Vtctld.CreateKeyspace:output_type -> vtctldata.CreateKeyspaceResponse
- 138, // 139: vtctlservice.Vtctld.CreateShard:output_type -> vtctldata.CreateShardResponse
- 139, // 140: vtctlservice.Vtctld.DeleteCellInfo:output_type -> vtctldata.DeleteCellInfoResponse
- 140, // 141: vtctlservice.Vtctld.DeleteCellsAlias:output_type -> vtctldata.DeleteCellsAliasResponse
- 141, // 142: vtctlservice.Vtctld.DeleteKeyspace:output_type -> vtctldata.DeleteKeyspaceResponse
- 142, // 143: vtctlservice.Vtctld.DeleteShards:output_type -> vtctldata.DeleteShardsResponse
- 143, // 144: vtctlservice.Vtctld.DeleteSrvVSchema:output_type -> vtctldata.DeleteSrvVSchemaResponse
- 144, // 145: vtctlservice.Vtctld.DeleteTablets:output_type -> vtctldata.DeleteTabletsResponse
- 145, // 146: vtctlservice.Vtctld.EmergencyReparentShard:output_type -> vtctldata.EmergencyReparentShardResponse
- 146, // 147: vtctlservice.Vtctld.ExecuteFetchAsApp:output_type -> vtctldata.ExecuteFetchAsAppResponse
- 147, // 148: vtctlservice.Vtctld.ExecuteFetchAsDBA:output_type -> vtctldata.ExecuteFetchAsDBAResponse
- 148, // 149: vtctlservice.Vtctld.ExecuteHook:output_type -> vtctldata.ExecuteHookResponse
- 149, // 150: vtctlservice.Vtctld.ExecuteMultiFetchAsDBA:output_type -> vtctldata.ExecuteMultiFetchAsDBAResponse
- 150, // 151: vtctlservice.Vtctld.FindAllShardsInKeyspace:output_type -> vtctldata.FindAllShardsInKeyspaceResponse
- 151, // 152: vtctlservice.Vtctld.ForceCutOverSchemaMigration:output_type -> vtctldata.ForceCutOverSchemaMigrationResponse
- 152, // 153: vtctlservice.Vtctld.GetBackups:output_type -> vtctldata.GetBackupsResponse
- 153, // 154: vtctlservice.Vtctld.GetCellInfo:output_type -> vtctldata.GetCellInfoResponse
- 154, // 155: vtctlservice.Vtctld.GetCellInfoNames:output_type -> vtctldata.GetCellInfoNamesResponse
- 155, // 156: vtctlservice.Vtctld.GetCellsAliases:output_type -> vtctldata.GetCellsAliasesResponse
- 156, // 157: vtctlservice.Vtctld.GetFullStatus:output_type -> vtctldata.GetFullStatusResponse
- 157, // 158: vtctlservice.Vtctld.GetKeyspace:output_type -> vtctldata.GetKeyspaceResponse
- 158, // 159: vtctlservice.Vtctld.GetKeyspaces:output_type -> vtctldata.GetKeyspacesResponse
- 159, // 160: vtctlservice.Vtctld.GetKeyspaceRoutingRules:output_type -> vtctldata.GetKeyspaceRoutingRulesResponse
- 160, // 161: vtctlservice.Vtctld.GetPermissions:output_type -> vtctldata.GetPermissionsResponse
- 161, // 162: vtctlservice.Vtctld.GetRoutingRules:output_type -> vtctldata.GetRoutingRulesResponse
- 162, // 163: vtctlservice.Vtctld.GetSchema:output_type -> vtctldata.GetSchemaResponse
- 163, // 164: vtctlservice.Vtctld.GetSchemaMigrations:output_type -> vtctldata.GetSchemaMigrationsResponse
- 164, // 165: vtctlservice.Vtctld.GetShardReplication:output_type -> vtctldata.GetShardReplicationResponse
- 165, // 166: vtctlservice.Vtctld.GetShard:output_type -> vtctldata.GetShardResponse
- 166, // 167: vtctlservice.Vtctld.GetShardRoutingRules:output_type -> vtctldata.GetShardRoutingRulesResponse
- 167, // 168: vtctlservice.Vtctld.GetSrvKeyspaceNames:output_type -> vtctldata.GetSrvKeyspaceNamesResponse
- 168, // 169: vtctlservice.Vtctld.GetSrvKeyspaces:output_type -> vtctldata.GetSrvKeyspacesResponse
- 169, // 170: vtctlservice.Vtctld.UpdateThrottlerConfig:output_type -> vtctldata.UpdateThrottlerConfigResponse
- 170, // 171: vtctlservice.Vtctld.GetSrvVSchema:output_type -> vtctldata.GetSrvVSchemaResponse
- 171, // 172: vtctlservice.Vtctld.GetSrvVSchemas:output_type -> vtctldata.GetSrvVSchemasResponse
- 172, // 173: vtctlservice.Vtctld.GetTablet:output_type -> vtctldata.GetTabletResponse
- 173, // 174: vtctlservice.Vtctld.GetTablets:output_type -> vtctldata.GetTabletsResponse
- 174, // 175: vtctlservice.Vtctld.GetThrottlerStatus:output_type -> vtctldata.GetThrottlerStatusResponse
- 175, // 176: vtctlservice.Vtctld.GetTopologyPath:output_type -> vtctldata.GetTopologyPathResponse
- 176, // 177: vtctlservice.Vtctld.GetUnresolvedTransactions:output_type -> vtctldata.GetUnresolvedTransactionsResponse
- 177, // 178: vtctlservice.Vtctld.GetVersion:output_type -> vtctldata.GetVersionResponse
- 178, // 179: vtctlservice.Vtctld.GetVSchema:output_type -> vtctldata.GetVSchemaResponse
- 179, // 180: vtctlservice.Vtctld.GetWorkflows:output_type -> vtctldata.GetWorkflowsResponse
- 180, // 181: vtctlservice.Vtctld.InitShardPrimary:output_type -> vtctldata.InitShardPrimaryResponse
- 181, // 182: vtctlservice.Vtctld.LaunchSchemaMigration:output_type -> vtctldata.LaunchSchemaMigrationResponse
- 182, // 183: vtctlservice.Vtctld.LookupVindexCreate:output_type -> vtctldata.LookupVindexCreateResponse
- 183, // 184: vtctlservice.Vtctld.LookupVindexExternalize:output_type -> vtctldata.LookupVindexExternalizeResponse
- 184, // 185: vtctlservice.Vtctld.MaterializeCreate:output_type -> vtctldata.MaterializeCreateResponse
- 185, // 186: vtctlservice.Vtctld.MigrateCreate:output_type -> vtctldata.WorkflowStatusResponse
- 186, // 187: vtctlservice.Vtctld.MountRegister:output_type -> vtctldata.MountRegisterResponse
- 187, // 188: vtctlservice.Vtctld.MountUnregister:output_type -> vtctldata.MountUnregisterResponse
- 188, // 189: vtctlservice.Vtctld.MountShow:output_type -> vtctldata.MountShowResponse
- 189, // 190: vtctlservice.Vtctld.MountList:output_type -> vtctldata.MountListResponse
- 185, // 191: vtctlservice.Vtctld.MoveTablesCreate:output_type -> vtctldata.WorkflowStatusResponse
- 190, // 192: vtctlservice.Vtctld.MoveTablesComplete:output_type -> vtctldata.MoveTablesCompleteResponse
- 191, // 193: vtctlservice.Vtctld.PingTablet:output_type -> vtctldata.PingTabletResponse
- 192, // 194: vtctlservice.Vtctld.PlannedReparentShard:output_type -> vtctldata.PlannedReparentShardResponse
- 193, // 195: vtctlservice.Vtctld.RebuildKeyspaceGraph:output_type -> vtctldata.RebuildKeyspaceGraphResponse
- 194, // 196: vtctlservice.Vtctld.RebuildVSchemaGraph:output_type -> vtctldata.RebuildVSchemaGraphResponse
- 195, // 197: vtctlservice.Vtctld.RefreshState:output_type -> vtctldata.RefreshStateResponse
- 196, // 198: vtctlservice.Vtctld.RefreshStateByShard:output_type -> vtctldata.RefreshStateByShardResponse
- 197, // 199: vtctlservice.Vtctld.ReloadSchema:output_type -> vtctldata.ReloadSchemaResponse
- 198, // 200: vtctlservice.Vtctld.ReloadSchemaKeyspace:output_type -> vtctldata.ReloadSchemaKeyspaceResponse
- 199, // 201: vtctlservice.Vtctld.ReloadSchemaShard:output_type -> vtctldata.ReloadSchemaShardResponse
- 200, // 202: vtctlservice.Vtctld.RemoveBackup:output_type -> vtctldata.RemoveBackupResponse
- 201, // 203: vtctlservice.Vtctld.RemoveKeyspaceCell:output_type -> vtctldata.RemoveKeyspaceCellResponse
- 202, // 204: vtctlservice.Vtctld.RemoveShardCell:output_type -> vtctldata.RemoveShardCellResponse
- 203, // 205: vtctlservice.Vtctld.ReparentTablet:output_type -> vtctldata.ReparentTabletResponse
- 185, // 206: vtctlservice.Vtctld.ReshardCreate:output_type -> vtctldata.WorkflowStatusResponse
- 204, // 207: vtctlservice.Vtctld.RestoreFromBackup:output_type -> vtctldata.RestoreFromBackupResponse
- 205, // 208: vtctlservice.Vtctld.RetrySchemaMigration:output_type -> vtctldata.RetrySchemaMigrationResponse
- 206, // 209: vtctlservice.Vtctld.RunHealthCheck:output_type -> vtctldata.RunHealthCheckResponse
- 207, // 210: vtctlservice.Vtctld.SetKeyspaceDurabilityPolicy:output_type -> vtctldata.SetKeyspaceDurabilityPolicyResponse
- 208, // 211: vtctlservice.Vtctld.SetShardIsPrimaryServing:output_type -> vtctldata.SetShardIsPrimaryServingResponse
- 209, // 212: vtctlservice.Vtctld.SetShardTabletControl:output_type -> vtctldata.SetShardTabletControlResponse
- 210, // 213: vtctlservice.Vtctld.SetWritable:output_type -> vtctldata.SetWritableResponse
- 211, // 214: vtctlservice.Vtctld.ShardReplicationAdd:output_type -> vtctldata.ShardReplicationAddResponse
- 212, // 215: vtctlservice.Vtctld.ShardReplicationFix:output_type -> vtctldata.ShardReplicationFixResponse
- 213, // 216: vtctlservice.Vtctld.ShardReplicationPositions:output_type -> vtctldata.ShardReplicationPositionsResponse
- 214, // 217: vtctlservice.Vtctld.ShardReplicationRemove:output_type -> vtctldata.ShardReplicationRemoveResponse
- 215, // 218: vtctlservice.Vtctld.SleepTablet:output_type -> vtctldata.SleepTabletResponse
- 216, // 219: vtctlservice.Vtctld.SourceShardAdd:output_type -> vtctldata.SourceShardAddResponse
- 217, // 220: vtctlservice.Vtctld.SourceShardDelete:output_type -> vtctldata.SourceShardDeleteResponse
- 218, // 221: vtctlservice.Vtctld.StartReplication:output_type -> vtctldata.StartReplicationResponse
- 219, // 222: vtctlservice.Vtctld.StopReplication:output_type -> vtctldata.StopReplicationResponse
- 220, // 223: vtctlservice.Vtctld.TabletExternallyReparented:output_type -> vtctldata.TabletExternallyReparentedResponse
- 221, // 224: vtctlservice.Vtctld.UpdateCellInfo:output_type -> vtctldata.UpdateCellInfoResponse
- 222, // 225: vtctlservice.Vtctld.UpdateCellsAlias:output_type -> vtctldata.UpdateCellsAliasResponse
- 223, // 226: vtctlservice.Vtctld.Validate:output_type -> vtctldata.ValidateResponse
- 224, // 227: vtctlservice.Vtctld.ValidateKeyspace:output_type -> vtctldata.ValidateKeyspaceResponse
- 225, // 228: vtctlservice.Vtctld.ValidateSchemaKeyspace:output_type -> vtctldata.ValidateSchemaKeyspaceResponse
- 226, // 229: vtctlservice.Vtctld.ValidateShard:output_type -> vtctldata.ValidateShardResponse
- 227, // 230: vtctlservice.Vtctld.ValidateVersionKeyspace:output_type -> vtctldata.ValidateVersionKeyspaceResponse
- 228, // 231: vtctlservice.Vtctld.ValidateVersionShard:output_type -> vtctldata.ValidateVersionShardResponse
- 229, // 232: vtctlservice.Vtctld.ValidateVSchema:output_type -> vtctldata.ValidateVSchemaResponse
- 230, // 233: vtctlservice.Vtctld.VDiffCreate:output_type -> vtctldata.VDiffCreateResponse
- 231, // 234: vtctlservice.Vtctld.VDiffDelete:output_type -> vtctldata.VDiffDeleteResponse
- 232, // 235: vtctlservice.Vtctld.VDiffResume:output_type -> vtctldata.VDiffResumeResponse
- 233, // 236: vtctlservice.Vtctld.VDiffShow:output_type -> vtctldata.VDiffShowResponse
- 234, // 237: vtctlservice.Vtctld.VDiffStop:output_type -> vtctldata.VDiffStopResponse
- 235, // 238: vtctlservice.Vtctld.WorkflowDelete:output_type -> vtctldata.WorkflowDeleteResponse
- 185, // 239: vtctlservice.Vtctld.WorkflowStatus:output_type -> vtctldata.WorkflowStatusResponse
- 236, // 240: vtctlservice.Vtctld.WorkflowSwitchTraffic:output_type -> vtctldata.WorkflowSwitchTrafficResponse
- 237, // 241: vtctlservice.Vtctld.WorkflowUpdate:output_type -> vtctldata.WorkflowUpdateResponse
- 238, // 242: vtctlservice.Vtctld.GetMirrorRules:output_type -> vtctldata.GetMirrorRulesResponse
- 239, // 243: vtctlservice.Vtctld.WorkflowMirrorTraffic:output_type -> vtctldata.WorkflowMirrorTrafficResponse
- 122, // [122:244] is the sub-list for method output_type
- 0, // [0:122] is the sub-list for method input_type
+ 11, // 11: vtctlservice.Vtctld.ChangeTabletTags:input_type -> vtctldata.ChangeTabletTagsRequest
+ 12, // 12: vtctlservice.Vtctld.ChangeTabletType:input_type -> vtctldata.ChangeTabletTypeRequest
+ 13, // 13: vtctlservice.Vtctld.CheckThrottler:input_type -> vtctldata.CheckThrottlerRequest
+ 14, // 14: vtctlservice.Vtctld.CleanupSchemaMigration:input_type -> vtctldata.CleanupSchemaMigrationRequest
+ 15, // 15: vtctlservice.Vtctld.CompleteSchemaMigration:input_type -> vtctldata.CompleteSchemaMigrationRequest
+ 16, // 16: vtctlservice.Vtctld.ConcludeTransaction:input_type -> vtctldata.ConcludeTransactionRequest
+ 17, // 17: vtctlservice.Vtctld.CreateKeyspace:input_type -> vtctldata.CreateKeyspaceRequest
+ 18, // 18: vtctlservice.Vtctld.CreateShard:input_type -> vtctldata.CreateShardRequest
+ 19, // 19: vtctlservice.Vtctld.DeleteCellInfo:input_type -> vtctldata.DeleteCellInfoRequest
+ 20, // 20: vtctlservice.Vtctld.DeleteCellsAlias:input_type -> vtctldata.DeleteCellsAliasRequest
+ 21, // 21: vtctlservice.Vtctld.DeleteKeyspace:input_type -> vtctldata.DeleteKeyspaceRequest
+ 22, // 22: vtctlservice.Vtctld.DeleteShards:input_type -> vtctldata.DeleteShardsRequest
+ 23, // 23: vtctlservice.Vtctld.DeleteSrvVSchema:input_type -> vtctldata.DeleteSrvVSchemaRequest
+ 24, // 24: vtctlservice.Vtctld.DeleteTablets:input_type -> vtctldata.DeleteTabletsRequest
+ 25, // 25: vtctlservice.Vtctld.EmergencyReparentShard:input_type -> vtctldata.EmergencyReparentShardRequest
+ 26, // 26: vtctlservice.Vtctld.ExecuteFetchAsApp:input_type -> vtctldata.ExecuteFetchAsAppRequest
+ 27, // 27: vtctlservice.Vtctld.ExecuteFetchAsDBA:input_type -> vtctldata.ExecuteFetchAsDBARequest
+ 28, // 28: vtctlservice.Vtctld.ExecuteHook:input_type -> vtctldata.ExecuteHookRequest
+ 29, // 29: vtctlservice.Vtctld.ExecuteMultiFetchAsDBA:input_type -> vtctldata.ExecuteMultiFetchAsDBARequest
+ 30, // 30: vtctlservice.Vtctld.FindAllShardsInKeyspace:input_type -> vtctldata.FindAllShardsInKeyspaceRequest
+ 31, // 31: vtctlservice.Vtctld.ForceCutOverSchemaMigration:input_type -> vtctldata.ForceCutOverSchemaMigrationRequest
+ 32, // 32: vtctlservice.Vtctld.GetBackups:input_type -> vtctldata.GetBackupsRequest
+ 33, // 33: vtctlservice.Vtctld.GetCellInfo:input_type -> vtctldata.GetCellInfoRequest
+ 34, // 34: vtctlservice.Vtctld.GetCellInfoNames:input_type -> vtctldata.GetCellInfoNamesRequest
+ 35, // 35: vtctlservice.Vtctld.GetCellsAliases:input_type -> vtctldata.GetCellsAliasesRequest
+ 36, // 36: vtctlservice.Vtctld.GetFullStatus:input_type -> vtctldata.GetFullStatusRequest
+ 37, // 37: vtctlservice.Vtctld.GetKeyspace:input_type -> vtctldata.GetKeyspaceRequest
+ 38, // 38: vtctlservice.Vtctld.GetKeyspaces:input_type -> vtctldata.GetKeyspacesRequest
+ 39, // 39: vtctlservice.Vtctld.GetKeyspaceRoutingRules:input_type -> vtctldata.GetKeyspaceRoutingRulesRequest
+ 40, // 40: vtctlservice.Vtctld.GetPermissions:input_type -> vtctldata.GetPermissionsRequest
+ 41, // 41: vtctlservice.Vtctld.GetRoutingRules:input_type -> vtctldata.GetRoutingRulesRequest
+ 42, // 42: vtctlservice.Vtctld.GetSchema:input_type -> vtctldata.GetSchemaRequest
+ 43, // 43: vtctlservice.Vtctld.GetSchemaMigrations:input_type -> vtctldata.GetSchemaMigrationsRequest
+ 44, // 44: vtctlservice.Vtctld.GetShardReplication:input_type -> vtctldata.GetShardReplicationRequest
+ 45, // 45: vtctlservice.Vtctld.GetShard:input_type -> vtctldata.GetShardRequest
+ 46, // 46: vtctlservice.Vtctld.GetShardRoutingRules:input_type -> vtctldata.GetShardRoutingRulesRequest
+ 47, // 47: vtctlservice.Vtctld.GetSrvKeyspaceNames:input_type -> vtctldata.GetSrvKeyspaceNamesRequest
+ 48, // 48: vtctlservice.Vtctld.GetSrvKeyspaces:input_type -> vtctldata.GetSrvKeyspacesRequest
+ 49, // 49: vtctlservice.Vtctld.UpdateThrottlerConfig:input_type -> vtctldata.UpdateThrottlerConfigRequest
+ 50, // 50: vtctlservice.Vtctld.GetSrvVSchema:input_type -> vtctldata.GetSrvVSchemaRequest
+ 51, // 51: vtctlservice.Vtctld.GetSrvVSchemas:input_type -> vtctldata.GetSrvVSchemasRequest
+ 52, // 52: vtctlservice.Vtctld.GetTablet:input_type -> vtctldata.GetTabletRequest
+ 53, // 53: vtctlservice.Vtctld.GetTablets:input_type -> vtctldata.GetTabletsRequest
+ 54, // 54: vtctlservice.Vtctld.GetThrottlerStatus:input_type -> vtctldata.GetThrottlerStatusRequest
+ 55, // 55: vtctlservice.Vtctld.GetTopologyPath:input_type -> vtctldata.GetTopologyPathRequest
+ 56, // 56: vtctlservice.Vtctld.GetTransactionInfo:input_type -> vtctldata.GetTransactionInfoRequest
+ 57, // 57: vtctlservice.Vtctld.GetUnresolvedTransactions:input_type -> vtctldata.GetUnresolvedTransactionsRequest
+ 58, // 58: vtctlservice.Vtctld.GetVersion:input_type -> vtctldata.GetVersionRequest
+ 59, // 59: vtctlservice.Vtctld.GetVSchema:input_type -> vtctldata.GetVSchemaRequest
+ 60, // 60: vtctlservice.Vtctld.GetWorkflows:input_type -> vtctldata.GetWorkflowsRequest
+ 61, // 61: vtctlservice.Vtctld.InitShardPrimary:input_type -> vtctldata.InitShardPrimaryRequest
+ 62, // 62: vtctlservice.Vtctld.LaunchSchemaMigration:input_type -> vtctldata.LaunchSchemaMigrationRequest
+ 63, // 63: vtctlservice.Vtctld.LookupVindexCreate:input_type -> vtctldata.LookupVindexCreateRequest
+ 64, // 64: vtctlservice.Vtctld.LookupVindexExternalize:input_type -> vtctldata.LookupVindexExternalizeRequest
+ 65, // 65: vtctlservice.Vtctld.MaterializeCreate:input_type -> vtctldata.MaterializeCreateRequest
+ 66, // 66: vtctlservice.Vtctld.MigrateCreate:input_type -> vtctldata.MigrateCreateRequest
+ 67, // 67: vtctlservice.Vtctld.MountRegister:input_type -> vtctldata.MountRegisterRequest
+ 68, // 68: vtctlservice.Vtctld.MountUnregister:input_type -> vtctldata.MountUnregisterRequest
+ 69, // 69: vtctlservice.Vtctld.MountShow:input_type -> vtctldata.MountShowRequest
+ 70, // 70: vtctlservice.Vtctld.MountList:input_type -> vtctldata.MountListRequest
+ 71, // 71: vtctlservice.Vtctld.MoveTablesCreate:input_type -> vtctldata.MoveTablesCreateRequest
+ 72, // 72: vtctlservice.Vtctld.MoveTablesComplete:input_type -> vtctldata.MoveTablesCompleteRequest
+ 73, // 73: vtctlservice.Vtctld.PingTablet:input_type -> vtctldata.PingTabletRequest
+ 74, // 74: vtctlservice.Vtctld.PlannedReparentShard:input_type -> vtctldata.PlannedReparentShardRequest
+ 75, // 75: vtctlservice.Vtctld.RebuildKeyspaceGraph:input_type -> vtctldata.RebuildKeyspaceGraphRequest
+ 76, // 76: vtctlservice.Vtctld.RebuildVSchemaGraph:input_type -> vtctldata.RebuildVSchemaGraphRequest
+ 77, // 77: vtctlservice.Vtctld.RefreshState:input_type -> vtctldata.RefreshStateRequest
+ 78, // 78: vtctlservice.Vtctld.RefreshStateByShard:input_type -> vtctldata.RefreshStateByShardRequest
+ 79, // 79: vtctlservice.Vtctld.ReloadSchema:input_type -> vtctldata.ReloadSchemaRequest
+ 80, // 80: vtctlservice.Vtctld.ReloadSchemaKeyspace:input_type -> vtctldata.ReloadSchemaKeyspaceRequest
+ 81, // 81: vtctlservice.Vtctld.ReloadSchemaShard:input_type -> vtctldata.ReloadSchemaShardRequest
+ 82, // 82: vtctlservice.Vtctld.RemoveBackup:input_type -> vtctldata.RemoveBackupRequest
+ 83, // 83: vtctlservice.Vtctld.RemoveKeyspaceCell:input_type -> vtctldata.RemoveKeyspaceCellRequest
+ 84, // 84: vtctlservice.Vtctld.RemoveShardCell:input_type -> vtctldata.RemoveShardCellRequest
+ 85, // 85: vtctlservice.Vtctld.ReparentTablet:input_type -> vtctldata.ReparentTabletRequest
+ 86, // 86: vtctlservice.Vtctld.ReshardCreate:input_type -> vtctldata.ReshardCreateRequest
+ 87, // 87: vtctlservice.Vtctld.RestoreFromBackup:input_type -> vtctldata.RestoreFromBackupRequest
+ 88, // 88: vtctlservice.Vtctld.RetrySchemaMigration:input_type -> vtctldata.RetrySchemaMigrationRequest
+ 89, // 89: vtctlservice.Vtctld.RunHealthCheck:input_type -> vtctldata.RunHealthCheckRequest
+ 90, // 90: vtctlservice.Vtctld.SetKeyspaceDurabilityPolicy:input_type -> vtctldata.SetKeyspaceDurabilityPolicyRequest
+ 91, // 91: vtctlservice.Vtctld.SetShardIsPrimaryServing:input_type -> vtctldata.SetShardIsPrimaryServingRequest
+ 92, // 92: vtctlservice.Vtctld.SetShardTabletControl:input_type -> vtctldata.SetShardTabletControlRequest
+ 93, // 93: vtctlservice.Vtctld.SetWritable:input_type -> vtctldata.SetWritableRequest
+ 94, // 94: vtctlservice.Vtctld.ShardReplicationAdd:input_type -> vtctldata.ShardReplicationAddRequest
+ 95, // 95: vtctlservice.Vtctld.ShardReplicationFix:input_type -> vtctldata.ShardReplicationFixRequest
+ 96, // 96: vtctlservice.Vtctld.ShardReplicationPositions:input_type -> vtctldata.ShardReplicationPositionsRequest
+ 97, // 97: vtctlservice.Vtctld.ShardReplicationRemove:input_type -> vtctldata.ShardReplicationRemoveRequest
+ 98, // 98: vtctlservice.Vtctld.SleepTablet:input_type -> vtctldata.SleepTabletRequest
+ 99, // 99: vtctlservice.Vtctld.SourceShardAdd:input_type -> vtctldata.SourceShardAddRequest
+ 100, // 100: vtctlservice.Vtctld.SourceShardDelete:input_type -> vtctldata.SourceShardDeleteRequest
+ 101, // 101: vtctlservice.Vtctld.StartReplication:input_type -> vtctldata.StartReplicationRequest
+ 102, // 102: vtctlservice.Vtctld.StopReplication:input_type -> vtctldata.StopReplicationRequest
+ 103, // 103: vtctlservice.Vtctld.TabletExternallyReparented:input_type -> vtctldata.TabletExternallyReparentedRequest
+ 104, // 104: vtctlservice.Vtctld.UpdateCellInfo:input_type -> vtctldata.UpdateCellInfoRequest
+ 105, // 105: vtctlservice.Vtctld.UpdateCellsAlias:input_type -> vtctldata.UpdateCellsAliasRequest
+ 106, // 106: vtctlservice.Vtctld.Validate:input_type -> vtctldata.ValidateRequest
+ 107, // 107: vtctlservice.Vtctld.ValidateKeyspace:input_type -> vtctldata.ValidateKeyspaceRequest
+ 108, // 108: vtctlservice.Vtctld.ValidateSchemaKeyspace:input_type -> vtctldata.ValidateSchemaKeyspaceRequest
+ 109, // 109: vtctlservice.Vtctld.ValidateShard:input_type -> vtctldata.ValidateShardRequest
+ 110, // 110: vtctlservice.Vtctld.ValidateVersionKeyspace:input_type -> vtctldata.ValidateVersionKeyspaceRequest
+ 111, // 111: vtctlservice.Vtctld.ValidateVersionShard:input_type -> vtctldata.ValidateVersionShardRequest
+ 112, // 112: vtctlservice.Vtctld.ValidateVSchema:input_type -> vtctldata.ValidateVSchemaRequest
+ 113, // 113: vtctlservice.Vtctld.VDiffCreate:input_type -> vtctldata.VDiffCreateRequest
+ 114, // 114: vtctlservice.Vtctld.VDiffDelete:input_type -> vtctldata.VDiffDeleteRequest
+ 115, // 115: vtctlservice.Vtctld.VDiffResume:input_type -> vtctldata.VDiffResumeRequest
+ 116, // 116: vtctlservice.Vtctld.VDiffShow:input_type -> vtctldata.VDiffShowRequest
+ 117, // 117: vtctlservice.Vtctld.VDiffStop:input_type -> vtctldata.VDiffStopRequest
+ 118, // 118: vtctlservice.Vtctld.WorkflowDelete:input_type -> vtctldata.WorkflowDeleteRequest
+ 119, // 119: vtctlservice.Vtctld.WorkflowStatus:input_type -> vtctldata.WorkflowStatusRequest
+ 120, // 120: vtctlservice.Vtctld.WorkflowSwitchTraffic:input_type -> vtctldata.WorkflowSwitchTrafficRequest
+ 121, // 121: vtctlservice.Vtctld.WorkflowUpdate:input_type -> vtctldata.WorkflowUpdateRequest
+ 122, // 122: vtctlservice.Vtctld.GetMirrorRules:input_type -> vtctldata.GetMirrorRulesRequest
+ 123, // 123: vtctlservice.Vtctld.WorkflowMirrorTraffic:input_type -> vtctldata.WorkflowMirrorTrafficRequest
+ 124, // 124: vtctlservice.Vtctl.ExecuteVtctlCommand:output_type -> vtctldata.ExecuteVtctlCommandResponse
+ 125, // 125: vtctlservice.Vtctld.AddCellInfo:output_type -> vtctldata.AddCellInfoResponse
+ 126, // 126: vtctlservice.Vtctld.AddCellsAlias:output_type -> vtctldata.AddCellsAliasResponse
+ 127, // 127: vtctlservice.Vtctld.ApplyRoutingRules:output_type -> vtctldata.ApplyRoutingRulesResponse
+ 128, // 128: vtctlservice.Vtctld.ApplySchema:output_type -> vtctldata.ApplySchemaResponse
+ 129, // 129: vtctlservice.Vtctld.ApplyKeyspaceRoutingRules:output_type -> vtctldata.ApplyKeyspaceRoutingRulesResponse
+ 130, // 130: vtctlservice.Vtctld.ApplyShardRoutingRules:output_type -> vtctldata.ApplyShardRoutingRulesResponse
+ 131, // 131: vtctlservice.Vtctld.ApplyVSchema:output_type -> vtctldata.ApplyVSchemaResponse
+ 132, // 132: vtctlservice.Vtctld.Backup:output_type -> vtctldata.BackupResponse
+ 132, // 133: vtctlservice.Vtctld.BackupShard:output_type -> vtctldata.BackupResponse
+ 133, // 134: vtctlservice.Vtctld.CancelSchemaMigration:output_type -> vtctldata.CancelSchemaMigrationResponse
+ 134, // 135: vtctlservice.Vtctld.ChangeTabletTags:output_type -> vtctldata.ChangeTabletTagsResponse
+ 135, // 136: vtctlservice.Vtctld.ChangeTabletType:output_type -> vtctldata.ChangeTabletTypeResponse
+ 136, // 137: vtctlservice.Vtctld.CheckThrottler:output_type -> vtctldata.CheckThrottlerResponse
+ 137, // 138: vtctlservice.Vtctld.CleanupSchemaMigration:output_type -> vtctldata.CleanupSchemaMigrationResponse
+ 138, // 139: vtctlservice.Vtctld.CompleteSchemaMigration:output_type -> vtctldata.CompleteSchemaMigrationResponse
+ 139, // 140: vtctlservice.Vtctld.ConcludeTransaction:output_type -> vtctldata.ConcludeTransactionResponse
+ 140, // 141: vtctlservice.Vtctld.CreateKeyspace:output_type -> vtctldata.CreateKeyspaceResponse
+ 141, // 142: vtctlservice.Vtctld.CreateShard:output_type -> vtctldata.CreateShardResponse
+ 142, // 143: vtctlservice.Vtctld.DeleteCellInfo:output_type -> vtctldata.DeleteCellInfoResponse
+ 143, // 144: vtctlservice.Vtctld.DeleteCellsAlias:output_type -> vtctldata.DeleteCellsAliasResponse
+ 144, // 145: vtctlservice.Vtctld.DeleteKeyspace:output_type -> vtctldata.DeleteKeyspaceResponse
+ 145, // 146: vtctlservice.Vtctld.DeleteShards:output_type -> vtctldata.DeleteShardsResponse
+ 146, // 147: vtctlservice.Vtctld.DeleteSrvVSchema:output_type -> vtctldata.DeleteSrvVSchemaResponse
+ 147, // 148: vtctlservice.Vtctld.DeleteTablets:output_type -> vtctldata.DeleteTabletsResponse
+ 148, // 149: vtctlservice.Vtctld.EmergencyReparentShard:output_type -> vtctldata.EmergencyReparentShardResponse
+ 149, // 150: vtctlservice.Vtctld.ExecuteFetchAsApp:output_type -> vtctldata.ExecuteFetchAsAppResponse
+ 150, // 151: vtctlservice.Vtctld.ExecuteFetchAsDBA:output_type -> vtctldata.ExecuteFetchAsDBAResponse
+ 151, // 152: vtctlservice.Vtctld.ExecuteHook:output_type -> vtctldata.ExecuteHookResponse
+ 152, // 153: vtctlservice.Vtctld.ExecuteMultiFetchAsDBA:output_type -> vtctldata.ExecuteMultiFetchAsDBAResponse
+ 153, // 154: vtctlservice.Vtctld.FindAllShardsInKeyspace:output_type -> vtctldata.FindAllShardsInKeyspaceResponse
+ 154, // 155: vtctlservice.Vtctld.ForceCutOverSchemaMigration:output_type -> vtctldata.ForceCutOverSchemaMigrationResponse
+ 155, // 156: vtctlservice.Vtctld.GetBackups:output_type -> vtctldata.GetBackupsResponse
+ 156, // 157: vtctlservice.Vtctld.GetCellInfo:output_type -> vtctldata.GetCellInfoResponse
+ 157, // 158: vtctlservice.Vtctld.GetCellInfoNames:output_type -> vtctldata.GetCellInfoNamesResponse
+ 158, // 159: vtctlservice.Vtctld.GetCellsAliases:output_type -> vtctldata.GetCellsAliasesResponse
+ 159, // 160: vtctlservice.Vtctld.GetFullStatus:output_type -> vtctldata.GetFullStatusResponse
+ 160, // 161: vtctlservice.Vtctld.GetKeyspace:output_type -> vtctldata.GetKeyspaceResponse
+ 161, // 162: vtctlservice.Vtctld.GetKeyspaces:output_type -> vtctldata.GetKeyspacesResponse
+ 162, // 163: vtctlservice.Vtctld.GetKeyspaceRoutingRules:output_type -> vtctldata.GetKeyspaceRoutingRulesResponse
+ 163, // 164: vtctlservice.Vtctld.GetPermissions:output_type -> vtctldata.GetPermissionsResponse
+ 164, // 165: vtctlservice.Vtctld.GetRoutingRules:output_type -> vtctldata.GetRoutingRulesResponse
+ 165, // 166: vtctlservice.Vtctld.GetSchema:output_type -> vtctldata.GetSchemaResponse
+ 166, // 167: vtctlservice.Vtctld.GetSchemaMigrations:output_type -> vtctldata.GetSchemaMigrationsResponse
+ 167, // 168: vtctlservice.Vtctld.GetShardReplication:output_type -> vtctldata.GetShardReplicationResponse
+ 168, // 169: vtctlservice.Vtctld.GetShard:output_type -> vtctldata.GetShardResponse
+ 169, // 170: vtctlservice.Vtctld.GetShardRoutingRules:output_type -> vtctldata.GetShardRoutingRulesResponse
+ 170, // 171: vtctlservice.Vtctld.GetSrvKeyspaceNames:output_type -> vtctldata.GetSrvKeyspaceNamesResponse
+ 171, // 172: vtctlservice.Vtctld.GetSrvKeyspaces:output_type -> vtctldata.GetSrvKeyspacesResponse
+ 172, // 173: vtctlservice.Vtctld.UpdateThrottlerConfig:output_type -> vtctldata.UpdateThrottlerConfigResponse
+ 173, // 174: vtctlservice.Vtctld.GetSrvVSchema:output_type -> vtctldata.GetSrvVSchemaResponse
+ 174, // 175: vtctlservice.Vtctld.GetSrvVSchemas:output_type -> vtctldata.GetSrvVSchemasResponse
+ 175, // 176: vtctlservice.Vtctld.GetTablet:output_type -> vtctldata.GetTabletResponse
+ 176, // 177: vtctlservice.Vtctld.GetTablets:output_type -> vtctldata.GetTabletsResponse
+ 177, // 178: vtctlservice.Vtctld.GetThrottlerStatus:output_type -> vtctldata.GetThrottlerStatusResponse
+ 178, // 179: vtctlservice.Vtctld.GetTopologyPath:output_type -> vtctldata.GetTopologyPathResponse
+ 179, // 180: vtctlservice.Vtctld.GetTransactionInfo:output_type -> vtctldata.GetTransactionInfoResponse
+ 180, // 181: vtctlservice.Vtctld.GetUnresolvedTransactions:output_type -> vtctldata.GetUnresolvedTransactionsResponse
+ 181, // 182: vtctlservice.Vtctld.GetVersion:output_type -> vtctldata.GetVersionResponse
+ 182, // 183: vtctlservice.Vtctld.GetVSchema:output_type -> vtctldata.GetVSchemaResponse
+ 183, // 184: vtctlservice.Vtctld.GetWorkflows:output_type -> vtctldata.GetWorkflowsResponse
+ 184, // 185: vtctlservice.Vtctld.InitShardPrimary:output_type -> vtctldata.InitShardPrimaryResponse
+ 185, // 186: vtctlservice.Vtctld.LaunchSchemaMigration:output_type -> vtctldata.LaunchSchemaMigrationResponse
+ 186, // 187: vtctlservice.Vtctld.LookupVindexCreate:output_type -> vtctldata.LookupVindexCreateResponse
+ 187, // 188: vtctlservice.Vtctld.LookupVindexExternalize:output_type -> vtctldata.LookupVindexExternalizeResponse
+ 188, // 189: vtctlservice.Vtctld.MaterializeCreate:output_type -> vtctldata.MaterializeCreateResponse
+ 189, // 190: vtctlservice.Vtctld.MigrateCreate:output_type -> vtctldata.WorkflowStatusResponse
+ 190, // 191: vtctlservice.Vtctld.MountRegister:output_type -> vtctldata.MountRegisterResponse
+ 191, // 192: vtctlservice.Vtctld.MountUnregister:output_type -> vtctldata.MountUnregisterResponse
+ 192, // 193: vtctlservice.Vtctld.MountShow:output_type -> vtctldata.MountShowResponse
+ 193, // 194: vtctlservice.Vtctld.MountList:output_type -> vtctldata.MountListResponse
+ 189, // 195: vtctlservice.Vtctld.MoveTablesCreate:output_type -> vtctldata.WorkflowStatusResponse
+ 194, // 196: vtctlservice.Vtctld.MoveTablesComplete:output_type -> vtctldata.MoveTablesCompleteResponse
+ 195, // 197: vtctlservice.Vtctld.PingTablet:output_type -> vtctldata.PingTabletResponse
+ 196, // 198: vtctlservice.Vtctld.PlannedReparentShard:output_type -> vtctldata.PlannedReparentShardResponse
+ 197, // 199: vtctlservice.Vtctld.RebuildKeyspaceGraph:output_type -> vtctldata.RebuildKeyspaceGraphResponse
+ 198, // 200: vtctlservice.Vtctld.RebuildVSchemaGraph:output_type -> vtctldata.RebuildVSchemaGraphResponse
+ 199, // 201: vtctlservice.Vtctld.RefreshState:output_type -> vtctldata.RefreshStateResponse
+ 200, // 202: vtctlservice.Vtctld.RefreshStateByShard:output_type -> vtctldata.RefreshStateByShardResponse
+ 201, // 203: vtctlservice.Vtctld.ReloadSchema:output_type -> vtctldata.ReloadSchemaResponse
+ 202, // 204: vtctlservice.Vtctld.ReloadSchemaKeyspace:output_type -> vtctldata.ReloadSchemaKeyspaceResponse
+ 203, // 205: vtctlservice.Vtctld.ReloadSchemaShard:output_type -> vtctldata.ReloadSchemaShardResponse
+ 204, // 206: vtctlservice.Vtctld.RemoveBackup:output_type -> vtctldata.RemoveBackupResponse
+ 205, // 207: vtctlservice.Vtctld.RemoveKeyspaceCell:output_type -> vtctldata.RemoveKeyspaceCellResponse
+ 206, // 208: vtctlservice.Vtctld.RemoveShardCell:output_type -> vtctldata.RemoveShardCellResponse
+ 207, // 209: vtctlservice.Vtctld.ReparentTablet:output_type -> vtctldata.ReparentTabletResponse
+ 189, // 210: vtctlservice.Vtctld.ReshardCreate:output_type -> vtctldata.WorkflowStatusResponse
+ 208, // 211: vtctlservice.Vtctld.RestoreFromBackup:output_type -> vtctldata.RestoreFromBackupResponse
+ 209, // 212: vtctlservice.Vtctld.RetrySchemaMigration:output_type -> vtctldata.RetrySchemaMigrationResponse
+ 210, // 213: vtctlservice.Vtctld.RunHealthCheck:output_type -> vtctldata.RunHealthCheckResponse
+ 211, // 214: vtctlservice.Vtctld.SetKeyspaceDurabilityPolicy:output_type -> vtctldata.SetKeyspaceDurabilityPolicyResponse
+ 212, // 215: vtctlservice.Vtctld.SetShardIsPrimaryServing:output_type -> vtctldata.SetShardIsPrimaryServingResponse
+ 213, // 216: vtctlservice.Vtctld.SetShardTabletControl:output_type -> vtctldata.SetShardTabletControlResponse
+ 214, // 217: vtctlservice.Vtctld.SetWritable:output_type -> vtctldata.SetWritableResponse
+ 215, // 218: vtctlservice.Vtctld.ShardReplicationAdd:output_type -> vtctldata.ShardReplicationAddResponse
+ 216, // 219: vtctlservice.Vtctld.ShardReplicationFix:output_type -> vtctldata.ShardReplicationFixResponse
+ 217, // 220: vtctlservice.Vtctld.ShardReplicationPositions:output_type -> vtctldata.ShardReplicationPositionsResponse
+ 218, // 221: vtctlservice.Vtctld.ShardReplicationRemove:output_type -> vtctldata.ShardReplicationRemoveResponse
+ 219, // 222: vtctlservice.Vtctld.SleepTablet:output_type -> vtctldata.SleepTabletResponse
+ 220, // 223: vtctlservice.Vtctld.SourceShardAdd:output_type -> vtctldata.SourceShardAddResponse
+ 221, // 224: vtctlservice.Vtctld.SourceShardDelete:output_type -> vtctldata.SourceShardDeleteResponse
+ 222, // 225: vtctlservice.Vtctld.StartReplication:output_type -> vtctldata.StartReplicationResponse
+ 223, // 226: vtctlservice.Vtctld.StopReplication:output_type -> vtctldata.StopReplicationResponse
+ 224, // 227: vtctlservice.Vtctld.TabletExternallyReparented:output_type -> vtctldata.TabletExternallyReparentedResponse
+ 225, // 228: vtctlservice.Vtctld.UpdateCellInfo:output_type -> vtctldata.UpdateCellInfoResponse
+ 226, // 229: vtctlservice.Vtctld.UpdateCellsAlias:output_type -> vtctldata.UpdateCellsAliasResponse
+ 227, // 230: vtctlservice.Vtctld.Validate:output_type -> vtctldata.ValidateResponse
+ 228, // 231: vtctlservice.Vtctld.ValidateKeyspace:output_type -> vtctldata.ValidateKeyspaceResponse
+ 229, // 232: vtctlservice.Vtctld.ValidateSchemaKeyspace:output_type -> vtctldata.ValidateSchemaKeyspaceResponse
+ 230, // 233: vtctlservice.Vtctld.ValidateShard:output_type -> vtctldata.ValidateShardResponse
+ 231, // 234: vtctlservice.Vtctld.ValidateVersionKeyspace:output_type -> vtctldata.ValidateVersionKeyspaceResponse
+ 232, // 235: vtctlservice.Vtctld.ValidateVersionShard:output_type -> vtctldata.ValidateVersionShardResponse
+ 233, // 236: vtctlservice.Vtctld.ValidateVSchema:output_type -> vtctldata.ValidateVSchemaResponse
+ 234, // 237: vtctlservice.Vtctld.VDiffCreate:output_type -> vtctldata.VDiffCreateResponse
+ 235, // 238: vtctlservice.Vtctld.VDiffDelete:output_type -> vtctldata.VDiffDeleteResponse
+ 236, // 239: vtctlservice.Vtctld.VDiffResume:output_type -> vtctldata.VDiffResumeResponse
+ 237, // 240: vtctlservice.Vtctld.VDiffShow:output_type -> vtctldata.VDiffShowResponse
+ 238, // 241: vtctlservice.Vtctld.VDiffStop:output_type -> vtctldata.VDiffStopResponse
+ 239, // 242: vtctlservice.Vtctld.WorkflowDelete:output_type -> vtctldata.WorkflowDeleteResponse
+ 189, // 243: vtctlservice.Vtctld.WorkflowStatus:output_type -> vtctldata.WorkflowStatusResponse
+ 240, // 244: vtctlservice.Vtctld.WorkflowSwitchTraffic:output_type -> vtctldata.WorkflowSwitchTrafficResponse
+ 241, // 245: vtctlservice.Vtctld.WorkflowUpdate:output_type -> vtctldata.WorkflowUpdateResponse
+ 242, // 246: vtctlservice.Vtctld.GetMirrorRules:output_type -> vtctldata.GetMirrorRulesResponse
+ 243, // 247: vtctlservice.Vtctld.WorkflowMirrorTraffic:output_type -> vtctldata.WorkflowMirrorTrafficResponse
+ 124, // [124:248] is the sub-list for method output_type
+ 0, // [0:124] is the sub-list for method input_type
0, // [0:0] is the sub-list for extension type_name
0, // [0:0] is the sub-list for extension extendee
0, // [0:0] is the sub-list for field type_name
diff --git a/go/vt/proto/vtctlservice/vtctlservice_grpc.pb.go b/go/vt/proto/vtctlservice/vtctlservice_grpc.pb.go
index 9e6ad8103ad..0b2e5bae7dc 100644
--- a/go/vt/proto/vtctlservice/vtctlservice_grpc.pb.go
+++ b/go/vt/proto/vtctlservice/vtctlservice_grpc.pb.go
@@ -163,6 +163,8 @@ type VtctldClient interface {
BackupShard(ctx context.Context, in *vtctldata.BackupShardRequest, opts ...grpc.CallOption) (Vtctld_BackupShardClient, error)
// CancelSchemaMigration cancels one or all migrations, terminating any running ones as needed.
CancelSchemaMigration(ctx context.Context, in *vtctldata.CancelSchemaMigrationRequest, opts ...grpc.CallOption) (*vtctldata.CancelSchemaMigrationResponse, error)
+ // ChangeTabletTags changes the tags of the specified tablet, if possible.
+ ChangeTabletTags(ctx context.Context, in *vtctldata.ChangeTabletTagsRequest, opts ...grpc.CallOption) (*vtctldata.ChangeTabletTagsResponse, error)
// ChangeTabletType changes the db type for the specified tablet, if possible.
// This is used primarily to arrange replicas, and it will not convert a
// primary. For that, use InitShardPrimary.
@@ -276,6 +278,8 @@ type VtctldClient interface {
GetThrottlerStatus(ctx context.Context, in *vtctldata.GetThrottlerStatusRequest, opts ...grpc.CallOption) (*vtctldata.GetThrottlerStatusResponse, error)
// GetTopologyPath returns the topology cell at a given path.
GetTopologyPath(ctx context.Context, in *vtctldata.GetTopologyPathRequest, opts ...grpc.CallOption) (*vtctldata.GetTopologyPathResponse, error)
+ // GetTransactionInfo reads a given transactions information.
+ GetTransactionInfo(ctx context.Context, in *vtctldata.GetTransactionInfoRequest, opts ...grpc.CallOption) (*vtctldata.GetTransactionInfoResponse, error)
// GetTransactions returns the unresolved transactions for the request.
GetUnresolvedTransactions(ctx context.Context, in *vtctldata.GetUnresolvedTransactionsRequest, opts ...grpc.CallOption) (*vtctldata.GetUnresolvedTransactionsResponse, error)
// GetVersion returns the version of a tablet from its debug vars.
@@ -617,6 +621,15 @@ func (c *vtctldClient) CancelSchemaMigration(ctx context.Context, in *vtctldata.
return out, nil
}
+func (c *vtctldClient) ChangeTabletTags(ctx context.Context, in *vtctldata.ChangeTabletTagsRequest, opts ...grpc.CallOption) (*vtctldata.ChangeTabletTagsResponse, error) {
+ out := new(vtctldata.ChangeTabletTagsResponse)
+ err := c.cc.Invoke(ctx, "/vtctlservice.Vtctld/ChangeTabletTags", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *vtctldClient) ChangeTabletType(ctx context.Context, in *vtctldata.ChangeTabletTypeRequest, opts ...grpc.CallOption) (*vtctldata.ChangeTabletTypeResponse, error) {
out := new(vtctldata.ChangeTabletTypeResponse)
err := c.cc.Invoke(ctx, "/vtctlservice.Vtctld/ChangeTabletType", in, out, opts...)
@@ -1013,6 +1026,15 @@ func (c *vtctldClient) GetTopologyPath(ctx context.Context, in *vtctldata.GetTop
return out, nil
}
+func (c *vtctldClient) GetTransactionInfo(ctx context.Context, in *vtctldata.GetTransactionInfoRequest, opts ...grpc.CallOption) (*vtctldata.GetTransactionInfoResponse, error) {
+ out := new(vtctldata.GetTransactionInfoResponse)
+ err := c.cc.Invoke(ctx, "/vtctlservice.Vtctld/GetTransactionInfo", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *vtctldClient) GetUnresolvedTransactions(ctx context.Context, in *vtctldata.GetUnresolvedTransactionsRequest, opts ...grpc.CallOption) (*vtctldata.GetUnresolvedTransactionsResponse, error) {
out := new(vtctldata.GetUnresolvedTransactionsResponse)
err := c.cc.Invoke(ctx, "/vtctlservice.Vtctld/GetUnresolvedTransactions", in, out, opts...)
@@ -1670,6 +1692,8 @@ type VtctldServer interface {
BackupShard(*vtctldata.BackupShardRequest, Vtctld_BackupShardServer) error
// CancelSchemaMigration cancels one or all migrations, terminating any running ones as needed.
CancelSchemaMigration(context.Context, *vtctldata.CancelSchemaMigrationRequest) (*vtctldata.CancelSchemaMigrationResponse, error)
+ // ChangeTabletTags changes the tags of the specified tablet, if possible.
+ ChangeTabletTags(context.Context, *vtctldata.ChangeTabletTagsRequest) (*vtctldata.ChangeTabletTagsResponse, error)
// ChangeTabletType changes the db type for the specified tablet, if possible.
// This is used primarily to arrange replicas, and it will not convert a
// primary. For that, use InitShardPrimary.
@@ -1783,6 +1807,8 @@ type VtctldServer interface {
GetThrottlerStatus(context.Context, *vtctldata.GetThrottlerStatusRequest) (*vtctldata.GetThrottlerStatusResponse, error)
// GetTopologyPath returns the topology cell at a given path.
GetTopologyPath(context.Context, *vtctldata.GetTopologyPathRequest) (*vtctldata.GetTopologyPathResponse, error)
+ // GetTransactionInfo reads a given transactions information.
+ GetTransactionInfo(context.Context, *vtctldata.GetTransactionInfoRequest) (*vtctldata.GetTransactionInfoResponse, error)
// GetTransactions returns the unresolved transactions for the request.
GetUnresolvedTransactions(context.Context, *vtctldata.GetUnresolvedTransactionsRequest) (*vtctldata.GetUnresolvedTransactionsResponse, error)
// GetVersion returns the version of a tablet from its debug vars.
@@ -2015,6 +2041,9 @@ func (UnimplementedVtctldServer) BackupShard(*vtctldata.BackupShardRequest, Vtct
func (UnimplementedVtctldServer) CancelSchemaMigration(context.Context, *vtctldata.CancelSchemaMigrationRequest) (*vtctldata.CancelSchemaMigrationResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method CancelSchemaMigration not implemented")
}
+func (UnimplementedVtctldServer) ChangeTabletTags(context.Context, *vtctldata.ChangeTabletTagsRequest) (*vtctldata.ChangeTabletTagsResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method ChangeTabletTags not implemented")
+}
func (UnimplementedVtctldServer) ChangeTabletType(context.Context, *vtctldata.ChangeTabletTypeRequest) (*vtctldata.ChangeTabletTypeResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ChangeTabletType not implemented")
}
@@ -2147,6 +2176,9 @@ func (UnimplementedVtctldServer) GetThrottlerStatus(context.Context, *vtctldata.
func (UnimplementedVtctldServer) GetTopologyPath(context.Context, *vtctldata.GetTopologyPathRequest) (*vtctldata.GetTopologyPathResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetTopologyPath not implemented")
}
+func (UnimplementedVtctldServer) GetTransactionInfo(context.Context, *vtctldata.GetTransactionInfoRequest) (*vtctldata.GetTransactionInfoResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method GetTransactionInfo not implemented")
+}
func (UnimplementedVtctldServer) GetUnresolvedTransactions(context.Context, *vtctldata.GetUnresolvedTransactionsRequest) (*vtctldata.GetUnresolvedTransactionsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetUnresolvedTransactions not implemented")
}
@@ -2547,6 +2579,24 @@ func _Vtctld_CancelSchemaMigration_Handler(srv interface{}, ctx context.Context,
return interceptor(ctx, in, info, handler)
}
+func _Vtctld_ChangeTabletTags_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(vtctldata.ChangeTabletTagsRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(VtctldServer).ChangeTabletTags(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/vtctlservice.Vtctld/ChangeTabletTags",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(VtctldServer).ChangeTabletTags(ctx, req.(*vtctldata.ChangeTabletTagsRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _Vtctld_ChangeTabletType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(vtctldata.ChangeTabletTypeRequest)
if err := dec(in); err != nil {
@@ -3339,6 +3389,24 @@ func _Vtctld_GetTopologyPath_Handler(srv interface{}, ctx context.Context, dec f
return interceptor(ctx, in, info, handler)
}
+func _Vtctld_GetTransactionInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(vtctldata.GetTransactionInfoRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(VtctldServer).GetTransactionInfo(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/vtctlservice.Vtctld/GetTransactionInfo",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(VtctldServer).GetTransactionInfo(ctx, req.(*vtctldata.GetTransactionInfoRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _Vtctld_GetUnresolvedTransactions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(vtctldata.GetUnresolvedTransactionsRequest)
if err := dec(in); err != nil {
@@ -4587,6 +4655,10 @@ var Vtctld_ServiceDesc = grpc.ServiceDesc{
MethodName: "CancelSchemaMigration",
Handler: _Vtctld_CancelSchemaMigration_Handler,
},
+ {
+ MethodName: "ChangeTabletTags",
+ Handler: _Vtctld_ChangeTabletTags_Handler,
+ },
{
MethodName: "ChangeTabletType",
Handler: _Vtctld_ChangeTabletType_Handler,
@@ -4763,6 +4835,10 @@ var Vtctld_ServiceDesc = grpc.ServiceDesc{
MethodName: "GetTopologyPath",
Handler: _Vtctld_GetTopologyPath_Handler,
},
+ {
+ MethodName: "GetTransactionInfo",
+ Handler: _Vtctld_GetTransactionInfo_Handler,
+ },
{
MethodName: "GetUnresolvedTransactions",
Handler: _Vtctld_GetUnresolvedTransactions_Handler,
diff --git a/go/vt/proto/vtgate/vtgate.pb.go b/go/vt/proto/vtgate/vtgate.pb.go
index 58392f86bb3..b996f919256 100644
--- a/go/vt/proto/vtgate/vtgate.pb.go
+++ b/go/vt/proto/vtgate/vtgate.pb.go
@@ -17,7 +17,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.34.2
+// protoc-gen-go v1.35.1
// protoc v3.21.3
// source: vtgate.proto
@@ -231,11 +231,9 @@ type Session struct {
func (x *Session) Reset() {
*x = Session{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtgate_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtgate_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Session) String() string {
@@ -246,7 +244,7 @@ func (*Session) ProtoMessage() {}
func (x *Session) ProtoReflect() protoreflect.Message {
mi := &file_vtgate_proto_msgTypes[0]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -455,11 +453,9 @@ type PrepareData struct {
func (x *PrepareData) Reset() {
*x = PrepareData{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtgate_proto_msgTypes[1]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtgate_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *PrepareData) String() string {
@@ -470,7 +466,7 @@ func (*PrepareData) ProtoMessage() {}
func (x *PrepareData) ProtoReflect() protoreflect.Message {
mi := &file_vtgate_proto_msgTypes[1]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -513,11 +509,9 @@ type ReadAfterWrite struct {
func (x *ReadAfterWrite) Reset() {
*x = ReadAfterWrite{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtgate_proto_msgTypes[2]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtgate_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReadAfterWrite) String() string {
@@ -528,7 +522,7 @@ func (*ReadAfterWrite) ProtoMessage() {}
func (x *ReadAfterWrite) ProtoReflect() protoreflect.Message {
mi := &file_vtgate_proto_msgTypes[2]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -581,11 +575,9 @@ type ExecuteRequest struct {
func (x *ExecuteRequest) Reset() {
*x = ExecuteRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtgate_proto_msgTypes[3]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtgate_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteRequest) String() string {
@@ -596,7 +588,7 @@ func (*ExecuteRequest) ProtoMessage() {}
func (x *ExecuteRequest) ProtoReflect() protoreflect.Message {
mi := &file_vtgate_proto_msgTypes[3]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -650,11 +642,9 @@ type ExecuteResponse struct {
func (x *ExecuteResponse) Reset() {
*x = ExecuteResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtgate_proto_msgTypes[4]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtgate_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteResponse) String() string {
@@ -665,7 +655,7 @@ func (*ExecuteResponse) ProtoMessage() {}
func (x *ExecuteResponse) ProtoReflect() protoreflect.Message {
mi := &file_vtgate_proto_msgTypes[4]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -718,11 +708,9 @@ type ExecuteBatchRequest struct {
func (x *ExecuteBatchRequest) Reset() {
*x = ExecuteBatchRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtgate_proto_msgTypes[5]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtgate_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteBatchRequest) String() string {
@@ -733,7 +721,7 @@ func (*ExecuteBatchRequest) ProtoMessage() {}
func (x *ExecuteBatchRequest) ProtoReflect() protoreflect.Message {
mi := &file_vtgate_proto_msgTypes[5]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -787,11 +775,9 @@ type ExecuteBatchResponse struct {
func (x *ExecuteBatchResponse) Reset() {
*x = ExecuteBatchResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtgate_proto_msgTypes[6]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtgate_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ExecuteBatchResponse) String() string {
@@ -802,7 +788,7 @@ func (*ExecuteBatchResponse) ProtoMessage() {}
func (x *ExecuteBatchResponse) ProtoReflect() protoreflect.Message {
mi := &file_vtgate_proto_msgTypes[6]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -855,11 +841,9 @@ type StreamExecuteRequest struct {
func (x *StreamExecuteRequest) Reset() {
*x = StreamExecuteRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtgate_proto_msgTypes[7]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtgate_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StreamExecuteRequest) String() string {
@@ -870,7 +854,7 @@ func (*StreamExecuteRequest) ProtoMessage() {}
func (x *StreamExecuteRequest) ProtoReflect() protoreflect.Message {
mi := &file_vtgate_proto_msgTypes[7]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -924,11 +908,9 @@ type StreamExecuteResponse struct {
func (x *StreamExecuteResponse) Reset() {
*x = StreamExecuteResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtgate_proto_msgTypes[8]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtgate_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StreamExecuteResponse) String() string {
@@ -939,7 +921,7 @@ func (*StreamExecuteResponse) ProtoMessage() {}
func (x *StreamExecuteResponse) ProtoReflect() protoreflect.Message {
mi := &file_vtgate_proto_msgTypes[8]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -983,11 +965,9 @@ type ResolveTransactionRequest struct {
func (x *ResolveTransactionRequest) Reset() {
*x = ResolveTransactionRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtgate_proto_msgTypes[9]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtgate_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ResolveTransactionRequest) String() string {
@@ -998,7 +978,7 @@ func (*ResolveTransactionRequest) ProtoMessage() {}
func (x *ResolveTransactionRequest) ProtoReflect() protoreflect.Message {
mi := &file_vtgate_proto_msgTypes[9]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1036,11 +1016,9 @@ type ResolveTransactionResponse struct {
func (x *ResolveTransactionResponse) Reset() {
*x = ResolveTransactionResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtgate_proto_msgTypes[10]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtgate_proto_msgTypes[10]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ResolveTransactionResponse) String() string {
@@ -1051,7 +1029,7 @@ func (*ResolveTransactionResponse) ProtoMessage() {}
func (x *ResolveTransactionResponse) ProtoReflect() protoreflect.Message {
mi := &file_vtgate_proto_msgTypes[10]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1090,11 +1068,9 @@ type VStreamFlags struct {
func (x *VStreamFlags) Reset() {
*x = VStreamFlags{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtgate_proto_msgTypes[11]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtgate_proto_msgTypes[11]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VStreamFlags) String() string {
@@ -1105,7 +1081,7 @@ func (*VStreamFlags) ProtoMessage() {}
func (x *VStreamFlags) ProtoReflect() protoreflect.Message {
mi := &file_vtgate_proto_msgTypes[11]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1194,11 +1170,9 @@ type VStreamRequest struct {
func (x *VStreamRequest) Reset() {
*x = VStreamRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtgate_proto_msgTypes[12]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtgate_proto_msgTypes[12]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VStreamRequest) String() string {
@@ -1209,7 +1183,7 @@ func (*VStreamRequest) ProtoMessage() {}
func (x *VStreamRequest) ProtoReflect() protoreflect.Message {
mi := &file_vtgate_proto_msgTypes[12]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1270,11 +1244,9 @@ type VStreamResponse struct {
func (x *VStreamResponse) Reset() {
*x = VStreamResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtgate_proto_msgTypes[13]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtgate_proto_msgTypes[13]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VStreamResponse) String() string {
@@ -1285,7 +1257,7 @@ func (*VStreamResponse) ProtoMessage() {}
func (x *VStreamResponse) ProtoReflect() protoreflect.Message {
mi := &file_vtgate_proto_msgTypes[13]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1324,11 +1296,9 @@ type PrepareRequest struct {
func (x *PrepareRequest) Reset() {
*x = PrepareRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtgate_proto_msgTypes[14]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtgate_proto_msgTypes[14]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *PrepareRequest) String() string {
@@ -1339,7 +1309,7 @@ func (*PrepareRequest) ProtoMessage() {}
func (x *PrepareRequest) ProtoReflect() protoreflect.Message {
mi := &file_vtgate_proto_msgTypes[14]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1393,11 +1363,9 @@ type PrepareResponse struct {
func (x *PrepareResponse) Reset() {
*x = PrepareResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtgate_proto_msgTypes[15]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtgate_proto_msgTypes[15]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *PrepareResponse) String() string {
@@ -1408,7 +1376,7 @@ func (*PrepareResponse) ProtoMessage() {}
func (x *PrepareResponse) ProtoReflect() protoreflect.Message {
mi := &file_vtgate_proto_msgTypes[15]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1459,11 +1427,9 @@ type CloseSessionRequest struct {
func (x *CloseSessionRequest) Reset() {
*x = CloseSessionRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtgate_proto_msgTypes[16]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtgate_proto_msgTypes[16]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CloseSessionRequest) String() string {
@@ -1474,7 +1440,7 @@ func (*CloseSessionRequest) ProtoMessage() {}
func (x *CloseSessionRequest) ProtoReflect() protoreflect.Message {
mi := &file_vtgate_proto_msgTypes[16]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1517,11 +1483,9 @@ type CloseSessionResponse struct {
func (x *CloseSessionResponse) Reset() {
*x = CloseSessionResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtgate_proto_msgTypes[17]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtgate_proto_msgTypes[17]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CloseSessionResponse) String() string {
@@ -1532,7 +1496,7 @@ func (*CloseSessionResponse) ProtoMessage() {}
func (x *CloseSessionResponse) ProtoReflect() protoreflect.Message {
mi := &file_vtgate_proto_msgTypes[17]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1565,15 +1529,15 @@ type Session_ShardSession struct {
// reserved connection if a dedicated connection is needed
ReservedId int64 `protobuf:"varint,4,opt,name=reserved_id,json=reservedId,proto3" json:"reserved_id,omitempty"`
VindexOnly bool `protobuf:"varint,5,opt,name=vindex_only,json=vindexOnly,proto3" json:"vindex_only,omitempty"`
+ // rows_affected tracks if any query has modified the rows.
+ RowsAffected bool `protobuf:"varint,6,opt,name=rows_affected,json=rowsAffected,proto3" json:"rows_affected,omitempty"`
}
func (x *Session_ShardSession) Reset() {
*x = Session_ShardSession{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtgate_proto_msgTypes[18]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtgate_proto_msgTypes[18]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Session_ShardSession) String() string {
@@ -1584,7 +1548,7 @@ func (*Session_ShardSession) ProtoMessage() {}
func (x *Session_ShardSession) ProtoReflect() protoreflect.Message {
mi := &file_vtgate_proto_msgTypes[18]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1634,6 +1598,13 @@ func (x *Session_ShardSession) GetVindexOnly() bool {
return false
}
+func (x *Session_ShardSession) GetRowsAffected() bool {
+ if x != nil {
+ return x.RowsAffected
+ }
+ return false
+}
+
var File_vtgate_proto protoreflect.FileDescriptor
var file_vtgate_proto_rawDesc = []byte{
@@ -1642,7 +1613,7 @@ var file_vtgate_proto_rawDesc = []byte{
0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0b, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0b, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x22, 0xfb, 0x0e, 0x0a, 0x07, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25,
+ 0x74, 0x6f, 0x22, 0xa0, 0x0f, 0x0a, 0x07, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25,
0x0a, 0x0e, 0x69, 0x6e, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61,
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x0e, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x73,
@@ -1728,7 +1699,7 @@ var file_vtgate_proto_rawDesc = []byte{
0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09,
0x52, 0x10, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65,
- 0x78, 0x74, 0x1a, 0xd8, 0x01, 0x0a, 0x0c, 0x53, 0x68, 0x61, 0x72, 0x64, 0x53, 0x65, 0x73, 0x73,
+ 0x78, 0x74, 0x1a, 0xfd, 0x01, 0x0a, 0x0c, 0x53, 0x68, 0x61, 0x72, 0x64, 0x53, 0x65, 0x73, 0x73,
0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67,
0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72,
@@ -1741,195 +1712,197 @@ var file_vtgate_proto_rawDesc = []byte{
0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03,
0x52, 0x0a, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b,
0x76, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28,
- 0x08, 0x52, 0x0a, 0x76, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x6e, 0x6c, 0x79, 0x1a, 0x5c, 0x0a,
- 0x19, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x56, 0x61, 0x72, 0x69,
- 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
- 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x05,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x71, 0x75,
- 0x65, 0x72, 0x79, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65,
- 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x53,
- 0x79, 0x73, 0x74, 0x65, 0x6d, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e,
- 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a,
- 0x3f, 0x0a, 0x11, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x4c, 0x6f, 0x63, 0x6b, 0x45,
- 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
- 0x1a, 0x58, 0x0a, 0x15, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65,
- 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x76,
- 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x76, 0x74, 0x67,
- 0x61, 0x74, 0x65, 0x2e, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52,
- 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04,
- 0x22, 0x5d, 0x0a, 0x0b, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12,
- 0x2b, 0x0a, 0x11, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65,
- 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x72, 0x65, 0x70,
- 0x61, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c,
- 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x05, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22,
- 0xac, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x61, 0x64, 0x41, 0x66, 0x74, 0x65, 0x72, 0x57, 0x72, 0x69,
- 0x74, 0x65, 0x12, 0x31, 0x0a, 0x15, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72,
- 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x67, 0x74, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x12, 0x72, 0x65, 0x61, 0x64, 0x41, 0x66, 0x74, 0x65, 0x72, 0x57, 0x72, 0x69, 0x74,
- 0x65, 0x47, 0x74, 0x69, 0x64, 0x12, 0x37, 0x0a, 0x18, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x61, 0x66,
- 0x74, 0x65, 0x72, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75,
- 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x15, 0x72, 0x65, 0x61, 0x64, 0x41, 0x66, 0x74,
- 0x65, 0x72, 0x57, 0x72, 0x69, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x2e,
- 0x0a, 0x13, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x5f,
- 0x67, 0x74, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x73, 0x65, 0x73,
- 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x47, 0x74, 0x69, 0x64, 0x73, 0x22, 0xaa,
- 0x01, 0x0a, 0x0e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x12, 0x2c, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c,
- 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12,
- 0x29, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f,
- 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x05, 0x71, 0x75,
- 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x71, 0x75, 0x65, 0x72,
- 0x79, 0x2e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75,
- 0x65, 0x72, 0x79, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a,
- 0x04, 0x08, 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x22, 0x8f, 0x01, 0x0a, 0x0f,
- 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
- 0x25, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f,
- 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52,
- 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x29, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f,
- 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65,
- 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f,
- 0x6e, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52,
- 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xb3, 0x01,
- 0x0a, 0x13, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f,
- 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63,
- 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x65,
- 0x72, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65,
- 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2b,
- 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
- 0x11, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x51, 0x75, 0x65,
- 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x04, 0x10,
- 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08,
- 0x07, 0x10, 0x08, 0x22, 0x9a, 0x01, 0x0a, 0x14, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x42,
- 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05,
- 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74,
- 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72,
- 0x72, 0x6f, 0x72, 0x12, 0x29, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65,
- 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x30,
- 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
- 0x16, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x57, 0x69,
- 0x74, 0x68, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
- 0x22, 0xaa, 0x01, 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75,
- 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x09, 0x63, 0x61, 0x6c,
- 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76,
- 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x08, 0x63,
- 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42,
- 0x6f, 0x75, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79,
- 0x12, 0x29, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69,
- 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4a, 0x04, 0x08, 0x03, 0x10,
- 0x04, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x22, 0x6e, 0x0a,
- 0x15, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51,
+ 0x08, 0x52, 0x0a, 0x76, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x23, 0x0a,
+ 0x0d, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x06,
+ 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x72, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74,
+ 0x65, 0x64, 0x1a, 0x5c, 0x0a, 0x19, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65,
+ 0x64, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
+ 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
+ 0x79, 0x12, 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x13, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x56, 0x61, 0x72,
+ 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
+ 0x1a, 0x42, 0x0a, 0x14, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62,
+ 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79,
+ 0x4c, 0x6f, 0x63, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x58, 0x0a, 0x15, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65,
+ 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10,
+ 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79,
+ 0x12, 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x13, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65,
+ 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a,
+ 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x5d, 0x0a, 0x0b, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65,
+ 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x5f,
+ 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x10, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e,
+ 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x43,
+ 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xac, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x61, 0x64, 0x41, 0x66, 0x74,
+ 0x65, 0x72, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x15, 0x72, 0x65, 0x61, 0x64, 0x5f,
+ 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x67, 0x74, 0x69, 0x64,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x72, 0x65, 0x61, 0x64, 0x41, 0x66, 0x74, 0x65,
+ 0x72, 0x57, 0x72, 0x69, 0x74, 0x65, 0x47, 0x74, 0x69, 0x64, 0x12, 0x37, 0x0a, 0x18, 0x72, 0x65,
+ 0x61, 0x64, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x74,
+ 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x15, 0x72, 0x65,
+ 0x61, 0x64, 0x41, 0x66, 0x74, 0x65, 0x72, 0x57, 0x72, 0x69, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65,
+ 0x6f, 0x75, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x74,
+ 0x72, 0x61, 0x63, 0x6b, 0x5f, 0x67, 0x74, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08,
+ 0x52, 0x11, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x47, 0x74,
+ 0x69, 0x64, 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x0e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72,
+ 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70,
+ 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c,
+ 0x65, 0x72, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x53,
+ 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12,
+ 0x27, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11,
+ 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x72,
+ 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04,
+ 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08,
+ 0x22, 0x8f, 0x01, 0x0a, 0x0f, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45,
+ 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x29, 0x0a, 0x07, 0x73,
+ 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76,
+ 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73,
+ 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51,
0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75,
- 0x6c, 0x74, 0x12, 0x29, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x73,
- 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x5d, 0x0a,
- 0x19, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74,
- 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x09, 0x63, 0x61,
+ 0x6c, 0x74, 0x22, 0xb3, 0x01, 0x0a, 0x13, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x42, 0x61,
+ 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x09, 0x63, 0x61,
0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e,
0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x08,
- 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x74, 0x69, 0x64,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69, 0x64, 0x22, 0x1c, 0x0a, 0x1a,
- 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69,
- 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xef, 0x02, 0x0a, 0x0c, 0x56,
- 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x6d,
- 0x69, 0x6e, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x6b, 0x65, 0x77, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x08, 0x52, 0x0c, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x53, 0x6b, 0x65, 0x77,
- 0x12, 0x2d, 0x0a, 0x12, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x5f, 0x69, 0x6e,
- 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x68, 0x65,
- 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12,
- 0x26, 0x0a, 0x0f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x68, 0x61,
- 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x74, 0x6f, 0x70, 0x4f, 0x6e,
- 0x52, 0x65, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73,
- 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x27, 0x0a,
- 0x0f, 0x63, 0x65, 0x6c, 0x6c, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
- 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x65, 0x6c, 0x6c, 0x50, 0x72, 0x65, 0x66,
- 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x3c, 0x0a, 0x1a, 0x73, 0x74, 0x72,
- 0x65, 0x61, 0x6d, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x68, 0x65, 0x61,
- 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x73,
- 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x48, 0x65, 0x61,
- 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x12, 0x43, 0x0a, 0x1e, 0x69, 0x6e, 0x63, 0x6c, 0x75,
- 0x64, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x6a, 0x6f, 0x75, 0x72, 0x6e,
- 0x61, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52,
- 0x1b, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x73, 0x68, 0x61, 0x72, 0x64, 0x4a,
- 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xf6, 0x01, 0x0a,
- 0x0e, 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73,
+ 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x67, 0x61,
+ 0x74, 0x65, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73,
+ 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03,
+ 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75,
+ 0x6e, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73,
+ 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x06,
+ 0x10, 0x07, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x22, 0x9a, 0x01, 0x0a, 0x14, 0x45, 0x78, 0x65,
+ 0x63, 0x75, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x25, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f,
+ 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x29, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73,
+ 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x67, 0x61,
+ 0x74, 0x65, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73,
+ 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03,
+ 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x73,
+ 0x75, 0x6c, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x07, 0x72, 0x65,
+ 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d,
+ 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c,
+ 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72,
+ 0x49, 0x44, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x05,
+ 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x71, 0x75,
+ 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x05,
+ 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x29, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
+ 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e,
+ 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
+ 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05,
+ 0x10, 0x06, 0x22, 0x6e, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63,
+ 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72,
+ 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75,
+ 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52,
+ 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x29, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69,
+ 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74,
+ 0x65, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69,
+ 0x6f, 0x6e, 0x22, 0x5d, 0x0a, 0x19, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x54, 0x72, 0x61,
+ 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
0x2c, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65,
- 0x72, 0x49, 0x44, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x35, 0x0a,
- 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61,
- 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
- 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x05, 0x76, 0x67, 0x74, 0x69, 0x64, 0x18, 0x03, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61,
- 0x2e, 0x56, 0x47, 0x74, 0x69, 0x64, 0x52, 0x05, 0x76, 0x67, 0x74, 0x69, 0x64, 0x12, 0x2a, 0x0a,
- 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e,
- 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65,
- 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x05, 0x66, 0x6c, 0x61,
- 0x67, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74,
- 0x65, 0x2e, 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x05,
- 0x66, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3d, 0x0a, 0x0f, 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e,
- 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f,
- 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76,
- 0x65, 0x6e, 0x74, 0x73, 0x22, 0x92, 0x01, 0x0a, 0x0e, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x65,
- 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72,
- 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x08, 0x63, 0x61, 0x6c,
- 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e,
- 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
- 0x12, 0x27, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x11, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x51, 0x75, 0x65,
- 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x89, 0x01, 0x0a, 0x0f, 0x50, 0x72,
- 0x65, 0x70, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a,
- 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76,
- 0x74, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65,
- 0x72, 0x72, 0x6f, 0x72, 0x12, 0x29, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x53,
- 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12,
- 0x24, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
- 0x0c, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x06, 0x66,
- 0x69, 0x65, 0x6c, 0x64, 0x73, 0x22, 0x6e, 0x0a, 0x13, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x65,
- 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x09,
+ 0x72, 0x49, 0x44, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a,
+ 0x04, 0x64, 0x74, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69,
+ 0x64, 0x22, 0x1c, 0x0a, 0x1a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x54, 0x72, 0x61, 0x6e,
+ 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0xef, 0x02, 0x0a, 0x0c, 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x46, 0x6c, 0x61, 0x67, 0x73,
+ 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x6b, 0x65,
+ 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x69, 0x7a,
+ 0x65, 0x53, 0x6b, 0x65, 0x77, 0x12, 0x2d, 0x0a, 0x12, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65,
+ 0x61, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x0d, 0x52, 0x11, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x49, 0x6e, 0x74, 0x65,
+ 0x72, 0x76, 0x61, 0x6c, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x6f, 0x6e, 0x5f,
+ 0x72, 0x65, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73,
+ 0x74, 0x6f, 0x70, 0x4f, 0x6e, 0x52, 0x65, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05,
+ 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c,
+ 0x6c, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x65, 0x6c, 0x6c, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x65, 0x6c,
+ 0x6c, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x3c,
+ 0x0a, 0x1a, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x18, 0x07, 0x20, 0x01,
+ 0x28, 0x08, 0x52, 0x18, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x12, 0x43, 0x0a, 0x1e,
+ 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f,
+ 0x6a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x08,
+ 0x20, 0x01, 0x28, 0x08, 0x52, 0x1b, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x73,
+ 0x68, 0x61, 0x72, 0x64, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74,
+ 0x73, 0x22, 0xf6, 0x01, 0x0a, 0x0e, 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69,
+ 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e,
+ 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72,
+ 0x49, 0x64, 0x12, 0x35, 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70,
+ 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61,
+ 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x05, 0x76, 0x67, 0x74,
+ 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f,
+ 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x47, 0x74, 0x69, 0x64, 0x52, 0x05, 0x76, 0x67, 0x74,
+ 0x69, 0x64, 0x12, 0x2a, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e,
+ 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x2a,
+ 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e,
+ 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x46, 0x6c,
+ 0x61, 0x67, 0x73, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3d, 0x0a, 0x0f, 0x56, 0x53,
+ 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a,
+ 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e,
+ 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x45, 0x76, 0x65, 0x6e,
+ 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x92, 0x01, 0x0a, 0x0e, 0x50, 0x72,
+ 0x65, 0x70, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x09,
0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44,
0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x07, 0x73, 0x65,
0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74,
0x67, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65,
- 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3d, 0x0a, 0x14, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x65,
- 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a,
- 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76,
- 0x74, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65,
- 0x72, 0x72, 0x6f, 0x72, 0x2a, 0x44, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74,
- 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45,
- 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x49, 0x4e, 0x47,
- 0x4c, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x10, 0x02, 0x12,
- 0x09, 0x0a, 0x05, 0x54, 0x57, 0x4f, 0x50, 0x43, 0x10, 0x03, 0x2a, 0x3c, 0x0a, 0x0b, 0x43, 0x6f,
- 0x6d, 0x6d, 0x69, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x4f, 0x52,
- 0x4d, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x52, 0x45, 0x10, 0x01, 0x12, 0x08,
- 0x0a, 0x04, 0x50, 0x4f, 0x53, 0x54, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x55, 0x54, 0x4f,
- 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x03, 0x42, 0x36, 0x0a, 0x0f, 0x69, 0x6f, 0x2e, 0x76,
- 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x23, 0x76, 0x69, 0x74,
- 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f,
- 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65,
- 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75,
+ 0x6e, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x89,
+ 0x01, 0x0a, 0x0f, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72,
+ 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x29, 0x0a, 0x07, 0x73, 0x65, 0x73,
+ 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x67,
+ 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73,
+ 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03,
+ 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x46, 0x69, 0x65,
+ 0x6c, 0x64, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x22, 0x6e, 0x0a, 0x13, 0x43, 0x6c,
+ 0x6f, 0x73, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x2c, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c,
+ 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12,
+ 0x29, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x67, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f,
+ 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3d, 0x0a, 0x14, 0x43, 0x6c,
+ 0x6f, 0x73, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72,
+ 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2a, 0x44, 0x0a, 0x0f, 0x54, 0x72, 0x61,
+ 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b,
+ 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a,
+ 0x06, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x4d, 0x55, 0x4c,
+ 0x54, 0x49, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x57, 0x4f, 0x50, 0x43, 0x10, 0x03, 0x2a,
+ 0x3c, 0x0a, 0x0b, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x0a,
+ 0x0a, 0x06, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x52,
+ 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x4f, 0x53, 0x54, 0x10, 0x02, 0x12, 0x0e, 0x0a,
+ 0x0a, 0x41, 0x55, 0x54, 0x4f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x03, 0x42, 0x36, 0x0a,
+ 0x0f, 0x69, 0x6f, 0x2e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x5a, 0x23, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65,
+ 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76,
+ 0x74, 0x67, 0x61, 0x74, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -2050,236 +2023,6 @@ func file_vtgate_proto_init() {
if File_vtgate_proto != nil {
return
}
- if !protoimpl.UnsafeEnabled {
- file_vtgate_proto_msgTypes[0].Exporter = func(v any, i int) any {
- switch v := v.(*Session); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtgate_proto_msgTypes[1].Exporter = func(v any, i int) any {
- switch v := v.(*PrepareData); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtgate_proto_msgTypes[2].Exporter = func(v any, i int) any {
- switch v := v.(*ReadAfterWrite); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtgate_proto_msgTypes[3].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtgate_proto_msgTypes[4].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtgate_proto_msgTypes[5].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteBatchRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtgate_proto_msgTypes[6].Exporter = func(v any, i int) any {
- switch v := v.(*ExecuteBatchResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtgate_proto_msgTypes[7].Exporter = func(v any, i int) any {
- switch v := v.(*StreamExecuteRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtgate_proto_msgTypes[8].Exporter = func(v any, i int) any {
- switch v := v.(*StreamExecuteResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtgate_proto_msgTypes[9].Exporter = func(v any, i int) any {
- switch v := v.(*ResolveTransactionRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtgate_proto_msgTypes[10].Exporter = func(v any, i int) any {
- switch v := v.(*ResolveTransactionResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtgate_proto_msgTypes[11].Exporter = func(v any, i int) any {
- switch v := v.(*VStreamFlags); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtgate_proto_msgTypes[12].Exporter = func(v any, i int) any {
- switch v := v.(*VStreamRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtgate_proto_msgTypes[13].Exporter = func(v any, i int) any {
- switch v := v.(*VStreamResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtgate_proto_msgTypes[14].Exporter = func(v any, i int) any {
- switch v := v.(*PrepareRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtgate_proto_msgTypes[15].Exporter = func(v any, i int) any {
- switch v := v.(*PrepareResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtgate_proto_msgTypes[16].Exporter = func(v any, i int) any {
- switch v := v.(*CloseSessionRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtgate_proto_msgTypes[17].Exporter = func(v any, i int) any {
- switch v := v.(*CloseSessionResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtgate_proto_msgTypes[18].Exporter = func(v any, i int) any {
- switch v := v.(*Session_ShardSession); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
diff --git a/go/vt/proto/vtgate/vtgate_vtproto.pb.go b/go/vt/proto/vtgate/vtgate_vtproto.pb.go
index d32eee0428a..5df6dbbffef 100644
--- a/go/vt/proto/vtgate/vtgate_vtproto.pb.go
+++ b/go/vt/proto/vtgate/vtgate_vtproto.pb.go
@@ -1,5 +1,5 @@
// Code generated by protoc-gen-go-vtproto. DO NOT EDIT.
-// protoc-gen-go-vtproto version: v0.6.1-0.20240319094008-0393e58bdf10
+// protoc-gen-go-vtproto version: v0.6.1-0.20241011083415-71c992bc3c87
// source: vtgate.proto
package vtgate
@@ -35,6 +35,7 @@ func (m *Session_ShardSession) CloneVT() *Session_ShardSession {
r.TabletAlias = m.TabletAlias.CloneVT()
r.ReservedId = m.ReservedId
r.VindexOnly = m.VindexOnly
+ r.RowsAffected = m.RowsAffected
if len(m.unknownFields) > 0 {
r.unknownFields = make([]byte, len(m.unknownFields))
copy(r.unknownFields, m.unknownFields)
@@ -513,6 +514,16 @@ func (m *Session_ShardSession) MarshalToSizedBufferVT(dAtA []byte) (int, error)
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
+ if m.RowsAffected {
+ i--
+ if m.RowsAffected {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i--
+ dAtA[i] = 0x30
+ }
if m.VindexOnly {
i--
if m.VindexOnly {
@@ -1903,6 +1914,9 @@ func (m *Session_ShardSession) SizeVT() (n int) {
if m.VindexOnly {
n += 2
}
+ if m.RowsAffected {
+ n += 2
+ }
n += len(m.unknownFields)
return n
}
@@ -2563,6 +2577,26 @@ func (m *Session_ShardSession) UnmarshalVT(dAtA []byte) error {
}
}
m.VindexOnly = bool(v != 0)
+ case 6:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field RowsAffected", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return protohelpers.ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.RowsAffected = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := protohelpers.Skip(dAtA[iNdEx:])
diff --git a/go/vt/proto/vtgateservice/vtgateservice.pb.go b/go/vt/proto/vtgateservice/vtgateservice.pb.go
index 165e3c0bbef..3abab1e7dbf 100644
--- a/go/vt/proto/vtgateservice/vtgateservice.pb.go
+++ b/go/vt/proto/vtgateservice/vtgateservice.pb.go
@@ -18,7 +18,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.34.2
+// protoc-gen-go v1.35.1
// protoc v3.21.3
// source: vtgateservice.proto
diff --git a/go/vt/proto/vtrpc/vtrpc.pb.go b/go/vt/proto/vtrpc/vtrpc.pb.go
index 802e78ab5d3..6f6a204277c 100644
--- a/go/vt/proto/vtrpc/vtrpc.pb.go
+++ b/go/vt/proto/vtrpc/vtrpc.pb.go
@@ -17,7 +17,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.34.2
+// protoc-gen-go v1.35.1
// protoc v3.21.3
// source: vtrpc.proto
@@ -258,11 +258,9 @@ type CallerID struct {
func (x *CallerID) Reset() {
*x = CallerID{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtrpc_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtrpc_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CallerID) String() string {
@@ -273,7 +271,7 @@ func (*CallerID) ProtoMessage() {}
func (x *CallerID) ProtoReflect() protoreflect.Message {
mi := &file_vtrpc_proto_msgTypes[0]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -331,11 +329,9 @@ type RPCError struct {
func (x *RPCError) Reset() {
*x = RPCError{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vtrpc_proto_msgTypes[1]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vtrpc_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RPCError) String() string {
@@ -346,7 +342,7 @@ func (*RPCError) ProtoMessage() {}
func (x *RPCError) ProtoReflect() protoreflect.Message {
mi := &file_vtrpc_proto_msgTypes[1]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -454,32 +450,6 @@ func file_vtrpc_proto_init() {
if File_vtrpc_proto != nil {
return
}
- if !protoimpl.UnsafeEnabled {
- file_vtrpc_proto_msgTypes[0].Exporter = func(v any, i int) any {
- switch v := v.(*CallerID); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vtrpc_proto_msgTypes[1].Exporter = func(v any, i int) any {
- switch v := v.(*RPCError); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
diff --git a/go/vt/proto/vtrpc/vtrpc_vtproto.pb.go b/go/vt/proto/vtrpc/vtrpc_vtproto.pb.go
index b518e3bd372..23bc792e9ad 100644
--- a/go/vt/proto/vtrpc/vtrpc_vtproto.pb.go
+++ b/go/vt/proto/vtrpc/vtrpc_vtproto.pb.go
@@ -1,5 +1,5 @@
// Code generated by protoc-gen-go-vtproto. DO NOT EDIT.
-// protoc-gen-go-vtproto version: v0.6.1-0.20240319094008-0393e58bdf10
+// protoc-gen-go-vtproto version: v0.6.1-0.20241011083415-71c992bc3c87
// source: vtrpc.proto
package vtrpc
diff --git a/go/vt/proto/vttest/vttest.pb.go b/go/vt/proto/vttest/vttest.pb.go
index 8dca7c6f112..ee78cc5231a 100644
--- a/go/vt/proto/vttest/vttest.pb.go
+++ b/go/vt/proto/vttest/vttest.pb.go
@@ -41,7 +41,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.34.2
+// protoc-gen-go v1.35.1
// protoc v3.21.3
// source: vttest.proto
@@ -80,11 +80,9 @@ type Shard struct {
func (x *Shard) Reset() {
*x = Shard{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vttest_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vttest_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Shard) String() string {
@@ -95,7 +93,7 @@ func (*Shard) ProtoMessage() {}
func (x *Shard) ProtoReflect() protoreflect.Message {
mi := &file_vttest_proto_msgTypes[0]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -142,11 +140,9 @@ type Keyspace struct {
func (x *Keyspace) Reset() {
*x = Keyspace{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vttest_proto_msgTypes[1]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vttest_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Keyspace) String() string {
@@ -157,7 +153,7 @@ func (*Keyspace) ProtoMessage() {}
func (x *Keyspace) ProtoReflect() protoreflect.Message {
mi := &file_vttest_proto_msgTypes[1]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -218,11 +214,9 @@ type VTTestTopology struct {
func (x *VTTestTopology) Reset() {
*x = VTTestTopology{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vttest_proto_msgTypes[2]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vttest_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VTTestTopology) String() string {
@@ -233,7 +227,7 @@ func (*VTTestTopology) ProtoMessage() {}
func (x *VTTestTopology) ProtoReflect() protoreflect.Message {
mi := &file_vttest_proto_msgTypes[2]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -351,44 +345,6 @@ func file_vttest_proto_init() {
if File_vttest_proto != nil {
return
}
- if !protoimpl.UnsafeEnabled {
- file_vttest_proto_msgTypes[0].Exporter = func(v any, i int) any {
- switch v := v.(*Shard); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vttest_proto_msgTypes[1].Exporter = func(v any, i int) any {
- switch v := v.(*Keyspace); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vttest_proto_msgTypes[2].Exporter = func(v any, i int) any {
- switch v := v.(*VTTestTopology); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
diff --git a/go/vt/proto/vttest/vttest_vtproto.pb.go b/go/vt/proto/vttest/vttest_vtproto.pb.go
index 84d4b706a7e..b6a887ad41f 100644
--- a/go/vt/proto/vttest/vttest_vtproto.pb.go
+++ b/go/vt/proto/vttest/vttest_vtproto.pb.go
@@ -1,5 +1,5 @@
// Code generated by protoc-gen-go-vtproto. DO NOT EDIT.
-// protoc-gen-go-vtproto version: v0.6.1-0.20240319094008-0393e58bdf10
+// protoc-gen-go-vtproto version: v0.6.1-0.20241011083415-71c992bc3c87
// source: vttest.proto
package vttest
diff --git a/go/vt/proto/vttime/vttime.pb.go b/go/vt/proto/vttime/vttime.pb.go
index af624e5e251..957ca7f0969 100644
--- a/go/vt/proto/vttime/vttime.pb.go
+++ b/go/vt/proto/vttime/vttime.pb.go
@@ -17,7 +17,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.34.2
+// protoc-gen-go v1.35.1
// protoc v3.21.3
// source: vttime.proto
@@ -50,11 +50,9 @@ type Time struct {
func (x *Time) Reset() {
*x = Time{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vttime_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vttime_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Time) String() string {
@@ -65,7 +63,7 @@ func (*Time) ProtoMessage() {}
func (x *Time) ProtoReflect() protoreflect.Message {
mi := &file_vttime_proto_msgTypes[0]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -105,11 +103,9 @@ type Duration struct {
func (x *Duration) Reset() {
*x = Duration{}
- if protoimpl.UnsafeEnabled {
- mi := &file_vttime_proto_msgTypes[1]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_vttime_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *Duration) String() string {
@@ -120,7 +116,7 @@ func (*Duration) ProtoMessage() {}
func (x *Duration) ProtoReflect() protoreflect.Message {
mi := &file_vttime_proto_msgTypes[1]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -197,32 +193,6 @@ func file_vttime_proto_init() {
if File_vttime_proto != nil {
return
}
- if !protoimpl.UnsafeEnabled {
- file_vttime_proto_msgTypes[0].Exporter = func(v any, i int) any {
- switch v := v.(*Time); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_vttime_proto_msgTypes[1].Exporter = func(v any, i int) any {
- switch v := v.(*Duration); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
diff --git a/go/vt/proto/vttime/vttime_vtproto.pb.go b/go/vt/proto/vttime/vttime_vtproto.pb.go
index 16687011e63..08e712e7139 100644
--- a/go/vt/proto/vttime/vttime_vtproto.pb.go
+++ b/go/vt/proto/vttime/vttime_vtproto.pb.go
@@ -1,5 +1,5 @@
// Code generated by protoc-gen-go-vtproto. DO NOT EDIT.
-// protoc-gen-go-vtproto version: v0.6.1-0.20240319094008-0393e58bdf10
+// protoc-gen-go-vtproto version: v0.6.1-0.20241011083415-71c992bc3c87
// source: vttime.proto
package vttime
diff --git a/go/vt/schema/ddl_strategy.go b/go/vt/schema/ddl_strategy.go
index e3b03c3f330..4195c7da863 100644
--- a/go/vt/schema/ddl_strategy.go
+++ b/go/vt/schema/ddl_strategy.go
@@ -38,6 +38,7 @@ const (
skipTopoFlag = "skip-topo" // legacy. Kept for backwards compatibility, but unused
singletonFlag = "singleton"
singletonContextFlag = "singleton-context"
+ singletonTableFlag = "singleton-table"
allowZeroInDateFlag = "allow-zero-in-date"
postponeLaunchFlag = "postpone-launch"
postponeCompletionFlag = "postpone-completion"
@@ -177,6 +178,11 @@ func (setting *DDLStrategySetting) IsSingletonContext() bool {
return setting.hasFlag(singletonContextFlag)
}
+// IsSingletonTable checks if strategy options include --singleton-table
+func (setting *DDLStrategySetting) IsSingletonTable() bool {
+ return setting.hasFlag(singletonTableFlag)
+}
+
// IsAllowZeroInDateFlag checks if strategy options include --allow-zero-in-date
func (setting *DDLStrategySetting) IsAllowZeroInDateFlag() bool {
return setting.hasFlag(allowZeroInDateFlag)
@@ -322,6 +328,7 @@ func (setting *DDLStrategySetting) RuntimeOptions() []string {
case isFlag(opt, skipTopoFlag): // deprecated flag, parsed for backwards compatibility
case isFlag(opt, singletonFlag):
case isFlag(opt, singletonContextFlag):
+ case isFlag(opt, singletonTableFlag):
case isFlag(opt, allowZeroInDateFlag):
case isFlag(opt, postponeLaunchFlag):
case isFlag(opt, postponeCompletionFlag):
diff --git a/go/vt/schema/ddl_strategy_test.go b/go/vt/schema/ddl_strategy_test.go
index c394907b98a..dd8fec45351 100644
--- a/go/vt/schema/ddl_strategy_test.go
+++ b/go/vt/schema/ddl_strategy_test.go
@@ -189,6 +189,8 @@ func TestParseDDLStrategy(t *testing.T) {
options string
isDeclarative bool
isSingleton bool
+ isSingletonContext bool
+ isSingletonTable bool
isPostponeLaunch bool
isPostponeCompletion bool
isInOrderCompletion bool
@@ -258,6 +260,20 @@ func TestParseDDLStrategy(t *testing.T) {
runtimeOptions: "",
isSingleton: true,
},
+ {
+ strategyVariable: "vitess --singleton-context",
+ strategy: DDLStrategyVitess,
+ options: "--singleton-context",
+ runtimeOptions: "",
+ isSingletonContext: true,
+ },
+ {
+ strategyVariable: "vitess --singleton-table",
+ strategy: DDLStrategyVitess,
+ options: "--singleton-table",
+ runtimeOptions: "",
+ isSingletonTable: true,
+ },
{
strategyVariable: "online -postpone-launch",
strategy: DDLStrategyOnline,
@@ -387,6 +403,8 @@ func TestParseDDLStrategy(t *testing.T) {
assert.Equal(t, ts.options, setting.Options)
assert.Equal(t, ts.isDeclarative, setting.IsDeclarative())
assert.Equal(t, ts.isSingleton, setting.IsSingleton())
+ assert.Equal(t, ts.isSingletonContext, setting.IsSingletonContext())
+ assert.Equal(t, ts.isSingletonTable, setting.IsSingletonTable())
assert.Equal(t, ts.isPostponeCompletion, setting.IsPostponeCompletion())
assert.Equal(t, ts.isPostponeLaunch, setting.IsPostponeLaunch())
assert.Equal(t, ts.isAllowConcurrent, setting.IsAllowConcurrent())
diff --git a/go/vt/schema/online_ddl.go b/go/vt/schema/online_ddl.go
index 59363b00889..8de54d98b1e 100644
--- a/go/vt/schema/online_ddl.go
+++ b/go/vt/schema/online_ddl.go
@@ -24,6 +24,7 @@ import (
"regexp"
"strconv"
"strings"
+ "time"
vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc"
"vitess.io/vitess/go/vt/sqlparser"
@@ -116,6 +117,7 @@ type OnlineDDL struct {
Retries int64 `json:"retries,omitempty"`
ReadyToComplete int64 `json:"ready_to_complete,omitempty"`
WasReadyToComplete int64 `json:"was_ready_to_complete,omitempty"`
+ CutOverThreshold time.Duration `json:"cutover_threshold,omitempty"`
}
// ParseOnlineDDLStatement parses the given SQL into a statement and returns the action type of the DDL statement, or error
diff --git a/go/vt/schema/parser.go b/go/vt/schema/parser.go
index 7f5e133e01c..5d5bbc868ff 100644
--- a/go/vt/schema/parser.go
+++ b/go/vt/schema/parser.go
@@ -17,11 +17,15 @@ limitations under the License.
package schema
import (
+ "fmt"
"regexp"
"strings"
"vitess.io/vitess/go/sqltypes"
+ "vitess.io/vitess/go/vt/proto/vtrpc"
"vitess.io/vitess/go/vt/sqlparser"
+ "vitess.io/vitess/go/vt/vtenv"
+ "vitess.io/vitess/go/vt/vterrors"
)
// NormalizedDDLQuery contains a query which is online-ddl -normalized
@@ -49,9 +53,6 @@ var (
// ALTER TABLE tbl something
regexp.MustCompile(alterTableBasicPattern + `([\S]+)\s+(.*$)`),
}
-
- enumValuesRegexp = regexp.MustCompile("(?i)^enum[(](.*)[)]$")
- setValuesRegexp = regexp.MustCompile("(?i)^set[(](.*)[)]$")
)
// ParseAlterTableOptions parses a ALTER ... TABLE... statement into:
@@ -77,91 +78,57 @@ func ParseAlterTableOptions(alterStatement string) (explicitSchema, explicitTabl
return explicitSchema, explicitTable, alterOptions
}
-// ParseEnumValues parses the comma delimited part of an enum column definition
-func ParseEnumValues(enumColumnType string) string {
- if submatch := enumValuesRegexp.FindStringSubmatch(enumColumnType); len(submatch) > 0 {
- return submatch[1]
- }
- return enumColumnType
-}
-
-// ParseSetValues parses the comma delimited part of a set column definition
-func ParseSetValues(setColumnType string) string {
- if submatch := setValuesRegexp.FindStringSubmatch(setColumnType); len(submatch) > 0 {
- return submatch[1]
- }
- return setColumnType
-}
-
// parseEnumOrSetTokens parses the comma delimited part of an enum/set column definition and
// returns the (unquoted) text values
// Expected input: `'x-small','small','medium','large','x-large'`
// Unexpected input: `enum('x-small','small','medium','large','x-large')`
-func parseEnumOrSetTokens(enumOrSetValues string) []string {
- // We need to track both the start of the current value and current
- // position, since there might be quoted quotes inside the value
- // which we need to handle.
- start := 0
- pos := 1
- var tokens []string
- for {
- // If the input does not start with a quote, it's not a valid enum/set definition
- if enumOrSetValues[start] != '\'' {
- return nil
- }
- i := strings.IndexByte(enumOrSetValues[pos:], '\'')
- // If there's no closing quote, we have invalid input
- if i < 0 {
- return nil
- }
- // We're at the end here of the last quoted value,
- // so we add the last token and return them.
- if i == len(enumOrSetValues[pos:])-1 {
- tok, err := sqltypes.DecodeStringSQL(enumOrSetValues[start:])
- if err != nil {
- return nil
- }
- tokens = append(tokens, tok)
- return tokens
- }
- // MySQL double quotes things as escape value, so if we see another
- // single quote, we skip the character and remove it from the input.
- if enumOrSetValues[pos+i+1] == '\'' {
- pos = pos + i + 2
- continue
- }
- // Next value needs to be a comma as a separator, otherwise
- // the data is invalid so we return nil.
- if enumOrSetValues[pos+i+1] != ',' {
- return nil
- }
- // If we're at the end of the input here, it's invalid
- // since we have a trailing comma which is not what MySQL
- // returns.
- if pos+i+1 == len(enumOrSetValues) {
- return nil
- }
-
- tok, err := sqltypes.DecodeStringSQL(enumOrSetValues[start : pos+i+1])
+func parseEnumOrSetTokens(env *vtenv.Environment, enumOrSetValues string) ([]string, error) {
+ // sqlparser cannot directly parse enum/set values, so we create a dummy query to parse it.
+ dummyQuery := fmt.Sprintf("alter table t add column e enum(%s)", enumOrSetValues)
+ ddlStmt, err := env.Parser().ParseStrictDDL(dummyQuery)
+ if err != nil {
+ return nil, err
+ }
+ unexpectedError := func() error {
+ return vterrors.Errorf(vtrpc.Code_INTERNAL, "unexpected error parsing enum values: %v", enumOrSetValues)
+ }
+ alterTable, ok := ddlStmt.(*sqlparser.AlterTable)
+ if !ok {
+ return nil, unexpectedError()
+ }
+ if len(alterTable.AlterOptions) != 1 {
+ return nil, unexpectedError()
+ }
+ addColumn, ok := alterTable.AlterOptions[0].(*sqlparser.AddColumns)
+ if !ok {
+ return nil, unexpectedError()
+ }
+ if len(addColumn.Columns) != 1 {
+ return nil, unexpectedError()
+ }
+ enumValues := addColumn.Columns[0].Type.EnumValues
+ decodedEnumValues := make([]string, len(enumValues))
+ for i := range enumValues {
+ val, err := sqltypes.DecodeStringSQL(enumValues[i])
if err != nil {
- return nil
+ return nil, err
}
-
- tokens = append(tokens, tok)
- // We add 2 to the position to skip the closing quote & comma
- start = pos + i + 2
- pos = start + 1
+ decodedEnumValues[i] = val
}
+ return decodedEnumValues, nil
}
// ParseEnumOrSetTokensMap parses the comma delimited part of an enum column definition
// and returns a map where [1] is the first token, and [] is the last.
-func ParseEnumOrSetTokensMap(enumOrSetValues string) map[int]string {
- tokens := parseEnumOrSetTokens(enumOrSetValues)
+func ParseEnumOrSetTokensMap(env *vtenv.Environment, enumOrSetValues string) (map[int]string, error) {
+ tokens, err := parseEnumOrSetTokens(env, enumOrSetValues)
+ if err != nil {
+ return nil, err
+ }
tokensMap := map[int]string{}
for i, token := range tokens {
// SET and ENUM values are 1 indexed.
tokensMap[i+1] = token
}
- return tokensMap
+ return tokensMap, nil
}
diff --git a/go/vt/schema/parser_test.go b/go/vt/schema/parser_test.go
index dc696fd3d1d..e70bcfa68c5 100644
--- a/go/vt/schema/parser_test.go
+++ b/go/vt/schema/parser_test.go
@@ -20,6 +20,9 @@ import (
"testing"
"github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+
+ "vitess.io/vitess/go/vt/vtenv"
)
func TestParseAlterTableOptions(t *testing.T) {
@@ -48,108 +51,50 @@ func TestParseAlterTableOptions(t *testing.T) {
}
}
-func TestParseEnumValues(t *testing.T) {
- {
- inputs := []string{
- `enum('x-small','small','medium','large','x-large')`,
- `ENUM('x-small','small','medium','large','x-large')`,
- `'x-small','small','medium','large','x-large'`,
- }
- for _, input := range inputs {
- enumValues := ParseEnumValues(input)
- assert.Equal(t, `'x-small','small','medium','large','x-large'`, enumValues)
- }
- }
- {
- inputs := []string{
- ``,
- `abc`,
- `func('x-small','small','medium','large','x-large')`,
- `set('x-small','small','medium','large','x-large')`,
- }
- for _, input := range inputs {
- enumValues := ParseEnumValues(input)
- assert.Equal(t, input, enumValues)
- }
- }
-
- {
- inputs := []string{
- ``,
- `abc`,
- `func('x small','small','medium','large','x large')`,
- `set('x small','small','medium','large','x large')`,
- }
- for _, input := range inputs {
- enumValues := ParseEnumValues(input)
- assert.Equal(t, input, enumValues)
- }
- }
-}
-
-func TestParseSetValues(t *testing.T) {
- {
- inputs := []string{
- `set('x-small','small','medium','large','x-large')`,
- `SET('x-small','small','medium','large','x-large')`,
- `'x-small','small','medium','large','x-large'`,
- }
- for _, input := range inputs {
- setValues := ParseSetValues(input)
- assert.Equal(t, `'x-small','small','medium','large','x-large'`, setValues)
- }
- }
- {
- inputs := []string{
- ``,
- `abc`,
- `func('x-small','small','medium','large','x-large')`,
- `enum('x-small','small','medium','large','x-large')`,
- `ENUM('x-small','small','medium','large','x-large')`,
- }
- for _, input := range inputs {
- setValues := ParseSetValues(input)
- assert.Equal(t, input, setValues)
- }
- }
-}
-
func TestParseEnumTokens(t *testing.T) {
+ env := vtenv.NewTestEnv()
{
input := `'x-small','small','medium','large','x-large'`
- enumTokens := parseEnumOrSetTokens(input)
+ enumTokens, err := parseEnumOrSetTokens(env, input)
+ require.NoError(t, err)
expect := []string{"x-small", "small", "medium", "large", "x-large"}
assert.Equal(t, expect, enumTokens)
}
{
input := `'x small','small','medium','large','x large'`
- enumTokens := parseEnumOrSetTokens(input)
+ enumTokens, err := parseEnumOrSetTokens(env, input)
+ require.NoError(t, err)
expect := []string{"x small", "small", "medium", "large", "x large"}
assert.Equal(t, expect, enumTokens)
}
{
input := `'with '' quote','and \n newline'`
- enumTokens := parseEnumOrSetTokens(input)
+ enumTokens, err := parseEnumOrSetTokens(env, input)
+ require.NoError(t, err)
expect := []string{"with ' quote", "and \n newline"}
assert.Equal(t, expect, enumTokens)
}
{
input := `enum('x-small','small','medium','large','x-large')`
- enumTokens := parseEnumOrSetTokens(input)
+ enumTokens, err := parseEnumOrSetTokens(env, input)
+ assert.Error(t, err)
assert.Nil(t, enumTokens)
}
{
input := `set('x-small','small','medium','large','x-large')`
- enumTokens := parseEnumOrSetTokens(input)
+ enumTokens, err := parseEnumOrSetTokens(env, input)
+ assert.Error(t, err)
assert.Nil(t, enumTokens)
}
}
func TestParseEnumTokensMap(t *testing.T) {
+ env := vtenv.NewTestEnv()
{
input := `'x-small','small','medium','large','x-large'`
- enumTokensMap := ParseEnumOrSetTokensMap(input)
+ enumTokensMap, err := ParseEnumOrSetTokensMap(env, input)
+ require.NoError(t, err)
expect := map[int]string{
1: "x-small",
2: "small",
@@ -165,9 +110,23 @@ func TestParseEnumTokensMap(t *testing.T) {
`set('x-small','small','medium','large','x-large')`,
}
for _, input := range inputs {
- enumTokensMap := ParseEnumOrSetTokensMap(input)
- expect := map[int]string{}
- assert.Equal(t, expect, enumTokensMap)
+ enumTokensMap, err := ParseEnumOrSetTokensMap(env, input)
+ assert.Error(t, err)
+ assert.Nil(t, enumTokensMap)
+ }
+ }
+ {
+ input := `'x-small','small','med''ium','large','x-large'`
+
+ enumTokensMap, err := ParseEnumOrSetTokensMap(env, input)
+ require.NoError(t, err)
+ expect := map[int]string{
+ 1: "x-small",
+ 2: "small",
+ 3: "med'ium",
+ 4: "large",
+ 5: "x-large",
}
+ assert.Equal(t, expect, enumTokensMap)
}
}
diff --git a/go/vt/schemadiff/schema_diff.go b/go/vt/schemadiff/schema_diff.go
index 1c161ab56bf..158d134f520 100644
--- a/go/vt/schemadiff/schema_diff.go
+++ b/go/vt/schemadiff/schema_diff.go
@@ -280,8 +280,8 @@ func (d *SchemaDiff) UnorderedDiffs() []EntityDiff {
return d.diffs
}
-// AllDependenciess returns all known dependencies
-func (d *SchemaDiff) AllDependenciess() (deps []*DiffDependency) {
+// AllDependencies returns all known dependencies
+func (d *SchemaDiff) AllDependencies() (deps []*DiffDependency) {
for _, dep := range d.dependencies {
deps = append(deps, dep)
}
diff --git a/go/vt/schemadiff/schema_diff_test.go b/go/vt/schemadiff/schema_diff_test.go
index 8088cc896ed..b39166451b2 100644
--- a/go/vt/schemadiff/schema_diff_test.go
+++ b/go/vt/schemadiff/schema_diff_test.go
@@ -1272,7 +1272,7 @@ func TestSchemaDiff(t *testing.T) {
}
assert.Equalf(t, tc.expectDiffs, len(allDiffs), "found diffs: %v", allDiffsStatements)
- deps := schemaDiff.AllDependenciess()
+ deps := schemaDiff.AllDependencies()
depsKeys := []string{}
for _, dep := range deps {
depsKeys = append(depsKeys, dep.hashKey())
diff --git a/go/vt/schemadiff/table.go b/go/vt/schemadiff/table.go
index c429ab15ba4..e002ef18e15 100644
--- a/go/vt/schemadiff/table.go
+++ b/go/vt/schemadiff/table.go
@@ -1711,8 +1711,10 @@ func (c *CreateTableEntity) diffKeys(alterTable *sqlparser.AlterTable,
}
}
}
- for _, stmt := range dropKeyStatements {
- alterTable.AlterOptions = append(alterTable.AlterOptions, stmt)
+ for _, t1Key := range t1Keys {
+ if stmt, ok := dropKeyStatements[t1Key.Info.Name.String()]; ok {
+ alterTable.AlterOptions = append(alterTable.AlterOptions, stmt)
+ }
}
return superfluousFulltextKeys
}
diff --git a/go/vt/schemadiff/table_test.go b/go/vt/schemadiff/table_test.go
index 6526c5ae118..84c40d769c2 100644
--- a/go/vt/schemadiff/table_test.go
+++ b/go/vt/schemadiff/table_test.go
@@ -733,6 +733,24 @@ func TestCreateTableDiff(t *testing.T) {
"- KEY `i_idx` (`i`)",
},
},
+ {
+ name: "multiple dropped keys and columns",
+ from: "create table t1 (`id` int, i1 int, i2 int, i3 int, primary key (id), key k1(i1), key k2(i2), key k3(i1), key k4(i2), key k5(i1), key k6(i2))",
+ to: "create table t1 (`id` int, primary key (id))",
+ diff: "alter table t1 drop key k1, drop key k2, drop key k3, drop key k4, drop key k5, drop key k6, drop column i1, drop column i2, drop column i3",
+ cdiff: "ALTER TABLE `t1` DROP KEY `k1`, DROP KEY `k2`, DROP KEY `k3`, DROP KEY `k4`, DROP KEY `k5`, DROP KEY `k6`, DROP COLUMN `i1`, DROP COLUMN `i2`, DROP COLUMN `i3`",
+ textdiffs: []string{
+ "- KEY `k1` (`i1`)",
+ "- KEY `k2` (`i2`)",
+ "- KEY `k3` (`i1`)",
+ "- KEY `k4` (`i2`)",
+ "- KEY `k5` (`i1`)",
+ "- KEY `k6` (`i2`)",
+ "- `i1` int,",
+ "- `i2` int,",
+ "- `i3` int,",
+ },
+ },
{
name: "modified key",
from: "create table t1 (`id` int primary key, i int, key i_idx(i))",
diff --git a/go/vt/schemamanager/local_controller.go b/go/vt/schemamanager/local_controller.go
index b95bb1398bf..92b7afa83c0 100644
--- a/go/vt/schemamanager/local_controller.go
+++ b/go/vt/schemamanager/local_controller.go
@@ -208,8 +208,10 @@ func (controller *LocalController) writeToLogDir(ctx context.Context, result *Ex
rowsReturned := uint64(0)
rowsAffected := uint64(0)
for _, queryResult := range result.SuccessShards {
- rowsReturned += uint64(len(queryResult.Result.Rows))
- rowsAffected += queryResult.Result.RowsAffected
+ for _, result := range queryResult.Results {
+ rowsReturned += uint64(len(result.Rows))
+ rowsAffected += result.RowsAffected
+ }
}
logFile.WriteString(fmt.Sprintf("-- Rows returned: %d\n", rowsReturned))
logFile.WriteString(fmt.Sprintf("-- Rows affected: %d\n", rowsAffected))
diff --git a/go/vt/schemamanager/local_controller_test.go b/go/vt/schemamanager/local_controller_test.go
index 1784a76e133..74d66033c63 100644
--- a/go/vt/schemamanager/local_controller_test.go
+++ b/go/vt/schemamanager/local_controller_test.go
@@ -138,8 +138,8 @@ func TestLocalControllerSchemaChange(t *testing.T) {
result := &ExecuteResult{
Sqls: []string{"create table test_table (id int)"},
SuccessShards: []ShardResult{{
- Shard: "0",
- Result: &querypb.QueryResult{},
+ Shard: "0",
+ Results: []*querypb.QueryResult{{}},
}},
}
logPath := path.Join(controller.logDir, controller.sqlFilename)
diff --git a/go/vt/schemamanager/schemamanager.go b/go/vt/schemamanager/schemamanager.go
index 1ccc52d6a6d..8a695a1164e 100644
--- a/go/vt/schemamanager/schemamanager.go
+++ b/go/vt/schemamanager/schemamanager.go
@@ -85,8 +85,8 @@ type ShardWithError struct {
// ShardResult contains sql execute information on a particular shard
type ShardResult struct {
- Shard string
- Result *querypb.QueryResult
+ Shard string
+ Results []*querypb.QueryResult
// Position is a replication position that is guaranteed to be after the
// schema change was applied. It can be used to wait for replicas to receive
// the schema change via replication.
diff --git a/go/vt/schemamanager/schemamanager_test.go b/go/vt/schemamanager/schemamanager_test.go
index 129600d0527..76b638960fe 100644
--- a/go/vt/schemamanager/schemamanager_test.go
+++ b/go/vt/schemamanager/schemamanager_test.go
@@ -293,6 +293,13 @@ func (client *fakeTabletManagerClient) ExecuteFetchAsDba(ctx context.Context, ta
return client.TabletManagerClient.ExecuteFetchAsDba(ctx, tablet, usePool, req)
}
+func (client *fakeTabletManagerClient) ExecuteMultiFetchAsDba(ctx context.Context, tablet *topodatapb.Tablet, usePool bool, req *tabletmanagerdatapb.ExecuteMultiFetchAsDbaRequest) ([]*querypb.QueryResult, error) {
+ if client.EnableExecuteFetchAsDbaError {
+ return nil, fmt.Errorf("ExecuteMultiFetchAsDba occur an unknown error")
+ }
+ return client.TabletManagerClient.ExecuteMultiFetchAsDba(ctx, tablet, usePool, req)
+}
+
// newFakeTopo returns a topo with:
// - a keyspace named 'test_keyspace'.
// - 3 shards named '1', '2', '3'.
diff --git a/go/vt/schemamanager/tablet_executor.go b/go/vt/schemamanager/tablet_executor.go
index 68270e0babc..60e86bf7faf 100644
--- a/go/vt/schemamanager/tablet_executor.go
+++ b/go/vt/schemamanager/tablet_executor.go
@@ -249,14 +249,12 @@ func (exec *TabletExecutor) executeAlterMigrationThrottle(ctx context.Context, a
throttlerConfig.ThrottledApps = make(map[string]*topodatapb.ThrottledAppRule)
}
if req.ThrottledApp != nil && req.ThrottledApp.Name != "" {
- // TODO(shlomi) in v22: replace the following line with the commented out block
- throttlerConfig.ThrottledApps[req.ThrottledApp.Name] = req.ThrottledApp
- // timeNow := time.Now()
- // if protoutil.TimeFromProto(req.ThrottledApp.ExpiresAt).After(timeNow) {
- // throttlerConfig.ThrottledApps[req.ThrottledApp.Name] = req.ThrottledApp
- // } else {
- // delete(throttlerConfig.ThrottledApps, req.ThrottledApp.Name)
- // }
+ timeNow := time.Now()
+ if protoutil.TimeFromProto(req.ThrottledApp.ExpiresAt).After(timeNow) {
+ throttlerConfig.ThrottledApps[req.ThrottledApp.Name] = req.ThrottledApp
+ } else {
+ delete(throttlerConfig.ThrottledApps, req.ThrottledApp.Name)
+ }
}
return throttlerConfig
@@ -572,13 +570,15 @@ func (exec *TabletExecutor) executeOneTablet(
errChan chan ShardWithError,
successChan chan ShardResult) {
- var result *querypb.QueryResult
+ var results []*querypb.QueryResult
var err error
if viaQueryService {
- result, err = exec.tmc.ExecuteQuery(ctx, tablet, &tabletmanagerdatapb.ExecuteQueryRequest{
+ result, reserr := exec.tmc.ExecuteQuery(ctx, tablet, &tabletmanagerdatapb.ExecuteQueryRequest{
Query: []byte(sql),
MaxRows: 10,
})
+ results = []*querypb.QueryResult{result}
+ err = reserr
} else {
if exec.ddlStrategySetting != nil && exec.ddlStrategySetting.IsAllowZeroInDateFlag() {
// --allow-zero-in-date Applies to DDLs
@@ -588,14 +588,14 @@ func (exec *TabletExecutor) executeOneTablet(
return
}
}
- request := &tabletmanagerdatapb.ExecuteFetchAsDbaRequest{
- Query: []byte(sql),
+ request := &tabletmanagerdatapb.ExecuteMultiFetchAsDbaRequest{
+ Sql: []byte(sql),
MaxRows: 10,
}
if exec.ddlStrategySetting != nil && exec.ddlStrategySetting.IsAllowForeignKeysFlag() {
request.DisableForeignKeyChecks = true
}
- result, err = exec.tmc.ExecuteFetchAsDba(ctx, tablet, false, request)
+ results, err = exec.tmc.ExecuteMultiFetchAsDba(ctx, tablet, false, request)
}
if err != nil {
@@ -614,7 +614,7 @@ func (exec *TabletExecutor) executeOneTablet(
}
successChan <- ShardResult{
Shard: tablet.Shard,
- Result: result,
+ Results: results,
Position: pos,
}
}
diff --git a/go/vt/servenv/grpc_codec.go b/go/vt/servenv/grpc_codec.go
index 7d2b6364d3b..35441feb261 100644
--- a/go/vt/servenv/grpc_codec.go
+++ b/go/vt/servenv/grpc_codec.go
@@ -17,52 +17,64 @@ limitations under the License.
package servenv
import (
- "fmt"
-
- // use the original golang/protobuf package we can continue serializing
- // messages from our dependencies, particularly from etcd
- "github.com/golang/protobuf/proto" //nolint
-
"google.golang.org/grpc/encoding"
+ "google.golang.org/grpc/mem"
+
+ // Guarantee that the built-in proto is called registered before this one
+ // so that it can be replaced.
_ "google.golang.org/grpc/encoding/proto" // nolint:revive
)
// Name is the name registered for the proto compressor.
const Name = "proto"
-type vtprotoCodec struct{}
-
type vtprotoMessage interface {
- MarshalVT() ([]byte, error)
+ MarshalToSizedBufferVT(data []byte) (int, error)
UnmarshalVT([]byte) error
+ SizeVT() int
}
-func (vtprotoCodec) Marshal(v any) ([]byte, error) {
- switch v := v.(type) {
- case vtprotoMessage:
- return v.MarshalVT()
- case proto.Message:
- return proto.Marshal(v)
- default:
- return nil, fmt.Errorf("failed to marshal, message is %T, must satisfy the vtprotoMessage interface or want proto.Message", v)
- }
+type Codec struct {
+ fallback encoding.CodecV2
}
-func (vtprotoCodec) Unmarshal(data []byte, v any) error {
- switch v := v.(type) {
- case vtprotoMessage:
- return v.UnmarshalVT(data)
- case proto.Message:
- return proto.Unmarshal(data, v)
- default:
- return fmt.Errorf("failed to unmarshal, message is %T, must satisfy the vtprotoMessage interface or want proto.Message", v)
+func (Codec) Name() string { return Name }
+
+var defaultBufferPool = mem.DefaultBufferPool()
+
+func (c *Codec) Marshal(v any) (mem.BufferSlice, error) {
+ if m, ok := v.(vtprotoMessage); ok {
+ size := m.SizeVT()
+ if mem.IsBelowBufferPoolingThreshold(size) {
+ buf := make([]byte, size)
+ if _, err := m.MarshalToSizedBufferVT(buf[:size]); err != nil {
+ return nil, err
+ }
+ return mem.BufferSlice{mem.SliceBuffer(buf)}, nil
+ }
+ buf := defaultBufferPool.Get(size)
+ if _, err := m.MarshalToSizedBufferVT((*buf)[:size]); err != nil {
+ defaultBufferPool.Put(buf)
+ return nil, err
+ }
+ return mem.BufferSlice{mem.NewBuffer(buf, defaultBufferPool)}, nil
}
+
+ return c.fallback.Marshal(v)
}
-func (vtprotoCodec) Name() string {
- return Name
+func (c *Codec) Unmarshal(data mem.BufferSlice, v any) error {
+ if m, ok := v.(vtprotoMessage); ok {
+ buf := data.MaterializeToBuffer(defaultBufferPool)
+ defer buf.Free()
+ return m.UnmarshalVT(buf.ReadOnlyData())
+ }
+
+ return c.fallback.Unmarshal(data, v)
}
func init() {
- encoding.RegisterCodec(vtprotoCodec{})
+ encoding.RegisterCodecV2(&Codec{
+ fallback: encoding.GetCodecV2("proto"),
+ })
}
diff --git a/go/vt/servenv/grpc_server.go b/go/vt/servenv/grpc_server.go
index 96fe3c25ea9..8d30ee6d253 100644
--- a/go/vt/servenv/grpc_server.go
+++ b/go/vt/servenv/grpc_server.go
@@ -169,6 +169,11 @@ func GRPCPort() int {
return gRPCPort
}
+// GRPCPort returns the value of the `--grpc_bind_address` flag.
+func GRPCBindAddress() string {
+ return gRPCBindAddress
+}
+
// isGRPCEnabled returns true if gRPC server is set
func isGRPCEnabled() bool {
if gRPCPort != 0 {
diff --git a/go/vt/servenv/servenv.go b/go/vt/servenv/servenv.go
index 4aa9818eb7d..22bf3523dfc 100644
--- a/go/vt/servenv/servenv.go
+++ b/go/vt/servenv/servenv.go
@@ -370,6 +370,14 @@ func moveFlags(name string, fs *pflag.FlagSet) {
// functions.
func CobraPreRunE(cmd *cobra.Command, args []string) error {
_flag.TrickGlog()
+ // Register logging on config file change.
+ ch := make(chan struct{})
+ viperutil.NotifyConfigReload(ch)
+ go func() {
+ for range ch {
+ log.Infof("Change in configuration - %v", viperdebug.AllSettings())
+ }
+ }()
watchCancel, err := viperutil.LoadConfig()
if err != nil {
@@ -377,6 +385,10 @@ func CobraPreRunE(cmd *cobra.Command, args []string) error {
}
OnTerm(watchCancel)
+ // Register a function to be called on termination that closes the channel.
+ // This is done after the watchCancel has registered to ensure that we don't end up
+ // sending on a closed channel.
+ OnTerm(func() { close(ch) })
HTTPHandleFunc("/debug/config", viperdebug.HandlerFunc)
logutil.PurgeLogs()
diff --git a/go/vt/servenv/version.go b/go/vt/servenv/version.go
index e02716f3d4a..072938bfdf2 100644
--- a/go/vt/servenv/version.go
+++ b/go/vt/servenv/version.go
@@ -19,4 +19,4 @@ package servenv
// DO NOT EDIT
// THIS FILE IS AUTO-GENERATED DURING NEW RELEASES BY THE VITESS-RELEASER
-const versionName = "21.0.0-SNAPSHOT"
+const versionName = "22.0.0-SNAPSHOT"
diff --git a/go/vt/sidecardb/schema/onlineddl/schema_migrations.sql b/go/vt/sidecardb/schema/onlineddl/schema_migrations.sql
index 85d87edefc2..3e2a72d6ae5 100644
--- a/go/vt/sidecardb/schema/onlineddl/schema_migrations.sql
+++ b/go/vt/sidecardb/schema/onlineddl/schema_migrations.sql
@@ -45,6 +45,7 @@ CREATE TABLE IF NOT EXISTS schema_migrations
`message_timestamp` timestamp(6) NULL DEFAULT NULL,
`eta_seconds` bigint NOT NULL DEFAULT '-1',
`rows_copied` bigint unsigned NOT NULL DEFAULT '0',
+ `vreplication_lag_seconds` bigint unsigned NOT NULL DEFAULT '0',
`table_rows` bigint NOT NULL DEFAULT '0',
`added_unique_keys` int unsigned NOT NULL DEFAULT '0',
`removed_unique_keys` int unsigned NOT NULL DEFAULT '0',
@@ -72,9 +73,11 @@ CREATE TABLE IF NOT EXISTS schema_migrations
`is_immediate_operation` tinyint unsigned NOT NULL DEFAULT '0',
`reviewed_timestamp` timestamp NULL DEFAULT NULL,
`ready_to_complete_timestamp` timestamp NULL DEFAULT NULL,
+ `shadow_analyzed_timestamp` timestamp NULL DEFAULT NULL,
`removed_foreign_key_names` text NOT NULL,
`last_cutover_attempt_timestamp` timestamp NULL DEFAULT NULL,
`force_cutover` tinyint unsigned NOT NULL DEFAULT '0',
+ `cutover_threshold_seconds` int unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `uuid_idx` (`migration_uuid`),
KEY `keyspace_shard_idx` (`keyspace`(64), `shard`(64)),
diff --git a/go/vt/sqlparser/analyzer.go b/go/vt/sqlparser/analyzer.go
index ea0773d99cc..98b7677a1f3 100644
--- a/go/vt/sqlparser/analyzer.go
+++ b/go/vt/sqlparser/analyzer.go
@@ -137,7 +137,7 @@ func ASTToStatementType(stmt Statement) StatementType {
// CanNormalize takes Statement and returns if the statement can be normalized.
func CanNormalize(stmt Statement) bool {
switch stmt.(type) {
- case *Select, *Union, *Insert, *Update, *Delete, *Set, *CallProc, *Stream: // TODO: we could merge this logic into ASTrewriter
+ case *Select, *Union, *Insert, *Update, *Delete, *Set, *CallProc, *Stream, *VExplainStmt: // TODO: we could merge this logic into ASTrewriter
return true
}
return false
diff --git a/go/vt/sqlparser/ast.go b/go/vt/sqlparser/ast.go
index 3d4f56ef628..92c67d55999 100644
--- a/go/vt/sqlparser/ast.go
+++ b/go/vt/sqlparser/ast.go
@@ -491,11 +491,12 @@ type (
// AlterMigration represents a ALTER VITESS_MIGRATION statement
AlterMigration struct {
- Type AlterMigrationType
- UUID string
- Expire string
- Ratio *Literal
- Shards string
+ Type AlterMigrationType
+ UUID string
+ Expire string
+ Ratio *Literal
+ Threshold string
+ Shards string
}
// AlterTable represents a ALTER TABLE statement.
diff --git a/go/vt/sqlparser/ast_equals.go b/go/vt/sqlparser/ast_equals.go
index 502a4a78d88..c4c0b34c271 100644
--- a/go/vt/sqlparser/ast_equals.go
+++ b/go/vt/sqlparser/ast_equals.go
@@ -1790,6 +1790,7 @@ func (cmp *Comparator) RefOfAlterMigration(a, b *AlterMigration) bool {
}
return a.UUID == b.UUID &&
a.Expire == b.Expire &&
+ a.Threshold == b.Threshold &&
a.Shards == b.Shards &&
a.Type == b.Type &&
cmp.RefOfLiteral(a.Ratio, b.Ratio)
diff --git a/go/vt/sqlparser/ast_format.go b/go/vt/sqlparser/ast_format.go
index c8daabcf4e0..dff17911d8e 100644
--- a/go/vt/sqlparser/ast_format.go
+++ b/go/vt/sqlparser/ast_format.go
@@ -322,8 +322,13 @@ func (node *AlterMigration) Format(buf *TrackedBuffer) {
alterType = "force_cutover"
case ForceCutOverAllMigrationType:
alterType = "force_cutover all"
+ case SetCutOverThresholdMigrationType:
+ alterType = "cutover_threshold"
}
buf.astPrintf(node, " %#s", alterType)
+ if node.Threshold != "" {
+ buf.astPrintf(node, " '%#s'", node.Threshold)
+ }
if node.Expire != "" {
buf.astPrintf(node, " expire '%#s'", node.Expire)
}
@@ -1357,7 +1362,7 @@ func (node *AssignmentExpr) Format(buf *TrackedBuffer) {
func (node *Literal) Format(buf *TrackedBuffer) {
switch node.Type {
case StrVal:
- sqltypes.MakeTrusted(sqltypes.VarBinary, node.Bytes()).EncodeSQL(buf)
+ sqltypes.MakeTrusted(sqltypes.VarChar, node.Bytes()).EncodeSQL(buf)
case IntVal, FloatVal, DecimalVal, HexNum, BitNum:
buf.astPrintf(node, "%#s", node.Val)
case HexVal:
diff --git a/go/vt/sqlparser/ast_format_fast.go b/go/vt/sqlparser/ast_format_fast.go
index 07762bb8447..9855c70a21d 100644
--- a/go/vt/sqlparser/ast_format_fast.go
+++ b/go/vt/sqlparser/ast_format_fast.go
@@ -448,9 +448,16 @@ func (node *AlterMigration) FormatFast(buf *TrackedBuffer) {
alterType = "force_cutover"
case ForceCutOverAllMigrationType:
alterType = "force_cutover all"
+ case SetCutOverThresholdMigrationType:
+ alterType = "cutover_threshold"
}
buf.WriteByte(' ')
buf.WriteString(alterType)
+ if node.Threshold != "" {
+ buf.WriteString(" '")
+ buf.WriteString(node.Threshold)
+ buf.WriteByte('\'')
+ }
if node.Expire != "" {
buf.WriteString(" expire '")
buf.WriteString(node.Expire)
@@ -1768,7 +1775,7 @@ func (node *AssignmentExpr) FormatFast(buf *TrackedBuffer) {
func (node *Literal) FormatFast(buf *TrackedBuffer) {
switch node.Type {
case StrVal:
- sqltypes.MakeTrusted(sqltypes.VarBinary, node.Bytes()).EncodeSQL(buf)
+ sqltypes.MakeTrusted(sqltypes.VarChar, node.Bytes()).EncodeSQL(buf)
case IntVal, FloatVal, DecimalVal, HexNum, BitNum:
buf.WriteString(node.Val)
case HexVal:
diff --git a/go/vt/sqlparser/ast_funcs.go b/go/vt/sqlparser/ast_funcs.go
index 372cf25562c..836c824010d 100644
--- a/go/vt/sqlparser/ast_funcs.go
+++ b/go/vt/sqlparser/ast_funcs.go
@@ -517,6 +517,70 @@ func (node *ComparisonExpr) IsImpossible() bool {
return false
}
+func (op ComparisonExprOperator) Inverse() ComparisonExprOperator {
+ switch op {
+ case EqualOp:
+ return NotEqualOp
+ case LessThanOp:
+ return GreaterEqualOp
+ case GreaterThanOp:
+ return LessEqualOp
+ case LessEqualOp:
+ return GreaterThanOp
+ case GreaterEqualOp:
+ return LessThanOp
+ case NotEqualOp:
+ return EqualOp
+ case NullSafeEqualOp:
+ return NotEqualOp
+ case InOp:
+ return NotInOp
+ case NotInOp:
+ return InOp
+ case LikeOp:
+ return NotLikeOp
+ case NotLikeOp:
+ return LikeOp
+ case RegexpOp:
+ return NotRegexpOp
+ case NotRegexpOp:
+ return RegexpOp
+ }
+ panic("unreachable")
+}
+
+// SwitchSides returns the reversed comparison operator if applicable, along with a boolean indicating success.
+// For symmetric operators like '=', '!=', and '<=>', it returns the same operator and true.
+// For directional comparison operators ('<', '>', '<=', '>='), it returns the opposite operator and true.
+// For operators that imply directionality or cannot be logically reversed (such as 'IN', 'LIKE', 'REGEXP'),
+// it returns the original operator and false, indicating that switching sides is not valid.
+func (op ComparisonExprOperator) SwitchSides() (ComparisonExprOperator, bool) {
+ switch op {
+ case EqualOp, NotEqualOp, NullSafeEqualOp:
+ // These operators are symmetric, so switching sides has no effect
+ return op, true
+ case LessThanOp:
+ return GreaterThanOp, true
+ case GreaterThanOp:
+ return LessThanOp, true
+ case LessEqualOp:
+ return GreaterEqualOp, true
+ case GreaterEqualOp:
+ return LessEqualOp, true
+ default:
+ return op, false
+ }
+}
+
+func (op ComparisonExprOperator) IsCommutative() bool {
+ switch op {
+ case EqualOp, NotEqualOp, NullSafeEqualOp:
+ return true
+ default:
+ return false
+ }
+}
+
// NewStrLiteral builds a new StrVal.
func NewStrLiteral(in string) *Literal {
return &Literal{Type: StrVal, Val: in}
@@ -1498,6 +1562,65 @@ func (op ComparisonExprOperator) ToString() string {
}
}
+func ComparisonExprOperatorFromJson(s string) (ComparisonExprOperator, error) {
+ switch s {
+ case EqualStr:
+ return EqualOp, nil
+ case JsonLessThanStr:
+ return LessThanOp, nil
+ case JsonGreaterThanStr:
+ return GreaterThanOp, nil
+ case JsonLessThanOrEqualStr:
+ return LessEqualOp, nil
+ case JsonGreaterThanOrEqualStr:
+ return GreaterEqualOp, nil
+ case NotEqualStr:
+ return NotEqualOp, nil
+ case NullSafeEqualStr:
+ return NullSafeEqualOp, nil
+ case InStr:
+ return InOp, nil
+ case NotInStr:
+ return NotInOp, nil
+ case LikeStr:
+ return LikeOp, nil
+ case NotLikeStr:
+ return NotLikeOp, nil
+ case RegexpStr:
+ return RegexpOp, nil
+ case NotRegexpStr:
+ return NotRegexpOp, nil
+ default:
+ return 0, fmt.Errorf("unknown ComparisonExpOperator: %s", s)
+ }
+}
+
+const (
+ JsonGreaterThanStr = "gt"
+ JsonLessThanStr = "lt"
+ JsonGreaterThanOrEqualStr = "ge"
+ JsonLessThanOrEqualStr = "le"
+)
+
+// JSONString returns a string representation for this operator that does not need escaping in JSON
+func (op ComparisonExprOperator) JSONString() string {
+ switch op {
+ case EqualOp, NotEqualOp, NullSafeEqualOp, InOp, NotInOp, LikeOp, NotLikeOp, RegexpOp, NotRegexpOp:
+ // These operators are safe for JSON output, so we delegate to ToString
+ return op.ToString()
+ case LessThanOp:
+ return JsonLessThanStr
+ case GreaterThanOp:
+ return JsonGreaterThanStr
+ case LessEqualOp:
+ return JsonLessThanOrEqualStr
+ case GreaterEqualOp:
+ return JsonGreaterThanOrEqualStr
+ default:
+ panic("unreachable")
+ }
+}
+
// ToString returns the operator as a string
func (op IsExprOperator) ToString() string {
switch op {
@@ -1543,10 +1666,6 @@ func (op BinaryExprOperator) ToString() string {
return ShiftLeftStr
case ShiftRightOp:
return ShiftRightStr
- case JSONExtractOp:
- return JSONExtractOpStr
- case JSONUnquoteExtractOp:
- return JSONUnquoteExtractOpStr
default:
return "Unknown BinaryExprOperator"
}
diff --git a/go/vt/sqlparser/cached_size.go b/go/vt/sqlparser/cached_size.go
index 9703d189b7a..524291a03b4 100644
--- a/go/vt/sqlparser/cached_size.go
+++ b/go/vt/sqlparser/cached_size.go
@@ -208,7 +208,7 @@ func (cached *AlterMigration) CachedSize(alloc bool) int64 {
}
size := int64(0)
if alloc {
- size += int64(64)
+ size += int64(80)
}
// field UUID string
size += hack.RuntimeAllocSize(int64(len(cached.UUID)))
@@ -216,6 +216,8 @@ func (cached *AlterMigration) CachedSize(alloc bool) int64 {
size += hack.RuntimeAllocSize(int64(len(cached.Expire)))
// field Ratio *vitess.io/vitess/go/vt/sqlparser.Literal
size += cached.Ratio.CachedSize(true)
+ // field Threshold string
+ size += hack.RuntimeAllocSize(int64(len(cached.Threshold)))
// field Shards string
size += hack.RuntimeAllocSize(int64(len(cached.Shards)))
return size
diff --git a/go/vt/sqlparser/constants.go b/go/vt/sqlparser/constants.go
index 34189b52380..bdf35a2654d 100644
--- a/go/vt/sqlparser/constants.go
+++ b/go/vt/sqlparser/constants.go
@@ -169,19 +169,17 @@ const (
IsNotFalseStr = "is not false"
// BinaryExpr.Operator
- BitAndStr = "&"
- BitOrStr = "|"
- BitXorStr = "^"
- PlusStr = "+"
- MinusStr = "-"
- MultStr = "*"
- DivStr = "/"
- IntDivStr = "div"
- ModStr = "%"
- ShiftLeftStr = "<<"
- ShiftRightStr = ">>"
- JSONExtractOpStr = "->"
- JSONUnquoteExtractOpStr = "->>"
+ BitAndStr = "&"
+ BitOrStr = "|"
+ BitXorStr = "^"
+ PlusStr = "+"
+ MinusStr = "-"
+ MultStr = "*"
+ DivStr = "/"
+ IntDivStr = "div"
+ ModStr = "%"
+ ShiftLeftStr = "<<"
+ ShiftRightStr = ">>"
// UnaryExpr.Operator
UPlusStr = "+"
@@ -692,47 +690,6 @@ const (
All
)
-func (op ComparisonExprOperator) Inverse() ComparisonExprOperator {
- switch op {
- case EqualOp:
- return NotEqualOp
- case LessThanOp:
- return GreaterEqualOp
- case GreaterThanOp:
- return LessEqualOp
- case LessEqualOp:
- return GreaterThanOp
- case GreaterEqualOp:
- return LessThanOp
- case NotEqualOp:
- return EqualOp
- case NullSafeEqualOp:
- return NotEqualOp
- case InOp:
- return NotInOp
- case NotInOp:
- return InOp
- case LikeOp:
- return NotLikeOp
- case NotLikeOp:
- return LikeOp
- case RegexpOp:
- return NotRegexpOp
- case NotRegexpOp:
- return RegexpOp
- }
- panic("unreachable")
-}
-
-func (op ComparisonExprOperator) IsCommutative() bool {
- switch op {
- case EqualOp, NotEqualOp, NullSafeEqualOp:
- return true
- default:
- return false
- }
-}
-
// Constant for Enum Type - IsExprOperator
const (
IsNullOp IsExprOperator = iota
@@ -756,8 +713,6 @@ const (
ModOp
ShiftLeftOp
ShiftRightOp
- JSONExtractOp
- JSONUnquoteExtractOp
)
// Constant for Enum Type - UnaryExprOperator
@@ -960,6 +915,7 @@ const (
UnthrottleAllMigrationType
ForceCutOverMigrationType
ForceCutOverAllMigrationType
+ SetCutOverThresholdMigrationType
)
// ColumnStorage constants
diff --git a/go/vt/sqlparser/encodable_test.go b/go/vt/sqlparser/encodable_test.go
index f11be5e6452..dcbaa893595 100644
--- a/go/vt/sqlparser/encodable_test.go
+++ b/go/vt/sqlparser/encodable_test.go
@@ -28,6 +28,15 @@ func TestEncodable(t *testing.T) {
in Encodable
out string
}{{
+ in: InsertValues{{
+ sqltypes.NewInt64(1),
+ sqltypes.NewVarChar("foo('a')"),
+ }, {
+ sqltypes.NewInt64(2),
+ sqltypes.NewVarChar("bar(`b`)"),
+ }},
+ out: "(1, 'foo(\\'a\\')'), (2, 'bar(`b`)')",
+ }, {
in: InsertValues{{
sqltypes.NewInt64(1),
sqltypes.NewVarBinary("foo('a')"),
@@ -35,14 +44,14 @@ func TestEncodable(t *testing.T) {
sqltypes.NewInt64(2),
sqltypes.NewVarBinary("bar(`b`)"),
}},
- out: "(1, 'foo(\\'a\\')'), (2, 'bar(`b`)')",
+ out: "(1, _binary'foo(\\'a\\')'), (2, _binary'bar(`b`)')",
}, {
// Single column.
in: &TupleEqualityList{
Columns: []IdentifierCI{NewIdentifierCI("pk")},
Rows: [][]sqltypes.Value{
{sqltypes.NewInt64(1)},
- {sqltypes.NewVarBinary("aa")},
+ {sqltypes.NewVarChar("aa")},
},
},
out: "pk in (1, 'aa')",
@@ -53,11 +62,11 @@ func TestEncodable(t *testing.T) {
Rows: [][]sqltypes.Value{
{
sqltypes.NewInt64(1),
- sqltypes.NewVarBinary("aa"),
+ sqltypes.NewVarChar("aa"),
},
{
sqltypes.NewInt64(2),
- sqltypes.NewVarBinary("bb"),
+ sqltypes.NewVarChar("bb"),
},
},
},
diff --git a/go/vt/sqlparser/keywords.go b/go/vt/sqlparser/keywords.go
index e32d7d0b72a..5c1b881df30 100644
--- a/go/vt/sqlparser/keywords.go
+++ b/go/vt/sqlparser/keywords.go
@@ -205,6 +205,7 @@ var keywords = []keyword{
{"current_timestamp", CURRENT_TIMESTAMP},
{"current_user", CURRENT_USER},
{"cursor", UNUSED},
+ {"cutover_threshold", CUTOVER_THRESHOLD},
{"data", DATA},
{"database", DATABASE},
{"databases", DATABASES},
diff --git a/go/vt/sqlparser/parse_test.go b/go/vt/sqlparser/parse_test.go
index 1780344ab73..d3d5fd469e7 100644
--- a/go/vt/sqlparser/parse_test.go
+++ b/go/vt/sqlparser/parse_test.go
@@ -1005,9 +1005,11 @@ var (
}, {
input: "select /* u~ */ 1 from t where a = ~b",
}, {
- input: "select /* -> */ a.b -> 'ab' from t",
+ input: "select /* -> */ a.b -> 'ab' from t",
+ output: "select /* -> */ json_extract(a.b, 'ab') from t",
}, {
- input: "select /* -> */ a.b ->> 'ab' from t",
+ input: "select /* -> */ a.b ->> 'ab' from t",
+ output: "select /* -> */ json_unquote(json_extract(a.b, 'ab')) from t",
}, {
input: "select /* empty function */ 1 from t where a = b()",
}, {
@@ -2480,6 +2482,8 @@ var (
input: "alter vitess_migration force_cutover all",
}, {
input: "alter vitess_migration '9748c3b7_7fdb_11eb_ac2c_f875a4d24e90' force_cutover",
+ }, {
+ input: "alter vitess_migration '9748c3b7_7fdb_11eb_ac2c_f875a4d24e90' cutover_threshold '17s'",
}, {
input: "alter vitess_migration '9748c3b7_7fdb_11eb_ac2c_f875a4d24e90' FORCE_CUTOVER",
output: "alter vitess_migration '9748c3b7_7fdb_11eb_ac2c_f875a4d24e90' force_cutover",
@@ -4114,6 +4118,9 @@ func TestInvalid(t *testing.T) {
}, {
input: "select * from foo where b <=> any (select id from t1)",
err: "syntax error at position 42",
+ }, {
+ input: "select _binary foo",
+ err: "syntax error at position 19 near 'foo'",
},
}
@@ -5937,7 +5944,7 @@ partition by range (YEAR(purchased)) subpartition by hash (TO_DAYS(purchased))
},
{
input: "create table t (id int, info JSON, INDEX zips((CAST(info->'$.field' AS unsigned ARRAY))))",
- output: "create table t (\n\tid int,\n\tinfo JSON,\n\tkey zips ((cast(info -> '$.field' as unsigned array)))\n)",
+ output: "create table t (\n\tid int,\n\tinfo JSON,\n\tkey zips ((cast(json_extract(info, '$.field') as unsigned array)))\n)",
},
{
input: "create table t (id int, s varchar(255) default 'foo\"bar')",
diff --git a/go/vt/sqlparser/parsed_query_test.go b/go/vt/sqlparser/parsed_query_test.go
index 19aa75bb1d6..1458a3e6527 100644
--- a/go/vt/sqlparser/parsed_query_test.go
+++ b/go/vt/sqlparser/parsed_query_test.go
@@ -118,7 +118,7 @@ func TestGenerateQuery(t *testing.T) {
Columns: []IdentifierCI{NewIdentifierCI("pk")},
Rows: [][]sqltypes.Value{
{sqltypes.NewInt64(1)},
- {sqltypes.NewVarBinary("aa")},
+ {sqltypes.NewVarChar("aa")},
},
},
},
@@ -132,11 +132,11 @@ func TestGenerateQuery(t *testing.T) {
Rows: [][]sqltypes.Value{
{
sqltypes.NewInt64(1),
- sqltypes.NewVarBinary("aa"),
+ sqltypes.NewVarChar("aa"),
},
{
sqltypes.NewInt64(2),
- sqltypes.NewVarBinary("bb"),
+ sqltypes.NewVarChar("bb"),
},
},
},
diff --git a/go/vt/sqlparser/precedence.go b/go/vt/sqlparser/precedence.go
index 6df5e8e227e..1b5576f65b1 100644
--- a/go/vt/sqlparser/precedence.go
+++ b/go/vt/sqlparser/precedence.go
@@ -57,10 +57,7 @@ func precedenceFor(in Expr) Precendence {
case *BetweenExpr:
return P12
case *ComparisonExpr:
- switch node.Operator {
- case EqualOp, NotEqualOp, GreaterThanOp, GreaterEqualOp, LessThanOp, LessEqualOp, LikeOp, InOp, RegexpOp, NullSafeEqualOp:
- return P11
- }
+ return P11
case *IsExpr:
return P11
case *BinaryExpr:
diff --git a/go/vt/sqlparser/precedence_test.go b/go/vt/sqlparser/precedence_test.go
index 0a14df5a2c1..690e6df8647 100644
--- a/go/vt/sqlparser/precedence_test.go
+++ b/go/vt/sqlparser/precedence_test.go
@@ -159,6 +159,8 @@ func TestParens(t *testing.T) {
{in: "10 - (2 - 1)", expected: "10 - (2 - 1)"},
{in: "0 <=> (1 and 0)", expected: "0 <=> (1 and 0)"},
{in: "(~ (1||0)) IS NULL", expected: "~(1 or 0) is null"},
+ {in: "1 not like ('a' is null)", expected: "1 not like ('a' is null)"},
+ {in: ":vtg1 not like (:vtg2 is null)", expected: ":vtg1 not like (:vtg2 is null)"},
}
parser := NewTestParser()
diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go
index 6892c5cc586..befd9b44c3b 100644
--- a/go/vt/sqlparser/sql.go
+++ b/go/vt/sqlparser/sql.go
@@ -340,431 +340,432 @@ const CLEANUP = 57647
const THROTTLE = 57648
const UNTHROTTLE = 57649
const FORCE_CUTOVER = 57650
-const EXPIRE = 57651
-const RATIO = 57652
-const VITESS_THROTTLER = 57653
-const BEGIN = 57654
-const START = 57655
-const TRANSACTION = 57656
-const COMMIT = 57657
-const ROLLBACK = 57658
-const SAVEPOINT = 57659
-const RELEASE = 57660
-const WORK = 57661
-const CONSISTENT = 57662
-const SNAPSHOT = 57663
-const UNRESOLVED = 57664
-const TRANSACTIONS = 57665
-const BIT = 57666
-const TINYINT = 57667
-const SMALLINT = 57668
-const MEDIUMINT = 57669
-const INT = 57670
-const INTEGER = 57671
-const BIGINT = 57672
-const INTNUM = 57673
-const REAL = 57674
-const DOUBLE = 57675
-const FLOAT_TYPE = 57676
-const FLOAT4_TYPE = 57677
-const FLOAT8_TYPE = 57678
-const DECIMAL_TYPE = 57679
-const NUMERIC = 57680
-const TIME = 57681
-const TIMESTAMP = 57682
-const DATETIME = 57683
-const YEAR = 57684
-const CHAR = 57685
-const VARCHAR = 57686
-const BOOL = 57687
-const CHARACTER = 57688
-const VARBINARY = 57689
-const NCHAR = 57690
-const TEXT = 57691
-const TINYTEXT = 57692
-const MEDIUMTEXT = 57693
-const LONGTEXT = 57694
-const BLOB = 57695
-const TINYBLOB = 57696
-const MEDIUMBLOB = 57697
-const LONGBLOB = 57698
-const JSON = 57699
-const JSON_SCHEMA_VALID = 57700
-const JSON_SCHEMA_VALIDATION_REPORT = 57701
-const ENUM = 57702
-const GEOMETRY = 57703
-const POINT = 57704
-const LINESTRING = 57705
-const POLYGON = 57706
-const GEOMCOLLECTION = 57707
-const GEOMETRYCOLLECTION = 57708
-const MULTIPOINT = 57709
-const MULTILINESTRING = 57710
-const MULTIPOLYGON = 57711
-const ASCII = 57712
-const UNICODE = 57713
-const VECTOR = 57714
-const NULLX = 57715
-const AUTO_INCREMENT = 57716
-const APPROXNUM = 57717
-const SIGNED = 57718
-const UNSIGNED = 57719
-const ZEROFILL = 57720
-const PURGE = 57721
-const BEFORE = 57722
-const CODE = 57723
-const COLLATION = 57724
-const COLUMNS = 57725
-const DATABASES = 57726
-const ENGINES = 57727
-const EVENT = 57728
-const EXTENDED = 57729
-const FIELDS = 57730
-const FULL = 57731
-const FUNCTION = 57732
-const GTID_EXECUTED = 57733
-const KEYSPACES = 57734
-const OPEN = 57735
-const PLUGINS = 57736
-const PRIVILEGES = 57737
-const PROCESSLIST = 57738
-const SCHEMAS = 57739
-const TABLES = 57740
-const TRIGGERS = 57741
-const USER = 57742
-const VGTID_EXECUTED = 57743
-const VITESS_KEYSPACES = 57744
-const VITESS_METADATA = 57745
-const VITESS_MIGRATIONS = 57746
-const VITESS_REPLICATION_STATUS = 57747
-const VITESS_SHARDS = 57748
-const VITESS_TABLETS = 57749
-const VITESS_TARGET = 57750
-const VSCHEMA = 57751
-const VITESS_THROTTLED_APPS = 57752
-const NAMES = 57753
-const GLOBAL = 57754
-const SESSION = 57755
-const ISOLATION = 57756
-const LEVEL = 57757
-const READ = 57758
-const WRITE = 57759
-const ONLY = 57760
-const REPEATABLE = 57761
-const COMMITTED = 57762
-const UNCOMMITTED = 57763
-const SERIALIZABLE = 57764
-const ADDDATE = 57765
-const CURRENT_TIMESTAMP = 57766
-const DATABASE = 57767
-const CURRENT_DATE = 57768
-const CURDATE = 57769
-const DATE_ADD = 57770
-const DATE_SUB = 57771
-const NOW = 57772
-const SUBDATE = 57773
-const CURTIME = 57774
-const CURRENT_TIME = 57775
-const LOCALTIME = 57776
-const LOCALTIMESTAMP = 57777
-const CURRENT_USER = 57778
-const UTC_DATE = 57779
-const UTC_TIME = 57780
-const UTC_TIMESTAMP = 57781
-const SYSDATE = 57782
-const DAY = 57783
-const DAY_HOUR = 57784
-const DAY_MICROSECOND = 57785
-const DAY_MINUTE = 57786
-const DAY_SECOND = 57787
-const HOUR = 57788
-const HOUR_MICROSECOND = 57789
-const HOUR_MINUTE = 57790
-const HOUR_SECOND = 57791
-const MICROSECOND = 57792
-const MINUTE = 57793
-const MINUTE_MICROSECOND = 57794
-const MINUTE_SECOND = 57795
-const MONTH = 57796
-const QUARTER = 57797
-const SECOND = 57798
-const SECOND_MICROSECOND = 57799
-const YEAR_MONTH = 57800
-const WEEK = 57801
-const SQL_TSI_DAY = 57802
-const SQL_TSI_WEEK = 57803
-const SQL_TSI_HOUR = 57804
-const SQL_TSI_MINUTE = 57805
-const SQL_TSI_MONTH = 57806
-const SQL_TSI_QUARTER = 57807
-const SQL_TSI_SECOND = 57808
-const SQL_TSI_MICROSECOND = 57809
-const SQL_TSI_YEAR = 57810
-const REPLACE = 57811
-const CONVERT = 57812
-const CAST = 57813
-const SUBSTR = 57814
-const SUBSTRING = 57815
-const MID = 57816
-const SEPARATOR = 57817
-const TIMESTAMPADD = 57818
-const TIMESTAMPDIFF = 57819
-const WEIGHT_STRING = 57820
-const LTRIM = 57821
-const RTRIM = 57822
-const TRIM = 57823
-const JSON_ARRAY = 57824
-const JSON_OBJECT = 57825
-const JSON_QUOTE = 57826
-const JSON_DEPTH = 57827
-const JSON_TYPE = 57828
-const JSON_LENGTH = 57829
-const JSON_VALID = 57830
-const JSON_ARRAY_APPEND = 57831
-const JSON_ARRAY_INSERT = 57832
-const JSON_INSERT = 57833
-const JSON_MERGE = 57834
-const JSON_MERGE_PATCH = 57835
-const JSON_MERGE_PRESERVE = 57836
-const JSON_REMOVE = 57837
-const JSON_REPLACE = 57838
-const JSON_SET = 57839
-const JSON_UNQUOTE = 57840
-const COUNT = 57841
-const AVG = 57842
-const MAX = 57843
-const MIN = 57844
-const SUM = 57845
-const GROUP_CONCAT = 57846
-const BIT_AND = 57847
-const BIT_OR = 57848
-const BIT_XOR = 57849
-const STD = 57850
-const STDDEV = 57851
-const STDDEV_POP = 57852
-const STDDEV_SAMP = 57853
-const VAR_POP = 57854
-const VAR_SAMP = 57855
-const VARIANCE = 57856
-const ANY_VALUE = 57857
-const REGEXP_INSTR = 57858
-const REGEXP_LIKE = 57859
-const REGEXP_REPLACE = 57860
-const REGEXP_SUBSTR = 57861
-const ExtractValue = 57862
-const UpdateXML = 57863
-const GET_LOCK = 57864
-const RELEASE_LOCK = 57865
-const RELEASE_ALL_LOCKS = 57866
-const IS_FREE_LOCK = 57867
-const IS_USED_LOCK = 57868
-const LOCATE = 57869
-const POSITION = 57870
-const ST_GeometryCollectionFromText = 57871
-const ST_GeometryFromText = 57872
-const ST_LineStringFromText = 57873
-const ST_MultiLineStringFromText = 57874
-const ST_MultiPointFromText = 57875
-const ST_MultiPolygonFromText = 57876
-const ST_PointFromText = 57877
-const ST_PolygonFromText = 57878
-const ST_GeometryCollectionFromWKB = 57879
-const ST_GeometryFromWKB = 57880
-const ST_LineStringFromWKB = 57881
-const ST_MultiLineStringFromWKB = 57882
-const ST_MultiPointFromWKB = 57883
-const ST_MultiPolygonFromWKB = 57884
-const ST_PointFromWKB = 57885
-const ST_PolygonFromWKB = 57886
-const ST_AsBinary = 57887
-const ST_AsText = 57888
-const ST_Dimension = 57889
-const ST_Envelope = 57890
-const ST_IsSimple = 57891
-const ST_IsEmpty = 57892
-const ST_GeometryType = 57893
-const ST_X = 57894
-const ST_Y = 57895
-const ST_Latitude = 57896
-const ST_Longitude = 57897
-const ST_EndPoint = 57898
-const ST_IsClosed = 57899
-const ST_Length = 57900
-const ST_NumPoints = 57901
-const ST_StartPoint = 57902
-const ST_PointN = 57903
-const ST_Area = 57904
-const ST_Centroid = 57905
-const ST_ExteriorRing = 57906
-const ST_InteriorRingN = 57907
-const ST_NumInteriorRings = 57908
-const ST_NumGeometries = 57909
-const ST_GeometryN = 57910
-const ST_LongFromGeoHash = 57911
-const ST_PointFromGeoHash = 57912
-const ST_LatFromGeoHash = 57913
-const ST_GeoHash = 57914
-const ST_AsGeoJSON = 57915
-const ST_GeomFromGeoJSON = 57916
-const MATCH = 57917
-const AGAINST = 57918
-const BOOLEAN = 57919
-const LANGUAGE = 57920
-const WITH = 57921
-const QUERY = 57922
-const EXPANSION = 57923
-const WITHOUT = 57924
-const VALIDATION = 57925
-const ROLLUP = 57926
-const UNUSED = 57927
-const ARRAY = 57928
-const BYTE = 57929
-const CUME_DIST = 57930
-const DESCRIPTION = 57931
-const DENSE_RANK = 57932
-const EMPTY = 57933
-const EXCEPT = 57934
-const FIRST_VALUE = 57935
-const GROUPING = 57936
-const GROUPS = 57937
-const JSON_TABLE = 57938
-const LAG = 57939
-const LAST_VALUE = 57940
-const LATERAL = 57941
-const LEAD = 57942
-const NTH_VALUE = 57943
-const NTILE = 57944
-const OF = 57945
-const OVER = 57946
-const PERCENT_RANK = 57947
-const RANK = 57948
-const RECURSIVE = 57949
-const ROW_NUMBER = 57950
-const SYSTEM = 57951
-const WINDOW = 57952
-const ACTIVE = 57953
-const ADMIN = 57954
-const AUTOEXTEND_SIZE = 57955
-const BUCKETS = 57956
-const CLONE = 57957
-const COLUMN_FORMAT = 57958
-const COMPONENT = 57959
-const DEFINITION = 57960
-const ENFORCED = 57961
-const ENGINE_ATTRIBUTE = 57962
-const EXCLUDE = 57963
-const FOLLOWING = 57964
-const GET_MASTER_PUBLIC_KEY = 57965
-const HISTOGRAM = 57966
-const HISTORY = 57967
-const INACTIVE = 57968
-const INVISIBLE = 57969
-const LOCKED = 57970
-const MASTER_COMPRESSION_ALGORITHMS = 57971
-const MASTER_PUBLIC_KEY_PATH = 57972
-const MASTER_TLS_CIPHERSUITES = 57973
-const MASTER_ZSTD_COMPRESSION_LEVEL = 57974
-const NESTED = 57975
-const NETWORK_NAMESPACE = 57976
-const NOWAIT = 57977
-const NULLS = 57978
-const OJ = 57979
-const OLD = 57980
-const OPTIONAL = 57981
-const ORDINALITY = 57982
-const ORGANIZATION = 57983
-const OTHERS = 57984
-const PARTIAL = 57985
-const PATH = 57986
-const PERSIST = 57987
-const PERSIST_ONLY = 57988
-const PRECEDING = 57989
-const PRIVILEGE_CHECKS_USER = 57990
-const PROCESS = 57991
-const RANDOM = 57992
-const REFERENCE = 57993
-const REQUIRE_ROW_FORMAT = 57994
-const RESOURCE = 57995
-const RESPECT = 57996
-const RESTART = 57997
-const RETAIN = 57998
-const REUSE = 57999
-const ROLE = 58000
-const SECONDARY = 58001
-const SECONDARY_ENGINE = 58002
-const SECONDARY_ENGINE_ATTRIBUTE = 58003
-const SECONDARY_LOAD = 58004
-const SECONDARY_UNLOAD = 58005
-const SIMPLE = 58006
-const SKIP = 58007
-const SRID = 58008
-const THREAD_PRIORITY = 58009
-const TIES = 58010
-const UNBOUNDED = 58011
-const VCPU = 58012
-const VISIBLE = 58013
-const RETURNING = 58014
-const FORMAT_BYTES = 58015
-const FORMAT_PICO_TIME = 58016
-const PS_CURRENT_THREAD_ID = 58017
-const PS_THREAD_ID = 58018
-const GTID_SUBSET = 58019
-const GTID_SUBTRACT = 58020
-const WAIT_FOR_EXECUTED_GTID_SET = 58021
-const WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS = 58022
-const FORMAT = 58023
-const TREE = 58024
-const VITESS = 58025
-const TRADITIONAL = 58026
-const VTEXPLAIN = 58027
-const VEXPLAIN = 58028
-const PLAN = 58029
-const LOCAL = 58030
-const LOW_PRIORITY = 58031
-const NO_WRITE_TO_BINLOG = 58032
-const LOGS = 58033
-const ERROR = 58034
-const GENERAL = 58035
-const HOSTS = 58036
-const OPTIMIZER_COSTS = 58037
-const USER_RESOURCES = 58038
-const SLOW = 58039
-const CHANNEL = 58040
-const RELAY = 58041
-const EXPORT = 58042
-const CURRENT = 58043
-const ROW = 58044
-const ROWS = 58045
-const AVG_ROW_LENGTH = 58046
-const CONNECTION = 58047
-const CHECKSUM = 58048
-const DELAY_KEY_WRITE = 58049
-const ENCRYPTION = 58050
-const ENGINE = 58051
-const INSERT_METHOD = 58052
-const MAX_ROWS = 58053
-const MIN_ROWS = 58054
-const PACK_KEYS = 58055
-const PASSWORD = 58056
-const FIXED = 58057
-const DYNAMIC = 58058
-const COMPRESSED = 58059
-const REDUNDANT = 58060
-const COMPACT = 58061
-const ROW_FORMAT = 58062
-const STATS_AUTO_RECALC = 58063
-const STATS_PERSISTENT = 58064
-const STATS_SAMPLE_PAGES = 58065
-const STORAGE = 58066
-const MEMORY = 58067
-const DISK = 58068
-const PARTITIONS = 58069
-const LINEAR = 58070
-const RANGE = 58071
-const LIST = 58072
-const SUBPARTITION = 58073
-const SUBPARTITIONS = 58074
-const HASH = 58075
+const CUTOVER_THRESHOLD = 57651
+const EXPIRE = 57652
+const RATIO = 57653
+const VITESS_THROTTLER = 57654
+const BEGIN = 57655
+const START = 57656
+const TRANSACTION = 57657
+const COMMIT = 57658
+const ROLLBACK = 57659
+const SAVEPOINT = 57660
+const RELEASE = 57661
+const WORK = 57662
+const CONSISTENT = 57663
+const SNAPSHOT = 57664
+const UNRESOLVED = 57665
+const TRANSACTIONS = 57666
+const BIT = 57667
+const TINYINT = 57668
+const SMALLINT = 57669
+const MEDIUMINT = 57670
+const INT = 57671
+const INTEGER = 57672
+const BIGINT = 57673
+const INTNUM = 57674
+const REAL = 57675
+const DOUBLE = 57676
+const FLOAT_TYPE = 57677
+const FLOAT4_TYPE = 57678
+const FLOAT8_TYPE = 57679
+const DECIMAL_TYPE = 57680
+const NUMERIC = 57681
+const TIME = 57682
+const TIMESTAMP = 57683
+const DATETIME = 57684
+const YEAR = 57685
+const CHAR = 57686
+const VARCHAR = 57687
+const BOOL = 57688
+const CHARACTER = 57689
+const VARBINARY = 57690
+const NCHAR = 57691
+const TEXT = 57692
+const TINYTEXT = 57693
+const MEDIUMTEXT = 57694
+const LONGTEXT = 57695
+const BLOB = 57696
+const TINYBLOB = 57697
+const MEDIUMBLOB = 57698
+const LONGBLOB = 57699
+const JSON = 57700
+const JSON_SCHEMA_VALID = 57701
+const JSON_SCHEMA_VALIDATION_REPORT = 57702
+const ENUM = 57703
+const GEOMETRY = 57704
+const POINT = 57705
+const LINESTRING = 57706
+const POLYGON = 57707
+const GEOMCOLLECTION = 57708
+const GEOMETRYCOLLECTION = 57709
+const MULTIPOINT = 57710
+const MULTILINESTRING = 57711
+const MULTIPOLYGON = 57712
+const ASCII = 57713
+const UNICODE = 57714
+const VECTOR = 57715
+const NULLX = 57716
+const AUTO_INCREMENT = 57717
+const APPROXNUM = 57718
+const SIGNED = 57719
+const UNSIGNED = 57720
+const ZEROFILL = 57721
+const PURGE = 57722
+const BEFORE = 57723
+const CODE = 57724
+const COLLATION = 57725
+const COLUMNS = 57726
+const DATABASES = 57727
+const ENGINES = 57728
+const EVENT = 57729
+const EXTENDED = 57730
+const FIELDS = 57731
+const FULL = 57732
+const FUNCTION = 57733
+const GTID_EXECUTED = 57734
+const KEYSPACES = 57735
+const OPEN = 57736
+const PLUGINS = 57737
+const PRIVILEGES = 57738
+const PROCESSLIST = 57739
+const SCHEMAS = 57740
+const TABLES = 57741
+const TRIGGERS = 57742
+const USER = 57743
+const VGTID_EXECUTED = 57744
+const VITESS_KEYSPACES = 57745
+const VITESS_METADATA = 57746
+const VITESS_MIGRATIONS = 57747
+const VITESS_REPLICATION_STATUS = 57748
+const VITESS_SHARDS = 57749
+const VITESS_TABLETS = 57750
+const VITESS_TARGET = 57751
+const VSCHEMA = 57752
+const VITESS_THROTTLED_APPS = 57753
+const NAMES = 57754
+const GLOBAL = 57755
+const SESSION = 57756
+const ISOLATION = 57757
+const LEVEL = 57758
+const READ = 57759
+const WRITE = 57760
+const ONLY = 57761
+const REPEATABLE = 57762
+const COMMITTED = 57763
+const UNCOMMITTED = 57764
+const SERIALIZABLE = 57765
+const ADDDATE = 57766
+const CURRENT_TIMESTAMP = 57767
+const DATABASE = 57768
+const CURRENT_DATE = 57769
+const CURDATE = 57770
+const DATE_ADD = 57771
+const DATE_SUB = 57772
+const NOW = 57773
+const SUBDATE = 57774
+const CURTIME = 57775
+const CURRENT_TIME = 57776
+const LOCALTIME = 57777
+const LOCALTIMESTAMP = 57778
+const CURRENT_USER = 57779
+const UTC_DATE = 57780
+const UTC_TIME = 57781
+const UTC_TIMESTAMP = 57782
+const SYSDATE = 57783
+const DAY = 57784
+const DAY_HOUR = 57785
+const DAY_MICROSECOND = 57786
+const DAY_MINUTE = 57787
+const DAY_SECOND = 57788
+const HOUR = 57789
+const HOUR_MICROSECOND = 57790
+const HOUR_MINUTE = 57791
+const HOUR_SECOND = 57792
+const MICROSECOND = 57793
+const MINUTE = 57794
+const MINUTE_MICROSECOND = 57795
+const MINUTE_SECOND = 57796
+const MONTH = 57797
+const QUARTER = 57798
+const SECOND = 57799
+const SECOND_MICROSECOND = 57800
+const YEAR_MONTH = 57801
+const WEEK = 57802
+const SQL_TSI_DAY = 57803
+const SQL_TSI_WEEK = 57804
+const SQL_TSI_HOUR = 57805
+const SQL_TSI_MINUTE = 57806
+const SQL_TSI_MONTH = 57807
+const SQL_TSI_QUARTER = 57808
+const SQL_TSI_SECOND = 57809
+const SQL_TSI_MICROSECOND = 57810
+const SQL_TSI_YEAR = 57811
+const REPLACE = 57812
+const CONVERT = 57813
+const CAST = 57814
+const SUBSTR = 57815
+const SUBSTRING = 57816
+const MID = 57817
+const SEPARATOR = 57818
+const TIMESTAMPADD = 57819
+const TIMESTAMPDIFF = 57820
+const WEIGHT_STRING = 57821
+const LTRIM = 57822
+const RTRIM = 57823
+const TRIM = 57824
+const JSON_ARRAY = 57825
+const JSON_OBJECT = 57826
+const JSON_QUOTE = 57827
+const JSON_DEPTH = 57828
+const JSON_TYPE = 57829
+const JSON_LENGTH = 57830
+const JSON_VALID = 57831
+const JSON_ARRAY_APPEND = 57832
+const JSON_ARRAY_INSERT = 57833
+const JSON_INSERT = 57834
+const JSON_MERGE = 57835
+const JSON_MERGE_PATCH = 57836
+const JSON_MERGE_PRESERVE = 57837
+const JSON_REMOVE = 57838
+const JSON_REPLACE = 57839
+const JSON_SET = 57840
+const JSON_UNQUOTE = 57841
+const COUNT = 57842
+const AVG = 57843
+const MAX = 57844
+const MIN = 57845
+const SUM = 57846
+const GROUP_CONCAT = 57847
+const BIT_AND = 57848
+const BIT_OR = 57849
+const BIT_XOR = 57850
+const STD = 57851
+const STDDEV = 57852
+const STDDEV_POP = 57853
+const STDDEV_SAMP = 57854
+const VAR_POP = 57855
+const VAR_SAMP = 57856
+const VARIANCE = 57857
+const ANY_VALUE = 57858
+const REGEXP_INSTR = 57859
+const REGEXP_LIKE = 57860
+const REGEXP_REPLACE = 57861
+const REGEXP_SUBSTR = 57862
+const ExtractValue = 57863
+const UpdateXML = 57864
+const GET_LOCK = 57865
+const RELEASE_LOCK = 57866
+const RELEASE_ALL_LOCKS = 57867
+const IS_FREE_LOCK = 57868
+const IS_USED_LOCK = 57869
+const LOCATE = 57870
+const POSITION = 57871
+const ST_GeometryCollectionFromText = 57872
+const ST_GeometryFromText = 57873
+const ST_LineStringFromText = 57874
+const ST_MultiLineStringFromText = 57875
+const ST_MultiPointFromText = 57876
+const ST_MultiPolygonFromText = 57877
+const ST_PointFromText = 57878
+const ST_PolygonFromText = 57879
+const ST_GeometryCollectionFromWKB = 57880
+const ST_GeometryFromWKB = 57881
+const ST_LineStringFromWKB = 57882
+const ST_MultiLineStringFromWKB = 57883
+const ST_MultiPointFromWKB = 57884
+const ST_MultiPolygonFromWKB = 57885
+const ST_PointFromWKB = 57886
+const ST_PolygonFromWKB = 57887
+const ST_AsBinary = 57888
+const ST_AsText = 57889
+const ST_Dimension = 57890
+const ST_Envelope = 57891
+const ST_IsSimple = 57892
+const ST_IsEmpty = 57893
+const ST_GeometryType = 57894
+const ST_X = 57895
+const ST_Y = 57896
+const ST_Latitude = 57897
+const ST_Longitude = 57898
+const ST_EndPoint = 57899
+const ST_IsClosed = 57900
+const ST_Length = 57901
+const ST_NumPoints = 57902
+const ST_StartPoint = 57903
+const ST_PointN = 57904
+const ST_Area = 57905
+const ST_Centroid = 57906
+const ST_ExteriorRing = 57907
+const ST_InteriorRingN = 57908
+const ST_NumInteriorRings = 57909
+const ST_NumGeometries = 57910
+const ST_GeometryN = 57911
+const ST_LongFromGeoHash = 57912
+const ST_PointFromGeoHash = 57913
+const ST_LatFromGeoHash = 57914
+const ST_GeoHash = 57915
+const ST_AsGeoJSON = 57916
+const ST_GeomFromGeoJSON = 57917
+const MATCH = 57918
+const AGAINST = 57919
+const BOOLEAN = 57920
+const LANGUAGE = 57921
+const WITH = 57922
+const QUERY = 57923
+const EXPANSION = 57924
+const WITHOUT = 57925
+const VALIDATION = 57926
+const ROLLUP = 57927
+const UNUSED = 57928
+const ARRAY = 57929
+const BYTE = 57930
+const CUME_DIST = 57931
+const DESCRIPTION = 57932
+const DENSE_RANK = 57933
+const EMPTY = 57934
+const EXCEPT = 57935
+const FIRST_VALUE = 57936
+const GROUPING = 57937
+const GROUPS = 57938
+const JSON_TABLE = 57939
+const LAG = 57940
+const LAST_VALUE = 57941
+const LATERAL = 57942
+const LEAD = 57943
+const NTH_VALUE = 57944
+const NTILE = 57945
+const OF = 57946
+const OVER = 57947
+const PERCENT_RANK = 57948
+const RANK = 57949
+const RECURSIVE = 57950
+const ROW_NUMBER = 57951
+const SYSTEM = 57952
+const WINDOW = 57953
+const ACTIVE = 57954
+const ADMIN = 57955
+const AUTOEXTEND_SIZE = 57956
+const BUCKETS = 57957
+const CLONE = 57958
+const COLUMN_FORMAT = 57959
+const COMPONENT = 57960
+const DEFINITION = 57961
+const ENFORCED = 57962
+const ENGINE_ATTRIBUTE = 57963
+const EXCLUDE = 57964
+const FOLLOWING = 57965
+const GET_MASTER_PUBLIC_KEY = 57966
+const HISTOGRAM = 57967
+const HISTORY = 57968
+const INACTIVE = 57969
+const INVISIBLE = 57970
+const LOCKED = 57971
+const MASTER_COMPRESSION_ALGORITHMS = 57972
+const MASTER_PUBLIC_KEY_PATH = 57973
+const MASTER_TLS_CIPHERSUITES = 57974
+const MASTER_ZSTD_COMPRESSION_LEVEL = 57975
+const NESTED = 57976
+const NETWORK_NAMESPACE = 57977
+const NOWAIT = 57978
+const NULLS = 57979
+const OJ = 57980
+const OLD = 57981
+const OPTIONAL = 57982
+const ORDINALITY = 57983
+const ORGANIZATION = 57984
+const OTHERS = 57985
+const PARTIAL = 57986
+const PATH = 57987
+const PERSIST = 57988
+const PERSIST_ONLY = 57989
+const PRECEDING = 57990
+const PRIVILEGE_CHECKS_USER = 57991
+const PROCESS = 57992
+const RANDOM = 57993
+const REFERENCE = 57994
+const REQUIRE_ROW_FORMAT = 57995
+const RESOURCE = 57996
+const RESPECT = 57997
+const RESTART = 57998
+const RETAIN = 57999
+const REUSE = 58000
+const ROLE = 58001
+const SECONDARY = 58002
+const SECONDARY_ENGINE = 58003
+const SECONDARY_ENGINE_ATTRIBUTE = 58004
+const SECONDARY_LOAD = 58005
+const SECONDARY_UNLOAD = 58006
+const SIMPLE = 58007
+const SKIP = 58008
+const SRID = 58009
+const THREAD_PRIORITY = 58010
+const TIES = 58011
+const UNBOUNDED = 58012
+const VCPU = 58013
+const VISIBLE = 58014
+const RETURNING = 58015
+const FORMAT_BYTES = 58016
+const FORMAT_PICO_TIME = 58017
+const PS_CURRENT_THREAD_ID = 58018
+const PS_THREAD_ID = 58019
+const GTID_SUBSET = 58020
+const GTID_SUBTRACT = 58021
+const WAIT_FOR_EXECUTED_GTID_SET = 58022
+const WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS = 58023
+const FORMAT = 58024
+const TREE = 58025
+const VITESS = 58026
+const TRADITIONAL = 58027
+const VTEXPLAIN = 58028
+const VEXPLAIN = 58029
+const PLAN = 58030
+const LOCAL = 58031
+const LOW_PRIORITY = 58032
+const NO_WRITE_TO_BINLOG = 58033
+const LOGS = 58034
+const ERROR = 58035
+const GENERAL = 58036
+const HOSTS = 58037
+const OPTIMIZER_COSTS = 58038
+const USER_RESOURCES = 58039
+const SLOW = 58040
+const CHANNEL = 58041
+const RELAY = 58042
+const EXPORT = 58043
+const CURRENT = 58044
+const ROW = 58045
+const ROWS = 58046
+const AVG_ROW_LENGTH = 58047
+const CONNECTION = 58048
+const CHECKSUM = 58049
+const DELAY_KEY_WRITE = 58050
+const ENCRYPTION = 58051
+const ENGINE = 58052
+const INSERT_METHOD = 58053
+const MAX_ROWS = 58054
+const MIN_ROWS = 58055
+const PACK_KEYS = 58056
+const PASSWORD = 58057
+const FIXED = 58058
+const DYNAMIC = 58059
+const COMPRESSED = 58060
+const REDUNDANT = 58061
+const COMPACT = 58062
+const ROW_FORMAT = 58063
+const STATS_AUTO_RECALC = 58064
+const STATS_PERSISTENT = 58065
+const STATS_SAMPLE_PAGES = 58066
+const STORAGE = 58067
+const MEMORY = 58068
+const DISK = 58069
+const PARTITIONS = 58070
+const LINEAR = 58071
+const RANGE = 58072
+const LIST = 58073
+const SUBPARTITION = 58074
+const SUBPARTITIONS = 58075
+const HASH = 58076
var yyToknames = [...]string{
"$end",
@@ -1092,6 +1093,7 @@ var yyToknames = [...]string{
"THROTTLE",
"UNTHROTTLE",
"FORCE_CUTOVER",
+ "CUTOVER_THRESHOLD",
"EXPIRE",
"RATIO",
"VITESS_THROTTLER",
@@ -1537,13 +1539,13 @@ var yyExca = [...]int{
-2, 40,
-1, 52,
1, 157,
- 751, 157,
+ 752, 157,
-2, 165,
-1, 53,
149, 165,
191, 165,
- 363, 165,
- -2, 524,
+ 364, 165,
+ -2, 523,
-1, 61,
38, 784,
254, 784,
@@ -1559,42 +1561,42 @@ var yyExca = [...]int{
-2, 131,
-1, 124,
1, 158,
- 751, 158,
+ 752, 158,
-2, 165,
-1, 135,
- 150, 409,
- 259, 409,
- -2, 513,
+ 150, 408,
+ 259, 408,
+ -2, 512,
-1, 154,
149, 165,
191, 165,
- 363, 165,
- -2, 533,
- -1, 748,
+ 364, 165,
+ -2, 532,
+ -1, 749,
177, 41,
-2, 43,
- -1, 957,
+ -1, 958,
95, 1638,
-2, 1482,
- -1, 958,
+ -1, 959,
95, 1639,
236, 1643,
-2, 1483,
- -1, 959,
+ -1, 960,
236, 1642,
-2, 42,
- -1, 1043,
+ -1, 1044,
65, 896,
-2, 909,
- -1, 1131,
+ -1, 1132,
264, 1109,
269, 1109,
- -2, 420,
- -1, 1216,
- 1, 581,
- 751, 581,
+ -2, 419,
+ -1, 1217,
+ 1, 580,
+ 752, 580,
-2, 165,
- -1, 1527,
+ -1, 1528,
236, 1643,
-2, 1483,
-1, 1740,
@@ -1606,16 +1608,16 @@ var yyExca = [...]int{
-1, 1801,
149, 165,
191, 165,
- 363, 165,
- -2, 459,
+ 364, 165,
+ -2, 458,
-1, 1884,
- 150, 409,
- 259, 409,
- -2, 513,
+ 150, 408,
+ 259, 408,
+ -2, 512,
-1, 1893,
264, 1110,
269, 1110,
- -2, 421,
+ -2, 420,
-1, 2342,
236, 1647,
-2, 1641,
@@ -1625,25 +1627,25 @@ var yyExca = [...]int{
-1, 2446,
149, 165,
191, 165,
- 363, 165,
- -2, 460,
+ 364, 165,
+ -2, 459,
-1, 2453,
28, 186,
-2, 188,
- -1, 2916,
+ -1, 2917,
86, 96,
96, 96,
-2, 976,
- -1, 2984,
- 726, 702,
+ -1, 2985,
+ 727, 702,
-2, 676,
- -1, 3208,
+ -1, 3210,
55, 1586,
-2, 1580,
- -1, 4045,
- 726, 702,
+ -1, 4047,
+ 727, 702,
-2, 690,
- -1, 4137,
+ -1, 4139,
98, 634,
104, 634,
114, 634,
@@ -1689,93 +1691,93 @@ var yyExca = [...]int{
232, 634,
233, 634,
234, 634,
- -2, 2018,
+ -2, 2019,
}
const yyPrivate = 57344
-const yyLast = 57238
+const yyLast = 57002
var yyAct = [...]int{
- 973, 3696, 3697, 87, 3695, 4026, 4180, 4212, 961, 4116,
- 4135, 2147, 3359, 2371, 4008, 4225, 4104, 1282, 4179, 1284,
- 968, 3645, 960, 2135, 3260, 2443, 3267, 2073, 3931, 3221,
- 5, 3308, 3495, 3317, 3322, 4006, 3319, 3318, 3316, 3321,
- 3320, 3074, 3632, 2373, 3159, 3337, 3275, 2518, 2014, 752,
- 3336, 3225, 3222, 3535, 3048, 3073, 3541, 3219, 2876, 3738,
- 2398, 747, 922, 3209, 3525, 2481, 746, 780, 2950, 3366,
- 1861, 1804, 921, 3030, 2505, 2981, 2486, 1760, 1093, 4077,
- 3339, 2951, 2549, 2952, 163, 2414, 1041, 2431, 87, 2882,
- 2419, 1163, 1061, 1068, 2901, 1038, 43, 2868, 2327, 2417,
- 926, 1909, 2131, 42, 2852, 1139, 2295, 1041, 2081, 3022,
- 2418, 41, 2294, 2169, 2527, 3563, 149, 2504, 1891, 2406,
- 2566, 2488, 1103, 2943, 1126, 1121, 1793, 2918, 1773, 2421,
- 100, 1721, 1540, 2175, 2106, 104, 2095, 1465, 105, 1448,
- 2010, 1898, 1100, 1097, 1870, 3224, 762, 1132, 1990, 1127,
- 1129, 1101, 2477, 1128, 1792, 1078, 1050, 2478, 1080, 1778,
- 1743, 1523, 1499, 2202, 2072, 2183, 3733, 2399, 749, 757,
- 2850, 1047, 2889, 107, 85, 1272, 2022, 127, 167, 125,
- 126, 1883, 3496, 1060, 1046, 3725, 1040, 99, 1044, 1212,
- 132, 133, 93, 923, 3552, 1073, 756, 1036, 1048, 1045,
- 106, 750, 1544, 98, 4213, 3633, 1072, 1063, 3305, 1280,
- 739, 1258, 2520, 2521, 2522, 4061, 2520, 3004, 3003, 2564,
- 2972, 1466, 3625, 1035, 4162, 84, 3038, 3039, 1549, 682,
- 1053, 128, 4057, 2368, 2369, 134, 2088, 3588, 2087, 1168,
- 2086, 4062, 1143, 1165, 1094, 4056, 2085, 2084, 2083, 2053,
- 1462, 1228, 679, 1459, 680, 4156, 1182, 1183, 1184, 2848,
- 1187, 1188, 1189, 1190, 1176, 2617, 1193, 1194, 1195, 1196,
- 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206,
- 1207, 1208, 1209, 740, 1088, 1037, 1087, 1142, 1054, 3327,
- 3205, 1975, 2, 2878, 1764, 4183, 1118, 1762, 3700, 1062,
- 3163, 2553, 1117, 128, 1116, 1115, 1169, 1172, 1173, 3327,
- 1482, 1039, 4235, 4035, 2974, 724, 95, 724, 95, 3700,
- 4178, 1105, 3324, 1229, 1765, 4203, 3499, 1763, 3498, 1476,
- 4218, 1110, 1086, 1090, 925, 1185, 2997, 111, 112, 113,
- 2392, 116, 4166, 4164, 122, 2552, 4057, 191, 1034, 3325,
- 674, 718, 927, 190, 95, 4217, 2395, 95, 1461, 2394,
- 4009, 1754, 737, 738, 2994, 2813, 718, 4165, 4163, 3325,
- 2093, 128, 1029, 1030, 1031, 1032, 129, 2109, 3331, 1043,
- 3385, 718, 4131, 3927, 3926, 976, 977, 978, 3638, 1167,
- 1166, 3639, 172, 1119, 3699, 976, 977, 978, 3331, 86,
- 1086, 1090, 925, 4193, 3937, 4160, 3657, 1075, 1076, 713,
- 1450, 3646, 4105, 86, 4113, 3699, 2624, 2546, 86, 3936,
- 2140, 4140, 2892, 3411, 1872, 1265, 3656, 1267, 1478, 2927,
- 3256, 1109, 2926, 3037, 1111, 2928, 3257, 3258, 2932, 4117,
- 1114, 1472, 1221, 1222, 1464, 2438, 2439, 2065, 2066, 718,
- 2893, 1794, 169, 1795, 2621, 170, 2849, 698, 2437, 1479,
- 3021, 1480, 1481, 1460, 3752, 1264, 1266, 1248, 1027, 1026,
- 696, 718, 1236, 4027, 1224, 1253, 1254, 1237, 1249, 1242,
- 2939, 189, 95, 3095, 1236, 2551, 2622, 1277, 718, 1237,
- 718, 2018, 718, 3328, 2497, 3393, 95, 1235, 1112, 1234,
- 3391, 95, 2456, 2455, 1443, 3363, 2370, 2615, 3361, 4040,
- 693, 2885, 2886, 3328, 2402, 4121, 2068, 2064, 2491, 708,
- 4145, 732, 3367, 1211, 736, 4121, 1996, 86, 730, 1790,
- 88, 2402, 1186, 1114, 703, 1106, 1725, 3023, 1965, 3979,
- 4143, 3980, 1108, 1107, 2982, 706, 3354, 2528, 716, 4184,
- 4149, 4150, 2571, 3007, 3355, 2591, 717, 2592, 2573, 2593,
- 3277, 3278, 2567, 1079, 1991, 719, 4215, 4144, 1269, 1442,
- 4185, 1251, 1252, 1449, 1274, 1262, 1250, 1243, 1257, 1263,
- 719, 1217, 1966, 1255, 1967, 3025, 3011, 2569, 3012, 1268,
- 2618, 1112, 2619, 1256, 2570, 719, 173, 3623, 3627, 3626,
- 1276, 3364, 3911, 1728, 3362, 179, 1275, 2572, 2594, 1192,
- 95, 1191, 1152, 2574, 1261, 1141, 683, 1141, 685, 699,
- 2531, 721, 3704, 720, 689, 2415, 687, 691, 700, 692,
- 1113, 686, 2019, 697, 1123, 1161, 688, 701, 702, 705,
- 709, 710, 711, 707, 704, 1122, 695, 722, 1160, 1123,
- 1159, 3096, 1158, 1157, 1156, 1155, 3538, 4157, 1154, 1149,
- 1089, 1083, 1081, 719, 1500, 1876, 2975, 1162, 1514, 3276,
- 1514, 2490, 2580, 2576, 2578, 2579, 2577, 2581, 2582, 2583,
- 3279, 3279, 1098, 4236, 4190, 719, 3382, 1135, 1501, 1502,
- 1503, 1504, 1505, 1506, 1507, 1509, 1508, 1510, 1511, 1098,
- 1098, 1171, 719, 1096, 719, 1134, 719, 1134, 2011, 2400,
- 2401, 1170, 3622, 1281, 3162, 1281, 1281, 1871, 1140, 1074,
- 1140, 3026, 3299, 1113, 2557, 2556, 2400, 2401, 1089, 1083,
- 1081, 2007, 1451, 164, 1179, 3006, 1869, 1471, 1468, 1469,
- 1470, 1475, 1477, 1474, 1868, 1473, 2000, 1867, 1998, 1999,
- 1997, 2001, 2002, 2003, 3042, 1467, 2639, 2992, 2008, 3190,
- 1791, 3188, 1153, 4158, 1865, 1041, 1524, 1529, 1530, 1227,
- 1533, 1535, 1536, 1537, 1538, 1539, 673, 1542, 1543, 1545,
- 1545, 4022, 1545, 1545, 1550, 1550, 1550, 1553, 1554, 1555,
+ 974, 3698, 3699, 87, 3697, 4137, 4214, 4028, 4118, 3361,
+ 4227, 4181, 4106, 3647, 4182, 969, 1285, 961, 3262, 2135,
+ 2014, 2443, 2170, 3269, 2371, 1283, 3497, 4010, 2147, 3933,
+ 3319, 3310, 3324, 3321, 3320, 3318, 3323, 3322, 2073, 3223,
+ 4008, 5, 3634, 2373, 3161, 3076, 3339, 3277, 2518, 753,
+ 3338, 3227, 3224, 3543, 962, 3221, 3740, 3050, 3537, 923,
+ 747, 3211, 2877, 3075, 1804, 2398, 2481, 781, 2414, 1760,
+ 748, 2951, 4079, 3032, 3368, 1861, 3527, 2417, 2982, 922,
+ 3341, 2505, 2486, 3565, 2952, 2549, 1042, 1164, 87, 163,
+ 1094, 927, 2953, 2431, 42, 1062, 1039, 743, 2883, 1069,
+ 1909, 2902, 2419, 2869, 41, 2418, 2853, 1042, 2327, 2294,
+ 2169, 2295, 2131, 3023, 2527, 149, 43, 1891, 2504, 2081,
+ 2406, 2488, 1104, 2944, 1122, 2566, 1127, 1793, 2919, 1773,
+ 2421, 1721, 2890, 1541, 2175, 100, 2106, 2095, 104, 105,
+ 1466, 1449, 1898, 2010, 1101, 1098, 3226, 763, 1133, 1870,
+ 1102, 2477, 1990, 1128, 1130, 1129, 2478, 1792, 1079, 1778,
+ 1081, 1051, 758, 1140, 750, 2399, 1743, 2183, 3735, 2202,
+ 1048, 2851, 1524, 85, 2072, 2022, 1061, 1041, 107, 1045,
+ 3727, 1500, 99, 1273, 167, 3554, 3498, 1883, 127, 125,
+ 126, 132, 1046, 1213, 1037, 133, 924, 1049, 1064, 751,
+ 1074, 84, 1545, 98, 1047, 106, 4215, 1281, 3635, 3307,
+ 1259, 740, 1073, 93, 2520, 2521, 2522, 4063, 1550, 2520,
+ 3005, 3004, 2564, 2973, 3627, 1036, 4164, 683, 3040, 3590,
+ 3041, 4059, 2368, 2369, 4058, 1054, 2088, 128, 2087, 1166,
+ 2086, 134, 2085, 4064, 1169, 2084, 1095, 3329, 2083, 2053,
+ 1229, 4158, 1183, 1184, 1185, 2849, 1188, 1189, 1190, 1191,
+ 3326, 2618, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201,
+ 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1088,
+ 3207, 4185, 1089, 1055, 741, 2, 680, 1040, 681, 1764,
+ 1038, 1143, 95, 1975, 1119, 2553, 1762, 3702, 3702, 3329,
+ 1144, 2879, 4220, 725, 3165, 1111, 2392, 3327, 4237, 128,
+ 1170, 1173, 1174, 1118, 1117, 1116, 95, 4037, 95, 1765,
+ 1063, 1463, 1177, 1106, 1460, 2975, 1763, 4219, 4180, 1230,
+ 111, 112, 113, 1186, 116, 4059, 3333, 122, 725, 2552,
+ 191, 1483, 95, 675, 4205, 3501, 928, 3500, 4168, 4166,
+ 1035, 2395, 2394, 2995, 2998, 738, 739, 190, 4011, 3327,
+ 719, 1754, 2109, 2814, 2093, 1030, 1031, 1032, 1033, 1087,
+ 1091, 926, 1044, 4167, 4165, 3387, 4133, 128, 3929, 3928,
+ 129, 1168, 190, 1167, 977, 978, 979, 719, 3333, 977,
+ 978, 979, 3640, 3701, 3701, 3641, 172, 1451, 4195, 3939,
+ 1076, 1077, 1120, 4147, 86, 129, 1087, 1091, 926, 4162,
+ 3659, 3648, 4107, 4115, 2546, 86, 86, 3938, 719, 2625,
+ 2140, 172, 4142, 4145, 3413, 1872, 3012, 2850, 3013, 1462,
+ 714, 3259, 3260, 4151, 4152, 2551, 2438, 2439, 4119, 2893,
+ 3258, 1479, 2933, 3279, 3280, 1794, 1115, 1795, 1222, 1223,
+ 4146, 3330, 2065, 2066, 3039, 719, 169, 3658, 2928, 170,
+ 2622, 2927, 2437, 3022, 2929, 1278, 3754, 2894, 1254, 1255,
+ 1249, 1028, 1110, 1027, 1237, 1112, 4029, 2940, 699, 1238,
+ 1225, 169, 1250, 1243, 170, 189, 2018, 95, 719, 2623,
+ 1480, 697, 1481, 1482, 2456, 2455, 3365, 1212, 95, 95,
+ 719, 3395, 1237, 3330, 1113, 2370, 719, 1238, 3363, 4042,
+ 189, 2886, 2887, 1444, 4123, 1236, 2616, 1235, 3393, 4123,
+ 2068, 1790, 2064, 733, 737, 731, 3097, 3369, 2528, 3024,
+ 1187, 694, 1996, 1725, 1461, 4186, 3981, 3356, 3982, 2983,
+ 709, 3008, 2567, 2402, 2573, 3357, 1965, 86, 4217, 2592,
+ 88, 2593, 3278, 2594, 1991, 704, 4187, 1266, 1270, 1268,
+ 1450, 1252, 1253, 2569, 3281, 1443, 1275, 707, 2211, 1218,
+ 717, 1258, 2497, 3027, 1115, 720, 1107, 1256, 718, 1277,
+ 3913, 1251, 1244, 1109, 1108, 1276, 2619, 1257, 2620, 1501,
+ 1966, 3629, 1967, 3366, 3628, 2595, 2491, 1265, 1267, 2574,
+ 173, 1080, 720, 3625, 1142, 3364, 1142, 1193, 1192, 179,
+ 1153, 3384, 1151, 1502, 1503, 1504, 1505, 1506, 1507, 1508,
+ 1510, 1509, 1511, 1512, 2531, 173, 1728, 1123, 2019, 2571,
+ 95, 1124, 1113, 720, 179, 3281, 3706, 1114, 684, 2415,
+ 686, 700, 1124, 722, 1162, 721, 690, 1161, 688, 692,
+ 701, 693, 1160, 687, 4159, 698, 1159, 1158, 689, 702,
+ 703, 706, 710, 711, 712, 708, 705, 2203, 696, 723,
+ 720, 2570, 2205, 1157, 1156, 1155, 2210, 2206, 1150, 1876,
+ 2207, 2208, 2209, 1163, 2572, 2204, 2212, 2213, 2214, 2215,
+ 2216, 2217, 2218, 2219, 2220, 3098, 3540, 1099, 1090, 1084,
+ 1082, 1099, 1136, 720, 2976, 1097, 4238, 1141, 1263, 1141,
+ 4192, 1099, 1264, 1075, 1282, 720, 1282, 1282, 3624, 3164,
+ 1135, 720, 1269, 2580, 2576, 2578, 2579, 2577, 2581, 2582,
+ 2583, 2584, 2011, 1871, 3028, 1090, 1084, 1082, 164, 2400,
+ 2401, 2557, 3173, 2556, 2007, 1452, 1180, 1262, 3192, 2490,
+ 3190, 3301, 2000, 1791, 1998, 1999, 1997, 2001, 2002, 2003,
+ 1154, 3007, 1152, 164, 1869, 1114, 1042, 1525, 1530, 1531,
+ 1868, 1534, 1536, 1537, 1538, 1539, 1540, 1867, 1543, 1544,
+ 1546, 1546, 3010, 1546, 1546, 1551, 1551, 1551, 1554, 1555,
1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565,
1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575,
1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585,
@@ -1788,1035 +1790,1015 @@ var yyAct = [...]int{
1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655,
1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665,
1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675,
- 1676, 1521, 4034, 2973, 1270, 1677, 1458, 1679, 1680, 1681,
- 1682, 1683, 723, 1439, 1440, 1441, 2941, 1120, 4080, 1550,
- 1550, 1550, 1550, 1550, 1550, 3586, 3587, 1082, 3655, 1534,
- 974, 3009, 974, 714, 1690, 1691, 1692, 1693, 1694, 1695,
- 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 715, 1525,
- 1517, 1518, 1519, 1520, 2550, 3539, 4119, 3329, 3330, 1466,
- 1531, 2976, 165, 3698, 2996, 1718, 4119, 1246, 1233, 177,
- 3333, 974, 1546, 94, 1547, 1548, 2623, 3329, 3330, 1977,
- 1976, 1978, 1979, 1980, 3698, 3483, 1220, 94, 4118, 1150,
- 3333, 89, 94, 1897, 2494, 1082, 1223, 1232, 4118, 1238,
- 1239, 1240, 1241, 1551, 1552, 2548, 3020, 3577, 2995, 3019,
- 185, 3559, 1215, 2622, 3049, 2923, 1141, 2853, 2855, 1724,
- 2888, 3029, 2825, 1278, 1279, 1515, 1516, 2143, 1041, 1782,
- 1753, 1678, 1041, 1141, 1226, 2495, 3171, 3170, 1041, 2883,
- 681, 1511, 2493, 2444, 4148, 1514, 3255, 1754, 2650, 2184,
- 1141, 124, 1494, 166, 171, 168, 174, 175, 176, 178,
- 180, 181, 182, 183, 1715, 4229, 2185, 1476, 1057, 184,
- 186, 187, 188, 1259, 1273, 1716, 2496, 2111, 119, 4048,
- 1995, 1164, 2176, 3069, 1500, 1178, 2492, 4194, 4147, 3618,
- 3263, 2112, 1512, 1513, 2110, 3747, 3383, 2023, 3051, 1481,
- 1231, 94, 1896, 3551, 2568, 2077, 2004, 1796, 1501, 1502,
- 1503, 1504, 1505, 1506, 1507, 1509, 1508, 1510, 1511, 1140,
- 2176, 2510, 2659, 1734, 1144, 1134, 1735, 104, 1732, 1146,
- 105, 2650, 1736, 1147, 1145, 3593, 1140, 3592, 1040, 1151,
- 2545, 3264, 2535, 1716, 1480, 1481, 1722, 1684, 1685, 1686,
- 1687, 1688, 1689, 1140, 1148, 1709, 120, 1906, 1905, 1134,
- 1137, 1138, 1895, 1098, 2543, 107, 3266, 1131, 1135, 1141,
- 1152, 3061, 3060, 3059, 1114, 1210, 3053, 1150, 3057, 1472,
- 3052, 2540, 3050, 1245, 3032, 1052, 3261, 3055, 1130, 3031,
- 1141, 2854, 3032, 1482, 1247, 4237, 3054, 3031, 1889, 4186,
- 1873, 1874, 1875, 3578, 4231, 2182, 3277, 3278, 1141, 3652,
- 1730, 3653, 2547, 3262, 2540, 3056, 3058, 4081, 3919, 1985,
- 1731, 3918, 4014, 1756, 2544, 3909, 1719, 1733, 1482, 1960,
- 1037, 1260, 1882, 1899, 1899, 1992, 2016, 1993, 1759, 1214,
- 1994, 1911, 1942, 1912, 1216, 1914, 1916, 3268, 1901, 1920,
- 1922, 1924, 1926, 1928, 1230, 2024, 1754, 2542, 1482, 1281,
- 2170, 1787, 1788, 1039, 2181, 1983, 4082, 1950, 1951, 1856,
- 1900, 4015, 1140, 1956, 1957, 976, 977, 978, 1134, 1137,
- 1138, 2332, 1098, 3669, 1864, 2329, 1131, 1135, 3668, 2167,
- 1984, 4238, 1972, 1140, 2331, 3600, 1879, 4227, 1144, 1134,
- 4228, 3599, 4226, 1146, 1892, 1880, 1878, 1147, 1145, 3589,
- 972, 1140, 3306, 1177, 3295, 3276, 2948, 1174, 2947, 1506,
- 1507, 1509, 1508, 1510, 1511, 1737, 1903, 3279, 2099, 2100,
- 2097, 2098, 2946, 2500, 1986, 742, 1982, 1946, 1970, 190,
- 2648, 1500, 1479, 3041, 1480, 1481, 1969, 1968, 1213, 1958,
- 2647, 3071, 1952, 1938, 2012, 2096, 1941, 1949, 1943, 724,
- 1948, 1947, 129, 1971, 1113, 1501, 1502, 1503, 1504, 1505,
- 1506, 1507, 1509, 1508, 1510, 1511, 1918, 1479, 172, 1480,
- 1481, 1729, 1482, 2211, 1117, 128, 1116, 1115, 2159, 2148,
+ 1676, 1677, 1440, 1522, 1271, 2550, 1678, 4036, 1680, 1681,
+ 1682, 1683, 1684, 1441, 1442, 2974, 3331, 3332, 3588, 3589,
+ 1551, 1551, 1551, 1551, 1551, 1551, 1535, 1121, 4150, 3335,
+ 1515, 975, 4082, 975, 724, 1691, 1692, 1693, 1694, 1695,
+ 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1518,
+ 1519, 1520, 1521, 1526, 2997, 715, 4121, 975, 1515, 1532,
+ 3657, 4121, 1467, 3700, 3700, 1083, 1718, 165, 3331, 3332,
+ 716, 1224, 4149, 1547, 177, 1548, 1549, 1234, 1459, 94,
+ 2624, 3335, 1977, 1976, 1978, 1979, 1980, 1717, 4120, 1221,
+ 94, 94, 165, 4120, 1552, 1553, 3541, 1216, 2996, 177,
+ 2977, 1897, 1083, 2993, 1233, 1142, 1239, 1240, 1241, 1242,
+ 2008, 1865, 89, 1172, 2623, 185, 3044, 3485, 1228, 1135,
+ 1724, 674, 3385, 1171, 1753, 4160, 2548, 2854, 2856, 1042,
+ 1279, 1280, 3021, 1042, 4024, 3020, 1467, 1516, 1517, 1042,
+ 185, 4231, 3579, 3561, 2640, 2924, 2889, 2826, 2143, 1782,
+ 3031, 719, 1679, 1179, 1227, 1142, 1715, 3172, 166, 171,
+ 168, 174, 175, 176, 178, 180, 181, 182, 183, 1716,
+ 1477, 1247, 2884, 2494, 184, 186, 187, 188, 1142, 682,
+ 2444, 1515, 124, 166, 171, 168, 174, 175, 176, 178,
+ 180, 181, 182, 183, 2402, 3257, 1512, 1142, 2184, 184,
+ 186, 187, 188, 2651, 1260, 1495, 3265, 1058, 1141, 1274,
+ 1896, 2176, 4050, 1165, 2495, 2185, 119, 3620, 3553, 1754,
+ 1732, 2493, 94, 1232, 1736, 2023, 2568, 1734, 1735, 2077,
+ 1041, 104, 105, 2004, 1796, 3071, 2510, 1716, 1685, 1686,
+ 1687, 1688, 1689, 1690, 1477, 1995, 4196, 3749, 1722, 1507,
+ 1508, 1510, 1509, 1511, 1512, 2496, 1482, 3266, 1141, 1115,
+ 1211, 3595, 4188, 1145, 1135, 2492, 1481, 1482, 1147, 3594,
+ 2535, 107, 1148, 1146, 1906, 1483, 1142, 2176, 1905, 2660,
+ 1895, 1141, 3268, 1473, 2540, 3034, 1465, 1135, 1138, 1139,
+ 3033, 1099, 2540, 1149, 120, 1132, 1136, 1873, 1874, 1875,
+ 1141, 2855, 3263, 2651, 1730, 1142, 1135, 1138, 1139, 2545,
+ 1099, 1889, 2543, 1153, 1132, 1136, 1131, 1151, 1053, 1756,
+ 3580, 3034, 3279, 3280, 1215, 1733, 3033, 2544, 1719, 3264,
+ 1960, 4233, 1882, 2547, 2016, 2542, 1038, 4083, 1759, 4016,
+ 1040, 1911, 1731, 1912, 1985, 1914, 1916, 3921, 1901, 1920,
+ 1922, 1924, 1926, 1928, 2182, 1942, 3920, 1473, 3051, 2332,
+ 1282, 1983, 1261, 3270, 1950, 1951, 720, 1787, 1788, 2167,
+ 1956, 1957, 1900, 4229, 1856, 1217, 4230, 1231, 4228, 1141,
+ 2111, 1178, 3654, 2024, 3655, 1175, 4084, 1246, 4017, 1864,
+ 2400, 2401, 1899, 1899, 2112, 1513, 1514, 2110, 1248, 4239,
+ 1992, 3911, 1993, 1879, 3671, 1994, 3670, 1880, 1141, 1892,
+ 3602, 1878, 2332, 1145, 1135, 1984, 2329, 1972, 1147, 1737,
+ 3601, 1754, 1148, 1146, 1480, 2331, 1481, 1482, 725, 2181,
+ 1903, 3278, 1982, 3073, 1214, 3591, 1946, 2099, 2100, 2097,
+ 2098, 973, 3053, 3281, 977, 978, 979, 1483, 3308, 3297,
+ 1114, 2949, 1483, 2099, 2100, 2630, 2631, 1938, 2012, 1483,
+ 1941, 2948, 1943, 2947, 2096, 2500, 2697, 1986, 2159, 2148,
2149, 2150, 2151, 2161, 2152, 2153, 2154, 2166, 2162, 2155,
- 2156, 2163, 2164, 2165, 2157, 2158, 2160, 1479, 2332, 1480,
- 1481, 2029, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1509,
- 1508, 1510, 1511, 2099, 2100, 2629, 2630, 3358, 1445, 1281,
- 1281, 3583, 1790, 724, 1482, 2051, 2025, 2026, 169, 4187,
- 2930, 170, 724, 4043, 2516, 87, 2515, 3265, 87, 2514,
- 2030, 2513, 2512, 2698, 2511, 2874, 4214, 2037, 2038, 2039,
- 2407, 2408, 1767, 1478, 1754, 1754, 1482, 189, 2050, 4174,
- 1754, 1482, 2874, 1754, 3941, 1471, 1468, 1469, 1470, 1475,
- 1477, 1474, 2203, 1473, 1482, 2696, 4042, 2205, 1500, 1478,
- 1754, 2210, 2206, 1467, 2167, 2207, 2208, 2209, 4018, 1482,
- 2204, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, 2220,
- 2700, 1768, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1509,
- 1508, 1510, 1511, 1482, 2874, 4112, 2138, 2138, 2136, 2136,
- 2139, 1479, 4017, 1480, 1481, 2874, 4091, 2101, 110, 2874,
- 4087, 4036, 101, 3999, 1754, 42, 1482, 2686, 42, 109,
- 1482, 108, 102, 4016, 1482, 3914, 2027, 3898, 4199, 1754,
- 3636, 4033, 3946, 2031, 1754, 2033, 2034, 2035, 2036, 101,
- 2646, 3897, 2040, 3746, 2222, 103, 4197, 1754, 3945, 102,
- 3922, 1754, 173, 1479, 2052, 1480, 1481, 2874, 3910, 3550,
- 3744, 179, 1754, 2159, 2148, 2149, 2150, 2151, 2161, 2152,
- 2153, 2154, 2166, 2162, 2155, 2156, 2163, 2164, 2165, 2157,
- 2158, 2160, 2078, 1754, 3902, 1479, 85, 1480, 1481, 85,
- 1479, 3665, 1480, 1481, 1754, 3901, 1715, 1714, 1713, 1712,
- 3636, 1754, 2108, 1479, 3597, 1480, 1481, 1716, 2058, 2059,
- 1754, 2171, 4127, 1754, 1482, 3582, 4125, 1754, 1479, 2113,
- 1480, 1481, 2874, 3634, 2540, 1754, 2114, 3368, 2116, 2117,
- 2118, 2119, 2120, 2121, 2123, 2125, 2126, 2127, 2128, 2129,
- 2130, 3365, 1479, 3298, 1480, 1481, 2142, 1504, 1505, 1506,
- 1507, 1509, 1508, 1510, 1511, 3297, 2340, 2957, 2342, 3269,
- 2115, 3557, 1754, 3273, 2944, 1479, 2246, 1480, 1481, 1479,
- 3272, 1480, 1481, 1479, 1711, 1480, 1481, 1482, 1525, 1704,
- 2186, 2187, 2188, 2189, 2780, 1754, 3644, 2341, 2612, 164,
- 3288, 3287, 1478, 2328, 2200, 2221, 2177, 2330, 1500, 3285,
- 3286, 1496, 1482, 1497, 3274, 2604, 4123, 1754, 2983, 3270,
- 1500, 2603, 2638, 2238, 3271, 3283, 3284, 1498, 1512, 1513,
- 1495, 2562, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1509,
- 1508, 1510, 1511, 1482, 1501, 1502, 1503, 1504, 1505, 1506,
- 1507, 1509, 1508, 1510, 1511, 3283, 3282, 2655, 2423, 1500,
- 2561, 2339, 2898, 1754, 2345, 2346, 2622, 3005, 1860, 2986,
- 2340, 2397, 2342, 1479, 2376, 1480, 1481, 2054, 104, 3992,
- 1754, 105, 2020, 1501, 1502, 1503, 1504, 1505, 1506, 1507,
- 1509, 1508, 1510, 1511, 1981, 1482, 2979, 2980, 2962, 104,
- 2453, 2412, 105, 2387, 3990, 1754, 1482, 1973, 2375, 1488,
- 1489, 1490, 1491, 1492, 1493, 1487, 1484, 3400, 2107, 1502,
- 1503, 1504, 1505, 1506, 1507, 1509, 1508, 1510, 1511, 2874,
- 2873, 1103, 1963, 2919, 2919, 2654, 1479, 3554, 1480, 1481,
- 2141, 1754, 1482, 103, 1959, 2871, 2462, 2463, 2464, 2465,
- 2457, 2448, 2458, 2459, 2460, 2461, 2447, 1053, 2425, 103,
- 1955, 1479, 1954, 1480, 1481, 1103, 2467, 2429, 1953, 2469,
- 2470, 2471, 2472, 2388, 2363, 1860, 1859, 1802, 1801, 2890,
- 1769, 1271, 2890, 3250, 2452, 2390, 109, 2381, 1754, 2382,
- 2541, 2483, 1479, 2622, 1480, 1481, 4075, 2451, 3987, 1754,
- 2897, 2920, 2920, 1482, 2489, 3553, 2529, 3601, 1754, 2410,
- 1482, 2922, 2622, 3220, 4047, 2434, 2435, 2874, 2433, 1482,
- 2898, 3503, 2450, 2869, 3550, 3285, 2449, 1088, 1482, 1087,
- 3193, 2436, 2780, 1482, 3969, 1754, 2683, 2526, 165, 2682,
- 2540, 2523, 2405, 1758, 1479, 177, 1480, 1481, 1482, 2366,
- 2141, 2499, 2079, 2063, 2540, 1479, 2898, 1480, 1481, 3550,
- 1478, 2898, 2006, 1143, 3602, 3603, 3604, 1789, 1042, 95,
- 2484, 1125, 1124, 1899, 1482, 4153, 2480, 2473, 2475, 2476,
- 2503, 4094, 2498, 2502, 2534, 3933, 185, 2537, 1482, 2538,
- 2554, 1479, 1761, 1480, 1481, 3524, 1754, 1482, 3899, 3759,
- 3617, 3309, 3517, 1754, 3614, 1482, 2484, 2533, 1142, 2536,
- 2532, 3514, 1754, 3595, 1482, 3416, 3415, 1862, 1482, 2558,
- 3512, 1754, 2482, 2559, 2560, 3475, 1754, 2555, 1482, 166,
- 171, 168, 174, 175, 176, 178, 180, 181, 182, 183,
- 3473, 1754, 1482, 3356, 3311, 184, 186, 187, 188, 1482,
- 3307, 95, 1479, 2987, 1480, 1481, 1755, 1757, 1482, 1479,
- 2479, 1480, 1481, 2474, 2627, 2954, 3572, 2565, 1479, 2468,
- 1480, 1481, 2466, 1041, 1041, 1041, 1988, 1479, 1894, 1480,
- 1481, 4188, 1479, 1482, 1480, 1481, 1890, 1858, 1215, 3469,
- 1754, 1482, 121, 1535, 3360, 1535, 1482, 1479, 4031, 1480,
- 1481, 1934, 3564, 3565, 1482, 3934, 3466, 1754, 2497, 2379,
- 3519, 2642, 4209, 1482, 2953, 2056, 4207, 4181, 4055, 2597,
- 3464, 1754, 3974, 1479, 1482, 1480, 1481, 3567, 3303, 3302,
- 1482, 2645, 110, 2342, 3462, 1754, 1482, 1479, 3301, 1480,
- 1481, 3460, 1754, 109, 1482, 108, 1479, 3220, 1480, 1481,
- 3458, 1754, 3570, 103, 1479, 2966, 1480, 1481, 1935, 1936,
- 1937, 2598, 2341, 1479, 3569, 1480, 1481, 1479, 2954, 1480,
- 1481, 3239, 678, 2614, 1482, 3456, 1754, 1479, 1482, 1480,
- 1481, 3242, 2057, 3454, 1754, 3238, 3243, 2620, 3452, 1754,
- 1482, 1479, 4051, 1480, 1481, 3935, 3450, 1754, 1479, 1482,
- 1480, 1481, 3724, 2628, 3723, 3448, 1754, 1479, 1482, 1480,
- 1481, 2396, 1766, 2385, 1717, 2634, 3446, 1754, 1754, 2631,
- 2632, 2633, 3444, 1754, 1482, 3240, 1055, 2108, 3442, 1754,
- 3241, 3558, 1479, 3543, 1480, 1481, 3440, 1754, 3198, 3197,
- 1479, 3542, 1480, 1481, 4013, 1479, 741, 1480, 1481, 3737,
- 2635, 3739, 2637, 1479, 1482, 1480, 1481, 3722, 3546, 3605,
- 1058, 2640, 1479, 2641, 1480, 1481, 3438, 1754, 1059, 3207,
- 3436, 1754, 1482, 1479, 2005, 1480, 1481, 1056, 2658, 1479,
- 1025, 1480, 1481, 3906, 2636, 1479, 1482, 1480, 1481, 3281,
- 1482, 3422, 1754, 1479, 2937, 1480, 1481, 1482, 2958, 1930,
- 3398, 1754, 2590, 1482, 2184, 2643, 3244, 1482, 2907, 2908,
- 2589, 2824, 3606, 3607, 3608, 2588, 2845, 1754, 1482, 2606,
- 2607, 2185, 1482, 1479, 2609, 1480, 1481, 1479, 2587, 1480,
- 1481, 1067, 1482, 2610, 2694, 2586, 2585, 2812, 2584, 1479,
- 1181, 1480, 1481, 2856, 1180, 1066, 2843, 1754, 1479, 3376,
- 1480, 1481, 1931, 1932, 1933, 2953, 101, 1479, 3035, 1480,
- 1481, 1444, 1041, 2993, 2818, 1754, 102, 129, 2138, 3548,
- 2136, 2859, 1482, 1479, 101, 1480, 1481, 103, 2795, 1754,
- 103, 4223, 2787, 1754, 102, 2895, 2896, 1482, 2857, 2778,
- 1754, 2970, 3210, 3212, 2423, 2776, 1754, 1041, 2915, 2763,
- 1754, 3213, 2601, 1479, 4130, 1480, 1481, 2104, 2102, 2103,
- 2761, 1754, 2894, 4032, 2860, 3619, 2862, 1482, 3929, 110,
- 3280, 1479, 1482, 1480, 1481, 2949, 1482, 2911, 2875, 2391,
- 109, 3526, 108, 2107, 1482, 1479, 2626, 1480, 1481, 1479,
- 103, 1480, 1481, 3196, 2407, 2408, 1479, 2062, 1480, 1481,
- 2061, 3195, 1479, 1482, 1480, 1481, 1479, 1482, 1480, 1481,
- 108, 2884, 3998, 3997, 2759, 1754, 1722, 1479, 2847, 1480,
- 1481, 1479, 109, 1480, 1481, 110, 3536, 3977, 3745, 2757,
- 1754, 1479, 3743, 1480, 1481, 42, 109, 2867, 108, 2940,
- 2942, 3742, 3735, 2913, 2912, 1482, 3615, 2914, 3547, 3545,
- 3312, 2933, 2524, 1877, 2887, 1716, 110, 2917, 2872, 2755,
- 1754, 1065, 2991, 3734, 2753, 1754, 2890, 109, 2751, 1754,
- 3708, 1479, 1482, 1480, 1481, 2871, 2749, 1754, 2921, 4211,
- 4210, 4210, 2489, 2924, 1482, 3099, 1479, 2684, 1480, 1481,
- 1482, 2931, 2377, 2934, 1783, 2747, 1754, 1775, 4211, 2745,
- 1754, 4019, 2956, 3581, 3002, 3, 2179, 2959, 2960, 1482,
- 97, 2180, 2945, 1482, 114, 115, 1479, 2076, 1480, 1481,
- 10, 1479, 1, 1480, 1481, 1479, 1033, 1480, 1481, 2955,
- 1447, 2074, 1446, 1479, 9, 1480, 1481, 2743, 1754, 1482,
- 3585, 2963, 4142, 2964, 2967, 2968, 2969, 2075, 694, 2242,
- 8, 2999, 1479, 2367, 1480, 1481, 1479, 1720, 1480, 1481,
- 1882, 4182, 4138, 4139, 2741, 1754, 1974, 1964, 3647, 2293,
- 3930, 1482, 3045, 3046, 2988, 2989, 2739, 1754, 3315, 2530,
- 3613, 1482, 2737, 1754, 2487, 1133, 154, 2445, 2446, 2998,
- 4107, 118, 1482, 1091, 1479, 117, 1480, 1481, 1136, 1244,
- 1482, 2735, 1754, 2525, 1482, 2733, 1754, 3637, 1482, 2938,
- 2454, 1808, 1806, 1482, 1807, 1805, 1810, 1482, 3024, 1809,
- 3043, 1479, 3062, 1480, 1481, 4079, 3027, 1482, 3384, 2325,
- 2685, 2731, 1754, 1479, 3482, 1480, 1481, 1482, 1771, 1479,
- 2067, 1480, 1481, 731, 1482, 2910, 3080, 3081, 3082, 3083,
- 3084, 3085, 3086, 3087, 3088, 3089, 725, 192, 1479, 2357,
- 1480, 1481, 1479, 3515, 1480, 1481, 3097, 1797, 1776, 2060,
- 3000, 3063, 1175, 2729, 1754, 684, 3289, 1755, 2364, 2563,
- 690, 1532, 2055, 3194, 2724, 1754, 2925, 1085, 1479, 1482,
- 1480, 1481, 2720, 1754, 1077, 2378, 2718, 1754, 2861, 1084,
- 2711, 1754, 3907, 3228, 3540, 2709, 1754, 3206, 3208, 1770,
- 1482, 2877, 3211, 3204, 4012, 3736, 1482, 2389, 4092, 3481,
- 1479, 3101, 1480, 1481, 2935, 1772, 1717, 3502, 2657, 3477,
- 1479, 3047, 1480, 1481, 3157, 1482, 3413, 3033, 2174, 3064,
- 3034, 1479, 1522, 1480, 1481, 2422, 3703, 2094, 754, 1479,
- 753, 1480, 1481, 1479, 751, 1480, 1481, 1479, 2863, 1480,
- 1481, 3044, 1479, 3175, 1480, 1481, 1479, 2891, 1480, 1481,
- 1486, 1485, 962, 2236, 2851, 1784, 1479, 3164, 1480, 1481,
- 2902, 3412, 3166, 2900, 2899, 2978, 1479, 2599, 1480, 1481,
- 2430, 3566, 2423, 1479, 3562, 1480, 1481, 4134, 3090, 2328,
- 2424, 2328, 3404, 2330, 2420, 2330, 2870, 3137, 3402, 913,
- 912, 1482, 763, 755, 3227, 745, 87, 975, 911, 2423,
- 2423, 2423, 2423, 2423, 2501, 910, 3175, 2841, 3342, 3147,
- 3148, 3149, 3150, 3151, 3343, 3165, 3008, 3167, 1479, 2423,
- 1480, 1481, 2423, 3357, 3010, 2936, 3353, 3232, 1482, 1463,
- 3249, 1739, 1482, 2319, 2320, 2321, 2322, 2323, 3174, 1479,
- 1742, 1480, 1481, 2016, 1482, 1479, 2386, 1480, 1481, 1104,
- 2344, 3381, 4038, 2347, 2348, 1482, 3186, 2625, 3192, 3187,
- 3189, 3191, 1482, 3201, 1479, 3199, 1480, 1481, 3410, 3214,
- 3215, 3202, 2425, 1482, 2903, 2906, 2907, 2908, 2904, 1738,
- 2905, 2909, 4045, 2840, 3323, 3332, 3631, 3304, 2984, 2365,
- 3234, 3235, 1046, 3237, 2517, 3340, 1044, 1482, 3231, 2425,
- 2425, 2425, 2425, 2425, 3245, 104, 1482, 1045, 105, 3233,
- 3253, 69, 3236, 1482, 46, 4007, 4076, 3259, 3251, 2425,
- 2836, 3252, 2425, 1482, 2835, 905, 902, 3705, 3706, 3707,
- 3160, 3161, 3290, 4058, 3292, 3291, 2834, 4059, 901, 4060,
- 1479, 3200, 1480, 1481, 1482, 3293, 3294, 2833, 1482, 2231,
- 1457, 1454, 4155, 1482, 2832, 2069, 96, 3344, 3313, 36,
- 35, 2489, 3341, 3334, 1482, 2831, 34, 3345, 1482, 33,
- 32, 26, 25, 3217, 3351, 1482, 24, 1479, 23, 1480,
- 1481, 1479, 22, 1480, 1481, 29, 3223, 19, 21, 2822,
- 20, 3223, 18, 1479, 3369, 1480, 1481, 3372, 2821, 3326,
- 4177, 3371, 4222, 3379, 1479, 2820, 1480, 1481, 123, 55,
- 52, 1479, 50, 1480, 1481, 2819, 131, 130, 53, 3389,
- 3386, 3387, 1479, 3388, 1480, 1481, 3390, 49, 3392, 1218,
- 3394, 3405, 3406, 3407, 3408, 3409, 2816, 47, 31, 30,
- 2811, 17, 16, 15, 14, 2804, 1479, 13, 1480, 1481,
- 12, 11, 7, 6, 39, 1479, 2803, 1480, 1481, 38,
- 2802, 37, 1479, 28, 1480, 1481, 27, 2801, 40, 1535,
- 4, 2971, 1479, 1535, 1480, 1481, 3314, 2519, 0, 0,
- 0, 0, 0, 2644, 0, 0, 0, 2649, 0, 3527,
- 0, 3529, 0, 1479, 0, 1480, 1481, 1479, 0, 1480,
- 1481, 3497, 1479, 0, 1480, 1481, 0, 0, 3501, 0,
- 2652, 0, 2653, 1479, 0, 1480, 1481, 1479, 2661, 1480,
- 1481, 0, 2663, 2664, 1479, 0, 1480, 1481, 0, 0,
- 0, 2670, 2671, 2672, 2673, 2674, 2675, 2676, 2677, 2678,
- 2679, 0, 2681, 0, 3380, 0, 3226, 0, 0, 0,
- 0, 2423, 0, 0, 3528, 0, 3530, 0, 0, 0,
- 3532, 0, 0, 3537, 3579, 2687, 2688, 2689, 2690, 0,
- 2692, 2693, 3544, 2695, 0, 0, 0, 2697, 0, 3549,
- 0, 2702, 2703, 0, 2704, 1482, 0, 2707, 2708, 2710,
- 2712, 2713, 2714, 2715, 2716, 2717, 2719, 2721, 2722, 2723,
- 2725, 743, 2727, 2728, 2730, 2732, 2734, 2736, 2738, 2740,
- 2742, 2744, 2746, 2748, 2750, 2752, 2754, 2756, 2758, 2760,
- 2762, 2764, 2765, 2766, 3571, 2768, 3344, 2770, 3335, 2772,
- 2773, 3341, 2775, 2777, 2779, 3573, 3345, 3504, 2782, 3506,
- 3507, 3508, 2786, 3596, 3580, 3598, 2791, 2792, 2793, 2794,
- 3574, 2425, 3568, 1482, 0, 3641, 3642, 3374, 3375, 2805,
- 2806, 2807, 2808, 2809, 2810, 3590, 3591, 2814, 2815, 0,
- 0, 0, 3534, 1482, 0, 2817, 0, 2800, 0, 0,
- 2823, 0, 0, 1482, 0, 2826, 2827, 2828, 2829, 2830,
- 1482, 0, 0, 0, 0, 1482, 2837, 2838, 0, 2839,
- 1482, 0, 2842, 2844, 2389, 3561, 2846, 0, 0, 1482,
- 1064, 0, 0, 1070, 1070, 1482, 2858, 3624, 0, 1482,
- 0, 3628, 3629, 3630, 3575, 3576, 0, 0, 0, 1482,
- 3643, 0, 0, 0, 1479, 0, 1480, 1481, 1482, 0,
- 2903, 2906, 2907, 2908, 2904, 2799, 2905, 2909, 3659, 0,
- 3564, 3565, 0, 0, 2665, 0, 0, 0, 1482, 0,
- 0, 0, 0, 1482, 0, 2798, 0, 0, 0, 0,
- 1482, 2680, 0, 3670, 0, 2797, 0, 1482, 0, 0,
- 0, 1482, 2796, 0, 0, 1482, 0, 2790, 0, 0,
- 1482, 0, 2789, 0, 1482, 0, 0, 0, 0, 1482,
- 0, 2788, 1479, 0, 1480, 1481, 0, 2785, 0, 1482,
- 0, 2784, 0, 0, 0, 0, 3711, 0, 3712, 3713,
- 3714, 2783, 1479, 0, 1480, 1481, 3721, 0, 1482, 3728,
- 2781, 3730, 1479, 0, 1480, 1481, 0, 0, 3701, 1479,
- 0, 1480, 1481, 1482, 1479, 3731, 1480, 1481, 0, 1479,
- 2774, 1480, 1481, 0, 3227, 2771, 0, 87, 1479, 3227,
- 1480, 1481, 2769, 0, 1479, 0, 1480, 1481, 1479, 2767,
- 1480, 1481, 0, 2726, 0, 0, 1482, 2706, 1479, 0,
- 1480, 1481, 2705, 0, 3753, 0, 2701, 1479, 3732, 1480,
- 1481, 2699, 0, 2138, 3664, 2136, 3761, 3741, 3751, 3740,
- 0, 2691, 0, 3748, 0, 3750, 0, 1479, 0, 1480,
- 1481, 0, 1479, 0, 1480, 1481, 0, 0, 0, 1479,
- 2662, 1480, 1481, 0, 3913, 0, 1479, 0, 1480, 1481,
- 1479, 3765, 1480, 1481, 1479, 2656, 1480, 1481, 0, 1479,
- 0, 1480, 1481, 1479, 0, 1480, 1481, 0, 1479, 0,
- 1480, 1481, 3620, 3621, 0, 0, 0, 42, 1479, 0,
- 1480, 1481, 0, 3905, 3932, 3904, 0, 0, 2651, 0,
- 0, 0, 0, 0, 3920, 0, 0, 1479, 0, 1480,
- 1481, 3924, 3925, 0, 0, 0, 0, 3903, 1744, 0,
- 0, 0, 1479, 0, 1480, 1481, 0, 3971, 3972, 0,
- 0, 0, 1752, 0, 3755, 1745, 3075, 3076, 3077, 3078,
- 3079, 0, 0, 0, 0, 3729, 0, 3915, 3916, 3917,
- 0, 2138, 0, 2136, 3975, 1479, 3094, 1480, 1481, 0,
- 2383, 2384, 1751, 1749, 1750, 1746, 0, 1747, 0, 0,
- 0, 0, 0, 0, 3223, 0, 3762, 3763, 0, 0,
- 3978, 0, 4020, 3227, 3981, 0, 0, 0, 0, 3757,
- 1748, 0, 0, 0, 0, 0, 0, 1553, 1554, 1555,
- 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565,
- 1566, 1567, 1568, 1569, 1570, 1571, 1573, 1574, 1575, 1576,
- 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586,
- 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596,
- 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606,
- 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616,
- 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626,
- 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636,
- 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646,
- 1647, 1648, 1649, 1650, 1652, 1653, 1654, 1655, 1656, 1657,
- 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667,
- 1673, 1674, 1675, 1676, 1690, 1691, 1692, 1693, 1694, 1695,
- 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 4021, 4005,
- 0, 3976, 4004, 0, 0, 0, 3226, 3995, 0, 0,
- 0, 3226, 4039, 0, 4001, 0, 4003, 0, 0, 0,
- 0, 0, 3065, 0, 0, 1744, 0, 0, 0, 0,
- 87, 0, 0, 0, 0, 0, 3229, 0, 0, 1752,
- 0, 4024, 1745, 0, 0, 0, 0, 0, 0, 0,
- 4023, 0, 0, 0, 3247, 0, 0, 4046, 3908, 4041,
- 4028, 0, 0, 0, 0, 4044, 0, 1740, 1741, 1751,
- 1749, 1750, 1746, 0, 1747, 0, 3912, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1748, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4064, 0, 0, 4065, 0, 0, 0, 0, 4089, 0,
- 42, 0, 0, 87, 0, 0, 0, 0, 0, 0,
- 0, 4074, 0, 0, 0, 0, 1483, 0, 0, 4083,
- 0, 0, 0, 0, 3139, 0, 3141, 0, 0, 0,
- 4093, 0, 0, 0, 0, 3932, 4109, 4095, 0, 4120,
- 0, 0, 3152, 3153, 3154, 3155, 4106, 1541, 0, 4098,
- 4103, 3378, 4100, 4099, 4097, 4102, 4101, 0, 0, 0,
- 4128, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4025, 0, 4133, 3395, 3396, 3226, 3397, 3399, 3401, 0,
- 4151, 0, 0, 0, 0, 0, 0, 4141, 0, 4146,
- 0, 0, 0, 0, 0, 4159, 4120, 4161, 0, 0,
- 0, 4172, 0, 42, 3414, 0, 0, 0, 0, 3417,
- 0, 3419, 3420, 3421, 3423, 3424, 3425, 3426, 3427, 3428,
- 3429, 3430, 3431, 3432, 3433, 3434, 3435, 3437, 3439, 3441,
- 3443, 3445, 3447, 3449, 3451, 3453, 3455, 3457, 3459, 3461,
- 3463, 3465, 3467, 3468, 3470, 3471, 3472, 3474, 2016, 4195,
- 3476, 4192, 3478, 3479, 3480, 4202, 4206, 3484, 3485, 3486,
- 3487, 3488, 3489, 3490, 3491, 3492, 3493, 3494, 2138, 4208,
- 2136, 4205, 4204, 4120, 4216, 4201, 3500, 4191, 4176, 4171,
- 3505, 4224, 4090, 3223, 3509, 3510, 4085, 3511, 3513, 0,
- 3516, 3518, 4232, 3520, 3521, 3522, 3523, 4230, 0, 0,
- 0, 0, 0, 3531, 0, 0, 0, 0, 0, 0,
- 4030, 4241, 4242, 3972, 4240, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2138, 0, 2136, 4239,
- 0, 0, 0, 0, 4037, 0, 0, 0, 3555, 3556,
- 0, 0, 3560, 0, 4049, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4167, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 86, 44, 45, 88, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 92,
- 0, 0, 0, 48, 76, 77, 0, 74, 78, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 75,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 4084, 0, 0, 0, 0, 0, 1774, 0, 0,
- 0, 62, 0, 0, 0, 0, 0, 3635, 0, 0,
- 0, 0, 0, 95, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1863, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3654, 0, 0, 3658, 0, 958, 0, 0,
- 0, 0, 0, 83, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 3671,
+ 2156, 2163, 2164, 2165, 2157, 2158, 2160, 1483, 1971, 1970,
+ 190, 1969, 128, 1483, 1968, 4240, 1118, 1117, 1116, 1483,
+ 1958, 2978, 1505, 1506, 1507, 1508, 1510, 1509, 1511, 1512,
+ 1790, 2029, 1952, 129, 1949, 151, 3063, 3062, 3061, 2407,
+ 2408, 3055, 1948, 3059, 1947, 3054, 1918, 3052, 1729, 172,
+ 1282, 1282, 3057, 1483, 3360, 1446, 2025, 2026, 1483, 4201,
+ 1754, 3056, 2875, 4216, 2051, 1754, 87, 4189, 4045, 87,
+ 2030, 4199, 1754, 3552, 3585, 3402, 725, 2037, 2038, 2039,
+ 3058, 3060, 4044, 162, 3267, 4020, 2931, 2050, 725, 150,
+ 1489, 1490, 1491, 1492, 1493, 1494, 1488, 1485, 4019, 1472,
+ 1469, 1470, 1471, 1476, 1478, 1475, 2516, 1474, 2515, 169,
+ 4018, 3943, 170, 1754, 1767, 2699, 1480, 1468, 1481, 1482,
+ 2514, 1480, 2513, 1481, 1482, 1479, 1754, 2942, 1480, 101,
+ 1481, 1482, 4176, 1754, 1885, 1886, 161, 160, 189, 102,
+ 3916, 1483, 2138, 2138, 2136, 2136, 1754, 2139, 2875, 1754,
+ 4129, 1754, 1483, 2512, 3900, 2511, 1480, 42, 1481, 1482,
+ 42, 3899, 1480, 1768, 1481, 1482, 3748, 2101, 1480, 1717,
+ 1481, 1482, 1483, 1472, 1469, 1470, 1471, 1476, 1478, 1475,
+ 3746, 1474, 4038, 2027, 1479, 1754, 2875, 4114, 2875, 4093,
+ 2031, 1468, 2033, 2034, 2035, 2036, 2687, 3667, 1501, 2040,
+ 1754, 1497, 1480, 1498, 1481, 1482, 1714, 1480, 1713, 1481,
+ 1482, 2052, 2222, 1483, 2875, 4089, 2236, 1499, 1513, 1514,
+ 1496, 1712, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1510,
+ 1509, 1511, 1512, 4127, 1754, 1483, 85, 3599, 1715, 85,
+ 155, 1887, 158, 2078, 1884, 1754, 156, 157, 4001, 1754,
+ 3948, 1716, 3584, 173, 2108, 3370, 1483, 2058, 2059, 2171,
+ 3638, 4035, 179, 1503, 1504, 1505, 1506, 1507, 1508, 1510,
+ 1509, 1511, 1512, 2114, 1483, 2116, 2117, 2118, 2119, 2120,
+ 2121, 2123, 2125, 2126, 2127, 2128, 2129, 2130, 1483, 2113,
+ 1480, 3367, 1481, 1482, 3300, 2649, 2319, 2320, 2321, 2322,
+ 2323, 1480, 2656, 1481, 1482, 2648, 2342, 110, 2142, 2115,
+ 2341, 3924, 1754, 2344, 2246, 2340, 2347, 2348, 109, 101,
+ 108, 1480, 3299, 1481, 1482, 103, 3271, 4125, 1754, 102,
+ 3275, 3025, 1526, 2186, 2187, 2188, 2189, 3274, 2875, 3912,
+ 3947, 2328, 2330, 3638, 1754, 2875, 3636, 2200, 3994, 1754,
+ 2177, 2365, 2221, 2540, 1754, 3559, 1754, 2781, 1754, 3904,
+ 2238, 1483, 1480, 2958, 1481, 1482, 3992, 1754, 3290, 3289,
+ 3903, 3276, 2945, 2920, 1483, 1711, 3272, 3287, 3288, 103,
+ 2655, 3273, 3285, 3286, 1480, 2647, 1481, 1482, 3285, 3284,
+ 1754, 164, 1483, 1754, 2899, 1754, 2623, 3006, 2423, 2339,
+ 1705, 1711, 2345, 2346, 1483, 1480, 1709, 1481, 1482, 2342,
+ 2613, 1707, 1483, 2412, 1708, 1706, 2605, 1710, 2340, 1860,
+ 2987, 104, 105, 1480, 2604, 1481, 1482, 2980, 2981, 3646,
+ 1501, 2562, 3043, 1771, 2561, 1483, 2453, 1480, 2397, 1481,
+ 1482, 2921, 104, 105, 1754, 2375, 1483, 2376, 1501, 2387,
+ 2054, 2923, 2020, 2107, 1502, 1503, 1504, 1505, 1506, 1507,
+ 1508, 1510, 1509, 1511, 1512, 1981, 3989, 1754, 2875, 2874,
+ 2701, 1104, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1510,
+ 1509, 1511, 1512, 1973, 3971, 1754, 2984, 159, 1963, 2425,
+ 2963, 2462, 2463, 2464, 2465, 2457, 3574, 2458, 2459, 2460,
+ 2461, 2447, 1054, 2448, 1770, 1104, 2891, 2872, 1959, 2363,
+ 1480, 2467, 1481, 1482, 2469, 2470, 2471, 2472, 2429, 2388,
+ 2381, 103, 2382, 1480, 1955, 1481, 1482, 3526, 1754, 2452,
+ 2390, 1954, 2483, 2141, 1754, 95, 1953, 1769, 3521, 2451,
+ 109, 1480, 1272, 1481, 1482, 3556, 1501, 2529, 2639, 2410,
+ 1483, 2489, 2891, 1480, 1483, 1481, 1482, 1479, 2434, 2435,
+ 2433, 1480, 1088, 1481, 1482, 1089, 2450, 2920, 2449, 2541,
+ 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1510, 1509, 1511,
+ 1512, 1860, 1859, 2899, 1480, 2870, 1481, 1482, 4077, 2526,
+ 1802, 1801, 2499, 2898, 4049, 1480, 152, 1481, 1482, 153,
+ 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1510, 1509, 1511,
+ 1512, 3222, 2484, 3555, 1479, 2480, 2473, 2475, 2476, 2875,
+ 2899, 2498, 3552, 2534, 1483, 2503, 2537, 2502, 2538, 3552,
+ 165, 3252, 3505, 2540, 3287, 2921, 3195, 177, 3603, 2436,
+ 2781, 2623, 2554, 4190, 2684, 2623, 3519, 1754, 2484, 2533,
+ 2536, 2532, 1143, 2683, 2899, 1501, 2540, 1483, 2523, 2405,
+ 1758, 1144, 1483, 2366, 2141, 2079, 2063, 2555, 1483, 2558,
+ 2006, 1899, 1483, 2559, 2560, 1789, 1483, 1126, 185, 1502,
+ 1503, 1504, 1505, 1506, 1507, 1508, 1510, 1509, 1511, 1512,
+ 1483, 1755, 1757, 1125, 1483, 3604, 3605, 3606, 1483, 1480,
+ 4155, 1481, 1482, 1480, 2628, 1481, 1482, 4096, 3935, 1043,
+ 1761, 3901, 3311, 1042, 1042, 1042, 3516, 1754, 2565, 3761,
+ 3619, 166, 171, 168, 174, 175, 176, 178, 180, 181,
+ 182, 183, 110, 1536, 3616, 1536, 3597, 184, 186, 187,
+ 188, 3418, 1483, 109, 3417, 108, 1862, 2482, 3572, 3514,
+ 1754, 2643, 3358, 103, 3477, 1754, 3313, 3309, 2988, 1483,
+ 3475, 1754, 2598, 1483, 3471, 1754, 2479, 2955, 3468, 1754,
+ 2342, 1501, 1483, 1480, 2341, 1481, 1482, 1483, 2474, 2646,
+ 2468, 1483, 3466, 1754, 2466, 1483, 3464, 1754, 1988, 1483,
+ 3462, 1754, 95, 1894, 1483, 1502, 1503, 1504, 1505, 1506,
+ 1507, 1508, 1510, 1509, 1511, 1512, 1480, 1890, 1481, 1482,
+ 1483, 1480, 1858, 1481, 1482, 2615, 2666, 1480, 1754, 1481,
+ 1482, 1480, 121, 1481, 1482, 1480, 1216, 1481, 1482, 2954,
+ 2621, 3566, 3567, 2681, 3460, 1754, 3362, 3936, 1483, 1480,
+ 2497, 1481, 1482, 1480, 2629, 1481, 1482, 1480, 1934, 1481,
+ 1482, 3458, 1754, 2379, 4211, 3456, 1754, 2635, 2056, 4209,
+ 2632, 2633, 2634, 1483, 3454, 1754, 4053, 1483, 2108, 3452,
+ 1754, 1483, 4183, 3450, 1754, 679, 4057, 3448, 1754, 3976,
+ 1483, 3446, 1754, 2955, 1483, 3569, 2636, 4033, 2638, 3305,
+ 3304, 1480, 1483, 1481, 1482, 3303, 3222, 2641, 2967, 2642,
+ 1483, 2599, 3444, 1754, 1483, 1935, 1936, 1937, 1480, 1766,
+ 1481, 1482, 1480, 3244, 1481, 1482, 3571, 1483, 3245, 2659,
+ 3241, 1480, 2637, 1481, 1482, 2057, 1480, 3240, 1481, 1482,
+ 1480, 3908, 1481, 1482, 1480, 1056, 1481, 1482, 1480, 3242,
+ 1481, 1482, 3937, 1480, 3243, 1481, 1482, 1483, 2644, 742,
+ 2396, 2825, 2385, 1483, 3560, 3442, 1754, 3200, 3199, 1480,
+ 3621, 1481, 1482, 3440, 1754, 2607, 2608, 4015, 1483, 3739,
+ 2610, 3548, 3438, 1754, 3545, 2695, 3517, 2167, 1483, 2611,
+ 3741, 2813, 3544, 2857, 3424, 1754, 1057, 1480, 3209, 1481,
+ 1482, 2005, 3400, 1754, 1026, 3283, 2846, 1754, 3246, 2938,
+ 2908, 2909, 1042, 2138, 3726, 2136, 3725, 2860, 1483, 2844,
+ 1754, 2959, 1480, 2184, 1481, 1482, 1480, 2591, 1481, 1482,
+ 1480, 1483, 1481, 1482, 2590, 2896, 2897, 1182, 2858, 1480,
+ 2185, 1481, 1482, 1480, 2423, 1481, 1482, 1042, 2916, 2819,
+ 1754, 1480, 2589, 1481, 1482, 2796, 1754, 2588, 2861, 1480,
+ 2863, 1481, 1482, 1480, 2587, 1481, 1482, 1059, 1483, 3724,
+ 2788, 1754, 1483, 2895, 2586, 1060, 1480, 2107, 1481, 1482,
+ 2779, 1754, 1483, 2876, 2585, 1181, 2159, 2148, 2149, 2150,
+ 2151, 2161, 2152, 2153, 2154, 2166, 2162, 2155, 2156, 2163,
+ 2164, 2165, 2157, 2158, 2160, 3378, 1480, 2954, 1481, 1482,
+ 2777, 1754, 1480, 3037, 1481, 1482, 1483, 1722, 2848, 1445,
+ 2885, 2914, 1068, 2764, 1754, 2994, 42, 1480, 129, 1481,
+ 1482, 101, 3550, 1483, 103, 2913, 1067, 1480, 2915, 1481,
+ 1482, 102, 2868, 4225, 2941, 2943, 2971, 1483, 1716, 3212,
+ 3214, 1483, 2104, 2102, 2103, 2888, 2934, 1483, 3215, 2873,
+ 2762, 1754, 2992, 1483, 2760, 1754, 101, 1480, 2918, 1481,
+ 1482, 2602, 103, 4132, 2758, 1754, 102, 4034, 3931, 2922,
+ 1480, 3528, 1481, 1482, 2925, 1483, 110, 2407, 2408, 2489,
+ 2932, 3282, 2912, 2391, 1483, 2935, 2627, 109, 2957, 108,
+ 3003, 2179, 3198, 2960, 2961, 2062, 2180, 103, 2756, 1754,
+ 3197, 2061, 2946, 108, 4000, 3999, 3607, 1480, 1483, 1481,
+ 1482, 1480, 3979, 1481, 1482, 2754, 1754, 1483, 3747, 2956,
+ 3745, 1480, 3744, 1481, 1482, 1483, 3737, 3736, 3617, 2752,
+ 1754, 3549, 2964, 3483, 2242, 2968, 2969, 2970, 2965, 2750,
+ 1754, 110, 1483, 3547, 3000, 2748, 1754, 1483, 3314, 1882,
+ 2524, 1483, 109, 1930, 108, 1480, 1877, 1481, 1482, 3608,
+ 3609, 3610, 110, 2989, 2990, 1066, 109, 2746, 1754, 3538,
+ 4212, 2891, 1480, 109, 1481, 1482, 2744, 1754, 3710, 2999,
+ 3047, 3048, 4213, 4212, 4213, 3067, 1480, 2872, 1481, 1482,
+ 1480, 1483, 1481, 1482, 3101, 1483, 1480, 2685, 1481, 1482,
+ 2742, 1754, 1480, 1483, 1481, 1482, 1931, 1932, 1933, 2740,
+ 1754, 2377, 1483, 3026, 2325, 1783, 3064, 2738, 1754, 1483,
+ 3045, 1775, 114, 115, 1480, 4021, 1481, 1482, 3029, 1483,
+ 3583, 3, 97, 1480, 3479, 1481, 1482, 1, 2076, 2736,
+ 1754, 10, 1034, 3415, 2357, 3082, 3083, 3084, 3085, 3086,
+ 3087, 3088, 3089, 3090, 3091, 2074, 1448, 1480, 9, 1481,
+ 1482, 1755, 2364, 3001, 2075, 3099, 1480, 8, 1481, 1482,
+ 1447, 3587, 3065, 4144, 1480, 695, 1481, 1482, 2367, 1720,
+ 4184, 4140, 4141, 2734, 1754, 1974, 1964, 2732, 1754, 3649,
+ 2293, 1480, 1483, 1481, 1482, 3414, 1480, 3932, 1481, 1482,
+ 1480, 2389, 1481, 1482, 2730, 1754, 1483, 3317, 2530, 3615,
+ 1483, 2725, 1754, 2487, 1483, 1134, 154, 3141, 3049, 3143,
+ 2445, 3406, 3103, 2446, 1483, 3159, 3066, 3035, 4109, 118,
+ 3036, 1092, 117, 1137, 1483, 3154, 3155, 3156, 3157, 1245,
+ 1480, 2979, 1481, 1482, 1480, 2525, 1481, 1482, 1483, 3639,
+ 3046, 2939, 1480, 2454, 1481, 1482, 1808, 1806, 1807, 1805,
+ 1810, 1480, 3177, 1481, 1482, 1809, 4081, 3386, 1480, 2686,
+ 1481, 1482, 3166, 3168, 3484, 2067, 732, 2911, 1480, 726,
+ 1481, 1482, 192, 2423, 2721, 1754, 3092, 2328, 2330, 2328,
+ 2330, 1483, 1797, 1776, 2060, 1176, 685, 3291, 2719, 1754,
+ 2563, 691, 3404, 3139, 1533, 3229, 2842, 87, 2501, 2055,
+ 2423, 2423, 2423, 2423, 2423, 3196, 2841, 3149, 3150, 3151,
+ 3152, 3153, 2926, 1086, 1078, 3177, 2712, 1754, 2378, 2862,
+ 2423, 1085, 3909, 2423, 3230, 3542, 3167, 3208, 3169, 3210,
+ 2837, 1480, 1483, 1481, 1482, 2878, 3176, 1483, 3234, 3213,
+ 3206, 2016, 3251, 4014, 3738, 1480, 4094, 1481, 1482, 1480,
+ 3204, 1481, 1482, 1480, 2936, 1481, 1482, 1483, 3194, 3188,
+ 1772, 1483, 3504, 1480, 2425, 1481, 1482, 1483, 2658, 2174,
+ 3203, 1523, 3201, 1480, 2950, 1481, 1482, 757, 2422, 3216,
+ 3217, 3705, 2094, 755, 754, 752, 3334, 1480, 1045, 1481,
+ 1482, 2425, 2425, 2425, 2425, 2425, 3342, 3253, 3233, 1483,
+ 3254, 1046, 3202, 3236, 3237, 3235, 3239, 1483, 3238, 104,
+ 105, 2425, 3247, 1047, 2425, 1483, 2864, 3255, 3189, 3191,
+ 3193, 2892, 1487, 3261, 2710, 1754, 1486, 963, 2852, 2836,
+ 1480, 1784, 1481, 1482, 1483, 2903, 3292, 2901, 3294, 2900,
+ 2600, 2430, 3295, 3296, 3568, 3293, 1483, 3564, 4136, 2835,
+ 2424, 2420, 2871, 2834, 914, 3346, 913, 764, 756, 2833,
+ 746, 976, 912, 3343, 911, 3344, 3345, 3219, 3009, 2489,
+ 3336, 3315, 3359, 3011, 2937, 3347, 3355, 1464, 3353, 1739,
+ 1742, 1480, 2386, 1481, 1482, 1105, 1480, 3383, 1481, 1482,
+ 3225, 2832, 4040, 2626, 3412, 3225, 1483, 1738, 4047, 2823,
+ 3325, 3371, 3374, 3373, 3633, 3306, 1480, 2822, 1481, 1482,
+ 1480, 2985, 1481, 1482, 3381, 2517, 1480, 69, 1481, 1482,
+ 46, 4009, 3391, 4078, 906, 903, 2821, 3388, 3389, 3707,
+ 3390, 3708, 3709, 3392, 3162, 3394, 3163, 3396, 2820, 4060,
+ 4061, 3407, 3408, 3409, 3410, 3411, 902, 4062, 1480, 2231,
+ 1481, 1482, 1458, 1455, 4157, 2069, 1480, 96, 1481, 1482,
+ 36, 35, 34, 33, 1480, 32, 1481, 1482, 26, 25,
+ 24, 1536, 23, 22, 29, 1536, 19, 2645, 21, 20,
+ 3316, 2650, 18, 1480, 3328, 1481, 1482, 4179, 2817, 4224,
+ 123, 3529, 55, 3531, 52, 1480, 50, 1481, 1482, 131,
+ 130, 53, 49, 1219, 2653, 47, 2654, 3499, 31, 30,
+ 17, 16, 2662, 15, 3503, 14, 2664, 2665, 13, 12,
+ 11, 7, 6, 39, 38, 2671, 2672, 2673, 2674, 2675,
+ 2676, 2677, 2678, 2679, 2680, 37, 2682, 28, 27, 40,
+ 4, 3228, 2972, 2519, 3382, 1480, 0, 1481, 1482, 0,
+ 0, 0, 1717, 2423, 0, 0, 3534, 1483, 0, 2688,
+ 2689, 2690, 2691, 744, 2693, 2694, 3581, 2696, 3530, 3539,
+ 3532, 2698, 3546, 0, 0, 2703, 2704, 0, 2705, 3551,
+ 0, 2708, 2709, 2711, 2713, 2714, 2715, 2716, 2717, 2718,
+ 2720, 2722, 2723, 2724, 2726, 3337, 2728, 2729, 2731, 2733,
+ 2735, 2737, 2739, 2741, 2743, 2745, 2747, 2749, 2751, 2753,
+ 2755, 2757, 2759, 2761, 2763, 2765, 2766, 2767, 3573, 2769,
+ 3575, 2771, 3570, 2773, 2774, 3346, 2776, 2778, 2780, 0,
+ 3576, 0, 2783, 3343, 3536, 3506, 2787, 3508, 3509, 3510,
+ 2792, 2793, 2794, 2795, 2425, 3347, 3582, 1483, 0, 2812,
+ 3598, 0, 3600, 2806, 2807, 2808, 2809, 2810, 2811, 1483,
+ 0, 2815, 2816, 3592, 3593, 3376, 3377, 3563, 1483, 2818,
+ 0, 0, 1065, 1483, 2824, 1071, 1071, 0, 1483, 2827,
+ 2828, 2829, 2830, 2831, 0, 0, 3577, 3578, 0, 0,
+ 2838, 2839, 0, 2840, 0, 1483, 2843, 2845, 2389, 1483,
+ 2847, 0, 0, 3643, 3644, 0, 1480, 0, 1481, 1482,
+ 2859, 1483, 0, 0, 0, 3626, 0, 1483, 0, 3630,
+ 3631, 3632, 1483, 0, 3645, 0, 1483, 0, 0, 0,
+ 0, 1483, 0, 0, 2904, 2907, 2908, 2909, 2905, 2805,
+ 2906, 2910, 0, 0, 3566, 3567, 0, 0, 0, 0,
+ 1483, 2804, 0, 0, 0, 3661, 0, 1483, 0, 0,
+ 2803, 1483, 0, 0, 0, 2802, 0, 0, 0, 0,
+ 2801, 0, 0, 1483, 0, 0, 0, 0, 1483, 0,
+ 0, 0, 0, 3672, 0, 0, 0, 2800, 0, 1483,
+ 0, 2799, 0, 1483, 0, 0, 1480, 0, 1481, 1482,
+ 0, 0, 3694, 2798, 0, 0, 0, 0, 1480, 2797,
+ 1481, 1482, 1483, 0, 2791, 0, 0, 1480, 2790, 1481,
+ 1482, 0, 1480, 2789, 1481, 1482, 1483, 1480, 3723, 1481,
+ 1482, 3730, 0, 3732, 0, 3713, 0, 3714, 3715, 3716,
+ 1483, 0, 2786, 3703, 1480, 1483, 1481, 1482, 1480, 2785,
+ 1481, 1482, 0, 2784, 0, 0, 3229, 0, 3733, 87,
+ 1480, 3229, 1481, 1482, 0, 2782, 1480, 0, 1481, 1482,
+ 2775, 1480, 0, 1481, 1482, 1480, 1483, 1481, 1482, 0,
+ 1480, 2772, 1481, 1482, 0, 2770, 0, 1483, 0, 3666,
+ 2138, 1483, 2136, 0, 3763, 3734, 3743, 3755, 3742, 1480,
+ 3753, 1481, 1482, 0, 2768, 3750, 1480, 3752, 1481, 1482,
+ 1480, 0, 1481, 1482, 1483, 0, 0, 0, 2727, 0,
+ 3622, 3623, 1480, 0, 1481, 1482, 3915, 1480, 0, 1481,
+ 1482, 0, 2707, 3767, 0, 0, 0, 2706, 1480, 0,
+ 1481, 1482, 1480, 0, 1481, 1482, 0, 0, 0, 0,
+ 42, 2904, 2907, 2908, 2909, 2905, 0, 2906, 2910, 0,
+ 0, 1480, 0, 1481, 1482, 0, 3907, 3906, 2702, 0,
+ 0, 0, 0, 0, 3934, 1480, 3922, 1481, 1482, 2700,
+ 0, 3905, 0, 2692, 3926, 3927, 0, 0, 0, 1480,
+ 0, 1481, 1482, 0, 1480, 0, 1481, 1482, 0, 3973,
+ 3974, 3077, 3078, 3079, 3080, 3081, 2663, 3757, 3764, 3765,
+ 0, 0, 3731, 0, 0, 3917, 3918, 3919, 2138, 0,
+ 2136, 3096, 3977, 0, 0, 1480, 0, 1481, 1482, 0,
+ 0, 0, 0, 0, 0, 0, 1480, 0, 1481, 1482,
+ 1480, 0, 1481, 1482, 0, 0, 0, 0, 0, 3225,
+ 0, 0, 3980, 0, 4022, 3229, 3983, 0, 3759, 0,
+ 4013, 0, 0, 1480, 0, 1481, 1482, 0, 0, 1554,
+ 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564,
+ 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1574, 1575,
+ 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585,
+ 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595,
+ 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605,
+ 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615,
+ 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625,
+ 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635,
+ 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645,
+ 1646, 1647, 1648, 1649, 1650, 1651, 1653, 1654, 1655, 1656,
+ 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666,
+ 1667, 1668, 1674, 1675, 1676, 1677, 1691, 1692, 1693, 1694,
+ 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704,
+ 3978, 4023, 3228, 4007, 3997, 4006, 1483, 3228, 1744, 0,
+ 0, 4003, 0, 4005, 4041, 0, 0, 0, 0, 0,
+ 0, 0, 1752, 0, 0, 1745, 3910, 0, 0, 0,
+ 0, 3231, 87, 0, 0, 0, 4026, 0, 1717, 1483,
+ 0, 0, 0, 4025, 0, 0, 1744, 0, 0, 3249,
+ 2383, 2384, 1751, 1749, 1750, 1746, 0, 1747, 0, 4030,
+ 1752, 4043, 0, 1745, 0, 0, 0, 4046, 0, 0,
+ 4048, 0, 3914, 0, 0, 0, 0, 0, 0, 0,
+ 1748, 0, 0, 0, 0, 0, 0, 0, 1740, 1741,
+ 1751, 1749, 1750, 1746, 4055, 1747, 0, 0, 2657, 0,
+ 0, 0, 4065, 0, 0, 0, 0, 0, 0, 1484,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1748, 0,
+ 0, 0, 0, 42, 0, 0, 4066, 0, 0, 4067,
+ 4091, 2652, 0, 0, 0, 87, 0, 0, 0, 0,
+ 1542, 0, 0, 0, 0, 0, 0, 0, 4076, 0,
+ 0, 0, 0, 0, 0, 1480, 0, 1481, 1482, 0,
+ 0, 4085, 0, 0, 1717, 0, 0, 0, 4027, 4097,
+ 0, 0, 0, 4095, 0, 3934, 4111, 3380, 4100, 4108,
+ 4105, 4102, 4101, 4099, 4104, 4103, 0, 0, 1480, 0,
+ 1481, 1482, 0, 0, 0, 0, 0, 0, 0, 3397,
+ 3398, 3228, 3399, 3401, 3403, 4130, 0, 0, 4153, 0,
+ 0, 0, 0, 4143, 0, 4135, 0, 4122, 4148, 0,
+ 0, 0, 0, 0, 4161, 0, 42, 0, 4163, 0,
+ 3416, 0, 0, 4174, 0, 3419, 0, 3421, 3422, 3423,
+ 3425, 3426, 3427, 3428, 3429, 3430, 3431, 3432, 3433, 3434,
+ 3435, 3436, 3437, 3439, 3441, 3443, 3445, 3447, 3449, 3451,
+ 3453, 3455, 3457, 3459, 3461, 3463, 3465, 3467, 3469, 3470,
+ 3472, 3473, 3474, 3476, 4122, 4194, 3478, 2016, 3480, 3481,
+ 3482, 4193, 4204, 3486, 3487, 3488, 3489, 3490, 3491, 3492,
+ 3493, 3494, 3495, 3496, 4210, 2138, 4208, 2136, 4197, 4207,
+ 4206, 4203, 3502, 4178, 4173, 4218, 3507, 4092, 4032, 4087,
+ 3511, 3512, 0, 3513, 3515, 4226, 3518, 3520, 3225, 3522,
+ 3523, 3524, 3525, 4234, 4232, 0, 0, 0, 0, 3533,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4051, 4243, 4244, 3974, 4242, 0, 0, 0,
+ 0, 4122, 0, 2138, 0, 2136, 0, 4241, 0, 0,
+ 4039, 0, 0, 0, 3557, 3558, 0, 0, 3562, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4169, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4086,
+ 1774, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 86, 44, 45, 88, 0, 0, 1863, 0,
+ 0, 0, 0, 3637, 0, 0, 0, 0, 0, 0,
+ 0, 92, 0, 0, 0, 48, 76, 77, 0, 74,
+ 78, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 75, 0, 0, 0, 0, 0, 1723, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3656, 0,
+ 0, 3660, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 62, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 95, 0, 1024, 0, 0,
+ 2332, 0, 0, 1025, 0, 3673, 0, 0, 0, 0,
+ 0, 0, 4191, 2137, 0, 0, 677, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1029, 0, 0, 0,
+ 0, 0, 0, 0, 0, 83, 2021, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3696,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1100, 0,
+ 0, 0, 3704, 0, 0, 0, 0, 0, 0, 3711,
+ 0, 0, 982, 983, 984, 985, 986, 987, 988, 989,
+ 990, 991, 992, 993, 994, 995, 996, 997, 998, 999,
+ 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
+ 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019,
+ 1020, 1021, 1022, 1023, 0, 0, 0, 0, 0, 0,
+ 51, 54, 57, 56, 59, 0, 73, 0, 0, 82,
+ 79, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 61, 91, 90, 0, 0, 71, 72,
+ 58, 0, 0, 0, 0, 0, 80, 81, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3923, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3930, 0, 0,
+ 63, 64, 0, 65, 66, 67, 68, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3940, 3941, 3942,
+ 0, 3944, 0, 3945, 3946, 0, 0, 0, 0, 3949,
+ 3950, 3951, 3952, 3953, 3954, 3955, 3956, 3957, 3958, 3959,
+ 3960, 3961, 3962, 3963, 3964, 3965, 3966, 3967, 3968, 3969,
+ 3970, 0, 3972, 3975, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2089, 2090, 2091, 2092, 60, 3984, 3985,
+ 3986, 3987, 3988, 3990, 3991, 3993, 3995, 3996, 3998, 2105,
+ 0, 0, 4002, 0, 0, 0, 4004, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2144, 2145, 0, 0, 0, 0,
+ 2168, 4031, 0, 2172, 2173, 0, 0, 0, 2178, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2190, 2191, 2192, 2193, 2194, 2195, 2196,
+ 2197, 2198, 2199, 0, 2201, 0, 0, 89, 2223, 2224,
+ 2225, 2226, 2227, 2228, 2229, 2230, 2232, 0, 2237, 0,
+ 2239, 2240, 2241, 0, 2243, 2244, 2245, 0, 2247, 2248,
+ 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258,
+ 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268,
+ 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278,
+ 2279, 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288,
+ 2289, 2290, 2291, 2292, 2296, 2297, 2298, 2299, 2300, 2301,
+ 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311,
+ 2312, 2313, 2314, 2315, 2316, 2317, 2318, 0, 0, 0,
+ 0, 0, 2324, 0, 2326, 0, 2333, 2334, 2335, 2336,
+ 2337, 2338, 0, 0, 0, 0, 0, 94, 0, 0,
+ 0, 0, 0, 0, 0, 2349, 2350, 2351, 2352, 2353,
+ 2354, 2355, 2356, 0, 2358, 2359, 2360, 2361, 2362, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 190, 0, 0, 1071, 4177, 0, 0, 0, 4056, 0,
+ 0, 0, 0, 1826, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 129, 0, 151, 0, 0, 0, 0,
+ 0, 0, 4071, 0, 2403, 2404, 0, 0, 4074, 172,
+ 4075, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 70, 0, 0, 0, 0, 0,
+ 2442, 0, 0, 4090, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 162, 0, 190, 0, 0, 1826, 150,
+ 0, 0, 1220, 0, 1226, 0, 1881, 0, 0, 4116,
+ 4117, 0, 0, 0, 959, 0, 0, 0, 129, 169,
+ 151, 0, 170, 4124, 4126, 4128, 0, 0, 0, 0,
+ 0, 0, 0, 0, 172, 0, 0, 0, 0, 0,
+ 0, 4134, 2485, 0, 138, 139, 161, 160, 189, 0,
+ 0, 0, 0, 4156, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1454, 0, 162, 0,
+ 195, 0, 0, 195, 150, 0, 0, 730, 0, 0,
+ 0, 0, 736, 0, 0, 0, 0, 0, 0, 0,
+ 1813, 4175, 0, 195, 169, 0, 0, 170, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 195,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1885,
+ 1886, 161, 160, 189, 0, 4198, 4200, 4202, 0, 0,
+ 0, 0, 0, 0, 736, 195, 736, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 155, 136, 158, 143, 135, 1813, 156, 157, 4223, 0,
+ 0, 0, 0, 173, 0, 0, 0, 0, 0, 0,
+ 0, 0, 179, 144, 1827, 0, 4235, 4236, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 147, 145, 140,
+ 141, 142, 146, 0, 0, 0, 0, 0, 0, 137,
+ 0, 0, 0, 0, 0, 0, 0, 0, 148, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 155, 1887, 158, 0, 1884,
+ 0, 156, 157, 0, 0, 0, 0, 0, 173, 1827,
+ 1840, 1843, 1844, 1845, 1846, 1847, 1848, 179, 1849, 1850,
+ 1852, 1853, 1851, 1854, 1855, 1828, 1829, 1830, 1831, 1811,
+ 1812, 1841, 0, 1814, 0, 1815, 1816, 1817, 1818, 1819,
+ 1820, 1821, 1822, 1823, 0, 0, 1824, 1832, 1833, 1834,
+ 1835, 0, 1836, 1837, 1838, 1839, 0, 0, 1825, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 164, 0, 0, 0, 1840, 1843, 1844, 1845, 1846,
+ 1847, 1848, 0, 1849, 1850, 1852, 1853, 1851, 1854, 1855,
+ 1828, 1829, 1830, 1831, 1811, 1812, 1841, 0, 1814, 0,
+ 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 0,
+ 0, 1824, 1832, 1833, 1834, 1835, 0, 1836, 1837, 1838,
+ 1839, 0, 0, 1825, 0, 0, 0, 0, 0, 0,
+ 2661, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2667, 2668, 2669, 2670, 0, 0, 164, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 159, 0, 0,
+ 0, 0, 1786, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1542, 0, 0, 0, 0,
+ 0, 1803, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 159, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1842, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1944, 0, 152, 0, 0, 153,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1989,
+ 165, 0, 0, 0, 0, 0, 0, 177, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2017, 0, 1842, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2028, 0, 0, 0, 0, 0, 0, 2032,
+ 0, 152, 0, 0, 153, 0, 0, 0, 185, 1774,
+ 2043, 2044, 2045, 2046, 2047, 2048, 2049, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 195, 0, 0, 195, 0, 0, 0,
- 729, 0, 0, 0, 4189, 735, 0, 0, 1717, 0,
- 0, 0, 0, 0, 0, 0, 195, 0, 0, 0,
+ 0, 0, 0, 0, 0, 165, 0, 0, 0, 0,
+ 0, 0, 177, 0, 0, 0, 0, 0, 0, 0,
+ 0, 166, 171, 168, 174, 175, 176, 178, 180, 181,
+ 182, 183, 0, 0, 0, 0, 0, 184, 186, 187,
+ 188, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 185, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 195, 3694, 0, 0, 0, 0, 51, 54,
- 57, 56, 59, 2021, 73, 1023, 3702, 82, 79, 0,
- 0, 1024, 0, 3709, 0, 0, 0, 735, 195, 735,
- 0, 2137, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 61, 91, 90, 0, 0, 71, 72, 58, 0,
- 0, 0, 0, 0, 80, 81, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 195,
+ 0, 195, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 166, 171, 168, 174,
+ 175, 176, 178, 180, 181, 182, 183, 0, 0, 0,
+ 0, 0, 184, 186, 187, 188, 0, 0, 736, 0,
+ 736, 736, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 736, 195, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 64, 0,
- 65, 66, 67, 68, 0, 0, 0, 0, 0, 0,
- 981, 982, 983, 984, 985, 986, 987, 988, 989, 990,
- 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000,
- 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010,
- 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020,
- 1021, 1022, 3921, 0, 0, 0, 0, 0, 0, 0,
- 0, 3928, 0, 0, 60, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 3938, 3939, 3940, 0, 3942, 0, 3943, 3944, 0,
- 0, 0, 0, 3947, 3948, 3949, 3950, 3951, 3952, 3953,
- 3954, 3955, 3956, 3957, 3958, 3959, 3960, 3961, 3962, 3963,
- 3964, 3965, 3966, 3967, 3968, 0, 3970, 3973, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3692, 0,
- 0, 0, 3982, 3983, 3984, 3985, 3986, 3988, 3989, 3991,
- 3993, 3994, 3996, 0, 0, 0, 4000, 0, 0, 0,
- 4002, 0, 0, 0, 89, 0, 0, 0, 0, 0,
- 2089, 2090, 2091, 2092, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2105, 0, 0, 0,
- 0, 0, 0, 0, 0, 4029, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2144, 2145, 0, 0, 0, 0, 2168, 0, 0,
- 2172, 2173, 0, 0, 0, 2178, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199,
- 0, 2201, 0, 0, 0, 2223, 2224, 2225, 2226, 2227,
- 2228, 2229, 2230, 2232, 94, 2237, 0, 2239, 2240, 2241,
- 0, 2243, 2244, 2245, 0, 2247, 2248, 2249, 2250, 2251,
- 2252, 2253, 2254, 2255, 2256, 2257, 2258, 2259, 2260, 2261,
- 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271,
- 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281,
- 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289, 2290, 2291,
- 2292, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304,
- 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314,
- 2315, 2316, 2317, 2318, 0, 0, 0, 0, 0, 2324,
- 0, 2326, 0, 2333, 2334, 2335, 2336, 2337, 2338, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 70, 2349, 2350, 2351, 2352, 2353, 2354, 2355, 2356,
- 0, 2358, 2359, 2360, 2361, 2362, 4011, 0, 0, 0,
- 0, 0, 4054, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 4069, 0, 0, 0,
- 0, 1070, 4072, 0, 4073, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 4088, 0, 0,
- 0, 0, 2403, 2404, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 4175, 0, 0, 0, 0, 0, 190,
- 0, 0, 1826, 4114, 4115, 0, 0, 0, 2442, 0,
- 0, 195, 0, 195, 0, 0, 0, 4122, 4124, 4126,
- 0, 0, 129, 0, 151, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 4132, 0, 0, 172, 0,
- 0, 0, 0, 0, 0, 0, 0, 4154, 0, 0,
- 735, 0, 735, 735, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2485, 0, 162, 0, 735, 195, 0, 1023, 150, 0,
- 2332, 0, 0, 1024, 0, 4173, 0, 0, 0, 0,
- 0, 0, 0, 2137, 1717, 0, 0, 0, 169, 0,
- 0, 170, 0, 1527, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 4196,
- 4198, 4200, 0, 138, 139, 161, 160, 189, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4053, 0, 4221, 0, 0, 0, 0, 0, 4063, 1813,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4233, 4234, 981, 982, 983, 984, 985, 986, 987, 988,
- 989, 990, 991, 992, 993, 994, 995, 996, 997, 998,
- 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008,
- 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018,
- 1019, 1020, 1021, 1022, 0, 0, 0, 0, 0, 0,
- 1717, 0, 0, 0, 0, 0, 0, 0, 0, 155,
- 136, 158, 143, 135, 0, 156, 157, 0, 0, 0,
- 0, 0, 173, 1827, 0, 0, 0, 0, 0, 0,
- 0, 179, 144, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 147, 145, 140, 141,
- 142, 146, 0, 0, 0, 0, 0, 0, 137, 0,
- 0, 0, 0, 0, 0, 0, 0, 148, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1527, 0, 1840, 1843,
- 1844, 1845, 1846, 1847, 1848, 0, 1849, 1850, 1852, 1853,
- 1851, 1854, 1855, 1828, 1829, 1830, 1831, 1811, 1812, 1841,
- 0, 1814, 0, 1815, 1816, 1817, 1818, 1819, 1820, 1821,
- 1822, 1823, 0, 0, 1824, 1832, 1833, 1834, 1835, 0,
- 1836, 1837, 1838, 1839, 0, 0, 1825, 0, 0, 0,
- 0, 0, 0, 0, 195, 0, 0, 0, 735, 735,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 164,
- 0, 0, 0, 0, 0, 0, 0, 195, 2660, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2666, 2667,
- 2668, 2669, 0, 0, 0, 0, 0, 0, 735, 0,
+ 0, 1528, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2082, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3042, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3068,
+ 3069, 3070, 0, 0, 3072, 0, 0, 3074, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3093, 3094, 3095,
+ 0, 0, 0, 0, 0, 0, 3100, 0, 0, 0,
+ 0, 3102, 0, 0, 3104, 3105, 3106, 0, 0, 0,
+ 3107, 3108, 0, 0, 3109, 0, 3110, 0, 0, 0,
+ 0, 0, 0, 3111, 0, 3112, 0, 0, 0, 3113,
+ 0, 3114, 0, 0, 3115, 0, 3116, 0, 3117, 0,
+ 3118, 0, 3119, 0, 3120, 0, 3121, 0, 3122, 0,
+ 3123, 0, 3124, 0, 3125, 0, 3126, 0, 3127, 0,
+ 3128, 0, 3129, 0, 3130, 0, 3131, 0, 3132, 0,
+ 0, 0, 3133, 0, 3134, 0, 3135, 0, 0, 3136,
+ 0, 3137, 0, 3138, 0, 2296, 3140, 0, 0, 3142,
+ 0, 0, 3144, 3145, 3146, 3147, 0, 0, 0, 0,
+ 3148, 2296, 2296, 2296, 2296, 2296, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3158, 0, 0, 0,
+ 0, 0, 0, 0, 3171, 0, 0, 3175, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3178, 3179, 3180, 3181,
+ 3182, 3183, 0, 0, 0, 3184, 3185, 0, 3186, 0,
+ 3187, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 195, 0, 0, 0, 736, 736, 0, 0,
+ 0, 0, 0, 0, 1071, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 195, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3220, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 736, 0, 0, 195,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3250, 736, 0, 2409, 0, 0, 0, 0, 195, 0,
+ 0, 2413, 736, 2416, 0, 0, 2082, 0, 0, 0,
+ 0, 0, 736, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 736, 0, 736, 0, 0,
+ 0, 0, 0, 0, 0, 736, 0, 0, 1528, 736,
+ 3312, 0, 736, 736, 736, 736, 0, 736, 0, 736,
+ 736, 0, 736, 736, 736, 736, 736, 736, 0, 0,
+ 0, 0, 0, 0, 0, 1528, 736, 736, 1528, 736,
+ 1528, 195, 736, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 195, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 735, 0, 0, 0, 0, 0, 0,
- 195, 0, 0, 0, 735, 0, 1826, 0, 0, 0,
- 0, 0, 0, 1541, 735, 0, 0, 0, 0, 0,
- 0, 190, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2977, 0, 0, 0, 0, 735, 0, 735,
- 0, 0, 0, 0, 129, 159, 151, 735, 0, 0,
- 1527, 735, 0, 0, 735, 735, 735, 735, 0, 735,
- 172, 735, 735, 0, 735, 735, 735, 735, 735, 735,
- 0, 0, 0, 0, 0, 0, 0, 1527, 735, 735,
- 1527, 735, 1527, 195, 735, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 162, 0, 0, 0, 0, 0,
- 150, 0, 0, 195, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 735, 0, 195, 0,
- 169, 0, 0, 170, 0, 0, 0, 0, 0, 735,
- 0, 1842, 735, 0, 195, 195, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1885, 1886, 161, 160, 189,
- 0, 195, 0, 0, 152, 0, 0, 153, 195, 0,
- 0, 0, 0, 1813, 0, 0, 0, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 735, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1774, 165, 0,
- 0, 0, 0, 0, 0, 177, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 185, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1827, 0, 0,
- 0, 155, 1887, 158, 0, 1884, 0, 156, 157, 0,
- 0, 0, 0, 0, 173, 0, 0, 0, 0, 0,
- 0, 0, 0, 179, 0, 0, 0, 0, 0, 166,
- 171, 168, 174, 175, 176, 178, 180, 181, 182, 183,
- 0, 0, 0, 0, 0, 184, 186, 187, 188, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1840, 1843, 1844, 1845, 1846, 1847, 1848, 0,
- 1849, 1850, 1852, 1853, 1851, 1854, 1855, 1828, 1829, 1830,
- 1831, 1811, 1812, 1841, 0, 1814, 0, 1815, 1816, 1817,
- 1818, 1819, 1820, 1821, 1822, 1823, 735, 735, 1824, 1832,
- 1833, 1834, 1835, 0, 1836, 1837, 1838, 1839, 0, 0,
- 1825, 735, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 195, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 736, 0, 195, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 736, 0, 0,
+ 736, 0, 195, 195, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3405, 0, 195,
+ 0, 0, 0, 0, 0, 0, 195, 0, 0, 0,
+ 0, 0, 0, 0, 0, 195, 195, 195, 195, 195,
+ 195, 195, 195, 195, 736, 3420, 0, 0, 0, 1024,
+ 0, 0, 0, 0, 0, 1025, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2137, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2082, 0, 0, 0,
+ 0, 0, 0, 2575, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2596, 2597, 0, 0, 2601, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2606, 0, 0, 0, 0, 0, 0, 2609, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 164, 0, 0, 0, 0, 0, 0, 0, 3040,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 735, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1527, 0, 0, 0, 3066, 3067, 3068, 0,
- 0, 3070, 0, 0, 3072, 0, 0, 0, 0, 0,
- 1527, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 3091, 3092, 3093, 0, 0, 0,
- 0, 0, 0, 3098, 0, 0, 0, 0, 3100, 0,
- 0, 3102, 3103, 3104, 0, 0, 0, 3105, 3106, 0,
- 0, 3107, 0, 3108, 0, 0, 0, 159, 0, 0,
- 3109, 0, 3110, 0, 0, 0, 3111, 0, 3112, 0,
- 0, 3113, 0, 3114, 0, 3115, 0, 3116, 0, 3117,
- 0, 3118, 0, 3119, 0, 3120, 0, 3121, 0, 3122,
- 0, 3123, 0, 3124, 0, 3125, 0, 3126, 0, 3127,
- 0, 3128, 0, 3129, 0, 3130, 0, 0, 0, 3131,
- 0, 3132, 0, 3133, 0, 0, 3134, 0, 3135, 0,
- 3136, 0, 2296, 3138, 0, 1842, 3140, 0, 0, 3142,
- 3143, 3144, 3145, 0, 0, 0, 0, 3146, 2296, 2296,
- 2296, 2296, 2296, 0, 0, 0, 2343, 0, 0, 0,
- 0, 0, 0, 3156, 0, 0, 0, 0, 0, 0,
- 0, 3169, 0, 0, 3173, 0, 152, 0, 0, 153,
- 0, 0, 0, 3176, 3177, 3178, 3179, 3180, 3181, 0,
- 0, 0, 3182, 3183, 0, 3184, 0, 3185, 0, 0,
- 0, 195, 0, 0, 0, 0, 735, 0, 0, 0,
- 165, 0, 0, 0, 0, 0, 0, 177, 0, 0,
- 0, 1070, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 195, 0, 0, 735,
- 0, 0, 3218, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 195, 0, 0, 0, 735, 185, 0,
- 2343, 195, 0, 195, 0, 195, 195, 3248, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 735, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2612, 982, 983, 984, 985, 986, 987,
+ 988, 989, 990, 991, 992, 993, 994, 995, 996, 997,
+ 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007,
+ 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017,
+ 1018, 1019, 1020, 1021, 1022, 1023, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 166, 171, 168, 174, 175, 176, 178, 180, 181,
- 182, 183, 0, 0, 0, 0, 0, 184, 186, 187,
- 188, 0, 0, 0, 0, 0, 0, 3310, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 735, 0,
- 0, 0, 0, 0, 0, 735, 735, 735, 195, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 735, 0, 0, 0,
- 0, 0, 735, 735, 0, 0, 735, 0, 735, 0,
- 0, 0, 0, 0, 735, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 736, 736, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 736,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 195, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3618, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 735,
- 0, 0, 0, 3403, 735, 0, 0, 0, 735, 735,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 957, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 3418, 190, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1881, 0, 0, 195, 0, 0, 0,
- 0, 0, 0, 195, 0, 129, 0, 151, 0, 0,
- 0, 0, 0, 0, 195, 195, 0, 0, 195, 0,
- 195, 172, 0, 0, 0, 0, 0, 0, 0, 0,
- 195, 0, 712, 0, 0, 0, 0, 195, 734, 0,
+ 0, 0, 0, 0, 0, 0, 3642, 0, 0, 0,
+ 736, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1528, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1528, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 162, 0, 0, 0, 0,
- 0, 150, 0, 195, 0, 0, 0, 0, 0, 0,
- 195, 0, 0, 0, 0, 735, 0, 0, 0, 0,
- 0, 169, 0, 0, 170, 0, 0, 0, 0, 0,
- 734, 0, 734, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1885, 1886, 161, 160,
- 189, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3662, 0, 3663, 0, 3664, 0,
+ 3665, 0, 0, 0, 0, 0, 0, 0, 3668, 3669,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3674, 0,
+ 0, 958, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3675, 0, 3676, 0, 3677, 0, 3678, 0,
+ 3679, 0, 3680, 0, 3681, 0, 3682, 0, 3683, 0,
+ 3684, 0, 3685, 0, 3686, 0, 3687, 0, 3688, 0,
+ 3689, 0, 3690, 0, 0, 3691, 0, 0, 0, 3692,
+ 0, 3693, 0, 0, 0, 0, 0, 3695, 0, 0,
+ 0, 0, 0, 713, 0, 0, 0, 0, 0, 735,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3712,
+ 0, 0, 0, 0, 2343, 0, 0, 0, 3717, 0,
+ 3718, 3719, 0, 3720, 0, 3721, 0, 0, 0, 0,
+ 3722, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1527,
- 0, 2343, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 735, 0, 735, 0, 0, 0, 3751, 195, 0,
+ 0, 0, 0, 736, 0, 0, 0, 0, 0, 0,
+ 3760, 0, 0, 3762, 0, 0, 2917, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3766, 0, 0, 0, 0,
+ 0, 0, 0, 195, 0, 0, 736, 0, 0, 0,
+ 0, 3902, 0, 0, 0, 0, 0, 0, 0, 0,
+ 195, 0, 0, 0, 736, 0, 0, 2343, 195, 0,
+ 195, 0, 195, 195, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 736, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2966, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 3616,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 155, 1887, 158, 0, 1884, 0, 156, 157,
- 0, 0, 3640, 0, 0, 173, 0, 0, 0, 0,
- 0, 0, 0, 0, 179, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 736, 0, 0, 0, 0,
+ 0, 0, 736, 736, 736, 195, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3014, 3015, 3016,
+ 3017, 3018, 3019, 736, 0, 0, 0, 0, 0, 736,
+ 736, 0, 0, 736, 0, 736, 0, 0, 0, 0,
+ 4012, 736, 0, 0, 0, 0, 2082, 3030, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3038, 0, 0, 0, 0, 736, 0, 0, 0,
+ 0, 736, 0, 0, 0, 736, 736, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3660, 0, 3661, 0, 3662, 0, 3663, 0, 0, 0,
- 0, 0, 0, 0, 3666, 3667, 0, 0, 0, 0,
- 0, 0, 0, 0, 3672, 0, 0, 914, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3673, 0,
- 3674, 0, 3675, 0, 3676, 0, 3677, 0, 3678, 0,
- 3679, 0, 3680, 0, 3681, 0, 3682, 0, 3683, 0,
- 3684, 0, 3685, 0, 3686, 0, 3687, 0, 3688, 0,
- 0, 3689, 0, 0, 0, 3690, 0, 3691, 0, 0,
- 0, 0, 164, 3693, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 195, 733, 0, 0, 0, 0,
- 0, 0, 195, 0, 0, 3710, 0, 0, 0, 0,
- 0, 0, 0, 735, 3715, 0, 3716, 3717, 0, 3718,
- 0, 3719, 0, 0, 0, 0, 3720, 735, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1095, 0, 1102,
- 0, 195, 0, 3749, 0, 0, 195, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 3758, 0, 0, 3760,
- 0, 0, 0, 0, 0, 0, 0, 0, 159, 0,
- 0, 3764, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3900, 0, 0,
+ 0, 0, 0, 195, 0, 0, 0, 0, 0, 0,
+ 195, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 195, 195, 0, 0, 195, 0, 195, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 195, 0, 0,
+ 0, 0, 0, 0, 195, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 195, 0, 0, 0, 0, 0, 0, 195, 0, 0,
+ 0, 0, 736, 95, 0, 0, 1024, 0, 0, 0,
+ 0, 964, 1025, 977, 978, 979, 965, 0, 0, 966,
+ 967, 0, 968, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 973, 0,
+ 980, 981, 0, 0, 0, 0, 0, 4054, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 735, 0, 0, 0, 0,
- 0, 195, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 735, 0, 0, 0, 0, 0, 0, 735,
- 1723, 0, 0, 735, 735, 0, 0, 0, 735, 0,
+ 0, 0, 0, 0, 0, 0, 1528, 0, 2343, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3348,
+ 3349, 0, 0, 4068, 0, 0, 4069, 0, 4070, 0,
+ 0, 982, 983, 984, 985, 986, 987, 988, 989, 990,
+ 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000,
+ 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010,
+ 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020,
+ 1021, 1022, 1023, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1527, 735, 0, 152, 0, 0,
- 153, 0, 0, 0, 0, 0, 0, 195, 195, 195,
- 195, 195, 195, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 676,
- 0, 165, 0, 0, 0, 195, 195, 0, 177, 0,
- 0, 0, 0, 0, 0, 0, 4010, 0, 0, 1028,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 195, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 185,
- 0, 0, 0, 0, 0, 0, 735, 0, 0, 0,
- 0, 1099, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 734, 1438, 734, 734, 0, 0, 0,
- 0, 0, 166, 171, 168, 174, 175, 176, 178, 180,
- 181, 182, 183, 0, 0, 0, 735, 734, 184, 186,
- 187, 188, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3350, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4154, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3302, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4170,
+ 0, 4171, 0, 4172, 0, 0, 0, 0, 0, 0,
+ 0, 3340, 0, 0, 0, 735, 1439, 735, 735, 0,
+ 0, 0, 0, 0, 0, 3354, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3351, 3352, 0, 0, 735,
+ 0, 0, 0, 0, 0, 0, 3372, 0, 0, 3375,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1527, 0,
+ 0, 195, 0, 4221, 0, 4222, 0, 0, 0, 195,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 736, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 736, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1526, 0, 0, 0,
+ 929, 0, 0, 0, 0, 0, 933, 0, 195, 0,
+ 930, 931, 0, 195, 0, 932, 934, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 915, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 736, 0, 0, 0, 0, 0, 195, 0,
+ 0, 0, 0, 0, 3535, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 734, 736,
+ 0, 0, 0, 0, 0, 0, 736, 0, 0, 0,
+ 736, 736, 0, 0, 0, 736, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1528, 736, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 195, 195, 195, 195, 195, 195,
+ 1096, 0, 1103, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3596,
+ 0, 0, 0, 195, 195, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3611,
+ 0, 3612, 3613, 3614, 0, 0, 0, 0, 195, 0,
+ 0, 0, 0, 735, 735, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 736, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 735, 0, 4052, 0, 0, 0, 0, 0, 0,
0, 0, 0, 735, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 735, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 735,
+ 0, 0, 0, 0, 736, 0, 0, 0, 0, 735,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 735, 0, 0, 0, 0, 4066,
- 0, 0, 4067, 0, 4068, 0, 0, 0, 0, 195,
- 0, 0, 735, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 735, 0, 0, 0,
- 1527, 0, 0, 735, 735, 1527, 195, 195, 195, 195,
- 195, 0, 0, 0, 0, 0, 0, 0, 195, 0,
- 0, 0, 0, 0, 195, 0, 195, 0, 0, 195,
- 195, 195, 0, 0, 0, 0, 0, 0, 0, 1526,
+ 0, 0, 735, 0, 735, 0, 0, 0, 0, 0,
+ 0, 0, 735, 0, 0, 1527, 735, 0, 0, 735,
+ 735, 735, 735, 0, 735, 0, 735, 735, 0, 735,
+ 735, 735, 735, 735, 735, 0, 0, 0, 0, 0,
+ 0, 0, 1527, 735, 735, 1527, 735, 1527, 0, 735,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 195, 0, 4152, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 735, 0, 0,
- 1527, 0, 0, 0, 0, 735, 0, 0, 0, 0,
- 195, 734, 734, 0, 0, 4168, 0, 4169, 0, 4170,
- 0, 0, 0, 0, 195, 0, 0, 0, 0, 0,
- 1283, 0, 1283, 1283, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 195, 0, 0, 195, 0, 0,
- 0, 734, 0, 0, 1452, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 734, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 734, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 734, 0, 4219,
- 0, 4220, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 734, 0, 734, 0, 0, 0, 0, 0, 0, 0,
- 734, 0, 0, 1526, 734, 0, 0, 734, 734, 734,
- 734, 0, 734, 0, 734, 734, 0, 734, 734, 734,
- 734, 734, 734, 0, 0, 0, 0, 0, 0, 0,
- 1526, 734, 734, 1526, 734, 1526, 0, 734, 0, 0,
+ 0, 735, 0, 0, 0, 0, 0, 0, 0, 736,
+ 0, 0, 0, 0, 735, 0, 0, 735, 0, 0,
+ 0, 736, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 735, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 734,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 734, 0, 0, 734, 0, 0, 0, 0,
+ 0, 0, 736, 0, 0, 0, 0, 0, 0, 0,
+ 0, 735, 0, 0, 0, 0, 0, 195, 0, 0,
+ 736, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 736, 0, 0, 0, 1528, 0,
+ 0, 736, 736, 1528, 195, 195, 195, 195, 195, 0,
+ 0, 0, 0, 0, 0, 0, 195, 0, 0, 0,
+ 0, 0, 195, 0, 195, 0, 0, 195, 195, 195,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 195, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 736, 0, 0, 1528, 0,
+ 0, 0, 0, 736, 0, 0, 0, 0, 195, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 195, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1219, 0, 1225, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 734,
+ 0, 0, 0, 195, 0, 0, 195, 0, 0, 0,
+ 0, 735, 735, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 735, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 195, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 735, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1527, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2146, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1527, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 736, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1284, 0, 1284, 1284, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 1453, 0,
- 0, 0, 0, 0, 0, 0, 0, 195, 0, 0,
+ 0, 195, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 916, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4052, 0, 0, 195, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 735, 0, 0, 0, 0, 195, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 193, 0, 0, 678, 0, 0, 195, 0, 195, 195,
+ 195, 0, 0, 0, 0, 0, 0, 0, 736, 736,
+ 0, 0, 0, 678, 0, 0, 0, 0, 0, 0,
+ 735, 0, 0, 0, 0, 0, 0, 0, 0, 1052,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1072, 1072, 0, 0,
+ 0, 0, 0, 735, 0, 678, 0, 736, 736, 736,
+ 736, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 735, 0, 0, 735, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 195, 0, 195,
- 195, 195, 0, 0, 0, 0, 0, 0, 0, 735,
- 735, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1726, 1727,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 735, 735,
- 735, 735, 0, 0, 0, 0, 0, 0, 1780, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1798, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1857, 0, 0, 0, 0, 734,
- 734, 0, 0, 0, 1866, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 734, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1095, 0, 1893,
- 0, 0, 0, 0, 0, 0, 0, 1902, 0, 0,
- 0, 1904, 0, 0, 1907, 1908, 1910, 1910, 0, 1910,
- 0, 1910, 1910, 0, 1919, 1910, 1910, 1910, 1910, 1910,
- 0, 915, 0, 0, 0, 0, 0, 0, 1939, 1940,
- 0, 1095, 0, 0, 1945, 734, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1526, 0, 0, 0, 0,
- 0, 0, 0, 0, 2146, 0, 0, 0, 0, 0,
- 0, 0, 0, 1526, 0, 0, 1987, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 193, 0, 2009,
- 677, 0, 2013, 0, 0, 735, 0, 735, 0, 195,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 677, 0, 0, 0, 0, 0, 0, 0, 1527, 0,
- 0, 0, 195, 0, 0, 735, 1051, 735, 0, 0,
- 0, 0, 0, 0, 0, 0, 1283, 0, 0, 0,
- 0, 0, 0, 1071, 1071, 0, 0, 0, 0, 0,
- 0, 0, 677, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1786, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 735, 0, 0, 0, 0,
- 0, 0, 0, 1803, 0, 0, 0, 0, 195, 0,
- 0, 735, 0, 0, 0, 0, 0, 0, 0, 734,
0, 0, 0, 0, 735, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 734,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1944, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 735, 0, 0, 0, 0, 0, 0, 735,
+ 735, 735, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 735, 0, 1726, 1727, 0, 0, 735, 735, 0, 0,
+ 735, 0, 735, 0, 0, 0, 0, 0, 735, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1780, 0, 736, 0, 736, 0, 195, 0,
+ 0, 0, 0, 735, 0, 0, 0, 1798, 735, 0,
+ 0, 0, 735, 735, 0, 0, 0, 1528, 1857, 0,
+ 0, 195, 0, 0, 736, 0, 736, 0, 1866, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1096, 0, 1893, 0, 0, 0, 0, 0, 0,
+ 0, 1902, 0, 0, 0, 1904, 0, 0, 1907, 1908,
+ 1910, 1910, 0, 1910, 0, 1910, 1910, 0, 1919, 1910,
+ 1910, 1910, 1910, 1910, 736, 0, 0, 0, 0, 0,
+ 0, 0, 1939, 1940, 0, 1096, 0, 195, 1945, 0,
+ 736, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 736, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 735,
- 0, 0, 734, 0, 0, 0, 735, 0, 735, 0,
- 0, 0, 0, 0, 0, 0, 1283, 1283, 0, 0,
- 734, 1989, 0, 734, 0, 0, 0, 0, 0, 0,
- 0, 2070, 0, 0, 0, 0, 0, 735, 2017, 0,
- 0, 0, 0, 734, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2028, 0, 0, 0, 0, 0,
- 0, 2032, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2132, 0, 0, 0, 0, 0, 0, 0,
- 0, 734, 0, 0, 0, 0, 0, 0, 734, 734,
- 734, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 734,
- 0, 0, 0, 0, 0, 734, 734, 0, 0, 734,
- 0, 734, 0, 0, 0, 0, 0, 734, 0, 0,
+ 1987, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2009, 0, 0, 2013, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 735, 0, 0,
- 0, 0, 734, 0, 0, 0, 0, 734, 0, 0,
- 0, 734, 734, 195, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 735, 195, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 736, 0,
+ 1284, 0, 0, 0, 0, 736, 0, 736, 0, 0,
+ 0, 0, 0, 1527, 0, 735, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 736, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1283, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2082, 0, 735, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 735, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1527, 735, 0,
- 735, 0, 0, 0, 0, 0, 2380, 0, 734, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 735, 2343, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 2393,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1780, 0, 0,
- 1283, 0, 0, 0, 0, 0, 195, 735, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1095, 0, 1526, 0, 734, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 735, 0, 0,
- 0, 0, 0, 0, 0, 677, 0, 677, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 735, 0, 0, 0, 0, 195, 0, 1102, 0,
- 0, 0, 0, 0, 0, 2506, 2507, 2508, 0, 0,
- 735, 0, 735, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1095, 0, 0, 0,
- 0, 0, 1102, 1902, 0, 0, 1902, 0, 1902, 677,
- 0, 0, 0, 0, 2539, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1528, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1095,
- 0, 0, 0, 0, 2132, 0, 0, 0, 2132, 2132,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1284, 1284, 0, 0, 0, 0, 736, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2070, 0, 0, 0, 678,
+ 0, 678, 195, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2409, 0, 0, 0,
- 0, 0, 0, 0, 2413, 0, 2416, 0, 0, 2082,
+ 736, 195, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 734, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2132, 0, 0, 0,
+ 0, 0, 0, 678, 0, 0, 0, 735, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 734, 0, 0, 0, 0, 2616, 0, 0, 0, 0,
+ 0, 735, 0, 0, 0, 0, 736, 0, 0, 0,
+ 0, 1529, 0, 0, 0, 0, 736, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1528, 736, 0, 736,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2930, 0, 0, 0,
+ 0, 0, 0, 0, 736, 2343, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2929, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 195, 736, 0, 0, 735,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1528, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1283, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 734, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 734, 0, 0, 677, 0,
- 0, 0, 734, 0, 0, 0, 734, 734, 0, 0,
- 0, 734, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1051, 0, 0, 0, 0, 0, 1526, 734, 2082,
- 0, 0, 0, 0, 0, 0, 2575, 0, 0, 0,
- 0, 0, 0, 0, 0, 677, 0, 2595, 2596, 0,
- 0, 2600, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2605, 677, 0, 0, 0, 0, 0,
- 2608, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2611, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1528, 0, 0, 0, 0, 734,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1528, 95, 0, 1528, 1023, 1528, 677, 0, 0,
- 963, 1024, 976, 977, 978, 964, 0, 0, 965, 966,
- 0, 967, 0, 0, 0, 0, 0, 1961, 0, 734,
- 0, 0, 0, 0, 0, 0, 0, 972, 0, 979,
- 980, 0, 677, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2864, 0, 0, 0, 0, 2015, 677,
- 0, 0, 0, 0, 0, 0, 0, 2879, 0, 0,
- 0, 0, 0, 0, 0, 677, 0, 0, 0, 0,
- 0, 0, 677, 0, 0, 0, 0, 0, 3346, 3347,
- 0, 2041, 2042, 677, 677, 677, 677, 677, 677, 677,
- 981, 982, 983, 984, 985, 986, 987, 988, 989, 990,
- 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000,
- 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010,
- 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020,
- 1021, 1022, 0, 0, 734, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 734, 0, 0, 0,
- 0, 0, 0, 0, 0, 2961, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3348, 0, 0, 0, 734, 0, 0,
- 0, 0, 2393, 0, 0, 0, 0, 0, 0, 2985,
- 0, 0, 0, 1902, 1902, 734, 0, 0, 2990, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 734,
- 0, 0, 0, 1526, 0, 3001, 734, 734, 1526, 0,
+ 0, 0, 0, 0, 0, 0, 735, 0, 0, 0,
+ 0, 0, 0, 735, 0, 0, 736, 735, 735, 0,
+ 1284, 0, 735, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1527, 735,
+ 736, 0, 0, 0, 0, 195, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 736,
+ 0, 736, 0, 0, 0, 0, 0, 0, 0, 2380,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2393, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3349, 3350, 0, 0, 0, 0, 0,
+ 1780, 0, 0, 1284, 0, 0, 0, 0, 0, 0,
+ 0, 735, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1096, 0, 0, 0, 0, 0, 0,
+ 0, 0, 678, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 3296,
- 0, 0, 0, 0, 0, 0, 677, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1052, 0, 0, 0, 0,
+ 0, 735, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 678,
+ 0, 1103, 0, 0, 0, 0, 0, 0, 2506, 2507,
+ 2508, 0, 0, 0, 0, 0, 0, 0, 678, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1096,
+ 0, 0, 0, 0, 0, 1103, 1902, 0, 0, 1902,
+ 0, 1902, 0, 0, 0, 0, 0, 2539, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 734, 0, 0, 1526, 0, 0, 2132, 0, 734, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 2916,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1529, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 928, 0,
- 0, 0, 0, 0, 932, 0, 1528, 0, 929, 930,
- 0, 0, 0, 931, 933, 0, 2132, 0, 0, 0,
- 3377, 0, 0, 0, 1528, 0, 0, 0, 0, 0,
+ 0, 0, 1096, 0, 0, 0, 0, 2132, 0, 0,
+ 0, 2132, 2132, 0, 0, 1529, 735, 0, 1529, 0,
+ 1529, 678, 0, 0, 0, 0, 0, 0, 735, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1961, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 678, 0, 0, 735,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2965, 0, 0, 0, 0, 0,
+ 0, 0, 2015, 678, 0, 0, 0, 735, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 678,
+ 0, 735, 0, 0, 0, 1527, 678, 0, 735, 735,
+ 1527, 0, 0, 0, 0, 2041, 2042, 678, 678, 678,
+ 678, 678, 678, 678, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2617, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3298, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 735, 0, 0, 1527, 0, 0, 0, 0,
+ 735, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1284, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3013, 3014, 3015, 3016, 3017, 3018, 0, 0, 0, 0,
- 0, 3158, 0, 0, 0, 0, 0, 0, 734, 0,
- 0, 0, 0, 1283, 0, 0, 0, 0, 2082, 3028,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2015, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3036, 1910, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3379, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3203, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1961, 1283, 0, 0, 0,
- 0, 0, 0, 3230, 1910, 0, 0, 0, 0, 0,
- 0, 1071, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1051, 0, 0, 0, 0, 0, 0, 0, 0, 3584,
- 0, 0, 0, 0, 0, 0, 0, 677, 0, 0,
- 0, 0, 0, 0, 2015, 677, 0, 677, 0, 677,
- 2432, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 734, 734, 0, 0, 0, 1095, 0, 0,
- 0, 0, 0, 0, 0, 2393, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 734, 734, 734, 734, 0, 0, 0, 0, 0,
- 0, 0, 2509, 0, 0, 0, 0, 0, 0, 0,
+ 678, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 735, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1529, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1529, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2865, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2880, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3586, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 735, 735, 0, 0, 0,
+ 0, 0, 0, 0, 2015, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2962, 0,
+ 0, 0, 0, 0, 735, 735, 735, 735, 1961, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1072, 2393, 0, 0, 0, 0,
+ 0, 0, 2986, 0, 0, 0, 1902, 1902, 0, 0,
+ 0, 2991, 0, 1052, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3002, 0,
+ 678, 0, 0, 0, 0, 0, 0, 2015, 678, 0,
+ 678, 0, 678, 2432, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 677, 0, 0, 0, 0, 1857, 0, 677, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 677, 677,
- 0, 0, 677, 0, 2602, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 677, 0, 0, 0, 734, 0,
- 734, 677, 0, 0, 0, 0, 0, 3300, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1526, 0, 0, 0, 0, 0, 677, 734, 0,
- 734, 0, 0, 3338, 2613, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3352, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3370, 0, 0,
- 3373, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 734, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 734, 0, 0, 0, 0, 0,
- 0, 0, 0, 1528, 0, 2015, 0, 734, 0, 2393,
- 2393, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3648, 3649,
- 3650, 3651, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2132, 0, 0, 0, 0, 2509, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 734, 0, 0, 0, 0, 0, 0, 734,
- 0, 734, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 735, 0, 735, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1527, 0, 0, 0, 0, 0,
+ 2132, 735, 0, 735, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 734, 0, 0, 0, 0, 3533, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 735, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 678, 0, 0, 0, 735, 0, 0,
+ 678, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 735, 678, 678, 0, 0, 678, 0, 2603, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 678, 0, 0,
+ 0, 0, 0, 0, 678, 3160, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1284, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 678, 0, 0, 0, 0, 0, 0, 2614, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1910, 0,
+ 0, 0, 0, 0, 0, 735, 0, 0, 0, 0,
+ 0, 0, 735, 0, 735, 0, 3205, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1284, 0, 0, 0, 0, 0, 0, 3232, 1910, 0,
+ 0, 0, 0, 735, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1529, 0, 2015, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3594, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 3726, 0, 3726, 677, 0,
- 3609, 0, 3610, 3611, 3612, 0, 1961, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 3754, 0, 3756, 0, 0,
- 734, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 677, 0, 0, 0, 0,
- 677, 0, 0, 0, 734, 0, 0, 0, 0, 0,
+ 0, 1096, 0, 0, 0, 0, 0, 0, 0, 2393,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2393, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 3923, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1283, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 734, 0, 0, 0, 0, 677, 0, 0, 0, 0,
- 734, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1526, 734, 0, 734, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 734, 734,
- 0, 0, 0, 0, 0, 0, 0, 0, 1528, 3726,
- 0, 0, 0, 0, 0, 0, 3726, 0, 3726, 0,
- 0, 677, 677, 677, 677, 677, 677, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 734, 0, 0, 0, 0, 0, 0, 2393, 0, 677,
- 677, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 735, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 677, 0, 0, 0, 0, 0,
- 734, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 734, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 735, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 734, 0, 734, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 3786, 3788, 3787, 3853, 3854, 3855, 3856, 3857, 3858,
- 3859, 3789, 3790, 805, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 2393, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 735, 0, 0, 0, 0, 0, 0,
+ 0, 678, 0, 735, 0, 0, 0, 0, 0, 1961,
+ 1857, 0, 0, 1527, 735, 0, 735, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2393, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 735, 735, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 678, 0,
+ 0, 0, 0, 678, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 735, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 4070, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 4078, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2393, 0,
- 4086, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1071, 0, 677, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1283, 1283, 0, 0, 0,
- 0, 0, 0, 0, 1528, 0, 0, 0, 0, 1528,
- 677, 677, 677, 677, 677, 0, 0, 0, 0, 0,
- 0, 0, 3246, 0, 0, 0, 0, 0, 1961, 0,
- 677, 0, 0, 677, 3254, 2015, 0, 4136, 0, 0,
+ 0, 0, 0, 735, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 678, 0,
+ 0, 0, 0, 0, 0, 0, 0, 735, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2393, 2393, 735, 0, 735, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 3794, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 4078, 677, 3802,
- 3803, 0, 0, 3878, 3877, 3876, 0, 0, 3874, 3875,
- 3873, 0, 0, 0, 1528, 0, 0, 0, 0, 0,
- 0, 2393, 0, 0, 677, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 4050, 0, 0, 677, 0,
- 1857, 0, 4136, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 677, 0,
- 0, 677, 0, 0, 3879, 928, 0, 781, 782, 3880,
- 3881, 932, 3882, 784, 785, 929, 930, 0, 779, 783,
- 931, 933, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1529, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 678, 678, 678, 678, 678, 678,
+ 0, 0, 0, 3650, 3651, 3652, 3653, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3783, 3784, 3785,
- 3791, 3792, 3793, 3804, 3851, 3852, 3860, 3862, 884, 3861,
- 3863, 3864, 3865, 3868, 3869, 3870, 3871, 3866, 3867, 3872,
- 3766, 3770, 3767, 3768, 3769, 3781, 3771, 3772, 3773, 3774,
- 3775, 3776, 3777, 3778, 3779, 3780, 3782, 3883, 3884, 3885,
- 3886, 3887, 3888, 3797, 3801, 3800, 3798, 3799, 3795, 3796,
- 3823, 3822, 3824, 3825, 3826, 3827, 3828, 3829, 3831, 3830,
- 3832, 3833, 3834, 3835, 3836, 3837, 3805, 3806, 3809, 3810,
- 3808, 3807, 3811, 3820, 3821, 3812, 3813, 3814, 3815, 3816,
- 3817, 3819, 3818, 3838, 3839, 3840, 3841, 3842, 3844, 3843,
- 3847, 3848, 3846, 3845, 3850, 3849, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 677, 0, 0, 934,
- 0, 935, 0, 0, 939, 0, 0, 0, 941, 940,
- 0, 942, 904, 903, 0, 0, 936, 937, 0, 938,
+ 0, 0, 0, 678, 678, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 678, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 677, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 677, 0, 0, 3889, 3890, 3891, 3892, 3893, 3894,
- 3895, 3896, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 677, 0, 677, 677, 677, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -2825,43 +2807,71 @@ var yyAct = [...]int{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3728, 0, 3728, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3756, 0, 3758, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2393, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3925, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1284,
+ 0, 0, 0, 0, 0, 1072, 0, 678, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1529, 0,
+ 0, 0, 0, 1529, 678, 678, 678, 678, 678, 0,
+ 0, 0, 0, 0, 0, 0, 3248, 0, 0, 0,
+ 0, 0, 1961, 0, 678, 0, 0, 678, 3256, 2015,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3728, 0, 0, 0, 0, 0,
+ 0, 3728, 0, 3728, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 678, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2393, 0, 0, 0, 0, 0, 1529, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 678, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 678, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 678, 0, 0, 678, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1961, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1528, 0, 0, 0, 1961, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2393, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1961, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2393, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 678, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4072, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4080, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2393, 0, 4088, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 678, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1284, 1284, 3788, 3790, 3789, 3855, 3856, 3857, 3858, 3859,
+ 3860, 3861, 3791, 3792, 806, 0, 678, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 678, 0, 678, 678,
+ 678, 0, 4138, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4080, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2393, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1857, 0, 4138, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -2873,2199 +2883,2090 @@ var yyAct = [...]int{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3796, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3804, 3805, 0, 0, 3880, 3879, 3878, 1961, 0,
+ 3876, 3877, 3875, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1529, 0, 0,
+ 0, 1961, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3881, 929, 0, 782,
+ 783, 3882, 3883, 933, 3884, 785, 786, 930, 931, 0,
+ 780, 784, 932, 934, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 1961, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3785,
+ 3786, 3787, 3793, 3794, 3795, 3806, 3853, 3854, 3862, 3864,
+ 885, 3863, 3865, 3866, 3867, 3870, 3871, 3872, 3873, 3868,
+ 3869, 3874, 3768, 3772, 3769, 3770, 3771, 3783, 3773, 3774,
+ 3775, 3776, 3777, 3778, 3779, 3780, 3781, 3782, 3784, 3885,
+ 3886, 3887, 3888, 3889, 3890, 3799, 3803, 3802, 3800, 3801,
+ 3797, 3798, 3825, 3824, 3826, 3827, 3828, 3829, 3830, 3831,
+ 3833, 3832, 3834, 3835, 3836, 3837, 3838, 3839, 3807, 3808,
+ 3811, 3812, 3810, 3809, 3813, 3822, 3823, 3814, 3815, 3816,
+ 3817, 3818, 3819, 3821, 3820, 3840, 3841, 3842, 3843, 3844,
+ 3846, 3845, 3849, 3850, 3848, 3847, 3852, 3851, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 677, 0, 0, 0,
+ 0, 935, 0, 936, 0, 0, 940, 0, 0, 0,
+ 942, 941, 0, 943, 905, 904, 0, 0, 937, 938,
+ 0, 939, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3891, 3892, 3893, 3894,
+ 3895, 3896, 3897, 3898, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1961, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 678, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1528, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1529, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4108, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1961, 0, 0, 396, 0, 0, 0, 0, 0, 0,
- 1421, 1405, 528, 0, 1347, 1424, 1315, 1334, 1434, 1337,
- 1340, 1384, 1293, 1362, 416, 1331, 1319, 1288, 1326, 1289,
- 1317, 1349, 270, 1314, 1407, 1366, 1423, 366, 267, 1295,
- 1286, 204, 505, 1320, 430, 1336, 203, 1386, 487, 252,
- 377, 374, 583, 282, 273, 269, 250, 317, 385, 428,
- 518, 422, 1430, 370, 1372, 0, 497, 401, 0, 0,
- 2015, 1411, 1410, 1341, 1351, 1413, 1360, 1398, 1346, 1385,
- 1303, 1371, 1425, 1332, 1381, 1426, 323, 248, 325, 202,
- 413, 498, 286, 0, 0, 0, 0, 4110, 507, 959,
- 0, 0, 0, 0, 4111, 0, 0, 0, 0, 238,
- 0, 0, 245, 0, 0, 0, 351, 360, 359, 339,
- 340, 342, 344, 350, 357, 363, 336, 345, 1328, 1378,
- 609, 1420, 1329, 1380, 265, 321, 272, 264, 580, 1431,
- 1412, 1292, 1359, 1419, 1354, 596, 0, 0, 229, 1422,
- 1353, 0, 1383, 0, 1437, 1287, 1374, 0, 1290, 1294,
- 1433, 1417, 1323, 275, 0, 0, 0, 0, 0, 0,
- 0, 1350, 1361, 1395, 1399, 1344, 0, 0, 0, 0,
- 0, 0, 0, 0, 1321, 0, 1370, 0, 0, 0,
- 1299, 1291, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1348, 0, 0, 0, 0, 1302,
- 0, 1322, 1396, 0, 1285, 297, 1296, 402, 257, 0,
- 453, 1403, 1416, 1345, 629, 1418, 1343, 1342, 1390, 1300,
- 1409, 1335, 365, 1298, 330, 197, 225, 0, 1333, 412,
- 461, 473, 1408, 1318, 1327, 253, 1325, 471, 426, 604,
- 233, 284, 458, 432, 469, 440, 287, 1369, 1388, 470,
- 372, 585, 450, 601, 630, 631, 263, 406, 615, 522,
- 623, 648, 226, 260, 420, 506, 607, 494, 397, 581,
- 582, 329, 493, 295, 201, 369, 636, 224, 479, 371,
- 242, 231, 587, 612, 299, 289, 456, 643, 213, 517,
- 598, 239, 483, 0, 0, 651, 247, 504, 610, 599,
- 215, 594, 503, 393, 326, 327, 214, 0, 457, 268,
- 293, 0, 0, 258, 415, 589, 590, 256, 652, 228,
- 622, 220, 1297, 621, 408, 584, 595, 394, 383, 219,
- 593, 392, 382, 334, 355, 356, 280, 307, 447, 375,
- 448, 306, 308, 404, 403, 405, 207, 608, 626, 0,
- 208, 0, 499, 611, 653, 452, 212, 234, 235, 237,
- 1313, 279, 283, 291, 294, 303, 304, 313, 367, 419,
- 446, 442, 451, 1404, 579, 602, 616, 628, 634, 635,
- 637, 638, 639, 640, 641, 644, 642, 407, 311, 495,
- 333, 373, 1393, 1436, 425, 472, 240, 606, 496, 199,
- 1307, 1312, 1305, 0, 254, 255, 1375, 575, 1308, 1306,
- 1364, 1365, 1309, 1427, 1428, 1429, 1414, 654, 655, 656,
- 657, 658, 659, 660, 661, 662, 663, 664, 665, 666,
- 667, 668, 669, 670, 671, 649, 508, 514, 509, 510,
- 511, 512, 513, 0, 515, 1397, 1301, 0, 1310, 1311,
- 398, 1406, 591, 592, 672, 384, 486, 603, 335, 349,
- 352, 341, 361, 0, 362, 337, 338, 343, 346, 347,
- 348, 353, 354, 358, 364, 249, 210, 390, 399, 578,
- 312, 216, 217, 218, 524, 525, 526, 527, 619, 620,
- 624, 205, 462, 463, 464, 465, 292, 614, 309, 468,
- 467, 331, 332, 379, 449, 540, 542, 553, 557, 559,
- 561, 567, 570, 541, 543, 554, 558, 560, 562, 568,
- 571, 530, 532, 534, 536, 549, 548, 545, 573, 574,
- 551, 556, 535, 547, 552, 565, 572, 569, 529, 533,
- 537, 546, 564, 563, 544, 555, 566, 550, 538, 531,
- 539, 1368, 196, 221, 368, 1432, 454, 288, 650, 618,
- 484, 613, 206, 223, 1304, 262, 1316, 1324, 0, 1330,
- 1338, 1339, 1352, 1355, 1356, 1357, 1358, 1376, 1377, 1379,
- 1387, 1389, 1392, 1394, 1401, 1415, 1435, 198, 200, 209,
- 222, 232, 236, 243, 261, 276, 278, 285, 298, 310,
- 318, 319, 322, 328, 380, 386, 387, 388, 389, 409,
- 410, 411, 414, 417, 418, 421, 423, 424, 427, 431,
- 435, 436, 437, 439, 441, 443, 455, 460, 474, 475,
- 476, 477, 478, 481, 482, 488, 489, 490, 491, 492,
- 500, 501, 516, 586, 588, 605, 625, 632, 480, 301,
- 302, 444, 445, 314, 315, 646, 647, 300, 600, 633,
- 597, 645, 627, 438, 378, 1367, 1373, 381, 281, 305,
- 320, 1382, 617, 502, 227, 466, 290, 251, 1400, 1402,
- 211, 246, 230, 259, 274, 277, 324, 391, 400, 429,
- 434, 296, 271, 244, 459, 241, 485, 519, 520, 521,
- 523, 395, 266, 433, 1363, 1391, 376, 576, 577, 316,
- 396, 0, 0, 0, 0, 0, 0, 1421, 1405, 528,
- 0, 1347, 1424, 1315, 1334, 1434, 1337, 1340, 1384, 1293,
- 1362, 416, 1331, 1319, 1288, 1326, 1289, 1317, 1349, 270,
- 1314, 1407, 1366, 1423, 366, 267, 1295, 1286, 204, 505,
- 1320, 430, 1336, 203, 1386, 487, 252, 377, 374, 583,
- 282, 273, 269, 250, 317, 385, 428, 518, 422, 1430,
- 370, 1372, 0, 497, 401, 0, 0, 0, 1411, 1410,
- 1341, 1351, 1413, 1360, 1398, 1346, 1385, 1303, 1371, 1425,
- 1332, 1381, 1426, 323, 248, 325, 202, 413, 498, 286,
- 0, 0, 0, 0, 0, 507, 194, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4110, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1961, 0, 0, 397, 0,
+ 0, 0, 0, 0, 0, 1422, 1406, 529, 0, 1348,
+ 1425, 1316, 1335, 1435, 1338, 1341, 1385, 1294, 1363, 417,
+ 1332, 1320, 1289, 1327, 1290, 1318, 1350, 271, 1315, 1408,
+ 1367, 1424, 367, 268, 1296, 1287, 204, 506, 1321, 431,
+ 1337, 203, 1387, 488, 253, 378, 375, 584, 283, 274,
+ 270, 250, 318, 386, 429, 519, 423, 1431, 371, 1373,
+ 0, 498, 402, 0, 0, 2015, 1412, 1411, 1342, 1352,
+ 1414, 1361, 1399, 1347, 1386, 1304, 1372, 1426, 1333, 1382,
+ 1427, 324, 248, 326, 202, 414, 499, 287, 0, 0,
+ 0, 0, 4112, 508, 960, 0, 0, 0, 0, 4113,
+ 0, 0, 0, 0, 238, 0, 0, 245, 0, 0,
+ 0, 352, 361, 360, 340, 341, 343, 345, 351, 358,
+ 364, 337, 346, 1329, 1379, 610, 1421, 1330, 1381, 266,
+ 322, 273, 265, 581, 1432, 1413, 1293, 1360, 1420, 1355,
+ 597, 0, 0, 229, 1423, 1354, 0, 1384, 0, 1438,
+ 1288, 1375, 0, 1291, 1295, 1434, 1418, 1324, 276, 0,
+ 0, 0, 0, 0, 0, 0, 1351, 1362, 1396, 1400,
+ 1345, 0, 0, 0, 0, 0, 0, 0, 0, 1322,
+ 0, 1371, 0, 0, 0, 1300, 1292, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1349,
+ 0, 0, 0, 0, 1303, 0, 1323, 1397, 0, 1286,
+ 298, 1297, 403, 258, 0, 454, 1404, 1417, 1346, 630,
+ 1419, 1344, 1343, 1391, 1301, 1410, 1336, 366, 1299, 331,
+ 197, 225, 0, 1334, 413, 462, 474, 1409, 1319, 1328,
+ 254, 1326, 472, 427, 605, 233, 285, 459, 433, 470,
+ 441, 288, 1370, 1389, 471, 373, 586, 451, 602, 631,
+ 632, 264, 407, 616, 523, 624, 649, 226, 261, 421,
+ 507, 608, 495, 398, 582, 583, 330, 494, 296, 201,
+ 370, 637, 224, 480, 372, 242, 231, 588, 613, 300,
+ 252, 290, 457, 644, 213, 518, 599, 239, 484, 0,
+ 0, 652, 247, 505, 611, 600, 215, 595, 504, 394,
+ 327, 328, 214, 0, 458, 269, 294, 0, 0, 259,
+ 416, 590, 591, 257, 653, 228, 623, 220, 1298, 622,
+ 409, 585, 596, 395, 384, 219, 594, 393, 383, 335,
+ 356, 357, 281, 308, 448, 376, 449, 307, 309, 405,
+ 404, 406, 207, 609, 627, 0, 208, 0, 500, 612,
+ 654, 453, 212, 234, 235, 237, 1314, 280, 284, 292,
+ 295, 304, 305, 314, 368, 420, 447, 443, 452, 1405,
+ 580, 603, 617, 629, 635, 636, 638, 639, 640, 641,
+ 642, 645, 643, 408, 312, 496, 334, 374, 1394, 1437,
+ 426, 473, 240, 607, 497, 199, 1308, 1313, 1306, 0,
+ 255, 256, 1376, 576, 1309, 1307, 1365, 1366, 1310, 1428,
+ 1429, 1430, 1415, 655, 656, 657, 658, 659, 660, 661,
+ 662, 663, 664, 665, 666, 667, 668, 669, 670, 671,
+ 672, 650, 509, 515, 510, 511, 512, 513, 514, 0,
+ 516, 1398, 1302, 0, 1311, 1312, 399, 1407, 592, 593,
+ 673, 385, 487, 604, 336, 350, 353, 342, 362, 0,
+ 363, 338, 339, 344, 347, 348, 349, 354, 355, 359,
+ 365, 249, 210, 391, 400, 579, 313, 216, 217, 218,
+ 525, 526, 527, 528, 620, 621, 625, 205, 463, 464,
+ 465, 466, 293, 615, 310, 469, 468, 332, 333, 380,
+ 450, 541, 543, 554, 558, 560, 562, 568, 571, 542,
+ 544, 555, 559, 561, 563, 569, 572, 531, 533, 535,
+ 537, 550, 549, 546, 574, 575, 552, 557, 536, 548,
+ 553, 566, 573, 570, 530, 534, 538, 547, 565, 564,
+ 545, 556, 567, 551, 539, 532, 540, 1369, 196, 221,
+ 369, 1433, 455, 289, 651, 619, 485, 614, 206, 223,
+ 1305, 263, 1317, 1325, 0, 1331, 1339, 1340, 1353, 1356,
+ 1357, 1358, 1359, 1377, 1378, 1380, 1388, 1390, 1393, 1395,
+ 1402, 1416, 1436, 198, 200, 209, 222, 232, 236, 243,
+ 262, 277, 279, 286, 299, 311, 319, 320, 323, 329,
+ 381, 387, 388, 389, 390, 410, 411, 412, 415, 418,
+ 419, 422, 424, 425, 428, 432, 436, 437, 438, 440,
+ 442, 444, 456, 461, 475, 476, 477, 478, 479, 482,
+ 483, 489, 490, 491, 492, 493, 501, 502, 517, 587,
+ 589, 606, 626, 633, 481, 302, 303, 445, 446, 315,
+ 316, 647, 648, 301, 601, 634, 598, 646, 628, 439,
+ 379, 1368, 1374, 382, 282, 306, 321, 1383, 618, 503,
+ 227, 467, 291, 251, 1401, 1403, 211, 246, 230, 260,
+ 275, 278, 325, 392, 401, 430, 435, 297, 272, 244,
+ 460, 241, 486, 520, 521, 522, 524, 396, 267, 434,
+ 1364, 1392, 377, 577, 578, 317, 397, 0, 0, 0,
+ 0, 0, 0, 1422, 1406, 529, 0, 1348, 1425, 1316,
+ 1335, 1435, 1338, 1341, 1385, 1294, 1363, 417, 1332, 1320,
+ 1289, 1327, 1290, 1318, 1350, 271, 1315, 1408, 1367, 1424,
+ 367, 268, 1296, 1287, 204, 506, 1321, 431, 1337, 203,
+ 1387, 488, 253, 378, 375, 584, 283, 274, 270, 250,
+ 318, 386, 429, 519, 423, 1431, 371, 1373, 0, 498,
+ 402, 0, 0, 0, 1412, 1411, 1342, 1352, 1414, 1361,
+ 1399, 1347, 1386, 1304, 1372, 1426, 1333, 1382, 1427, 324,
+ 248, 326, 202, 414, 499, 287, 0, 0, 0, 0,
+ 0, 508, 194, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 238, 0, 0, 245, 0, 0, 0, 352,
+ 361, 360, 340, 341, 343, 345, 351, 358, 364, 337,
+ 346, 1329, 1379, 610, 1421, 1330, 1381, 266, 322, 273,
+ 265, 581, 1432, 1413, 1293, 1360, 1420, 1355, 597, 0,
+ 0, 229, 1423, 1354, 0, 1384, 0, 1438, 1288, 1375,
+ 0, 1291, 1295, 1434, 1418, 1324, 276, 0, 0, 0,
+ 0, 0, 0, 0, 1351, 1362, 1396, 1400, 1345, 0,
+ 0, 0, 0, 0, 0, 3257, 0, 1322, 0, 1371,
+ 0, 0, 0, 1300, 1292, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1349, 0, 0,
+ 0, 0, 1303, 0, 1323, 1397, 0, 1286, 298, 1297,
+ 403, 258, 0, 454, 1404, 1417, 1346, 630, 1419, 1344,
+ 1343, 1391, 1301, 1410, 1336, 366, 1299, 331, 197, 225,
+ 0, 1334, 413, 462, 474, 1409, 1319, 1328, 254, 1326,
+ 472, 427, 605, 233, 285, 459, 433, 470, 441, 288,
+ 1370, 1389, 471, 373, 586, 451, 602, 631, 632, 264,
+ 407, 616, 523, 624, 649, 226, 261, 421, 507, 608,
+ 495, 398, 582, 583, 330, 494, 296, 201, 370, 637,
+ 224, 480, 372, 242, 231, 588, 613, 300, 252, 290,
+ 457, 644, 213, 518, 599, 239, 484, 0, 0, 652,
+ 247, 505, 611, 600, 215, 595, 504, 394, 327, 328,
+ 214, 0, 458, 269, 294, 0, 0, 259, 416, 590,
+ 591, 257, 653, 228, 623, 220, 1298, 622, 409, 585,
+ 596, 395, 384, 219, 594, 393, 383, 335, 356, 357,
+ 281, 308, 448, 376, 449, 307, 309, 405, 404, 406,
+ 207, 609, 627, 0, 208, 0, 500, 612, 654, 453,
+ 212, 234, 235, 237, 1314, 280, 284, 292, 295, 304,
+ 305, 314, 368, 420, 447, 443, 452, 1405, 580, 603,
+ 617, 629, 635, 636, 638, 639, 640, 641, 642, 645,
+ 643, 408, 312, 496, 334, 374, 1394, 1437, 426, 473,
+ 240, 607, 497, 199, 1308, 1313, 1306, 0, 255, 256,
+ 1376, 576, 1309, 1307, 1365, 1366, 1310, 1428, 1429, 1430,
+ 1415, 655, 656, 657, 658, 659, 660, 661, 662, 663,
+ 664, 665, 666, 667, 668, 669, 670, 671, 672, 650,
+ 509, 515, 510, 511, 512, 513, 514, 0, 516, 1398,
+ 1302, 0, 1311, 1312, 399, 1407, 592, 593, 673, 385,
+ 487, 604, 336, 350, 353, 342, 362, 0, 363, 338,
+ 339, 344, 347, 348, 349, 354, 355, 359, 365, 249,
+ 210, 391, 400, 579, 313, 216, 217, 218, 525, 526,
+ 527, 528, 620, 621, 625, 205, 463, 464, 465, 466,
+ 293, 615, 310, 469, 468, 332, 333, 380, 450, 541,
+ 543, 554, 558, 560, 562, 568, 571, 542, 544, 555,
+ 559, 561, 563, 569, 572, 531, 533, 535, 537, 550,
+ 549, 546, 574, 575, 552, 557, 536, 548, 553, 566,
+ 573, 570, 530, 534, 538, 547, 565, 564, 545, 556,
+ 567, 551, 539, 532, 540, 1369, 196, 221, 369, 1433,
+ 455, 289, 651, 619, 485, 614, 206, 223, 1305, 263,
+ 1317, 1325, 0, 1331, 1339, 1340, 1353, 1356, 1357, 1358,
+ 1359, 1377, 1378, 1380, 1388, 1390, 1393, 1395, 1402, 1416,
+ 1436, 198, 200, 209, 222, 232, 236, 243, 262, 277,
+ 279, 286, 299, 311, 319, 320, 323, 329, 381, 387,
+ 388, 389, 390, 410, 411, 412, 415, 418, 419, 422,
+ 424, 425, 428, 432, 436, 437, 438, 440, 442, 444,
+ 456, 461, 475, 476, 477, 478, 479, 482, 483, 489,
+ 490, 491, 492, 493, 501, 502, 517, 587, 589, 606,
+ 626, 633, 481, 302, 303, 445, 446, 315, 316, 647,
+ 648, 301, 601, 634, 598, 646, 628, 439, 379, 1368,
+ 1374, 382, 282, 306, 321, 1383, 618, 503, 227, 467,
+ 291, 251, 1401, 1403, 211, 246, 230, 260, 275, 278,
+ 325, 392, 401, 430, 435, 297, 272, 244, 460, 241,
+ 486, 520, 521, 522, 524, 396, 267, 434, 1364, 1392,
+ 377, 577, 578, 317, 397, 0, 0, 0, 0, 0,
+ 0, 1422, 1406, 529, 0, 1348, 1425, 1316, 1335, 1435,
+ 1338, 1341, 1385, 1294, 1363, 417, 1332, 1320, 1289, 1327,
+ 1290, 1318, 1350, 271, 1315, 1408, 1367, 1424, 367, 268,
+ 1296, 1287, 204, 506, 1321, 431, 1337, 203, 1387, 488,
+ 253, 378, 375, 584, 283, 274, 270, 250, 318, 386,
+ 429, 519, 423, 1431, 371, 1373, 0, 498, 402, 0,
+ 0, 0, 1412, 1411, 1342, 1352, 1414, 1361, 1399, 1347,
+ 1386, 1304, 1372, 1426, 1333, 1382, 1427, 324, 248, 326,
+ 202, 414, 499, 287, 0, 0, 0, 0, 0, 508,
+ 725, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 238, 0, 0, 245, 0, 0, 0, 352, 361, 360,
+ 340, 341, 343, 345, 351, 358, 364, 337, 346, 1329,
+ 1379, 610, 1421, 1330, 1381, 266, 322, 273, 265, 581,
+ 1432, 1413, 1293, 1360, 1420, 1355, 597, 0, 0, 229,
+ 1423, 1354, 0, 1384, 0, 1438, 1288, 1375, 0, 1291,
+ 1295, 1434, 1418, 1324, 276, 0, 0, 0, 0, 0,
+ 0, 0, 1351, 1362, 1396, 1400, 1345, 0, 0, 0,
+ 0, 0, 0, 3218, 0, 1322, 0, 1371, 0, 0,
+ 0, 1300, 1292, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1349, 0, 0, 0, 0,
+ 1303, 0, 1323, 1397, 0, 1286, 298, 1297, 403, 258,
+ 0, 454, 1404, 1417, 1346, 630, 1419, 1344, 1343, 1391,
+ 1301, 1410, 1336, 366, 1299, 331, 197, 225, 0, 1334,
+ 413, 462, 474, 1409, 1319, 1328, 254, 1326, 472, 427,
+ 605, 233, 285, 459, 433, 470, 441, 288, 1370, 1389,
+ 471, 373, 586, 451, 602, 631, 632, 264, 407, 616,
+ 523, 624, 649, 226, 261, 421, 507, 608, 495, 398,
+ 582, 583, 330, 494, 296, 201, 370, 637, 224, 480,
+ 372, 242, 231, 588, 613, 300, 252, 290, 457, 644,
+ 213, 518, 599, 239, 484, 0, 0, 652, 247, 505,
+ 611, 600, 215, 595, 504, 394, 327, 328, 214, 0,
+ 458, 269, 294, 0, 0, 259, 416, 590, 591, 257,
+ 653, 228, 623, 220, 1298, 622, 409, 585, 596, 395,
+ 384, 219, 594, 393, 383, 335, 356, 357, 281, 308,
+ 448, 376, 449, 307, 309, 405, 404, 406, 207, 609,
+ 627, 0, 208, 0, 500, 612, 654, 453, 212, 234,
+ 235, 237, 1314, 280, 284, 292, 295, 304, 305, 314,
+ 368, 420, 447, 443, 452, 1405, 580, 603, 617, 629,
+ 635, 636, 638, 639, 640, 641, 642, 645, 643, 408,
+ 312, 496, 334, 374, 1394, 1437, 426, 473, 240, 607,
+ 497, 199, 1308, 1313, 1306, 0, 255, 256, 1376, 576,
+ 1309, 1307, 1365, 1366, 1310, 1428, 1429, 1430, 1415, 655,
+ 656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
+ 666, 667, 668, 669, 670, 671, 672, 650, 509, 515,
+ 510, 511, 512, 513, 514, 0, 516, 1398, 1302, 0,
+ 1311, 1312, 399, 1407, 592, 593, 673, 385, 487, 604,
+ 336, 350, 353, 342, 362, 0, 363, 338, 339, 344,
+ 347, 348, 349, 354, 355, 359, 365, 249, 210, 391,
+ 400, 579, 313, 216, 217, 218, 525, 526, 527, 528,
+ 620, 621, 625, 205, 463, 464, 465, 466, 293, 615,
+ 310, 469, 468, 332, 333, 380, 450, 541, 543, 554,
+ 558, 560, 562, 568, 571, 542, 544, 555, 559, 561,
+ 563, 569, 572, 531, 533, 535, 537, 550, 549, 546,
+ 574, 575, 552, 557, 536, 548, 553, 566, 573, 570,
+ 530, 534, 538, 547, 565, 564, 545, 556, 567, 551,
+ 539, 532, 540, 1369, 196, 221, 369, 1433, 455, 289,
+ 651, 619, 485, 614, 206, 223, 1305, 263, 1317, 1325,
+ 0, 1331, 1339, 1340, 1353, 1356, 1357, 1358, 1359, 1377,
+ 1378, 1380, 1388, 1390, 1393, 1395, 1402, 1416, 1436, 198,
+ 200, 209, 222, 232, 236, 243, 262, 277, 279, 286,
+ 299, 311, 319, 320, 323, 329, 381, 387, 388, 389,
+ 390, 410, 411, 412, 415, 418, 419, 422, 424, 425,
+ 428, 432, 436, 437, 438, 440, 442, 444, 456, 461,
+ 475, 476, 477, 478, 479, 482, 483, 489, 490, 491,
+ 492, 493, 501, 502, 517, 587, 589, 606, 626, 633,
+ 481, 302, 303, 445, 446, 315, 316, 647, 648, 301,
+ 601, 634, 598, 646, 628, 439, 379, 1368, 1374, 382,
+ 282, 306, 321, 1383, 618, 503, 227, 467, 291, 251,
+ 1401, 1403, 211, 246, 230, 260, 275, 278, 325, 392,
+ 401, 430, 435, 297, 272, 244, 460, 241, 486, 520,
+ 521, 522, 524, 396, 267, 434, 1364, 1392, 377, 577,
+ 578, 317, 397, 0, 0, 0, 0, 0, 0, 1422,
+ 1406, 529, 0, 1348, 1425, 1316, 1335, 1435, 1338, 1341,
+ 1385, 1294, 1363, 417, 1332, 1320, 1289, 1327, 1290, 1318,
+ 1350, 271, 1315, 1408, 1367, 1424, 367, 268, 1296, 1287,
+ 204, 506, 1321, 431, 1337, 203, 1387, 488, 253, 378,
+ 375, 584, 283, 274, 270, 250, 318, 386, 429, 519,
+ 423, 1431, 371, 1373, 0, 498, 402, 0, 0, 0,
+ 1412, 1411, 1342, 1352, 1414, 1361, 1399, 1347, 1386, 1304,
+ 1372, 1426, 1333, 1382, 1427, 324, 248, 326, 202, 414,
+ 499, 287, 0, 0, 0, 0, 0, 508, 960, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 238, 0,
+ 0, 245, 0, 0, 0, 352, 361, 360, 340, 341,
+ 343, 345, 351, 358, 364, 337, 346, 1329, 1379, 610,
+ 1421, 1330, 1381, 266, 322, 273, 265, 581, 1432, 1413,
+ 1293, 1360, 1420, 1355, 597, 0, 0, 229, 1423, 1354,
+ 0, 1384, 0, 1438, 1288, 1375, 0, 1291, 1295, 1434,
+ 1418, 1324, 276, 0, 0, 0, 0, 0, 0, 0,
+ 1351, 1362, 1396, 1400, 1345, 0, 0, 0, 0, 0,
+ 0, 2411, 0, 1322, 0, 1371, 0, 0, 0, 1300,
+ 1292, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1349, 0, 0, 0, 0, 1303, 0,
+ 1323, 1397, 0, 1286, 298, 1297, 403, 258, 0, 454,
+ 1404, 1417, 1346, 630, 1419, 1344, 1343, 1391, 1301, 1410,
+ 1336, 366, 1299, 331, 197, 225, 0, 1334, 413, 462,
+ 474, 1409, 1319, 1328, 254, 1326, 472, 427, 605, 233,
+ 285, 459, 433, 470, 441, 288, 1370, 1389, 471, 373,
+ 586, 451, 602, 631, 632, 264, 407, 616, 523, 624,
+ 649, 226, 261, 421, 507, 608, 495, 398, 582, 583,
+ 330, 494, 296, 201, 370, 637, 224, 480, 372, 242,
+ 231, 588, 613, 300, 252, 290, 457, 644, 213, 518,
+ 599, 239, 484, 0, 0, 652, 247, 505, 611, 600,
+ 215, 595, 504, 394, 327, 328, 214, 0, 458, 269,
+ 294, 0, 0, 259, 416, 590, 591, 257, 653, 228,
+ 623, 220, 1298, 622, 409, 585, 596, 395, 384, 219,
+ 594, 393, 383, 335, 356, 357, 281, 308, 448, 376,
+ 449, 307, 309, 405, 404, 406, 207, 609, 627, 0,
+ 208, 0, 500, 612, 654, 453, 212, 234, 235, 237,
+ 1314, 280, 284, 292, 295, 304, 305, 314, 368, 420,
+ 447, 443, 452, 1405, 580, 603, 617, 629, 635, 636,
+ 638, 639, 640, 641, 642, 645, 643, 408, 312, 496,
+ 334, 374, 1394, 1437, 426, 473, 240, 607, 497, 199,
+ 1308, 1313, 1306, 0, 255, 256, 1376, 576, 1309, 1307,
+ 1365, 1366, 1310, 1428, 1429, 1430, 1415, 655, 656, 657,
+ 658, 659, 660, 661, 662, 663, 664, 665, 666, 667,
+ 668, 669, 670, 671, 672, 650, 509, 515, 510, 511,
+ 512, 513, 514, 0, 516, 1398, 1302, 0, 1311, 1312,
+ 399, 1407, 592, 593, 673, 385, 487, 604, 336, 350,
+ 353, 342, 362, 0, 363, 338, 339, 344, 347, 348,
+ 349, 354, 355, 359, 365, 249, 210, 391, 400, 579,
+ 313, 216, 217, 218, 525, 526, 527, 528, 620, 621,
+ 625, 205, 463, 464, 465, 466, 293, 615, 310, 469,
+ 468, 332, 333, 380, 450, 541, 543, 554, 558, 560,
+ 562, 568, 571, 542, 544, 555, 559, 561, 563, 569,
+ 572, 531, 533, 535, 537, 550, 549, 546, 574, 575,
+ 552, 557, 536, 548, 553, 566, 573, 570, 530, 534,
+ 538, 547, 565, 564, 545, 556, 567, 551, 539, 532,
+ 540, 1369, 196, 221, 369, 1433, 455, 289, 651, 619,
+ 485, 614, 206, 223, 1305, 263, 1317, 1325, 0, 1331,
+ 1339, 1340, 1353, 1356, 1357, 1358, 1359, 1377, 1378, 1380,
+ 1388, 1390, 1393, 1395, 1402, 1416, 1436, 198, 200, 209,
+ 222, 232, 236, 243, 262, 277, 279, 286, 299, 311,
+ 319, 320, 323, 329, 381, 387, 388, 389, 390, 410,
+ 411, 412, 415, 418, 419, 422, 424, 425, 428, 432,
+ 436, 437, 438, 440, 442, 444, 456, 461, 475, 476,
+ 477, 478, 479, 482, 483, 489, 490, 491, 492, 493,
+ 501, 502, 517, 587, 589, 606, 626, 633, 481, 302,
+ 303, 445, 446, 315, 316, 647, 648, 301, 601, 634,
+ 598, 646, 628, 439, 379, 1368, 1374, 382, 282, 306,
+ 321, 1383, 618, 503, 227, 467, 291, 251, 1401, 1403,
+ 211, 246, 230, 260, 275, 278, 325, 392, 401, 430,
+ 435, 297, 272, 244, 460, 241, 486, 520, 521, 522,
+ 524, 396, 267, 434, 1364, 1392, 377, 577, 578, 317,
+ 397, 0, 0, 0, 0, 0, 0, 1422, 1406, 529,
+ 0, 1348, 1425, 1316, 1335, 1435, 1338, 1341, 1385, 1294,
+ 1363, 417, 1332, 1320, 1289, 1327, 1290, 1318, 1350, 271,
+ 1315, 1408, 1367, 1424, 367, 268, 1296, 1287, 204, 506,
+ 1321, 431, 1337, 203, 1387, 488, 253, 378, 375, 584,
+ 283, 274, 270, 250, 318, 386, 429, 519, 423, 1431,
+ 371, 1373, 0, 498, 402, 0, 0, 0, 1412, 1411,
+ 1342, 1352, 1414, 1361, 1399, 1347, 1386, 1304, 1372, 1426,
+ 1333, 1382, 1427, 324, 248, 326, 202, 414, 499, 287,
+ 0, 95, 0, 0, 0, 508, 725, 0, 0, 0,
0, 0, 0, 0, 0, 0, 238, 0, 0, 245,
- 0, 0, 0, 351, 360, 359, 339, 340, 342, 344,
- 350, 357, 363, 336, 345, 1328, 1378, 609, 1420, 1329,
- 1380, 265, 321, 272, 264, 580, 1431, 1412, 1292, 1359,
- 1419, 1354, 596, 0, 0, 229, 1422, 1353, 0, 1383,
- 0, 1437, 1287, 1374, 0, 1290, 1294, 1433, 1417, 1323,
- 275, 0, 0, 0, 0, 0, 0, 0, 1350, 1361,
- 1395, 1399, 1344, 0, 0, 0, 0, 0, 0, 3255,
- 0, 1321, 0, 1370, 0, 0, 0, 1299, 1291, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1348, 0, 0, 0, 0, 1302, 0, 1322, 1396,
- 0, 1285, 297, 1296, 402, 257, 0, 453, 1403, 1416,
- 1345, 629, 1418, 1343, 1342, 1390, 1300, 1409, 1335, 365,
- 1298, 330, 197, 225, 0, 1333, 412, 461, 473, 1408,
- 1318, 1327, 253, 1325, 471, 426, 604, 233, 284, 458,
- 432, 469, 440, 287, 1369, 1388, 470, 372, 585, 450,
- 601, 630, 631, 263, 406, 615, 522, 623, 648, 226,
- 260, 420, 506, 607, 494, 397, 581, 582, 329, 493,
- 295, 201, 369, 636, 224, 479, 371, 242, 231, 587,
- 612, 299, 289, 456, 643, 213, 517, 598, 239, 483,
- 0, 0, 651, 247, 504, 610, 599, 215, 594, 503,
- 393, 326, 327, 214, 0, 457, 268, 293, 0, 0,
- 258, 415, 589, 590, 256, 652, 228, 622, 220, 1297,
- 621, 408, 584, 595, 394, 383, 219, 593, 392, 382,
- 334, 355, 356, 280, 307, 447, 375, 448, 306, 308,
- 404, 403, 405, 207, 608, 626, 0, 208, 0, 499,
- 611, 653, 452, 212, 234, 235, 237, 1313, 279, 283,
- 291, 294, 303, 304, 313, 367, 419, 446, 442, 451,
- 1404, 579, 602, 616, 628, 634, 635, 637, 638, 639,
- 640, 641, 644, 642, 407, 311, 495, 333, 373, 1393,
- 1436, 425, 472, 240, 606, 496, 199, 1307, 1312, 1305,
- 0, 254, 255, 1375, 575, 1308, 1306, 1364, 1365, 1309,
- 1427, 1428, 1429, 1414, 654, 655, 656, 657, 658, 659,
+ 0, 0, 0, 352, 361, 360, 340, 341, 343, 345,
+ 351, 358, 364, 337, 346, 1329, 1379, 610, 1421, 1330,
+ 1381, 266, 322, 273, 265, 581, 1432, 1413, 1293, 1360,
+ 1420, 1355, 597, 0, 0, 229, 1423, 1354, 0, 1384,
+ 0, 1438, 1288, 1375, 0, 1291, 1295, 1434, 1418, 1324,
+ 276, 0, 0, 0, 0, 0, 0, 0, 1351, 1362,
+ 1396, 1400, 1345, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1322, 0, 1371, 0, 0, 0, 1300, 1292, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1349, 0, 0, 0, 0, 1303, 0, 1323, 1397,
+ 0, 1286, 298, 1297, 403, 258, 0, 454, 1404, 1417,
+ 1346, 630, 1419, 1344, 1343, 1391, 1301, 1410, 1336, 366,
+ 1299, 331, 197, 225, 0, 1334, 413, 462, 474, 1409,
+ 1319, 1328, 254, 1326, 472, 427, 605, 233, 285, 459,
+ 433, 470, 441, 288, 1370, 1389, 471, 373, 586, 451,
+ 602, 631, 632, 264, 407, 616, 523, 624, 649, 226,
+ 261, 421, 507, 608, 495, 398, 582, 583, 330, 494,
+ 296, 201, 370, 637, 224, 480, 372, 242, 231, 588,
+ 613, 300, 252, 290, 457, 644, 213, 518, 599, 239,
+ 484, 0, 0, 652, 247, 505, 611, 600, 215, 595,
+ 504, 394, 327, 328, 214, 0, 458, 269, 294, 0,
+ 0, 259, 416, 590, 591, 257, 653, 228, 623, 220,
+ 1298, 622, 409, 585, 596, 395, 384, 219, 594, 393,
+ 383, 335, 356, 357, 281, 308, 448, 376, 449, 307,
+ 309, 405, 404, 406, 207, 609, 627, 0, 208, 0,
+ 500, 612, 654, 453, 212, 234, 235, 237, 1314, 280,
+ 284, 292, 295, 304, 305, 314, 368, 420, 447, 443,
+ 452, 1405, 580, 603, 617, 629, 635, 636, 638, 639,
+ 640, 641, 642, 645, 643, 408, 312, 496, 334, 374,
+ 1394, 1437, 426, 473, 240, 607, 497, 199, 1308, 1313,
+ 1306, 0, 255, 256, 1376, 576, 1309, 1307, 1365, 1366,
+ 1310, 1428, 1429, 1430, 1415, 655, 656, 657, 658, 659,
660, 661, 662, 663, 664, 665, 666, 667, 668, 669,
- 670, 671, 649, 508, 514, 509, 510, 511, 512, 513,
- 0, 515, 1397, 1301, 0, 1310, 1311, 398, 1406, 591,
- 592, 672, 384, 486, 603, 335, 349, 352, 341, 361,
- 0, 362, 337, 338, 343, 346, 347, 348, 353, 354,
- 358, 364, 249, 210, 390, 399, 578, 312, 216, 217,
- 218, 524, 525, 526, 527, 619, 620, 624, 205, 462,
- 463, 464, 465, 292, 614, 309, 468, 467, 331, 332,
- 379, 449, 540, 542, 553, 557, 559, 561, 567, 570,
- 541, 543, 554, 558, 560, 562, 568, 571, 530, 532,
- 534, 536, 549, 548, 545, 573, 574, 551, 556, 535,
- 547, 552, 565, 572, 569, 529, 533, 537, 546, 564,
- 563, 544, 555, 566, 550, 538, 531, 539, 1368, 196,
- 221, 368, 1432, 454, 288, 650, 618, 484, 613, 206,
- 223, 1304, 262, 1316, 1324, 0, 1330, 1338, 1339, 1352,
- 1355, 1356, 1357, 1358, 1376, 1377, 1379, 1387, 1389, 1392,
- 1394, 1401, 1415, 1435, 198, 200, 209, 222, 232, 236,
- 243, 261, 276, 278, 285, 298, 310, 318, 319, 322,
- 328, 380, 386, 387, 388, 389, 409, 410, 411, 414,
- 417, 418, 421, 423, 424, 427, 431, 435, 436, 437,
- 439, 441, 443, 455, 460, 474, 475, 476, 477, 478,
- 481, 482, 488, 489, 490, 491, 492, 500, 501, 516,
- 586, 588, 605, 625, 632, 480, 301, 302, 444, 445,
- 314, 315, 646, 647, 300, 600, 633, 597, 645, 627,
- 438, 378, 1367, 1373, 381, 281, 305, 320, 1382, 617,
- 502, 227, 466, 290, 251, 1400, 1402, 211, 246, 230,
- 259, 274, 277, 324, 391, 400, 429, 434, 296, 271,
- 244, 459, 241, 485, 519, 520, 521, 523, 395, 266,
- 433, 1363, 1391, 376, 576, 577, 316, 396, 0, 0,
- 0, 0, 0, 0, 1421, 1405, 528, 0, 1347, 1424,
- 1315, 1334, 1434, 1337, 1340, 1384, 1293, 1362, 416, 1331,
- 1319, 1288, 1326, 1289, 1317, 1349, 270, 1314, 1407, 1366,
- 1423, 366, 267, 1295, 1286, 204, 505, 1320, 430, 1336,
- 203, 1386, 487, 252, 377, 374, 583, 282, 273, 269,
- 250, 317, 385, 428, 518, 422, 1430, 370, 1372, 0,
- 497, 401, 0, 0, 0, 1411, 1410, 1341, 1351, 1413,
- 1360, 1398, 1346, 1385, 1303, 1371, 1425, 1332, 1381, 1426,
- 323, 248, 325, 202, 413, 498, 286, 0, 0, 0,
- 0, 0, 507, 724, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 238, 0, 0, 245, 0, 0, 0,
- 351, 360, 359, 339, 340, 342, 344, 350, 357, 363,
- 336, 345, 1328, 1378, 609, 1420, 1329, 1380, 265, 321,
- 272, 264, 580, 1431, 1412, 1292, 1359, 1419, 1354, 596,
- 0, 0, 229, 1422, 1353, 0, 1383, 0, 1437, 1287,
- 1374, 0, 1290, 1294, 1433, 1417, 1323, 275, 0, 0,
- 0, 0, 0, 0, 0, 1350, 1361, 1395, 1399, 1344,
- 0, 0, 0, 0, 0, 0, 3216, 0, 1321, 0,
- 1370, 0, 0, 0, 1299, 1291, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1348, 0,
- 0, 0, 0, 1302, 0, 1322, 1396, 0, 1285, 297,
- 1296, 402, 257, 0, 453, 1403, 1416, 1345, 629, 1418,
- 1343, 1342, 1390, 1300, 1409, 1335, 365, 1298, 330, 197,
- 225, 0, 1333, 412, 461, 473, 1408, 1318, 1327, 253,
- 1325, 471, 426, 604, 233, 284, 458, 432, 469, 440,
- 287, 1369, 1388, 470, 372, 585, 450, 601, 630, 631,
- 263, 406, 615, 522, 623, 648, 226, 260, 420, 506,
- 607, 494, 397, 581, 582, 329, 493, 295, 201, 369,
- 636, 224, 479, 371, 242, 231, 587, 612, 299, 289,
- 456, 643, 213, 517, 598, 239, 483, 0, 0, 651,
- 247, 504, 610, 599, 215, 594, 503, 393, 326, 327,
- 214, 0, 457, 268, 293, 0, 0, 258, 415, 589,
- 590, 256, 652, 228, 622, 220, 1297, 621, 408, 584,
- 595, 394, 383, 219, 593, 392, 382, 334, 355, 356,
- 280, 307, 447, 375, 448, 306, 308, 404, 403, 405,
- 207, 608, 626, 0, 208, 0, 499, 611, 653, 452,
- 212, 234, 235, 237, 1313, 279, 283, 291, 294, 303,
- 304, 313, 367, 419, 446, 442, 451, 1404, 579, 602,
- 616, 628, 634, 635, 637, 638, 639, 640, 641, 644,
- 642, 407, 311, 495, 333, 373, 1393, 1436, 425, 472,
- 240, 606, 496, 199, 1307, 1312, 1305, 0, 254, 255,
- 1375, 575, 1308, 1306, 1364, 1365, 1309, 1427, 1428, 1429,
- 1414, 654, 655, 656, 657, 658, 659, 660, 661, 662,
- 663, 664, 665, 666, 667, 668, 669, 670, 671, 649,
- 508, 514, 509, 510, 511, 512, 513, 0, 515, 1397,
- 1301, 0, 1310, 1311, 398, 1406, 591, 592, 672, 384,
- 486, 603, 335, 349, 352, 341, 361, 0, 362, 337,
- 338, 343, 346, 347, 348, 353, 354, 358, 364, 249,
- 210, 390, 399, 578, 312, 216, 217, 218, 524, 525,
- 526, 527, 619, 620, 624, 205, 462, 463, 464, 465,
- 292, 614, 309, 468, 467, 331, 332, 379, 449, 540,
- 542, 553, 557, 559, 561, 567, 570, 541, 543, 554,
- 558, 560, 562, 568, 571, 530, 532, 534, 536, 549,
- 548, 545, 573, 574, 551, 556, 535, 547, 552, 565,
- 572, 569, 529, 533, 537, 546, 564, 563, 544, 555,
- 566, 550, 538, 531, 539, 1368, 196, 221, 368, 1432,
- 454, 288, 650, 618, 484, 613, 206, 223, 1304, 262,
- 1316, 1324, 0, 1330, 1338, 1339, 1352, 1355, 1356, 1357,
- 1358, 1376, 1377, 1379, 1387, 1389, 1392, 1394, 1401, 1415,
- 1435, 198, 200, 209, 222, 232, 236, 243, 261, 276,
- 278, 285, 298, 310, 318, 319, 322, 328, 380, 386,
- 387, 388, 389, 409, 410, 411, 414, 417, 418, 421,
- 423, 424, 427, 431, 435, 436, 437, 439, 441, 443,
- 455, 460, 474, 475, 476, 477, 478, 481, 482, 488,
- 489, 490, 491, 492, 500, 501, 516, 586, 588, 605,
- 625, 632, 480, 301, 302, 444, 445, 314, 315, 646,
- 647, 300, 600, 633, 597, 645, 627, 438, 378, 1367,
- 1373, 381, 281, 305, 320, 1382, 617, 502, 227, 466,
- 290, 251, 1400, 1402, 211, 246, 230, 259, 274, 277,
- 324, 391, 400, 429, 434, 296, 271, 244, 459, 241,
- 485, 519, 520, 521, 523, 395, 266, 433, 1363, 1391,
- 376, 576, 577, 316, 396, 0, 0, 0, 0, 0,
- 0, 1421, 1405, 528, 0, 1347, 1424, 1315, 1334, 1434,
- 1337, 1340, 1384, 1293, 1362, 416, 1331, 1319, 1288, 1326,
- 1289, 1317, 1349, 270, 1314, 1407, 1366, 1423, 366, 267,
- 1295, 1286, 204, 505, 1320, 430, 1336, 203, 1386, 487,
- 252, 377, 374, 583, 282, 273, 269, 250, 317, 385,
- 428, 518, 422, 1430, 370, 1372, 0, 497, 401, 0,
- 0, 0, 1411, 1410, 1341, 1351, 1413, 1360, 1398, 1346,
- 1385, 1303, 1371, 1425, 1332, 1381, 1426, 323, 248, 325,
- 202, 413, 498, 286, 0, 0, 0, 0, 0, 507,
- 959, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 351, 360, 359,
- 339, 340, 342, 344, 350, 357, 363, 336, 345, 1328,
- 1378, 609, 1420, 1329, 1380, 265, 321, 272, 264, 580,
- 1431, 1412, 1292, 1359, 1419, 1354, 596, 0, 0, 229,
- 1422, 1353, 0, 1383, 0, 1437, 1287, 1374, 0, 1290,
- 1294, 1433, 1417, 1323, 275, 0, 0, 0, 0, 0,
- 0, 0, 1350, 1361, 1395, 1399, 1344, 0, 0, 0,
- 0, 0, 0, 2411, 0, 1321, 0, 1370, 0, 0,
- 0, 1299, 1291, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1348, 0, 0, 0, 0,
- 1302, 0, 1322, 1396, 0, 1285, 297, 1296, 402, 257,
- 0, 453, 1403, 1416, 1345, 629, 1418, 1343, 1342, 1390,
- 1300, 1409, 1335, 365, 1298, 330, 197, 225, 0, 1333,
- 412, 461, 473, 1408, 1318, 1327, 253, 1325, 471, 426,
- 604, 233, 284, 458, 432, 469, 440, 287, 1369, 1388,
- 470, 372, 585, 450, 601, 630, 631, 263, 406, 615,
- 522, 623, 648, 226, 260, 420, 506, 607, 494, 397,
- 581, 582, 329, 493, 295, 201, 369, 636, 224, 479,
- 371, 242, 231, 587, 612, 299, 289, 456, 643, 213,
- 517, 598, 239, 483, 0, 0, 651, 247, 504, 610,
- 599, 215, 594, 503, 393, 326, 327, 214, 0, 457,
- 268, 293, 0, 0, 258, 415, 589, 590, 256, 652,
- 228, 622, 220, 1297, 621, 408, 584, 595, 394, 383,
- 219, 593, 392, 382, 334, 355, 356, 280, 307, 447,
- 375, 448, 306, 308, 404, 403, 405, 207, 608, 626,
- 0, 208, 0, 499, 611, 653, 452, 212, 234, 235,
- 237, 1313, 279, 283, 291, 294, 303, 304, 313, 367,
- 419, 446, 442, 451, 1404, 579, 602, 616, 628, 634,
- 635, 637, 638, 639, 640, 641, 644, 642, 407, 311,
- 495, 333, 373, 1393, 1436, 425, 472, 240, 606, 496,
- 199, 1307, 1312, 1305, 0, 254, 255, 1375, 575, 1308,
- 1306, 1364, 1365, 1309, 1427, 1428, 1429, 1414, 654, 655,
- 656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
- 666, 667, 668, 669, 670, 671, 649, 508, 514, 509,
- 510, 511, 512, 513, 0, 515, 1397, 1301, 0, 1310,
- 1311, 398, 1406, 591, 592, 672, 384, 486, 603, 335,
- 349, 352, 341, 361, 0, 362, 337, 338, 343, 346,
- 347, 348, 353, 354, 358, 364, 249, 210, 390, 399,
- 578, 312, 216, 217, 218, 524, 525, 526, 527, 619,
- 620, 624, 205, 462, 463, 464, 465, 292, 614, 309,
- 468, 467, 331, 332, 379, 449, 540, 542, 553, 557,
- 559, 561, 567, 570, 541, 543, 554, 558, 560, 562,
- 568, 571, 530, 532, 534, 536, 549, 548, 545, 573,
- 574, 551, 556, 535, 547, 552, 565, 572, 569, 529,
- 533, 537, 546, 564, 563, 544, 555, 566, 550, 538,
- 531, 539, 1368, 196, 221, 368, 1432, 454, 288, 650,
- 618, 484, 613, 206, 223, 1304, 262, 1316, 1324, 0,
- 1330, 1338, 1339, 1352, 1355, 1356, 1357, 1358, 1376, 1377,
- 1379, 1387, 1389, 1392, 1394, 1401, 1415, 1435, 198, 200,
- 209, 222, 232, 236, 243, 261, 276, 278, 285, 298,
- 310, 318, 319, 322, 328, 380, 386, 387, 388, 389,
- 409, 410, 411, 414, 417, 418, 421, 423, 424, 427,
- 431, 435, 436, 437, 439, 441, 443, 455, 460, 474,
- 475, 476, 477, 478, 481, 482, 488, 489, 490, 491,
- 492, 500, 501, 516, 586, 588, 605, 625, 632, 480,
- 301, 302, 444, 445, 314, 315, 646, 647, 300, 600,
- 633, 597, 645, 627, 438, 378, 1367, 1373, 381, 281,
- 305, 320, 1382, 617, 502, 227, 466, 290, 251, 1400,
- 1402, 211, 246, 230, 259, 274, 277, 324, 391, 400,
- 429, 434, 296, 271, 244, 459, 241, 485, 519, 520,
- 521, 523, 395, 266, 433, 1363, 1391, 376, 576, 577,
- 316, 396, 0, 0, 0, 0, 0, 0, 1421, 1405,
- 528, 0, 1347, 1424, 1315, 1334, 1434, 1337, 1340, 1384,
- 1293, 1362, 416, 1331, 1319, 1288, 1326, 1289, 1317, 1349,
- 270, 1314, 1407, 1366, 1423, 366, 267, 1295, 1286, 204,
- 505, 1320, 430, 1336, 203, 1386, 487, 252, 377, 374,
- 583, 282, 273, 269, 250, 317, 385, 428, 518, 422,
- 1430, 370, 1372, 0, 497, 401, 0, 0, 0, 1411,
- 1410, 1341, 1351, 1413, 1360, 1398, 1346, 1385, 1303, 1371,
- 1425, 1332, 1381, 1426, 323, 248, 325, 202, 413, 498,
- 286, 0, 95, 0, 0, 0, 507, 724, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 238, 0, 0,
- 245, 0, 0, 0, 351, 360, 359, 339, 340, 342,
- 344, 350, 357, 363, 336, 345, 1328, 1378, 609, 1420,
- 1329, 1380, 265, 321, 272, 264, 580, 1431, 1412, 1292,
- 1359, 1419, 1354, 596, 0, 0, 229, 1422, 1353, 0,
- 1383, 0, 1437, 1287, 1374, 0, 1290, 1294, 1433, 1417,
- 1323, 275, 0, 0, 0, 0, 0, 0, 0, 1350,
- 1361, 1395, 1399, 1344, 0, 0, 0, 0, 0, 0,
- 0, 0, 1321, 0, 1370, 0, 0, 0, 1299, 1291,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1348, 0, 0, 0, 0, 1302, 0, 1322,
- 1396, 0, 1285, 297, 1296, 402, 257, 0, 453, 1403,
- 1416, 1345, 629, 1418, 1343, 1342, 1390, 1300, 1409, 1335,
- 365, 1298, 330, 197, 225, 0, 1333, 412, 461, 473,
- 1408, 1318, 1327, 253, 1325, 471, 426, 604, 233, 284,
- 458, 432, 469, 440, 287, 1369, 1388, 470, 372, 585,
- 450, 601, 630, 631, 263, 406, 615, 522, 623, 648,
- 226, 260, 420, 506, 607, 494, 397, 581, 582, 329,
- 493, 295, 201, 369, 636, 224, 479, 371, 242, 231,
- 587, 612, 299, 289, 456, 643, 213, 517, 598, 239,
- 483, 0, 0, 651, 247, 504, 610, 599, 215, 594,
- 503, 393, 326, 327, 214, 0, 457, 268, 293, 0,
- 0, 258, 415, 589, 590, 256, 652, 228, 622, 220,
- 1297, 621, 408, 584, 595, 394, 383, 219, 593, 392,
- 382, 334, 355, 356, 280, 307, 447, 375, 448, 306,
- 308, 404, 403, 405, 207, 608, 626, 0, 208, 0,
- 499, 611, 653, 452, 212, 234, 235, 237, 1313, 279,
- 283, 291, 294, 303, 304, 313, 367, 419, 446, 442,
- 451, 1404, 579, 602, 616, 628, 634, 635, 637, 638,
- 639, 640, 641, 644, 642, 407, 311, 495, 333, 373,
- 1393, 1436, 425, 472, 240, 606, 496, 199, 1307, 1312,
- 1305, 0, 254, 255, 1375, 575, 1308, 1306, 1364, 1365,
- 1309, 1427, 1428, 1429, 1414, 654, 655, 656, 657, 658,
- 659, 660, 661, 662, 663, 664, 665, 666, 667, 668,
- 669, 670, 671, 649, 508, 514, 509, 510, 511, 512,
- 513, 0, 515, 1397, 1301, 0, 1310, 1311, 398, 1406,
- 591, 592, 672, 384, 486, 603, 335, 349, 352, 341,
- 361, 0, 362, 337, 338, 343, 346, 347, 348, 353,
- 354, 358, 364, 249, 210, 390, 399, 578, 312, 216,
- 217, 218, 524, 525, 526, 527, 619, 620, 624, 205,
- 462, 463, 464, 465, 292, 614, 309, 468, 467, 331,
- 332, 379, 449, 540, 542, 553, 557, 559, 561, 567,
- 570, 541, 543, 554, 558, 560, 562, 568, 571, 530,
- 532, 534, 536, 549, 548, 545, 573, 574, 551, 556,
- 535, 547, 552, 565, 572, 569, 529, 533, 537, 546,
- 564, 563, 544, 555, 566, 550, 538, 531, 539, 1368,
- 196, 221, 368, 1432, 454, 288, 650, 618, 484, 613,
- 206, 223, 1304, 262, 1316, 1324, 0, 1330, 1338, 1339,
- 1352, 1355, 1356, 1357, 1358, 1376, 1377, 1379, 1387, 1389,
- 1392, 1394, 1401, 1415, 1435, 198, 200, 209, 222, 232,
- 236, 243, 261, 276, 278, 285, 298, 310, 318, 319,
- 322, 328, 380, 386, 387, 388, 389, 409, 410, 411,
- 414, 417, 418, 421, 423, 424, 427, 431, 435, 436,
- 437, 439, 441, 443, 455, 460, 474, 475, 476, 477,
- 478, 481, 482, 488, 489, 490, 491, 492, 500, 501,
- 516, 586, 588, 605, 625, 632, 480, 301, 302, 444,
- 445, 314, 315, 646, 647, 300, 600, 633, 597, 645,
- 627, 438, 378, 1367, 1373, 381, 281, 305, 320, 1382,
- 617, 502, 227, 466, 290, 251, 1400, 1402, 211, 246,
- 230, 259, 274, 277, 324, 391, 400, 429, 434, 296,
- 271, 244, 459, 241, 485, 519, 520, 521, 523, 395,
- 266, 433, 1363, 1391, 376, 576, 577, 316, 396, 0,
- 0, 0, 0, 0, 0, 1421, 1405, 528, 0, 1347,
- 1424, 1315, 1334, 1434, 1337, 1340, 1384, 1293, 1362, 416,
- 1331, 1319, 1288, 1326, 1289, 1317, 1349, 270, 1314, 1407,
- 1366, 1423, 366, 267, 1295, 1286, 204, 505, 1320, 430,
- 1336, 203, 1386, 487, 252, 377, 374, 583, 282, 273,
- 269, 250, 317, 385, 428, 518, 422, 1430, 370, 1372,
- 0, 497, 401, 0, 0, 0, 1411, 1410, 1341, 1351,
- 1413, 1360, 1398, 1346, 1385, 1303, 1371, 1425, 1332, 1381,
- 1426, 323, 248, 325, 202, 413, 498, 286, 0, 0,
- 0, 0, 0, 507, 194, 0, 0, 0, 0, 0,
+ 670, 671, 672, 650, 509, 515, 510, 511, 512, 513,
+ 514, 0, 516, 1398, 1302, 0, 1311, 1312, 399, 1407,
+ 592, 593, 673, 385, 487, 604, 336, 350, 353, 342,
+ 362, 0, 363, 338, 339, 344, 347, 348, 349, 354,
+ 355, 359, 365, 249, 210, 391, 400, 579, 313, 216,
+ 217, 218, 525, 526, 527, 528, 620, 621, 625, 205,
+ 463, 464, 465, 466, 293, 615, 310, 469, 468, 332,
+ 333, 380, 450, 541, 543, 554, 558, 560, 562, 568,
+ 571, 542, 544, 555, 559, 561, 563, 569, 572, 531,
+ 533, 535, 537, 550, 549, 546, 574, 575, 552, 557,
+ 536, 548, 553, 566, 573, 570, 530, 534, 538, 547,
+ 565, 564, 545, 556, 567, 551, 539, 532, 540, 1369,
+ 196, 221, 369, 1433, 455, 289, 651, 619, 485, 614,
+ 206, 223, 1305, 263, 1317, 1325, 0, 1331, 1339, 1340,
+ 1353, 1356, 1357, 1358, 1359, 1377, 1378, 1380, 1388, 1390,
+ 1393, 1395, 1402, 1416, 1436, 198, 200, 209, 222, 232,
+ 236, 243, 262, 277, 279, 286, 299, 311, 319, 320,
+ 323, 329, 381, 387, 388, 389, 390, 410, 411, 412,
+ 415, 418, 419, 422, 424, 425, 428, 432, 436, 437,
+ 438, 440, 442, 444, 456, 461, 475, 476, 477, 478,
+ 479, 482, 483, 489, 490, 491, 492, 493, 501, 502,
+ 517, 587, 589, 606, 626, 633, 481, 302, 303, 445,
+ 446, 315, 316, 647, 648, 301, 601, 634, 598, 646,
+ 628, 439, 379, 1368, 1374, 382, 282, 306, 321, 1383,
+ 618, 503, 227, 467, 291, 251, 1401, 1403, 211, 246,
+ 230, 260, 275, 278, 325, 392, 401, 430, 435, 297,
+ 272, 244, 460, 241, 486, 520, 521, 522, 524, 396,
+ 267, 434, 1364, 1392, 377, 577, 578, 317, 397, 0,
+ 0, 0, 0, 0, 0, 1422, 1406, 529, 0, 1348,
+ 1425, 1316, 1335, 1435, 1338, 1341, 1385, 1294, 1363, 417,
+ 1332, 1320, 1289, 1327, 1290, 1318, 1350, 271, 1315, 1408,
+ 1367, 1424, 367, 268, 1296, 1287, 204, 506, 1321, 431,
+ 1337, 203, 1387, 488, 253, 378, 375, 584, 283, 274,
+ 270, 250, 318, 386, 429, 519, 423, 1431, 371, 1373,
+ 0, 498, 402, 0, 0, 0, 1412, 1411, 1342, 1352,
+ 1414, 1361, 1399, 1347, 1386, 1304, 1372, 1426, 1333, 1382,
+ 1427, 324, 248, 326, 202, 414, 499, 287, 0, 0,
+ 0, 0, 0, 508, 194, 0, 0, 0, 0, 0,
0, 0, 0, 0, 238, 0, 0, 245, 0, 0,
- 0, 351, 360, 359, 339, 340, 342, 344, 350, 357,
- 363, 336, 345, 1328, 1378, 609, 1420, 1329, 1380, 265,
- 321, 272, 264, 580, 1431, 1412, 1292, 1359, 1419, 1354,
- 596, 0, 0, 229, 1422, 1353, 0, 1383, 0, 1437,
- 1287, 1374, 0, 1290, 1294, 1433, 1417, 1323, 275, 0,
- 0, 0, 0, 0, 0, 0, 1350, 1361, 1395, 1399,
- 1344, 0, 0, 0, 0, 0, 0, 0, 0, 1321,
- 0, 1370, 0, 0, 0, 1299, 1291, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1348,
- 0, 0, 0, 0, 1302, 0, 1322, 1396, 0, 1285,
- 297, 1296, 402, 257, 0, 453, 1403, 1416, 1345, 629,
- 1418, 1343, 1342, 1390, 1300, 1409, 1335, 365, 1298, 330,
- 197, 225, 0, 1333, 412, 461, 473, 1408, 1318, 1327,
- 253, 1325, 471, 426, 604, 233, 284, 458, 432, 469,
- 440, 287, 1369, 1388, 470, 372, 585, 450, 601, 630,
- 631, 263, 406, 615, 522, 623, 648, 226, 260, 420,
- 506, 607, 494, 397, 581, 582, 329, 493, 295, 201,
- 369, 636, 224, 479, 371, 242, 231, 587, 612, 299,
- 289, 456, 643, 213, 517, 598, 239, 483, 0, 0,
- 651, 247, 504, 610, 599, 215, 594, 503, 393, 326,
- 327, 214, 0, 457, 268, 293, 0, 0, 258, 415,
- 589, 590, 256, 652, 228, 622, 220, 1297, 621, 408,
- 584, 595, 394, 383, 219, 593, 392, 382, 334, 355,
- 356, 280, 307, 447, 375, 448, 306, 308, 404, 403,
- 405, 207, 608, 626, 0, 208, 0, 499, 611, 653,
- 452, 212, 234, 235, 237, 1313, 279, 283, 291, 294,
- 303, 304, 313, 367, 419, 446, 442, 451, 1404, 579,
- 602, 616, 628, 634, 635, 637, 638, 639, 640, 641,
- 644, 642, 407, 311, 495, 333, 373, 1393, 1436, 425,
- 472, 240, 606, 496, 199, 1307, 1312, 1305, 0, 254,
- 255, 1375, 575, 1308, 1306, 1364, 1365, 1309, 1427, 1428,
- 1429, 1414, 654, 655, 656, 657, 658, 659, 660, 661,
+ 0, 352, 361, 360, 340, 341, 343, 345, 351, 358,
+ 364, 337, 346, 1329, 1379, 610, 1421, 1330, 1381, 266,
+ 322, 273, 265, 581, 1432, 1413, 1293, 1360, 1420, 1355,
+ 597, 0, 0, 229, 1423, 1354, 0, 1384, 0, 1438,
+ 1288, 1375, 0, 1291, 1295, 1434, 1418, 1324, 276, 0,
+ 0, 0, 0, 0, 0, 0, 1351, 1362, 1396, 1400,
+ 1345, 0, 0, 0, 0, 0, 0, 0, 0, 1322,
+ 0, 1371, 0, 0, 0, 1300, 1292, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1349,
+ 0, 0, 0, 0, 1303, 0, 1323, 1397, 0, 1286,
+ 298, 1297, 403, 258, 0, 454, 1404, 1417, 1346, 630,
+ 1419, 1344, 1343, 1391, 1301, 1410, 1336, 366, 1299, 331,
+ 197, 225, 0, 1334, 413, 462, 474, 1409, 1319, 1328,
+ 254, 1326, 472, 427, 605, 233, 285, 459, 433, 470,
+ 441, 288, 1370, 1389, 471, 373, 586, 451, 602, 631,
+ 632, 264, 407, 616, 523, 624, 649, 226, 261, 421,
+ 507, 608, 495, 398, 582, 583, 330, 494, 296, 201,
+ 370, 637, 224, 480, 372, 242, 231, 588, 613, 300,
+ 252, 290, 457, 644, 213, 518, 599, 239, 484, 0,
+ 0, 652, 247, 505, 611, 600, 215, 595, 504, 394,
+ 327, 328, 214, 0, 458, 269, 294, 0, 0, 259,
+ 416, 590, 591, 257, 653, 228, 623, 220, 1298, 622,
+ 409, 585, 596, 395, 384, 219, 594, 393, 383, 335,
+ 356, 357, 281, 308, 448, 376, 449, 307, 309, 405,
+ 404, 406, 207, 609, 627, 0, 208, 0, 500, 612,
+ 654, 453, 212, 234, 235, 237, 1314, 280, 284, 292,
+ 295, 304, 305, 314, 368, 420, 447, 443, 452, 1405,
+ 580, 603, 617, 629, 635, 636, 638, 639, 640, 641,
+ 642, 645, 643, 408, 312, 496, 334, 374, 1394, 1437,
+ 426, 473, 240, 607, 497, 199, 1308, 1313, 1306, 0,
+ 255, 256, 1376, 576, 1309, 1307, 1365, 1366, 1310, 1428,
+ 1429, 1430, 1415, 655, 656, 657, 658, 659, 660, 661,
662, 663, 664, 665, 666, 667, 668, 669, 670, 671,
- 649, 508, 514, 509, 510, 511, 512, 513, 0, 515,
- 1397, 1301, 0, 1310, 1311, 398, 1406, 591, 592, 672,
- 384, 486, 603, 335, 349, 352, 341, 361, 0, 362,
- 337, 338, 343, 346, 347, 348, 353, 354, 358, 364,
- 249, 210, 390, 399, 578, 312, 216, 217, 218, 524,
- 525, 526, 527, 619, 620, 624, 205, 462, 463, 464,
- 465, 292, 614, 309, 468, 467, 331, 332, 379, 449,
- 540, 542, 553, 557, 559, 561, 567, 570, 541, 543,
- 554, 558, 560, 562, 568, 571, 530, 532, 534, 536,
- 549, 548, 545, 573, 574, 551, 556, 535, 547, 552,
- 565, 572, 569, 529, 533, 537, 546, 564, 563, 544,
- 555, 566, 550, 538, 531, 539, 1368, 196, 221, 368,
- 1432, 454, 288, 650, 618, 484, 613, 206, 223, 1304,
- 262, 1316, 1324, 0, 1330, 1338, 1339, 1352, 1355, 1356,
- 1357, 1358, 1376, 1377, 1379, 1387, 1389, 1392, 1394, 1401,
- 1415, 1435, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 380,
- 386, 387, 388, 389, 409, 410, 411, 414, 417, 418,
- 421, 423, 424, 427, 431, 435, 436, 437, 439, 441,
- 443, 455, 460, 474, 475, 476, 477, 478, 481, 482,
- 488, 489, 490, 491, 492, 500, 501, 516, 586, 588,
- 605, 625, 632, 480, 301, 302, 444, 445, 314, 315,
- 646, 647, 300, 600, 633, 597, 645, 627, 438, 378,
- 1367, 1373, 381, 281, 305, 320, 1382, 617, 502, 227,
- 466, 290, 251, 1400, 1402, 211, 246, 230, 259, 274,
- 277, 324, 391, 400, 429, 434, 296, 271, 244, 459,
- 241, 485, 519, 520, 521, 523, 395, 266, 433, 1363,
- 1391, 376, 576, 577, 316, 396, 0, 0, 0, 0,
- 0, 0, 1421, 1405, 528, 0, 1347, 1424, 1315, 1334,
- 1434, 1337, 1340, 1384, 1293, 1362, 416, 1331, 1319, 1288,
- 1326, 1289, 1317, 1349, 270, 1314, 1407, 1366, 1423, 366,
- 267, 1295, 1286, 204, 505, 1320, 430, 1336, 203, 1386,
- 487, 252, 377, 374, 583, 282, 273, 269, 250, 317,
- 385, 428, 518, 422, 1430, 370, 1372, 0, 497, 401,
- 0, 0, 0, 1411, 1410, 1341, 1351, 1413, 1360, 1398,
- 1346, 1385, 1303, 1371, 1425, 1332, 1381, 1426, 323, 248,
- 325, 202, 413, 498, 286, 0, 0, 0, 0, 0,
- 507, 724, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 238, 0, 0, 245, 0, 0, 0, 351, 360,
- 359, 339, 340, 342, 344, 350, 357, 363, 336, 345,
- 1328, 1378, 609, 1420, 1329, 1380, 265, 321, 272, 264,
- 580, 1431, 1412, 1292, 1359, 1419, 1354, 596, 0, 0,
- 229, 1422, 1353, 0, 1383, 0, 1437, 1287, 1374, 0,
- 1290, 1294, 1433, 1417, 1323, 275, 0, 0, 0, 0,
- 0, 0, 0, 1350, 1361, 1395, 1399, 1344, 0, 0,
- 0, 0, 0, 0, 0, 0, 1321, 0, 1370, 0,
- 0, 0, 1299, 1291, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1348, 0, 0, 0,
- 0, 1302, 0, 1322, 1396, 0, 1285, 297, 1296, 402,
- 257, 0, 453, 1403, 1416, 1345, 629, 1418, 1343, 1342,
- 1390, 1300, 1409, 1335, 365, 1298, 330, 197, 225, 0,
- 1333, 412, 461, 473, 1408, 1318, 1327, 253, 1325, 471,
- 426, 604, 233, 284, 458, 432, 469, 440, 287, 1369,
- 1388, 470, 372, 585, 450, 601, 630, 631, 263, 406,
- 615, 522, 623, 648, 226, 260, 420, 506, 607, 494,
- 397, 581, 582, 329, 493, 295, 201, 369, 636, 224,
- 479, 371, 242, 231, 587, 612, 299, 289, 456, 643,
- 213, 517, 598, 239, 483, 0, 0, 651, 247, 504,
- 610, 599, 215, 594, 503, 393, 326, 327, 214, 0,
- 457, 268, 293, 0, 0, 258, 415, 589, 590, 256,
- 652, 228, 622, 220, 1297, 621, 408, 584, 595, 394,
- 383, 219, 593, 392, 382, 334, 355, 356, 280, 307,
- 447, 375, 448, 306, 308, 404, 403, 405, 207, 608,
- 626, 0, 208, 0, 499, 611, 653, 452, 212, 234,
- 235, 237, 1313, 279, 283, 291, 294, 303, 304, 313,
- 367, 419, 446, 442, 451, 1404, 579, 602, 616, 628,
- 634, 635, 637, 638, 639, 640, 641, 644, 642, 407,
- 311, 495, 333, 373, 1393, 1436, 425, 472, 240, 606,
- 496, 199, 1307, 1312, 1305, 0, 254, 255, 1375, 575,
- 1308, 1306, 1364, 1365, 1309, 1427, 1428, 1429, 1414, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 665, 666, 667, 668, 669, 670, 671, 649, 508, 514,
- 509, 510, 511, 512, 513, 0, 515, 1397, 1301, 0,
- 1310, 1311, 398, 1406, 591, 592, 672, 384, 486, 603,
- 335, 349, 352, 341, 361, 0, 362, 337, 338, 343,
- 346, 347, 348, 353, 354, 358, 364, 249, 210, 390,
- 399, 578, 312, 216, 217, 218, 524, 525, 526, 527,
- 619, 620, 624, 205, 462, 463, 464, 465, 292, 614,
- 309, 468, 467, 331, 332, 379, 449, 540, 542, 553,
- 557, 559, 561, 567, 570, 541, 543, 554, 558, 560,
- 562, 568, 571, 530, 532, 534, 536, 549, 548, 545,
- 573, 574, 551, 556, 535, 547, 552, 565, 572, 569,
- 529, 533, 537, 546, 564, 563, 544, 555, 566, 550,
- 538, 531, 539, 1368, 196, 221, 368, 1432, 454, 288,
- 650, 618, 484, 613, 206, 223, 1304, 262, 1316, 1324,
- 0, 1330, 1338, 1339, 1352, 1355, 1356, 1357, 1358, 1376,
- 1377, 1379, 1387, 1389, 1392, 1394, 1401, 1415, 1435, 198,
- 200, 209, 222, 232, 236, 243, 261, 276, 278, 285,
- 298, 310, 318, 319, 322, 328, 380, 386, 387, 388,
- 389, 409, 410, 411, 414, 417, 418, 421, 423, 424,
- 427, 431, 435, 436, 437, 439, 441, 443, 455, 460,
- 474, 475, 476, 477, 478, 481, 482, 488, 489, 490,
- 491, 492, 500, 501, 516, 586, 588, 605, 625, 632,
- 480, 301, 302, 444, 445, 314, 315, 646, 647, 300,
- 600, 633, 597, 645, 627, 438, 378, 1367, 1373, 381,
- 281, 305, 320, 1382, 617, 502, 227, 466, 290, 251,
- 1400, 1402, 211, 246, 230, 259, 274, 277, 324, 391,
- 400, 429, 434, 296, 271, 244, 459, 241, 485, 519,
- 520, 521, 523, 395, 266, 433, 1363, 1391, 376, 576,
- 577, 316, 396, 0, 0, 0, 0, 0, 0, 1421,
- 1405, 528, 0, 1347, 1424, 1315, 1334, 1434, 1337, 1340,
- 1384, 1293, 1362, 416, 1331, 1319, 1288, 1326, 1289, 1317,
- 1349, 270, 1314, 1407, 1366, 1423, 366, 267, 1295, 1286,
- 204, 505, 1320, 430, 1336, 203, 1386, 487, 252, 377,
- 374, 583, 282, 273, 269, 250, 317, 385, 428, 518,
- 422, 1430, 370, 1372, 0, 497, 401, 0, 0, 0,
- 1411, 1410, 1341, 1351, 1413, 1360, 1398, 1346, 1385, 1303,
- 1371, 1425, 1332, 1381, 1426, 323, 248, 325, 202, 413,
- 498, 286, 0, 0, 0, 0, 0, 507, 959, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 238, 0,
- 0, 245, 0, 0, 0, 351, 360, 359, 339, 340,
- 342, 344, 350, 357, 363, 336, 345, 1328, 1378, 609,
- 1420, 1329, 1380, 265, 321, 272, 264, 580, 1431, 1412,
- 1292, 1359, 1419, 1354, 596, 0, 0, 229, 1422, 1353,
- 0, 1383, 0, 1437, 1287, 1374, 0, 1290, 1294, 1433,
- 1417, 1323, 275, 0, 0, 0, 0, 0, 0, 0,
- 1350, 1361, 1395, 1399, 1344, 0, 0, 0, 0, 0,
- 0, 0, 0, 1321, 0, 1370, 0, 0, 0, 1299,
- 1291, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1348, 0, 0, 0, 0, 1302, 0,
- 1322, 1396, 0, 1285, 297, 1296, 402, 257, 0, 453,
- 1403, 1416, 1345, 629, 1418, 1343, 1342, 1390, 1300, 1409,
- 1335, 365, 1298, 330, 197, 225, 0, 1333, 412, 461,
- 473, 1408, 1318, 1327, 253, 1325, 471, 426, 604, 233,
- 284, 458, 432, 469, 440, 287, 1369, 1388, 470, 372,
- 585, 450, 601, 630, 631, 263, 406, 615, 522, 623,
- 648, 226, 260, 420, 506, 607, 494, 397, 581, 582,
- 329, 493, 295, 201, 369, 636, 224, 479, 371, 242,
- 231, 587, 612, 299, 289, 456, 643, 213, 517, 598,
- 239, 483, 0, 0, 651, 247, 504, 610, 599, 215,
- 594, 503, 393, 326, 327, 214, 0, 457, 268, 293,
- 0, 0, 258, 415, 589, 590, 256, 652, 228, 622,
- 220, 1297, 621, 408, 584, 595, 394, 383, 219, 593,
- 392, 382, 334, 355, 356, 280, 307, 447, 375, 448,
- 306, 308, 404, 403, 405, 207, 608, 626, 0, 208,
- 0, 499, 611, 653, 452, 212, 234, 235, 237, 1313,
- 279, 283, 291, 294, 303, 304, 313, 367, 419, 446,
- 442, 451, 1404, 579, 602, 616, 628, 634, 635, 637,
- 638, 639, 640, 641, 644, 642, 407, 311, 495, 333,
- 373, 1393, 1436, 425, 472, 240, 606, 496, 199, 1307,
- 1312, 1305, 0, 254, 255, 1375, 575, 1308, 1306, 1364,
- 1365, 1309, 1427, 1428, 1429, 1414, 654, 655, 656, 657,
+ 672, 650, 509, 515, 510, 511, 512, 513, 514, 0,
+ 516, 1398, 1302, 0, 1311, 1312, 399, 1407, 592, 593,
+ 673, 385, 487, 604, 336, 350, 353, 342, 362, 0,
+ 363, 338, 339, 344, 347, 348, 349, 354, 355, 359,
+ 365, 249, 210, 391, 400, 579, 313, 216, 217, 218,
+ 525, 526, 527, 528, 620, 621, 625, 205, 463, 464,
+ 465, 466, 293, 615, 310, 469, 468, 332, 333, 380,
+ 450, 541, 543, 554, 558, 560, 562, 568, 571, 542,
+ 544, 555, 559, 561, 563, 569, 572, 531, 533, 535,
+ 537, 550, 549, 546, 574, 575, 552, 557, 536, 548,
+ 553, 566, 573, 570, 530, 534, 538, 547, 565, 564,
+ 545, 556, 567, 551, 539, 532, 540, 1369, 196, 221,
+ 369, 1433, 455, 289, 651, 619, 485, 614, 206, 223,
+ 1305, 263, 1317, 1325, 0, 1331, 1339, 1340, 1353, 1356,
+ 1357, 1358, 1359, 1377, 1378, 1380, 1388, 1390, 1393, 1395,
+ 1402, 1416, 1436, 198, 200, 209, 222, 232, 236, 243,
+ 262, 277, 279, 286, 299, 311, 319, 320, 323, 329,
+ 381, 387, 388, 389, 390, 410, 411, 412, 415, 418,
+ 419, 422, 424, 425, 428, 432, 436, 437, 438, 440,
+ 442, 444, 456, 461, 475, 476, 477, 478, 479, 482,
+ 483, 489, 490, 491, 492, 493, 501, 502, 517, 587,
+ 589, 606, 626, 633, 481, 302, 303, 445, 446, 315,
+ 316, 647, 648, 301, 601, 634, 598, 646, 628, 439,
+ 379, 1368, 1374, 382, 282, 306, 321, 1383, 618, 503,
+ 227, 467, 291, 251, 1401, 1403, 211, 246, 230, 260,
+ 275, 278, 325, 392, 401, 430, 435, 297, 272, 244,
+ 460, 241, 486, 520, 521, 522, 524, 396, 267, 434,
+ 1364, 1392, 377, 577, 578, 317, 397, 0, 0, 0,
+ 0, 0, 0, 1422, 1406, 529, 0, 1348, 1425, 1316,
+ 1335, 1435, 1338, 1341, 1385, 1294, 1363, 417, 1332, 1320,
+ 1289, 1327, 1290, 1318, 1350, 271, 1315, 1408, 1367, 1424,
+ 367, 268, 1296, 1287, 204, 506, 1321, 431, 1337, 203,
+ 1387, 488, 253, 378, 375, 584, 283, 274, 270, 250,
+ 318, 386, 429, 519, 423, 1431, 371, 1373, 0, 498,
+ 402, 0, 0, 0, 1412, 1411, 1342, 1352, 1414, 1361,
+ 1399, 1347, 1386, 1304, 1372, 1426, 1333, 1382, 1427, 324,
+ 248, 326, 202, 414, 499, 287, 0, 0, 0, 0,
+ 0, 508, 725, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 238, 0, 0, 245, 0, 0, 0, 352,
+ 361, 360, 340, 341, 343, 345, 351, 358, 364, 337,
+ 346, 1329, 1379, 610, 1421, 1330, 1381, 266, 322, 273,
+ 265, 581, 1432, 1413, 1293, 1360, 1420, 1355, 597, 0,
+ 0, 229, 1423, 1354, 0, 1384, 0, 1438, 1288, 1375,
+ 0, 1291, 1295, 1434, 1418, 1324, 276, 0, 0, 0,
+ 0, 0, 0, 0, 1351, 1362, 1396, 1400, 1345, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1322, 0, 1371,
+ 0, 0, 0, 1300, 1292, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1349, 0, 0,
+ 0, 0, 1303, 0, 1323, 1397, 0, 1286, 298, 1297,
+ 403, 258, 0, 454, 1404, 1417, 1346, 630, 1419, 1344,
+ 1343, 1391, 1301, 1410, 1336, 366, 1299, 331, 197, 225,
+ 0, 1334, 413, 462, 474, 1409, 1319, 1328, 254, 1326,
+ 472, 427, 605, 233, 285, 459, 433, 470, 441, 288,
+ 1370, 1389, 471, 373, 586, 451, 602, 631, 632, 264,
+ 407, 616, 523, 624, 649, 226, 261, 421, 507, 608,
+ 495, 398, 582, 583, 330, 494, 296, 201, 370, 637,
+ 224, 480, 372, 242, 231, 588, 613, 300, 252, 290,
+ 457, 644, 213, 518, 599, 239, 484, 0, 0, 652,
+ 247, 505, 611, 600, 215, 595, 504, 394, 327, 328,
+ 214, 0, 458, 269, 294, 0, 0, 259, 416, 590,
+ 591, 257, 653, 228, 623, 220, 1298, 622, 409, 585,
+ 596, 395, 384, 219, 594, 393, 383, 335, 356, 357,
+ 281, 308, 448, 376, 449, 307, 309, 405, 404, 406,
+ 207, 609, 627, 0, 208, 0, 500, 612, 654, 453,
+ 212, 234, 235, 237, 1314, 280, 284, 292, 295, 304,
+ 305, 314, 368, 420, 447, 443, 452, 1405, 580, 603,
+ 617, 629, 635, 636, 638, 639, 640, 641, 642, 645,
+ 643, 408, 312, 496, 334, 374, 1394, 1437, 426, 473,
+ 240, 607, 497, 199, 1308, 1313, 1306, 0, 255, 256,
+ 1376, 576, 1309, 1307, 1365, 1366, 1310, 1428, 1429, 1430,
+ 1415, 655, 656, 657, 658, 659, 660, 661, 662, 663,
+ 664, 665, 666, 667, 668, 669, 670, 671, 672, 650,
+ 509, 515, 510, 511, 512, 513, 514, 0, 516, 1398,
+ 1302, 0, 1311, 1312, 399, 1407, 592, 593, 673, 385,
+ 487, 604, 336, 350, 353, 342, 362, 0, 363, 338,
+ 339, 344, 347, 348, 349, 354, 355, 359, 365, 249,
+ 210, 391, 400, 579, 313, 216, 217, 218, 525, 526,
+ 527, 528, 620, 621, 625, 205, 463, 464, 465, 466,
+ 293, 615, 310, 469, 468, 332, 333, 380, 450, 541,
+ 543, 554, 558, 560, 562, 568, 571, 542, 544, 555,
+ 559, 561, 563, 569, 572, 531, 533, 535, 537, 550,
+ 549, 546, 574, 575, 552, 557, 536, 548, 553, 566,
+ 573, 570, 530, 534, 538, 547, 565, 564, 545, 556,
+ 567, 551, 539, 532, 540, 1369, 196, 221, 369, 1433,
+ 455, 289, 651, 619, 485, 614, 206, 223, 1305, 263,
+ 1317, 1325, 0, 1331, 1339, 1340, 1353, 1356, 1357, 1358,
+ 1359, 1377, 1378, 1380, 1388, 1390, 1393, 1395, 1402, 1416,
+ 1436, 198, 200, 209, 222, 232, 236, 243, 262, 277,
+ 279, 286, 299, 311, 319, 320, 323, 329, 381, 387,
+ 388, 389, 390, 410, 411, 412, 415, 418, 419, 422,
+ 424, 425, 428, 432, 436, 437, 438, 440, 442, 444,
+ 456, 461, 475, 476, 477, 478, 479, 482, 483, 489,
+ 490, 491, 492, 493, 501, 502, 517, 587, 589, 606,
+ 626, 633, 481, 302, 303, 445, 446, 315, 316, 647,
+ 648, 301, 601, 634, 598, 646, 628, 439, 379, 1368,
+ 1374, 382, 282, 306, 321, 1383, 618, 503, 227, 467,
+ 291, 251, 1401, 1403, 211, 246, 230, 260, 275, 278,
+ 325, 392, 401, 430, 435, 297, 272, 244, 460, 241,
+ 486, 520, 521, 522, 524, 396, 267, 434, 1364, 1392,
+ 377, 577, 578, 317, 397, 0, 0, 0, 0, 0,
+ 0, 1422, 1406, 529, 0, 1348, 1425, 1316, 1335, 1435,
+ 1338, 1341, 1385, 1294, 1363, 417, 1332, 1320, 1289, 1327,
+ 1290, 1318, 1350, 271, 1315, 1408, 1367, 1424, 367, 268,
+ 1296, 1287, 204, 506, 1321, 431, 1337, 203, 1387, 488,
+ 253, 378, 375, 584, 283, 274, 270, 250, 318, 386,
+ 429, 519, 423, 1431, 371, 1373, 0, 498, 402, 0,
+ 0, 0, 1412, 1411, 1342, 1352, 1414, 1361, 1399, 1347,
+ 1386, 1304, 1372, 1426, 1333, 1382, 1427, 324, 248, 326,
+ 202, 414, 499, 287, 0, 0, 0, 0, 0, 508,
+ 960, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 238, 0, 0, 245, 0, 0, 0, 352, 361, 360,
+ 340, 341, 343, 345, 351, 358, 364, 337, 346, 1329,
+ 1379, 610, 1421, 1330, 1381, 266, 322, 273, 265, 581,
+ 1432, 1413, 1293, 1360, 1420, 1355, 597, 0, 0, 229,
+ 1423, 1354, 0, 1384, 0, 1438, 1288, 1375, 0, 1291,
+ 1295, 1434, 1418, 1324, 276, 0, 0, 0, 0, 0,
+ 0, 0, 1351, 1362, 1396, 1400, 1345, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1322, 0, 1371, 0, 0,
+ 0, 1300, 1292, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1349, 0, 0, 0, 0,
+ 1303, 0, 1323, 1397, 0, 1286, 298, 1297, 403, 258,
+ 0, 454, 1404, 1417, 1346, 630, 1419, 1344, 1343, 1391,
+ 1301, 1410, 1336, 366, 1299, 331, 197, 225, 0, 1334,
+ 413, 462, 474, 1409, 1319, 1328, 254, 1326, 472, 427,
+ 605, 233, 285, 459, 433, 470, 441, 288, 1370, 1389,
+ 471, 373, 586, 451, 602, 631, 632, 264, 407, 616,
+ 523, 624, 649, 226, 261, 421, 507, 608, 495, 398,
+ 582, 583, 330, 494, 296, 201, 370, 637, 224, 480,
+ 372, 242, 231, 588, 613, 300, 252, 290, 457, 644,
+ 213, 518, 599, 239, 484, 0, 0, 652, 247, 505,
+ 611, 600, 215, 595, 504, 394, 327, 328, 214, 0,
+ 458, 269, 294, 0, 0, 259, 416, 590, 591, 257,
+ 653, 228, 623, 220, 1298, 622, 409, 585, 596, 395,
+ 384, 219, 594, 393, 383, 335, 356, 357, 281, 308,
+ 448, 376, 449, 307, 309, 405, 404, 406, 207, 609,
+ 627, 0, 208, 0, 500, 612, 654, 453, 212, 234,
+ 235, 237, 1314, 280, 284, 292, 295, 304, 305, 314,
+ 368, 420, 447, 443, 452, 1405, 580, 603, 617, 629,
+ 635, 636, 638, 639, 640, 641, 642, 645, 643, 408,
+ 312, 496, 334, 374, 1394, 1437, 426, 473, 240, 607,
+ 497, 199, 1308, 1313, 1306, 0, 255, 256, 1376, 576,
+ 1309, 1307, 1365, 1366, 1310, 1428, 1429, 1430, 1415, 655,
+ 656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
+ 666, 667, 668, 669, 670, 671, 672, 650, 509, 515,
+ 510, 511, 512, 513, 514, 0, 516, 1398, 1302, 0,
+ 1311, 1312, 399, 1407, 592, 593, 673, 385, 487, 604,
+ 336, 350, 353, 342, 362, 0, 363, 338, 339, 344,
+ 347, 348, 349, 354, 355, 359, 365, 249, 210, 391,
+ 400, 579, 313, 216, 217, 218, 525, 526, 527, 528,
+ 620, 621, 625, 205, 463, 464, 465, 466, 293, 615,
+ 310, 469, 468, 332, 333, 380, 450, 541, 543, 554,
+ 558, 560, 562, 568, 571, 542, 544, 555, 559, 561,
+ 563, 569, 572, 531, 533, 535, 537, 550, 549, 546,
+ 574, 575, 552, 557, 536, 548, 553, 566, 573, 570,
+ 530, 534, 538, 547, 565, 564, 545, 556, 567, 551,
+ 539, 532, 540, 1369, 196, 221, 369, 1433, 455, 289,
+ 651, 619, 485, 614, 206, 223, 1305, 263, 1317, 1325,
+ 0, 1331, 1339, 1340, 1353, 1356, 1357, 1358, 1359, 1377,
+ 1378, 1380, 1388, 1390, 1393, 1395, 1402, 1416, 1436, 198,
+ 200, 209, 222, 232, 236, 243, 262, 277, 279, 286,
+ 299, 311, 319, 320, 323, 329, 381, 387, 388, 389,
+ 390, 410, 411, 412, 415, 418, 419, 422, 424, 425,
+ 428, 432, 436, 437, 438, 440, 442, 444, 456, 461,
+ 475, 476, 477, 478, 479, 482, 483, 489, 490, 491,
+ 492, 493, 501, 502, 517, 587, 589, 606, 626, 633,
+ 481, 302, 303, 445, 446, 315, 316, 647, 648, 301,
+ 601, 634, 598, 646, 628, 439, 379, 1368, 1374, 382,
+ 282, 306, 321, 1383, 618, 503, 227, 467, 291, 251,
+ 1401, 1403, 211, 246, 230, 260, 275, 278, 325, 392,
+ 401, 430, 435, 297, 272, 244, 460, 241, 486, 520,
+ 521, 522, 524, 396, 267, 434, 1364, 1392, 377, 577,
+ 578, 317, 397, 0, 0, 0, 0, 0, 0, 0,
+ 0, 529, 0, 778, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 417, 0, 0, 0, 765, 0, 0,
+ 0, 271, 770, 0, 0, 0, 367, 268, 0, 0,
+ 204, 506, 0, 431, 0, 203, 0, 488, 253, 378,
+ 375, 584, 283, 274, 270, 250, 318, 386, 429, 519,
+ 423, 777, 371, 0, 0, 498, 402, 0, 0, 0,
+ 0, 0, 0, 0, 0, 772, 773, 0, 0, 0,
+ 0, 0, 0, 0, 0, 324, 248, 326, 202, 414,
+ 499, 287, 0, 95, 0, 0, 1024, 508, 960, 749,
+ 926, 964, 1025, 977, 978, 979, 965, 0, 238, 966,
+ 967, 245, 968, 0, 925, 808, 810, 809, 875, 876,
+ 877, 878, 879, 880, 881, 811, 812, 806, 973, 610,
+ 980, 981, 0, 266, 322, 273, 265, 581, 0, 0,
+ 2233, 2234, 2235, 0, 597, 0, 0, 229, 0, 0,
+ 0, 0, 0, 0, 0, 745, 762, 0, 776, 0,
+ 0, 0, 276, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 759,
+ 760, 0, 0, 0, 0, 920, 0, 761, 0, 0,
+ 769, 982, 983, 984, 985, 986, 987, 988, 989, 990,
+ 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000,
+ 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010,
+ 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020,
+ 1021, 1022, 1023, 771, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 298, 0, 403, 258, 0, 454,
+ 919, 0, 0, 630, 0, 0, 917, 0, 0, 0,
+ 0, 366, 0, 331, 197, 225, 0, 0, 413, 462,
+ 474, 0, 0, 0, 970, 0, 472, 427, 605, 233,
+ 285, 459, 433, 470, 441, 288, 0, 0, 471, 373,
+ 586, 451, 602, 631, 632, 264, 407, 616, 523, 624,
+ 649, 226, 261, 421, 507, 608, 495, 398, 582, 583,
+ 330, 494, 296, 201, 370, 637, 224, 480, 372, 242,
+ 231, 588, 613, 300, 252, 290, 457, 644, 213, 518,
+ 599, 239, 484, 0, 0, 652, 247, 505, 611, 600,
+ 215, 595, 504, 394, 327, 328, 214, 0, 458, 269,
+ 294, 0, 0, 259, 416, 971, 972, 257, 653, 816,
+ 623, 220, 0, 622, 409, 585, 596, 395, 384, 219,
+ 594, 393, 383, 335, 824, 825, 281, 308, 901, 900,
+ 899, 307, 309, 897, 898, 896, 207, 609, 627, 0,
+ 208, 0, 500, 612, 654, 453, 212, 234, 235, 237,
+ 0, 280, 284, 292, 295, 304, 305, 314, 368, 420,
+ 447, 443, 452, 0, 580, 603, 617, 629, 635, 636,
+ 638, 639, 640, 641, 642, 645, 643, 408, 312, 496,
+ 334, 374, 0, 0, 426, 473, 240, 607, 497, 907,
+ 929, 918, 782, 783, 908, 909, 933, 910, 785, 786,
+ 930, 931, 779, 780, 784, 932, 934, 655, 656, 657,
658, 659, 660, 661, 662, 663, 664, 665, 666, 667,
- 668, 669, 670, 671, 649, 508, 514, 509, 510, 511,
- 512, 513, 0, 515, 1397, 1301, 0, 1310, 1311, 398,
- 1406, 591, 592, 672, 384, 486, 603, 335, 349, 352,
- 341, 361, 0, 362, 337, 338, 343, 346, 347, 348,
- 353, 354, 358, 364, 249, 210, 390, 399, 578, 312,
- 216, 217, 218, 524, 525, 526, 527, 619, 620, 624,
- 205, 462, 463, 464, 465, 292, 614, 309, 468, 467,
- 331, 332, 379, 449, 540, 542, 553, 557, 559, 561,
- 567, 570, 541, 543, 554, 558, 560, 562, 568, 571,
- 530, 532, 534, 536, 549, 548, 545, 573, 574, 551,
- 556, 535, 547, 552, 565, 572, 569, 529, 533, 537,
- 546, 564, 563, 544, 555, 566, 550, 538, 531, 539,
- 1368, 196, 221, 368, 1432, 454, 288, 650, 618, 484,
- 613, 206, 223, 1304, 262, 1316, 1324, 0, 1330, 1338,
- 1339, 1352, 1355, 1356, 1357, 1358, 1376, 1377, 1379, 1387,
- 1389, 1392, 1394, 1401, 1415, 1435, 198, 200, 209, 222,
- 232, 236, 243, 261, 276, 278, 285, 298, 310, 318,
- 319, 322, 328, 380, 386, 387, 388, 389, 409, 410,
- 411, 414, 417, 418, 421, 423, 424, 427, 431, 435,
- 436, 437, 439, 441, 443, 455, 460, 474, 475, 476,
- 477, 478, 481, 482, 488, 489, 490, 491, 492, 500,
- 501, 516, 586, 588, 605, 625, 632, 480, 301, 302,
- 444, 445, 314, 315, 646, 647, 300, 600, 633, 597,
- 645, 627, 438, 378, 1367, 1373, 381, 281, 305, 320,
- 1382, 617, 502, 227, 466, 290, 251, 1400, 1402, 211,
- 246, 230, 259, 274, 277, 324, 391, 400, 429, 434,
- 296, 271, 244, 459, 241, 485, 519, 520, 521, 523,
- 395, 266, 433, 1363, 1391, 376, 576, 577, 316, 396,
- 0, 0, 0, 0, 0, 0, 0, 0, 528, 0,
- 777, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 416, 0, 0, 0, 764, 0, 0, 0, 270, 769,
- 0, 0, 0, 366, 267, 0, 0, 204, 505, 0,
- 430, 0, 203, 0, 487, 252, 377, 374, 583, 282,
- 273, 269, 250, 317, 385, 428, 518, 422, 776, 370,
- 0, 0, 497, 401, 0, 0, 0, 0, 0, 0,
- 0, 0, 771, 772, 0, 0, 0, 0, 0, 0,
- 0, 0, 323, 248, 325, 202, 413, 498, 286, 0,
- 95, 0, 0, 1023, 507, 959, 748, 925, 963, 1024,
- 976, 977, 978, 964, 0, 238, 965, 966, 245, 967,
- 0, 924, 807, 809, 808, 874, 875, 876, 877, 878,
- 879, 880, 810, 811, 805, 972, 609, 979, 980, 0,
- 265, 321, 272, 264, 580, 0, 0, 2233, 2234, 2235,
- 0, 596, 0, 0, 229, 0, 0, 0, 0, 0,
- 0, 0, 744, 761, 0, 775, 0, 0, 0, 275,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 758, 759, 0, 0,
- 0, 0, 919, 0, 760, 0, 0, 768, 981, 982,
+ 668, 669, 670, 671, 672, 650, 509, 515, 510, 511,
+ 512, 513, 514, 0, 516, 921, 768, 767, 0, 774,
+ 775, 0, 804, 805, 807, 813, 814, 815, 826, 873,
+ 874, 882, 884, 885, 883, 886, 887, 888, 891, 892,
+ 893, 894, 889, 890, 895, 787, 791, 788, 789, 790,
+ 802, 792, 793, 794, 795, 796, 797, 798, 799, 800,
+ 801, 803, 944, 945, 946, 947, 948, 949, 819, 823,
+ 822, 820, 821, 817, 818, 845, 844, 846, 847, 848,
+ 849, 850, 851, 853, 852, 854, 855, 856, 857, 858,
+ 859, 827, 828, 831, 832, 830, 829, 833, 842, 843,
+ 834, 835, 836, 837, 838, 839, 841, 840, 860, 861,
+ 862, 863, 864, 866, 865, 869, 870, 868, 867, 872,
+ 871, 766, 196, 221, 369, 0, 455, 289, 651, 619,
+ 485, 614, 206, 223, 935, 263, 936, 0, 0, 940,
+ 0, 0, 0, 942, 941, 0, 943, 905, 904, 0,
+ 0, 937, 938, 0, 939, 0, 0, 198, 200, 209,
+ 222, 232, 236, 243, 262, 277, 279, 286, 299, 311,
+ 319, 320, 323, 329, 381, 387, 388, 389, 390, 410,
+ 411, 412, 415, 418, 419, 422, 424, 425, 428, 432,
+ 436, 437, 438, 440, 442, 444, 456, 461, 475, 476,
+ 477, 478, 479, 482, 483, 489, 490, 491, 492, 493,
+ 501, 502, 517, 587, 589, 606, 626, 633, 481, 950,
+ 951, 952, 953, 954, 955, 956, 957, 301, 601, 634,
+ 598, 646, 628, 439, 379, 0, 0, 382, 282, 306,
+ 321, 0, 618, 503, 227, 467, 291, 251, 975, 0,
+ 211, 246, 230, 260, 275, 278, 325, 392, 401, 430,
+ 435, 297, 272, 244, 460, 241, 486, 520, 521, 522,
+ 524, 396, 267, 434, 397, 0, 377, 577, 578, 317,
+ 0, 0, 0, 529, 0, 778, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 417, 0, 0, 0, 765,
+ 0, 0, 0, 271, 770, 0, 0, 0, 367, 268,
+ 0, 0, 204, 506, 0, 431, 0, 203, 0, 488,
+ 253, 378, 375, 584, 283, 274, 270, 250, 318, 386,
+ 429, 519, 423, 777, 371, 0, 0, 498, 402, 0,
+ 0, 0, 0, 0, 0, 0, 0, 772, 773, 0,
+ 0, 0, 0, 0, 0, 2440, 0, 324, 248, 326,
+ 202, 414, 499, 287, 0, 95, 0, 0, 1024, 508,
+ 960, 749, 926, 964, 1025, 977, 978, 979, 965, 0,
+ 238, 966, 967, 245, 968, 0, 925, 808, 810, 809,
+ 875, 876, 877, 878, 879, 880, 881, 811, 812, 806,
+ 973, 610, 980, 981, 2441, 266, 322, 273, 265, 581,
+ 0, 0, 0, 0, 0, 0, 597, 0, 0, 229,
+ 0, 0, 0, 0, 0, 0, 0, 745, 762, 0,
+ 776, 0, 0, 0, 276, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 759, 760, 0, 0, 0, 0, 920, 0, 761,
+ 0, 0, 769, 982, 983, 984, 985, 986, 987, 988,
+ 989, 990, 991, 992, 993, 994, 995, 996, 997, 998,
+ 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008,
+ 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018,
+ 1019, 1020, 1021, 1022, 1023, 771, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 298, 0, 403, 258,
+ 0, 454, 919, 0, 0, 630, 0, 0, 917, 0,
+ 0, 0, 0, 366, 0, 331, 197, 225, 0, 0,
+ 413, 462, 474, 0, 0, 0, 970, 0, 472, 427,
+ 605, 233, 285, 459, 433, 470, 441, 288, 0, 0,
+ 471, 373, 586, 451, 602, 631, 632, 264, 407, 616,
+ 523, 624, 649, 226, 261, 421, 507, 608, 495, 398,
+ 582, 583, 330, 494, 296, 201, 370, 637, 224, 480,
+ 372, 242, 231, 588, 613, 300, 252, 290, 457, 644,
+ 213, 518, 599, 239, 484, 0, 0, 652, 247, 505,
+ 611, 600, 215, 595, 504, 394, 327, 328, 214, 0,
+ 458, 269, 294, 0, 0, 259, 416, 971, 972, 257,
+ 653, 816, 623, 220, 0, 622, 409, 585, 596, 395,
+ 384, 219, 594, 393, 383, 335, 824, 825, 281, 308,
+ 901, 900, 899, 307, 309, 897, 898, 896, 207, 609,
+ 627, 0, 208, 0, 500, 612, 654, 453, 212, 234,
+ 235, 237, 0, 280, 284, 292, 295, 304, 305, 314,
+ 368, 420, 447, 443, 452, 0, 580, 603, 617, 629,
+ 635, 636, 638, 639, 640, 641, 642, 645, 643, 408,
+ 312, 496, 334, 374, 0, 0, 426, 473, 240, 607,
+ 497, 907, 929, 918, 782, 783, 908, 909, 933, 910,
+ 785, 786, 930, 931, 779, 780, 784, 932, 934, 655,
+ 656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
+ 666, 667, 668, 669, 670, 671, 672, 650, 509, 515,
+ 510, 511, 512, 513, 514, 0, 516, 921, 768, 767,
+ 0, 774, 775, 0, 804, 805, 807, 813, 814, 815,
+ 826, 873, 874, 882, 884, 885, 883, 886, 887, 888,
+ 891, 892, 893, 894, 889, 890, 895, 787, 791, 788,
+ 789, 790, 802, 792, 793, 794, 795, 796, 797, 798,
+ 799, 800, 801, 803, 944, 945, 946, 947, 948, 949,
+ 819, 823, 822, 820, 821, 817, 818, 845, 844, 846,
+ 847, 848, 849, 850, 851, 853, 852, 854, 855, 856,
+ 857, 858, 859, 827, 828, 831, 832, 830, 829, 833,
+ 842, 843, 834, 835, 836, 837, 838, 839, 841, 840,
+ 860, 861, 862, 863, 864, 866, 865, 869, 870, 868,
+ 867, 872, 871, 766, 196, 221, 369, 0, 455, 289,
+ 651, 619, 485, 614, 206, 223, 935, 263, 936, 0,
+ 0, 940, 0, 0, 0, 942, 941, 0, 943, 905,
+ 904, 0, 0, 937, 938, 0, 939, 0, 0, 198,
+ 200, 209, 222, 232, 236, 243, 262, 277, 279, 286,
+ 299, 311, 319, 320, 323, 329, 381, 387, 388, 389,
+ 390, 410, 411, 412, 415, 418, 419, 422, 424, 425,
+ 428, 432, 436, 437, 438, 440, 442, 444, 456, 461,
+ 475, 476, 477, 478, 479, 482, 483, 489, 490, 491,
+ 492, 493, 501, 502, 517, 587, 589, 606, 626, 633,
+ 481, 950, 951, 952, 953, 954, 955, 956, 957, 301,
+ 601, 634, 598, 646, 628, 439, 379, 0, 0, 382,
+ 282, 306, 321, 0, 618, 503, 227, 467, 291, 251,
+ 975, 0, 211, 246, 230, 260, 275, 278, 325, 392,
+ 401, 430, 435, 297, 272, 244, 460, 241, 486, 520,
+ 521, 522, 524, 396, 267, 434, 397, 0, 377, 577,
+ 578, 317, 0, 0, 86, 529, 0, 778, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 417, 0, 0,
+ 0, 765, 0, 0, 0, 271, 770, 0, 0, 0,
+ 367, 268, 0, 0, 204, 506, 0, 431, 0, 203,
+ 0, 488, 253, 378, 375, 584, 283, 274, 270, 250,
+ 318, 386, 429, 519, 423, 777, 371, 0, 0, 498,
+ 402, 0, 0, 0, 0, 0, 0, 0, 0, 772,
+ 773, 0, 0, 0, 0, 0, 0, 0, 0, 324,
+ 248, 326, 202, 414, 499, 287, 0, 95, 0, 0,
+ 1024, 508, 960, 749, 926, 964, 1025, 977, 978, 979,
+ 965, 0, 238, 966, 967, 245, 968, 0, 925, 808,
+ 810, 809, 875, 876, 877, 878, 879, 880, 881, 811,
+ 812, 806, 973, 610, 980, 981, 0, 266, 322, 273,
+ 265, 581, 0, 0, 0, 0, 0, 0, 597, 0,
+ 0, 229, 0, 0, 0, 0, 0, 0, 0, 745,
+ 762, 0, 776, 0, 0, 0, 276, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 759, 760, 0, 0, 0, 0, 920,
+ 0, 761, 0, 0, 769, 982, 983, 984, 985, 986,
+ 987, 988, 989, 990, 991, 992, 993, 994, 995, 996,
+ 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006,
+ 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016,
+ 1017, 1018, 1019, 1020, 1021, 1022, 1023, 771, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 298, 0,
+ 403, 258, 0, 454, 919, 0, 0, 630, 0, 0,
+ 917, 0, 0, 0, 0, 366, 0, 331, 197, 225,
+ 0, 0, 413, 462, 474, 0, 0, 0, 970, 0,
+ 472, 427, 605, 233, 285, 459, 433, 470, 441, 288,
+ 0, 0, 471, 373, 586, 451, 602, 631, 632, 264,
+ 407, 616, 523, 624, 649, 226, 261, 421, 507, 608,
+ 495, 398, 582, 583, 330, 494, 296, 201, 370, 637,
+ 224, 480, 372, 242, 231, 588, 613, 300, 252, 290,
+ 457, 644, 213, 518, 599, 239, 484, 0, 0, 652,
+ 247, 505, 611, 600, 215, 595, 504, 394, 327, 328,
+ 214, 0, 458, 269, 294, 0, 0, 259, 416, 971,
+ 972, 257, 653, 816, 623, 220, 0, 622, 409, 585,
+ 596, 395, 384, 219, 594, 393, 383, 335, 824, 825,
+ 281, 308, 901, 900, 899, 307, 309, 897, 898, 896,
+ 207, 609, 627, 0, 208, 0, 500, 612, 654, 453,
+ 212, 234, 235, 237, 0, 280, 284, 292, 295, 304,
+ 305, 314, 368, 420, 447, 443, 452, 0, 580, 603,
+ 617, 629, 635, 636, 638, 639, 640, 641, 642, 645,
+ 643, 408, 312, 496, 334, 374, 0, 0, 426, 473,
+ 240, 607, 497, 907, 929, 918, 782, 783, 908, 909,
+ 933, 910, 785, 786, 930, 931, 779, 780, 784, 932,
+ 934, 655, 656, 657, 658, 659, 660, 661, 662, 663,
+ 664, 665, 666, 667, 668, 669, 670, 671, 672, 650,
+ 509, 515, 510, 511, 512, 513, 514, 0, 516, 921,
+ 768, 767, 0, 774, 775, 0, 804, 805, 807, 813,
+ 814, 815, 826, 873, 874, 882, 884, 885, 883, 886,
+ 887, 888, 891, 892, 893, 894, 889, 890, 895, 787,
+ 791, 788, 789, 790, 802, 792, 793, 794, 795, 796,
+ 797, 798, 799, 800, 801, 803, 944, 945, 946, 947,
+ 948, 949, 819, 823, 822, 820, 821, 817, 818, 845,
+ 844, 846, 847, 848, 849, 850, 851, 853, 852, 854,
+ 855, 856, 857, 858, 859, 827, 828, 831, 832, 830,
+ 829, 833, 842, 843, 834, 835, 836, 837, 838, 839,
+ 841, 840, 860, 861, 862, 863, 864, 866, 865, 869,
+ 870, 868, 867, 872, 871, 766, 196, 221, 369, 94,
+ 455, 289, 651, 619, 485, 614, 206, 223, 935, 263,
+ 936, 0, 0, 940, 0, 0, 0, 942, 941, 0,
+ 943, 905, 904, 0, 0, 937, 938, 0, 939, 0,
+ 0, 198, 200, 209, 222, 232, 236, 243, 262, 277,
+ 279, 286, 299, 311, 319, 320, 323, 329, 381, 387,
+ 388, 389, 390, 410, 411, 412, 415, 418, 419, 422,
+ 424, 425, 428, 432, 436, 437, 438, 440, 442, 444,
+ 456, 461, 475, 476, 477, 478, 479, 482, 483, 489,
+ 490, 491, 492, 493, 501, 502, 517, 587, 589, 606,
+ 626, 633, 481, 950, 951, 952, 953, 954, 955, 956,
+ 957, 301, 601, 634, 598, 646, 628, 439, 379, 0,
+ 0, 382, 282, 306, 321, 0, 618, 503, 227, 467,
+ 291, 251, 975, 0, 211, 246, 230, 260, 275, 278,
+ 325, 392, 401, 430, 435, 297, 272, 244, 460, 241,
+ 486, 520, 521, 522, 524, 396, 267, 434, 397, 0,
+ 377, 577, 578, 317, 0, 0, 0, 529, 0, 778,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 417,
+ 0, 0, 0, 765, 0, 0, 0, 271, 770, 0,
+ 0, 0, 367, 268, 0, 0, 204, 506, 0, 431,
+ 0, 203, 0, 488, 253, 378, 375, 584, 283, 274,
+ 270, 250, 318, 386, 429, 519, 423, 777, 371, 0,
+ 0, 498, 402, 0, 0, 0, 0, 0, 0, 0,
+ 0, 772, 773, 0, 0, 0, 0, 0, 0, 0,
+ 0, 324, 248, 326, 202, 414, 499, 287, 0, 95,
+ 0, 0, 1024, 508, 960, 749, 926, 964, 1025, 977,
+ 978, 979, 965, 0, 238, 966, 967, 245, 968, 0,
+ 925, 808, 810, 809, 875, 876, 877, 878, 879, 880,
+ 881, 811, 812, 806, 973, 610, 980, 981, 0, 266,
+ 322, 273, 265, 581, 0, 0, 0, 0, 0, 0,
+ 597, 0, 0, 229, 0, 0, 0, 0, 0, 0,
+ 0, 745, 762, 0, 776, 0, 0, 0, 276, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 759, 760, 0, 0, 0,
+ 0, 920, 0, 761, 0, 0, 769, 982, 983, 984,
+ 985, 986, 987, 988, 989, 990, 991, 992, 993, 994,
+ 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004,
+ 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014,
+ 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 771,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 298, 0, 403, 258, 0, 454, 919, 0, 0, 630,
+ 0, 0, 917, 0, 0, 0, 0, 366, 0, 331,
+ 197, 225, 0, 0, 413, 462, 474, 0, 0, 0,
+ 970, 0, 472, 427, 605, 233, 285, 459, 433, 470,
+ 441, 288, 4098, 0, 471, 373, 586, 451, 602, 631,
+ 632, 264, 407, 616, 523, 624, 649, 226, 261, 421,
+ 507, 608, 495, 398, 582, 583, 330, 494, 296, 201,
+ 370, 637, 224, 480, 372, 242, 231, 588, 613, 300,
+ 252, 290, 457, 644, 213, 518, 599, 239, 484, 0,
+ 0, 652, 247, 505, 611, 600, 215, 595, 504, 394,
+ 327, 328, 214, 0, 458, 269, 294, 0, 0, 259,
+ 416, 971, 972, 257, 653, 816, 623, 220, 0, 622,
+ 409, 585, 596, 395, 384, 219, 594, 393, 383, 335,
+ 824, 825, 281, 308, 901, 900, 899, 307, 309, 897,
+ 898, 896, 207, 609, 627, 0, 208, 0, 500, 612,
+ 654, 453, 212, 234, 235, 237, 0, 280, 284, 292,
+ 295, 304, 305, 314, 368, 420, 447, 443, 452, 0,
+ 580, 603, 617, 629, 635, 636, 638, 639, 640, 641,
+ 642, 645, 643, 408, 312, 496, 334, 374, 0, 0,
+ 426, 473, 240, 607, 497, 907, 929, 918, 782, 783,
+ 908, 909, 933, 910, 785, 786, 930, 931, 779, 780,
+ 784, 932, 934, 655, 656, 657, 658, 659, 660, 661,
+ 662, 663, 664, 665, 666, 667, 668, 669, 670, 671,
+ 672, 650, 509, 515, 510, 511, 512, 513, 514, 0,
+ 516, 921, 768, 767, 0, 774, 775, 0, 804, 805,
+ 807, 813, 814, 815, 826, 873, 874, 882, 884, 885,
+ 883, 886, 887, 888, 891, 892, 893, 894, 889, 890,
+ 895, 787, 791, 788, 789, 790, 802, 792, 793, 794,
+ 795, 796, 797, 798, 799, 800, 801, 803, 944, 945,
+ 946, 947, 948, 949, 819, 823, 822, 820, 821, 817,
+ 818, 845, 844, 846, 847, 848, 849, 850, 851, 853,
+ 852, 854, 855, 856, 857, 858, 859, 827, 828, 831,
+ 832, 830, 829, 833, 842, 843, 834, 835, 836, 837,
+ 838, 839, 841, 840, 860, 861, 862, 863, 864, 866,
+ 865, 869, 870, 868, 867, 872, 871, 766, 196, 221,
+ 369, 0, 455, 289, 651, 619, 485, 614, 206, 223,
+ 935, 263, 936, 0, 0, 940, 0, 0, 0, 942,
+ 941, 0, 943, 905, 904, 0, 0, 937, 938, 0,
+ 939, 0, 0, 198, 200, 209, 222, 232, 236, 243,
+ 262, 277, 279, 286, 299, 311, 319, 320, 323, 329,
+ 381, 387, 388, 389, 390, 410, 411, 412, 415, 418,
+ 419, 422, 424, 425, 428, 432, 436, 437, 438, 440,
+ 442, 444, 456, 461, 475, 476, 477, 478, 479, 482,
+ 483, 489, 490, 491, 492, 493, 501, 502, 517, 587,
+ 589, 606, 626, 633, 481, 950, 951, 952, 953, 954,
+ 955, 956, 957, 301, 601, 634, 598, 646, 628, 439,
+ 379, 0, 0, 382, 282, 306, 321, 0, 618, 503,
+ 227, 467, 291, 251, 975, 0, 211, 246, 230, 260,
+ 275, 278, 325, 392, 401, 430, 435, 297, 272, 244,
+ 460, 241, 486, 520, 521, 522, 524, 396, 267, 434,
+ 397, 0, 377, 577, 578, 317, 0, 0, 0, 529,
+ 0, 778, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 417, 0, 0, 0, 765, 0, 0, 0, 271,
+ 770, 0, 0, 0, 367, 268, 0, 0, 204, 506,
+ 0, 431, 0, 203, 0, 488, 253, 378, 375, 584,
+ 283, 274, 270, 250, 318, 386, 429, 519, 423, 777,
+ 371, 0, 0, 498, 402, 0, 0, 0, 0, 0,
+ 0, 0, 0, 772, 773, 0, 0, 0, 0, 0,
+ 0, 0, 0, 324, 248, 326, 202, 414, 499, 287,
+ 0, 95, 0, 1754, 1024, 508, 960, 749, 926, 964,
+ 1025, 977, 978, 979, 965, 0, 238, 966, 967, 245,
+ 968, 0, 925, 808, 810, 809, 875, 876, 877, 878,
+ 879, 880, 881, 811, 812, 806, 973, 610, 980, 981,
+ 0, 266, 322, 273, 265, 581, 0, 0, 0, 0,
+ 0, 0, 597, 0, 0, 229, 0, 0, 0, 0,
+ 0, 0, 0, 745, 762, 0, 776, 0, 0, 0,
+ 276, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 759, 760, 0,
+ 0, 0, 0, 920, 0, 761, 0, 0, 769, 982,
983, 984, 985, 986, 987, 988, 989, 990, 991, 992,
993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002,
1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012,
1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022,
- 770, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 297, 0, 402, 257, 0, 453, 918, 0, 0,
- 629, 0, 0, 916, 0, 0, 0, 0, 365, 0,
- 330, 197, 225, 0, 0, 412, 461, 473, 0, 0,
- 0, 969, 0, 471, 426, 604, 233, 284, 458, 432,
- 469, 440, 287, 0, 0, 470, 372, 585, 450, 601,
- 630, 631, 263, 406, 615, 522, 623, 648, 226, 260,
- 420, 506, 607, 494, 397, 581, 582, 329, 493, 295,
- 201, 369, 636, 224, 479, 371, 242, 231, 587, 612,
- 299, 289, 456, 643, 213, 517, 598, 239, 483, 0,
- 0, 651, 247, 504, 610, 599, 215, 594, 503, 393,
- 326, 327, 214, 0, 457, 268, 293, 0, 0, 258,
- 415, 970, 971, 256, 652, 815, 622, 220, 0, 621,
- 408, 584, 595, 394, 383, 219, 593, 392, 382, 334,
- 823, 824, 280, 307, 900, 899, 898, 306, 308, 896,
- 897, 895, 207, 608, 626, 0, 208, 0, 499, 611,
- 653, 452, 212, 234, 235, 237, 0, 279, 283, 291,
- 294, 303, 304, 313, 367, 419, 446, 442, 451, 0,
- 579, 602, 616, 628, 634, 635, 637, 638, 639, 640,
- 641, 644, 642, 407, 311, 495, 333, 373, 0, 0,
- 425, 472, 240, 606, 496, 906, 928, 917, 781, 782,
- 907, 908, 932, 909, 784, 785, 929, 930, 778, 779,
- 783, 931, 933, 654, 655, 656, 657, 658, 659, 660,
- 661, 662, 663, 664, 665, 666, 667, 668, 669, 670,
- 671, 649, 508, 514, 509, 510, 511, 512, 513, 0,
- 515, 920, 767, 766, 0, 773, 774, 0, 803, 804,
- 806, 812, 813, 814, 825, 872, 873, 881, 883, 884,
- 882, 885, 886, 887, 890, 891, 892, 893, 888, 889,
- 894, 786, 790, 787, 788, 789, 801, 791, 792, 793,
- 794, 795, 796, 797, 798, 799, 800, 802, 943, 944,
- 945, 946, 947, 948, 818, 822, 821, 819, 820, 816,
- 817, 844, 843, 845, 846, 847, 848, 849, 850, 852,
- 851, 853, 854, 855, 856, 857, 858, 826, 827, 830,
- 831, 829, 828, 832, 841, 842, 833, 834, 835, 836,
- 837, 838, 840, 839, 859, 860, 861, 862, 863, 865,
- 864, 868, 869, 867, 866, 871, 870, 765, 196, 221,
- 368, 0, 454, 288, 650, 618, 484, 613, 206, 223,
- 934, 262, 935, 0, 0, 939, 0, 0, 0, 941,
- 940, 0, 942, 904, 903, 0, 0, 936, 937, 0,
- 938, 0, 0, 198, 200, 209, 222, 232, 236, 243,
- 261, 276, 278, 285, 298, 310, 318, 319, 322, 328,
- 380, 386, 387, 388, 389, 409, 410, 411, 414, 417,
- 418, 421, 423, 424, 427, 431, 435, 436, 437, 439,
- 441, 443, 455, 460, 474, 475, 476, 477, 478, 481,
- 482, 488, 489, 490, 491, 492, 500, 501, 516, 586,
- 588, 605, 625, 632, 480, 949, 950, 951, 952, 953,
- 954, 955, 956, 300, 600, 633, 597, 645, 627, 438,
- 378, 0, 0, 381, 281, 305, 320, 0, 617, 502,
- 227, 466, 290, 251, 974, 0, 211, 246, 230, 259,
- 274, 277, 324, 391, 400, 429, 434, 296, 271, 244,
- 459, 241, 485, 519, 520, 521, 523, 395, 266, 433,
- 396, 0, 376, 576, 577, 316, 0, 0, 0, 528,
- 0, 777, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 416, 0, 0, 0, 764, 0, 0, 0, 270,
- 769, 0, 0, 0, 366, 267, 0, 0, 204, 505,
- 0, 430, 0, 203, 0, 487, 252, 377, 374, 583,
- 282, 273, 269, 250, 317, 385, 428, 518, 422, 776,
- 370, 0, 0, 497, 401, 0, 0, 0, 0, 0,
- 0, 0, 0, 771, 772, 0, 0, 0, 0, 0,
- 0, 2440, 0, 323, 248, 325, 202, 413, 498, 286,
- 0, 95, 0, 0, 1023, 507, 959, 748, 925, 963,
- 1024, 976, 977, 978, 964, 0, 238, 965, 966, 245,
- 967, 0, 924, 807, 809, 808, 874, 875, 876, 877,
- 878, 879, 880, 810, 811, 805, 972, 609, 979, 980,
- 2441, 265, 321, 272, 264, 580, 0, 0, 0, 0,
- 0, 0, 596, 0, 0, 229, 0, 0, 0, 0,
- 0, 0, 0, 744, 761, 0, 775, 0, 0, 0,
- 275, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 758, 759, 0,
- 0, 0, 0, 919, 0, 760, 0, 0, 768, 981,
- 982, 983, 984, 985, 986, 987, 988, 989, 990, 991,
- 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001,
- 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011,
- 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021,
- 1022, 770, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 297, 0, 402, 257, 0, 453, 918, 0,
- 0, 629, 0, 0, 916, 0, 0, 0, 0, 365,
- 0, 330, 197, 225, 0, 0, 412, 461, 473, 0,
- 0, 0, 969, 0, 471, 426, 604, 233, 284, 458,
- 432, 469, 440, 287, 0, 0, 470, 372, 585, 450,
- 601, 630, 631, 263, 406, 615, 522, 623, 648, 226,
- 260, 420, 506, 607, 494, 397, 581, 582, 329, 493,
- 295, 201, 369, 636, 224, 479, 371, 242, 231, 587,
- 612, 299, 289, 456, 643, 213, 517, 598, 239, 483,
- 0, 0, 651, 247, 504, 610, 599, 215, 594, 503,
- 393, 326, 327, 214, 0, 457, 268, 293, 0, 0,
- 258, 415, 970, 971, 256, 652, 815, 622, 220, 0,
- 621, 408, 584, 595, 394, 383, 219, 593, 392, 382,
- 334, 823, 824, 280, 307, 900, 899, 898, 306, 308,
- 896, 897, 895, 207, 608, 626, 0, 208, 0, 499,
- 611, 653, 452, 212, 234, 235, 237, 0, 279, 283,
- 291, 294, 303, 304, 313, 367, 419, 446, 442, 451,
- 0, 579, 602, 616, 628, 634, 635, 637, 638, 639,
- 640, 641, 644, 642, 407, 311, 495, 333, 373, 0,
- 0, 425, 472, 240, 606, 496, 906, 928, 917, 781,
- 782, 907, 908, 932, 909, 784, 785, 929, 930, 778,
- 779, 783, 931, 933, 654, 655, 656, 657, 658, 659,
+ 1023, 771, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 298, 0, 403, 258, 0, 454, 919, 0,
+ 0, 630, 0, 0, 917, 0, 0, 0, 0, 366,
+ 0, 331, 197, 225, 0, 0, 413, 462, 474, 0,
+ 0, 0, 970, 0, 472, 427, 605, 233, 285, 459,
+ 433, 470, 441, 288, 0, 0, 471, 373, 586, 451,
+ 602, 631, 632, 264, 407, 616, 523, 624, 649, 226,
+ 261, 421, 507, 608, 495, 398, 582, 583, 330, 494,
+ 296, 201, 370, 637, 224, 480, 372, 242, 231, 588,
+ 613, 300, 252, 290, 457, 644, 213, 518, 599, 239,
+ 484, 0, 0, 652, 247, 505, 611, 600, 215, 595,
+ 504, 394, 327, 328, 214, 0, 458, 269, 294, 0,
+ 0, 259, 416, 971, 972, 257, 653, 816, 623, 220,
+ 0, 622, 409, 585, 596, 395, 384, 219, 594, 393,
+ 383, 335, 824, 825, 281, 308, 901, 900, 899, 307,
+ 309, 897, 898, 896, 207, 609, 627, 0, 208, 0,
+ 500, 612, 654, 453, 212, 234, 235, 237, 0, 280,
+ 284, 292, 295, 304, 305, 314, 368, 420, 447, 443,
+ 452, 0, 580, 603, 617, 629, 635, 636, 638, 639,
+ 640, 641, 642, 645, 643, 408, 312, 496, 334, 374,
+ 0, 0, 426, 473, 240, 607, 497, 907, 929, 918,
+ 782, 783, 908, 909, 933, 910, 785, 786, 930, 931,
+ 779, 780, 784, 932, 934, 655, 656, 657, 658, 659,
660, 661, 662, 663, 664, 665, 666, 667, 668, 669,
- 670, 671, 649, 508, 514, 509, 510, 511, 512, 513,
- 0, 515, 920, 767, 766, 0, 773, 774, 0, 803,
- 804, 806, 812, 813, 814, 825, 872, 873, 881, 883,
- 884, 882, 885, 886, 887, 890, 891, 892, 893, 888,
- 889, 894, 786, 790, 787, 788, 789, 801, 791, 792,
- 793, 794, 795, 796, 797, 798, 799, 800, 802, 943,
- 944, 945, 946, 947, 948, 818, 822, 821, 819, 820,
- 816, 817, 844, 843, 845, 846, 847, 848, 849, 850,
- 852, 851, 853, 854, 855, 856, 857, 858, 826, 827,
- 830, 831, 829, 828, 832, 841, 842, 833, 834, 835,
- 836, 837, 838, 840, 839, 859, 860, 861, 862, 863,
- 865, 864, 868, 869, 867, 866, 871, 870, 765, 196,
- 221, 368, 0, 454, 288, 650, 618, 484, 613, 206,
- 223, 934, 262, 935, 0, 0, 939, 0, 0, 0,
- 941, 940, 0, 942, 904, 903, 0, 0, 936, 937,
- 0, 938, 0, 0, 198, 200, 209, 222, 232, 236,
- 243, 261, 276, 278, 285, 298, 310, 318, 319, 322,
- 328, 380, 386, 387, 388, 389, 409, 410, 411, 414,
- 417, 418, 421, 423, 424, 427, 431, 435, 436, 437,
- 439, 441, 443, 455, 460, 474, 475, 476, 477, 478,
- 481, 482, 488, 489, 490, 491, 492, 500, 501, 516,
- 586, 588, 605, 625, 632, 480, 949, 950, 951, 952,
- 953, 954, 955, 956, 300, 600, 633, 597, 645, 627,
- 438, 378, 0, 0, 381, 281, 305, 320, 0, 617,
- 502, 227, 466, 290, 251, 974, 0, 211, 246, 230,
- 259, 274, 277, 324, 391, 400, 429, 434, 296, 271,
- 244, 459, 241, 485, 519, 520, 521, 523, 395, 266,
- 433, 396, 0, 376, 576, 577, 316, 0, 0, 86,
- 528, 0, 777, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 416, 0, 0, 0, 764, 0, 0, 0,
- 270, 769, 0, 0, 0, 366, 267, 0, 0, 204,
- 505, 0, 430, 0, 203, 0, 487, 252, 377, 374,
- 583, 282, 273, 269, 250, 317, 385, 428, 518, 422,
- 776, 370, 0, 0, 497, 401, 0, 0, 0, 0,
- 0, 0, 0, 0, 771, 772, 0, 0, 0, 0,
- 0, 0, 0, 0, 323, 248, 325, 202, 413, 498,
- 286, 0, 95, 0, 0, 1023, 507, 959, 748, 925,
- 963, 1024, 976, 977, 978, 964, 0, 238, 965, 966,
- 245, 967, 0, 924, 807, 809, 808, 874, 875, 876,
- 877, 878, 879, 880, 810, 811, 805, 972, 609, 979,
- 980, 0, 265, 321, 272, 264, 580, 0, 0, 0,
- 0, 0, 0, 596, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 744, 761, 0, 775, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 758, 759,
- 0, 0, 0, 0, 919, 0, 760, 0, 0, 768,
- 981, 982, 983, 984, 985, 986, 987, 988, 989, 990,
+ 670, 671, 672, 650, 509, 515, 510, 511, 512, 513,
+ 514, 0, 516, 921, 768, 767, 0, 774, 775, 0,
+ 804, 805, 807, 813, 814, 815, 826, 873, 874, 882,
+ 884, 885, 883, 886, 887, 888, 891, 892, 893, 894,
+ 889, 890, 895, 787, 791, 788, 789, 790, 802, 792,
+ 793, 794, 795, 796, 797, 798, 799, 800, 801, 803,
+ 944, 945, 946, 947, 948, 949, 819, 823, 822, 820,
+ 821, 817, 818, 845, 844, 846, 847, 848, 849, 850,
+ 851, 853, 852, 854, 855, 856, 857, 858, 859, 827,
+ 828, 831, 832, 830, 829, 833, 842, 843, 834, 835,
+ 836, 837, 838, 839, 841, 840, 860, 861, 862, 863,
+ 864, 866, 865, 869, 870, 868, 867, 872, 871, 766,
+ 196, 221, 369, 0, 455, 289, 651, 619, 485, 614,
+ 206, 223, 935, 263, 936, 0, 0, 940, 0, 0,
+ 0, 942, 941, 0, 943, 905, 904, 0, 0, 937,
+ 938, 0, 939, 0, 0, 198, 200, 209, 222, 232,
+ 236, 243, 262, 277, 279, 286, 299, 311, 319, 320,
+ 323, 329, 381, 387, 388, 389, 390, 410, 411, 412,
+ 415, 418, 419, 422, 424, 425, 428, 432, 436, 437,
+ 438, 440, 442, 444, 456, 461, 475, 476, 477, 478,
+ 479, 482, 483, 489, 490, 491, 492, 493, 501, 502,
+ 517, 587, 589, 606, 626, 633, 481, 950, 951, 952,
+ 953, 954, 955, 956, 957, 301, 601, 634, 598, 646,
+ 628, 439, 379, 0, 0, 382, 282, 306, 321, 0,
+ 618, 503, 227, 467, 291, 251, 975, 0, 211, 246,
+ 230, 260, 275, 278, 325, 392, 401, 430, 435, 297,
+ 272, 244, 460, 241, 486, 520, 521, 522, 524, 396,
+ 267, 434, 397, 0, 377, 577, 578, 317, 0, 0,
+ 0, 529, 0, 778, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 417, 0, 0, 0, 765, 0, 0,
+ 0, 271, 770, 0, 0, 0, 367, 268, 0, 0,
+ 204, 506, 0, 431, 0, 203, 0, 488, 253, 378,
+ 375, 584, 283, 274, 270, 250, 318, 386, 429, 519,
+ 423, 777, 371, 0, 0, 498, 402, 0, 0, 0,
+ 0, 0, 0, 0, 0, 772, 773, 0, 0, 0,
+ 0, 0, 0, 0, 0, 324, 248, 326, 202, 414,
+ 499, 287, 0, 95, 0, 0, 1024, 508, 960, 749,
+ 926, 964, 1025, 977, 978, 979, 965, 0, 238, 966,
+ 967, 245, 968, 0, 925, 808, 810, 809, 875, 876,
+ 877, 878, 879, 880, 881, 811, 812, 806, 973, 610,
+ 980, 981, 0, 266, 322, 273, 265, 581, 0, 0,
+ 0, 0, 0, 0, 597, 0, 0, 229, 0, 0,
+ 0, 0, 0, 0, 0, 745, 762, 0, 776, 0,
+ 0, 0, 276, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 759,
+ 760, 1070, 0, 0, 0, 920, 0, 761, 0, 0,
+ 769, 982, 983, 984, 985, 986, 987, 988, 989, 990,
991, 992, 993, 994, 995, 996, 997, 998, 999, 1000,
1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010,
1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020,
- 1021, 1022, 770, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 402, 257, 0, 453, 918,
- 0, 0, 629, 0, 0, 916, 0, 0, 0, 0,
- 365, 0, 330, 197, 225, 0, 0, 412, 461, 473,
- 0, 0, 0, 969, 0, 471, 426, 604, 233, 284,
- 458, 432, 469, 440, 287, 0, 0, 470, 372, 585,
- 450, 601, 630, 631, 263, 406, 615, 522, 623, 648,
- 226, 260, 420, 506, 607, 494, 397, 581, 582, 329,
- 493, 295, 201, 369, 636, 224, 479, 371, 242, 231,
- 587, 612, 299, 289, 456, 643, 213, 517, 598, 239,
- 483, 0, 0, 651, 247, 504, 610, 599, 215, 594,
- 503, 393, 326, 327, 214, 0, 457, 268, 293, 0,
- 0, 258, 415, 970, 971, 256, 652, 815, 622, 220,
- 0, 621, 408, 584, 595, 394, 383, 219, 593, 392,
- 382, 334, 823, 824, 280, 307, 900, 899, 898, 306,
- 308, 896, 897, 895, 207, 608, 626, 0, 208, 0,
- 499, 611, 653, 452, 212, 234, 235, 237, 0, 279,
- 283, 291, 294, 303, 304, 313, 367, 419, 446, 442,
- 451, 0, 579, 602, 616, 628, 634, 635, 637, 638,
- 639, 640, 641, 644, 642, 407, 311, 495, 333, 373,
- 0, 0, 425, 472, 240, 606, 496, 906, 928, 917,
- 781, 782, 907, 908, 932, 909, 784, 785, 929, 930,
- 778, 779, 783, 931, 933, 654, 655, 656, 657, 658,
- 659, 660, 661, 662, 663, 664, 665, 666, 667, 668,
- 669, 670, 671, 649, 508, 514, 509, 510, 511, 512,
- 513, 0, 515, 920, 767, 766, 0, 773, 774, 0,
- 803, 804, 806, 812, 813, 814, 825, 872, 873, 881,
- 883, 884, 882, 885, 886, 887, 890, 891, 892, 893,
- 888, 889, 894, 786, 790, 787, 788, 789, 801, 791,
- 792, 793, 794, 795, 796, 797, 798, 799, 800, 802,
- 943, 944, 945, 946, 947, 948, 818, 822, 821, 819,
- 820, 816, 817, 844, 843, 845, 846, 847, 848, 849,
- 850, 852, 851, 853, 854, 855, 856, 857, 858, 826,
- 827, 830, 831, 829, 828, 832, 841, 842, 833, 834,
- 835, 836, 837, 838, 840, 839, 859, 860, 861, 862,
- 863, 865, 864, 868, 869, 867, 866, 871, 870, 765,
- 196, 221, 368, 94, 454, 288, 650, 618, 484, 613,
- 206, 223, 934, 262, 935, 0, 0, 939, 0, 0,
- 0, 941, 940, 0, 942, 904, 903, 0, 0, 936,
- 937, 0, 938, 0, 0, 198, 200, 209, 222, 232,
- 236, 243, 261, 276, 278, 285, 298, 310, 318, 319,
- 322, 328, 380, 386, 387, 388, 389, 409, 410, 411,
- 414, 417, 418, 421, 423, 424, 427, 431, 435, 436,
- 437, 439, 441, 443, 455, 460, 474, 475, 476, 477,
- 478, 481, 482, 488, 489, 490, 491, 492, 500, 501,
- 516, 586, 588, 605, 625, 632, 480, 949, 950, 951,
- 952, 953, 954, 955, 956, 300, 600, 633, 597, 645,
- 627, 438, 378, 0, 0, 381, 281, 305, 320, 0,
- 617, 502, 227, 466, 290, 251, 974, 0, 211, 246,
- 230, 259, 274, 277, 324, 391, 400, 429, 434, 296,
- 271, 244, 459, 241, 485, 519, 520, 521, 523, 395,
- 266, 433, 396, 0, 376, 576, 577, 316, 0, 0,
- 0, 528, 0, 777, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 416, 0, 0, 0, 764, 0, 0,
- 0, 270, 769, 0, 0, 0, 366, 267, 0, 0,
- 204, 505, 0, 430, 0, 203, 0, 487, 252, 377,
- 374, 583, 282, 273, 269, 250, 317, 385, 428, 518,
- 422, 776, 370, 0, 0, 497, 401, 0, 0, 0,
- 0, 0, 0, 0, 0, 771, 772, 0, 0, 0,
- 0, 0, 0, 0, 0, 323, 248, 325, 202, 413,
- 498, 286, 0, 95, 0, 0, 1023, 507, 959, 748,
- 925, 963, 1024, 976, 977, 978, 964, 0, 238, 965,
- 966, 245, 967, 0, 924, 807, 809, 808, 874, 875,
- 876, 877, 878, 879, 880, 810, 811, 805, 972, 609,
- 979, 980, 0, 265, 321, 272, 264, 580, 0, 0,
- 0, 0, 0, 0, 596, 0, 0, 229, 0, 0,
- 0, 0, 0, 0, 0, 744, 761, 0, 775, 0,
- 0, 0, 275, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 758,
- 759, 0, 0, 0, 0, 919, 0, 760, 0, 0,
- 768, 981, 982, 983, 984, 985, 986, 987, 988, 989,
- 990, 991, 992, 993, 994, 995, 996, 997, 998, 999,
- 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
- 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019,
- 1020, 1021, 1022, 770, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 297, 0, 402, 257, 0, 453,
- 918, 0, 0, 629, 0, 0, 916, 0, 0, 0,
- 0, 365, 0, 330, 197, 225, 0, 0, 412, 461,
- 473, 0, 0, 0, 969, 0, 471, 426, 604, 233,
- 284, 458, 432, 469, 440, 287, 4096, 0, 470, 372,
- 585, 450, 601, 630, 631, 263, 406, 615, 522, 623,
- 648, 226, 260, 420, 506, 607, 494, 397, 581, 582,
- 329, 493, 295, 201, 369, 636, 224, 479, 371, 242,
- 231, 587, 612, 299, 289, 456, 643, 213, 517, 598,
- 239, 483, 0, 0, 651, 247, 504, 610, 599, 215,
- 594, 503, 393, 326, 327, 214, 0, 457, 268, 293,
- 0, 0, 258, 415, 970, 971, 256, 652, 815, 622,
- 220, 0, 621, 408, 584, 595, 394, 383, 219, 593,
- 392, 382, 334, 823, 824, 280, 307, 900, 899, 898,
- 306, 308, 896, 897, 895, 207, 608, 626, 0, 208,
- 0, 499, 611, 653, 452, 212, 234, 235, 237, 0,
- 279, 283, 291, 294, 303, 304, 313, 367, 419, 446,
- 442, 451, 0, 579, 602, 616, 628, 634, 635, 637,
- 638, 639, 640, 641, 644, 642, 407, 311, 495, 333,
- 373, 0, 0, 425, 472, 240, 606, 496, 906, 928,
- 917, 781, 782, 907, 908, 932, 909, 784, 785, 929,
- 930, 778, 779, 783, 931, 933, 654, 655, 656, 657,
+ 1021, 1022, 1023, 771, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 298, 0, 403, 258, 0, 454,
+ 919, 0, 0, 630, 0, 0, 917, 0, 0, 0,
+ 0, 366, 0, 331, 197, 225, 0, 0, 413, 462,
+ 474, 0, 0, 0, 970, 0, 472, 427, 605, 233,
+ 285, 459, 433, 470, 441, 288, 0, 0, 471, 373,
+ 586, 451, 602, 631, 632, 264, 407, 616, 523, 624,
+ 649, 226, 261, 421, 507, 608, 495, 398, 582, 583,
+ 330, 494, 296, 201, 370, 637, 224, 480, 372, 242,
+ 231, 588, 613, 300, 252, 290, 457, 644, 213, 518,
+ 599, 239, 484, 0, 0, 652, 247, 505, 611, 600,
+ 215, 595, 504, 394, 327, 328, 214, 0, 458, 269,
+ 294, 0, 0, 259, 416, 971, 972, 257, 653, 816,
+ 623, 220, 0, 622, 409, 585, 596, 395, 384, 219,
+ 594, 393, 383, 335, 824, 825, 281, 308, 901, 900,
+ 899, 307, 309, 897, 898, 896, 207, 609, 627, 0,
+ 208, 0, 500, 612, 654, 453, 212, 234, 235, 237,
+ 0, 280, 284, 292, 295, 304, 305, 314, 368, 420,
+ 447, 443, 452, 0, 580, 603, 617, 629, 635, 636,
+ 638, 639, 640, 641, 642, 645, 643, 408, 312, 496,
+ 334, 374, 0, 0, 426, 473, 240, 607, 497, 907,
+ 929, 918, 782, 783, 908, 909, 933, 910, 785, 786,
+ 930, 931, 779, 780, 784, 932, 934, 655, 656, 657,
658, 659, 660, 661, 662, 663, 664, 665, 666, 667,
- 668, 669, 670, 671, 649, 508, 514, 509, 510, 511,
- 512, 513, 0, 515, 920, 767, 766, 0, 773, 774,
- 0, 803, 804, 806, 812, 813, 814, 825, 872, 873,
- 881, 883, 884, 882, 885, 886, 887, 890, 891, 892,
- 893, 888, 889, 894, 786, 790, 787, 788, 789, 801,
- 791, 792, 793, 794, 795, 796, 797, 798, 799, 800,
- 802, 943, 944, 945, 946, 947, 948, 818, 822, 821,
- 819, 820, 816, 817, 844, 843, 845, 846, 847, 848,
- 849, 850, 852, 851, 853, 854, 855, 856, 857, 858,
- 826, 827, 830, 831, 829, 828, 832, 841, 842, 833,
- 834, 835, 836, 837, 838, 840, 839, 859, 860, 861,
- 862, 863, 865, 864, 868, 869, 867, 866, 871, 870,
- 765, 196, 221, 368, 0, 454, 288, 650, 618, 484,
- 613, 206, 223, 934, 262, 935, 0, 0, 939, 0,
- 0, 0, 941, 940, 0, 942, 904, 903, 0, 0,
- 936, 937, 0, 938, 0, 0, 198, 200, 209, 222,
- 232, 236, 243, 261, 276, 278, 285, 298, 310, 318,
- 319, 322, 328, 380, 386, 387, 388, 389, 409, 410,
- 411, 414, 417, 418, 421, 423, 424, 427, 431, 435,
- 436, 437, 439, 441, 443, 455, 460, 474, 475, 476,
- 477, 478, 481, 482, 488, 489, 490, 491, 492, 500,
- 501, 516, 586, 588, 605, 625, 632, 480, 949, 950,
- 951, 952, 953, 954, 955, 956, 300, 600, 633, 597,
- 645, 627, 438, 378, 0, 0, 381, 281, 305, 320,
- 0, 617, 502, 227, 466, 290, 251, 974, 0, 211,
- 246, 230, 259, 274, 277, 324, 391, 400, 429, 434,
- 296, 271, 244, 459, 241, 485, 519, 520, 521, 523,
- 395, 266, 433, 396, 0, 376, 576, 577, 316, 0,
- 0, 0, 528, 0, 777, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 416, 0, 0, 0, 764, 0,
- 0, 0, 270, 769, 0, 0, 0, 366, 267, 0,
- 0, 204, 505, 0, 430, 0, 203, 0, 487, 252,
- 377, 374, 583, 282, 273, 269, 250, 317, 385, 428,
- 518, 422, 776, 370, 0, 0, 497, 401, 0, 0,
- 0, 0, 0, 0, 0, 0, 771, 772, 0, 0,
- 0, 0, 0, 0, 0, 0, 323, 248, 325, 202,
- 413, 498, 286, 0, 95, 0, 1754, 1023, 507, 959,
- 748, 925, 963, 1024, 976, 977, 978, 964, 0, 238,
- 965, 966, 245, 967, 0, 924, 807, 809, 808, 874,
- 875, 876, 877, 878, 879, 880, 810, 811, 805, 972,
- 609, 979, 980, 0, 265, 321, 272, 264, 580, 0,
- 0, 0, 0, 0, 0, 596, 0, 0, 229, 0,
- 0, 0, 0, 0, 0, 0, 744, 761, 0, 775,
- 0, 0, 0, 275, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 758, 759, 0, 0, 0, 0, 919, 0, 760, 0,
- 0, 768, 981, 982, 983, 984, 985, 986, 987, 988,
+ 668, 669, 670, 671, 672, 650, 509, 515, 510, 511,
+ 512, 513, 514, 0, 516, 921, 768, 767, 0, 774,
+ 775, 0, 804, 805, 807, 813, 814, 815, 826, 873,
+ 874, 882, 884, 885, 883, 886, 887, 888, 891, 892,
+ 893, 894, 889, 890, 895, 787, 791, 788, 789, 790,
+ 802, 792, 793, 794, 795, 796, 797, 798, 799, 800,
+ 801, 803, 944, 945, 946, 947, 948, 949, 819, 823,
+ 822, 820, 821, 817, 818, 845, 844, 846, 847, 848,
+ 849, 850, 851, 853, 852, 854, 855, 856, 857, 858,
+ 859, 827, 828, 831, 832, 830, 829, 833, 842, 843,
+ 834, 835, 836, 837, 838, 839, 841, 840, 860, 861,
+ 862, 863, 864, 866, 865, 869, 870, 868, 867, 872,
+ 871, 766, 196, 221, 369, 0, 455, 289, 651, 619,
+ 485, 614, 206, 223, 935, 263, 936, 0, 0, 940,
+ 0, 0, 0, 942, 941, 0, 943, 905, 904, 0,
+ 0, 937, 938, 0, 939, 0, 0, 198, 200, 209,
+ 222, 232, 236, 243, 262, 277, 279, 286, 299, 311,
+ 319, 320, 323, 329, 381, 387, 388, 389, 390, 410,
+ 411, 412, 415, 418, 419, 422, 424, 425, 428, 432,
+ 436, 437, 438, 440, 442, 444, 456, 461, 475, 476,
+ 477, 478, 479, 482, 483, 489, 490, 491, 492, 493,
+ 501, 502, 517, 587, 589, 606, 626, 633, 481, 950,
+ 951, 952, 953, 954, 955, 956, 957, 301, 601, 634,
+ 598, 646, 628, 439, 379, 0, 0, 382, 282, 306,
+ 321, 0, 618, 503, 227, 467, 291, 251, 975, 0,
+ 211, 246, 230, 260, 275, 278, 325, 392, 401, 430,
+ 435, 297, 272, 244, 460, 241, 486, 520, 521, 522,
+ 524, 396, 267, 434, 397, 0, 377, 577, 578, 317,
+ 0, 0, 0, 529, 0, 778, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 417, 0, 0, 0, 765,
+ 0, 0, 0, 271, 770, 0, 0, 0, 367, 268,
+ 0, 0, 204, 506, 0, 431, 0, 203, 0, 488,
+ 253, 378, 375, 584, 283, 274, 270, 250, 318, 386,
+ 429, 519, 423, 777, 371, 0, 0, 498, 402, 0,
+ 0, 0, 0, 0, 0, 0, 0, 772, 773, 0,
+ 0, 0, 0, 0, 0, 0, 0, 324, 248, 326,
+ 202, 414, 499, 287, 0, 95, 0, 0, 1024, 508,
+ 960, 749, 926, 964, 1025, 977, 978, 979, 965, 0,
+ 238, 966, 967, 245, 968, 0, 925, 808, 810, 809,
+ 875, 876, 877, 878, 879, 880, 881, 811, 812, 806,
+ 973, 610, 980, 981, 0, 266, 322, 273, 265, 581,
+ 0, 0, 0, 0, 0, 0, 597, 0, 0, 229,
+ 0, 0, 0, 0, 0, 0, 0, 745, 762, 0,
+ 776, 0, 0, 0, 276, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 759, 760, 0, 0, 0, 0, 920, 0, 761,
+ 0, 0, 769, 982, 983, 984, 985, 986, 987, 988,
989, 990, 991, 992, 993, 994, 995, 996, 997, 998,
999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008,
1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018,
- 1019, 1020, 1021, 1022, 770, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 297, 0, 402, 257, 0,
- 453, 918, 0, 0, 629, 0, 0, 916, 0, 0,
- 0, 0, 365, 0, 330, 197, 225, 0, 0, 412,
- 461, 473, 0, 0, 0, 969, 0, 471, 426, 604,
- 233, 284, 458, 432, 469, 440, 287, 0, 0, 470,
- 372, 585, 450, 601, 630, 631, 263, 406, 615, 522,
- 623, 648, 226, 260, 420, 506, 607, 494, 397, 581,
- 582, 329, 493, 295, 201, 369, 636, 224, 479, 371,
- 242, 231, 587, 612, 299, 289, 456, 643, 213, 517,
- 598, 239, 483, 0, 0, 651, 247, 504, 610, 599,
- 215, 594, 503, 393, 326, 327, 214, 0, 457, 268,
- 293, 0, 0, 258, 415, 970, 971, 256, 652, 815,
- 622, 220, 0, 621, 408, 584, 595, 394, 383, 219,
- 593, 392, 382, 334, 823, 824, 280, 307, 900, 899,
- 898, 306, 308, 896, 897, 895, 207, 608, 626, 0,
- 208, 0, 499, 611, 653, 452, 212, 234, 235, 237,
- 0, 279, 283, 291, 294, 303, 304, 313, 367, 419,
- 446, 442, 451, 0, 579, 602, 616, 628, 634, 635,
- 637, 638, 639, 640, 641, 644, 642, 407, 311, 495,
- 333, 373, 0, 0, 425, 472, 240, 606, 496, 906,
- 928, 917, 781, 782, 907, 908, 932, 909, 784, 785,
- 929, 930, 778, 779, 783, 931, 933, 654, 655, 656,
- 657, 658, 659, 660, 661, 662, 663, 664, 665, 666,
- 667, 668, 669, 670, 671, 649, 508, 514, 509, 510,
- 511, 512, 513, 0, 515, 920, 767, 766, 0, 773,
- 774, 0, 803, 804, 806, 812, 813, 814, 825, 872,
- 873, 881, 883, 884, 882, 885, 886, 887, 890, 891,
- 892, 893, 888, 889, 894, 786, 790, 787, 788, 789,
- 801, 791, 792, 793, 794, 795, 796, 797, 798, 799,
- 800, 802, 943, 944, 945, 946, 947, 948, 818, 822,
- 821, 819, 820, 816, 817, 844, 843, 845, 846, 847,
- 848, 849, 850, 852, 851, 853, 854, 855, 856, 857,
- 858, 826, 827, 830, 831, 829, 828, 832, 841, 842,
- 833, 834, 835, 836, 837, 838, 840, 839, 859, 860,
- 861, 862, 863, 865, 864, 868, 869, 867, 866, 871,
- 870, 765, 196, 221, 368, 0, 454, 288, 650, 618,
- 484, 613, 206, 223, 934, 262, 935, 0, 0, 939,
- 0, 0, 0, 941, 940, 0, 942, 904, 903, 0,
- 0, 936, 937, 0, 938, 0, 0, 198, 200, 209,
- 222, 232, 236, 243, 261, 276, 278, 285, 298, 310,
- 318, 319, 322, 328, 380, 386, 387, 388, 389, 409,
- 410, 411, 414, 417, 418, 421, 423, 424, 427, 431,
- 435, 436, 437, 439, 441, 443, 455, 460, 474, 475,
- 476, 477, 478, 481, 482, 488, 489, 490, 491, 492,
- 500, 501, 516, 586, 588, 605, 625, 632, 480, 949,
- 950, 951, 952, 953, 954, 955, 956, 300, 600, 633,
- 597, 645, 627, 438, 378, 0, 0, 381, 281, 305,
- 320, 0, 617, 502, 227, 466, 290, 251, 974, 0,
- 211, 246, 230, 259, 274, 277, 324, 391, 400, 429,
- 434, 296, 271, 244, 459, 241, 485, 519, 520, 521,
- 523, 395, 266, 433, 396, 0, 376, 576, 577, 316,
- 0, 0, 0, 528, 0, 777, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 416, 0, 0, 0, 764,
- 0, 0, 0, 270, 769, 0, 0, 0, 366, 267,
- 0, 0, 204, 505, 0, 430, 0, 203, 0, 487,
- 252, 377, 374, 583, 282, 273, 269, 250, 317, 385,
- 428, 518, 422, 776, 370, 0, 0, 497, 401, 0,
- 0, 0, 0, 0, 0, 0, 0, 771, 772, 0,
- 0, 0, 0, 0, 0, 0, 0, 323, 248, 325,
- 202, 413, 498, 286, 0, 95, 0, 0, 1023, 507,
- 959, 748, 925, 963, 1024, 976, 977, 978, 964, 0,
- 238, 965, 966, 245, 967, 0, 924, 807, 809, 808,
- 874, 875, 876, 877, 878, 879, 880, 810, 811, 805,
- 972, 609, 979, 980, 0, 265, 321, 272, 264, 580,
- 0, 0, 0, 0, 0, 0, 596, 0, 0, 229,
- 0, 0, 0, 0, 0, 0, 0, 744, 761, 0,
- 775, 0, 0, 0, 275, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 758, 759, 1069, 0, 0, 0, 919, 0, 760,
- 0, 0, 768, 981, 982, 983, 984, 985, 986, 987,
- 988, 989, 990, 991, 992, 993, 994, 995, 996, 997,
- 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007,
- 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017,
- 1018, 1019, 1020, 1021, 1022, 770, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 297, 0, 402, 257,
- 0, 453, 918, 0, 0, 629, 0, 0, 916, 0,
- 0, 0, 0, 365, 0, 330, 197, 225, 0, 0,
- 412, 461, 473, 0, 0, 0, 969, 0, 471, 426,
- 604, 233, 284, 458, 432, 469, 440, 287, 0, 0,
- 470, 372, 585, 450, 601, 630, 631, 263, 406, 615,
- 522, 623, 648, 226, 260, 420, 506, 607, 494, 397,
- 581, 582, 329, 493, 295, 201, 369, 636, 224, 479,
- 371, 242, 231, 587, 612, 299, 289, 456, 643, 213,
- 517, 598, 239, 483, 0, 0, 651, 247, 504, 610,
- 599, 215, 594, 503, 393, 326, 327, 214, 0, 457,
- 268, 293, 0, 0, 258, 415, 970, 971, 256, 652,
- 815, 622, 220, 0, 621, 408, 584, 595, 394, 383,
- 219, 593, 392, 382, 334, 823, 824, 280, 307, 900,
- 899, 898, 306, 308, 896, 897, 895, 207, 608, 626,
- 0, 208, 0, 499, 611, 653, 452, 212, 234, 235,
- 237, 0, 279, 283, 291, 294, 303, 304, 313, 367,
- 419, 446, 442, 451, 0, 579, 602, 616, 628, 634,
- 635, 637, 638, 639, 640, 641, 644, 642, 407, 311,
- 495, 333, 373, 0, 0, 425, 472, 240, 606, 496,
- 906, 928, 917, 781, 782, 907, 908, 932, 909, 784,
- 785, 929, 930, 778, 779, 783, 931, 933, 654, 655,
+ 1019, 1020, 1021, 1022, 1023, 771, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 298, 0, 403, 258,
+ 0, 454, 919, 0, 0, 630, 0, 0, 917, 0,
+ 0, 0, 0, 366, 0, 331, 197, 225, 0, 0,
+ 413, 462, 474, 0, 0, 0, 970, 0, 472, 427,
+ 605, 233, 285, 459, 433, 470, 441, 288, 0, 0,
+ 471, 373, 586, 451, 602, 631, 632, 264, 407, 616,
+ 523, 624, 649, 226, 261, 421, 507, 608, 495, 398,
+ 582, 583, 330, 494, 296, 201, 370, 637, 224, 480,
+ 372, 242, 231, 588, 613, 300, 252, 290, 457, 644,
+ 213, 518, 599, 239, 484, 0, 0, 652, 247, 505,
+ 611, 600, 215, 595, 504, 394, 327, 328, 214, 0,
+ 458, 269, 294, 0, 0, 259, 416, 971, 972, 257,
+ 653, 816, 623, 220, 0, 622, 409, 585, 596, 395,
+ 384, 219, 594, 393, 383, 335, 824, 825, 281, 308,
+ 901, 900, 899, 307, 309, 897, 898, 896, 207, 609,
+ 627, 0, 208, 0, 500, 612, 654, 453, 212, 234,
+ 235, 237, 0, 280, 284, 292, 295, 304, 305, 314,
+ 368, 420, 447, 443, 452, 0, 580, 603, 617, 629,
+ 635, 636, 638, 639, 640, 641, 642, 645, 643, 408,
+ 312, 496, 334, 374, 0, 0, 426, 473, 240, 607,
+ 497, 907, 929, 918, 782, 783, 908, 909, 933, 910,
+ 785, 786, 930, 931, 779, 780, 784, 932, 934, 655,
656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
- 666, 667, 668, 669, 670, 671, 649, 508, 514, 509,
- 510, 511, 512, 513, 0, 515, 920, 767, 766, 0,
- 773, 774, 0, 803, 804, 806, 812, 813, 814, 825,
- 872, 873, 881, 883, 884, 882, 885, 886, 887, 890,
- 891, 892, 893, 888, 889, 894, 786, 790, 787, 788,
- 789, 801, 791, 792, 793, 794, 795, 796, 797, 798,
- 799, 800, 802, 943, 944, 945, 946, 947, 948, 818,
- 822, 821, 819, 820, 816, 817, 844, 843, 845, 846,
- 847, 848, 849, 850, 852, 851, 853, 854, 855, 856,
- 857, 858, 826, 827, 830, 831, 829, 828, 832, 841,
- 842, 833, 834, 835, 836, 837, 838, 840, 839, 859,
- 860, 861, 862, 863, 865, 864, 868, 869, 867, 866,
- 871, 870, 765, 196, 221, 368, 0, 454, 288, 650,
- 618, 484, 613, 206, 223, 934, 262, 935, 0, 0,
- 939, 0, 0, 0, 941, 940, 0, 942, 904, 903,
- 0, 0, 936, 937, 0, 938, 0, 0, 198, 200,
- 209, 222, 232, 236, 243, 261, 276, 278, 285, 298,
- 310, 318, 319, 322, 328, 380, 386, 387, 388, 389,
- 409, 410, 411, 414, 417, 418, 421, 423, 424, 427,
- 431, 435, 436, 437, 439, 441, 443, 455, 460, 474,
- 475, 476, 477, 478, 481, 482, 488, 489, 490, 491,
- 492, 500, 501, 516, 586, 588, 605, 625, 632, 480,
- 949, 950, 951, 952, 953, 954, 955, 956, 300, 600,
- 633, 597, 645, 627, 438, 378, 0, 0, 381, 281,
- 305, 320, 0, 617, 502, 227, 466, 290, 251, 974,
- 0, 211, 246, 230, 259, 274, 277, 324, 391, 400,
- 429, 434, 296, 271, 244, 459, 241, 485, 519, 520,
- 521, 523, 395, 266, 433, 396, 0, 376, 576, 577,
- 316, 0, 0, 0, 528, 0, 777, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 416, 0, 0, 0,
- 764, 0, 0, 0, 270, 769, 0, 0, 0, 366,
- 267, 0, 0, 204, 505, 0, 430, 0, 203, 0,
- 487, 252, 377, 374, 583, 282, 273, 269, 250, 317,
- 385, 428, 518, 422, 776, 370, 0, 0, 497, 401,
- 0, 0, 0, 0, 0, 0, 0, 0, 771, 772,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 413, 498, 286, 0, 95, 0, 0, 1023,
- 507, 959, 748, 925, 963, 1024, 976, 977, 978, 964,
- 0, 238, 965, 966, 245, 967, 0, 924, 807, 809,
- 808, 874, 875, 876, 877, 878, 879, 880, 810, 811,
- 805, 972, 609, 979, 980, 0, 265, 321, 272, 264,
- 580, 0, 0, 0, 0, 0, 0, 596, 0, 0,
- 229, 0, 0, 0, 0, 0, 0, 0, 744, 761,
- 0, 775, 0, 0, 0, 275, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 758, 759, 0, 0, 0, 0, 919, 0,
- 760, 0, 0, 768, 981, 982, 983, 984, 985, 986,
+ 666, 667, 668, 669, 670, 671, 672, 650, 509, 515,
+ 510, 511, 512, 513, 514, 0, 516, 921, 768, 767,
+ 0, 774, 775, 0, 804, 805, 807, 813, 814, 815,
+ 826, 873, 874, 882, 884, 885, 883, 886, 887, 888,
+ 891, 892, 893, 894, 889, 890, 895, 787, 791, 788,
+ 789, 790, 802, 792, 793, 794, 795, 796, 797, 798,
+ 799, 800, 801, 803, 944, 945, 946, 947, 948, 949,
+ 819, 823, 822, 820, 821, 817, 818, 845, 844, 846,
+ 847, 848, 849, 850, 851, 853, 852, 854, 855, 856,
+ 857, 858, 859, 827, 828, 831, 832, 830, 829, 833,
+ 842, 843, 834, 835, 836, 837, 838, 839, 841, 840,
+ 860, 861, 862, 863, 864, 866, 865, 869, 870, 868,
+ 867, 872, 871, 766, 196, 221, 369, 0, 455, 289,
+ 651, 619, 485, 614, 206, 223, 935, 263, 936, 0,
+ 0, 940, 0, 0, 0, 942, 941, 0, 943, 905,
+ 904, 0, 0, 937, 938, 0, 939, 0, 0, 198,
+ 200, 209, 222, 232, 236, 243, 262, 277, 279, 286,
+ 299, 311, 319, 320, 323, 329, 381, 387, 388, 389,
+ 390, 410, 411, 412, 415, 418, 419, 422, 424, 425,
+ 428, 432, 436, 437, 438, 440, 442, 444, 456, 461,
+ 475, 476, 477, 478, 479, 482, 483, 489, 490, 491,
+ 492, 493, 501, 502, 517, 587, 589, 606, 626, 633,
+ 481, 950, 951, 952, 953, 954, 955, 956, 957, 301,
+ 601, 634, 598, 646, 628, 439, 379, 0, 0, 382,
+ 282, 306, 321, 0, 618, 503, 227, 467, 291, 251,
+ 975, 0, 211, 246, 230, 260, 275, 278, 325, 392,
+ 401, 430, 435, 297, 272, 244, 460, 241, 486, 520,
+ 521, 522, 524, 396, 267, 434, 397, 0, 377, 577,
+ 578, 317, 0, 0, 0, 529, 0, 778, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 417, 0, 0,
+ 0, 765, 0, 0, 0, 271, 770, 0, 0, 0,
+ 367, 268, 0, 0, 204, 506, 0, 431, 0, 203,
+ 0, 488, 253, 378, 375, 584, 283, 274, 270, 250,
+ 318, 386, 429, 519, 423, 777, 371, 0, 0, 498,
+ 402, 0, 0, 0, 0, 0, 0, 0, 0, 772,
+ 773, 0, 0, 0, 0, 0, 0, 0, 0, 324,
+ 248, 326, 202, 414, 499, 287, 0, 95, 0, 0,
+ 1024, 508, 960, 749, 926, 964, 1025, 977, 978, 979,
+ 965, 0, 238, 966, 967, 245, 968, 0, 925, 808,
+ 810, 809, 875, 876, 877, 878, 879, 880, 881, 811,
+ 812, 806, 973, 610, 980, 981, 0, 266, 322, 273,
+ 265, 581, 0, 0, 0, 0, 0, 0, 597, 0,
+ 0, 229, 0, 0, 0, 0, 0, 0, 0, 745,
+ 762, 0, 776, 0, 0, 0, 276, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 759, 760, 0, 0, 0, 0, 920,
+ 0, 761, 0, 0, 769, 982, 983, 984, 985, 986,
987, 988, 989, 990, 991, 992, 993, 994, 995, 996,
997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006,
1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016,
- 1017, 1018, 1019, 1020, 1021, 1022, 770, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 297, 0, 402,
- 257, 0, 453, 918, 0, 0, 629, 0, 0, 916,
- 0, 0, 0, 0, 365, 0, 330, 197, 225, 0,
- 0, 412, 461, 473, 0, 0, 0, 969, 0, 471,
- 426, 604, 233, 284, 458, 432, 469, 440, 287, 0,
- 0, 470, 372, 585, 450, 601, 630, 631, 263, 406,
- 615, 522, 623, 648, 226, 260, 420, 506, 607, 494,
- 397, 581, 582, 329, 493, 295, 201, 369, 636, 224,
- 479, 371, 242, 231, 587, 612, 299, 289, 456, 643,
- 213, 517, 598, 239, 483, 0, 0, 651, 247, 504,
- 610, 599, 215, 594, 503, 393, 326, 327, 214, 0,
- 457, 268, 293, 0, 0, 258, 415, 970, 971, 256,
- 652, 815, 622, 220, 0, 621, 408, 584, 595, 394,
- 383, 219, 593, 392, 382, 334, 823, 824, 280, 307,
- 900, 899, 898, 306, 308, 896, 897, 895, 207, 608,
- 626, 0, 208, 0, 499, 611, 653, 452, 212, 234,
- 235, 237, 0, 279, 283, 291, 294, 303, 304, 313,
- 367, 419, 446, 442, 451, 0, 579, 602, 616, 628,
- 634, 635, 637, 638, 639, 640, 641, 644, 642, 407,
- 311, 495, 333, 373, 0, 0, 425, 472, 240, 606,
- 496, 906, 928, 917, 781, 782, 907, 908, 932, 909,
- 784, 785, 929, 930, 778, 779, 783, 931, 933, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 665, 666, 667, 668, 669, 670, 671, 649, 508, 514,
- 509, 510, 511, 512, 513, 0, 515, 920, 767, 766,
- 0, 773, 774, 0, 803, 804, 806, 812, 813, 814,
- 825, 872, 873, 881, 883, 884, 882, 885, 886, 887,
- 890, 891, 892, 893, 888, 889, 894, 786, 790, 787,
- 788, 789, 801, 791, 792, 793, 794, 795, 796, 797,
- 798, 799, 800, 802, 943, 944, 945, 946, 947, 948,
- 818, 822, 821, 819, 820, 816, 817, 844, 843, 845,
- 846, 847, 848, 849, 850, 852, 851, 853, 854, 855,
- 856, 857, 858, 826, 827, 830, 831, 829, 828, 832,
- 841, 842, 833, 834, 835, 836, 837, 838, 840, 839,
- 859, 860, 861, 862, 863, 865, 864, 868, 869, 867,
- 866, 871, 870, 765, 196, 221, 368, 0, 454, 288,
- 650, 618, 484, 613, 206, 223, 934, 262, 935, 0,
- 0, 939, 0, 0, 0, 941, 940, 0, 942, 904,
- 903, 0, 0, 936, 937, 0, 938, 0, 0, 198,
- 200, 209, 222, 232, 236, 243, 261, 276, 278, 285,
- 298, 310, 318, 319, 322, 328, 380, 386, 387, 388,
- 389, 409, 410, 411, 414, 417, 418, 421, 423, 424,
- 427, 431, 435, 436, 437, 439, 441, 443, 455, 460,
- 474, 475, 476, 477, 478, 481, 482, 488, 489, 490,
- 491, 492, 500, 501, 516, 586, 588, 605, 625, 632,
- 480, 949, 950, 951, 952, 953, 954, 955, 956, 300,
- 600, 633, 597, 645, 627, 438, 378, 0, 0, 381,
- 281, 305, 320, 0, 617, 502, 227, 466, 290, 251,
- 974, 0, 211, 246, 230, 259, 274, 277, 324, 391,
- 400, 429, 434, 296, 271, 244, 459, 241, 485, 519,
- 520, 521, 523, 395, 266, 433, 396, 0, 376, 576,
- 577, 316, 0, 0, 0, 528, 0, 777, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 416, 0, 0,
- 0, 764, 0, 0, 0, 270, 769, 0, 0, 0,
- 366, 267, 0, 0, 204, 505, 0, 430, 0, 203,
- 0, 487, 252, 377, 374, 583, 282, 273, 269, 250,
- 317, 385, 428, 518, 422, 776, 370, 0, 0, 497,
- 401, 0, 0, 0, 0, 0, 0, 0, 0, 771,
- 772, 0, 0, 0, 0, 0, 0, 0, 0, 323,
- 248, 325, 202, 413, 498, 286, 0, 95, 0, 0,
- 1023, 507, 959, 748, 925, 963, 1024, 976, 977, 978,
- 964, 0, 238, 965, 966, 245, 967, 0, 924, 807,
- 809, 808, 874, 875, 876, 877, 878, 879, 880, 810,
- 811, 805, 972, 609, 979, 980, 0, 265, 321, 272,
- 264, 580, 0, 0, 0, 0, 0, 0, 596, 0,
- 0, 229, 0, 0, 0, 0, 0, 0, 0, 744,
- 761, 0, 775, 0, 0, 0, 275, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 758, 759, 0, 0, 0, 0, 919,
- 0, 760, 0, 0, 768, 981, 982, 983, 984, 985,
- 986, 987, 988, 989, 990, 991, 992, 993, 994, 995,
- 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005,
- 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015,
- 1016, 1017, 1018, 1019, 1020, 1021, 1022, 3172, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 297, 0,
- 402, 257, 0, 453, 918, 0, 0, 629, 0, 0,
- 916, 0, 0, 0, 0, 365, 0, 330, 197, 225,
- 0, 0, 412, 461, 473, 0, 0, 0, 969, 0,
- 471, 426, 604, 233, 284, 458, 432, 469, 440, 287,
- 0, 0, 470, 372, 585, 450, 601, 630, 631, 263,
- 406, 615, 522, 623, 648, 226, 260, 420, 506, 607,
- 494, 397, 581, 582, 329, 493, 295, 201, 369, 636,
- 224, 479, 371, 242, 231, 587, 612, 299, 289, 456,
- 643, 213, 517, 598, 239, 483, 0, 0, 651, 247,
- 504, 610, 599, 215, 594, 503, 393, 326, 327, 214,
- 0, 457, 268, 293, 0, 0, 258, 415, 970, 971,
- 256, 652, 815, 622, 220, 0, 621, 408, 584, 595,
- 394, 383, 219, 593, 392, 382, 334, 823, 824, 280,
- 307, 900, 899, 898, 306, 308, 896, 897, 895, 207,
- 608, 626, 0, 208, 0, 499, 611, 653, 452, 212,
- 234, 235, 237, 0, 279, 283, 291, 294, 303, 304,
- 313, 367, 419, 446, 442, 451, 0, 579, 602, 616,
- 628, 634, 635, 637, 638, 639, 640, 641, 644, 642,
- 407, 311, 495, 333, 373, 0, 0, 425, 472, 240,
- 606, 496, 906, 928, 917, 781, 782, 907, 908, 932,
- 909, 784, 785, 929, 930, 778, 779, 783, 931, 933,
- 654, 655, 656, 657, 658, 659, 660, 661, 662, 663,
- 664, 665, 666, 667, 668, 669, 670, 671, 649, 508,
- 514, 509, 510, 511, 512, 513, 0, 515, 920, 767,
- 766, 0, 773, 774, 0, 803, 804, 806, 812, 813,
- 814, 825, 872, 873, 881, 883, 884, 882, 885, 886,
- 887, 890, 891, 892, 893, 888, 889, 894, 786, 790,
- 787, 788, 789, 801, 791, 792, 793, 794, 795, 796,
- 797, 798, 799, 800, 802, 943, 944, 945, 946, 947,
- 948, 818, 822, 821, 819, 820, 816, 817, 844, 843,
- 845, 846, 847, 848, 849, 850, 852, 851, 853, 854,
- 855, 856, 857, 858, 826, 827, 830, 831, 829, 828,
- 832, 841, 842, 833, 834, 835, 836, 837, 838, 840,
- 839, 859, 860, 861, 862, 863, 865, 864, 868, 869,
- 867, 866, 871, 870, 765, 196, 221, 368, 0, 454,
- 288, 650, 618, 484, 613, 206, 223, 934, 262, 935,
- 0, 0, 939, 0, 0, 0, 941, 940, 0, 942,
- 904, 903, 0, 0, 936, 937, 0, 938, 0, 0,
- 198, 200, 209, 222, 232, 236, 243, 261, 276, 278,
- 285, 298, 310, 318, 319, 322, 328, 380, 386, 387,
- 388, 389, 409, 410, 411, 414, 417, 418, 421, 423,
- 424, 427, 431, 435, 436, 437, 439, 441, 443, 455,
- 460, 474, 475, 476, 477, 478, 481, 482, 488, 489,
- 490, 491, 492, 500, 501, 516, 586, 588, 605, 625,
- 632, 480, 949, 950, 951, 952, 953, 954, 955, 956,
- 300, 600, 633, 597, 645, 627, 438, 378, 0, 0,
- 381, 281, 305, 320, 0, 617, 502, 227, 466, 290,
- 251, 974, 0, 211, 246, 230, 259, 274, 277, 324,
- 391, 400, 429, 434, 296, 271, 244, 459, 241, 485,
- 519, 520, 521, 523, 395, 266, 433, 396, 0, 376,
- 576, 577, 316, 0, 0, 0, 528, 0, 777, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 416, 0,
- 0, 0, 764, 0, 0, 0, 270, 769, 0, 0,
- 0, 366, 267, 0, 0, 204, 505, 0, 430, 0,
- 203, 0, 487, 252, 377, 374, 583, 282, 273, 269,
- 250, 317, 385, 428, 518, 422, 776, 370, 0, 0,
- 497, 401, 0, 0, 0, 0, 0, 0, 0, 0,
- 771, 772, 0, 0, 0, 0, 0, 0, 0, 0,
- 323, 248, 325, 202, 413, 498, 286, 0, 95, 0,
- 0, 1023, 507, 959, 748, 925, 963, 1024, 976, 977,
- 978, 964, 0, 238, 965, 966, 245, 967, 0, 924,
- 807, 809, 808, 874, 875, 876, 877, 878, 879, 880,
- 810, 811, 805, 972, 609, 979, 980, 0, 265, 321,
- 272, 264, 580, 0, 0, 0, 0, 0, 0, 596,
- 0, 0, 229, 0, 0, 0, 0, 0, 0, 0,
- 744, 761, 0, 775, 0, 0, 0, 275, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 758, 759, 0, 0, 0, 0,
- 919, 0, 760, 0, 0, 768, 981, 982, 983, 984,
+ 1017, 1018, 1019, 1020, 1021, 1022, 1023, 3174, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 298, 0,
+ 403, 258, 0, 454, 919, 0, 0, 630, 0, 0,
+ 917, 0, 0, 0, 0, 366, 0, 331, 197, 225,
+ 0, 0, 413, 462, 474, 0, 0, 0, 970, 0,
+ 472, 427, 605, 233, 285, 459, 433, 470, 441, 288,
+ 0, 0, 471, 373, 586, 451, 602, 631, 632, 264,
+ 407, 616, 523, 624, 649, 226, 261, 421, 507, 608,
+ 495, 398, 582, 583, 330, 494, 296, 201, 370, 637,
+ 224, 480, 372, 242, 231, 588, 613, 300, 252, 290,
+ 457, 644, 213, 518, 599, 239, 484, 0, 0, 652,
+ 247, 505, 611, 600, 215, 595, 504, 394, 327, 328,
+ 214, 0, 458, 269, 294, 0, 0, 259, 416, 971,
+ 972, 257, 653, 816, 623, 220, 0, 622, 409, 585,
+ 596, 395, 384, 219, 594, 393, 383, 335, 824, 825,
+ 281, 308, 901, 900, 899, 307, 309, 897, 898, 896,
+ 207, 609, 627, 0, 208, 0, 500, 612, 654, 453,
+ 212, 234, 235, 237, 0, 280, 284, 292, 295, 304,
+ 305, 314, 368, 420, 447, 443, 452, 0, 580, 603,
+ 617, 629, 635, 636, 638, 639, 640, 641, 642, 645,
+ 643, 408, 312, 496, 334, 374, 0, 0, 426, 473,
+ 240, 607, 497, 907, 929, 918, 782, 783, 908, 909,
+ 933, 910, 785, 786, 930, 931, 779, 780, 784, 932,
+ 934, 655, 656, 657, 658, 659, 660, 661, 662, 663,
+ 664, 665, 666, 667, 668, 669, 670, 671, 672, 650,
+ 509, 515, 510, 511, 512, 513, 514, 0, 516, 921,
+ 768, 767, 0, 774, 775, 0, 804, 805, 807, 813,
+ 814, 815, 826, 873, 874, 882, 884, 885, 883, 886,
+ 887, 888, 891, 892, 893, 894, 889, 890, 895, 787,
+ 791, 788, 789, 790, 802, 792, 793, 794, 795, 796,
+ 797, 798, 799, 800, 801, 803, 944, 945, 946, 947,
+ 948, 949, 819, 823, 822, 820, 821, 817, 818, 845,
+ 844, 846, 847, 848, 849, 850, 851, 853, 852, 854,
+ 855, 856, 857, 858, 859, 827, 828, 831, 832, 830,
+ 829, 833, 842, 843, 834, 835, 836, 837, 838, 839,
+ 841, 840, 860, 861, 862, 863, 864, 866, 865, 869,
+ 870, 868, 867, 872, 871, 766, 196, 221, 369, 0,
+ 455, 289, 651, 619, 485, 614, 206, 223, 935, 263,
+ 936, 0, 0, 940, 0, 0, 0, 942, 941, 0,
+ 943, 905, 904, 0, 0, 937, 938, 0, 939, 0,
+ 0, 198, 200, 209, 222, 232, 236, 243, 262, 277,
+ 279, 286, 299, 311, 319, 320, 323, 329, 381, 387,
+ 388, 389, 390, 410, 411, 412, 415, 418, 419, 422,
+ 424, 425, 428, 432, 436, 437, 438, 440, 442, 444,
+ 456, 461, 475, 476, 477, 478, 479, 482, 483, 489,
+ 490, 491, 492, 493, 501, 502, 517, 587, 589, 606,
+ 626, 633, 481, 950, 951, 952, 953, 954, 955, 956,
+ 957, 301, 601, 634, 598, 646, 628, 439, 379, 0,
+ 0, 382, 282, 306, 321, 0, 618, 503, 227, 467,
+ 291, 251, 975, 0, 211, 246, 230, 260, 275, 278,
+ 325, 392, 401, 430, 435, 297, 272, 244, 460, 241,
+ 486, 520, 521, 522, 524, 396, 267, 434, 397, 0,
+ 377, 577, 578, 317, 0, 0, 0, 529, 0, 778,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 417,
+ 0, 0, 0, 765, 0, 0, 0, 271, 770, 0,
+ 0, 0, 367, 268, 0, 0, 204, 506, 0, 431,
+ 0, 203, 0, 488, 253, 378, 375, 584, 283, 274,
+ 270, 250, 318, 386, 429, 519, 423, 777, 371, 0,
+ 0, 498, 402, 0, 0, 0, 0, 0, 0, 0,
+ 0, 772, 773, 0, 0, 0, 0, 0, 0, 0,
+ 0, 324, 248, 326, 202, 414, 499, 287, 0, 95,
+ 0, 0, 1024, 508, 960, 749, 926, 964, 1025, 977,
+ 978, 979, 965, 0, 238, 966, 967, 245, 968, 0,
+ 925, 808, 810, 809, 875, 876, 877, 878, 879, 880,
+ 881, 811, 812, 806, 973, 610, 980, 981, 0, 266,
+ 322, 273, 265, 581, 0, 0, 0, 0, 0, 0,
+ 597, 0, 0, 229, 0, 0, 0, 0, 0, 0,
+ 0, 745, 762, 0, 776, 0, 0, 0, 276, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 759, 760, 0, 0, 0,
+ 0, 920, 0, 761, 0, 0, 769, 982, 983, 984,
985, 986, 987, 988, 989, 990, 991, 992, 993, 994,
995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004,
1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014,
- 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 3168, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 297,
- 0, 402, 257, 0, 453, 918, 0, 0, 629, 0,
- 0, 916, 0, 0, 0, 0, 365, 0, 330, 197,
- 225, 0, 0, 412, 461, 473, 0, 0, 0, 969,
- 0, 471, 426, 604, 233, 284, 458, 432, 469, 440,
- 287, 0, 0, 470, 372, 585, 450, 601, 630, 631,
- 263, 406, 615, 522, 623, 648, 226, 260, 420, 506,
- 607, 494, 397, 581, 582, 329, 493, 295, 201, 369,
- 636, 224, 479, 371, 242, 231, 587, 612, 299, 289,
- 456, 643, 213, 517, 598, 239, 483, 0, 0, 651,
- 247, 504, 610, 599, 215, 594, 503, 393, 326, 327,
- 214, 0, 457, 268, 293, 0, 0, 258, 415, 970,
- 971, 256, 652, 815, 622, 220, 0, 621, 408, 584,
- 595, 394, 383, 219, 593, 392, 382, 334, 823, 824,
- 280, 307, 900, 899, 898, 306, 308, 896, 897, 895,
- 207, 608, 626, 0, 208, 0, 499, 611, 653, 452,
- 212, 234, 235, 237, 0, 279, 283, 291, 294, 303,
- 304, 313, 367, 419, 446, 442, 451, 0, 579, 602,
- 616, 628, 634, 635, 637, 638, 639, 640, 641, 644,
- 642, 407, 311, 495, 333, 373, 0, 0, 425, 472,
- 240, 606, 496, 906, 928, 917, 781, 782, 907, 908,
- 932, 909, 784, 785, 929, 930, 778, 779, 783, 931,
- 933, 654, 655, 656, 657, 658, 659, 660, 661, 662,
- 663, 664, 665, 666, 667, 668, 669, 670, 671, 649,
- 508, 514, 509, 510, 511, 512, 513, 0, 515, 920,
- 767, 766, 0, 773, 774, 0, 803, 804, 806, 812,
- 813, 814, 825, 872, 873, 881, 883, 884, 882, 885,
- 886, 887, 890, 891, 892, 893, 888, 889, 894, 786,
- 790, 787, 788, 789, 801, 791, 792, 793, 794, 795,
- 796, 797, 798, 799, 800, 802, 943, 944, 945, 946,
- 947, 948, 818, 822, 821, 819, 820, 816, 817, 844,
- 843, 845, 846, 847, 848, 849, 850, 852, 851, 853,
- 854, 855, 856, 857, 858, 826, 827, 830, 831, 829,
- 828, 832, 841, 842, 833, 834, 835, 836, 837, 838,
- 840, 839, 859, 860, 861, 862, 863, 865, 864, 868,
- 869, 867, 866, 871, 870, 765, 196, 221, 368, 0,
- 454, 288, 650, 618, 484, 613, 206, 223, 934, 262,
- 935, 0, 0, 939, 0, 0, 0, 941, 940, 0,
- 942, 904, 903, 0, 0, 936, 937, 0, 938, 0,
- 0, 198, 200, 209, 222, 232, 236, 243, 261, 276,
- 278, 285, 298, 310, 318, 319, 322, 328, 380, 386,
- 387, 388, 389, 409, 410, 411, 414, 417, 418, 421,
- 423, 424, 427, 431, 435, 436, 437, 439, 441, 443,
- 455, 460, 474, 475, 476, 477, 478, 481, 482, 488,
- 489, 490, 491, 492, 500, 501, 516, 586, 588, 605,
- 625, 632, 480, 949, 950, 951, 952, 953, 954, 955,
- 956, 300, 600, 633, 597, 645, 627, 438, 378, 0,
- 0, 381, 281, 305, 320, 0, 617, 502, 227, 466,
- 290, 251, 974, 0, 211, 246, 230, 259, 274, 277,
- 324, 391, 400, 429, 434, 296, 271, 244, 459, 241,
- 485, 519, 520, 521, 523, 395, 266, 433, 396, 0,
- 376, 576, 577, 316, 0, 0, 0, 528, 0, 777,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 416,
- 0, 0, 0, 764, 0, 0, 0, 270, 769, 0,
- 0, 0, 366, 267, 0, 0, 204, 505, 0, 430,
- 0, 203, 0, 487, 252, 377, 374, 583, 282, 273,
- 269, 250, 317, 385, 428, 518, 422, 776, 370, 0,
- 0, 497, 401, 0, 0, 0, 0, 0, 0, 0,
- 0, 771, 772, 0, 0, 0, 0, 0, 0, 0,
- 0, 323, 248, 325, 202, 413, 498, 286, 0, 95,
- 0, 0, 1023, 507, 959, 1090, 925, 963, 1024, 976,
- 977, 978, 964, 0, 238, 965, 966, 245, 967, 0,
- 924, 807, 809, 808, 874, 875, 876, 877, 878, 879,
- 880, 810, 811, 805, 972, 609, 979, 980, 0, 265,
- 321, 272, 264, 580, 0, 0, 0, 0, 0, 0,
- 596, 0, 0, 229, 0, 0, 0, 0, 0, 0,
- 0, 0, 761, 0, 775, 0, 0, 0, 275, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 758, 759, 0, 0, 0,
- 0, 919, 0, 760, 0, 0, 768, 981, 982, 983,
- 984, 985, 986, 987, 988, 989, 990, 991, 992, 993,
- 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003,
- 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013,
- 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 770,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 297, 0, 402, 257, 0, 453, 918, 0, 0, 629,
- 0, 0, 916, 0, 0, 0, 0, 365, 0, 330,
- 197, 225, 0, 0, 412, 461, 473, 0, 0, 0,
- 969, 0, 471, 426, 604, 233, 284, 458, 432, 469,
- 440, 287, 0, 0, 470, 372, 585, 450, 601, 630,
- 631, 263, 406, 615, 522, 623, 648, 226, 260, 420,
- 506, 607, 494, 397, 581, 582, 329, 493, 295, 201,
- 369, 636, 224, 479, 371, 242, 231, 587, 612, 299,
- 289, 456, 643, 213, 517, 598, 239, 483, 0, 0,
- 651, 247, 504, 610, 599, 215, 594, 503, 393, 326,
- 327, 214, 0, 457, 268, 293, 0, 0, 258, 415,
- 970, 971, 256, 652, 815, 622, 220, 0, 621, 408,
- 584, 595, 394, 383, 219, 593, 392, 382, 334, 823,
- 824, 280, 307, 900, 899, 898, 306, 308, 896, 897,
- 895, 207, 608, 626, 0, 208, 0, 499, 611, 653,
- 452, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 367, 419, 446, 442, 451, 0, 579,
- 602, 616, 628, 634, 635, 637, 638, 639, 640, 641,
- 644, 642, 407, 311, 495, 333, 373, 0, 0, 425,
- 472, 240, 606, 496, 906, 928, 917, 781, 782, 907,
- 908, 932, 909, 784, 785, 929, 930, 778, 779, 783,
- 931, 933, 654, 655, 656, 657, 658, 659, 660, 661,
+ 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 3170,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 298, 0, 403, 258, 0, 454, 919, 0, 0, 630,
+ 0, 0, 917, 0, 0, 0, 0, 366, 0, 331,
+ 197, 225, 0, 0, 413, 462, 474, 0, 0, 0,
+ 970, 0, 472, 427, 605, 233, 285, 459, 433, 470,
+ 441, 288, 0, 0, 471, 373, 586, 451, 602, 631,
+ 632, 264, 407, 616, 523, 624, 649, 226, 261, 421,
+ 507, 608, 495, 398, 582, 583, 330, 494, 296, 201,
+ 370, 637, 224, 480, 372, 242, 231, 588, 613, 300,
+ 252, 290, 457, 644, 213, 518, 599, 239, 484, 0,
+ 0, 652, 247, 505, 611, 600, 215, 595, 504, 394,
+ 327, 328, 214, 0, 458, 269, 294, 0, 0, 259,
+ 416, 971, 972, 257, 653, 816, 623, 220, 0, 622,
+ 409, 585, 596, 395, 384, 219, 594, 393, 383, 335,
+ 824, 825, 281, 308, 901, 900, 899, 307, 309, 897,
+ 898, 896, 207, 609, 627, 0, 208, 0, 500, 612,
+ 654, 453, 212, 234, 235, 237, 0, 280, 284, 292,
+ 295, 304, 305, 314, 368, 420, 447, 443, 452, 0,
+ 580, 603, 617, 629, 635, 636, 638, 639, 640, 641,
+ 642, 645, 643, 408, 312, 496, 334, 374, 0, 0,
+ 426, 473, 240, 607, 497, 907, 929, 918, 782, 783,
+ 908, 909, 933, 910, 785, 786, 930, 931, 779, 780,
+ 784, 932, 934, 655, 656, 657, 658, 659, 660, 661,
662, 663, 664, 665, 666, 667, 668, 669, 670, 671,
- 649, 508, 514, 509, 510, 511, 512, 513, 0, 515,
- 920, 767, 766, 0, 773, 774, 0, 803, 804, 806,
- 812, 813, 814, 825, 872, 873, 881, 883, 884, 882,
- 885, 886, 887, 890, 891, 892, 893, 888, 889, 894,
- 786, 790, 787, 788, 789, 801, 791, 792, 793, 794,
- 795, 796, 797, 798, 799, 800, 802, 943, 944, 945,
- 946, 947, 948, 818, 822, 821, 819, 820, 816, 817,
- 844, 843, 845, 846, 847, 848, 849, 850, 852, 851,
- 853, 854, 855, 856, 857, 858, 826, 827, 830, 831,
- 829, 828, 832, 841, 842, 833, 834, 835, 836, 837,
- 838, 840, 839, 859, 860, 861, 862, 863, 865, 864,
- 868, 869, 867, 866, 871, 870, 765, 196, 221, 368,
- 0, 454, 288, 650, 618, 484, 613, 206, 223, 934,
- 262, 935, 0, 0, 939, 0, 0, 0, 941, 940,
- 0, 942, 904, 903, 0, 0, 936, 937, 0, 938,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 380,
- 386, 387, 388, 389, 409, 410, 411, 414, 417, 418,
- 421, 423, 424, 427, 431, 435, 436, 437, 439, 441,
- 443, 455, 460, 474, 475, 476, 477, 478, 481, 482,
- 488, 489, 490, 491, 492, 500, 501, 516, 586, 588,
- 605, 625, 632, 480, 949, 950, 951, 952, 953, 954,
- 955, 956, 300, 600, 633, 597, 645, 627, 438, 378,
- 0, 0, 381, 281, 305, 320, 0, 617, 502, 227,
- 466, 290, 251, 974, 0, 211, 246, 230, 259, 274,
- 277, 324, 391, 400, 429, 434, 296, 271, 244, 459,
- 241, 485, 519, 520, 521, 523, 395, 266, 433, 396,
- 0, 376, 576, 577, 316, 0, 0, 0, 528, 0,
- 777, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 416, 0, 0, 0, 764, 0, 0, 0, 270, 769,
- 0, 0, 0, 366, 267, 0, 0, 204, 505, 0,
- 430, 0, 203, 0, 487, 252, 377, 374, 583, 282,
- 273, 269, 250, 317, 385, 428, 518, 422, 776, 370,
- 0, 0, 497, 401, 0, 0, 0, 0, 0, 0,
- 0, 0, 771, 772, 0, 0, 0, 0, 0, 0,
- 0, 0, 323, 248, 325, 202, 413, 498, 286, 0,
- 95, 0, 0, 1023, 507, 959, 1090, 925, 963, 1024,
- 976, 977, 978, 964, 0, 238, 965, 966, 245, 967,
- 0, 924, 807, 809, 808, 874, 875, 876, 877, 878,
- 879, 880, 810, 811, 805, 972, 609, 979, 980, 0,
- 265, 321, 272, 264, 580, 0, 0, 0, 0, 0,
- 0, 596, 0, 0, 229, 0, 0, 0, 0, 0,
- 0, 0, 0, 761, 0, 775, 0, 0, 0, 275,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 758, 759, 0, 0,
- 0, 0, 919, 0, 760, 0, 0, 768, 981, 982,
+ 672, 650, 509, 515, 510, 511, 512, 513, 514, 0,
+ 516, 921, 768, 767, 0, 774, 775, 0, 804, 805,
+ 807, 813, 814, 815, 826, 873, 874, 882, 884, 885,
+ 883, 886, 887, 888, 891, 892, 893, 894, 889, 890,
+ 895, 787, 791, 788, 789, 790, 802, 792, 793, 794,
+ 795, 796, 797, 798, 799, 800, 801, 803, 944, 945,
+ 946, 947, 948, 949, 819, 823, 822, 820, 821, 817,
+ 818, 845, 844, 846, 847, 848, 849, 850, 851, 853,
+ 852, 854, 855, 856, 857, 858, 859, 827, 828, 831,
+ 832, 830, 829, 833, 842, 843, 834, 835, 836, 837,
+ 838, 839, 841, 840, 860, 861, 862, 863, 864, 866,
+ 865, 869, 870, 868, 867, 872, 871, 766, 196, 221,
+ 369, 0, 455, 289, 651, 619, 485, 614, 206, 223,
+ 935, 263, 936, 0, 0, 940, 0, 0, 0, 942,
+ 941, 0, 943, 905, 904, 0, 0, 937, 938, 0,
+ 939, 0, 0, 198, 200, 209, 222, 232, 236, 243,
+ 262, 277, 279, 286, 299, 311, 319, 320, 323, 329,
+ 381, 387, 388, 389, 390, 410, 411, 412, 415, 418,
+ 419, 422, 424, 425, 428, 432, 436, 437, 438, 440,
+ 442, 444, 456, 461, 475, 476, 477, 478, 479, 482,
+ 483, 489, 490, 491, 492, 493, 501, 502, 517, 587,
+ 589, 606, 626, 633, 481, 950, 951, 952, 953, 954,
+ 955, 956, 957, 301, 601, 634, 598, 646, 628, 439,
+ 379, 0, 0, 382, 282, 306, 321, 0, 618, 503,
+ 227, 467, 291, 251, 975, 0, 211, 246, 230, 260,
+ 275, 278, 325, 392, 401, 430, 435, 297, 272, 244,
+ 460, 241, 486, 520, 521, 522, 524, 396, 267, 434,
+ 397, 0, 377, 577, 578, 317, 0, 0, 0, 529,
+ 0, 778, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 417, 0, 0, 0, 765, 0, 0, 0, 271,
+ 770, 0, 0, 0, 367, 268, 0, 0, 204, 506,
+ 0, 431, 0, 203, 0, 488, 253, 378, 375, 584,
+ 283, 274, 270, 250, 318, 386, 429, 519, 423, 777,
+ 371, 0, 0, 498, 402, 0, 0, 0, 0, 0,
+ 0, 0, 0, 772, 773, 0, 0, 0, 0, 0,
+ 0, 0, 0, 324, 248, 326, 202, 414, 499, 287,
+ 0, 95, 0, 0, 1024, 508, 960, 1091, 926, 964,
+ 1025, 977, 978, 979, 965, 0, 238, 966, 967, 245,
+ 968, 0, 925, 808, 810, 809, 875, 876, 877, 878,
+ 879, 880, 881, 811, 812, 806, 973, 610, 980, 981,
+ 0, 266, 322, 273, 265, 581, 0, 0, 0, 0,
+ 0, 0, 597, 0, 0, 229, 0, 0, 0, 0,
+ 0, 0, 0, 0, 762, 0, 776, 0, 0, 0,
+ 276, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 759, 760, 0,
+ 0, 0, 0, 920, 0, 761, 0, 0, 769, 982,
983, 984, 985, 986, 987, 988, 989, 990, 991, 992,
993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002,
1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012,
1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022,
- 2124, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 297, 0, 402, 257, 0, 453, 918, 0, 0,
- 629, 0, 0, 916, 0, 0, 0, 0, 365, 0,
- 330, 197, 225, 0, 0, 412, 461, 473, 0, 0,
- 0, 969, 0, 471, 426, 604, 233, 284, 458, 432,
- 469, 440, 287, 0, 0, 470, 372, 585, 450, 601,
- 630, 631, 263, 406, 615, 522, 623, 648, 226, 260,
- 420, 506, 607, 494, 397, 581, 582, 329, 493, 295,
- 201, 369, 636, 224, 479, 371, 242, 231, 587, 612,
- 299, 289, 456, 643, 213, 517, 598, 239, 483, 0,
- 0, 651, 247, 504, 610, 599, 215, 594, 503, 393,
- 326, 327, 214, 0, 457, 268, 293, 0, 0, 258,
- 415, 970, 971, 256, 652, 815, 622, 220, 0, 621,
- 408, 584, 595, 394, 383, 219, 593, 392, 382, 334,
- 823, 824, 280, 307, 900, 899, 898, 306, 308, 896,
- 897, 895, 207, 608, 626, 0, 208, 0, 499, 611,
- 653, 452, 212, 234, 235, 237, 0, 279, 283, 291,
- 294, 303, 304, 313, 367, 419, 446, 442, 451, 0,
- 579, 602, 616, 628, 634, 635, 637, 638, 639, 640,
- 641, 644, 642, 407, 311, 495, 333, 373, 0, 0,
- 425, 472, 240, 606, 496, 906, 928, 917, 781, 782,
- 907, 908, 932, 909, 784, 785, 929, 930, 778, 779,
- 783, 931, 933, 654, 655, 656, 657, 658, 659, 660,
- 661, 662, 663, 664, 665, 666, 667, 668, 669, 670,
- 671, 649, 508, 514, 509, 510, 511, 512, 513, 0,
- 515, 920, 767, 766, 0, 773, 774, 0, 803, 804,
- 806, 812, 813, 814, 825, 872, 873, 881, 883, 884,
- 882, 885, 886, 887, 890, 891, 892, 893, 888, 889,
- 894, 786, 790, 787, 788, 789, 801, 791, 792, 793,
- 794, 795, 796, 797, 798, 799, 800, 802, 943, 944,
- 945, 946, 947, 948, 818, 822, 821, 819, 820, 816,
- 817, 844, 843, 845, 846, 847, 848, 849, 850, 852,
- 851, 853, 854, 855, 856, 857, 858, 826, 827, 830,
- 831, 829, 828, 832, 841, 842, 833, 834, 835, 836,
- 837, 838, 840, 839, 859, 860, 861, 862, 863, 865,
- 864, 868, 869, 867, 866, 871, 870, 765, 196, 221,
- 368, 0, 454, 288, 650, 618, 484, 613, 206, 223,
- 934, 262, 935, 0, 0, 939, 0, 0, 0, 941,
- 940, 0, 942, 904, 903, 0, 0, 936, 937, 0,
- 938, 0, 0, 198, 200, 209, 222, 232, 236, 243,
- 261, 276, 278, 285, 298, 310, 318, 319, 322, 328,
- 380, 386, 387, 388, 389, 409, 410, 411, 414, 417,
- 418, 421, 423, 424, 427, 431, 435, 436, 437, 439,
- 441, 443, 455, 460, 474, 475, 476, 477, 478, 481,
- 482, 488, 489, 490, 491, 492, 500, 501, 516, 586,
- 588, 605, 625, 632, 480, 949, 950, 951, 952, 953,
- 954, 955, 956, 300, 600, 633, 597, 645, 627, 438,
- 378, 0, 0, 381, 281, 305, 320, 0, 617, 502,
- 227, 466, 290, 251, 974, 0, 211, 246, 230, 259,
- 274, 277, 324, 391, 400, 429, 434, 296, 271, 244,
- 459, 241, 485, 519, 520, 521, 523, 395, 266, 433,
- 396, 0, 376, 576, 577, 316, 0, 0, 0, 528,
- 0, 777, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 416, 0, 0, 0, 764, 0, 0, 0, 270,
- 769, 0, 0, 0, 366, 267, 0, 0, 204, 505,
- 0, 430, 0, 203, 0, 487, 252, 377, 374, 583,
- 282, 273, 269, 250, 317, 385, 428, 518, 422, 776,
- 370, 0, 0, 497, 401, 0, 0, 0, 0, 0,
- 0, 0, 0, 771, 772, 0, 0, 0, 0, 0,
- 0, 0, 0, 323, 248, 325, 202, 413, 498, 286,
- 0, 95, 0, 0, 1023, 507, 959, 1090, 925, 963,
- 1024, 976, 977, 978, 964, 0, 238, 965, 966, 245,
- 967, 0, 924, 807, 809, 808, 874, 875, 876, 877,
- 878, 879, 880, 810, 811, 805, 972, 609, 979, 980,
- 0, 265, 321, 272, 264, 580, 0, 0, 0, 0,
- 0, 0, 596, 0, 0, 229, 0, 0, 0, 0,
- 0, 0, 0, 0, 761, 0, 775, 0, 0, 0,
- 275, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 758, 759, 0,
- 0, 0, 0, 919, 0, 760, 0, 0, 768, 981,
- 982, 983, 984, 985, 986, 987, 988, 989, 990, 991,
- 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001,
- 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011,
- 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021,
- 1022, 2122, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 297, 0, 402, 257, 0, 453, 918, 0,
- 0, 629, 0, 0, 916, 0, 0, 0, 0, 365,
- 0, 330, 197, 225, 0, 0, 412, 461, 473, 0,
- 0, 0, 969, 0, 471, 426, 604, 233, 284, 458,
- 432, 469, 440, 287, 0, 0, 470, 372, 585, 450,
- 601, 630, 631, 263, 406, 615, 522, 623, 648, 226,
- 260, 420, 506, 607, 494, 397, 581, 582, 329, 493,
- 295, 201, 369, 636, 224, 479, 371, 242, 231, 587,
- 612, 299, 289, 456, 643, 213, 517, 598, 239, 483,
- 0, 0, 651, 247, 504, 610, 599, 215, 594, 503,
- 393, 326, 327, 214, 0, 457, 268, 293, 0, 0,
- 258, 415, 970, 971, 256, 652, 815, 622, 220, 0,
- 621, 408, 584, 595, 394, 383, 219, 593, 392, 382,
- 334, 823, 824, 280, 307, 900, 899, 898, 306, 308,
- 896, 897, 895, 207, 608, 626, 0, 208, 0, 499,
- 611, 653, 452, 212, 234, 235, 237, 0, 279, 283,
- 291, 294, 303, 304, 313, 367, 419, 446, 442, 451,
- 0, 579, 602, 616, 628, 634, 635, 637, 638, 639,
- 640, 641, 644, 642, 407, 311, 495, 333, 373, 0,
- 0, 425, 472, 240, 606, 496, 906, 928, 917, 781,
- 782, 907, 908, 932, 909, 784, 785, 929, 930, 778,
- 779, 783, 931, 933, 654, 655, 656, 657, 658, 659,
+ 1023, 771, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 298, 0, 403, 258, 0, 454, 919, 0,
+ 0, 630, 0, 0, 917, 0, 0, 0, 0, 366,
+ 0, 331, 197, 225, 0, 0, 413, 462, 474, 0,
+ 0, 0, 970, 0, 472, 427, 605, 233, 285, 459,
+ 433, 470, 441, 288, 0, 0, 471, 373, 586, 451,
+ 602, 631, 632, 264, 407, 616, 523, 624, 649, 226,
+ 261, 421, 507, 608, 495, 398, 582, 583, 330, 494,
+ 296, 201, 370, 637, 224, 480, 372, 242, 231, 588,
+ 613, 300, 252, 290, 457, 644, 213, 518, 599, 239,
+ 484, 0, 0, 652, 247, 505, 611, 600, 215, 595,
+ 504, 394, 327, 328, 214, 0, 458, 269, 294, 0,
+ 0, 259, 416, 971, 972, 257, 653, 816, 623, 220,
+ 0, 622, 409, 585, 596, 395, 384, 219, 594, 393,
+ 383, 335, 824, 825, 281, 308, 901, 900, 899, 307,
+ 309, 897, 898, 896, 207, 609, 627, 0, 208, 0,
+ 500, 612, 654, 453, 212, 234, 235, 237, 0, 280,
+ 284, 292, 295, 304, 305, 314, 368, 420, 447, 443,
+ 452, 0, 580, 603, 617, 629, 635, 636, 638, 639,
+ 640, 641, 642, 645, 643, 408, 312, 496, 334, 374,
+ 0, 0, 426, 473, 240, 607, 497, 907, 929, 918,
+ 782, 783, 908, 909, 933, 910, 785, 786, 930, 931,
+ 779, 780, 784, 932, 934, 655, 656, 657, 658, 659,
+ 660, 661, 662, 663, 664, 665, 666, 667, 668, 669,
+ 670, 671, 672, 650, 509, 515, 510, 511, 512, 513,
+ 514, 0, 516, 921, 768, 767, 0, 774, 775, 0,
+ 804, 805, 807, 813, 814, 815, 826, 873, 874, 882,
+ 884, 885, 883, 886, 887, 888, 891, 892, 893, 894,
+ 889, 890, 895, 787, 791, 788, 789, 790, 802, 792,
+ 793, 794, 795, 796, 797, 798, 799, 800, 801, 803,
+ 944, 945, 946, 947, 948, 949, 819, 823, 822, 820,
+ 821, 817, 818, 845, 844, 846, 847, 848, 849, 850,
+ 851, 853, 852, 854, 855, 856, 857, 858, 859, 827,
+ 828, 831, 832, 830, 829, 833, 842, 843, 834, 835,
+ 836, 837, 838, 839, 841, 840, 860, 861, 862, 863,
+ 864, 866, 865, 869, 870, 868, 867, 872, 871, 766,
+ 196, 221, 369, 0, 455, 289, 651, 619, 485, 614,
+ 206, 223, 935, 263, 936, 0, 0, 940, 0, 0,
+ 0, 942, 941, 0, 943, 905, 904, 0, 0, 937,
+ 938, 0, 939, 0, 0, 198, 200, 209, 222, 232,
+ 236, 243, 262, 277, 279, 286, 299, 311, 319, 320,
+ 323, 329, 381, 387, 388, 389, 390, 410, 411, 412,
+ 415, 418, 419, 422, 424, 425, 428, 432, 436, 437,
+ 438, 440, 442, 444, 456, 461, 475, 476, 477, 478,
+ 479, 482, 483, 489, 490, 491, 492, 493, 501, 502,
+ 517, 587, 589, 606, 626, 633, 481, 950, 951, 952,
+ 953, 954, 955, 956, 957, 301, 601, 634, 598, 646,
+ 628, 439, 379, 0, 0, 382, 282, 306, 321, 0,
+ 618, 503, 227, 467, 291, 251, 975, 0, 211, 246,
+ 230, 260, 275, 278, 325, 392, 401, 430, 435, 297,
+ 272, 244, 460, 241, 486, 520, 521, 522, 524, 396,
+ 267, 434, 397, 0, 377, 577, 578, 317, 0, 0,
+ 0, 529, 0, 778, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 417, 0, 0, 0, 765, 0, 0,
+ 0, 271, 770, 0, 0, 0, 367, 268, 0, 0,
+ 204, 506, 0, 431, 0, 203, 0, 488, 253, 378,
+ 375, 584, 283, 274, 270, 250, 318, 386, 429, 519,
+ 423, 777, 371, 0, 0, 498, 402, 0, 0, 0,
+ 0, 0, 0, 0, 0, 772, 773, 0, 0, 0,
+ 0, 0, 0, 0, 0, 324, 248, 326, 202, 414,
+ 499, 287, 0, 95, 0, 0, 1024, 508, 960, 1091,
+ 926, 964, 1025, 977, 978, 979, 965, 0, 238, 966,
+ 967, 245, 968, 0, 925, 808, 810, 809, 875, 876,
+ 877, 878, 879, 880, 881, 811, 812, 806, 973, 610,
+ 980, 981, 0, 266, 322, 273, 265, 581, 0, 0,
+ 0, 0, 0, 0, 597, 0, 0, 229, 0, 0,
+ 0, 0, 0, 0, 0, 0, 762, 0, 776, 0,
+ 0, 0, 276, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 759,
+ 760, 0, 0, 0, 0, 920, 0, 761, 0, 0,
+ 769, 982, 983, 984, 985, 986, 987, 988, 989, 990,
+ 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000,
+ 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010,
+ 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020,
+ 1021, 1022, 1023, 2124, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 298, 0, 403, 258, 0, 454,
+ 919, 0, 0, 630, 0, 0, 917, 0, 0, 0,
+ 0, 366, 0, 331, 197, 225, 0, 0, 413, 462,
+ 474, 0, 0, 0, 970, 0, 472, 427, 605, 233,
+ 285, 459, 433, 470, 441, 288, 0, 0, 471, 373,
+ 586, 451, 602, 631, 632, 264, 407, 616, 523, 624,
+ 649, 226, 261, 421, 507, 608, 495, 398, 582, 583,
+ 330, 494, 296, 201, 370, 637, 224, 480, 372, 242,
+ 231, 588, 613, 300, 252, 290, 457, 644, 213, 518,
+ 599, 239, 484, 0, 0, 652, 247, 505, 611, 600,
+ 215, 595, 504, 394, 327, 328, 214, 0, 458, 269,
+ 294, 0, 0, 259, 416, 971, 972, 257, 653, 816,
+ 623, 220, 0, 622, 409, 585, 596, 395, 384, 219,
+ 594, 393, 383, 335, 824, 825, 281, 308, 901, 900,
+ 899, 307, 309, 897, 898, 896, 207, 609, 627, 0,
+ 208, 0, 500, 612, 654, 453, 212, 234, 235, 237,
+ 0, 280, 284, 292, 295, 304, 305, 314, 368, 420,
+ 447, 443, 452, 0, 580, 603, 617, 629, 635, 636,
+ 638, 639, 640, 641, 642, 645, 643, 408, 312, 496,
+ 334, 374, 0, 0, 426, 473, 240, 607, 497, 907,
+ 929, 918, 782, 783, 908, 909, 933, 910, 785, 786,
+ 930, 931, 779, 780, 784, 932, 934, 655, 656, 657,
+ 658, 659, 660, 661, 662, 663, 664, 665, 666, 667,
+ 668, 669, 670, 671, 672, 650, 509, 515, 510, 511,
+ 512, 513, 514, 0, 516, 921, 768, 767, 0, 774,
+ 775, 0, 804, 805, 807, 813, 814, 815, 826, 873,
+ 874, 882, 884, 885, 883, 886, 887, 888, 891, 892,
+ 893, 894, 889, 890, 895, 787, 791, 788, 789, 790,
+ 802, 792, 793, 794, 795, 796, 797, 798, 799, 800,
+ 801, 803, 944, 945, 946, 947, 948, 949, 819, 823,
+ 822, 820, 821, 817, 818, 845, 844, 846, 847, 848,
+ 849, 850, 851, 853, 852, 854, 855, 856, 857, 858,
+ 859, 827, 828, 831, 832, 830, 829, 833, 842, 843,
+ 834, 835, 836, 837, 838, 839, 841, 840, 860, 861,
+ 862, 863, 864, 866, 865, 869, 870, 868, 867, 872,
+ 871, 766, 196, 221, 369, 0, 455, 289, 651, 619,
+ 485, 614, 206, 223, 935, 263, 936, 0, 0, 940,
+ 0, 0, 0, 942, 941, 0, 943, 905, 904, 0,
+ 0, 937, 938, 0, 939, 0, 0, 198, 200, 209,
+ 222, 232, 236, 243, 262, 277, 279, 286, 299, 311,
+ 319, 320, 323, 329, 381, 387, 388, 389, 390, 410,
+ 411, 412, 415, 418, 419, 422, 424, 425, 428, 432,
+ 436, 437, 438, 440, 442, 444, 456, 461, 475, 476,
+ 477, 478, 479, 482, 483, 489, 490, 491, 492, 493,
+ 501, 502, 517, 587, 589, 606, 626, 633, 481, 950,
+ 951, 952, 953, 954, 955, 956, 957, 301, 601, 634,
+ 598, 646, 628, 439, 379, 0, 0, 382, 282, 306,
+ 321, 0, 618, 503, 227, 467, 291, 251, 975, 0,
+ 211, 246, 230, 260, 275, 278, 325, 392, 401, 430,
+ 435, 297, 272, 244, 460, 241, 486, 520, 521, 522,
+ 524, 396, 267, 434, 397, 0, 377, 577, 578, 317,
+ 0, 0, 0, 529, 0, 778, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 417, 0, 0, 0, 765,
+ 0, 0, 0, 271, 770, 0, 0, 0, 367, 268,
+ 0, 0, 204, 506, 0, 431, 0, 203, 0, 488,
+ 253, 378, 375, 584, 283, 274, 270, 250, 318, 386,
+ 429, 519, 423, 777, 371, 0, 0, 498, 402, 0,
+ 0, 0, 0, 0, 0, 0, 0, 772, 773, 0,
+ 0, 0, 0, 0, 0, 0, 0, 324, 248, 326,
+ 202, 414, 499, 287, 0, 95, 0, 0, 1024, 508,
+ 960, 1091, 926, 964, 1025, 977, 978, 979, 965, 0,
+ 238, 966, 967, 245, 968, 0, 925, 808, 810, 809,
+ 875, 876, 877, 878, 879, 880, 881, 811, 812, 806,
+ 973, 610, 980, 981, 0, 266, 322, 273, 265, 581,
+ 0, 0, 0, 0, 0, 0, 597, 0, 0, 229,
+ 0, 0, 0, 0, 0, 0, 0, 0, 762, 0,
+ 776, 0, 0, 0, 276, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 759, 760, 0, 0, 0, 0, 920, 0, 761,
+ 0, 0, 769, 982, 983, 984, 985, 986, 987, 988,
+ 989, 990, 991, 992, 993, 994, 995, 996, 997, 998,
+ 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008,
+ 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018,
+ 1019, 1020, 1021, 1022, 1023, 2122, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 298, 0, 403, 258,
+ 0, 454, 919, 0, 0, 630, 0, 0, 917, 0,
+ 0, 0, 0, 366, 0, 331, 197, 225, 0, 0,
+ 413, 462, 474, 0, 0, 0, 970, 0, 472, 427,
+ 605, 233, 285, 459, 433, 470, 441, 288, 0, 0,
+ 471, 373, 586, 451, 602, 631, 632, 264, 407, 616,
+ 523, 624, 649, 226, 261, 421, 507, 608, 495, 398,
+ 582, 583, 330, 494, 296, 201, 370, 637, 224, 480,
+ 372, 242, 231, 588, 613, 300, 252, 290, 457, 644,
+ 213, 518, 599, 239, 484, 0, 0, 652, 247, 505,
+ 611, 600, 215, 595, 504, 394, 327, 328, 214, 0,
+ 458, 269, 294, 0, 0, 259, 416, 971, 972, 257,
+ 653, 816, 623, 220, 0, 622, 409, 585, 596, 395,
+ 384, 219, 594, 393, 383, 335, 824, 825, 281, 308,
+ 901, 900, 899, 307, 309, 897, 898, 896, 207, 609,
+ 627, 0, 208, 0, 500, 612, 654, 453, 212, 234,
+ 235, 237, 0, 280, 284, 292, 295, 304, 305, 314,
+ 368, 420, 447, 443, 452, 0, 580, 603, 617, 629,
+ 635, 636, 638, 639, 640, 641, 642, 645, 643, 408,
+ 312, 496, 334, 374, 0, 0, 426, 473, 240, 607,
+ 497, 907, 929, 918, 782, 783, 908, 909, 933, 910,
+ 785, 786, 930, 931, 779, 780, 784, 932, 934, 655,
+ 656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
+ 666, 667, 668, 669, 670, 671, 672, 650, 509, 515,
+ 510, 511, 512, 513, 514, 0, 516, 921, 768, 767,
+ 0, 774, 775, 0, 804, 805, 807, 813, 814, 815,
+ 826, 873, 874, 882, 884, 885, 883, 886, 887, 888,
+ 891, 892, 893, 894, 889, 890, 895, 787, 791, 788,
+ 789, 790, 802, 792, 793, 794, 795, 796, 797, 798,
+ 799, 800, 801, 803, 944, 945, 946, 947, 948, 949,
+ 819, 823, 822, 820, 821, 817, 818, 845, 844, 846,
+ 847, 848, 849, 850, 851, 853, 852, 854, 855, 856,
+ 857, 858, 859, 827, 828, 831, 832, 830, 829, 833,
+ 842, 843, 834, 835, 836, 837, 838, 839, 841, 840,
+ 860, 861, 862, 863, 864, 866, 865, 869, 870, 868,
+ 867, 872, 871, 766, 196, 221, 369, 0, 455, 289,
+ 651, 619, 485, 614, 206, 223, 935, 263, 936, 0,
+ 0, 940, 0, 0, 0, 942, 941, 0, 943, 905,
+ 904, 0, 0, 937, 938, 0, 939, 0, 0, 198,
+ 200, 209, 222, 232, 236, 243, 262, 277, 279, 286,
+ 299, 311, 319, 320, 323, 329, 381, 387, 388, 389,
+ 390, 410, 411, 412, 415, 418, 419, 422, 424, 425,
+ 428, 432, 436, 437, 438, 440, 442, 444, 456, 461,
+ 475, 476, 477, 478, 479, 482, 483, 489, 490, 491,
+ 492, 493, 501, 502, 517, 587, 589, 606, 626, 633,
+ 481, 950, 951, 952, 953, 954, 955, 956, 957, 301,
+ 601, 634, 598, 646, 628, 439, 379, 0, 0, 382,
+ 282, 306, 321, 0, 618, 503, 227, 467, 291, 251,
+ 975, 0, 211, 246, 230, 260, 275, 278, 325, 392,
+ 401, 430, 435, 297, 272, 244, 460, 241, 486, 520,
+ 521, 522, 524, 396, 267, 434, 397, 0, 377, 577,
+ 578, 317, 0, 0, 0, 529, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 417, 0, 0,
+ 0, 0, 0, 0, 0, 271, 0, 0, 0, 0,
+ 367, 268, 0, 0, 204, 506, 0, 431, 0, 203,
+ 0, 488, 253, 378, 375, 584, 283, 274, 270, 250,
+ 318, 386, 429, 519, 423, 0, 371, 0, 0, 498,
+ 402, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 324,
+ 248, 326, 202, 414, 499, 287, 0, 0, 0, 0,
+ 0, 508, 725, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 238, 0, 0, 245, 0, 0, 0, 352,
+ 361, 360, 340, 341, 343, 345, 351, 358, 364, 337,
+ 346, 0, 0, 610, 0, 0, 0, 266, 322, 273,
+ 265, 581, 0, 0, 0, 0, 0, 0, 597, 0,
+ 0, 229, 0, 1142, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 276, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 298, 0,
+ 403, 258, 0, 454, 0, 0, 1141, 630, 0, 0,
+ 0, 0, 0, 1138, 1139, 366, 1099, 331, 197, 225,
+ 1132, 1136, 413, 462, 474, 0, 0, 0, 254, 0,
+ 472, 427, 605, 233, 285, 459, 433, 470, 441, 288,
+ 0, 0, 471, 373, 586, 451, 602, 631, 632, 264,
+ 407, 616, 523, 624, 649, 226, 261, 421, 507, 608,
+ 495, 398, 582, 583, 330, 494, 296, 201, 370, 637,
+ 224, 480, 372, 242, 231, 588, 613, 300, 252, 290,
+ 457, 644, 213, 518, 599, 239, 484, 0, 0, 652,
+ 247, 505, 611, 600, 215, 595, 504, 394, 327, 328,
+ 214, 0, 458, 269, 294, 0, 0, 259, 416, 590,
+ 591, 257, 653, 228, 623, 220, 0, 622, 409, 585,
+ 596, 395, 384, 219, 594, 393, 383, 335, 356, 357,
+ 281, 308, 448, 376, 449, 307, 309, 405, 404, 406,
+ 207, 609, 627, 0, 208, 0, 500, 612, 654, 453,
+ 212, 234, 235, 237, 0, 280, 284, 292, 295, 304,
+ 305, 314, 368, 420, 447, 443, 452, 0, 580, 603,
+ 617, 629, 635, 636, 638, 639, 640, 641, 642, 645,
+ 643, 408, 312, 496, 334, 374, 0, 0, 426, 473,
+ 240, 607, 497, 199, 0, 0, 0, 0, 255, 256,
+ 0, 576, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 655, 656, 657, 658, 659, 660, 661, 662, 663,
+ 664, 665, 666, 667, 668, 669, 670, 671, 672, 650,
+ 509, 515, 510, 511, 512, 513, 514, 0, 516, 0,
+ 0, 0, 0, 0, 399, 0, 592, 593, 673, 385,
+ 487, 604, 336, 350, 353, 342, 362, 0, 363, 338,
+ 339, 344, 347, 348, 349, 354, 355, 359, 365, 249,
+ 210, 391, 400, 579, 313, 216, 217, 218, 525, 526,
+ 527, 528, 620, 621, 625, 205, 463, 464, 465, 466,
+ 293, 615, 310, 469, 468, 332, 333, 380, 450, 541,
+ 543, 554, 558, 560, 562, 568, 571, 542, 544, 555,
+ 559, 561, 563, 569, 572, 531, 533, 535, 537, 550,
+ 549, 546, 574, 575, 552, 557, 536, 548, 553, 566,
+ 573, 570, 530, 534, 538, 547, 565, 564, 545, 556,
+ 567, 551, 539, 532, 540, 0, 196, 221, 369, 0,
+ 455, 289, 651, 619, 485, 614, 206, 223, 0, 263,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 198, 200, 209, 222, 232, 236, 243, 262, 277,
+ 279, 286, 299, 311, 319, 320, 323, 329, 381, 387,
+ 388, 389, 390, 410, 411, 412, 415, 418, 419, 422,
+ 424, 425, 428, 432, 436, 437, 438, 440, 442, 444,
+ 456, 461, 475, 476, 477, 478, 479, 482, 483, 489,
+ 490, 491, 492, 493, 501, 502, 517, 587, 589, 606,
+ 626, 633, 481, 302, 303, 445, 446, 315, 316, 647,
+ 648, 301, 601, 634, 598, 646, 628, 439, 379, 0,
+ 0, 382, 282, 306, 321, 0, 618, 503, 227, 467,
+ 291, 251, 0, 0, 211, 246, 230, 260, 275, 278,
+ 325, 392, 401, 430, 435, 297, 272, 244, 460, 241,
+ 486, 520, 521, 522, 524, 396, 267, 434, 397, 0,
+ 377, 577, 578, 317, 0, 0, 86, 529, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 417,
+ 0, 0, 0, 0, 0, 0, 0, 271, 0, 0,
+ 0, 0, 367, 268, 0, 0, 204, 506, 0, 431,
+ 0, 203, 0, 488, 253, 378, 375, 584, 283, 274,
+ 270, 250, 318, 386, 429, 519, 423, 0, 371, 0,
+ 0, 498, 402, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 324, 248, 326, 202, 414, 499, 287, 0, 95,
+ 0, 0, 0, 508, 194, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 238, 0, 0, 245, 0, 0,
+ 0, 352, 361, 360, 340, 341, 343, 345, 351, 358,
+ 364, 337, 346, 0, 0, 610, 0, 0, 0, 266,
+ 322, 273, 265, 581, 0, 0, 0, 0, 0, 0,
+ 597, 0, 0, 229, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 276, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 298, 0, 403, 258, 0, 454, 0, 0, 0, 630,
+ 0, 0, 0, 0, 0, 0, 0, 366, 0, 331,
+ 197, 225, 0, 0, 413, 462, 474, 0, 0, 0,
+ 254, 0, 472, 427, 605, 233, 285, 459, 433, 470,
+ 441, 288, 0, 0, 471, 373, 586, 451, 602, 631,
+ 632, 264, 407, 616, 523, 624, 649, 226, 261, 421,
+ 507, 608, 495, 398, 582, 583, 330, 494, 296, 201,
+ 370, 637, 224, 480, 372, 242, 231, 588, 613, 300,
+ 252, 290, 457, 644, 213, 518, 599, 239, 484, 0,
+ 0, 652, 247, 505, 611, 600, 215, 595, 504, 394,
+ 327, 328, 214, 0, 458, 269, 294, 0, 0, 259,
+ 416, 590, 591, 257, 653, 228, 623, 220, 0, 622,
+ 409, 585, 596, 395, 384, 219, 594, 393, 383, 335,
+ 356, 357, 281, 308, 448, 376, 449, 307, 309, 405,
+ 404, 406, 207, 609, 627, 0, 208, 0, 500, 612,
+ 654, 453, 212, 234, 235, 237, 0, 280, 284, 292,
+ 295, 304, 305, 314, 368, 420, 447, 443, 452, 0,
+ 580, 603, 617, 629, 635, 636, 638, 639, 640, 641,
+ 642, 645, 643, 408, 312, 496, 334, 374, 0, 0,
+ 426, 473, 240, 607, 497, 199, 0, 0, 0, 0,
+ 255, 256, 0, 576, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 655, 656, 657, 658, 659, 660, 661,
+ 662, 663, 664, 665, 666, 667, 668, 669, 670, 671,
+ 672, 650, 509, 515, 510, 511, 512, 513, 514, 0,
+ 516, 0, 0, 0, 0, 0, 399, 0, 592, 593,
+ 673, 385, 487, 604, 336, 350, 353, 342, 362, 0,
+ 363, 338, 339, 344, 347, 348, 349, 354, 355, 359,
+ 365, 249, 210, 391, 400, 579, 313, 216, 217, 218,
+ 525, 526, 527, 528, 620, 621, 625, 205, 463, 464,
+ 465, 466, 293, 615, 310, 469, 468, 332, 333, 380,
+ 450, 541, 543, 554, 558, 560, 562, 568, 571, 542,
+ 544, 555, 559, 561, 563, 569, 572, 531, 533, 535,
+ 537, 550, 549, 546, 574, 575, 552, 557, 536, 548,
+ 553, 566, 573, 570, 530, 534, 538, 547, 565, 564,
+ 545, 556, 567, 551, 539, 532, 540, 0, 196, 221,
+ 369, 94, 455, 289, 651, 619, 485, 614, 206, 223,
+ 0, 263, 0, 0, 0, 0, 0, 0, 2427, 0,
+ 0, 2426, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 198, 200, 209, 222, 232, 236, 243,
+ 262, 277, 279, 286, 299, 311, 319, 320, 323, 329,
+ 381, 387, 388, 389, 390, 410, 411, 412, 415, 418,
+ 419, 422, 424, 425, 428, 432, 436, 437, 438, 440,
+ 442, 444, 456, 461, 475, 476, 477, 478, 479, 482,
+ 483, 489, 490, 491, 492, 493, 501, 502, 517, 587,
+ 589, 606, 626, 633, 481, 302, 303, 445, 446, 315,
+ 316, 647, 648, 301, 601, 634, 598, 646, 628, 439,
+ 379, 0, 0, 382, 282, 306, 321, 0, 618, 503,
+ 227, 467, 291, 251, 0, 0, 211, 246, 230, 260,
+ 275, 278, 325, 392, 401, 430, 435, 297, 272, 244,
+ 460, 241, 486, 520, 521, 522, 524, 396, 267, 434,
+ 1777, 0, 377, 577, 578, 317, 0, 0, 0, 529,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 417, 0, 0, 1779, 0, 0, 0, 0, 271,
+ 0, 0, 0, 0, 367, 268, 0, 0, 204, 506,
+ 0, 431, 0, 203, 0, 488, 253, 378, 375, 584,
+ 283, 274, 270, 250, 318, 386, 429, 519, 423, 0,
+ 371, 0, 0, 498, 402, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 324, 248, 326, 202, 414, 499, 287,
+ 0, 0, 0, 0, 1781, 508, 725, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 238, 0, 0, 245,
+ 0, 0, 0, 352, 361, 360, 340, 341, 343, 345,
+ 351, 358, 364, 337, 346, 0, 0, 610, 0, 0,
+ 0, 266, 322, 273, 265, 581, 0, 0, 0, 0,
+ 0, 0, 597, 0, 0, 229, 0, 0, 0, 1480,
+ 0, 1481, 1482, 0, 0, 0, 0, 0, 0, 0,
+ 276, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 298, 0, 403, 258, 0, 454, 0, 0,
+ 0, 630, 0, 0, 0, 0, 0, 0, 0, 366,
+ 0, 331, 197, 225, 0, 0, 413, 462, 474, 0,
+ 0, 0, 254, 0, 472, 427, 605, 233, 285, 459,
+ 433, 470, 441, 288, 0, 0, 471, 373, 586, 451,
+ 602, 631, 632, 264, 407, 616, 523, 624, 649, 226,
+ 261, 421, 507, 608, 495, 398, 582, 583, 330, 494,
+ 296, 201, 370, 637, 224, 480, 372, 242, 231, 588,
+ 613, 300, 252, 290, 457, 644, 213, 518, 599, 239,
+ 484, 0, 0, 652, 247, 505, 611, 600, 215, 595,
+ 504, 394, 327, 328, 214, 0, 458, 269, 294, 0,
+ 0, 259, 416, 590, 591, 257, 653, 228, 623, 220,
+ 0, 622, 409, 585, 596, 395, 384, 219, 594, 393,
+ 383, 335, 356, 357, 281, 308, 448, 376, 449, 307,
+ 309, 405, 404, 406, 207, 609, 627, 0, 208, 0,
+ 500, 612, 654, 453, 212, 234, 235, 237, 0, 280,
+ 284, 292, 295, 304, 305, 314, 368, 420, 447, 443,
+ 452, 0, 580, 603, 617, 629, 635, 636, 638, 639,
+ 640, 641, 642, 645, 643, 408, 312, 496, 334, 374,
+ 0, 0, 426, 473, 240, 607, 497, 199, 0, 0,
+ 0, 0, 255, 256, 0, 576, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 655, 656, 657, 658, 659,
660, 661, 662, 663, 664, 665, 666, 667, 668, 669,
- 670, 671, 649, 508, 514, 509, 510, 511, 512, 513,
- 0, 515, 920, 767, 766, 0, 773, 774, 0, 803,
- 804, 806, 812, 813, 814, 825, 872, 873, 881, 883,
- 884, 882, 885, 886, 887, 890, 891, 892, 893, 888,
- 889, 894, 786, 790, 787, 788, 789, 801, 791, 792,
- 793, 794, 795, 796, 797, 798, 799, 800, 802, 943,
- 944, 945, 946, 947, 948, 818, 822, 821, 819, 820,
- 816, 817, 844, 843, 845, 846, 847, 848, 849, 850,
- 852, 851, 853, 854, 855, 856, 857, 858, 826, 827,
- 830, 831, 829, 828, 832, 841, 842, 833, 834, 835,
- 836, 837, 838, 840, 839, 859, 860, 861, 862, 863,
- 865, 864, 868, 869, 867, 866, 871, 870, 765, 196,
- 221, 368, 0, 454, 288, 650, 618, 484, 613, 206,
- 223, 934, 262, 935, 0, 0, 939, 0, 0, 0,
- 941, 940, 0, 942, 904, 903, 0, 0, 936, 937,
- 0, 938, 0, 0, 198, 200, 209, 222, 232, 236,
- 243, 261, 276, 278, 285, 298, 310, 318, 319, 322,
- 328, 380, 386, 387, 388, 389, 409, 410, 411, 414,
- 417, 418, 421, 423, 424, 427, 431, 435, 436, 437,
- 439, 441, 443, 455, 460, 474, 475, 476, 477, 478,
- 481, 482, 488, 489, 490, 491, 492, 500, 501, 516,
- 586, 588, 605, 625, 632, 480, 949, 950, 951, 952,
- 953, 954, 955, 956, 300, 600, 633, 597, 645, 627,
- 438, 378, 0, 0, 381, 281, 305, 320, 0, 617,
- 502, 227, 466, 290, 251, 974, 0, 211, 246, 230,
- 259, 274, 277, 324, 391, 400, 429, 434, 296, 271,
- 244, 459, 241, 485, 519, 520, 521, 523, 395, 266,
- 433, 396, 0, 376, 576, 577, 316, 0, 0, 0,
- 528, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 416, 0, 0, 0, 0, 0, 0, 0,
- 270, 0, 0, 0, 0, 366, 267, 0, 0, 204,
- 505, 0, 430, 0, 203, 0, 487, 252, 377, 374,
- 583, 282, 273, 269, 250, 317, 385, 428, 518, 422,
- 0, 370, 0, 0, 497, 401, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 323, 248, 325, 202, 413, 498,
- 286, 0, 0, 0, 0, 0, 507, 724, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 238, 0, 0,
- 245, 0, 0, 0, 351, 360, 359, 339, 340, 342,
- 344, 350, 357, 363, 336, 345, 0, 0, 609, 0,
- 0, 0, 265, 321, 272, 264, 580, 0, 0, 0,
- 0, 0, 0, 596, 0, 0, 229, 0, 1141, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 402, 257, 0, 453, 0,
- 0, 1140, 629, 0, 0, 0, 0, 0, 1137, 1138,
- 365, 1098, 330, 197, 225, 1131, 1135, 412, 461, 473,
- 0, 0, 0, 253, 0, 471, 426, 604, 233, 284,
- 458, 432, 469, 440, 287, 0, 0, 470, 372, 585,
- 450, 601, 630, 631, 263, 406, 615, 522, 623, 648,
- 226, 260, 420, 506, 607, 494, 397, 581, 582, 329,
- 493, 295, 201, 369, 636, 224, 479, 371, 242, 231,
- 587, 612, 299, 289, 456, 643, 213, 517, 598, 239,
- 483, 0, 0, 651, 247, 504, 610, 599, 215, 594,
- 503, 393, 326, 327, 214, 0, 457, 268, 293, 0,
- 0, 258, 415, 589, 590, 256, 652, 228, 622, 220,
- 0, 621, 408, 584, 595, 394, 383, 219, 593, 392,
- 382, 334, 355, 356, 280, 307, 447, 375, 448, 306,
- 308, 404, 403, 405, 207, 608, 626, 0, 208, 0,
- 499, 611, 653, 452, 212, 234, 235, 237, 0, 279,
- 283, 291, 294, 303, 304, 313, 367, 419, 446, 442,
- 451, 0, 579, 602, 616, 628, 634, 635, 637, 638,
- 639, 640, 641, 644, 642, 407, 311, 495, 333, 373,
- 0, 0, 425, 472, 240, 606, 496, 199, 0, 0,
- 0, 0, 254, 255, 0, 575, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 654, 655, 656, 657, 658,
- 659, 660, 661, 662, 663, 664, 665, 666, 667, 668,
- 669, 670, 671, 649, 508, 514, 509, 510, 511, 512,
- 513, 0, 515, 0, 0, 0, 0, 0, 398, 0,
- 591, 592, 672, 384, 486, 603, 335, 349, 352, 341,
- 361, 0, 362, 337, 338, 343, 346, 347, 348, 353,
- 354, 358, 364, 249, 210, 390, 399, 578, 312, 216,
- 217, 218, 524, 525, 526, 527, 619, 620, 624, 205,
- 462, 463, 464, 465, 292, 614, 309, 468, 467, 331,
- 332, 379, 449, 540, 542, 553, 557, 559, 561, 567,
- 570, 541, 543, 554, 558, 560, 562, 568, 571, 530,
- 532, 534, 536, 549, 548, 545, 573, 574, 551, 556,
- 535, 547, 552, 565, 572, 569, 529, 533, 537, 546,
- 564, 563, 544, 555, 566, 550, 538, 531, 539, 0,
- 196, 221, 368, 0, 454, 288, 650, 618, 484, 613,
- 206, 223, 0, 262, 0, 0, 0, 0, 0, 0,
+ 670, 671, 672, 650, 509, 515, 510, 511, 512, 513,
+ 514, 0, 516, 0, 0, 0, 0, 0, 399, 0,
+ 592, 593, 673, 385, 487, 604, 336, 350, 353, 342,
+ 362, 0, 363, 338, 339, 344, 347, 348, 349, 354,
+ 355, 359, 365, 249, 210, 391, 400, 579, 313, 216,
+ 217, 218, 525, 526, 527, 528, 620, 621, 625, 205,
+ 463, 464, 465, 466, 293, 615, 310, 469, 468, 332,
+ 333, 380, 450, 541, 543, 554, 558, 560, 562, 568,
+ 571, 542, 544, 555, 559, 561, 563, 569, 572, 531,
+ 533, 535, 537, 550, 549, 546, 574, 575, 552, 557,
+ 536, 548, 553, 566, 573, 570, 530, 534, 538, 547,
+ 565, 564, 545, 556, 567, 551, 539, 532, 540, 0,
+ 196, 221, 369, 0, 455, 289, 651, 619, 485, 614,
+ 206, 223, 0, 263, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 198, 200, 209, 222, 232,
- 236, 243, 261, 276, 278, 285, 298, 310, 318, 319,
- 322, 328, 380, 386, 387, 388, 389, 409, 410, 411,
- 414, 417, 418, 421, 423, 424, 427, 431, 435, 436,
- 437, 439, 441, 443, 455, 460, 474, 475, 476, 477,
- 478, 481, 482, 488, 489, 490, 491, 492, 500, 501,
- 516, 586, 588, 605, 625, 632, 480, 301, 302, 444,
- 445, 314, 315, 646, 647, 300, 600, 633, 597, 645,
- 627, 438, 378, 0, 0, 381, 281, 305, 320, 0,
- 617, 502, 227, 466, 290, 251, 0, 0, 211, 246,
- 230, 259, 274, 277, 324, 391, 400, 429, 434, 296,
- 271, 244, 459, 241, 485, 519, 520, 521, 523, 395,
- 266, 433, 396, 0, 376, 576, 577, 316, 0, 0,
- 0, 528, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 416, 0, 0, 0, 0, 0, 0,
- 0, 270, 0, 0, 0, 0, 366, 267, 0, 0,
- 204, 505, 0, 430, 0, 203, 0, 487, 252, 377,
- 374, 583, 282, 273, 269, 250, 317, 385, 428, 518,
- 422, 0, 370, 0, 0, 497, 401, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 323, 248, 325, 202, 413,
- 498, 286, 0, 0, 0, 0, 1711, 507, 959, 0,
- 0, 1708, 0, 0, 0, 0, 1706, 0, 238, 1707,
- 1705, 245, 1710, 0, 924, 351, 360, 359, 339, 340,
- 342, 344, 350, 357, 363, 336, 345, 0, 0, 609,
- 0, 0, 0, 265, 321, 272, 264, 580, 0, 0,
- 0, 0, 0, 0, 596, 0, 0, 229, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 275, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 297, 0, 402, 257, 0, 453,
- 0, 0, 0, 629, 0, 0, 0, 0, 0, 0,
- 0, 365, 0, 330, 197, 225, 0, 0, 412, 461,
- 473, 0, 0, 0, 253, 0, 471, 426, 604, 233,
- 284, 458, 432, 469, 440, 287, 0, 0, 470, 372,
- 585, 450, 601, 630, 631, 263, 406, 615, 522, 623,
- 648, 226, 260, 420, 506, 607, 494, 397, 581, 582,
- 329, 493, 295, 201, 369, 636, 224, 479, 371, 242,
- 231, 587, 612, 299, 289, 456, 643, 213, 517, 598,
- 239, 483, 0, 0, 651, 247, 504, 610, 599, 215,
- 594, 503, 393, 326, 327, 214, 0, 457, 268, 293,
- 0, 0, 258, 415, 589, 590, 256, 652, 228, 622,
- 220, 0, 621, 408, 584, 595, 394, 383, 219, 593,
- 392, 382, 334, 355, 356, 280, 307, 447, 375, 448,
- 306, 308, 404, 403, 405, 207, 608, 626, 0, 208,
- 0, 499, 611, 653, 452, 212, 234, 235, 237, 0,
- 279, 283, 291, 294, 303, 304, 313, 367, 419, 446,
- 442, 451, 0, 579, 602, 616, 628, 634, 635, 637,
- 638, 639, 640, 641, 644, 642, 407, 311, 495, 333,
- 373, 0, 0, 425, 472, 240, 606, 496, 199, 0,
- 0, 0, 0, 254, 255, 0, 575, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 654, 655, 656, 657,
+ 236, 243, 262, 277, 279, 286, 299, 311, 319, 320,
+ 323, 329, 381, 387, 388, 389, 390, 410, 411, 412,
+ 415, 418, 419, 422, 424, 425, 428, 432, 436, 437,
+ 438, 440, 442, 444, 456, 461, 475, 476, 477, 478,
+ 479, 482, 483, 489, 490, 491, 492, 493, 501, 502,
+ 517, 587, 589, 606, 626, 633, 481, 302, 303, 445,
+ 446, 315, 316, 647, 648, 301, 601, 634, 598, 646,
+ 628, 439, 379, 0, 0, 382, 282, 306, 321, 0,
+ 618, 503, 227, 467, 291, 251, 0, 0, 211, 246,
+ 230, 260, 275, 278, 325, 392, 401, 430, 435, 297,
+ 272, 244, 460, 241, 486, 520, 521, 522, 524, 396,
+ 267, 434, 397, 0, 377, 577, 578, 317, 0, 0,
+ 86, 529, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 417, 0, 0, 0, 0, 0, 0,
+ 0, 271, 0, 0, 0, 0, 367, 268, 0, 0,
+ 204, 506, 0, 431, 0, 203, 0, 488, 253, 378,
+ 375, 584, 283, 274, 270, 250, 318, 386, 429, 519,
+ 423, 0, 371, 0, 0, 498, 402, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 324, 248, 326, 202, 414,
+ 499, 287, 0, 95, 0, 1754, 0, 508, 725, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 238, 0,
+ 0, 245, 0, 0, 0, 352, 361, 360, 340, 341,
+ 343, 345, 351, 358, 364, 337, 346, 0, 0, 610,
+ 0, 0, 0, 266, 322, 273, 265, 581, 0, 0,
+ 0, 0, 0, 0, 597, 0, 0, 229, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 276, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 298, 0, 403, 258, 0, 454,
+ 0, 0, 0, 630, 0, 0, 0, 0, 0, 0,
+ 0, 366, 0, 331, 197, 225, 0, 0, 413, 462,
+ 474, 0, 0, 0, 254, 0, 472, 427, 605, 233,
+ 285, 459, 433, 470, 441, 288, 0, 0, 471, 373,
+ 586, 451, 602, 631, 632, 264, 407, 616, 523, 624,
+ 649, 226, 261, 421, 507, 608, 495, 398, 582, 583,
+ 330, 494, 296, 201, 370, 637, 224, 480, 372, 242,
+ 231, 588, 613, 300, 252, 290, 457, 644, 213, 518,
+ 599, 239, 484, 0, 0, 652, 247, 505, 611, 600,
+ 215, 595, 504, 394, 327, 328, 214, 0, 458, 269,
+ 294, 0, 0, 259, 416, 590, 591, 257, 653, 228,
+ 623, 220, 0, 622, 409, 585, 596, 395, 384, 219,
+ 594, 393, 383, 335, 356, 357, 281, 308, 448, 376,
+ 449, 307, 309, 405, 404, 406, 207, 609, 627, 0,
+ 208, 0, 500, 612, 654, 453, 212, 234, 235, 237,
+ 0, 280, 284, 292, 295, 304, 305, 314, 368, 420,
+ 447, 443, 452, 0, 580, 603, 617, 629, 635, 636,
+ 638, 639, 640, 641, 642, 645, 643, 408, 312, 496,
+ 334, 374, 0, 0, 426, 473, 240, 607, 497, 199,
+ 0, 0, 0, 0, 255, 256, 0, 576, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 655, 656, 657,
658, 659, 660, 661, 662, 663, 664, 665, 666, 667,
- 668, 669, 670, 671, 649, 508, 514, 509, 510, 511,
- 512, 513, 0, 515, 0, 0, 0, 0, 0, 398,
- 0, 591, 592, 672, 384, 486, 603, 335, 349, 352,
- 341, 361, 0, 362, 337, 338, 343, 346, 347, 348,
- 353, 354, 358, 364, 249, 210, 390, 399, 578, 312,
- 216, 217, 218, 524, 525, 526, 527, 619, 620, 624,
- 205, 462, 463, 464, 465, 292, 614, 309, 468, 467,
- 331, 332, 379, 449, 540, 542, 553, 557, 559, 561,
- 567, 570, 541, 543, 554, 558, 560, 562, 568, 571,
- 530, 532, 534, 536, 549, 548, 545, 573, 574, 551,
- 556, 535, 547, 552, 565, 572, 569, 529, 533, 537,
- 546, 564, 563, 544, 555, 566, 550, 538, 531, 539,
- 0, 196, 221, 368, 0, 454, 288, 650, 618, 484,
- 613, 206, 223, 0, 262, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 198, 200, 209, 222,
- 232, 236, 243, 261, 276, 278, 285, 298, 310, 318,
- 319, 322, 328, 380, 386, 387, 388, 389, 409, 410,
- 411, 414, 417, 418, 421, 423, 424, 427, 431, 435,
- 436, 437, 439, 441, 443, 455, 460, 474, 475, 476,
- 477, 478, 481, 482, 488, 489, 490, 491, 492, 500,
- 501, 516, 586, 588, 605, 625, 632, 480, 301, 302,
- 444, 445, 314, 315, 646, 647, 300, 600, 633, 597,
- 645, 627, 438, 378, 0, 0, 381, 281, 305, 320,
- 0, 617, 502, 227, 466, 290, 251, 0, 0, 211,
- 246, 230, 259, 274, 277, 324, 391, 400, 429, 434,
- 296, 271, 244, 459, 241, 485, 519, 520, 521, 523,
- 395, 266, 433, 396, 0, 376, 576, 577, 316, 0,
- 0, 86, 528, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 416, 0, 0, 0, 0, 0,
- 0, 0, 270, 0, 0, 0, 0, 366, 267, 0,
- 0, 204, 505, 0, 430, 0, 203, 0, 487, 252,
- 377, 374, 583, 282, 273, 269, 250, 317, 385, 428,
- 518, 422, 0, 370, 0, 0, 497, 401, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 323, 248, 325, 202,
- 413, 498, 286, 0, 95, 0, 0, 0, 507, 194,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 238,
- 0, 0, 245, 0, 0, 0, 351, 360, 359, 339,
- 340, 342, 344, 350, 357, 363, 336, 345, 0, 0,
- 609, 0, 0, 0, 265, 321, 272, 264, 580, 0,
- 0, 0, 0, 0, 0, 596, 0, 0, 229, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 275, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 297, 0, 402, 257, 0,
- 453, 0, 0, 0, 629, 0, 0, 0, 0, 0,
- 0, 0, 365, 0, 330, 197, 225, 0, 0, 412,
- 461, 473, 0, 0, 0, 253, 0, 471, 426, 604,
- 233, 284, 458, 432, 469, 440, 287, 0, 0, 470,
- 372, 585, 450, 601, 630, 631, 263, 406, 615, 522,
- 623, 648, 226, 260, 420, 506, 607, 494, 397, 581,
- 582, 329, 493, 295, 201, 369, 636, 224, 479, 371,
- 242, 231, 587, 612, 299, 289, 456, 643, 213, 517,
- 598, 239, 483, 0, 0, 651, 247, 504, 610, 599,
- 215, 594, 503, 393, 326, 327, 214, 0, 457, 268,
- 293, 0, 0, 258, 415, 589, 590, 256, 652, 228,
- 622, 220, 0, 621, 408, 584, 595, 394, 383, 219,
- 593, 392, 382, 334, 355, 356, 280, 307, 447, 375,
- 448, 306, 308, 404, 403, 405, 207, 608, 626, 0,
- 208, 0, 499, 611, 653, 452, 212, 234, 235, 237,
- 0, 279, 283, 291, 294, 303, 304, 313, 367, 419,
- 446, 442, 451, 0, 579, 602, 616, 628, 634, 635,
- 637, 638, 639, 640, 641, 644, 642, 407, 311, 495,
- 333, 373, 0, 0, 425, 472, 240, 606, 496, 199,
- 0, 0, 0, 0, 254, 255, 0, 575, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 654, 655, 656,
- 657, 658, 659, 660, 661, 662, 663, 664, 665, 666,
- 667, 668, 669, 670, 671, 649, 508, 514, 509, 510,
- 511, 512, 513, 0, 515, 0, 0, 0, 0, 0,
- 398, 0, 591, 592, 672, 384, 486, 603, 335, 349,
- 352, 341, 361, 0, 362, 337, 338, 343, 346, 347,
- 348, 353, 354, 358, 364, 249, 210, 390, 399, 578,
- 312, 216, 217, 218, 524, 525, 526, 527, 619, 620,
- 624, 205, 462, 463, 464, 465, 292, 614, 309, 468,
- 467, 331, 332, 379, 449, 540, 542, 553, 557, 559,
- 561, 567, 570, 541, 543, 554, 558, 560, 562, 568,
- 571, 530, 532, 534, 536, 549, 548, 545, 573, 574,
- 551, 556, 535, 547, 552, 565, 572, 569, 529, 533,
- 537, 546, 564, 563, 544, 555, 566, 550, 538, 531,
- 539, 0, 196, 221, 368, 94, 454, 288, 650, 618,
- 484, 613, 206, 223, 0, 262, 0, 0, 0, 0,
- 0, 0, 2427, 0, 0, 2426, 0, 0, 0, 0,
+ 668, 669, 670, 671, 672, 650, 509, 515, 510, 511,
+ 512, 513, 514, 0, 516, 0, 0, 0, 0, 0,
+ 399, 0, 592, 593, 673, 385, 487, 604, 336, 350,
+ 353, 342, 362, 0, 363, 338, 339, 344, 347, 348,
+ 349, 354, 355, 359, 365, 249, 210, 391, 400, 579,
+ 313, 216, 217, 218, 525, 526, 527, 528, 620, 621,
+ 625, 205, 463, 464, 465, 466, 293, 615, 310, 469,
+ 468, 332, 333, 380, 450, 541, 543, 554, 558, 560,
+ 562, 568, 571, 542, 544, 555, 559, 561, 563, 569,
+ 572, 531, 533, 535, 537, 550, 549, 546, 574, 575,
+ 552, 557, 536, 548, 553, 566, 573, 570, 530, 534,
+ 538, 547, 565, 564, 545, 556, 567, 551, 539, 532,
+ 540, 0, 196, 221, 369, 94, 455, 289, 651, 619,
+ 485, 614, 206, 223, 0, 263, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 198, 200, 209,
- 222, 232, 236, 243, 261, 276, 278, 285, 298, 310,
- 318, 319, 322, 328, 380, 386, 387, 388, 389, 409,
- 410, 411, 414, 417, 418, 421, 423, 424, 427, 431,
- 435, 436, 437, 439, 441, 443, 455, 460, 474, 475,
- 476, 477, 478, 481, 482, 488, 489, 490, 491, 492,
- 500, 501, 516, 586, 588, 605, 625, 632, 480, 301,
- 302, 444, 445, 314, 315, 646, 647, 300, 600, 633,
- 597, 645, 627, 438, 378, 0, 0, 381, 281, 305,
- 320, 0, 617, 502, 227, 466, 290, 251, 0, 0,
- 211, 246, 230, 259, 274, 277, 324, 391, 400, 429,
- 434, 296, 271, 244, 459, 241, 485, 519, 520, 521,
- 523, 395, 266, 433, 1777, 0, 376, 576, 577, 316,
- 0, 0, 0, 528, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 416, 0, 0, 1779, 0,
- 0, 0, 0, 270, 0, 0, 0, 0, 366, 267,
- 0, 0, 204, 505, 0, 430, 0, 203, 0, 487,
- 252, 377, 374, 583, 282, 273, 269, 250, 317, 385,
- 428, 518, 422, 0, 370, 0, 0, 497, 401, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 323, 248, 325,
- 202, 413, 498, 286, 0, 0, 0, 0, 1781, 507,
- 724, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 351, 360, 359,
- 339, 340, 342, 344, 350, 357, 363, 336, 345, 0,
- 0, 609, 0, 0, 0, 265, 321, 272, 264, 580,
- 0, 0, 0, 0, 0, 0, 596, 0, 0, 229,
- 0, 0, 0, 1479, 0, 1480, 1481, 0, 0, 0,
- 0, 0, 0, 0, 275, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 297, 0, 402, 257,
- 0, 453, 0, 0, 0, 629, 0, 0, 0, 0,
- 0, 0, 0, 365, 0, 330, 197, 225, 0, 0,
- 412, 461, 473, 0, 0, 0, 253, 0, 471, 426,
- 604, 233, 284, 458, 432, 469, 440, 287, 0, 0,
- 470, 372, 585, 450, 601, 630, 631, 263, 406, 615,
- 522, 623, 648, 226, 260, 420, 506, 607, 494, 397,
- 581, 582, 329, 493, 295, 201, 369, 636, 224, 479,
- 371, 242, 231, 587, 612, 299, 289, 456, 643, 213,
- 517, 598, 239, 483, 0, 0, 651, 247, 504, 610,
- 599, 215, 594, 503, 393, 326, 327, 214, 0, 457,
- 268, 293, 0, 0, 258, 415, 589, 590, 256, 652,
- 228, 622, 220, 0, 621, 408, 584, 595, 394, 383,
- 219, 593, 392, 382, 334, 355, 356, 280, 307, 447,
- 375, 448, 306, 308, 404, 403, 405, 207, 608, 626,
- 0, 208, 0, 499, 611, 653, 452, 212, 234, 235,
- 237, 0, 279, 283, 291, 294, 303, 304, 313, 367,
- 419, 446, 442, 451, 0, 579, 602, 616, 628, 634,
- 635, 637, 638, 639, 640, 641, 644, 642, 407, 311,
- 495, 333, 373, 0, 0, 425, 472, 240, 606, 496,
- 199, 0, 0, 0, 0, 254, 255, 0, 575, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 654, 655,
+ 222, 232, 236, 243, 262, 277, 279, 286, 299, 311,
+ 319, 320, 323, 329, 381, 387, 388, 389, 390, 410,
+ 411, 412, 415, 418, 419, 422, 424, 425, 428, 432,
+ 436, 437, 438, 440, 442, 444, 456, 461, 475, 476,
+ 477, 478, 479, 482, 483, 489, 490, 491, 492, 493,
+ 501, 502, 517, 587, 589, 606, 626, 633, 481, 302,
+ 303, 445, 446, 315, 316, 647, 648, 301, 601, 634,
+ 598, 646, 628, 439, 379, 0, 0, 382, 282, 306,
+ 321, 0, 618, 503, 227, 467, 291, 251, 0, 0,
+ 211, 246, 230, 260, 275, 278, 325, 392, 401, 430,
+ 435, 297, 272, 244, 460, 241, 486, 520, 521, 522,
+ 524, 396, 267, 434, 397, 0, 377, 577, 578, 317,
+ 0, 0, 0, 529, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 417, 0, 0, 0, 0,
+ 0, 0, 0, 271, 0, 0, 0, 0, 367, 268,
+ 0, 0, 204, 506, 0, 431, 0, 203, 0, 488,
+ 253, 378, 375, 584, 283, 274, 270, 250, 318, 386,
+ 429, 519, 423, 0, 371, 0, 0, 498, 402, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 324, 248, 326,
+ 202, 414, 499, 287, 0, 95, 0, 0, 0, 508,
+ 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 238, 0, 0, 245, 0, 0, 0, 352, 361, 360,
+ 340, 341, 343, 345, 351, 358, 364, 337, 346, 0,
+ 0, 610, 0, 0, 0, 266, 322, 273, 265, 581,
+ 0, 0, 0, 0, 0, 0, 597, 0, 0, 229,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 276, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 298, 0, 403, 258,
+ 0, 454, 0, 0, 0, 630, 0, 0, 0, 0,
+ 0, 0, 0, 366, 0, 331, 197, 225, 0, 0,
+ 413, 462, 474, 0, 0, 0, 254, 0, 472, 427,
+ 605, 233, 285, 459, 433, 470, 441, 288, 0, 0,
+ 471, 373, 586, 451, 602, 631, 632, 264, 407, 616,
+ 523, 624, 649, 226, 261, 421, 507, 608, 495, 398,
+ 582, 583, 330, 494, 296, 201, 370, 637, 224, 480,
+ 372, 242, 231, 588, 613, 300, 252, 290, 457, 644,
+ 213, 518, 599, 239, 484, 0, 0, 652, 247, 505,
+ 611, 600, 215, 595, 504, 394, 327, 328, 214, 0,
+ 458, 269, 294, 0, 0, 259, 416, 590, 591, 257,
+ 653, 228, 623, 220, 0, 622, 409, 585, 596, 395,
+ 384, 219, 594, 393, 383, 335, 356, 357, 281, 308,
+ 448, 376, 449, 307, 309, 405, 404, 406, 207, 609,
+ 627, 0, 208, 0, 500, 612, 654, 453, 212, 234,
+ 235, 237, 0, 280, 284, 292, 295, 304, 305, 314,
+ 368, 420, 447, 443, 452, 0, 580, 603, 617, 629,
+ 635, 636, 638, 639, 640, 641, 642, 645, 643, 408,
+ 312, 496, 334, 374, 0, 0, 426, 473, 240, 607,
+ 497, 199, 0, 0, 0, 0, 255, 256, 0, 576,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 655,
656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
- 666, 667, 668, 669, 670, 671, 649, 508, 514, 509,
- 510, 511, 512, 513, 0, 515, 0, 0, 0, 0,
- 0, 398, 0, 591, 592, 672, 384, 486, 603, 335,
- 349, 352, 341, 361, 0, 362, 337, 338, 343, 346,
- 347, 348, 353, 354, 358, 364, 249, 210, 390, 399,
- 578, 312, 216, 217, 218, 524, 525, 526, 527, 619,
- 620, 624, 205, 462, 463, 464, 465, 292, 614, 309,
- 468, 467, 331, 332, 379, 449, 540, 542, 553, 557,
- 559, 561, 567, 570, 541, 543, 554, 558, 560, 562,
- 568, 571, 530, 532, 534, 536, 549, 548, 545, 573,
- 574, 551, 556, 535, 547, 552, 565, 572, 569, 529,
- 533, 537, 546, 564, 563, 544, 555, 566, 550, 538,
- 531, 539, 0, 196, 221, 368, 0, 454, 288, 650,
- 618, 484, 613, 206, 223, 0, 262, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 198, 200,
- 209, 222, 232, 236, 243, 261, 276, 278, 285, 298,
- 310, 318, 319, 322, 328, 380, 386, 387, 388, 389,
- 409, 410, 411, 414, 417, 418, 421, 423, 424, 427,
- 431, 435, 436, 437, 439, 441, 443, 455, 460, 474,
- 475, 476, 477, 478, 481, 482, 488, 489, 490, 491,
- 492, 500, 501, 516, 586, 588, 605, 625, 632, 480,
- 301, 302, 444, 445, 314, 315, 646, 647, 300, 600,
- 633, 597, 645, 627, 438, 378, 0, 0, 381, 281,
- 305, 320, 0, 617, 502, 227, 466, 290, 251, 0,
- 0, 211, 246, 230, 259, 274, 277, 324, 391, 400,
- 429, 434, 296, 271, 244, 459, 241, 485, 519, 520,
- 521, 523, 395, 266, 433, 396, 0, 376, 576, 577,
- 316, 0, 0, 86, 528, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 416, 0, 0, 0,
- 0, 0, 0, 0, 270, 0, 0, 0, 0, 366,
- 267, 0, 0, 204, 505, 0, 430, 0, 203, 0,
- 487, 252, 377, 374, 583, 282, 273, 269, 250, 317,
- 385, 428, 518, 422, 0, 370, 0, 0, 497, 401,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 413, 498, 286, 0, 95, 0, 1754, 0,
- 507, 724, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 238, 0, 0, 245, 0, 0, 0, 351, 360,
- 359, 339, 340, 342, 344, 350, 357, 363, 336, 345,
- 0, 0, 609, 0, 0, 0, 265, 321, 272, 264,
- 580, 0, 0, 0, 0, 0, 0, 596, 0, 0,
- 229, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 275, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 297, 0, 402,
- 257, 0, 453, 0, 0, 0, 629, 0, 0, 0,
- 0, 0, 0, 0, 365, 0, 330, 197, 225, 0,
- 0, 412, 461, 473, 0, 0, 0, 253, 0, 471,
- 426, 604, 233, 284, 458, 432, 469, 440, 287, 0,
- 0, 470, 372, 585, 450, 601, 630, 631, 263, 406,
- 615, 522, 623, 648, 226, 260, 420, 506, 607, 494,
- 397, 581, 582, 329, 493, 295, 201, 369, 636, 224,
- 479, 371, 242, 231, 587, 612, 299, 289, 456, 643,
- 213, 517, 598, 239, 483, 0, 0, 651, 247, 504,
- 610, 599, 215, 594, 503, 393, 326, 327, 214, 0,
- 457, 268, 293, 0, 0, 258, 415, 589, 590, 256,
- 652, 228, 622, 220, 0, 621, 408, 584, 595, 394,
- 383, 219, 593, 392, 382, 334, 355, 356, 280, 307,
- 447, 375, 448, 306, 308, 404, 403, 405, 207, 608,
- 626, 0, 208, 0, 499, 611, 653, 452, 212, 234,
- 235, 237, 0, 279, 283, 291, 294, 303, 304, 313,
- 367, 419, 446, 442, 451, 0, 579, 602, 616, 628,
- 634, 635, 637, 638, 639, 640, 641, 644, 642, 407,
- 311, 495, 333, 373, 0, 0, 425, 472, 240, 606,
- 496, 199, 0, 0, 0, 0, 254, 255, 0, 575,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 665, 666, 667, 668, 669, 670, 671, 649, 508, 514,
- 509, 510, 511, 512, 513, 0, 515, 0, 0, 0,
- 0, 0, 398, 0, 591, 592, 672, 384, 486, 603,
- 335, 349, 352, 341, 361, 0, 362, 337, 338, 343,
- 346, 347, 348, 353, 354, 358, 364, 249, 210, 390,
- 399, 578, 312, 216, 217, 218, 524, 525, 526, 527,
- 619, 620, 624, 205, 462, 463, 464, 465, 292, 614,
- 309, 468, 467, 331, 332, 379, 449, 540, 542, 553,
- 557, 559, 561, 567, 570, 541, 543, 554, 558, 560,
- 562, 568, 571, 530, 532, 534, 536, 549, 548, 545,
- 573, 574, 551, 556, 535, 547, 552, 565, 572, 569,
- 529, 533, 537, 546, 564, 563, 544, 555, 566, 550,
- 538, 531, 539, 0, 196, 221, 368, 94, 454, 288,
- 650, 618, 484, 613, 206, 223, 0, 262, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 666, 667, 668, 669, 670, 671, 672, 650, 509, 515,
+ 510, 511, 512, 513, 514, 0, 516, 0, 0, 0,
+ 0, 0, 399, 0, 592, 593, 673, 385, 487, 604,
+ 336, 350, 353, 342, 362, 0, 363, 338, 339, 344,
+ 347, 348, 349, 354, 355, 359, 365, 249, 210, 391,
+ 400, 579, 313, 216, 217, 218, 525, 526, 527, 528,
+ 620, 621, 625, 205, 463, 464, 465, 466, 293, 615,
+ 310, 469, 468, 332, 333, 380, 450, 541, 543, 554,
+ 558, 560, 562, 568, 571, 542, 544, 555, 559, 561,
+ 563, 569, 572, 531, 533, 535, 537, 550, 549, 546,
+ 574, 575, 552, 557, 536, 548, 553, 566, 573, 570,
+ 530, 534, 538, 547, 565, 564, 545, 556, 567, 551,
+ 539, 532, 540, 0, 196, 221, 369, 0, 455, 289,
+ 651, 619, 485, 614, 206, 223, 0, 263, 0, 0,
+ 0, 0, 0, 0, 2427, 0, 0, 2426, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 198,
- 200, 209, 222, 232, 236, 243, 261, 276, 278, 285,
- 298, 310, 318, 319, 322, 328, 380, 386, 387, 388,
- 389, 409, 410, 411, 414, 417, 418, 421, 423, 424,
- 427, 431, 435, 436, 437, 439, 441, 443, 455, 460,
- 474, 475, 476, 477, 478, 481, 482, 488, 489, 490,
- 491, 492, 500, 501, 516, 586, 588, 605, 625, 632,
- 480, 301, 302, 444, 445, 314, 315, 646, 647, 300,
- 600, 633, 597, 645, 627, 438, 378, 0, 0, 381,
- 281, 305, 320, 0, 617, 502, 227, 466, 290, 251,
- 0, 0, 211, 246, 230, 259, 274, 277, 324, 391,
- 400, 429, 434, 296, 271, 244, 459, 241, 485, 519,
- 520, 521, 523, 395, 266, 433, 396, 0, 376, 576,
- 577, 316, 0, 0, 0, 528, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 416, 0, 0,
- 0, 0, 0, 0, 0, 270, 0, 0, 0, 0,
- 366, 267, 0, 0, 204, 505, 0, 430, 0, 203,
- 0, 487, 252, 377, 374, 583, 282, 273, 269, 250,
- 317, 385, 428, 518, 422, 0, 370, 0, 0, 497,
- 401, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 323,
- 248, 325, 202, 413, 498, 286, 0, 95, 0, 0,
- 0, 507, 194, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 238, 0, 0, 245, 0, 0, 0, 351,
- 360, 359, 339, 340, 342, 344, 350, 357, 363, 336,
- 345, 0, 0, 609, 0, 0, 0, 265, 321, 272,
- 264, 580, 0, 0, 0, 0, 0, 0, 596, 0,
+ 200, 209, 222, 232, 236, 243, 262, 277, 279, 286,
+ 299, 311, 319, 320, 323, 329, 381, 387, 388, 389,
+ 390, 410, 411, 412, 415, 418, 419, 422, 424, 425,
+ 428, 432, 436, 437, 438, 440, 442, 444, 456, 461,
+ 475, 476, 477, 478, 479, 482, 483, 489, 490, 491,
+ 492, 493, 501, 502, 517, 587, 589, 606, 626, 633,
+ 481, 302, 303, 445, 446, 315, 316, 647, 648, 301,
+ 601, 634, 598, 646, 628, 439, 379, 0, 0, 382,
+ 282, 306, 321, 0, 618, 503, 227, 467, 291, 251,
+ 0, 0, 211, 246, 230, 260, 275, 278, 325, 392,
+ 401, 430, 435, 297, 272, 244, 460, 241, 486, 520,
+ 521, 522, 524, 396, 267, 434, 397, 0, 377, 577,
+ 578, 317, 0, 0, 0, 529, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 417, 0, 0,
+ 2374, 0, 0, 0, 0, 271, 0, 0, 0, 0,
+ 367, 268, 0, 0, 204, 506, 0, 431, 0, 203,
+ 0, 488, 253, 378, 375, 584, 283, 274, 270, 250,
+ 318, 386, 429, 519, 423, 0, 371, 0, 0, 498,
+ 402, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 324,
+ 248, 326, 202, 414, 499, 287, 0, 0, 0, 0,
+ 1962, 508, 194, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 238, 0, 0, 245, 0, 0, 0, 352,
+ 361, 360, 340, 341, 343, 345, 351, 358, 364, 337,
+ 346, 0, 0, 610, 0, 0, 0, 266, 322, 273,
+ 265, 581, 0, 0, 0, 0, 0, 0, 597, 0,
0, 229, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 275, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 297, 0,
- 402, 257, 0, 453, 0, 0, 0, 629, 0, 0,
- 0, 0, 0, 0, 0, 365, 0, 330, 197, 225,
- 0, 0, 412, 461, 473, 0, 0, 0, 253, 0,
- 471, 426, 604, 233, 284, 458, 432, 469, 440, 287,
- 0, 0, 470, 372, 585, 450, 601, 630, 631, 263,
- 406, 615, 522, 623, 648, 226, 260, 420, 506, 607,
- 494, 397, 581, 582, 329, 493, 295, 201, 369, 636,
- 224, 479, 371, 242, 231, 587, 612, 299, 289, 456,
- 643, 213, 517, 598, 239, 483, 0, 0, 651, 247,
- 504, 610, 599, 215, 594, 503, 393, 326, 327, 214,
- 0, 457, 268, 293, 0, 0, 258, 415, 589, 590,
- 256, 652, 228, 622, 220, 0, 621, 408, 584, 595,
- 394, 383, 219, 593, 392, 382, 334, 355, 356, 280,
- 307, 447, 375, 448, 306, 308, 404, 403, 405, 207,
- 608, 626, 0, 208, 0, 499, 611, 653, 452, 212,
- 234, 235, 237, 0, 279, 283, 291, 294, 303, 304,
- 313, 367, 419, 446, 442, 451, 0, 579, 602, 616,
- 628, 634, 635, 637, 638, 639, 640, 641, 644, 642,
- 407, 311, 495, 333, 373, 0, 0, 425, 472, 240,
- 606, 496, 199, 0, 0, 0, 0, 254, 255, 0,
- 575, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 654, 655, 656, 657, 658, 659, 660, 661, 662, 663,
- 664, 665, 666, 667, 668, 669, 670, 671, 649, 508,
- 514, 509, 510, 511, 512, 513, 0, 515, 0, 0,
- 0, 0, 0, 398, 0, 591, 592, 672, 384, 486,
- 603, 335, 349, 352, 341, 361, 0, 362, 337, 338,
- 343, 346, 347, 348, 353, 354, 358, 364, 249, 210,
- 390, 399, 578, 312, 216, 217, 218, 524, 525, 526,
- 527, 619, 620, 624, 205, 462, 463, 464, 465, 292,
- 614, 309, 468, 467, 331, 332, 379, 449, 540, 542,
- 553, 557, 559, 561, 567, 570, 541, 543, 554, 558,
- 560, 562, 568, 571, 530, 532, 534, 536, 549, 548,
- 545, 573, 574, 551, 556, 535, 547, 552, 565, 572,
- 569, 529, 533, 537, 546, 564, 563, 544, 555, 566,
- 550, 538, 531, 539, 0, 196, 221, 368, 0, 454,
- 288, 650, 618, 484, 613, 206, 223, 0, 262, 0,
- 0, 0, 0, 0, 0, 2427, 0, 0, 2426, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 198, 200, 209, 222, 232, 236, 243, 261, 276, 278,
- 285, 298, 310, 318, 319, 322, 328, 380, 386, 387,
- 388, 389, 409, 410, 411, 414, 417, 418, 421, 423,
- 424, 427, 431, 435, 436, 437, 439, 441, 443, 455,
- 460, 474, 475, 476, 477, 478, 481, 482, 488, 489,
- 490, 491, 492, 500, 501, 516, 586, 588, 605, 625,
- 632, 480, 301, 302, 444, 445, 314, 315, 646, 647,
- 300, 600, 633, 597, 645, 627, 438, 378, 0, 0,
- 381, 281, 305, 320, 0, 617, 502, 227, 466, 290,
- 251, 0, 0, 211, 246, 230, 259, 274, 277, 324,
- 391, 400, 429, 434, 296, 271, 244, 459, 241, 485,
- 519, 520, 521, 523, 395, 266, 433, 396, 0, 376,
- 576, 577, 316, 0, 0, 0, 528, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 416, 0,
- 0, 2374, 0, 0, 0, 0, 270, 0, 0, 0,
- 0, 366, 267, 0, 0, 204, 505, 0, 430, 0,
- 203, 0, 487, 252, 377, 374, 583, 282, 273, 269,
- 250, 317, 385, 428, 518, 422, 0, 370, 0, 0,
- 497, 401, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 323, 248, 325, 202, 413, 498, 286, 0, 0, 0,
- 0, 1962, 507, 194, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 238, 0, 0, 245, 0, 0, 0,
- 351, 360, 359, 339, 340, 342, 344, 350, 357, 363,
- 336, 345, 0, 0, 609, 0, 0, 0, 265, 321,
- 272, 264, 580, 0, 0, 0, 0, 0, 0, 596,
- 0, 0, 229, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 275, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 297,
- 0, 402, 257, 0, 453, 0, 0, 0, 629, 0,
- 0, 0, 0, 0, 0, 0, 365, 0, 330, 197,
- 225, 0, 0, 412, 461, 473, 0, 0, 0, 253,
- 0, 471, 426, 604, 233, 284, 458, 432, 469, 440,
- 287, 0, 2372, 470, 372, 585, 450, 601, 630, 631,
- 263, 406, 615, 522, 623, 648, 226, 260, 420, 506,
- 607, 494, 397, 581, 582, 329, 493, 295, 201, 369,
- 636, 224, 479, 371, 242, 231, 587, 612, 299, 289,
- 456, 643, 213, 517, 598, 239, 483, 0, 0, 651,
- 247, 504, 610, 599, 215, 594, 503, 393, 326, 327,
- 214, 0, 457, 268, 293, 0, 0, 258, 415, 589,
- 590, 256, 652, 228, 622, 220, 0, 621, 408, 584,
- 595, 394, 383, 219, 593, 392, 382, 334, 355, 356,
- 280, 307, 447, 375, 448, 306, 308, 404, 403, 405,
- 207, 608, 626, 0, 208, 0, 499, 611, 653, 452,
- 212, 234, 235, 237, 0, 279, 283, 291, 294, 303,
- 304, 313, 367, 419, 446, 442, 451, 0, 579, 602,
- 616, 628, 634, 635, 637, 638, 639, 640, 641, 644,
- 642, 407, 311, 495, 333, 373, 0, 0, 425, 472,
- 240, 606, 496, 199, 0, 0, 0, 0, 254, 255,
- 0, 575, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 654, 655, 656, 657, 658, 659, 660, 661, 662,
- 663, 664, 665, 666, 667, 668, 669, 670, 671, 649,
- 508, 514, 509, 510, 511, 512, 513, 0, 515, 0,
- 0, 0, 0, 0, 398, 0, 591, 592, 672, 384,
- 486, 603, 335, 349, 352, 341, 361, 0, 362, 337,
- 338, 343, 346, 347, 348, 353, 354, 358, 364, 249,
- 210, 390, 399, 578, 312, 216, 217, 218, 524, 525,
- 526, 527, 619, 620, 624, 205, 462, 463, 464, 465,
- 292, 614, 309, 468, 467, 331, 332, 379, 449, 540,
- 542, 553, 557, 559, 561, 567, 570, 541, 543, 554,
- 558, 560, 562, 568, 571, 530, 532, 534, 536, 549,
- 548, 545, 573, 574, 551, 556, 535, 547, 552, 565,
- 572, 569, 529, 533, 537, 546, 564, 563, 544, 555,
- 566, 550, 538, 531, 539, 0, 196, 221, 368, 0,
- 454, 288, 650, 618, 484, 613, 206, 223, 0, 262,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 198, 200, 209, 222, 232, 236, 243, 261, 276,
- 278, 285, 298, 310, 318, 319, 322, 328, 380, 386,
- 387, 388, 389, 409, 410, 411, 414, 417, 418, 421,
- 423, 424, 427, 431, 435, 436, 437, 439, 441, 443,
- 455, 460, 474, 475, 476, 477, 478, 481, 482, 488,
- 489, 490, 491, 492, 500, 501, 516, 586, 588, 605,
- 625, 632, 480, 301, 302, 444, 445, 314, 315, 646,
- 647, 300, 600, 633, 597, 645, 627, 438, 378, 0,
- 0, 381, 281, 305, 320, 0, 617, 502, 227, 466,
- 290, 251, 0, 0, 211, 246, 230, 259, 274, 277,
- 324, 391, 400, 429, 434, 296, 271, 244, 459, 241,
- 485, 519, 520, 521, 523, 395, 266, 433, 396, 0,
- 376, 576, 577, 316, 0, 0, 0, 528, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 416,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 366, 267, 0, 0, 204, 505, 0, 430,
- 0, 203, 0, 487, 252, 377, 374, 583, 282, 273,
- 269, 250, 317, 385, 428, 518, 422, 0, 370, 0,
- 0, 497, 401, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 323, 248, 325, 202, 413, 498, 286, 0, 0,
- 0, 0, 0, 507, 724, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 276, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 298, 0,
+ 403, 258, 0, 454, 0, 0, 0, 630, 0, 0,
+ 0, 0, 0, 0, 0, 366, 0, 331, 197, 225,
+ 0, 0, 413, 462, 474, 0, 0, 0, 254, 0,
+ 472, 427, 605, 233, 285, 459, 433, 470, 441, 288,
+ 0, 2372, 471, 373, 586, 451, 602, 631, 632, 264,
+ 407, 616, 523, 624, 649, 226, 261, 421, 507, 608,
+ 495, 398, 582, 583, 330, 494, 296, 201, 370, 637,
+ 224, 480, 372, 242, 231, 588, 613, 300, 252, 290,
+ 457, 644, 213, 518, 599, 239, 484, 0, 0, 652,
+ 247, 505, 611, 600, 215, 595, 504, 394, 327, 328,
+ 214, 0, 458, 269, 294, 0, 0, 259, 416, 590,
+ 591, 257, 653, 228, 623, 220, 0, 622, 409, 585,
+ 596, 395, 384, 219, 594, 393, 383, 335, 356, 357,
+ 281, 308, 448, 376, 449, 307, 309, 405, 404, 406,
+ 207, 609, 627, 0, 208, 0, 500, 612, 654, 453,
+ 212, 234, 235, 237, 0, 280, 284, 292, 295, 304,
+ 305, 314, 368, 420, 447, 443, 452, 0, 580, 603,
+ 617, 629, 635, 636, 638, 639, 640, 641, 642, 645,
+ 643, 408, 312, 496, 334, 374, 0, 0, 426, 473,
+ 240, 607, 497, 199, 0, 0, 0, 0, 255, 256,
+ 0, 576, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 655, 656, 657, 658, 659, 660, 661, 662, 663,
+ 664, 665, 666, 667, 668, 669, 670, 671, 672, 650,
+ 509, 515, 510, 511, 512, 513, 514, 0, 516, 0,
+ 0, 0, 0, 0, 399, 0, 592, 593, 673, 385,
+ 487, 604, 336, 350, 353, 342, 362, 0, 363, 338,
+ 339, 344, 347, 348, 349, 354, 355, 359, 365, 249,
+ 210, 391, 400, 579, 313, 216, 217, 218, 525, 526,
+ 527, 528, 620, 621, 625, 205, 463, 464, 465, 466,
+ 293, 615, 310, 469, 468, 332, 333, 380, 450, 541,
+ 543, 554, 558, 560, 562, 568, 571, 542, 544, 555,
+ 559, 561, 563, 569, 572, 531, 533, 535, 537, 550,
+ 549, 546, 574, 575, 552, 557, 536, 548, 553, 566,
+ 573, 570, 530, 534, 538, 547, 565, 564, 545, 556,
+ 567, 551, 539, 532, 540, 0, 196, 221, 369, 0,
+ 455, 289, 651, 619, 485, 614, 206, 223, 0, 263,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 198, 200, 209, 222, 232, 236, 243, 262, 277,
+ 279, 286, 299, 311, 319, 320, 323, 329, 381, 387,
+ 388, 389, 390, 410, 411, 412, 415, 418, 419, 422,
+ 424, 425, 428, 432, 436, 437, 438, 440, 442, 444,
+ 456, 461, 475, 476, 477, 478, 479, 482, 483, 489,
+ 490, 491, 492, 493, 501, 502, 517, 587, 589, 606,
+ 626, 633, 481, 302, 303, 445, 446, 315, 316, 647,
+ 648, 301, 601, 634, 598, 646, 628, 439, 379, 0,
+ 0, 382, 282, 306, 321, 0, 618, 503, 227, 467,
+ 291, 251, 0, 0, 211, 246, 230, 260, 275, 278,
+ 325, 392, 401, 430, 435, 297, 272, 244, 460, 241,
+ 486, 520, 521, 522, 524, 396, 267, 434, 397, 0,
+ 377, 577, 578, 317, 0, 0, 0, 529, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 417,
+ 0, 0, 0, 0, 0, 0, 0, 271, 0, 0,
+ 0, 0, 367, 268, 0, 0, 204, 506, 0, 431,
+ 0, 203, 0, 488, 253, 378, 375, 584, 283, 274,
+ 270, 250, 318, 386, 429, 519, 423, 0, 371, 0,
+ 0, 498, 402, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 324, 248, 326, 202, 414, 499, 287, 0, 0,
+ 0, 0, 0, 508, 725, 0, 0, 0, 0, 0,
0, 0, 0, 0, 238, 0, 0, 245, 0, 0,
- 0, 351, 360, 359, 339, 340, 342, 344, 350, 357,
- 363, 336, 345, 0, 0, 609, 0, 0, 0, 265,
- 321, 272, 264, 580, 0, 0, 0, 0, 0, 0,
- 596, 0, 0, 229, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 275, 0,
- 0, 0, 0, 0, 0, 0, 0, 1092, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 297, 0, 402, 257, 0, 453, 0, 0, 0, 629,
- 0, 0, 0, 0, 0, 0, 0, 365, 1098, 330,
- 197, 225, 1096, 0, 412, 461, 473, 0, 0, 0,
- 253, 0, 471, 426, 604, 233, 284, 458, 432, 469,
- 440, 287, 0, 0, 470, 372, 585, 450, 601, 630,
- 631, 263, 406, 615, 522, 623, 648, 226, 260, 420,
- 506, 607, 494, 397, 581, 582, 329, 493, 295, 201,
- 369, 636, 224, 479, 371, 242, 231, 587, 612, 299,
- 289, 456, 643, 213, 517, 598, 239, 483, 0, 0,
- 651, 247, 504, 610, 599, 215, 594, 503, 393, 326,
- 327, 214, 0, 457, 268, 293, 0, 0, 258, 415,
- 589, 590, 256, 652, 228, 622, 220, 0, 621, 408,
- 584, 595, 394, 383, 219, 593, 392, 382, 334, 355,
- 356, 280, 307, 447, 375, 448, 306, 308, 404, 403,
- 405, 207, 608, 626, 0, 208, 0, 499, 611, 653,
- 452, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 367, 419, 446, 442, 451, 0, 579,
- 602, 616, 628, 634, 635, 637, 638, 639, 640, 641,
- 644, 642, 407, 311, 495, 333, 373, 0, 0, 425,
- 472, 240, 606, 496, 199, 0, 0, 0, 0, 254,
- 255, 0, 575, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 654, 655, 656, 657, 658, 659, 660, 661,
+ 0, 352, 361, 360, 340, 341, 343, 345, 351, 358,
+ 364, 337, 346, 0, 0, 610, 0, 0, 0, 266,
+ 322, 273, 265, 581, 0, 0, 0, 0, 0, 0,
+ 597, 0, 0, 229, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 276, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1093, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 298, 0, 403, 258, 0, 454, 0, 0, 0, 630,
+ 0, 0, 0, 0, 0, 0, 0, 366, 1099, 331,
+ 197, 225, 1097, 0, 413, 462, 474, 0, 0, 0,
+ 254, 0, 472, 427, 605, 233, 285, 459, 433, 470,
+ 441, 288, 0, 0, 471, 373, 586, 451, 602, 631,
+ 632, 264, 407, 616, 523, 624, 649, 226, 261, 421,
+ 507, 608, 495, 398, 582, 583, 330, 494, 296, 201,
+ 370, 637, 224, 480, 372, 242, 231, 588, 613, 300,
+ 252, 290, 457, 644, 213, 518, 599, 239, 484, 0,
+ 0, 652, 247, 505, 611, 600, 215, 595, 504, 394,
+ 327, 328, 214, 0, 458, 269, 294, 0, 0, 259,
+ 416, 590, 591, 257, 653, 228, 623, 220, 0, 622,
+ 409, 585, 596, 395, 384, 219, 594, 393, 383, 335,
+ 356, 357, 281, 308, 448, 376, 449, 307, 309, 405,
+ 404, 406, 207, 609, 627, 0, 208, 0, 500, 612,
+ 654, 453, 212, 234, 235, 237, 0, 280, 284, 292,
+ 295, 304, 305, 314, 368, 420, 447, 443, 452, 0,
+ 580, 603, 617, 629, 635, 636, 638, 639, 640, 641,
+ 642, 645, 643, 408, 312, 496, 334, 374, 0, 0,
+ 426, 473, 240, 607, 497, 199, 0, 0, 0, 0,
+ 255, 256, 0, 576, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 655, 656, 657, 658, 659, 660, 661,
662, 663, 664, 665, 666, 667, 668, 669, 670, 671,
- 649, 508, 514, 509, 510, 511, 512, 513, 0, 515,
- 0, 0, 0, 0, 0, 398, 0, 591, 592, 672,
- 384, 486, 603, 335, 349, 352, 341, 361, 0, 362,
- 337, 338, 343, 346, 347, 348, 353, 354, 358, 364,
- 249, 210, 390, 399, 578, 312, 216, 217, 218, 524,
- 525, 526, 527, 619, 620, 624, 205, 462, 463, 464,
- 465, 292, 614, 309, 468, 467, 331, 332, 379, 449,
- 540, 542, 553, 557, 559, 561, 567, 570, 541, 543,
- 554, 558, 560, 562, 568, 571, 530, 532, 534, 536,
- 549, 548, 545, 573, 574, 551, 556, 535, 547, 552,
- 565, 572, 569, 529, 533, 537, 546, 564, 563, 544,
- 555, 566, 550, 538, 531, 539, 0, 196, 221, 368,
- 0, 454, 288, 650, 618, 484, 613, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 380,
- 386, 387, 388, 389, 409, 410, 411, 414, 417, 418,
- 421, 423, 424, 427, 431, 435, 436, 437, 439, 441,
- 443, 455, 460, 474, 475, 476, 477, 478, 481, 482,
- 488, 489, 490, 491, 492, 500, 501, 516, 586, 588,
- 605, 625, 632, 480, 301, 302, 444, 445, 314, 315,
- 646, 647, 300, 600, 633, 597, 645, 627, 438, 378,
- 0, 0, 381, 281, 305, 320, 0, 617, 502, 227,
- 466, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 391, 400, 429, 434, 296, 271, 244, 459,
- 241, 485, 519, 520, 521, 523, 395, 266, 433, 396,
- 0, 376, 576, 577, 316, 0, 0, 0, 528, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 416, 0, 0, 2374, 0, 0, 0, 0, 270, 0,
- 0, 0, 0, 366, 267, 0, 0, 204, 505, 0,
- 430, 0, 203, 0, 487, 252, 377, 374, 583, 282,
- 273, 269, 250, 317, 385, 428, 518, 422, 0, 370,
- 0, 0, 497, 401, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 323, 248, 325, 202, 413, 498, 286, 0,
- 0, 0, 0, 1962, 507, 194, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 238, 0, 0, 245, 0,
- 0, 0, 351, 360, 359, 339, 340, 342, 344, 350,
- 357, 363, 336, 345, 0, 0, 609, 0, 0, 0,
- 265, 321, 272, 264, 580, 0, 0, 0, 0, 0,
- 0, 596, 0, 0, 229, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 275,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 297, 0, 402, 257, 0, 453, 0, 0, 0,
- 629, 0, 0, 0, 0, 0, 0, 0, 365, 0,
- 330, 197, 225, 0, 0, 412, 461, 473, 0, 0,
- 0, 253, 0, 471, 426, 604, 233, 284, 458, 432,
- 469, 440, 287, 0, 0, 470, 372, 585, 450, 601,
- 630, 631, 263, 406, 615, 522, 623, 648, 226, 260,
- 420, 506, 607, 494, 397, 581, 582, 329, 493, 295,
- 201, 369, 636, 224, 479, 371, 242, 231, 587, 612,
- 299, 289, 456, 643, 213, 517, 598, 239, 483, 0,
- 0, 651, 247, 504, 610, 599, 215, 594, 503, 393,
- 326, 327, 214, 0, 457, 268, 293, 0, 0, 258,
- 415, 589, 590, 256, 652, 228, 622, 220, 0, 621,
- 408, 584, 595, 394, 383, 219, 593, 392, 382, 334,
- 355, 356, 280, 307, 447, 375, 448, 306, 308, 404,
- 403, 405, 207, 608, 626, 0, 208, 0, 499, 611,
- 653, 452, 212, 234, 235, 237, 0, 279, 283, 291,
- 294, 303, 304, 313, 367, 419, 446, 442, 451, 0,
- 579, 602, 616, 628, 634, 635, 637, 638, 639, 640,
- 641, 644, 642, 407, 311, 495, 333, 373, 0, 0,
- 425, 472, 240, 606, 496, 199, 0, 0, 0, 0,
- 254, 255, 0, 575, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 654, 655, 656, 657, 658, 659, 660,
- 661, 662, 663, 664, 665, 666, 667, 668, 669, 670,
- 671, 649, 508, 514, 509, 510, 511, 512, 513, 0,
- 515, 0, 0, 0, 0, 0, 398, 0, 591, 592,
- 672, 384, 486, 603, 335, 349, 352, 341, 361, 0,
- 362, 337, 338, 343, 346, 347, 348, 353, 354, 358,
- 364, 249, 210, 390, 399, 578, 312, 216, 217, 218,
- 524, 525, 526, 527, 619, 620, 624, 205, 462, 463,
- 464, 465, 292, 614, 309, 468, 467, 331, 332, 379,
- 449, 540, 542, 553, 557, 559, 561, 567, 570, 541,
- 543, 554, 558, 560, 562, 568, 571, 530, 532, 534,
- 536, 549, 548, 545, 573, 574, 551, 556, 535, 547,
- 552, 565, 572, 569, 529, 533, 537, 546, 564, 563,
- 544, 555, 566, 550, 538, 531, 539, 0, 196, 221,
- 368, 0, 454, 288, 650, 618, 484, 613, 206, 223,
- 0, 262, 0, 0, 0, 0, 0, 0, 0, 0,
+ 672, 650, 509, 515, 510, 511, 512, 513, 514, 0,
+ 516, 0, 0, 0, 0, 0, 399, 0, 592, 593,
+ 673, 385, 487, 604, 336, 350, 353, 342, 362, 0,
+ 363, 338, 339, 344, 347, 348, 349, 354, 355, 359,
+ 365, 249, 210, 391, 400, 579, 313, 216, 217, 218,
+ 525, 526, 527, 528, 620, 621, 625, 205, 463, 464,
+ 465, 466, 293, 615, 310, 469, 468, 332, 333, 380,
+ 450, 541, 543, 554, 558, 560, 562, 568, 571, 542,
+ 544, 555, 559, 561, 563, 569, 572, 531, 533, 535,
+ 537, 550, 549, 546, 574, 575, 552, 557, 536, 548,
+ 553, 566, 573, 570, 530, 534, 538, 547, 565, 564,
+ 545, 556, 567, 551, 539, 532, 540, 0, 196, 221,
+ 369, 0, 455, 289, 651, 619, 485, 614, 206, 223,
+ 0, 263, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 198, 200, 209, 222, 232, 236, 243,
- 261, 276, 278, 285, 298, 310, 318, 319, 322, 328,
- 380, 386, 387, 388, 389, 409, 410, 411, 414, 417,
- 418, 421, 423, 424, 427, 431, 435, 436, 437, 439,
- 441, 443, 455, 460, 474, 475, 476, 477, 478, 481,
- 482, 488, 489, 490, 491, 492, 500, 501, 516, 586,
- 588, 605, 625, 632, 480, 301, 302, 444, 445, 314,
- 315, 646, 647, 300, 600, 633, 597, 645, 627, 438,
- 378, 0, 0, 381, 281, 305, 320, 0, 617, 502,
- 227, 466, 290, 251, 0, 0, 211, 246, 230, 259,
- 274, 277, 324, 391, 400, 429, 434, 296, 271, 244,
- 459, 241, 485, 519, 520, 521, 523, 395, 266, 433,
- 396, 0, 376, 576, 577, 316, 0, 0, 0, 528,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 416, 0, 0, 0, 0, 0, 0, 0, 270,
- 0, 0, 0, 0, 366, 267, 0, 0, 204, 505,
- 0, 430, 0, 203, 0, 487, 252, 377, 374, 583,
- 282, 273, 269, 250, 317, 385, 428, 518, 422, 0,
- 370, 0, 0, 497, 401, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 323, 248, 325, 202, 413, 498, 286,
- 0, 0, 0, 1754, 0, 507, 724, 0, 0, 0,
+ 262, 277, 279, 286, 299, 311, 319, 320, 323, 329,
+ 381, 387, 388, 389, 390, 410, 411, 412, 415, 418,
+ 419, 422, 424, 425, 428, 432, 436, 437, 438, 440,
+ 442, 444, 456, 461, 475, 476, 477, 478, 479, 482,
+ 483, 489, 490, 491, 492, 493, 501, 502, 517, 587,
+ 589, 606, 626, 633, 481, 302, 303, 445, 446, 315,
+ 316, 647, 648, 301, 601, 634, 598, 646, 628, 439,
+ 379, 0, 0, 382, 282, 306, 321, 0, 618, 503,
+ 227, 467, 291, 251, 0, 0, 211, 246, 230, 260,
+ 275, 278, 325, 392, 401, 430, 435, 297, 272, 244,
+ 460, 241, 486, 520, 521, 522, 524, 396, 267, 434,
+ 397, 0, 377, 577, 578, 317, 0, 0, 0, 529,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 417, 0, 0, 2374, 0, 0, 0, 0, 271,
+ 0, 0, 0, 0, 367, 268, 0, 0, 204, 506,
+ 0, 431, 0, 203, 0, 488, 253, 378, 375, 584,
+ 283, 274, 270, 250, 318, 386, 429, 519, 423, 0,
+ 371, 0, 0, 498, 402, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 324, 248, 326, 202, 414, 499, 287,
+ 0, 0, 0, 0, 1962, 508, 194, 0, 0, 0,
0, 0, 0, 0, 0, 0, 238, 0, 0, 245,
- 0, 0, 0, 351, 360, 359, 339, 340, 342, 344,
- 350, 357, 363, 336, 345, 0, 0, 609, 0, 0,
- 0, 265, 321, 272, 264, 580, 0, 0, 0, 0,
- 0, 0, 596, 0, 0, 229, 0, 0, 0, 0,
+ 0, 0, 0, 352, 361, 360, 340, 341, 343, 345,
+ 351, 358, 364, 337, 346, 0, 0, 610, 0, 0,
+ 0, 266, 322, 273, 265, 581, 0, 0, 0, 0,
+ 0, 0, 597, 0, 0, 229, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 275, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 276, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -5073,591 +4974,666 @@ var yyAct = [...]int{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 297, 0, 402, 257, 0, 453, 0, 0,
- 0, 629, 0, 0, 0, 3727, 0, 0, 0, 365,
- 0, 330, 197, 225, 0, 0, 412, 461, 473, 0,
- 0, 0, 253, 0, 471, 426, 604, 233, 284, 458,
- 432, 469, 440, 287, 0, 0, 470, 372, 585, 450,
- 601, 630, 631, 263, 406, 615, 522, 623, 648, 226,
- 260, 420, 506, 607, 494, 397, 581, 582, 329, 493,
- 295, 201, 369, 636, 224, 479, 371, 242, 231, 587,
- 612, 299, 289, 456, 643, 213, 517, 598, 239, 483,
- 0, 0, 651, 247, 504, 610, 599, 215, 594, 503,
- 393, 326, 327, 214, 0, 457, 268, 293, 0, 0,
- 258, 415, 589, 590, 256, 652, 228, 622, 220, 0,
- 621, 408, 584, 595, 394, 383, 219, 593, 392, 382,
- 334, 355, 356, 280, 307, 447, 375, 448, 306, 308,
- 404, 403, 405, 207, 608, 626, 0, 208, 0, 499,
- 611, 653, 452, 212, 234, 235, 237, 0, 279, 283,
- 291, 294, 303, 304, 313, 367, 419, 446, 442, 451,
- 0, 579, 602, 616, 628, 634, 635, 637, 638, 639,
- 640, 641, 644, 642, 407, 311, 495, 333, 373, 0,
- 0, 425, 472, 240, 606, 496, 199, 0, 0, 0,
- 0, 254, 255, 0, 575, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 654, 655, 656, 657, 658, 659,
+ 0, 0, 298, 0, 403, 258, 0, 454, 0, 0,
+ 0, 630, 0, 0, 0, 0, 0, 0, 0, 366,
+ 0, 331, 197, 225, 0, 0, 413, 462, 474, 0,
+ 0, 0, 254, 0, 472, 427, 605, 233, 285, 459,
+ 433, 470, 441, 288, 0, 0, 471, 373, 586, 451,
+ 602, 631, 632, 264, 407, 616, 523, 624, 649, 226,
+ 261, 421, 507, 608, 495, 398, 582, 583, 330, 494,
+ 296, 201, 370, 637, 224, 480, 372, 242, 231, 588,
+ 613, 300, 252, 290, 457, 644, 213, 518, 599, 239,
+ 484, 0, 0, 652, 247, 505, 611, 600, 215, 595,
+ 504, 394, 327, 328, 214, 0, 458, 269, 294, 0,
+ 0, 259, 416, 590, 591, 257, 653, 228, 623, 220,
+ 0, 622, 409, 585, 596, 395, 384, 219, 594, 393,
+ 383, 335, 356, 357, 281, 308, 448, 376, 449, 307,
+ 309, 405, 404, 406, 207, 609, 627, 0, 208, 0,
+ 500, 612, 654, 453, 212, 234, 235, 237, 0, 280,
+ 284, 292, 295, 304, 305, 314, 368, 420, 447, 443,
+ 452, 0, 580, 603, 617, 629, 635, 636, 638, 639,
+ 640, 641, 642, 645, 643, 408, 312, 496, 334, 374,
+ 0, 0, 426, 473, 240, 607, 497, 199, 0, 0,
+ 0, 0, 255, 256, 0, 576, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 655, 656, 657, 658, 659,
660, 661, 662, 663, 664, 665, 666, 667, 668, 669,
- 670, 671, 649, 508, 514, 509, 510, 511, 512, 513,
- 0, 515, 0, 0, 0, 0, 0, 398, 0, 591,
- 592, 672, 384, 486, 603, 335, 349, 352, 341, 361,
- 0, 362, 337, 338, 343, 346, 347, 348, 353, 354,
- 358, 364, 249, 210, 390, 399, 578, 312, 216, 217,
- 218, 524, 525, 526, 527, 619, 620, 624, 205, 462,
- 463, 464, 465, 292, 614, 309, 468, 467, 331, 332,
- 379, 449, 540, 542, 553, 557, 559, 561, 567, 570,
- 541, 543, 554, 558, 560, 562, 568, 571, 530, 532,
- 534, 536, 549, 548, 545, 573, 574, 551, 556, 535,
- 547, 552, 565, 572, 569, 529, 533, 537, 546, 564,
- 563, 544, 555, 566, 550, 538, 531, 539, 0, 196,
- 221, 368, 0, 454, 288, 650, 618, 484, 613, 206,
- 223, 0, 262, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 198, 200, 209, 222, 232, 236,
- 243, 261, 276, 278, 285, 298, 310, 318, 319, 322,
- 328, 380, 386, 387, 388, 389, 409, 410, 411, 414,
- 417, 418, 421, 423, 424, 427, 431, 435, 436, 437,
- 439, 441, 443, 455, 460, 474, 475, 476, 477, 478,
- 481, 482, 488, 489, 490, 491, 492, 500, 501, 516,
- 586, 588, 605, 625, 632, 480, 301, 302, 444, 445,
- 314, 315, 646, 647, 300, 600, 633, 597, 645, 627,
- 438, 378, 0, 0, 381, 281, 305, 320, 0, 617,
- 502, 227, 466, 290, 251, 0, 0, 211, 246, 230,
- 259, 274, 277, 324, 391, 400, 429, 434, 296, 271,
- 244, 459, 241, 485, 519, 520, 521, 523, 395, 266,
- 433, 396, 0, 376, 576, 577, 316, 0, 0, 0,
- 528, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 416, 0, 0, 0, 0, 0, 0, 0,
- 270, 0, 0, 0, 0, 366, 267, 0, 0, 204,
- 505, 0, 430, 0, 203, 0, 487, 252, 377, 374,
- 583, 282, 273, 269, 250, 317, 385, 428, 518, 422,
- 0, 370, 0, 0, 497, 401, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 323, 248, 325, 202, 413, 498,
- 286, 0, 0, 0, 0, 2133, 507, 724, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 238, 0, 0,
- 245, 0, 0, 0, 351, 360, 359, 339, 340, 342,
- 344, 350, 357, 363, 336, 345, 0, 0, 609, 0,
- 0, 0, 265, 321, 272, 264, 580, 0, 0, 0,
- 0, 0, 0, 596, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 2134,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 402, 257, 0, 453, 0,
- 0, 0, 629, 0, 0, 0, 0, 0, 0, 0,
- 365, 0, 330, 197, 225, 0, 0, 412, 461, 473,
- 0, 0, 0, 253, 0, 471, 426, 604, 233, 284,
- 458, 432, 469, 440, 287, 0, 0, 470, 372, 585,
- 450, 601, 630, 631, 263, 406, 615, 522, 623, 648,
- 226, 260, 420, 506, 607, 494, 397, 581, 582, 329,
- 493, 295, 201, 369, 636, 224, 479, 371, 242, 231,
- 587, 612, 299, 289, 456, 643, 213, 517, 598, 239,
- 483, 0, 0, 651, 247, 504, 610, 599, 215, 594,
- 503, 393, 326, 327, 214, 0, 457, 268, 293, 0,
- 0, 258, 415, 589, 590, 256, 652, 228, 622, 220,
- 0, 621, 408, 584, 595, 394, 383, 219, 593, 392,
- 382, 334, 355, 356, 280, 307, 447, 375, 448, 306,
- 308, 404, 403, 405, 207, 608, 626, 0, 208, 0,
- 499, 611, 653, 452, 212, 234, 235, 237, 0, 279,
- 283, 291, 294, 303, 304, 313, 367, 419, 446, 442,
- 451, 0, 579, 602, 616, 628, 634, 635, 637, 638,
- 639, 640, 641, 644, 642, 407, 311, 495, 333, 373,
- 0, 0, 425, 472, 240, 606, 496, 199, 0, 0,
- 0, 0, 254, 255, 0, 575, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 654, 655, 656, 657, 658,
- 659, 660, 661, 662, 663, 664, 665, 666, 667, 668,
- 669, 670, 671, 649, 508, 514, 509, 510, 511, 512,
- 513, 0, 515, 0, 0, 0, 0, 0, 398, 0,
- 591, 592, 672, 384, 486, 603, 335, 349, 352, 341,
- 361, 0, 362, 337, 338, 343, 346, 347, 348, 353,
- 354, 358, 364, 249, 210, 390, 399, 578, 312, 216,
- 217, 218, 524, 525, 526, 527, 619, 620, 624, 205,
- 462, 463, 464, 465, 292, 614, 309, 468, 467, 331,
- 332, 379, 449, 540, 542, 553, 557, 559, 561, 567,
- 570, 541, 543, 554, 558, 560, 562, 568, 571, 530,
- 532, 534, 536, 549, 548, 545, 573, 574, 551, 556,
- 535, 547, 552, 565, 572, 569, 529, 533, 537, 546,
- 564, 563, 544, 555, 566, 550, 538, 531, 539, 0,
- 196, 221, 368, 0, 454, 288, 650, 618, 484, 613,
- 206, 223, 0, 262, 0, 0, 0, 0, 0, 0,
+ 670, 671, 672, 650, 509, 515, 510, 511, 512, 513,
+ 514, 0, 516, 0, 0, 0, 0, 0, 399, 0,
+ 592, 593, 673, 385, 487, 604, 336, 350, 353, 342,
+ 362, 0, 363, 338, 339, 344, 347, 348, 349, 354,
+ 355, 359, 365, 249, 210, 391, 400, 579, 313, 216,
+ 217, 218, 525, 526, 527, 528, 620, 621, 625, 205,
+ 463, 464, 465, 466, 293, 615, 310, 469, 468, 332,
+ 333, 380, 450, 541, 543, 554, 558, 560, 562, 568,
+ 571, 542, 544, 555, 559, 561, 563, 569, 572, 531,
+ 533, 535, 537, 550, 549, 546, 574, 575, 552, 557,
+ 536, 548, 553, 566, 573, 570, 530, 534, 538, 547,
+ 565, 564, 545, 556, 567, 551, 539, 532, 540, 0,
+ 196, 221, 369, 0, 455, 289, 651, 619, 485, 614,
+ 206, 223, 0, 263, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 198, 200, 209, 222, 232,
- 236, 243, 261, 276, 278, 285, 298, 310, 318, 319,
- 322, 328, 380, 386, 387, 388, 389, 409, 410, 411,
- 414, 417, 418, 421, 423, 424, 427, 431, 435, 436,
- 437, 439, 441, 443, 455, 460, 474, 475, 476, 477,
- 478, 481, 482, 488, 489, 490, 491, 492, 500, 501,
- 516, 586, 588, 605, 625, 632, 480, 301, 302, 444,
- 445, 314, 315, 646, 647, 300, 600, 633, 597, 645,
- 627, 438, 378, 0, 0, 381, 281, 305, 320, 0,
- 617, 502, 227, 466, 290, 251, 0, 0, 211, 246,
- 230, 259, 274, 277, 324, 391, 400, 429, 434, 296,
- 271, 244, 459, 241, 485, 519, 520, 521, 523, 395,
- 266, 433, 396, 0, 376, 576, 577, 316, 0, 0,
- 0, 528, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 416, 0, 0, 0, 0, 0, 0,
- 0, 270, 0, 0, 0, 0, 366, 267, 0, 0,
- 204, 505, 0, 430, 0, 203, 0, 487, 252, 377,
- 374, 583, 282, 273, 269, 250, 317, 385, 428, 518,
- 422, 0, 370, 0, 0, 497, 401, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 323, 248, 325, 202, 413,
- 498, 286, 0, 0, 0, 0, 2880, 507, 724, 0,
+ 236, 243, 262, 277, 279, 286, 299, 311, 319, 320,
+ 323, 329, 381, 387, 388, 389, 390, 410, 411, 412,
+ 415, 418, 419, 422, 424, 425, 428, 432, 436, 437,
+ 438, 440, 442, 444, 456, 461, 475, 476, 477, 478,
+ 479, 482, 483, 489, 490, 491, 492, 493, 501, 502,
+ 517, 587, 589, 606, 626, 633, 481, 302, 303, 445,
+ 446, 315, 316, 647, 648, 301, 601, 634, 598, 646,
+ 628, 439, 379, 0, 0, 382, 282, 306, 321, 0,
+ 618, 503, 227, 467, 291, 251, 0, 0, 211, 246,
+ 230, 260, 275, 278, 325, 392, 401, 430, 435, 297,
+ 272, 244, 460, 241, 486, 520, 521, 522, 524, 396,
+ 267, 434, 397, 0, 377, 577, 578, 317, 0, 0,
+ 0, 529, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 417, 0, 0, 0, 0, 0, 0,
+ 0, 271, 0, 0, 0, 0, 367, 268, 0, 0,
+ 204, 506, 0, 431, 0, 203, 0, 488, 253, 378,
+ 375, 584, 283, 274, 270, 250, 318, 386, 429, 519,
+ 423, 0, 371, 0, 0, 498, 402, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 324, 248, 326, 202, 414,
+ 499, 287, 0, 0, 0, 1754, 0, 508, 725, 0,
0, 0, 0, 0, 0, 0, 0, 0, 238, 0,
- 0, 245, 0, 0, 0, 351, 360, 359, 339, 340,
- 342, 344, 350, 357, 363, 336, 345, 0, 0, 609,
- 0, 0, 0, 265, 321, 272, 264, 580, 0, 0,
- 0, 0, 0, 0, 596, 0, 0, 229, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 275, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2881, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 297, 0, 402, 257, 0, 453,
- 0, 0, 0, 629, 0, 0, 0, 0, 0, 0,
- 0, 365, 0, 330, 197, 225, 0, 0, 412, 461,
- 473, 0, 0, 0, 253, 0, 471, 426, 604, 233,
- 284, 458, 432, 469, 440, 287, 0, 0, 470, 372,
- 585, 450, 601, 630, 631, 263, 406, 615, 522, 623,
- 648, 226, 260, 420, 506, 607, 494, 397, 581, 582,
- 329, 493, 295, 201, 369, 636, 224, 479, 371, 242,
- 231, 587, 612, 299, 289, 456, 643, 213, 517, 598,
- 239, 483, 0, 0, 651, 247, 504, 610, 599, 215,
- 594, 503, 393, 326, 327, 214, 0, 457, 268, 293,
- 0, 0, 258, 415, 589, 590, 256, 652, 228, 622,
- 220, 0, 621, 408, 584, 595, 394, 383, 219, 593,
- 392, 382, 334, 355, 356, 280, 307, 447, 375, 448,
- 306, 308, 404, 403, 405, 207, 608, 626, 0, 208,
- 0, 499, 611, 653, 452, 212, 234, 235, 237, 0,
- 279, 283, 291, 294, 303, 304, 313, 367, 419, 446,
- 442, 451, 0, 579, 602, 616, 628, 634, 635, 637,
- 638, 639, 640, 641, 644, 642, 407, 311, 495, 333,
- 373, 0, 0, 425, 472, 240, 606, 496, 199, 0,
- 0, 0, 0, 254, 255, 0, 575, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 654, 655, 656, 657,
+ 0, 245, 0, 0, 0, 352, 361, 360, 340, 341,
+ 343, 345, 351, 358, 364, 337, 346, 0, 0, 610,
+ 0, 0, 0, 266, 322, 273, 265, 581, 0, 0,
+ 0, 0, 0, 0, 597, 0, 0, 229, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 276, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 298, 0, 403, 258, 0, 454,
+ 0, 0, 0, 630, 0, 0, 0, 3729, 0, 0,
+ 0, 366, 0, 331, 197, 225, 0, 0, 413, 462,
+ 474, 0, 0, 0, 254, 0, 472, 427, 605, 233,
+ 285, 459, 433, 470, 441, 288, 0, 0, 471, 373,
+ 586, 451, 602, 631, 632, 264, 407, 616, 523, 624,
+ 649, 226, 261, 421, 507, 608, 495, 398, 582, 583,
+ 330, 494, 296, 201, 370, 637, 224, 480, 372, 242,
+ 231, 588, 613, 300, 252, 290, 457, 644, 213, 518,
+ 599, 239, 484, 0, 0, 652, 247, 505, 611, 600,
+ 215, 595, 504, 394, 327, 328, 214, 0, 458, 269,
+ 294, 0, 0, 259, 416, 590, 591, 257, 653, 228,
+ 623, 220, 0, 622, 409, 585, 596, 395, 384, 219,
+ 594, 393, 383, 335, 356, 357, 281, 308, 448, 376,
+ 449, 307, 309, 405, 404, 406, 207, 609, 627, 0,
+ 208, 0, 500, 612, 654, 453, 212, 234, 235, 237,
+ 0, 280, 284, 292, 295, 304, 305, 314, 368, 420,
+ 447, 443, 452, 0, 580, 603, 617, 629, 635, 636,
+ 638, 639, 640, 641, 642, 645, 643, 408, 312, 496,
+ 334, 374, 0, 0, 426, 473, 240, 607, 497, 199,
+ 0, 0, 0, 0, 255, 256, 0, 576, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 655, 656, 657,
658, 659, 660, 661, 662, 663, 664, 665, 666, 667,
- 668, 669, 670, 671, 649, 508, 514, 509, 510, 511,
- 512, 513, 0, 515, 0, 0, 0, 0, 0, 398,
- 0, 591, 592, 672, 384, 486, 603, 335, 349, 352,
- 341, 361, 0, 362, 337, 338, 343, 346, 347, 348,
- 353, 354, 358, 364, 249, 210, 390, 399, 578, 312,
- 216, 217, 218, 524, 525, 526, 527, 619, 620, 624,
- 205, 462, 463, 464, 465, 292, 614, 309, 468, 467,
- 331, 332, 379, 449, 540, 542, 553, 557, 559, 561,
- 567, 570, 541, 543, 554, 558, 560, 562, 568, 571,
- 530, 532, 534, 536, 549, 548, 545, 573, 574, 551,
- 556, 535, 547, 552, 565, 572, 569, 529, 533, 537,
- 546, 564, 563, 544, 555, 566, 550, 538, 531, 539,
- 0, 196, 221, 368, 0, 454, 288, 650, 618, 484,
- 613, 206, 223, 0, 262, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 198, 200, 209, 222,
- 232, 236, 243, 261, 276, 278, 285, 298, 310, 318,
- 319, 322, 328, 380, 386, 387, 388, 389, 409, 410,
- 411, 414, 417, 418, 421, 423, 424, 427, 431, 435,
- 436, 437, 439, 441, 443, 455, 460, 474, 475, 476,
- 477, 478, 481, 482, 488, 489, 490, 491, 492, 500,
- 501, 516, 586, 588, 605, 625, 632, 480, 301, 302,
- 444, 445, 314, 315, 646, 647, 300, 600, 633, 597,
- 645, 627, 438, 378, 0, 0, 381, 281, 305, 320,
- 0, 617, 502, 227, 466, 290, 251, 0, 0, 211,
- 246, 230, 259, 274, 277, 324, 391, 400, 429, 434,
- 296, 271, 244, 459, 241, 485, 519, 520, 521, 523,
- 395, 266, 433, 396, 0, 376, 576, 577, 316, 0,
- 0, 0, 528, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 416, 0, 0, 0, 0, 0,
- 0, 0, 270, 0, 0, 0, 0, 366, 267, 0,
- 0, 204, 505, 0, 430, 0, 203, 0, 487, 252,
- 377, 374, 583, 282, 273, 269, 250, 317, 385, 428,
- 518, 422, 0, 370, 0, 0, 497, 401, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 323, 248, 325, 202,
- 413, 498, 286, 0, 0, 0, 0, 0, 507, 724,
- 0, 0, 0, 0, 2865, 0, 0, 0, 0, 238,
- 0, 0, 245, 2866, 0, 0, 351, 360, 359, 339,
- 340, 342, 344, 350, 357, 363, 336, 345, 0, 0,
- 609, 0, 0, 0, 265, 321, 272, 264, 580, 0,
- 0, 0, 0, 0, 0, 596, 0, 0, 229, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 275, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 297, 0, 402, 257, 0,
- 453, 0, 0, 0, 629, 0, 0, 0, 0, 0,
- 0, 0, 365, 0, 330, 197, 225, 0, 0, 412,
- 461, 473, 0, 0, 0, 253, 0, 471, 426, 604,
- 233, 284, 458, 432, 469, 440, 287, 0, 0, 470,
- 372, 585, 450, 601, 630, 631, 263, 406, 615, 522,
- 623, 648, 226, 260, 420, 506, 607, 494, 397, 581,
- 582, 329, 493, 295, 201, 369, 636, 224, 479, 371,
- 242, 231, 587, 612, 299, 289, 456, 643, 213, 517,
- 598, 239, 483, 0, 0, 651, 247, 504, 610, 599,
- 215, 594, 503, 393, 326, 327, 214, 0, 457, 268,
- 293, 0, 0, 258, 415, 589, 590, 256, 652, 228,
- 622, 220, 0, 621, 408, 584, 595, 394, 383, 219,
- 593, 392, 382, 334, 355, 356, 280, 307, 447, 375,
- 448, 306, 308, 404, 403, 405, 207, 608, 626, 0,
- 208, 0, 499, 611, 653, 452, 212, 234, 235, 237,
- 0, 279, 283, 291, 294, 303, 304, 313, 367, 419,
- 446, 442, 451, 0, 579, 602, 616, 628, 634, 635,
- 637, 638, 639, 640, 641, 644, 642, 407, 311, 495,
- 333, 373, 0, 0, 425, 472, 240, 606, 496, 199,
- 0, 0, 0, 0, 254, 255, 0, 575, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 654, 655, 656,
- 657, 658, 659, 660, 661, 662, 663, 664, 665, 666,
- 667, 668, 669, 670, 671, 649, 508, 514, 509, 510,
- 511, 512, 513, 0, 515, 0, 0, 0, 0, 0,
- 398, 0, 591, 592, 672, 384, 486, 603, 335, 349,
- 352, 341, 361, 0, 362, 337, 338, 343, 346, 347,
- 348, 353, 354, 358, 364, 249, 210, 390, 399, 578,
- 312, 216, 217, 218, 524, 525, 526, 527, 619, 620,
- 624, 205, 462, 463, 464, 465, 292, 614, 309, 468,
- 467, 331, 332, 379, 449, 540, 542, 553, 557, 559,
- 561, 567, 570, 541, 543, 554, 558, 560, 562, 568,
- 571, 530, 532, 534, 536, 549, 548, 545, 573, 574,
- 551, 556, 535, 547, 552, 565, 572, 569, 529, 533,
- 537, 546, 564, 563, 544, 555, 566, 550, 538, 531,
- 539, 0, 196, 221, 368, 0, 454, 288, 650, 618,
- 484, 613, 206, 223, 0, 262, 0, 0, 0, 0,
+ 668, 669, 670, 671, 672, 650, 509, 515, 510, 511,
+ 512, 513, 514, 0, 516, 0, 0, 0, 0, 0,
+ 399, 0, 592, 593, 673, 385, 487, 604, 336, 350,
+ 353, 342, 362, 0, 363, 338, 339, 344, 347, 348,
+ 349, 354, 355, 359, 365, 249, 210, 391, 400, 579,
+ 313, 216, 217, 218, 525, 526, 527, 528, 620, 621,
+ 625, 205, 463, 464, 465, 466, 293, 615, 310, 469,
+ 468, 332, 333, 380, 450, 541, 543, 554, 558, 560,
+ 562, 568, 571, 542, 544, 555, 559, 561, 563, 569,
+ 572, 531, 533, 535, 537, 550, 549, 546, 574, 575,
+ 552, 557, 536, 548, 553, 566, 573, 570, 530, 534,
+ 538, 547, 565, 564, 545, 556, 567, 551, 539, 532,
+ 540, 0, 196, 221, 369, 0, 455, 289, 651, 619,
+ 485, 614, 206, 223, 0, 263, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 198, 200, 209,
- 222, 232, 236, 243, 261, 276, 278, 285, 298, 310,
- 318, 319, 322, 328, 380, 386, 387, 388, 389, 409,
- 410, 411, 414, 417, 418, 421, 423, 424, 427, 431,
- 435, 436, 437, 439, 441, 443, 455, 460, 474, 475,
- 476, 477, 478, 481, 482, 488, 489, 490, 491, 492,
- 500, 501, 516, 586, 588, 605, 625, 632, 480, 301,
- 302, 444, 445, 314, 315, 646, 647, 300, 600, 633,
- 597, 645, 627, 438, 378, 0, 0, 381, 281, 305,
- 320, 0, 617, 502, 227, 466, 290, 251, 0, 0,
- 211, 246, 230, 259, 274, 277, 324, 391, 400, 429,
- 434, 296, 271, 244, 459, 241, 485, 519, 520, 521,
- 523, 395, 266, 433, 396, 0, 376, 576, 577, 316,
- 0, 0, 0, 528, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 416, 0, 0, 0, 0,
- 0, 0, 0, 270, 1800, 0, 0, 0, 366, 267,
- 0, 0, 204, 505, 0, 430, 0, 203, 0, 487,
- 252, 377, 374, 583, 282, 273, 269, 250, 317, 385,
- 428, 518, 422, 0, 370, 0, 0, 497, 401, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 323, 248, 325,
- 202, 413, 498, 286, 0, 0, 0, 0, 1799, 507,
- 724, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 351, 360, 359,
- 339, 340, 342, 344, 350, 357, 363, 336, 345, 0,
- 0, 609, 0, 0, 0, 265, 321, 272, 264, 580,
- 0, 0, 0, 0, 0, 0, 596, 0, 0, 229,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 275, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 297, 0, 402, 257,
- 0, 453, 0, 0, 0, 629, 0, 0, 0, 0,
- 0, 0, 0, 365, 0, 330, 197, 225, 0, 0,
- 412, 461, 473, 0, 0, 0, 253, 0, 471, 426,
- 604, 233, 284, 458, 432, 469, 440, 287, 0, 0,
- 470, 372, 585, 450, 601, 630, 631, 263, 406, 615,
- 522, 623, 648, 226, 260, 420, 506, 607, 494, 397,
- 581, 582, 329, 493, 295, 201, 369, 636, 224, 479,
- 371, 242, 231, 587, 612, 299, 289, 456, 643, 213,
- 517, 598, 239, 483, 0, 0, 651, 247, 504, 610,
- 599, 215, 594, 503, 393, 326, 327, 214, 0, 457,
- 268, 293, 0, 0, 258, 415, 589, 590, 256, 652,
- 228, 622, 220, 0, 621, 408, 584, 595, 394, 383,
- 219, 593, 392, 382, 334, 355, 356, 280, 307, 447,
- 375, 448, 306, 308, 404, 403, 405, 207, 608, 626,
- 0, 208, 0, 499, 611, 653, 452, 212, 234, 235,
- 237, 0, 279, 283, 291, 294, 303, 304, 313, 367,
- 419, 446, 442, 451, 0, 579, 602, 616, 628, 634,
- 635, 637, 638, 639, 640, 641, 644, 642, 407, 311,
- 495, 333, 373, 0, 0, 425, 472, 240, 606, 496,
- 199, 0, 0, 0, 0, 254, 255, 0, 575, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 654, 655,
+ 222, 232, 236, 243, 262, 277, 279, 286, 299, 311,
+ 319, 320, 323, 329, 381, 387, 388, 389, 390, 410,
+ 411, 412, 415, 418, 419, 422, 424, 425, 428, 432,
+ 436, 437, 438, 440, 442, 444, 456, 461, 475, 476,
+ 477, 478, 479, 482, 483, 489, 490, 491, 492, 493,
+ 501, 502, 517, 587, 589, 606, 626, 633, 481, 302,
+ 303, 445, 446, 315, 316, 647, 648, 301, 601, 634,
+ 598, 646, 628, 439, 379, 0, 0, 382, 282, 306,
+ 321, 0, 618, 503, 227, 467, 291, 251, 0, 0,
+ 211, 246, 230, 260, 275, 278, 325, 392, 401, 430,
+ 435, 297, 272, 244, 460, 241, 486, 520, 521, 522,
+ 524, 396, 267, 434, 397, 0, 377, 577, 578, 317,
+ 0, 0, 0, 529, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 417, 0, 0, 0, 0,
+ 0, 0, 0, 271, 0, 0, 0, 0, 367, 268,
+ 0, 0, 204, 506, 0, 431, 0, 203, 0, 488,
+ 253, 378, 375, 584, 283, 274, 270, 250, 318, 386,
+ 429, 519, 423, 0, 371, 0, 0, 498, 402, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 324, 248, 326,
+ 202, 414, 499, 287, 0, 0, 0, 0, 2133, 508,
+ 725, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 238, 0, 0, 245, 0, 0, 0, 352, 361, 360,
+ 340, 341, 343, 345, 351, 358, 364, 337, 346, 0,
+ 0, 610, 0, 0, 0, 266, 322, 273, 265, 581,
+ 0, 0, 0, 0, 0, 0, 597, 0, 0, 229,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 276, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2134, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 298, 0, 403, 258,
+ 0, 454, 0, 0, 0, 630, 0, 0, 0, 0,
+ 0, 0, 0, 366, 0, 331, 197, 225, 0, 0,
+ 413, 462, 474, 0, 0, 0, 254, 0, 472, 427,
+ 605, 233, 285, 459, 433, 470, 441, 288, 0, 0,
+ 471, 373, 586, 451, 602, 631, 632, 264, 407, 616,
+ 523, 624, 649, 226, 261, 421, 507, 608, 495, 398,
+ 582, 583, 330, 494, 296, 201, 370, 637, 224, 480,
+ 372, 242, 231, 588, 613, 300, 252, 290, 457, 644,
+ 213, 518, 599, 239, 484, 0, 0, 652, 247, 505,
+ 611, 600, 215, 595, 504, 394, 327, 328, 214, 0,
+ 458, 269, 294, 0, 0, 259, 416, 590, 591, 257,
+ 653, 228, 623, 220, 0, 622, 409, 585, 596, 395,
+ 384, 219, 594, 393, 383, 335, 356, 357, 281, 308,
+ 448, 376, 449, 307, 309, 405, 404, 406, 207, 609,
+ 627, 0, 208, 0, 500, 612, 654, 453, 212, 234,
+ 235, 237, 0, 280, 284, 292, 295, 304, 305, 314,
+ 368, 420, 447, 443, 452, 0, 580, 603, 617, 629,
+ 635, 636, 638, 639, 640, 641, 642, 645, 643, 408,
+ 312, 496, 334, 374, 0, 0, 426, 473, 240, 607,
+ 497, 199, 0, 0, 0, 0, 255, 256, 0, 576,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 655,
656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
- 666, 667, 668, 669, 670, 671, 649, 508, 514, 509,
- 510, 511, 512, 513, 0, 515, 0, 0, 0, 0,
- 0, 398, 0, 591, 592, 672, 384, 486, 603, 335,
- 349, 352, 341, 361, 0, 362, 337, 338, 343, 346,
- 347, 348, 353, 354, 358, 364, 249, 210, 390, 399,
- 578, 312, 216, 217, 218, 524, 525, 526, 527, 619,
- 620, 624, 205, 462, 463, 464, 465, 292, 614, 309,
- 468, 467, 331, 332, 379, 449, 540, 542, 553, 557,
- 559, 561, 567, 570, 541, 543, 554, 558, 560, 562,
- 568, 571, 530, 532, 534, 536, 549, 548, 545, 573,
- 574, 551, 556, 535, 547, 552, 565, 572, 569, 529,
- 533, 537, 546, 564, 563, 544, 555, 566, 550, 538,
- 531, 539, 0, 196, 221, 368, 0, 454, 288, 650,
- 618, 484, 613, 206, 223, 0, 262, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 198, 200,
- 209, 222, 232, 236, 243, 261, 276, 278, 285, 298,
- 310, 318, 319, 322, 328, 380, 386, 387, 388, 389,
- 409, 410, 411, 414, 417, 418, 421, 423, 424, 427,
- 431, 435, 436, 437, 439, 441, 443, 455, 460, 474,
- 475, 476, 477, 478, 481, 482, 488, 489, 490, 491,
- 492, 500, 501, 516, 586, 588, 605, 625, 632, 480,
- 301, 302, 444, 445, 314, 315, 646, 647, 300, 600,
- 633, 597, 645, 627, 438, 378, 0, 0, 381, 281,
- 305, 320, 0, 617, 502, 227, 466, 290, 251, 0,
- 0, 211, 246, 230, 259, 274, 277, 324, 391, 400,
- 429, 434, 296, 271, 244, 459, 241, 485, 519, 520,
- 521, 523, 395, 266, 433, 396, 0, 376, 576, 577,
- 316, 0, 0, 0, 528, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 416, 0, 0, 0,
- 0, 0, 0, 0, 270, 0, 0, 0, 0, 366,
- 267, 0, 0, 204, 505, 0, 430, 0, 203, 0,
- 487, 252, 377, 374, 583, 282, 273, 269, 250, 317,
- 385, 428, 518, 422, 0, 370, 0, 0, 497, 401,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 413, 498, 286, 0, 0, 0, 0, 0,
- 507, 726, 727, 728, 0, 0, 0, 0, 0, 0,
- 0, 238, 0, 0, 245, 0, 0, 0, 351, 360,
- 359, 339, 340, 342, 344, 350, 357, 363, 336, 345,
- 0, 0, 609, 0, 0, 0, 265, 321, 272, 264,
- 580, 0, 0, 0, 0, 0, 0, 596, 0, 0,
- 229, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 275, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 297, 0, 402,
- 257, 0, 453, 0, 0, 0, 629, 0, 0, 0,
- 0, 0, 0, 0, 365, 0, 330, 197, 225, 0,
- 0, 412, 461, 473, 0, 0, 0, 253, 0, 471,
- 426, 604, 233, 284, 458, 432, 469, 440, 287, 0,
- 0, 470, 372, 585, 450, 601, 630, 631, 263, 406,
- 615, 522, 623, 648, 226, 260, 420, 506, 607, 494,
- 397, 581, 582, 329, 493, 295, 201, 369, 636, 224,
- 479, 371, 242, 231, 587, 612, 299, 289, 456, 643,
- 213, 517, 598, 239, 483, 0, 0, 651, 247, 504,
- 610, 599, 215, 594, 503, 393, 326, 327, 214, 0,
- 457, 268, 293, 0, 0, 258, 415, 589, 590, 256,
- 652, 228, 622, 220, 0, 621, 408, 584, 595, 394,
- 383, 219, 593, 392, 382, 334, 355, 356, 280, 307,
- 447, 375, 448, 306, 308, 404, 403, 405, 207, 608,
- 626, 0, 208, 0, 499, 611, 653, 452, 212, 234,
- 235, 237, 0, 279, 283, 291, 294, 303, 304, 313,
- 367, 419, 446, 442, 451, 0, 579, 602, 616, 628,
- 634, 635, 637, 638, 639, 640, 641, 644, 642, 407,
- 311, 495, 333, 373, 0, 0, 425, 472, 240, 606,
- 496, 199, 0, 0, 0, 0, 254, 255, 0, 575,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 665, 666, 667, 668, 669, 670, 671, 649, 508, 514,
- 509, 510, 511, 512, 513, 0, 515, 0, 0, 0,
- 0, 0, 398, 0, 591, 592, 672, 384, 486, 603,
- 335, 349, 352, 341, 361, 0, 362, 337, 338, 343,
- 346, 347, 348, 353, 354, 358, 364, 249, 210, 390,
- 399, 578, 312, 216, 217, 218, 524, 525, 526, 527,
- 619, 620, 624, 205, 462, 463, 464, 465, 292, 614,
- 309, 468, 467, 331, 332, 379, 449, 540, 542, 553,
- 557, 559, 561, 567, 570, 541, 543, 554, 558, 560,
- 562, 568, 571, 530, 532, 534, 536, 549, 548, 545,
- 573, 574, 551, 556, 535, 547, 552, 565, 572, 569,
- 529, 533, 537, 546, 564, 563, 544, 555, 566, 550,
- 538, 531, 539, 0, 196, 221, 368, 0, 454, 288,
- 650, 618, 484, 613, 206, 223, 0, 262, 0, 0,
+ 666, 667, 668, 669, 670, 671, 672, 650, 509, 515,
+ 510, 511, 512, 513, 514, 0, 516, 0, 0, 0,
+ 0, 0, 399, 0, 592, 593, 673, 385, 487, 604,
+ 336, 350, 353, 342, 362, 0, 363, 338, 339, 344,
+ 347, 348, 349, 354, 355, 359, 365, 249, 210, 391,
+ 400, 579, 313, 216, 217, 218, 525, 526, 527, 528,
+ 620, 621, 625, 205, 463, 464, 465, 466, 293, 615,
+ 310, 469, 468, 332, 333, 380, 450, 541, 543, 554,
+ 558, 560, 562, 568, 571, 542, 544, 555, 559, 561,
+ 563, 569, 572, 531, 533, 535, 537, 550, 549, 546,
+ 574, 575, 552, 557, 536, 548, 553, 566, 573, 570,
+ 530, 534, 538, 547, 565, 564, 545, 556, 567, 551,
+ 539, 532, 540, 0, 196, 221, 369, 0, 455, 289,
+ 651, 619, 485, 614, 206, 223, 0, 263, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 198,
- 200, 209, 222, 232, 236, 243, 261, 276, 278, 285,
- 298, 310, 318, 319, 322, 328, 380, 386, 387, 388,
- 389, 409, 410, 411, 414, 417, 418, 421, 423, 424,
- 427, 431, 435, 436, 437, 439, 441, 443, 455, 460,
- 474, 475, 476, 477, 478, 481, 482, 488, 489, 490,
- 491, 492, 500, 501, 516, 586, 588, 605, 625, 632,
- 480, 301, 302, 444, 445, 314, 315, 646, 647, 300,
- 600, 633, 597, 645, 627, 438, 378, 0, 0, 381,
- 281, 305, 320, 0, 617, 502, 227, 466, 290, 251,
- 0, 0, 211, 246, 230, 259, 274, 277, 324, 391,
- 400, 429, 434, 296, 271, 244, 459, 241, 485, 519,
- 520, 521, 523, 395, 266, 433, 396, 0, 376, 576,
- 577, 316, 0, 0, 0, 528, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 416, 0, 0,
- 0, 0, 0, 0, 0, 270, 0, 0, 0, 0,
- 366, 267, 0, 0, 204, 505, 0, 430, 0, 203,
- 0, 487, 252, 377, 374, 583, 282, 273, 269, 250,
- 317, 385, 428, 518, 422, 0, 370, 0, 0, 497,
- 401, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 323,
- 248, 325, 202, 413, 498, 286, 0, 0, 0, 0,
- 0, 507, 724, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 238, 0, 0, 245, 0, 0, 0, 351,
- 360, 359, 339, 340, 342, 344, 350, 357, 363, 336,
- 345, 0, 0, 609, 0, 0, 0, 265, 321, 272,
- 264, 580, 0, 0, 0, 0, 0, 0, 596, 0,
+ 200, 209, 222, 232, 236, 243, 262, 277, 279, 286,
+ 299, 311, 319, 320, 323, 329, 381, 387, 388, 389,
+ 390, 410, 411, 412, 415, 418, 419, 422, 424, 425,
+ 428, 432, 436, 437, 438, 440, 442, 444, 456, 461,
+ 475, 476, 477, 478, 479, 482, 483, 489, 490, 491,
+ 492, 493, 501, 502, 517, 587, 589, 606, 626, 633,
+ 481, 302, 303, 445, 446, 315, 316, 647, 648, 301,
+ 601, 634, 598, 646, 628, 439, 379, 0, 0, 382,
+ 282, 306, 321, 0, 618, 503, 227, 467, 291, 251,
+ 0, 0, 211, 246, 230, 260, 275, 278, 325, 392,
+ 401, 430, 435, 297, 272, 244, 460, 241, 486, 520,
+ 521, 522, 524, 396, 267, 434, 397, 0, 377, 577,
+ 578, 317, 0, 0, 0, 529, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 417, 0, 0,
+ 0, 0, 0, 0, 0, 271, 0, 0, 0, 0,
+ 367, 268, 0, 0, 204, 506, 0, 431, 0, 203,
+ 0, 488, 253, 378, 375, 584, 283, 274, 270, 250,
+ 318, 386, 429, 519, 423, 0, 371, 0, 0, 498,
+ 402, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 324,
+ 248, 326, 202, 414, 499, 287, 0, 0, 0, 0,
+ 2881, 508, 725, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 238, 0, 0, 245, 0, 0, 0, 352,
+ 361, 360, 340, 341, 343, 345, 351, 358, 364, 337,
+ 346, 0, 0, 610, 0, 0, 0, 266, 322, 273,
+ 265, 581, 0, 0, 0, 0, 0, 0, 597, 0,
0, 229, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 275, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 297, 0,
- 402, 257, 0, 453, 0, 0, 0, 629, 0, 0,
- 0, 4071, 0, 0, 0, 365, 0, 330, 197, 225,
- 0, 0, 412, 461, 473, 0, 0, 0, 253, 0,
- 471, 426, 604, 233, 284, 458, 432, 469, 440, 287,
- 0, 0, 470, 372, 585, 450, 601, 630, 631, 263,
- 406, 615, 522, 623, 648, 226, 260, 420, 506, 607,
- 494, 397, 581, 582, 329, 493, 295, 201, 369, 636,
- 224, 479, 371, 242, 231, 587, 612, 299, 289, 456,
- 643, 213, 517, 598, 239, 483, 0, 0, 651, 247,
- 504, 610, 599, 215, 594, 503, 393, 326, 327, 214,
- 0, 457, 268, 293, 0, 0, 258, 415, 589, 590,
- 256, 652, 228, 622, 220, 0, 621, 408, 584, 595,
- 394, 383, 219, 593, 392, 382, 334, 355, 356, 280,
- 307, 447, 375, 448, 306, 308, 404, 403, 405, 207,
- 608, 626, 0, 208, 0, 499, 611, 653, 452, 212,
- 234, 235, 237, 0, 279, 283, 291, 294, 303, 304,
- 313, 367, 419, 446, 442, 451, 0, 579, 602, 616,
- 628, 634, 635, 637, 638, 639, 640, 641, 644, 642,
- 407, 311, 495, 333, 373, 0, 0, 425, 472, 240,
- 606, 496, 199, 0, 0, 0, 0, 254, 255, 0,
- 575, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 654, 655, 656, 657, 658, 659, 660, 661, 662, 663,
- 664, 665, 666, 667, 668, 669, 670, 671, 649, 508,
- 514, 509, 510, 511, 512, 513, 0, 515, 0, 0,
- 0, 0, 0, 398, 0, 591, 592, 672, 384, 486,
- 603, 335, 349, 352, 341, 361, 0, 362, 337, 338,
- 343, 346, 347, 348, 353, 354, 358, 364, 249, 210,
- 390, 399, 578, 312, 216, 217, 218, 524, 525, 526,
- 527, 619, 620, 624, 205, 462, 463, 464, 465, 292,
- 614, 309, 468, 467, 331, 332, 379, 449, 540, 542,
- 553, 557, 559, 561, 567, 570, 541, 543, 554, 558,
- 560, 562, 568, 571, 530, 532, 534, 536, 549, 548,
- 545, 573, 574, 551, 556, 535, 547, 552, 565, 572,
- 569, 529, 533, 537, 546, 564, 563, 544, 555, 566,
- 550, 538, 531, 539, 0, 196, 221, 368, 0, 454,
- 288, 650, 618, 484, 613, 206, 223, 0, 262, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 198, 200, 209, 222, 232, 236, 243, 261, 276, 278,
- 285, 298, 310, 318, 319, 322, 328, 380, 386, 387,
- 388, 389, 409, 410, 411, 414, 417, 418, 421, 423,
- 424, 427, 431, 435, 436, 437, 439, 441, 443, 455,
- 460, 474, 475, 476, 477, 478, 481, 482, 488, 489,
- 490, 491, 492, 500, 501, 516, 586, 588, 605, 625,
- 632, 480, 301, 302, 444, 445, 314, 315, 646, 647,
- 300, 600, 633, 597, 645, 627, 438, 378, 0, 0,
- 381, 281, 305, 320, 0, 617, 502, 227, 466, 290,
- 251, 0, 0, 211, 246, 230, 259, 274, 277, 324,
- 391, 400, 429, 434, 296, 271, 244, 459, 241, 485,
- 519, 520, 521, 523, 395, 266, 433, 396, 0, 376,
- 576, 577, 316, 0, 0, 0, 528, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 416, 0,
- 0, 0, 0, 0, 0, 0, 270, 0, 0, 0,
- 0, 366, 267, 0, 0, 204, 505, 0, 430, 0,
- 203, 0, 487, 252, 377, 374, 583, 282, 273, 269,
- 250, 317, 385, 428, 518, 422, 0, 370, 0, 0,
- 497, 401, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 323, 248, 325, 202, 413, 498, 286, 0, 0, 0,
- 0, 1962, 507, 194, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 238, 0, 0, 245, 0, 0, 0,
- 351, 360, 359, 339, 340, 342, 344, 350, 357, 363,
- 336, 345, 0, 0, 609, 0, 0, 0, 265, 321,
- 272, 264, 580, 0, 0, 0, 0, 0, 0, 596,
- 0, 0, 229, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 275, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 297,
- 0, 402, 257, 0, 453, 0, 0, 0, 629, 0,
- 0, 0, 0, 0, 0, 0, 365, 0, 330, 197,
- 225, 0, 0, 412, 461, 473, 0, 0, 0, 253,
- 0, 471, 426, 604, 233, 284, 458, 432, 469, 440,
- 287, 0, 0, 470, 372, 585, 450, 601, 630, 631,
- 263, 406, 615, 522, 623, 648, 226, 260, 420, 506,
- 607, 494, 397, 581, 582, 329, 493, 295, 201, 369,
- 636, 224, 479, 371, 242, 231, 587, 612, 299, 289,
- 456, 643, 213, 517, 598, 239, 483, 0, 0, 651,
- 247, 504, 610, 599, 215, 594, 503, 393, 326, 327,
- 214, 0, 457, 268, 293, 0, 0, 258, 415, 589,
- 590, 256, 652, 228, 622, 220, 0, 621, 408, 584,
- 595, 394, 383, 219, 593, 392, 382, 334, 355, 356,
- 280, 307, 447, 375, 448, 306, 308, 404, 403, 405,
- 207, 608, 626, 0, 208, 0, 499, 611, 653, 452,
- 212, 234, 235, 237, 0, 279, 283, 291, 294, 303,
- 304, 313, 367, 419, 446, 442, 451, 0, 579, 602,
- 616, 628, 634, 635, 637, 638, 639, 640, 641, 644,
- 642, 407, 311, 495, 333, 373, 0, 0, 425, 472,
- 240, 606, 496, 199, 0, 0, 0, 0, 254, 255,
- 0, 575, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 654, 655, 656, 657, 658, 659, 660, 661, 662,
- 663, 664, 665, 666, 667, 668, 669, 670, 671, 649,
- 508, 514, 509, 510, 511, 512, 513, 0, 515, 0,
- 0, 0, 0, 0, 398, 0, 591, 592, 672, 384,
- 486, 603, 335, 349, 352, 341, 361, 0, 362, 337,
- 338, 343, 346, 347, 348, 353, 354, 358, 364, 249,
- 210, 390, 399, 578, 312, 216, 217, 218, 524, 525,
- 526, 527, 619, 620, 624, 205, 462, 463, 464, 465,
- 292, 614, 309, 468, 467, 331, 332, 379, 449, 540,
- 542, 553, 557, 559, 561, 567, 570, 541, 543, 554,
- 558, 560, 562, 568, 571, 530, 532, 534, 536, 549,
- 548, 545, 573, 574, 551, 556, 535, 547, 552, 565,
- 572, 569, 529, 533, 537, 546, 564, 563, 544, 555,
- 566, 550, 538, 531, 539, 0, 196, 221, 368, 0,
- 454, 288, 650, 618, 484, 613, 206, 223, 0, 262,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 198, 200, 209, 222, 232, 236, 243, 261, 276,
- 278, 285, 298, 310, 318, 319, 322, 328, 380, 386,
- 387, 388, 389, 409, 410, 411, 414, 417, 418, 421,
- 423, 424, 427, 431, 435, 436, 437, 439, 441, 443,
- 455, 460, 474, 475, 476, 477, 478, 481, 482, 488,
- 489, 490, 491, 492, 500, 501, 516, 586, 588, 605,
- 625, 632, 480, 301, 302, 444, 445, 314, 315, 646,
- 647, 300, 600, 633, 597, 645, 627, 438, 378, 0,
- 0, 381, 281, 305, 320, 0, 617, 502, 227, 466,
- 290, 251, 0, 0, 211, 246, 230, 259, 274, 277,
- 324, 391, 400, 429, 434, 296, 271, 244, 459, 241,
- 485, 519, 520, 521, 523, 395, 266, 433, 396, 0,
- 376, 576, 577, 316, 0, 0, 0, 528, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 416,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 366, 267, 0, 0, 204, 505, 0, 430,
- 0, 203, 0, 487, 252, 377, 374, 583, 282, 273,
- 269, 250, 317, 385, 428, 518, 422, 0, 370, 0,
- 0, 497, 401, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 323, 248, 325, 202, 413, 498, 286, 0, 0,
- 0, 0, 0, 507, 724, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 276, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2882, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 298, 0,
+ 403, 258, 0, 454, 0, 0, 0, 630, 0, 0,
+ 0, 0, 0, 0, 0, 366, 0, 331, 197, 225,
+ 0, 0, 413, 462, 474, 0, 0, 0, 254, 0,
+ 472, 427, 605, 233, 285, 459, 433, 470, 441, 288,
+ 0, 0, 471, 373, 586, 451, 602, 631, 632, 264,
+ 407, 616, 523, 624, 649, 226, 261, 421, 507, 608,
+ 495, 398, 582, 583, 330, 494, 296, 201, 370, 637,
+ 224, 480, 372, 242, 231, 588, 613, 300, 252, 290,
+ 457, 644, 213, 518, 599, 239, 484, 0, 0, 652,
+ 247, 505, 611, 600, 215, 595, 504, 394, 327, 328,
+ 214, 0, 458, 269, 294, 0, 0, 259, 416, 590,
+ 591, 257, 653, 228, 623, 220, 0, 622, 409, 585,
+ 596, 395, 384, 219, 594, 393, 383, 335, 356, 357,
+ 281, 308, 448, 376, 449, 307, 309, 405, 404, 406,
+ 207, 609, 627, 0, 208, 0, 500, 612, 654, 453,
+ 212, 234, 235, 237, 0, 280, 284, 292, 295, 304,
+ 305, 314, 368, 420, 447, 443, 452, 0, 580, 603,
+ 617, 629, 635, 636, 638, 639, 640, 641, 642, 645,
+ 643, 408, 312, 496, 334, 374, 0, 0, 426, 473,
+ 240, 607, 497, 199, 0, 0, 0, 0, 255, 256,
+ 0, 576, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 655, 656, 657, 658, 659, 660, 661, 662, 663,
+ 664, 665, 666, 667, 668, 669, 670, 671, 672, 650,
+ 509, 515, 510, 511, 512, 513, 514, 0, 516, 0,
+ 0, 0, 0, 0, 399, 0, 592, 593, 673, 385,
+ 487, 604, 336, 350, 353, 342, 362, 0, 363, 338,
+ 339, 344, 347, 348, 349, 354, 355, 359, 365, 249,
+ 210, 391, 400, 579, 313, 216, 217, 218, 525, 526,
+ 527, 528, 620, 621, 625, 205, 463, 464, 465, 466,
+ 293, 615, 310, 469, 468, 332, 333, 380, 450, 541,
+ 543, 554, 558, 560, 562, 568, 571, 542, 544, 555,
+ 559, 561, 563, 569, 572, 531, 533, 535, 537, 550,
+ 549, 546, 574, 575, 552, 557, 536, 548, 553, 566,
+ 573, 570, 530, 534, 538, 547, 565, 564, 545, 556,
+ 567, 551, 539, 532, 540, 0, 196, 221, 369, 0,
+ 455, 289, 651, 619, 485, 614, 206, 223, 0, 263,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 198, 200, 209, 222, 232, 236, 243, 262, 277,
+ 279, 286, 299, 311, 319, 320, 323, 329, 381, 387,
+ 388, 389, 390, 410, 411, 412, 415, 418, 419, 422,
+ 424, 425, 428, 432, 436, 437, 438, 440, 442, 444,
+ 456, 461, 475, 476, 477, 478, 479, 482, 483, 489,
+ 490, 491, 492, 493, 501, 502, 517, 587, 589, 606,
+ 626, 633, 481, 302, 303, 445, 446, 315, 316, 647,
+ 648, 301, 601, 634, 598, 646, 628, 439, 379, 0,
+ 0, 382, 282, 306, 321, 0, 618, 503, 227, 467,
+ 291, 251, 0, 0, 211, 246, 230, 260, 275, 278,
+ 325, 392, 401, 430, 435, 297, 272, 244, 460, 241,
+ 486, 520, 521, 522, 524, 396, 267, 434, 397, 0,
+ 377, 577, 578, 317, 0, 0, 0, 529, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 417,
+ 0, 0, 0, 0, 0, 0, 0, 271, 0, 0,
+ 0, 0, 367, 268, 0, 0, 204, 506, 0, 431,
+ 0, 203, 0, 488, 253, 378, 375, 584, 283, 274,
+ 270, 250, 318, 386, 429, 519, 423, 0, 371, 0,
+ 0, 498, 402, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 324, 248, 326, 202, 414, 499, 287, 0, 0,
+ 0, 0, 0, 508, 725, 0, 0, 0, 0, 2866,
+ 0, 0, 0, 0, 238, 0, 0, 245, 2867, 0,
+ 0, 352, 361, 360, 340, 341, 343, 345, 351, 358,
+ 364, 337, 346, 0, 0, 610, 0, 0, 0, 266,
+ 322, 273, 265, 581, 0, 0, 0, 0, 0, 0,
+ 597, 0, 0, 229, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 276, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 298, 0, 403, 258, 0, 454, 0, 0, 0, 630,
+ 0, 0, 0, 0, 0, 0, 0, 366, 0, 331,
+ 197, 225, 0, 0, 413, 462, 474, 0, 0, 0,
+ 254, 0, 472, 427, 605, 233, 285, 459, 433, 470,
+ 441, 288, 0, 0, 471, 373, 586, 451, 602, 631,
+ 632, 264, 407, 616, 523, 624, 649, 226, 261, 421,
+ 507, 608, 495, 398, 582, 583, 330, 494, 296, 201,
+ 370, 637, 224, 480, 372, 242, 231, 588, 613, 300,
+ 252, 290, 457, 644, 213, 518, 599, 239, 484, 0,
+ 0, 652, 247, 505, 611, 600, 215, 595, 504, 394,
+ 327, 328, 214, 0, 458, 269, 294, 0, 0, 259,
+ 416, 590, 591, 257, 653, 228, 623, 220, 0, 622,
+ 409, 585, 596, 395, 384, 219, 594, 393, 383, 335,
+ 356, 357, 281, 308, 448, 376, 449, 307, 309, 405,
+ 404, 406, 207, 609, 627, 0, 208, 0, 500, 612,
+ 654, 453, 212, 234, 235, 237, 0, 280, 284, 292,
+ 295, 304, 305, 314, 368, 420, 447, 443, 452, 0,
+ 580, 603, 617, 629, 635, 636, 638, 639, 640, 641,
+ 642, 645, 643, 408, 312, 496, 334, 374, 0, 0,
+ 426, 473, 240, 607, 497, 199, 0, 0, 0, 0,
+ 255, 256, 0, 576, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 655, 656, 657, 658, 659, 660, 661,
+ 662, 663, 664, 665, 666, 667, 668, 669, 670, 671,
+ 672, 650, 509, 515, 510, 511, 512, 513, 514, 0,
+ 516, 0, 0, 0, 0, 0, 399, 0, 592, 593,
+ 673, 385, 487, 604, 336, 350, 353, 342, 362, 0,
+ 363, 338, 339, 344, 347, 348, 349, 354, 355, 359,
+ 365, 249, 210, 391, 400, 579, 313, 216, 217, 218,
+ 525, 526, 527, 528, 620, 621, 625, 205, 463, 464,
+ 465, 466, 293, 615, 310, 469, 468, 332, 333, 380,
+ 450, 541, 543, 554, 558, 560, 562, 568, 571, 542,
+ 544, 555, 559, 561, 563, 569, 572, 531, 533, 535,
+ 537, 550, 549, 546, 574, 575, 552, 557, 536, 548,
+ 553, 566, 573, 570, 530, 534, 538, 547, 565, 564,
+ 545, 556, 567, 551, 539, 532, 540, 0, 196, 221,
+ 369, 0, 455, 289, 651, 619, 485, 614, 206, 223,
+ 0, 263, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 198, 200, 209, 222, 232, 236, 243,
+ 262, 277, 279, 286, 299, 311, 319, 320, 323, 329,
+ 381, 387, 388, 389, 390, 410, 411, 412, 415, 418,
+ 419, 422, 424, 425, 428, 432, 436, 437, 438, 440,
+ 442, 444, 456, 461, 475, 476, 477, 478, 479, 482,
+ 483, 489, 490, 491, 492, 493, 501, 502, 517, 587,
+ 589, 606, 626, 633, 481, 302, 303, 445, 446, 315,
+ 316, 647, 648, 301, 601, 634, 598, 646, 628, 439,
+ 379, 0, 0, 382, 282, 306, 321, 0, 618, 503,
+ 227, 467, 291, 251, 0, 0, 211, 246, 230, 260,
+ 275, 278, 325, 392, 401, 430, 435, 297, 272, 244,
+ 460, 241, 486, 520, 521, 522, 524, 396, 267, 434,
+ 397, 0, 377, 577, 578, 317, 0, 0, 0, 529,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 417, 0, 0, 0, 0, 0, 0, 0, 271,
+ 1800, 0, 0, 0, 367, 268, 0, 0, 204, 506,
+ 0, 431, 0, 203, 0, 488, 253, 378, 375, 584,
+ 283, 274, 270, 250, 318, 386, 429, 519, 423, 0,
+ 371, 0, 0, 498, 402, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 324, 248, 326, 202, 414, 499, 287,
+ 0, 0, 0, 0, 1799, 508, 725, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 238, 0, 0, 245,
+ 0, 0, 0, 352, 361, 360, 340, 341, 343, 345,
+ 351, 358, 364, 337, 346, 0, 0, 610, 0, 0,
+ 0, 266, 322, 273, 265, 581, 0, 0, 0, 0,
+ 0, 0, 597, 0, 0, 229, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 276, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 298, 0, 403, 258, 0, 454, 0, 0,
+ 0, 630, 0, 0, 0, 0, 0, 0, 0, 366,
+ 0, 331, 197, 225, 0, 0, 413, 462, 474, 0,
+ 0, 0, 254, 0, 472, 427, 605, 233, 285, 459,
+ 433, 470, 441, 288, 0, 0, 471, 373, 586, 451,
+ 602, 631, 632, 264, 407, 616, 523, 624, 649, 226,
+ 261, 421, 507, 608, 495, 398, 582, 583, 330, 494,
+ 296, 201, 370, 637, 224, 480, 372, 242, 231, 588,
+ 613, 300, 252, 290, 457, 644, 213, 518, 599, 239,
+ 484, 0, 0, 652, 247, 505, 611, 600, 215, 595,
+ 504, 394, 327, 328, 214, 0, 458, 269, 294, 0,
+ 0, 259, 416, 590, 591, 257, 653, 228, 623, 220,
+ 0, 622, 409, 585, 596, 395, 384, 219, 594, 393,
+ 383, 335, 356, 357, 281, 308, 448, 376, 449, 307,
+ 309, 405, 404, 406, 207, 609, 627, 0, 208, 0,
+ 500, 612, 654, 453, 212, 234, 235, 237, 0, 280,
+ 284, 292, 295, 304, 305, 314, 368, 420, 447, 443,
+ 452, 0, 580, 603, 617, 629, 635, 636, 638, 639,
+ 640, 641, 642, 645, 643, 408, 312, 496, 334, 374,
+ 0, 0, 426, 473, 240, 607, 497, 199, 0, 0,
+ 0, 0, 255, 256, 0, 576, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 655, 656, 657, 658, 659,
+ 660, 661, 662, 663, 664, 665, 666, 667, 668, 669,
+ 670, 671, 672, 650, 509, 515, 510, 511, 512, 513,
+ 514, 0, 516, 0, 0, 0, 0, 0, 399, 0,
+ 592, 593, 673, 385, 487, 604, 336, 350, 353, 342,
+ 362, 0, 363, 338, 339, 344, 347, 348, 349, 354,
+ 355, 359, 365, 249, 210, 391, 400, 579, 313, 216,
+ 217, 218, 525, 526, 527, 528, 620, 621, 625, 205,
+ 463, 464, 465, 466, 293, 615, 310, 469, 468, 332,
+ 333, 380, 450, 541, 543, 554, 558, 560, 562, 568,
+ 571, 542, 544, 555, 559, 561, 563, 569, 572, 531,
+ 533, 535, 537, 550, 549, 546, 574, 575, 552, 557,
+ 536, 548, 553, 566, 573, 570, 530, 534, 538, 547,
+ 565, 564, 545, 556, 567, 551, 539, 532, 540, 0,
+ 196, 221, 369, 0, 455, 289, 651, 619, 485, 614,
+ 206, 223, 0, 263, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 198, 200, 209, 222, 232,
+ 236, 243, 262, 277, 279, 286, 299, 311, 319, 320,
+ 323, 329, 381, 387, 388, 389, 390, 410, 411, 412,
+ 415, 418, 419, 422, 424, 425, 428, 432, 436, 437,
+ 438, 440, 442, 444, 456, 461, 475, 476, 477, 478,
+ 479, 482, 483, 489, 490, 491, 492, 493, 501, 502,
+ 517, 587, 589, 606, 626, 633, 481, 302, 303, 445,
+ 446, 315, 316, 647, 648, 301, 601, 634, 598, 646,
+ 628, 439, 379, 0, 0, 382, 282, 306, 321, 0,
+ 618, 503, 227, 467, 291, 251, 0, 0, 211, 246,
+ 230, 260, 275, 278, 325, 392, 401, 430, 435, 297,
+ 272, 244, 460, 241, 486, 520, 521, 522, 524, 396,
+ 267, 434, 397, 0, 377, 577, 578, 317, 0, 0,
+ 0, 529, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 417, 0, 0, 0, 0, 0, 0,
+ 0, 271, 0, 0, 0, 0, 367, 268, 0, 0,
+ 204, 506, 0, 431, 0, 203, 0, 488, 253, 378,
+ 375, 584, 283, 274, 270, 250, 318, 386, 429, 519,
+ 423, 0, 371, 0, 0, 498, 402, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 324, 248, 326, 202, 414,
+ 499, 287, 0, 0, 0, 0, 0, 508, 727, 728,
+ 729, 0, 0, 0, 0, 0, 0, 0, 238, 0,
+ 0, 245, 0, 0, 0, 352, 361, 360, 340, 341,
+ 343, 345, 351, 358, 364, 337, 346, 0, 0, 610,
+ 0, 0, 0, 266, 322, 273, 265, 581, 0, 0,
+ 0, 0, 0, 0, 597, 0, 0, 229, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 276, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 298, 0, 403, 258, 0, 454,
+ 0, 0, 0, 630, 0, 0, 0, 0, 0, 0,
+ 0, 366, 0, 331, 197, 225, 0, 0, 413, 462,
+ 474, 0, 0, 0, 254, 0, 472, 427, 605, 233,
+ 285, 459, 433, 470, 441, 288, 0, 0, 471, 373,
+ 586, 451, 602, 631, 632, 264, 407, 616, 523, 624,
+ 649, 226, 261, 421, 507, 608, 495, 398, 582, 583,
+ 330, 494, 296, 201, 370, 637, 224, 480, 372, 242,
+ 231, 588, 613, 300, 252, 290, 457, 644, 213, 518,
+ 599, 239, 484, 0, 0, 652, 247, 505, 611, 600,
+ 215, 595, 504, 394, 327, 328, 214, 0, 458, 269,
+ 294, 0, 0, 259, 416, 590, 591, 257, 653, 228,
+ 623, 220, 0, 622, 409, 585, 596, 395, 384, 219,
+ 594, 393, 383, 335, 356, 357, 281, 308, 448, 376,
+ 449, 307, 309, 405, 404, 406, 207, 609, 627, 0,
+ 208, 0, 500, 612, 654, 453, 212, 234, 235, 237,
+ 0, 280, 284, 292, 295, 304, 305, 314, 368, 420,
+ 447, 443, 452, 0, 580, 603, 617, 629, 635, 636,
+ 638, 639, 640, 641, 642, 645, 643, 408, 312, 496,
+ 334, 374, 0, 0, 426, 473, 240, 607, 497, 199,
+ 0, 0, 0, 0, 255, 256, 0, 576, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 655, 656, 657,
+ 658, 659, 660, 661, 662, 663, 664, 665, 666, 667,
+ 668, 669, 670, 671, 672, 650, 509, 515, 510, 511,
+ 512, 513, 514, 0, 516, 0, 0, 0, 0, 0,
+ 399, 0, 592, 593, 673, 385, 487, 604, 336, 350,
+ 353, 342, 362, 0, 363, 338, 339, 344, 347, 348,
+ 349, 354, 355, 359, 365, 249, 210, 391, 400, 579,
+ 313, 216, 217, 218, 525, 526, 527, 528, 620, 621,
+ 625, 205, 463, 464, 465, 466, 293, 615, 310, 469,
+ 468, 332, 333, 380, 450, 541, 543, 554, 558, 560,
+ 562, 568, 571, 542, 544, 555, 559, 561, 563, 569,
+ 572, 531, 533, 535, 537, 550, 549, 546, 574, 575,
+ 552, 557, 536, 548, 553, 566, 573, 570, 530, 534,
+ 538, 547, 565, 564, 545, 556, 567, 551, 539, 532,
+ 540, 0, 196, 221, 369, 0, 455, 289, 651, 619,
+ 485, 614, 206, 223, 0, 263, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 198, 200, 209,
+ 222, 232, 236, 243, 262, 277, 279, 286, 299, 311,
+ 319, 320, 323, 329, 381, 387, 388, 389, 390, 410,
+ 411, 412, 415, 418, 419, 422, 424, 425, 428, 432,
+ 436, 437, 438, 440, 442, 444, 456, 461, 475, 476,
+ 477, 478, 479, 482, 483, 489, 490, 491, 492, 493,
+ 501, 502, 517, 587, 589, 606, 626, 633, 481, 302,
+ 303, 445, 446, 315, 316, 647, 648, 301, 601, 634,
+ 598, 646, 628, 439, 379, 0, 0, 382, 282, 306,
+ 321, 0, 618, 503, 227, 467, 291, 251, 0, 0,
+ 211, 246, 230, 260, 275, 278, 325, 392, 401, 430,
+ 435, 297, 272, 244, 460, 241, 486, 520, 521, 522,
+ 524, 396, 267, 434, 397, 0, 377, 577, 578, 317,
+ 0, 0, 0, 529, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 417, 0, 0, 0, 0,
+ 0, 0, 0, 271, 0, 0, 0, 0, 367, 268,
+ 0, 0, 204, 506, 0, 431, 0, 203, 0, 488,
+ 253, 378, 375, 584, 283, 274, 270, 250, 318, 386,
+ 429, 519, 423, 0, 371, 0, 0, 498, 402, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 324, 248, 326,
+ 202, 414, 499, 287, 0, 0, 0, 0, 0, 508,
+ 725, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 238, 0, 0, 245, 0, 0, 0, 352, 361, 360,
+ 340, 341, 343, 345, 351, 358, 364, 337, 346, 0,
+ 0, 610, 0, 0, 0, 266, 322, 273, 265, 581,
+ 0, 0, 0, 0, 0, 0, 597, 0, 0, 229,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 276, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 298, 0, 403, 258,
+ 0, 454, 0, 0, 0, 630, 0, 0, 0, 4073,
+ 0, 0, 0, 366, 0, 331, 197, 225, 0, 0,
+ 413, 462, 474, 0, 0, 0, 254, 0, 472, 427,
+ 605, 233, 285, 459, 433, 470, 441, 288, 0, 0,
+ 471, 373, 586, 451, 602, 631, 632, 264, 407, 616,
+ 523, 624, 649, 226, 261, 421, 507, 608, 495, 398,
+ 582, 583, 330, 494, 296, 201, 370, 637, 224, 480,
+ 372, 242, 231, 588, 613, 300, 252, 290, 457, 644,
+ 213, 518, 599, 239, 484, 0, 0, 652, 247, 505,
+ 611, 600, 215, 595, 504, 394, 327, 328, 214, 0,
+ 458, 269, 294, 0, 0, 259, 416, 590, 591, 257,
+ 653, 228, 623, 220, 0, 622, 409, 585, 596, 395,
+ 384, 219, 594, 393, 383, 335, 356, 357, 281, 308,
+ 448, 376, 449, 307, 309, 405, 404, 406, 207, 609,
+ 627, 0, 208, 0, 500, 612, 654, 453, 212, 234,
+ 235, 237, 0, 280, 284, 292, 295, 304, 305, 314,
+ 368, 420, 447, 443, 452, 0, 580, 603, 617, 629,
+ 635, 636, 638, 639, 640, 641, 642, 645, 643, 408,
+ 312, 496, 334, 374, 0, 0, 426, 473, 240, 607,
+ 497, 199, 0, 0, 0, 0, 255, 256, 0, 576,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 655,
+ 656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
+ 666, 667, 668, 669, 670, 671, 672, 650, 509, 515,
+ 510, 511, 512, 513, 514, 0, 516, 0, 0, 0,
+ 0, 0, 399, 0, 592, 593, 673, 385, 487, 604,
+ 336, 350, 353, 342, 362, 0, 363, 338, 339, 344,
+ 347, 348, 349, 354, 355, 359, 365, 249, 210, 391,
+ 400, 579, 313, 216, 217, 218, 525, 526, 527, 528,
+ 620, 621, 625, 205, 463, 464, 465, 466, 293, 615,
+ 310, 469, 468, 332, 333, 380, 450, 541, 543, 554,
+ 558, 560, 562, 568, 571, 542, 544, 555, 559, 561,
+ 563, 569, 572, 531, 533, 535, 537, 550, 549, 546,
+ 574, 575, 552, 557, 536, 548, 553, 566, 573, 570,
+ 530, 534, 538, 547, 565, 564, 545, 556, 567, 551,
+ 539, 532, 540, 0, 196, 221, 369, 0, 455, 289,
+ 651, 619, 485, 614, 206, 223, 0, 263, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 198,
+ 200, 209, 222, 232, 236, 243, 262, 277, 279, 286,
+ 299, 311, 319, 320, 323, 329, 381, 387, 388, 389,
+ 390, 410, 411, 412, 415, 418, 419, 422, 424, 425,
+ 428, 432, 436, 437, 438, 440, 442, 444, 456, 461,
+ 475, 476, 477, 478, 479, 482, 483, 489, 490, 491,
+ 492, 493, 501, 502, 517, 587, 589, 606, 626, 633,
+ 481, 302, 303, 445, 446, 315, 316, 647, 648, 301,
+ 601, 634, 598, 646, 628, 439, 379, 0, 0, 382,
+ 282, 306, 321, 0, 618, 503, 227, 467, 291, 251,
+ 0, 0, 211, 246, 230, 260, 275, 278, 325, 392,
+ 401, 430, 435, 297, 272, 244, 460, 241, 486, 520,
+ 521, 522, 524, 396, 267, 434, 397, 0, 377, 577,
+ 578, 317, 0, 0, 0, 529, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 417, 0, 0,
+ 0, 0, 0, 0, 0, 271, 0, 0, 0, 0,
+ 367, 268, 0, 0, 204, 506, 0, 431, 0, 203,
+ 0, 488, 253, 378, 375, 584, 283, 274, 270, 250,
+ 318, 386, 429, 519, 423, 0, 371, 0, 0, 498,
+ 402, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 324,
+ 248, 326, 202, 414, 499, 287, 0, 0, 0, 0,
+ 1962, 508, 194, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 238, 0, 0, 245, 0, 0, 0, 352,
+ 361, 360, 340, 341, 343, 345, 351, 358, 364, 337,
+ 346, 0, 0, 610, 0, 0, 0, 266, 322, 273,
+ 265, 581, 0, 0, 0, 0, 0, 0, 597, 0,
+ 0, 229, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 276, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 298, 0,
+ 403, 258, 0, 454, 0, 0, 0, 630, 0, 0,
+ 0, 0, 0, 0, 0, 366, 0, 331, 197, 225,
+ 0, 0, 413, 462, 474, 0, 0, 0, 254, 0,
+ 472, 427, 605, 233, 285, 459, 433, 470, 441, 288,
+ 0, 0, 471, 373, 586, 451, 602, 631, 632, 264,
+ 407, 616, 523, 624, 649, 226, 261, 421, 507, 608,
+ 495, 398, 582, 583, 330, 494, 296, 201, 370, 637,
+ 224, 480, 372, 242, 231, 588, 613, 300, 252, 290,
+ 457, 644, 213, 518, 599, 239, 484, 0, 0, 652,
+ 247, 505, 611, 600, 215, 595, 504, 394, 327, 328,
+ 214, 0, 458, 269, 294, 0, 0, 259, 416, 590,
+ 591, 257, 653, 228, 623, 220, 0, 622, 409, 585,
+ 596, 395, 384, 219, 594, 393, 383, 335, 356, 357,
+ 281, 308, 448, 376, 449, 307, 309, 405, 404, 406,
+ 207, 609, 627, 0, 208, 0, 500, 612, 654, 453,
+ 212, 234, 235, 237, 0, 280, 284, 292, 295, 304,
+ 305, 314, 368, 420, 447, 443, 452, 0, 580, 603,
+ 617, 629, 635, 636, 638, 639, 640, 641, 642, 645,
+ 643, 408, 312, 496, 334, 374, 0, 0, 426, 473,
+ 240, 607, 497, 199, 0, 0, 0, 0, 255, 256,
+ 0, 576, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 655, 656, 657, 658, 659, 660, 661, 662, 663,
+ 664, 665, 666, 667, 668, 669, 670, 671, 672, 650,
+ 509, 515, 510, 511, 512, 513, 514, 0, 516, 0,
+ 0, 0, 0, 0, 399, 0, 592, 593, 673, 385,
+ 487, 604, 336, 350, 353, 342, 362, 0, 363, 338,
+ 339, 344, 347, 348, 349, 354, 355, 359, 365, 249,
+ 210, 391, 400, 579, 313, 216, 217, 218, 525, 526,
+ 527, 528, 620, 621, 625, 205, 463, 464, 465, 466,
+ 293, 615, 310, 469, 468, 332, 333, 380, 450, 541,
+ 543, 554, 558, 560, 562, 568, 571, 542, 544, 555,
+ 559, 561, 563, 569, 572, 531, 533, 535, 537, 550,
+ 549, 546, 574, 575, 552, 557, 536, 548, 553, 566,
+ 573, 570, 530, 534, 538, 547, 565, 564, 545, 556,
+ 567, 551, 539, 532, 540, 0, 196, 221, 369, 0,
+ 455, 289, 651, 619, 485, 614, 206, 223, 0, 263,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 198, 200, 209, 222, 232, 236, 243, 262, 277,
+ 279, 286, 299, 311, 319, 320, 323, 329, 381, 387,
+ 388, 389, 390, 410, 411, 412, 415, 418, 419, 422,
+ 424, 425, 428, 432, 436, 437, 438, 440, 442, 444,
+ 456, 461, 475, 476, 477, 478, 479, 482, 483, 489,
+ 490, 491, 492, 493, 501, 502, 517, 587, 589, 606,
+ 626, 633, 481, 302, 303, 445, 446, 315, 316, 647,
+ 648, 301, 601, 634, 598, 646, 628, 439, 379, 0,
+ 0, 382, 282, 306, 321, 0, 618, 503, 227, 467,
+ 291, 251, 0, 0, 211, 246, 230, 260, 275, 278,
+ 325, 392, 401, 430, 435, 297, 272, 244, 460, 241,
+ 486, 520, 521, 522, 524, 396, 267, 434, 397, 0,
+ 377, 577, 578, 317, 0, 0, 0, 529, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 417,
+ 0, 0, 0, 0, 0, 0, 0, 271, 0, 0,
+ 0, 0, 367, 268, 0, 0, 204, 506, 0, 431,
+ 0, 203, 0, 488, 253, 378, 375, 584, 283, 274,
+ 270, 250, 318, 386, 429, 519, 423, 0, 371, 0,
+ 0, 498, 402, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 324, 248, 326, 202, 414, 499, 287, 0, 0,
+ 0, 0, 0, 508, 725, 0, 0, 0, 0, 0,
0, 0, 0, 0, 238, 0, 0, 245, 0, 0,
- 0, 351, 360, 359, 339, 340, 342, 344, 350, 357,
- 363, 336, 345, 0, 0, 609, 0, 0, 0, 265,
- 321, 272, 264, 580, 0, 0, 0, 0, 0, 0,
- 596, 0, 0, 229, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 275, 0,
+ 0, 352, 361, 360, 340, 341, 343, 345, 351, 358,
+ 364, 337, 346, 0, 0, 610, 0, 0, 0, 266,
+ 322, 273, 265, 581, 0, 0, 0, 0, 0, 0,
+ 597, 0, 0, 229, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 276, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -5666,147 +5642,73 @@ var yyAct = [...]int{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 297, 0, 402, 257, 0, 453, 0, 0, 0, 629,
- 0, 0, 0, 3727, 0, 0, 0, 365, 0, 330,
- 197, 225, 0, 0, 412, 461, 473, 0, 0, 0,
- 253, 0, 471, 426, 604, 233, 284, 458, 432, 469,
- 440, 287, 0, 0, 470, 372, 585, 450, 601, 630,
- 631, 263, 406, 615, 522, 623, 648, 226, 260, 420,
- 506, 607, 494, 397, 581, 582, 329, 493, 295, 201,
- 369, 636, 224, 479, 371, 242, 231, 587, 612, 299,
- 289, 456, 643, 213, 517, 598, 239, 483, 0, 0,
- 651, 247, 504, 610, 599, 215, 594, 503, 393, 326,
- 327, 214, 0, 457, 268, 293, 0, 0, 258, 415,
- 589, 590, 256, 652, 228, 622, 220, 0, 621, 408,
- 584, 595, 394, 383, 219, 593, 392, 382, 334, 355,
- 356, 280, 307, 447, 375, 448, 306, 308, 404, 403,
- 405, 207, 608, 626, 0, 208, 0, 499, 611, 653,
- 452, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 367, 419, 446, 442, 451, 0, 579,
- 602, 616, 628, 634, 635, 637, 638, 639, 640, 641,
- 644, 642, 407, 311, 495, 333, 373, 0, 0, 425,
- 472, 240, 606, 496, 199, 0, 0, 0, 0, 254,
- 255, 0, 575, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 654, 655, 656, 657, 658, 659, 660, 661,
+ 298, 0, 403, 258, 0, 454, 0, 0, 0, 630,
+ 0, 0, 0, 3729, 0, 0, 0, 366, 0, 331,
+ 197, 225, 0, 0, 413, 462, 474, 0, 0, 0,
+ 254, 0, 472, 427, 605, 233, 285, 459, 433, 470,
+ 441, 288, 0, 0, 471, 373, 586, 451, 602, 631,
+ 632, 264, 407, 616, 523, 624, 649, 226, 261, 421,
+ 507, 608, 495, 398, 582, 583, 330, 494, 296, 201,
+ 370, 637, 224, 480, 372, 242, 231, 588, 613, 300,
+ 252, 290, 457, 644, 213, 518, 599, 239, 484, 0,
+ 0, 652, 247, 505, 611, 600, 215, 595, 504, 394,
+ 327, 328, 214, 0, 458, 269, 294, 0, 0, 259,
+ 416, 590, 591, 257, 653, 228, 623, 220, 0, 622,
+ 409, 585, 596, 395, 384, 219, 594, 393, 383, 335,
+ 356, 357, 281, 308, 448, 376, 449, 307, 309, 405,
+ 404, 406, 207, 609, 627, 0, 208, 0, 500, 612,
+ 654, 453, 212, 234, 235, 237, 0, 280, 284, 292,
+ 295, 304, 305, 314, 368, 420, 447, 443, 452, 0,
+ 580, 603, 617, 629, 635, 636, 638, 639, 640, 641,
+ 642, 645, 643, 408, 312, 496, 334, 374, 0, 0,
+ 426, 473, 240, 607, 497, 199, 0, 0, 0, 0,
+ 255, 256, 0, 576, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 655, 656, 657, 658, 659, 660, 661,
662, 663, 664, 665, 666, 667, 668, 669, 670, 671,
- 649, 508, 514, 509, 510, 511, 512, 513, 0, 515,
- 0, 0, 0, 0, 0, 398, 0, 591, 592, 672,
- 384, 486, 603, 335, 349, 352, 341, 361, 0, 362,
- 337, 338, 343, 346, 347, 348, 353, 354, 358, 364,
- 249, 210, 390, 399, 578, 312, 216, 217, 218, 524,
- 525, 526, 527, 619, 620, 624, 205, 462, 463, 464,
- 465, 292, 614, 309, 468, 467, 331, 332, 379, 449,
- 540, 542, 553, 557, 559, 561, 567, 570, 541, 543,
- 554, 558, 560, 562, 568, 571, 530, 532, 534, 536,
- 549, 548, 545, 573, 574, 551, 556, 535, 547, 552,
- 565, 572, 569, 529, 533, 537, 546, 564, 563, 544,
- 555, 566, 550, 538, 531, 539, 0, 196, 221, 368,
- 0, 454, 288, 650, 618, 484, 613, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 380,
- 386, 387, 388, 389, 409, 410, 411, 414, 417, 418,
- 421, 423, 424, 427, 431, 435, 436, 437, 439, 441,
- 443, 455, 460, 474, 475, 476, 477, 478, 481, 482,
- 488, 489, 490, 491, 492, 500, 501, 516, 586, 588,
- 605, 625, 632, 480, 301, 302, 444, 445, 314, 315,
- 646, 647, 300, 600, 633, 597, 645, 627, 438, 378,
- 0, 0, 381, 281, 305, 320, 0, 617, 502, 227,
- 466, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 391, 400, 429, 434, 296, 271, 244, 459,
- 241, 485, 519, 520, 521, 523, 395, 266, 433, 396,
- 0, 376, 576, 577, 316, 0, 0, 0, 528, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 416, 0, 0, 0, 0, 0, 0, 0, 270, 0,
- 0, 0, 0, 366, 267, 0, 0, 204, 505, 0,
- 430, 0, 203, 0, 487, 252, 377, 374, 583, 282,
- 273, 269, 250, 317, 385, 428, 518, 422, 0, 370,
- 0, 0, 497, 401, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 323, 248, 325, 202, 413, 498, 286, 0,
- 95, 0, 0, 0, 507, 724, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 238, 0, 0, 245, 0,
- 0, 0, 351, 360, 359, 339, 340, 342, 344, 350,
- 357, 363, 336, 345, 0, 0, 609, 0, 0, 0,
- 265, 321, 272, 264, 580, 0, 0, 0, 0, 0,
- 0, 596, 0, 0, 229, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 275,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 297, 0, 402, 257, 0, 453, 0, 0, 0,
- 629, 0, 0, 0, 0, 0, 0, 0, 365, 0,
- 330, 197, 225, 0, 0, 412, 461, 473, 0, 0,
- 0, 253, 0, 471, 426, 604, 233, 284, 458, 432,
- 469, 440, 287, 0, 0, 470, 372, 585, 450, 601,
- 630, 631, 263, 406, 615, 522, 623, 648, 226, 260,
- 420, 506, 607, 494, 397, 581, 582, 329, 493, 295,
- 201, 369, 636, 224, 479, 371, 242, 231, 587, 612,
- 299, 289, 456, 643, 213, 517, 598, 239, 483, 0,
- 0, 651, 247, 504, 610, 599, 215, 594, 503, 393,
- 326, 327, 214, 0, 457, 268, 293, 0, 0, 258,
- 415, 589, 590, 256, 652, 228, 622, 220, 0, 621,
- 408, 584, 595, 394, 383, 219, 593, 392, 382, 334,
- 355, 356, 280, 307, 447, 375, 448, 306, 308, 404,
- 403, 405, 207, 608, 626, 0, 208, 0, 499, 611,
- 653, 452, 212, 234, 235, 237, 0, 279, 283, 291,
- 294, 303, 304, 313, 367, 419, 446, 442, 451, 0,
- 579, 602, 616, 628, 634, 635, 637, 638, 639, 640,
- 641, 644, 642, 407, 311, 495, 333, 373, 0, 0,
- 425, 472, 240, 606, 496, 199, 0, 0, 0, 0,
- 254, 255, 0, 575, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 654, 655, 656, 657, 658, 659, 660,
- 661, 662, 663, 664, 665, 666, 667, 668, 669, 670,
- 671, 649, 508, 514, 509, 510, 511, 512, 513, 0,
- 515, 0, 0, 0, 0, 0, 398, 0, 591, 592,
- 672, 384, 486, 603, 335, 349, 352, 341, 361, 0,
- 362, 337, 338, 343, 346, 347, 348, 353, 354, 358,
- 364, 249, 210, 390, 399, 578, 312, 216, 217, 218,
- 524, 525, 526, 527, 619, 620, 624, 205, 462, 463,
- 464, 465, 292, 614, 309, 468, 467, 331, 332, 379,
- 449, 540, 542, 553, 557, 559, 561, 567, 570, 541,
- 543, 554, 558, 560, 562, 568, 571, 530, 532, 534,
- 536, 549, 548, 545, 573, 574, 551, 556, 535, 547,
- 552, 565, 572, 569, 529, 533, 537, 546, 564, 563,
- 544, 555, 566, 550, 538, 531, 539, 0, 196, 221,
- 368, 0, 454, 288, 650, 618, 484, 613, 206, 223,
- 0, 262, 0, 0, 0, 0, 0, 0, 0, 0,
+ 672, 650, 509, 515, 510, 511, 512, 513, 514, 0,
+ 516, 0, 0, 0, 0, 0, 399, 0, 592, 593,
+ 673, 385, 487, 604, 336, 350, 353, 342, 362, 0,
+ 363, 338, 339, 344, 347, 348, 349, 354, 355, 359,
+ 365, 249, 210, 391, 400, 579, 313, 216, 217, 218,
+ 525, 526, 527, 528, 620, 621, 625, 205, 463, 464,
+ 465, 466, 293, 615, 310, 469, 468, 332, 333, 380,
+ 450, 541, 543, 554, 558, 560, 562, 568, 571, 542,
+ 544, 555, 559, 561, 563, 569, 572, 531, 533, 535,
+ 537, 550, 549, 546, 574, 575, 552, 557, 536, 548,
+ 553, 566, 573, 570, 530, 534, 538, 547, 565, 564,
+ 545, 556, 567, 551, 539, 532, 540, 0, 196, 221,
+ 369, 0, 455, 289, 651, 619, 485, 614, 206, 223,
+ 0, 263, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 198, 200, 209, 222, 232, 236, 243,
- 261, 276, 278, 285, 298, 310, 318, 319, 322, 328,
- 380, 386, 387, 388, 389, 409, 410, 411, 414, 417,
- 418, 421, 423, 424, 427, 431, 435, 436, 437, 439,
- 441, 443, 455, 460, 474, 475, 476, 477, 478, 481,
- 482, 488, 489, 490, 491, 492, 500, 501, 516, 586,
- 588, 605, 625, 632, 480, 301, 302, 444, 445, 314,
- 315, 646, 647, 300, 600, 633, 597, 645, 627, 438,
- 378, 0, 0, 381, 281, 305, 320, 0, 617, 502,
- 227, 466, 290, 251, 0, 0, 211, 246, 230, 259,
- 274, 277, 324, 391, 400, 429, 434, 296, 271, 244,
- 459, 241, 485, 519, 520, 521, 523, 395, 266, 433,
- 396, 0, 376, 576, 577, 316, 0, 0, 0, 528,
- 0, 0, 0, 0, 2428, 0, 0, 0, 0, 0,
- 0, 416, 0, 0, 0, 0, 0, 0, 0, 270,
- 0, 0, 0, 0, 366, 267, 0, 0, 204, 505,
- 0, 430, 0, 203, 0, 487, 252, 377, 374, 583,
- 282, 273, 269, 250, 317, 385, 428, 518, 422, 0,
- 370, 0, 0, 497, 401, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 323, 248, 325, 202, 413, 498, 286,
- 0, 0, 0, 0, 0, 507, 194, 0, 0, 0,
+ 262, 277, 279, 286, 299, 311, 319, 320, 323, 329,
+ 381, 387, 388, 389, 390, 410, 411, 412, 415, 418,
+ 419, 422, 424, 425, 428, 432, 436, 437, 438, 440,
+ 442, 444, 456, 461, 475, 476, 477, 478, 479, 482,
+ 483, 489, 490, 491, 492, 493, 501, 502, 517, 587,
+ 589, 606, 626, 633, 481, 302, 303, 445, 446, 315,
+ 316, 647, 648, 301, 601, 634, 598, 646, 628, 439,
+ 379, 0, 0, 382, 282, 306, 321, 0, 618, 503,
+ 227, 467, 291, 251, 0, 0, 211, 246, 230, 260,
+ 275, 278, 325, 392, 401, 430, 435, 297, 272, 244,
+ 460, 241, 486, 520, 521, 522, 524, 396, 267, 434,
+ 397, 0, 377, 577, 578, 317, 0, 0, 0, 529,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 417, 0, 0, 0, 0, 0, 0, 0, 271,
+ 0, 0, 0, 0, 367, 268, 0, 0, 204, 506,
+ 0, 431, 0, 203, 0, 488, 253, 378, 375, 584,
+ 283, 274, 270, 250, 318, 386, 429, 519, 423, 0,
+ 371, 0, 0, 498, 402, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 324, 248, 326, 202, 414, 499, 287,
+ 0, 95, 0, 0, 0, 508, 725, 0, 0, 0,
0, 0, 0, 0, 0, 0, 238, 0, 0, 245,
- 0, 0, 0, 351, 360, 359, 339, 340, 342, 344,
- 350, 357, 363, 336, 345, 0, 0, 609, 0, 0,
- 0, 265, 321, 272, 264, 580, 0, 0, 0, 0,
- 0, 0, 596, 0, 0, 229, 0, 0, 0, 0,
+ 0, 0, 0, 352, 361, 360, 340, 341, 343, 345,
+ 351, 358, 364, 337, 346, 0, 0, 610, 0, 0,
+ 0, 266, 322, 273, 265, 581, 0, 0, 0, 0,
+ 0, 0, 597, 0, 0, 229, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 275, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 276, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -5814,147 +5716,73 @@ var yyAct = [...]int{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 297, 0, 402, 257, 0, 453, 0, 0,
- 0, 629, 0, 0, 0, 0, 0, 0, 0, 365,
- 0, 330, 197, 225, 0, 0, 412, 461, 473, 0,
- 0, 0, 253, 0, 471, 426, 604, 233, 284, 458,
- 432, 469, 440, 287, 0, 0, 470, 372, 585, 450,
- 601, 630, 631, 263, 406, 615, 522, 623, 648, 226,
- 260, 420, 506, 607, 494, 397, 581, 582, 329, 493,
- 295, 201, 369, 636, 224, 479, 371, 242, 231, 587,
- 612, 299, 289, 456, 643, 213, 517, 598, 239, 483,
- 0, 0, 651, 247, 504, 610, 599, 215, 594, 503,
- 393, 326, 327, 214, 0, 457, 268, 293, 0, 0,
- 258, 415, 589, 590, 256, 652, 228, 622, 220, 0,
- 621, 408, 584, 595, 394, 383, 219, 593, 392, 382,
- 334, 355, 356, 280, 307, 447, 375, 448, 306, 308,
- 404, 403, 405, 207, 608, 626, 0, 208, 0, 499,
- 611, 653, 452, 212, 234, 235, 237, 0, 279, 283,
- 291, 294, 303, 304, 313, 367, 419, 446, 442, 451,
- 0, 579, 602, 616, 628, 634, 635, 637, 638, 639,
- 640, 641, 644, 642, 407, 311, 495, 333, 373, 0,
- 0, 425, 472, 240, 606, 496, 199, 0, 0, 0,
- 0, 254, 255, 0, 575, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 654, 655, 656, 657, 658, 659,
+ 0, 0, 298, 0, 403, 258, 0, 454, 0, 0,
+ 0, 630, 0, 0, 0, 0, 0, 0, 0, 366,
+ 0, 331, 197, 225, 0, 0, 413, 462, 474, 0,
+ 0, 0, 254, 0, 472, 427, 605, 233, 285, 459,
+ 433, 470, 441, 288, 0, 0, 471, 373, 586, 451,
+ 602, 631, 632, 264, 407, 616, 523, 624, 649, 226,
+ 261, 421, 507, 608, 495, 398, 582, 583, 330, 494,
+ 296, 201, 370, 637, 224, 480, 372, 242, 231, 588,
+ 613, 300, 252, 290, 457, 644, 213, 518, 599, 239,
+ 484, 0, 0, 652, 247, 505, 611, 600, 215, 595,
+ 504, 394, 327, 328, 214, 0, 458, 269, 294, 0,
+ 0, 259, 416, 590, 591, 257, 653, 228, 623, 220,
+ 0, 622, 409, 585, 596, 395, 384, 219, 594, 393,
+ 383, 335, 356, 357, 281, 308, 448, 376, 449, 307,
+ 309, 405, 404, 406, 207, 609, 627, 0, 208, 0,
+ 500, 612, 654, 453, 212, 234, 235, 237, 0, 280,
+ 284, 292, 295, 304, 305, 314, 368, 420, 447, 443,
+ 452, 0, 580, 603, 617, 629, 635, 636, 638, 639,
+ 640, 641, 642, 645, 643, 408, 312, 496, 334, 374,
+ 0, 0, 426, 473, 240, 607, 497, 199, 0, 0,
+ 0, 0, 255, 256, 0, 576, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 655, 656, 657, 658, 659,
660, 661, 662, 663, 664, 665, 666, 667, 668, 669,
- 670, 671, 649, 508, 514, 509, 510, 511, 512, 513,
- 0, 515, 0, 0, 0, 0, 0, 398, 0, 591,
- 592, 672, 384, 486, 603, 335, 349, 352, 341, 361,
- 0, 362, 337, 338, 343, 346, 347, 348, 353, 354,
- 358, 364, 249, 210, 390, 399, 578, 312, 216, 217,
- 218, 524, 525, 526, 527, 619, 620, 624, 205, 462,
- 463, 464, 465, 292, 614, 309, 468, 467, 331, 332,
- 379, 449, 540, 542, 553, 557, 559, 561, 567, 570,
- 541, 543, 554, 558, 560, 562, 568, 571, 530, 532,
- 534, 536, 549, 548, 545, 573, 574, 551, 556, 535,
- 547, 552, 565, 572, 569, 529, 533, 537, 546, 564,
- 563, 544, 555, 566, 550, 538, 531, 539, 0, 196,
- 221, 368, 0, 454, 288, 650, 618, 484, 613, 206,
- 223, 0, 262, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 198, 200, 209, 222, 232, 236,
- 243, 261, 276, 278, 285, 298, 310, 318, 319, 322,
- 328, 380, 386, 387, 388, 389, 409, 410, 411, 414,
- 417, 418, 421, 423, 424, 427, 431, 435, 436, 437,
- 439, 441, 443, 455, 460, 474, 475, 476, 477, 478,
- 481, 482, 488, 489, 490, 491, 492, 500, 501, 516,
- 586, 588, 605, 625, 632, 480, 301, 302, 444, 445,
- 314, 315, 646, 647, 300, 600, 633, 597, 645, 627,
- 438, 378, 0, 0, 381, 281, 305, 320, 0, 617,
- 502, 227, 466, 290, 251, 0, 0, 211, 246, 230,
- 259, 274, 277, 324, 391, 400, 429, 434, 296, 271,
- 244, 459, 241, 485, 519, 520, 521, 523, 395, 266,
- 433, 396, 0, 376, 576, 577, 316, 0, 0, 0,
- 528, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 416, 0, 0, 0, 0, 0, 0, 0,
- 270, 0, 0, 0, 0, 366, 267, 0, 0, 204,
- 505, 0, 430, 0, 203, 0, 487, 252, 377, 374,
- 583, 282, 273, 269, 250, 317, 385, 428, 518, 422,
- 0, 370, 0, 0, 497, 401, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 323, 248, 325, 202, 413, 498,
- 286, 0, 0, 0, 0, 1781, 507, 724, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 238, 0, 0,
- 245, 0, 0, 0, 351, 360, 359, 339, 340, 342,
- 344, 350, 357, 363, 336, 345, 0, 0, 609, 0,
- 0, 0, 265, 321, 272, 264, 580, 0, 0, 0,
- 0, 0, 0, 596, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 402, 257, 0, 453, 0,
- 0, 0, 629, 0, 0, 0, 0, 0, 0, 0,
- 365, 0, 330, 197, 225, 0, 0, 412, 461, 473,
- 0, 0, 0, 253, 0, 471, 426, 604, 233, 284,
- 458, 432, 469, 440, 287, 0, 0, 470, 372, 585,
- 450, 601, 630, 631, 263, 406, 615, 522, 623, 648,
- 226, 260, 420, 506, 607, 494, 397, 581, 582, 329,
- 493, 295, 201, 369, 636, 224, 479, 371, 242, 231,
- 587, 612, 299, 289, 456, 643, 213, 517, 598, 239,
- 483, 0, 0, 651, 247, 504, 610, 599, 215, 594,
- 503, 393, 326, 327, 214, 0, 457, 268, 293, 0,
- 0, 258, 415, 589, 590, 256, 652, 228, 622, 220,
- 0, 621, 408, 584, 595, 394, 383, 219, 593, 392,
- 382, 334, 355, 356, 280, 307, 447, 375, 448, 306,
- 308, 404, 403, 405, 207, 608, 626, 0, 208, 0,
- 499, 611, 653, 452, 212, 234, 235, 237, 0, 279,
- 283, 291, 294, 303, 304, 313, 367, 419, 446, 442,
- 451, 0, 579, 602, 616, 628, 634, 635, 637, 638,
- 639, 640, 641, 644, 642, 407, 311, 495, 333, 373,
- 0, 0, 425, 472, 240, 606, 496, 199, 0, 0,
- 0, 0, 254, 255, 0, 575, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 654, 655, 656, 657, 658,
- 659, 660, 661, 662, 663, 664, 665, 666, 667, 668,
- 669, 670, 671, 649, 508, 514, 509, 510, 511, 512,
- 513, 0, 515, 0, 0, 0, 0, 0, 398, 0,
- 591, 592, 672, 384, 486, 603, 335, 349, 352, 341,
- 361, 0, 362, 337, 338, 343, 346, 347, 348, 353,
- 354, 358, 364, 249, 210, 390, 399, 578, 312, 216,
- 217, 218, 524, 525, 526, 527, 619, 620, 624, 205,
- 462, 463, 464, 465, 292, 614, 309, 468, 467, 331,
- 332, 379, 449, 540, 542, 553, 557, 559, 561, 567,
- 570, 541, 543, 554, 558, 560, 562, 568, 571, 530,
- 532, 534, 536, 549, 548, 545, 573, 574, 551, 556,
- 535, 547, 552, 565, 572, 569, 529, 533, 537, 546,
- 564, 563, 544, 555, 566, 550, 538, 531, 539, 0,
- 196, 221, 368, 0, 454, 288, 650, 618, 484, 613,
- 206, 223, 0, 262, 0, 0, 0, 0, 0, 0,
+ 670, 671, 672, 650, 509, 515, 510, 511, 512, 513,
+ 514, 0, 516, 0, 0, 0, 0, 0, 399, 0,
+ 592, 593, 673, 385, 487, 604, 336, 350, 353, 342,
+ 362, 0, 363, 338, 339, 344, 347, 348, 349, 354,
+ 355, 359, 365, 249, 210, 391, 400, 579, 313, 216,
+ 217, 218, 525, 526, 527, 528, 620, 621, 625, 205,
+ 463, 464, 465, 466, 293, 615, 310, 469, 468, 332,
+ 333, 380, 450, 541, 543, 554, 558, 560, 562, 568,
+ 571, 542, 544, 555, 559, 561, 563, 569, 572, 531,
+ 533, 535, 537, 550, 549, 546, 574, 575, 552, 557,
+ 536, 548, 553, 566, 573, 570, 530, 534, 538, 547,
+ 565, 564, 545, 556, 567, 551, 539, 532, 540, 0,
+ 196, 221, 369, 0, 455, 289, 651, 619, 485, 614,
+ 206, 223, 0, 263, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 198, 200, 209, 222, 232,
- 236, 243, 261, 276, 278, 285, 298, 310, 318, 319,
- 322, 328, 380, 386, 387, 388, 389, 409, 410, 411,
- 414, 417, 418, 421, 423, 424, 427, 431, 435, 436,
- 437, 439, 441, 443, 455, 460, 474, 475, 476, 477,
- 478, 481, 482, 488, 489, 490, 491, 492, 500, 501,
- 516, 586, 588, 605, 625, 632, 480, 301, 302, 444,
- 445, 314, 315, 646, 647, 300, 600, 633, 597, 645,
- 627, 438, 378, 0, 0, 381, 281, 305, 320, 0,
- 617, 502, 227, 466, 290, 251, 0, 0, 211, 246,
- 230, 259, 274, 277, 324, 391, 400, 429, 434, 296,
- 271, 244, 459, 241, 485, 519, 520, 521, 523, 395,
- 266, 433, 396, 0, 376, 576, 577, 316, 0, 0,
- 0, 528, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 416, 0, 0, 0, 0, 0, 0,
- 0, 270, 0, 0, 0, 0, 366, 267, 0, 0,
- 204, 505, 0, 430, 0, 203, 0, 487, 252, 377,
- 374, 583, 282, 273, 269, 250, 317, 385, 428, 518,
- 422, 0, 370, 0, 0, 497, 401, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 323, 248, 325, 202, 413,
- 498, 286, 0, 0, 0, 0, 0, 507, 194, 0,
+ 236, 243, 262, 277, 279, 286, 299, 311, 319, 320,
+ 323, 329, 381, 387, 388, 389, 390, 410, 411, 412,
+ 415, 418, 419, 422, 424, 425, 428, 432, 436, 437,
+ 438, 440, 442, 444, 456, 461, 475, 476, 477, 478,
+ 479, 482, 483, 489, 490, 491, 492, 493, 501, 502,
+ 517, 587, 589, 606, 626, 633, 481, 302, 303, 445,
+ 446, 315, 316, 647, 648, 301, 601, 634, 598, 646,
+ 628, 439, 379, 0, 0, 382, 282, 306, 321, 0,
+ 618, 503, 227, 467, 291, 251, 0, 0, 211, 246,
+ 230, 260, 275, 278, 325, 392, 401, 430, 435, 297,
+ 272, 244, 460, 241, 486, 520, 521, 522, 524, 396,
+ 267, 434, 397, 0, 377, 577, 578, 317, 0, 0,
+ 0, 529, 0, 0, 0, 0, 2428, 0, 0, 0,
+ 0, 0, 0, 417, 0, 0, 0, 0, 0, 0,
+ 0, 271, 0, 0, 0, 0, 367, 268, 0, 0,
+ 204, 506, 0, 431, 0, 203, 0, 488, 253, 378,
+ 375, 584, 283, 274, 270, 250, 318, 386, 429, 519,
+ 423, 0, 371, 0, 0, 498, 402, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 324, 248, 326, 202, 414,
+ 499, 287, 0, 0, 0, 0, 0, 508, 194, 0,
0, 0, 0, 0, 0, 0, 0, 0, 238, 0,
- 0, 245, 0, 0, 0, 351, 360, 359, 339, 340,
- 342, 344, 350, 357, 363, 336, 345, 0, 0, 609,
- 0, 0, 0, 265, 321, 272, 264, 580, 0, 0,
- 0, 0, 0, 0, 596, 0, 0, 229, 0, 0,
+ 0, 245, 0, 0, 0, 352, 361, 360, 340, 341,
+ 343, 345, 351, 358, 364, 337, 346, 0, 0, 610,
+ 0, 0, 0, 266, 322, 273, 265, 581, 0, 0,
+ 0, 0, 0, 0, 597, 0, 0, 229, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 275, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 276, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -5962,443 +5790,221 @@ var yyAct = [...]int{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 297, 0, 402, 257, 0, 453,
- 0, 0, 0, 629, 0, 0, 0, 0, 0, 0,
- 0, 365, 0, 330, 197, 225, 0, 0, 412, 461,
- 473, 0, 0, 0, 253, 0, 471, 426, 604, 233,
- 284, 458, 432, 469, 440, 287, 0, 0, 470, 372,
- 585, 450, 601, 630, 631, 263, 406, 615, 522, 623,
- 648, 226, 260, 420, 506, 607, 494, 397, 581, 582,
- 329, 493, 295, 201, 369, 636, 224, 479, 371, 242,
- 231, 587, 612, 299, 289, 456, 643, 213, 517, 598,
- 239, 483, 0, 0, 651, 247, 504, 610, 599, 215,
- 594, 503, 393, 326, 327, 214, 0, 457, 268, 293,
- 0, 0, 258, 415, 589, 590, 256, 652, 228, 622,
- 220, 0, 621, 408, 584, 595, 394, 383, 219, 593,
- 392, 382, 334, 355, 356, 280, 307, 447, 375, 448,
- 306, 308, 404, 403, 405, 207, 608, 626, 0, 208,
- 0, 499, 611, 653, 452, 212, 234, 235, 237, 0,
- 279, 283, 291, 294, 303, 304, 313, 367, 419, 446,
- 442, 451, 0, 579, 602, 616, 628, 634, 635, 637,
- 638, 639, 640, 641, 644, 642, 407, 311, 495, 333,
- 373, 0, 0, 425, 472, 240, 606, 496, 199, 0,
- 0, 0, 0, 254, 255, 0, 575, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 654, 655, 656, 657,
+ 0, 0, 0, 0, 298, 0, 403, 258, 0, 454,
+ 0, 0, 0, 630, 0, 0, 0, 0, 0, 0,
+ 0, 366, 0, 331, 197, 225, 0, 0, 413, 462,
+ 474, 0, 0, 0, 254, 0, 472, 427, 605, 233,
+ 285, 459, 433, 470, 441, 288, 0, 0, 471, 373,
+ 586, 451, 602, 631, 632, 264, 407, 616, 523, 624,
+ 649, 226, 261, 421, 507, 608, 495, 398, 582, 583,
+ 330, 494, 296, 201, 370, 637, 224, 480, 372, 242,
+ 231, 588, 613, 300, 252, 290, 457, 644, 213, 518,
+ 599, 239, 484, 0, 0, 652, 247, 505, 611, 600,
+ 215, 595, 504, 394, 327, 328, 214, 0, 458, 269,
+ 294, 0, 0, 259, 416, 590, 591, 257, 653, 228,
+ 623, 220, 0, 622, 409, 585, 596, 395, 384, 219,
+ 594, 393, 383, 335, 356, 357, 281, 308, 448, 376,
+ 449, 307, 309, 405, 404, 406, 207, 609, 627, 0,
+ 208, 0, 500, 612, 654, 453, 212, 234, 235, 237,
+ 0, 280, 284, 292, 295, 304, 305, 314, 368, 420,
+ 447, 443, 452, 0, 580, 603, 617, 629, 635, 636,
+ 638, 639, 640, 641, 642, 645, 643, 408, 312, 496,
+ 334, 374, 0, 0, 426, 473, 240, 607, 497, 199,
+ 0, 0, 0, 0, 255, 256, 0, 576, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 655, 656, 657,
658, 659, 660, 661, 662, 663, 664, 665, 666, 667,
- 668, 669, 670, 671, 649, 508, 514, 509, 510, 511,
- 512, 513, 0, 515, 0, 0, 0, 0, 0, 398,
- 0, 591, 592, 672, 384, 486, 603, 335, 349, 352,
- 341, 361, 0, 362, 337, 338, 343, 346, 347, 348,
- 353, 354, 358, 364, 249, 210, 390, 399, 578, 312,
- 216, 217, 218, 524, 525, 526, 527, 619, 620, 624,
- 205, 462, 463, 464, 465, 292, 614, 309, 468, 467,
- 331, 332, 379, 449, 540, 542, 553, 557, 559, 561,
- 567, 570, 541, 543, 554, 558, 560, 562, 568, 571,
- 530, 532, 534, 536, 549, 548, 545, 573, 574, 551,
- 556, 535, 547, 552, 565, 572, 569, 529, 533, 537,
- 546, 564, 563, 544, 555, 566, 550, 538, 531, 539,
- 0, 196, 221, 368, 2080, 454, 288, 650, 618, 484,
- 613, 206, 223, 0, 262, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 198, 200, 209, 222,
- 232, 236, 243, 261, 276, 278, 285, 298, 310, 318,
- 319, 322, 328, 380, 386, 387, 388, 389, 409, 410,
- 411, 414, 417, 418, 421, 423, 424, 427, 431, 435,
- 436, 437, 439, 441, 443, 455, 460, 474, 475, 476,
- 477, 478, 481, 482, 488, 489, 490, 491, 492, 500,
- 501, 516, 586, 588, 605, 625, 632, 480, 301, 302,
- 444, 445, 314, 315, 646, 647, 300, 600, 633, 597,
- 645, 627, 438, 378, 0, 0, 381, 281, 305, 320,
- 0, 617, 502, 227, 466, 290, 251, 0, 0, 211,
- 246, 230, 259, 274, 277, 324, 391, 400, 429, 434,
- 296, 271, 244, 459, 241, 485, 519, 520, 521, 523,
- 395, 266, 433, 396, 0, 376, 576, 577, 316, 0,
- 0, 0, 528, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 416, 0, 0, 0, 0, 0,
- 0, 0, 270, 0, 0, 0, 0, 366, 267, 0,
- 0, 204, 505, 0, 430, 0, 203, 0, 487, 252,
- 377, 374, 583, 282, 273, 269, 250, 317, 385, 428,
- 518, 422, 0, 370, 0, 0, 497, 401, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 323, 248, 325, 202,
- 413, 498, 286, 0, 0, 0, 0, 2071, 507, 724,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 238,
- 0, 0, 245, 0, 0, 0, 351, 360, 359, 339,
- 340, 342, 344, 350, 357, 363, 336, 345, 0, 0,
- 609, 0, 0, 0, 265, 321, 272, 264, 580, 0,
- 0, 0, 0, 0, 0, 596, 0, 0, 229, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 275, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 297, 0, 402, 257, 0,
- 453, 0, 0, 0, 629, 0, 0, 0, 0, 0,
- 0, 0, 365, 0, 330, 197, 225, 0, 0, 412,
- 461, 473, 0, 0, 0, 253, 0, 471, 426, 604,
- 233, 284, 458, 432, 469, 440, 287, 0, 0, 470,
- 372, 585, 450, 601, 630, 631, 263, 406, 615, 522,
- 623, 648, 226, 260, 420, 506, 607, 494, 397, 581,
- 582, 329, 493, 295, 201, 369, 636, 224, 479, 371,
- 242, 231, 587, 612, 299, 289, 456, 643, 213, 517,
- 598, 239, 483, 0, 0, 651, 247, 504, 610, 599,
- 215, 594, 503, 393, 326, 327, 214, 0, 457, 268,
- 293, 0, 0, 258, 415, 589, 590, 256, 652, 228,
- 622, 220, 0, 621, 408, 584, 595, 394, 383, 219,
- 593, 392, 382, 334, 355, 356, 280, 307, 447, 375,
- 448, 306, 308, 404, 403, 405, 207, 608, 626, 0,
- 208, 0, 499, 611, 653, 452, 212, 234, 235, 237,
- 0, 279, 283, 291, 294, 303, 304, 313, 367, 419,
- 446, 442, 451, 0, 579, 602, 616, 628, 634, 635,
- 637, 638, 639, 640, 641, 644, 642, 407, 311, 495,
- 333, 373, 0, 0, 425, 472, 240, 606, 496, 199,
- 0, 0, 0, 0, 254, 255, 0, 575, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 654, 655, 656,
- 657, 658, 659, 660, 661, 662, 663, 664, 665, 666,
- 667, 668, 669, 670, 671, 649, 508, 514, 509, 510,
- 511, 512, 513, 0, 515, 0, 0, 0, 0, 0,
- 398, 0, 591, 592, 672, 384, 486, 603, 335, 349,
- 352, 341, 361, 0, 362, 337, 338, 343, 346, 347,
- 348, 353, 354, 358, 364, 249, 210, 390, 399, 578,
- 312, 216, 217, 218, 524, 525, 526, 527, 619, 620,
- 624, 205, 462, 463, 464, 465, 292, 614, 309, 468,
- 467, 331, 332, 379, 449, 540, 542, 553, 557, 559,
- 561, 567, 570, 541, 543, 554, 558, 560, 562, 568,
- 571, 530, 532, 534, 536, 549, 548, 545, 573, 574,
- 551, 556, 535, 547, 552, 565, 572, 569, 529, 533,
- 537, 546, 564, 563, 544, 555, 566, 550, 538, 531,
- 539, 0, 196, 221, 368, 0, 454, 288, 650, 618,
- 484, 613, 206, 223, 0, 262, 0, 0, 0, 0,
+ 668, 669, 670, 671, 672, 650, 509, 515, 510, 511,
+ 512, 513, 514, 0, 516, 0, 0, 0, 0, 0,
+ 399, 0, 592, 593, 673, 385, 487, 604, 336, 350,
+ 353, 342, 362, 0, 363, 338, 339, 344, 347, 348,
+ 349, 354, 355, 359, 365, 249, 210, 391, 400, 579,
+ 313, 216, 217, 218, 525, 526, 527, 528, 620, 621,
+ 625, 205, 463, 464, 465, 466, 293, 615, 310, 469,
+ 468, 332, 333, 380, 450, 541, 543, 554, 558, 560,
+ 562, 568, 571, 542, 544, 555, 559, 561, 563, 569,
+ 572, 531, 533, 535, 537, 550, 549, 546, 574, 575,
+ 552, 557, 536, 548, 553, 566, 573, 570, 530, 534,
+ 538, 547, 565, 564, 545, 556, 567, 551, 539, 532,
+ 540, 0, 196, 221, 369, 0, 455, 289, 651, 619,
+ 485, 614, 206, 223, 0, 263, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 198, 200, 209,
- 222, 232, 236, 243, 261, 276, 278, 285, 298, 310,
- 318, 319, 322, 328, 380, 386, 387, 388, 389, 409,
- 410, 411, 414, 417, 418, 421, 423, 424, 427, 431,
- 435, 436, 437, 439, 441, 443, 455, 460, 474, 475,
- 476, 477, 478, 481, 482, 488, 489, 490, 491, 492,
- 500, 501, 516, 586, 588, 605, 625, 632, 480, 301,
- 302, 444, 445, 314, 315, 646, 647, 300, 600, 633,
- 597, 645, 627, 438, 378, 0, 0, 381, 281, 305,
- 320, 0, 617, 502, 227, 466, 290, 251, 0, 0,
- 211, 246, 230, 259, 274, 277, 324, 391, 400, 429,
- 434, 296, 271, 244, 459, 241, 485, 519, 520, 521,
- 523, 395, 266, 433, 396, 0, 376, 576, 577, 316,
- 0, 0, 0, 528, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 416, 0, 0, 0, 0,
- 0, 0, 0, 270, 0, 0, 0, 0, 366, 267,
- 0, 1929, 204, 505, 0, 430, 0, 203, 0, 487,
- 252, 377, 374, 583, 282, 273, 269, 250, 317, 385,
- 428, 518, 422, 0, 370, 0, 0, 497, 401, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 323, 248, 325,
- 202, 413, 498, 286, 0, 0, 0, 0, 0, 507,
- 724, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 351, 360, 359,
- 339, 340, 342, 344, 350, 357, 363, 336, 345, 0,
- 0, 609, 0, 0, 0, 265, 321, 272, 264, 580,
- 0, 0, 0, 0, 0, 0, 596, 0, 0, 229,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 275, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 297, 0, 402, 257,
- 0, 453, 0, 0, 0, 629, 0, 0, 0, 0,
- 0, 0, 0, 365, 0, 330, 197, 225, 0, 0,
- 412, 461, 473, 0, 0, 0, 253, 0, 471, 426,
- 604, 233, 284, 458, 432, 469, 440, 287, 0, 0,
- 470, 372, 585, 450, 601, 630, 631, 263, 406, 615,
- 522, 623, 648, 226, 260, 420, 506, 607, 494, 397,
- 581, 582, 329, 493, 295, 201, 369, 636, 224, 479,
- 371, 242, 231, 587, 612, 299, 289, 456, 643, 213,
- 517, 598, 239, 483, 0, 0, 651, 247, 504, 610,
- 599, 215, 594, 503, 393, 326, 327, 214, 0, 457,
- 268, 293, 0, 0, 258, 415, 589, 590, 256, 652,
- 228, 622, 220, 0, 621, 408, 584, 595, 394, 383,
- 219, 593, 392, 382, 334, 355, 356, 280, 307, 447,
- 375, 448, 306, 308, 404, 403, 405, 207, 608, 626,
- 0, 208, 0, 499, 611, 653, 452, 212, 234, 235,
- 237, 0, 279, 283, 291, 294, 303, 304, 313, 367,
- 419, 446, 442, 451, 0, 579, 602, 616, 628, 634,
- 635, 637, 638, 639, 640, 641, 644, 642, 407, 311,
- 495, 333, 373, 0, 0, 425, 472, 240, 606, 496,
- 199, 0, 0, 0, 0, 254, 255, 0, 575, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 654, 655,
+ 222, 232, 236, 243, 262, 277, 279, 286, 299, 311,
+ 319, 320, 323, 329, 381, 387, 388, 389, 390, 410,
+ 411, 412, 415, 418, 419, 422, 424, 425, 428, 432,
+ 436, 437, 438, 440, 442, 444, 456, 461, 475, 476,
+ 477, 478, 479, 482, 483, 489, 490, 491, 492, 493,
+ 501, 502, 517, 587, 589, 606, 626, 633, 481, 302,
+ 303, 445, 446, 315, 316, 647, 648, 301, 601, 634,
+ 598, 646, 628, 439, 379, 0, 0, 382, 282, 306,
+ 321, 0, 618, 503, 227, 467, 291, 251, 0, 0,
+ 211, 246, 230, 260, 275, 278, 325, 392, 401, 430,
+ 435, 297, 272, 244, 460, 241, 486, 520, 521, 522,
+ 524, 396, 267, 434, 397, 0, 377, 577, 578, 317,
+ 0, 0, 0, 529, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 417, 0, 0, 0, 0,
+ 0, 0, 0, 271, 0, 0, 0, 0, 367, 268,
+ 0, 0, 204, 506, 0, 431, 0, 203, 0, 488,
+ 253, 378, 375, 584, 283, 274, 270, 250, 318, 386,
+ 429, 519, 423, 0, 371, 0, 0, 498, 402, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 324, 248, 326,
+ 202, 414, 499, 287, 0, 0, 0, 0, 1781, 508,
+ 725, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 238, 0, 0, 245, 0, 0, 0, 352, 361, 360,
+ 340, 341, 343, 345, 351, 358, 364, 337, 346, 0,
+ 0, 610, 0, 0, 0, 266, 322, 273, 265, 581,
+ 0, 0, 0, 0, 0, 0, 597, 0, 0, 229,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 276, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 298, 0, 403, 258,
+ 0, 454, 0, 0, 0, 630, 0, 0, 0, 0,
+ 0, 0, 0, 366, 0, 331, 197, 225, 0, 0,
+ 413, 462, 474, 0, 0, 0, 254, 0, 472, 427,
+ 605, 233, 285, 459, 433, 470, 441, 288, 0, 0,
+ 471, 373, 586, 451, 602, 631, 632, 264, 407, 616,
+ 523, 624, 649, 226, 261, 421, 507, 608, 495, 398,
+ 582, 583, 330, 494, 296, 201, 370, 637, 224, 480,
+ 372, 242, 231, 588, 613, 300, 252, 290, 457, 644,
+ 213, 518, 599, 239, 484, 0, 0, 652, 247, 505,
+ 611, 600, 215, 595, 504, 394, 327, 328, 214, 0,
+ 458, 269, 294, 0, 0, 259, 416, 590, 591, 257,
+ 653, 228, 623, 220, 0, 622, 409, 585, 596, 395,
+ 384, 219, 594, 393, 383, 335, 356, 357, 281, 308,
+ 448, 376, 449, 307, 309, 405, 404, 406, 207, 609,
+ 627, 0, 208, 0, 500, 612, 654, 453, 212, 234,
+ 235, 237, 0, 280, 284, 292, 295, 304, 305, 314,
+ 368, 420, 447, 443, 452, 0, 580, 603, 617, 629,
+ 635, 636, 638, 639, 640, 641, 642, 645, 643, 408,
+ 312, 496, 334, 374, 0, 0, 426, 473, 240, 607,
+ 497, 199, 0, 0, 0, 0, 255, 256, 0, 576,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 655,
656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
- 666, 667, 668, 669, 670, 671, 649, 508, 514, 509,
- 510, 511, 512, 513, 0, 515, 0, 0, 0, 0,
- 0, 398, 0, 591, 592, 672, 384, 486, 603, 335,
- 349, 352, 341, 361, 0, 362, 337, 338, 343, 346,
- 347, 348, 353, 354, 358, 364, 249, 210, 390, 399,
- 578, 312, 216, 217, 218, 524, 525, 526, 527, 619,
- 620, 624, 205, 462, 463, 464, 465, 292, 614, 309,
- 468, 467, 331, 332, 379, 449, 540, 542, 553, 557,
- 559, 561, 567, 570, 541, 543, 554, 558, 560, 562,
- 568, 571, 530, 532, 534, 536, 549, 548, 545, 573,
- 574, 551, 556, 535, 547, 552, 565, 572, 569, 529,
- 533, 537, 546, 564, 563, 544, 555, 566, 550, 538,
- 531, 539, 0, 196, 221, 368, 0, 454, 288, 650,
- 618, 484, 613, 206, 223, 0, 262, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 198, 200,
- 209, 222, 232, 236, 243, 261, 276, 278, 285, 298,
- 310, 318, 319, 322, 328, 380, 386, 387, 388, 389,
- 409, 410, 411, 414, 417, 418, 421, 423, 424, 427,
- 431, 435, 436, 437, 439, 441, 443, 455, 460, 474,
- 475, 476, 477, 478, 481, 482, 488, 489, 490, 491,
- 492, 500, 501, 516, 586, 588, 605, 625, 632, 480,
- 301, 302, 444, 445, 314, 315, 646, 647, 300, 600,
- 633, 597, 645, 627, 438, 378, 0, 0, 381, 281,
- 305, 320, 0, 617, 502, 227, 466, 290, 251, 0,
- 0, 211, 246, 230, 259, 274, 277, 324, 391, 400,
- 429, 434, 296, 271, 244, 459, 241, 485, 519, 520,
- 521, 523, 395, 266, 433, 396, 0, 376, 576, 577,
- 316, 0, 0, 0, 528, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 416, 0, 0, 0,
- 0, 0, 0, 0, 270, 0, 0, 0, 0, 366,
- 267, 0, 1927, 204, 505, 0, 430, 0, 203, 0,
- 487, 252, 377, 374, 583, 282, 273, 269, 250, 317,
- 385, 428, 518, 422, 0, 370, 0, 0, 497, 401,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 413, 498, 286, 0, 0, 0, 0, 0,
- 507, 724, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 238, 0, 0, 245, 0, 0, 0, 351, 360,
- 359, 339, 340, 342, 344, 350, 357, 363, 336, 345,
- 0, 0, 609, 0, 0, 0, 265, 321, 272, 264,
- 580, 0, 0, 0, 0, 0, 0, 596, 0, 0,
- 229, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 275, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 297, 0, 402,
- 257, 0, 453, 0, 0, 0, 629, 0, 0, 0,
- 0, 0, 0, 0, 365, 0, 330, 197, 225, 0,
- 0, 412, 461, 473, 0, 0, 0, 253, 0, 471,
- 426, 604, 233, 284, 458, 432, 469, 440, 287, 0,
- 0, 470, 372, 585, 450, 601, 630, 631, 263, 406,
- 615, 522, 623, 648, 226, 260, 420, 506, 607, 494,
- 397, 581, 582, 329, 493, 295, 201, 369, 636, 224,
- 479, 371, 242, 231, 587, 612, 299, 289, 456, 643,
- 213, 517, 598, 239, 483, 0, 0, 651, 247, 504,
- 610, 599, 215, 594, 503, 393, 326, 327, 214, 0,
- 457, 268, 293, 0, 0, 258, 415, 589, 590, 256,
- 652, 228, 622, 220, 0, 621, 408, 584, 595, 394,
- 383, 219, 593, 392, 382, 334, 355, 356, 280, 307,
- 447, 375, 448, 306, 308, 404, 403, 405, 207, 608,
- 626, 0, 208, 0, 499, 611, 653, 452, 212, 234,
- 235, 237, 0, 279, 283, 291, 294, 303, 304, 313,
- 367, 419, 446, 442, 451, 0, 579, 602, 616, 628,
- 634, 635, 637, 638, 639, 640, 641, 644, 642, 407,
- 311, 495, 333, 373, 0, 0, 425, 472, 240, 606,
- 496, 199, 0, 0, 0, 0, 254, 255, 0, 575,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 665, 666, 667, 668, 669, 670, 671, 649, 508, 514,
- 509, 510, 511, 512, 513, 0, 515, 0, 0, 0,
- 0, 0, 398, 0, 591, 592, 672, 384, 486, 603,
- 335, 349, 352, 341, 361, 0, 362, 337, 338, 343,
- 346, 347, 348, 353, 354, 358, 364, 249, 210, 390,
- 399, 578, 312, 216, 217, 218, 524, 525, 526, 527,
- 619, 620, 624, 205, 462, 463, 464, 465, 292, 614,
- 309, 468, 467, 331, 332, 379, 449, 540, 542, 553,
- 557, 559, 561, 567, 570, 541, 543, 554, 558, 560,
- 562, 568, 571, 530, 532, 534, 536, 549, 548, 545,
- 573, 574, 551, 556, 535, 547, 552, 565, 572, 569,
- 529, 533, 537, 546, 564, 563, 544, 555, 566, 550,
- 538, 531, 539, 0, 196, 221, 368, 0, 454, 288,
- 650, 618, 484, 613, 206, 223, 0, 262, 0, 0,
+ 666, 667, 668, 669, 670, 671, 672, 650, 509, 515,
+ 510, 511, 512, 513, 514, 0, 516, 0, 0, 0,
+ 0, 0, 399, 0, 592, 593, 673, 385, 487, 604,
+ 336, 350, 353, 342, 362, 0, 363, 338, 339, 344,
+ 347, 348, 349, 354, 355, 359, 365, 249, 210, 391,
+ 400, 579, 313, 216, 217, 218, 525, 526, 527, 528,
+ 620, 621, 625, 205, 463, 464, 465, 466, 293, 615,
+ 310, 469, 468, 332, 333, 380, 450, 541, 543, 554,
+ 558, 560, 562, 568, 571, 542, 544, 555, 559, 561,
+ 563, 569, 572, 531, 533, 535, 537, 550, 549, 546,
+ 574, 575, 552, 557, 536, 548, 553, 566, 573, 570,
+ 530, 534, 538, 547, 565, 564, 545, 556, 567, 551,
+ 539, 532, 540, 0, 196, 221, 369, 0, 455, 289,
+ 651, 619, 485, 614, 206, 223, 0, 263, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 198,
- 200, 209, 222, 232, 236, 243, 261, 276, 278, 285,
- 298, 310, 318, 319, 322, 328, 380, 386, 387, 388,
- 389, 409, 410, 411, 414, 417, 418, 421, 423, 424,
- 427, 431, 435, 436, 437, 439, 441, 443, 455, 460,
- 474, 475, 476, 477, 478, 481, 482, 488, 489, 490,
- 491, 492, 500, 501, 516, 586, 588, 605, 625, 632,
- 480, 301, 302, 444, 445, 314, 315, 646, 647, 300,
- 600, 633, 597, 645, 627, 438, 378, 0, 0, 381,
- 281, 305, 320, 0, 617, 502, 227, 466, 290, 251,
- 0, 0, 211, 246, 230, 259, 274, 277, 324, 391,
- 400, 429, 434, 296, 271, 244, 459, 241, 485, 519,
- 520, 521, 523, 395, 266, 433, 396, 0, 376, 576,
- 577, 316, 0, 0, 0, 528, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 416, 0, 0,
- 0, 0, 0, 0, 0, 270, 0, 0, 0, 0,
- 366, 267, 0, 1925, 204, 505, 0, 430, 0, 203,
- 0, 487, 252, 377, 374, 583, 282, 273, 269, 250,
- 317, 385, 428, 518, 422, 0, 370, 0, 0, 497,
- 401, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 323,
- 248, 325, 202, 413, 498, 286, 0, 0, 0, 0,
- 0, 507, 724, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 238, 0, 0, 245, 0, 0, 0, 351,
- 360, 359, 339, 340, 342, 344, 350, 357, 363, 336,
- 345, 0, 0, 609, 0, 0, 0, 265, 321, 272,
- 264, 580, 0, 0, 0, 0, 0, 0, 596, 0,
+ 200, 209, 222, 232, 236, 243, 262, 277, 279, 286,
+ 299, 311, 319, 320, 323, 329, 381, 387, 388, 389,
+ 390, 410, 411, 412, 415, 418, 419, 422, 424, 425,
+ 428, 432, 436, 437, 438, 440, 442, 444, 456, 461,
+ 475, 476, 477, 478, 479, 482, 483, 489, 490, 491,
+ 492, 493, 501, 502, 517, 587, 589, 606, 626, 633,
+ 481, 302, 303, 445, 446, 315, 316, 647, 648, 301,
+ 601, 634, 598, 646, 628, 439, 379, 0, 0, 382,
+ 282, 306, 321, 0, 618, 503, 227, 467, 291, 251,
+ 0, 0, 211, 246, 230, 260, 275, 278, 325, 392,
+ 401, 430, 435, 297, 272, 244, 460, 241, 486, 520,
+ 521, 522, 524, 396, 267, 434, 397, 0, 377, 577,
+ 578, 317, 0, 0, 0, 529, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 417, 0, 0,
+ 0, 0, 0, 0, 0, 271, 0, 0, 0, 0,
+ 367, 268, 0, 0, 204, 506, 0, 431, 0, 203,
+ 0, 488, 253, 378, 375, 584, 283, 274, 270, 250,
+ 318, 386, 429, 519, 423, 0, 371, 0, 0, 498,
+ 402, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 324,
+ 248, 326, 202, 414, 499, 287, 0, 0, 0, 0,
+ 0, 508, 194, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 238, 0, 0, 245, 0, 0, 0, 352,
+ 361, 360, 340, 341, 343, 345, 351, 358, 364, 337,
+ 346, 0, 0, 610, 0, 0, 0, 266, 322, 273,
+ 265, 581, 0, 0, 0, 0, 0, 0, 597, 0,
0, 229, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 275, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 297, 0,
- 402, 257, 0, 453, 0, 0, 0, 629, 0, 0,
- 0, 0, 0, 0, 0, 365, 0, 330, 197, 225,
- 0, 0, 412, 461, 473, 0, 0, 0, 253, 0,
- 471, 426, 604, 233, 284, 458, 432, 469, 440, 287,
- 0, 0, 470, 372, 585, 450, 601, 630, 631, 263,
- 406, 615, 522, 623, 648, 226, 260, 420, 506, 607,
- 494, 397, 581, 582, 329, 493, 295, 201, 369, 636,
- 224, 479, 371, 242, 231, 587, 612, 299, 289, 456,
- 643, 213, 517, 598, 239, 483, 0, 0, 651, 247,
- 504, 610, 599, 215, 594, 503, 393, 326, 327, 214,
- 0, 457, 268, 293, 0, 0, 258, 415, 589, 590,
- 256, 652, 228, 622, 220, 0, 621, 408, 584, 595,
- 394, 383, 219, 593, 392, 382, 334, 355, 356, 280,
- 307, 447, 375, 448, 306, 308, 404, 403, 405, 207,
- 608, 626, 0, 208, 0, 499, 611, 653, 452, 212,
- 234, 235, 237, 0, 279, 283, 291, 294, 303, 304,
- 313, 367, 419, 446, 442, 451, 0, 579, 602, 616,
- 628, 634, 635, 637, 638, 639, 640, 641, 644, 642,
- 407, 311, 495, 333, 373, 0, 0, 425, 472, 240,
- 606, 496, 199, 0, 0, 0, 0, 254, 255, 0,
- 575, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 654, 655, 656, 657, 658, 659, 660, 661, 662, 663,
- 664, 665, 666, 667, 668, 669, 670, 671, 649, 508,
- 514, 509, 510, 511, 512, 513, 0, 515, 0, 0,
- 0, 0, 0, 398, 0, 591, 592, 672, 384, 486,
- 603, 335, 349, 352, 341, 361, 0, 362, 337, 338,
- 343, 346, 347, 348, 353, 354, 358, 364, 249, 210,
- 390, 399, 578, 312, 216, 217, 218, 524, 525, 526,
- 527, 619, 620, 624, 205, 462, 463, 464, 465, 292,
- 614, 309, 468, 467, 331, 332, 379, 449, 540, 542,
- 553, 557, 559, 561, 567, 570, 541, 543, 554, 558,
- 560, 562, 568, 571, 530, 532, 534, 536, 549, 548,
- 545, 573, 574, 551, 556, 535, 547, 552, 565, 572,
- 569, 529, 533, 537, 546, 564, 563, 544, 555, 566,
- 550, 538, 531, 539, 0, 196, 221, 368, 0, 454,
- 288, 650, 618, 484, 613, 206, 223, 0, 262, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 198, 200, 209, 222, 232, 236, 243, 261, 276, 278,
- 285, 298, 310, 318, 319, 322, 328, 380, 386, 387,
- 388, 389, 409, 410, 411, 414, 417, 418, 421, 423,
- 424, 427, 431, 435, 436, 437, 439, 441, 443, 455,
- 460, 474, 475, 476, 477, 478, 481, 482, 488, 489,
- 490, 491, 492, 500, 501, 516, 586, 588, 605, 625,
- 632, 480, 301, 302, 444, 445, 314, 315, 646, 647,
- 300, 600, 633, 597, 645, 627, 438, 378, 0, 0,
- 381, 281, 305, 320, 0, 617, 502, 227, 466, 290,
- 251, 0, 0, 211, 246, 230, 259, 274, 277, 324,
- 391, 400, 429, 434, 296, 271, 244, 459, 241, 485,
- 519, 520, 521, 523, 395, 266, 433, 396, 0, 376,
- 576, 577, 316, 0, 0, 0, 528, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 416, 0,
- 0, 0, 0, 0, 0, 0, 270, 0, 0, 0,
- 0, 366, 267, 0, 1923, 204, 505, 0, 430, 0,
- 203, 0, 487, 252, 377, 374, 583, 282, 273, 269,
- 250, 317, 385, 428, 518, 422, 0, 370, 0, 0,
- 497, 401, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 323, 248, 325, 202, 413, 498, 286, 0, 0, 0,
- 0, 0, 507, 724, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 238, 0, 0, 245, 0, 0, 0,
- 351, 360, 359, 339, 340, 342, 344, 350, 357, 363,
- 336, 345, 0, 0, 609, 0, 0, 0, 265, 321,
- 272, 264, 580, 0, 0, 0, 0, 0, 0, 596,
- 0, 0, 229, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 275, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 297,
- 0, 402, 257, 0, 453, 0, 0, 0, 629, 0,
- 0, 0, 0, 0, 0, 0, 365, 0, 330, 197,
- 225, 0, 0, 412, 461, 473, 0, 0, 0, 253,
- 0, 471, 426, 604, 233, 284, 458, 432, 469, 440,
- 287, 0, 0, 470, 372, 585, 450, 601, 630, 631,
- 263, 406, 615, 522, 623, 648, 226, 260, 420, 506,
- 607, 494, 397, 581, 582, 329, 493, 295, 201, 369,
- 636, 224, 479, 371, 242, 231, 587, 612, 299, 289,
- 456, 643, 213, 517, 598, 239, 483, 0, 0, 651,
- 247, 504, 610, 599, 215, 594, 503, 393, 326, 327,
- 214, 0, 457, 268, 293, 0, 0, 258, 415, 589,
- 590, 256, 652, 228, 622, 220, 0, 621, 408, 584,
- 595, 394, 383, 219, 593, 392, 382, 334, 355, 356,
- 280, 307, 447, 375, 448, 306, 308, 404, 403, 405,
- 207, 608, 626, 0, 208, 0, 499, 611, 653, 452,
- 212, 234, 235, 237, 0, 279, 283, 291, 294, 303,
- 304, 313, 367, 419, 446, 442, 451, 0, 579, 602,
- 616, 628, 634, 635, 637, 638, 639, 640, 641, 644,
- 642, 407, 311, 495, 333, 373, 0, 0, 425, 472,
- 240, 606, 496, 199, 0, 0, 0, 0, 254, 255,
- 0, 575, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 654, 655, 656, 657, 658, 659, 660, 661, 662,
- 663, 664, 665, 666, 667, 668, 669, 670, 671, 649,
- 508, 514, 509, 510, 511, 512, 513, 0, 515, 0,
- 0, 0, 0, 0, 398, 0, 591, 592, 672, 384,
- 486, 603, 335, 349, 352, 341, 361, 0, 362, 337,
- 338, 343, 346, 347, 348, 353, 354, 358, 364, 249,
- 210, 390, 399, 578, 312, 216, 217, 218, 524, 525,
- 526, 527, 619, 620, 624, 205, 462, 463, 464, 465,
- 292, 614, 309, 468, 467, 331, 332, 379, 449, 540,
- 542, 553, 557, 559, 561, 567, 570, 541, 543, 554,
- 558, 560, 562, 568, 571, 530, 532, 534, 536, 549,
- 548, 545, 573, 574, 551, 556, 535, 547, 552, 565,
- 572, 569, 529, 533, 537, 546, 564, 563, 544, 555,
- 566, 550, 538, 531, 539, 0, 196, 221, 368, 0,
- 454, 288, 650, 618, 484, 613, 206, 223, 0, 262,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 198, 200, 209, 222, 232, 236, 243, 261, 276,
- 278, 285, 298, 310, 318, 319, 322, 328, 380, 386,
- 387, 388, 389, 409, 410, 411, 414, 417, 418, 421,
- 423, 424, 427, 431, 435, 436, 437, 439, 441, 443,
- 455, 460, 474, 475, 476, 477, 478, 481, 482, 488,
- 489, 490, 491, 492, 500, 501, 516, 586, 588, 605,
- 625, 632, 480, 301, 302, 444, 445, 314, 315, 646,
- 647, 300, 600, 633, 597, 645, 627, 438, 378, 0,
- 0, 381, 281, 305, 320, 0, 617, 502, 227, 466,
- 290, 251, 0, 0, 211, 246, 230, 259, 274, 277,
- 324, 391, 400, 429, 434, 296, 271, 244, 459, 241,
- 485, 519, 520, 521, 523, 395, 266, 433, 396, 0,
- 376, 576, 577, 316, 0, 0, 0, 528, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 416,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 366, 267, 0, 1921, 204, 505, 0, 430,
- 0, 203, 0, 487, 252, 377, 374, 583, 282, 273,
- 269, 250, 317, 385, 428, 518, 422, 0, 370, 0,
- 0, 497, 401, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 323, 248, 325, 202, 413, 498, 286, 0, 0,
- 0, 0, 0, 507, 724, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 276, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 298, 0,
+ 403, 258, 0, 454, 0, 0, 0, 630, 0, 0,
+ 0, 0, 0, 0, 0, 366, 0, 331, 197, 225,
+ 0, 0, 413, 462, 474, 0, 0, 0, 254, 0,
+ 472, 427, 605, 233, 285, 459, 433, 470, 441, 288,
+ 0, 0, 471, 373, 586, 451, 602, 631, 632, 264,
+ 407, 616, 523, 624, 649, 226, 261, 421, 507, 608,
+ 495, 398, 582, 583, 330, 494, 296, 201, 370, 637,
+ 224, 480, 372, 242, 231, 588, 613, 300, 252, 290,
+ 457, 644, 213, 518, 599, 239, 484, 0, 0, 652,
+ 247, 505, 611, 600, 215, 595, 504, 394, 327, 328,
+ 214, 0, 458, 269, 294, 0, 0, 259, 416, 590,
+ 591, 257, 653, 228, 623, 220, 0, 622, 409, 585,
+ 596, 395, 384, 219, 594, 393, 383, 335, 356, 357,
+ 281, 308, 448, 376, 449, 307, 309, 405, 404, 406,
+ 207, 609, 627, 0, 208, 0, 500, 612, 654, 453,
+ 212, 234, 235, 237, 0, 280, 284, 292, 295, 304,
+ 305, 314, 368, 420, 447, 443, 452, 0, 580, 603,
+ 617, 629, 635, 636, 638, 639, 640, 641, 642, 645,
+ 643, 408, 312, 496, 334, 374, 0, 0, 426, 473,
+ 240, 607, 497, 199, 0, 0, 0, 0, 255, 256,
+ 0, 576, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 655, 656, 657, 658, 659, 660, 661, 662, 663,
+ 664, 665, 666, 667, 668, 669, 670, 671, 672, 650,
+ 509, 515, 510, 511, 512, 513, 514, 0, 516, 0,
+ 0, 0, 0, 0, 399, 0, 592, 593, 673, 385,
+ 487, 604, 336, 350, 353, 342, 362, 0, 363, 338,
+ 339, 344, 347, 348, 349, 354, 355, 359, 365, 249,
+ 210, 391, 400, 579, 313, 216, 217, 218, 525, 526,
+ 527, 528, 620, 621, 625, 205, 463, 464, 465, 466,
+ 293, 615, 310, 469, 468, 332, 333, 380, 450, 541,
+ 543, 554, 558, 560, 562, 568, 571, 542, 544, 555,
+ 559, 561, 563, 569, 572, 531, 533, 535, 537, 550,
+ 549, 546, 574, 575, 552, 557, 536, 548, 553, 566,
+ 573, 570, 530, 534, 538, 547, 565, 564, 545, 556,
+ 567, 551, 539, 532, 540, 0, 196, 221, 369, 2080,
+ 455, 289, 651, 619, 485, 614, 206, 223, 0, 263,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 198, 200, 209, 222, 232, 236, 243, 262, 277,
+ 279, 286, 299, 311, 319, 320, 323, 329, 381, 387,
+ 388, 389, 390, 410, 411, 412, 415, 418, 419, 422,
+ 424, 425, 428, 432, 436, 437, 438, 440, 442, 444,
+ 456, 461, 475, 476, 477, 478, 479, 482, 483, 489,
+ 490, 491, 492, 493, 501, 502, 517, 587, 589, 606,
+ 626, 633, 481, 302, 303, 445, 446, 315, 316, 647,
+ 648, 301, 601, 634, 598, 646, 628, 439, 379, 0,
+ 0, 382, 282, 306, 321, 0, 618, 503, 227, 467,
+ 291, 251, 0, 0, 211, 246, 230, 260, 275, 278,
+ 325, 392, 401, 430, 435, 297, 272, 244, 460, 241,
+ 486, 520, 521, 522, 524, 396, 267, 434, 397, 0,
+ 377, 577, 578, 317, 0, 0, 0, 529, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 417,
+ 0, 0, 0, 0, 0, 0, 0, 271, 0, 0,
+ 0, 0, 367, 268, 0, 0, 204, 506, 0, 431,
+ 0, 203, 0, 488, 253, 378, 375, 584, 283, 274,
+ 270, 250, 318, 386, 429, 519, 423, 0, 371, 0,
+ 0, 498, 402, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 324, 248, 326, 202, 414, 499, 287, 0, 0,
+ 0, 0, 2071, 508, 725, 0, 0, 0, 0, 0,
0, 0, 0, 0, 238, 0, 0, 245, 0, 0,
- 0, 351, 360, 359, 339, 340, 342, 344, 350, 357,
- 363, 336, 345, 0, 0, 609, 0, 0, 0, 265,
- 321, 272, 264, 580, 0, 0, 0, 0, 0, 0,
- 596, 0, 0, 229, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 275, 0,
+ 0, 352, 361, 360, 340, 341, 343, 345, 351, 358,
+ 364, 337, 346, 0, 0, 610, 0, 0, 0, 266,
+ 322, 273, 265, 581, 0, 0, 0, 0, 0, 0,
+ 597, 0, 0, 229, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 276, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6407,147 +6013,73 @@ var yyAct = [...]int{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 297, 0, 402, 257, 0, 453, 0, 0, 0, 629,
- 0, 0, 0, 0, 0, 0, 0, 365, 0, 330,
- 197, 225, 0, 0, 412, 461, 473, 0, 0, 0,
- 253, 0, 471, 426, 604, 233, 284, 458, 432, 469,
- 440, 287, 0, 0, 470, 372, 585, 450, 601, 630,
- 631, 263, 406, 615, 522, 623, 648, 226, 260, 420,
- 506, 607, 494, 397, 581, 582, 329, 493, 295, 201,
- 369, 636, 224, 479, 371, 242, 231, 587, 612, 299,
- 289, 456, 643, 213, 517, 598, 239, 483, 0, 0,
- 651, 247, 504, 610, 599, 215, 594, 503, 393, 326,
- 327, 214, 0, 457, 268, 293, 0, 0, 258, 415,
- 589, 590, 256, 652, 228, 622, 220, 0, 621, 408,
- 584, 595, 394, 383, 219, 593, 392, 382, 334, 355,
- 356, 280, 307, 447, 375, 448, 306, 308, 404, 403,
- 405, 207, 608, 626, 0, 208, 0, 499, 611, 653,
- 452, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 367, 419, 446, 442, 451, 0, 579,
- 602, 616, 628, 634, 635, 637, 638, 639, 640, 641,
- 644, 642, 407, 311, 495, 333, 373, 0, 0, 425,
- 472, 240, 606, 496, 199, 0, 0, 0, 0, 254,
- 255, 0, 575, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 654, 655, 656, 657, 658, 659, 660, 661,
+ 298, 0, 403, 258, 0, 454, 0, 0, 0, 630,
+ 0, 0, 0, 0, 0, 0, 0, 366, 0, 331,
+ 197, 225, 0, 0, 413, 462, 474, 0, 0, 0,
+ 254, 0, 472, 427, 605, 233, 285, 459, 433, 470,
+ 441, 288, 0, 0, 471, 373, 586, 451, 602, 631,
+ 632, 264, 407, 616, 523, 624, 649, 226, 261, 421,
+ 507, 608, 495, 398, 582, 583, 330, 494, 296, 201,
+ 370, 637, 224, 480, 372, 242, 231, 588, 613, 300,
+ 252, 290, 457, 644, 213, 518, 599, 239, 484, 0,
+ 0, 652, 247, 505, 611, 600, 215, 595, 504, 394,
+ 327, 328, 214, 0, 458, 269, 294, 0, 0, 259,
+ 416, 590, 591, 257, 653, 228, 623, 220, 0, 622,
+ 409, 585, 596, 395, 384, 219, 594, 393, 383, 335,
+ 356, 357, 281, 308, 448, 376, 449, 307, 309, 405,
+ 404, 406, 207, 609, 627, 0, 208, 0, 500, 612,
+ 654, 453, 212, 234, 235, 237, 0, 280, 284, 292,
+ 295, 304, 305, 314, 368, 420, 447, 443, 452, 0,
+ 580, 603, 617, 629, 635, 636, 638, 639, 640, 641,
+ 642, 645, 643, 408, 312, 496, 334, 374, 0, 0,
+ 426, 473, 240, 607, 497, 199, 0, 0, 0, 0,
+ 255, 256, 0, 576, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 655, 656, 657, 658, 659, 660, 661,
662, 663, 664, 665, 666, 667, 668, 669, 670, 671,
- 649, 508, 514, 509, 510, 511, 512, 513, 0, 515,
- 0, 0, 0, 0, 0, 398, 0, 591, 592, 672,
- 384, 486, 603, 335, 349, 352, 341, 361, 0, 362,
- 337, 338, 343, 346, 347, 348, 353, 354, 358, 364,
- 249, 210, 390, 399, 578, 312, 216, 217, 218, 524,
- 525, 526, 527, 619, 620, 624, 205, 462, 463, 464,
- 465, 292, 614, 309, 468, 467, 331, 332, 379, 449,
- 540, 542, 553, 557, 559, 561, 567, 570, 541, 543,
- 554, 558, 560, 562, 568, 571, 530, 532, 534, 536,
- 549, 548, 545, 573, 574, 551, 556, 535, 547, 552,
- 565, 572, 569, 529, 533, 537, 546, 564, 563, 544,
- 555, 566, 550, 538, 531, 539, 0, 196, 221, 368,
- 0, 454, 288, 650, 618, 484, 613, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 380,
- 386, 387, 388, 389, 409, 410, 411, 414, 417, 418,
- 421, 423, 424, 427, 431, 435, 436, 437, 439, 441,
- 443, 455, 460, 474, 475, 476, 477, 478, 481, 482,
- 488, 489, 490, 491, 492, 500, 501, 516, 586, 588,
- 605, 625, 632, 480, 301, 302, 444, 445, 314, 315,
- 646, 647, 300, 600, 633, 597, 645, 627, 438, 378,
- 0, 0, 381, 281, 305, 320, 0, 617, 502, 227,
- 466, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 391, 400, 429, 434, 296, 271, 244, 459,
- 241, 485, 519, 520, 521, 523, 395, 266, 433, 396,
- 0, 376, 576, 577, 316, 0, 0, 0, 528, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 416, 0, 0, 0, 0, 0, 0, 0, 270, 0,
- 0, 0, 0, 366, 267, 0, 1917, 204, 505, 0,
- 430, 0, 203, 0, 487, 252, 377, 374, 583, 282,
- 273, 269, 250, 317, 385, 428, 518, 422, 0, 370,
- 0, 0, 497, 401, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 323, 248, 325, 202, 413, 498, 286, 0,
- 0, 0, 0, 0, 507, 724, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 238, 0, 0, 245, 0,
- 0, 0, 351, 360, 359, 339, 340, 342, 344, 350,
- 357, 363, 336, 345, 0, 0, 609, 0, 0, 0,
- 265, 321, 272, 264, 580, 0, 0, 0, 0, 0,
- 0, 596, 0, 0, 229, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 275,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 297, 0, 402, 257, 0, 453, 0, 0, 0,
- 629, 0, 0, 0, 0, 0, 0, 0, 365, 0,
- 330, 197, 225, 0, 0, 412, 461, 473, 0, 0,
- 0, 253, 0, 471, 426, 604, 233, 284, 458, 432,
- 469, 440, 287, 0, 0, 470, 372, 585, 450, 601,
- 630, 631, 263, 406, 615, 522, 623, 648, 226, 260,
- 420, 506, 607, 494, 397, 581, 582, 329, 493, 295,
- 201, 369, 636, 224, 479, 371, 242, 231, 587, 612,
- 299, 289, 456, 643, 213, 517, 598, 239, 483, 0,
- 0, 651, 247, 504, 610, 599, 215, 594, 503, 393,
- 326, 327, 214, 0, 457, 268, 293, 0, 0, 258,
- 415, 589, 590, 256, 652, 228, 622, 220, 0, 621,
- 408, 584, 595, 394, 383, 219, 593, 392, 382, 334,
- 355, 356, 280, 307, 447, 375, 448, 306, 308, 404,
- 403, 405, 207, 608, 626, 0, 208, 0, 499, 611,
- 653, 452, 212, 234, 235, 237, 0, 279, 283, 291,
- 294, 303, 304, 313, 367, 419, 446, 442, 451, 0,
- 579, 602, 616, 628, 634, 635, 637, 638, 639, 640,
- 641, 644, 642, 407, 311, 495, 333, 373, 0, 0,
- 425, 472, 240, 606, 496, 199, 0, 0, 0, 0,
- 254, 255, 0, 575, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 654, 655, 656, 657, 658, 659, 660,
- 661, 662, 663, 664, 665, 666, 667, 668, 669, 670,
- 671, 649, 508, 514, 509, 510, 511, 512, 513, 0,
- 515, 0, 0, 0, 0, 0, 398, 0, 591, 592,
- 672, 384, 486, 603, 335, 349, 352, 341, 361, 0,
- 362, 337, 338, 343, 346, 347, 348, 353, 354, 358,
- 364, 249, 210, 390, 399, 578, 312, 216, 217, 218,
- 524, 525, 526, 527, 619, 620, 624, 205, 462, 463,
- 464, 465, 292, 614, 309, 468, 467, 331, 332, 379,
- 449, 540, 542, 553, 557, 559, 561, 567, 570, 541,
- 543, 554, 558, 560, 562, 568, 571, 530, 532, 534,
- 536, 549, 548, 545, 573, 574, 551, 556, 535, 547,
- 552, 565, 572, 569, 529, 533, 537, 546, 564, 563,
- 544, 555, 566, 550, 538, 531, 539, 0, 196, 221,
- 368, 0, 454, 288, 650, 618, 484, 613, 206, 223,
- 0, 262, 0, 0, 0, 0, 0, 0, 0, 0,
+ 672, 650, 509, 515, 510, 511, 512, 513, 514, 0,
+ 516, 0, 0, 0, 0, 0, 399, 0, 592, 593,
+ 673, 385, 487, 604, 336, 350, 353, 342, 362, 0,
+ 363, 338, 339, 344, 347, 348, 349, 354, 355, 359,
+ 365, 249, 210, 391, 400, 579, 313, 216, 217, 218,
+ 525, 526, 527, 528, 620, 621, 625, 205, 463, 464,
+ 465, 466, 293, 615, 310, 469, 468, 332, 333, 380,
+ 450, 541, 543, 554, 558, 560, 562, 568, 571, 542,
+ 544, 555, 559, 561, 563, 569, 572, 531, 533, 535,
+ 537, 550, 549, 546, 574, 575, 552, 557, 536, 548,
+ 553, 566, 573, 570, 530, 534, 538, 547, 565, 564,
+ 545, 556, 567, 551, 539, 532, 540, 0, 196, 221,
+ 369, 0, 455, 289, 651, 619, 485, 614, 206, 223,
+ 0, 263, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 198, 200, 209, 222, 232, 236, 243,
- 261, 276, 278, 285, 298, 310, 318, 319, 322, 328,
- 380, 386, 387, 388, 389, 409, 410, 411, 414, 417,
- 418, 421, 423, 424, 427, 431, 435, 436, 437, 439,
- 441, 443, 455, 460, 474, 475, 476, 477, 478, 481,
- 482, 488, 489, 490, 491, 492, 500, 501, 516, 586,
- 588, 605, 625, 632, 480, 301, 302, 444, 445, 314,
- 315, 646, 647, 300, 600, 633, 597, 645, 627, 438,
- 378, 0, 0, 381, 281, 305, 320, 0, 617, 502,
- 227, 466, 290, 251, 0, 0, 211, 246, 230, 259,
- 274, 277, 324, 391, 400, 429, 434, 296, 271, 244,
- 459, 241, 485, 519, 520, 521, 523, 395, 266, 433,
- 396, 0, 376, 576, 577, 316, 0, 0, 0, 528,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 416, 0, 0, 0, 0, 0, 0, 0, 270,
- 0, 0, 0, 0, 366, 267, 0, 1915, 204, 505,
- 0, 430, 0, 203, 0, 487, 252, 377, 374, 583,
- 282, 273, 269, 250, 317, 385, 428, 518, 422, 0,
- 370, 0, 0, 497, 401, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 323, 248, 325, 202, 413, 498, 286,
- 0, 0, 0, 0, 0, 507, 724, 0, 0, 0,
+ 262, 277, 279, 286, 299, 311, 319, 320, 323, 329,
+ 381, 387, 388, 389, 390, 410, 411, 412, 415, 418,
+ 419, 422, 424, 425, 428, 432, 436, 437, 438, 440,
+ 442, 444, 456, 461, 475, 476, 477, 478, 479, 482,
+ 483, 489, 490, 491, 492, 493, 501, 502, 517, 587,
+ 589, 606, 626, 633, 481, 302, 303, 445, 446, 315,
+ 316, 647, 648, 301, 601, 634, 598, 646, 628, 439,
+ 379, 0, 0, 382, 282, 306, 321, 0, 618, 503,
+ 227, 467, 291, 251, 0, 0, 211, 246, 230, 260,
+ 275, 278, 325, 392, 401, 430, 435, 297, 272, 244,
+ 460, 241, 486, 520, 521, 522, 524, 396, 267, 434,
+ 397, 0, 377, 577, 578, 317, 0, 0, 0, 529,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 417, 0, 0, 0, 0, 0, 0, 0, 271,
+ 0, 0, 0, 0, 367, 268, 0, 1929, 204, 506,
+ 0, 431, 0, 203, 0, 488, 253, 378, 375, 584,
+ 283, 274, 270, 250, 318, 386, 429, 519, 423, 0,
+ 371, 0, 0, 498, 402, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 324, 248, 326, 202, 414, 499, 287,
+ 0, 0, 0, 0, 0, 508, 725, 0, 0, 0,
0, 0, 0, 0, 0, 0, 238, 0, 0, 245,
- 0, 0, 0, 351, 360, 359, 339, 340, 342, 344,
- 350, 357, 363, 336, 345, 0, 0, 609, 0, 0,
- 0, 265, 321, 272, 264, 580, 0, 0, 0, 0,
- 0, 0, 596, 0, 0, 229, 0, 0, 0, 0,
+ 0, 0, 0, 352, 361, 360, 340, 341, 343, 345,
+ 351, 358, 364, 337, 346, 0, 0, 610, 0, 0,
+ 0, 266, 322, 273, 265, 581, 0, 0, 0, 0,
+ 0, 0, 597, 0, 0, 229, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 275, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 276, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6555,147 +6087,73 @@ var yyAct = [...]int{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 297, 0, 402, 257, 0, 453, 0, 0,
- 0, 629, 0, 0, 0, 0, 0, 0, 0, 365,
- 0, 330, 197, 225, 0, 0, 412, 461, 473, 0,
- 0, 0, 253, 0, 471, 426, 604, 233, 284, 458,
- 432, 469, 440, 287, 0, 0, 470, 372, 585, 450,
- 601, 630, 631, 263, 406, 615, 522, 623, 648, 226,
- 260, 420, 506, 607, 494, 397, 581, 582, 329, 493,
- 295, 201, 369, 636, 224, 479, 371, 242, 231, 587,
- 612, 299, 289, 456, 643, 213, 517, 598, 239, 483,
- 0, 0, 651, 247, 504, 610, 599, 215, 594, 503,
- 393, 326, 327, 214, 0, 457, 268, 293, 0, 0,
- 258, 415, 589, 590, 256, 652, 228, 622, 220, 0,
- 621, 408, 584, 595, 394, 383, 219, 593, 392, 382,
- 334, 355, 356, 280, 307, 447, 375, 448, 306, 308,
- 404, 403, 405, 207, 608, 626, 0, 208, 0, 499,
- 611, 653, 452, 212, 234, 235, 237, 0, 279, 283,
- 291, 294, 303, 304, 313, 367, 419, 446, 442, 451,
- 0, 579, 602, 616, 628, 634, 635, 637, 638, 639,
- 640, 641, 644, 642, 407, 311, 495, 333, 373, 0,
- 0, 425, 472, 240, 606, 496, 199, 0, 0, 0,
- 0, 254, 255, 0, 575, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 654, 655, 656, 657, 658, 659,
+ 0, 0, 298, 0, 403, 258, 0, 454, 0, 0,
+ 0, 630, 0, 0, 0, 0, 0, 0, 0, 366,
+ 0, 331, 197, 225, 0, 0, 413, 462, 474, 0,
+ 0, 0, 254, 0, 472, 427, 605, 233, 285, 459,
+ 433, 470, 441, 288, 0, 0, 471, 373, 586, 451,
+ 602, 631, 632, 264, 407, 616, 523, 624, 649, 226,
+ 261, 421, 507, 608, 495, 398, 582, 583, 330, 494,
+ 296, 201, 370, 637, 224, 480, 372, 242, 231, 588,
+ 613, 300, 252, 290, 457, 644, 213, 518, 599, 239,
+ 484, 0, 0, 652, 247, 505, 611, 600, 215, 595,
+ 504, 394, 327, 328, 214, 0, 458, 269, 294, 0,
+ 0, 259, 416, 590, 591, 257, 653, 228, 623, 220,
+ 0, 622, 409, 585, 596, 395, 384, 219, 594, 393,
+ 383, 335, 356, 357, 281, 308, 448, 376, 449, 307,
+ 309, 405, 404, 406, 207, 609, 627, 0, 208, 0,
+ 500, 612, 654, 453, 212, 234, 235, 237, 0, 280,
+ 284, 292, 295, 304, 305, 314, 368, 420, 447, 443,
+ 452, 0, 580, 603, 617, 629, 635, 636, 638, 639,
+ 640, 641, 642, 645, 643, 408, 312, 496, 334, 374,
+ 0, 0, 426, 473, 240, 607, 497, 199, 0, 0,
+ 0, 0, 255, 256, 0, 576, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 655, 656, 657, 658, 659,
660, 661, 662, 663, 664, 665, 666, 667, 668, 669,
- 670, 671, 649, 508, 514, 509, 510, 511, 512, 513,
- 0, 515, 0, 0, 0, 0, 0, 398, 0, 591,
- 592, 672, 384, 486, 603, 335, 349, 352, 341, 361,
- 0, 362, 337, 338, 343, 346, 347, 348, 353, 354,
- 358, 364, 249, 210, 390, 399, 578, 312, 216, 217,
- 218, 524, 525, 526, 527, 619, 620, 624, 205, 462,
- 463, 464, 465, 292, 614, 309, 468, 467, 331, 332,
- 379, 449, 540, 542, 553, 557, 559, 561, 567, 570,
- 541, 543, 554, 558, 560, 562, 568, 571, 530, 532,
- 534, 536, 549, 548, 545, 573, 574, 551, 556, 535,
- 547, 552, 565, 572, 569, 529, 533, 537, 546, 564,
- 563, 544, 555, 566, 550, 538, 531, 539, 0, 196,
- 221, 368, 0, 454, 288, 650, 618, 484, 613, 206,
- 223, 0, 262, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 198, 200, 209, 222, 232, 236,
- 243, 261, 276, 278, 285, 298, 310, 318, 319, 322,
- 328, 380, 386, 387, 388, 389, 409, 410, 411, 414,
- 417, 418, 421, 423, 424, 427, 431, 435, 436, 437,
- 439, 441, 443, 455, 460, 474, 475, 476, 477, 478,
- 481, 482, 488, 489, 490, 491, 492, 500, 501, 516,
- 586, 588, 605, 625, 632, 480, 301, 302, 444, 445,
- 314, 315, 646, 647, 300, 600, 633, 597, 645, 627,
- 438, 378, 0, 0, 381, 281, 305, 320, 0, 617,
- 502, 227, 466, 290, 251, 0, 0, 211, 246, 230,
- 259, 274, 277, 324, 391, 400, 429, 434, 296, 271,
- 244, 459, 241, 485, 519, 520, 521, 523, 395, 266,
- 433, 396, 0, 376, 576, 577, 316, 0, 0, 0,
- 528, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 416, 0, 0, 0, 0, 0, 0, 0,
- 270, 0, 0, 0, 0, 366, 267, 0, 1913, 204,
- 505, 0, 430, 0, 203, 0, 487, 252, 377, 374,
- 583, 282, 273, 269, 250, 317, 385, 428, 518, 422,
- 0, 370, 0, 0, 497, 401, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 323, 248, 325, 202, 413, 498,
- 286, 0, 0, 0, 0, 0, 507, 724, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 238, 0, 0,
- 245, 0, 0, 0, 351, 360, 359, 339, 340, 342,
- 344, 350, 357, 363, 336, 345, 0, 0, 609, 0,
- 0, 0, 265, 321, 272, 264, 580, 0, 0, 0,
- 0, 0, 0, 596, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 402, 257, 0, 453, 0,
- 0, 0, 629, 0, 0, 0, 0, 0, 0, 0,
- 365, 0, 330, 197, 225, 0, 0, 412, 461, 473,
- 0, 0, 0, 253, 0, 471, 426, 604, 233, 284,
- 458, 432, 469, 440, 287, 0, 0, 470, 372, 585,
- 450, 601, 630, 631, 263, 406, 615, 522, 623, 648,
- 226, 260, 420, 506, 607, 494, 397, 581, 582, 329,
- 493, 295, 201, 369, 636, 224, 479, 371, 242, 231,
- 587, 612, 299, 289, 456, 643, 213, 517, 598, 239,
- 483, 0, 0, 651, 247, 504, 610, 599, 215, 594,
- 503, 393, 326, 327, 214, 0, 457, 268, 293, 0,
- 0, 258, 415, 589, 590, 256, 652, 228, 622, 220,
- 0, 621, 408, 584, 595, 394, 383, 219, 593, 392,
- 382, 334, 355, 356, 280, 307, 447, 375, 448, 306,
- 308, 404, 403, 405, 207, 608, 626, 0, 208, 0,
- 499, 611, 653, 452, 212, 234, 235, 237, 0, 279,
- 283, 291, 294, 303, 304, 313, 367, 419, 446, 442,
- 451, 0, 579, 602, 616, 628, 634, 635, 637, 638,
- 639, 640, 641, 644, 642, 407, 311, 495, 333, 373,
- 0, 0, 425, 472, 240, 606, 496, 199, 0, 0,
- 0, 0, 254, 255, 0, 575, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 654, 655, 656, 657, 658,
- 659, 660, 661, 662, 663, 664, 665, 666, 667, 668,
- 669, 670, 671, 649, 508, 514, 509, 510, 511, 512,
- 513, 0, 515, 0, 0, 0, 0, 0, 398, 0,
- 591, 592, 672, 384, 486, 603, 335, 349, 352, 341,
- 361, 0, 362, 337, 338, 343, 346, 347, 348, 353,
- 354, 358, 364, 249, 210, 390, 399, 578, 312, 216,
- 217, 218, 524, 525, 526, 527, 619, 620, 624, 205,
- 462, 463, 464, 465, 292, 614, 309, 468, 467, 331,
- 332, 379, 449, 540, 542, 553, 557, 559, 561, 567,
- 570, 541, 543, 554, 558, 560, 562, 568, 571, 530,
- 532, 534, 536, 549, 548, 545, 573, 574, 551, 556,
- 535, 547, 552, 565, 572, 569, 529, 533, 537, 546,
- 564, 563, 544, 555, 566, 550, 538, 531, 539, 0,
- 196, 221, 368, 0, 454, 288, 650, 618, 484, 613,
- 206, 223, 0, 262, 0, 0, 0, 0, 0, 0,
+ 670, 671, 672, 650, 509, 515, 510, 511, 512, 513,
+ 514, 0, 516, 0, 0, 0, 0, 0, 399, 0,
+ 592, 593, 673, 385, 487, 604, 336, 350, 353, 342,
+ 362, 0, 363, 338, 339, 344, 347, 348, 349, 354,
+ 355, 359, 365, 249, 210, 391, 400, 579, 313, 216,
+ 217, 218, 525, 526, 527, 528, 620, 621, 625, 205,
+ 463, 464, 465, 466, 293, 615, 310, 469, 468, 332,
+ 333, 380, 450, 541, 543, 554, 558, 560, 562, 568,
+ 571, 542, 544, 555, 559, 561, 563, 569, 572, 531,
+ 533, 535, 537, 550, 549, 546, 574, 575, 552, 557,
+ 536, 548, 553, 566, 573, 570, 530, 534, 538, 547,
+ 565, 564, 545, 556, 567, 551, 539, 532, 540, 0,
+ 196, 221, 369, 0, 455, 289, 651, 619, 485, 614,
+ 206, 223, 0, 263, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 198, 200, 209, 222, 232,
- 236, 243, 261, 276, 278, 285, 298, 310, 318, 319,
- 322, 328, 380, 386, 387, 388, 389, 409, 410, 411,
- 414, 417, 418, 421, 423, 424, 427, 431, 435, 436,
- 437, 439, 441, 443, 455, 460, 474, 475, 476, 477,
- 478, 481, 482, 488, 489, 490, 491, 492, 500, 501,
- 516, 586, 588, 605, 625, 632, 480, 301, 302, 444,
- 445, 314, 315, 646, 647, 300, 600, 633, 597, 645,
- 627, 438, 378, 0, 0, 381, 281, 305, 320, 0,
- 617, 502, 227, 466, 290, 251, 0, 0, 211, 246,
- 230, 259, 274, 277, 324, 391, 400, 429, 434, 296,
- 271, 244, 459, 241, 485, 519, 520, 521, 523, 395,
- 266, 433, 396, 0, 376, 576, 577, 316, 0, 0,
- 0, 528, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 416, 0, 0, 0, 0, 0, 0,
- 0, 270, 0, 0, 0, 0, 366, 267, 0, 0,
- 204, 505, 0, 430, 0, 203, 0, 487, 252, 377,
- 374, 583, 282, 273, 269, 250, 317, 385, 428, 518,
- 422, 0, 370, 0, 0, 497, 401, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 323, 248, 325, 202, 413,
- 498, 286, 0, 1888, 0, 0, 0, 507, 724, 0,
+ 236, 243, 262, 277, 279, 286, 299, 311, 319, 320,
+ 323, 329, 381, 387, 388, 389, 390, 410, 411, 412,
+ 415, 418, 419, 422, 424, 425, 428, 432, 436, 437,
+ 438, 440, 442, 444, 456, 461, 475, 476, 477, 478,
+ 479, 482, 483, 489, 490, 491, 492, 493, 501, 502,
+ 517, 587, 589, 606, 626, 633, 481, 302, 303, 445,
+ 446, 315, 316, 647, 648, 301, 601, 634, 598, 646,
+ 628, 439, 379, 0, 0, 382, 282, 306, 321, 0,
+ 618, 503, 227, 467, 291, 251, 0, 0, 211, 246,
+ 230, 260, 275, 278, 325, 392, 401, 430, 435, 297,
+ 272, 244, 460, 241, 486, 520, 521, 522, 524, 396,
+ 267, 434, 397, 0, 377, 577, 578, 317, 0, 0,
+ 0, 529, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 417, 0, 0, 0, 0, 0, 0,
+ 0, 271, 0, 0, 0, 0, 367, 268, 0, 1927,
+ 204, 506, 0, 431, 0, 203, 0, 488, 253, 378,
+ 375, 584, 283, 274, 270, 250, 318, 386, 429, 519,
+ 423, 0, 371, 0, 0, 498, 402, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 324, 248, 326, 202, 414,
+ 499, 287, 0, 0, 0, 0, 0, 508, 725, 0,
0, 0, 0, 0, 0, 0, 0, 0, 238, 0,
- 0, 245, 0, 0, 0, 351, 360, 359, 339, 340,
- 342, 344, 350, 357, 363, 336, 345, 0, 0, 609,
- 0, 0, 0, 265, 321, 272, 264, 580, 0, 0,
- 0, 0, 0, 0, 596, 0, 0, 229, 0, 0,
+ 0, 245, 0, 0, 0, 352, 361, 360, 340, 341,
+ 343, 345, 351, 358, 364, 337, 346, 0, 0, 610,
+ 0, 0, 0, 266, 322, 273, 265, 581, 0, 0,
+ 0, 0, 0, 0, 597, 0, 0, 229, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 275, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 276, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6703,443 +6161,221 @@ var yyAct = [...]int{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 297, 0, 402, 257, 0, 453,
- 0, 0, 0, 629, 0, 0, 0, 0, 0, 0,
- 0, 365, 0, 330, 197, 225, 0, 0, 412, 461,
- 473, 0, 0, 0, 253, 0, 471, 426, 604, 233,
- 284, 458, 432, 469, 440, 287, 0, 0, 470, 372,
- 585, 450, 601, 630, 631, 263, 406, 615, 522, 623,
- 648, 226, 260, 420, 506, 607, 494, 397, 581, 582,
- 329, 493, 295, 201, 369, 636, 224, 479, 371, 242,
- 231, 587, 612, 299, 289, 456, 643, 213, 517, 598,
- 239, 483, 0, 0, 651, 247, 504, 610, 599, 215,
- 594, 503, 393, 326, 327, 214, 0, 457, 268, 293,
- 0, 0, 258, 415, 589, 590, 256, 652, 228, 622,
- 220, 0, 621, 408, 584, 595, 394, 383, 219, 593,
- 392, 382, 334, 355, 356, 280, 307, 447, 375, 448,
- 306, 308, 404, 403, 405, 207, 608, 626, 0, 208,
- 0, 499, 611, 653, 452, 212, 234, 235, 237, 0,
- 279, 283, 291, 294, 303, 304, 313, 367, 419, 446,
- 442, 451, 0, 579, 602, 616, 628, 634, 635, 637,
- 638, 639, 640, 641, 644, 642, 407, 311, 495, 333,
- 373, 0, 0, 425, 472, 240, 606, 496, 199, 0,
- 0, 0, 0, 254, 255, 0, 575, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 654, 655, 656, 657,
+ 0, 0, 0, 0, 298, 0, 403, 258, 0, 454,
+ 0, 0, 0, 630, 0, 0, 0, 0, 0, 0,
+ 0, 366, 0, 331, 197, 225, 0, 0, 413, 462,
+ 474, 0, 0, 0, 254, 0, 472, 427, 605, 233,
+ 285, 459, 433, 470, 441, 288, 0, 0, 471, 373,
+ 586, 451, 602, 631, 632, 264, 407, 616, 523, 624,
+ 649, 226, 261, 421, 507, 608, 495, 398, 582, 583,
+ 330, 494, 296, 201, 370, 637, 224, 480, 372, 242,
+ 231, 588, 613, 300, 252, 290, 457, 644, 213, 518,
+ 599, 239, 484, 0, 0, 652, 247, 505, 611, 600,
+ 215, 595, 504, 394, 327, 328, 214, 0, 458, 269,
+ 294, 0, 0, 259, 416, 590, 591, 257, 653, 228,
+ 623, 220, 0, 622, 409, 585, 596, 395, 384, 219,
+ 594, 393, 383, 335, 356, 357, 281, 308, 448, 376,
+ 449, 307, 309, 405, 404, 406, 207, 609, 627, 0,
+ 208, 0, 500, 612, 654, 453, 212, 234, 235, 237,
+ 0, 280, 284, 292, 295, 304, 305, 314, 368, 420,
+ 447, 443, 452, 0, 580, 603, 617, 629, 635, 636,
+ 638, 639, 640, 641, 642, 645, 643, 408, 312, 496,
+ 334, 374, 0, 0, 426, 473, 240, 607, 497, 199,
+ 0, 0, 0, 0, 255, 256, 0, 576, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 655, 656, 657,
658, 659, 660, 661, 662, 663, 664, 665, 666, 667,
- 668, 669, 670, 671, 649, 508, 514, 509, 510, 511,
- 512, 513, 0, 515, 0, 0, 0, 0, 0, 398,
- 0, 591, 592, 672, 384, 486, 603, 335, 349, 352,
- 341, 361, 0, 362, 337, 338, 343, 346, 347, 348,
- 353, 354, 358, 364, 249, 210, 390, 399, 578, 312,
- 216, 217, 218, 524, 525, 526, 527, 619, 620, 624,
- 205, 462, 463, 464, 465, 292, 614, 309, 468, 467,
- 331, 332, 379, 449, 540, 542, 553, 557, 559, 561,
- 567, 570, 541, 543, 554, 558, 560, 562, 568, 571,
- 530, 532, 534, 536, 549, 548, 545, 573, 574, 551,
- 556, 535, 547, 552, 565, 572, 569, 529, 533, 537,
- 546, 564, 563, 544, 555, 566, 550, 538, 531, 539,
- 0, 196, 221, 368, 0, 454, 288, 650, 618, 484,
- 613, 206, 223, 0, 262, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 198, 200, 209, 222,
- 232, 236, 243, 261, 276, 278, 285, 298, 310, 318,
- 319, 322, 328, 380, 386, 387, 388, 389, 409, 410,
- 411, 414, 417, 418, 421, 423, 424, 427, 431, 435,
- 436, 437, 439, 441, 443, 455, 460, 474, 475, 476,
- 477, 478, 481, 482, 488, 489, 490, 491, 492, 500,
- 501, 516, 586, 588, 605, 625, 632, 480, 301, 302,
- 444, 445, 314, 315, 646, 647, 300, 600, 633, 597,
- 645, 627, 438, 378, 0, 0, 381, 281, 305, 320,
- 0, 617, 502, 227, 466, 290, 251, 0, 0, 211,
- 246, 230, 259, 274, 277, 324, 391, 400, 429, 434,
- 296, 271, 244, 459, 241, 485, 519, 520, 521, 523,
- 395, 266, 433, 396, 0, 376, 576, 577, 316, 0,
- 0, 0, 528, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 416, 0, 0, 0, 0, 0,
- 0, 1785, 270, 0, 0, 0, 0, 366, 267, 0,
- 0, 204, 505, 0, 430, 0, 203, 0, 487, 252,
- 377, 374, 583, 282, 273, 269, 250, 317, 385, 428,
- 518, 422, 0, 370, 0, 0, 497, 401, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 323, 248, 325, 202,
- 413, 498, 286, 0, 0, 0, 0, 0, 507, 194,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 238,
- 0, 0, 245, 0, 0, 0, 351, 360, 359, 339,
- 340, 342, 344, 350, 357, 363, 336, 345, 0, 0,
- 609, 0, 0, 0, 265, 321, 272, 264, 580, 0,
- 0, 0, 0, 0, 0, 596, 0, 0, 229, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 275, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 297, 0, 402, 257, 0,
- 453, 0, 0, 0, 629, 0, 0, 0, 0, 0,
- 0, 0, 365, 0, 330, 197, 225, 0, 0, 412,
- 461, 473, 0, 0, 0, 253, 0, 471, 426, 604,
- 233, 284, 458, 432, 469, 440, 287, 0, 0, 470,
- 372, 585, 450, 601, 630, 631, 263, 406, 615, 522,
- 623, 648, 226, 260, 420, 506, 607, 494, 397, 581,
- 582, 329, 493, 295, 201, 369, 636, 224, 479, 371,
- 242, 231, 587, 612, 299, 289, 456, 643, 213, 517,
- 598, 239, 483, 0, 0, 651, 247, 504, 610, 599,
- 215, 594, 503, 393, 326, 327, 214, 0, 457, 268,
- 293, 0, 0, 258, 415, 589, 590, 256, 652, 228,
- 622, 220, 0, 621, 408, 584, 595, 394, 383, 219,
- 593, 392, 382, 334, 355, 356, 280, 307, 447, 375,
- 448, 306, 308, 404, 403, 405, 207, 608, 626, 0,
- 208, 0, 499, 611, 653, 452, 212, 234, 235, 237,
- 0, 279, 283, 291, 294, 303, 304, 313, 367, 419,
- 446, 442, 451, 0, 579, 602, 616, 628, 634, 635,
- 637, 638, 639, 640, 641, 644, 642, 407, 311, 495,
- 333, 373, 0, 0, 425, 472, 240, 606, 496, 199,
- 0, 0, 0, 0, 254, 255, 0, 575, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 654, 655, 656,
- 657, 658, 659, 660, 661, 662, 663, 664, 665, 666,
- 667, 668, 669, 670, 671, 649, 508, 514, 509, 510,
- 511, 512, 513, 0, 515, 0, 0, 0, 0, 0,
- 398, 0, 591, 592, 672, 384, 486, 603, 335, 349,
- 352, 341, 361, 0, 362, 337, 338, 343, 346, 347,
- 348, 353, 354, 358, 364, 249, 210, 390, 399, 578,
- 312, 216, 217, 218, 524, 525, 526, 527, 619, 620,
- 624, 205, 462, 463, 464, 465, 292, 614, 309, 468,
- 467, 331, 332, 379, 449, 540, 542, 553, 557, 559,
- 561, 567, 570, 541, 543, 554, 558, 560, 562, 568,
- 571, 530, 532, 534, 536, 549, 548, 545, 573, 574,
- 551, 556, 535, 547, 552, 565, 572, 569, 529, 533,
- 537, 546, 564, 563, 544, 555, 566, 550, 538, 531,
- 539, 0, 196, 221, 368, 0, 454, 288, 650, 618,
- 484, 613, 206, 223, 0, 262, 0, 0, 0, 0,
+ 668, 669, 670, 671, 672, 650, 509, 515, 510, 511,
+ 512, 513, 514, 0, 516, 0, 0, 0, 0, 0,
+ 399, 0, 592, 593, 673, 385, 487, 604, 336, 350,
+ 353, 342, 362, 0, 363, 338, 339, 344, 347, 348,
+ 349, 354, 355, 359, 365, 249, 210, 391, 400, 579,
+ 313, 216, 217, 218, 525, 526, 527, 528, 620, 621,
+ 625, 205, 463, 464, 465, 466, 293, 615, 310, 469,
+ 468, 332, 333, 380, 450, 541, 543, 554, 558, 560,
+ 562, 568, 571, 542, 544, 555, 559, 561, 563, 569,
+ 572, 531, 533, 535, 537, 550, 549, 546, 574, 575,
+ 552, 557, 536, 548, 553, 566, 573, 570, 530, 534,
+ 538, 547, 565, 564, 545, 556, 567, 551, 539, 532,
+ 540, 0, 196, 221, 369, 0, 455, 289, 651, 619,
+ 485, 614, 206, 223, 0, 263, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 198, 200, 209,
- 222, 232, 236, 243, 261, 276, 278, 285, 298, 310,
- 318, 319, 322, 328, 380, 386, 387, 388, 389, 409,
- 410, 411, 414, 417, 418, 421, 423, 424, 427, 431,
- 435, 436, 437, 439, 441, 443, 455, 460, 474, 475,
- 476, 477, 478, 481, 482, 488, 489, 490, 491, 492,
- 500, 501, 516, 586, 588, 605, 625, 632, 480, 301,
- 302, 444, 445, 314, 315, 646, 647, 300, 600, 633,
- 597, 645, 627, 438, 378, 0, 0, 381, 281, 305,
- 320, 0, 617, 502, 227, 466, 290, 251, 0, 0,
- 211, 246, 230, 259, 274, 277, 324, 391, 400, 429,
- 434, 296, 271, 244, 459, 241, 485, 519, 520, 521,
- 523, 395, 266, 433, 396, 0, 376, 576, 577, 316,
- 0, 0, 0, 528, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 416, 0, 0, 0, 0,
- 0, 0, 0, 270, 0, 0, 0, 0, 366, 267,
- 0, 0, 204, 505, 0, 430, 0, 203, 0, 487,
- 252, 377, 374, 583, 282, 273, 269, 250, 317, 385,
- 428, 518, 422, 0, 370, 0, 0, 497, 401, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 323, 248, 325,
- 202, 413, 498, 286, 0, 95, 0, 0, 0, 507,
- 959, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 238, 0, 0, 245, 0, 0, 0, 351, 360, 359,
- 339, 340, 342, 344, 350, 357, 363, 336, 345, 0,
- 0, 609, 0, 0, 0, 265, 321, 272, 264, 580,
- 0, 0, 0, 0, 0, 0, 596, 0, 0, 229,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 275, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 297, 0, 402, 257,
- 0, 453, 0, 0, 0, 629, 0, 0, 0, 0,
- 0, 0, 0, 365, 0, 330, 197, 225, 0, 0,
- 412, 461, 473, 0, 0, 0, 253, 0, 471, 426,
- 604, 233, 284, 458, 432, 469, 440, 287, 0, 0,
- 470, 372, 585, 450, 601, 630, 631, 263, 406, 615,
- 522, 623, 648, 226, 260, 420, 506, 607, 494, 397,
- 581, 582, 329, 493, 295, 201, 369, 636, 224, 479,
- 371, 242, 231, 587, 612, 299, 289, 456, 643, 213,
- 517, 598, 239, 483, 0, 0, 651, 247, 504, 610,
- 599, 215, 594, 503, 393, 326, 327, 214, 0, 457,
- 268, 293, 0, 0, 258, 415, 589, 590, 256, 652,
- 228, 622, 220, 0, 621, 408, 584, 595, 394, 383,
- 219, 593, 392, 382, 334, 355, 356, 280, 307, 447,
- 375, 448, 306, 308, 404, 403, 405, 207, 608, 626,
- 0, 208, 0, 499, 611, 653, 452, 212, 234, 235,
- 237, 0, 279, 283, 291, 294, 303, 304, 313, 367,
- 419, 446, 442, 451, 0, 579, 602, 616, 628, 634,
- 635, 637, 638, 639, 640, 641, 644, 642, 407, 311,
- 495, 333, 373, 0, 0, 425, 472, 240, 606, 496,
- 199, 0, 0, 0, 0, 254, 255, 0, 575, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 654, 655,
+ 222, 232, 236, 243, 262, 277, 279, 286, 299, 311,
+ 319, 320, 323, 329, 381, 387, 388, 389, 390, 410,
+ 411, 412, 415, 418, 419, 422, 424, 425, 428, 432,
+ 436, 437, 438, 440, 442, 444, 456, 461, 475, 476,
+ 477, 478, 479, 482, 483, 489, 490, 491, 492, 493,
+ 501, 502, 517, 587, 589, 606, 626, 633, 481, 302,
+ 303, 445, 446, 315, 316, 647, 648, 301, 601, 634,
+ 598, 646, 628, 439, 379, 0, 0, 382, 282, 306,
+ 321, 0, 618, 503, 227, 467, 291, 251, 0, 0,
+ 211, 246, 230, 260, 275, 278, 325, 392, 401, 430,
+ 435, 297, 272, 244, 460, 241, 486, 520, 521, 522,
+ 524, 396, 267, 434, 397, 0, 377, 577, 578, 317,
+ 0, 0, 0, 529, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 417, 0, 0, 0, 0,
+ 0, 0, 0, 271, 0, 0, 0, 0, 367, 268,
+ 0, 1925, 204, 506, 0, 431, 0, 203, 0, 488,
+ 253, 378, 375, 584, 283, 274, 270, 250, 318, 386,
+ 429, 519, 423, 0, 371, 0, 0, 498, 402, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 324, 248, 326,
+ 202, 414, 499, 287, 0, 0, 0, 0, 0, 508,
+ 725, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 238, 0, 0, 245, 0, 0, 0, 352, 361, 360,
+ 340, 341, 343, 345, 351, 358, 364, 337, 346, 0,
+ 0, 610, 0, 0, 0, 266, 322, 273, 265, 581,
+ 0, 0, 0, 0, 0, 0, 597, 0, 0, 229,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 276, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 298, 0, 403, 258,
+ 0, 454, 0, 0, 0, 630, 0, 0, 0, 0,
+ 0, 0, 0, 366, 0, 331, 197, 225, 0, 0,
+ 413, 462, 474, 0, 0, 0, 254, 0, 472, 427,
+ 605, 233, 285, 459, 433, 470, 441, 288, 0, 0,
+ 471, 373, 586, 451, 602, 631, 632, 264, 407, 616,
+ 523, 624, 649, 226, 261, 421, 507, 608, 495, 398,
+ 582, 583, 330, 494, 296, 201, 370, 637, 224, 480,
+ 372, 242, 231, 588, 613, 300, 252, 290, 457, 644,
+ 213, 518, 599, 239, 484, 0, 0, 652, 247, 505,
+ 611, 600, 215, 595, 504, 394, 327, 328, 214, 0,
+ 458, 269, 294, 0, 0, 259, 416, 590, 591, 257,
+ 653, 228, 623, 220, 0, 622, 409, 585, 596, 395,
+ 384, 219, 594, 393, 383, 335, 356, 357, 281, 308,
+ 448, 376, 449, 307, 309, 405, 404, 406, 207, 609,
+ 627, 0, 208, 0, 500, 612, 654, 453, 212, 234,
+ 235, 237, 0, 280, 284, 292, 295, 304, 305, 314,
+ 368, 420, 447, 443, 452, 0, 580, 603, 617, 629,
+ 635, 636, 638, 639, 640, 641, 642, 645, 643, 408,
+ 312, 496, 334, 374, 0, 0, 426, 473, 240, 607,
+ 497, 199, 0, 0, 0, 0, 255, 256, 0, 576,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 655,
656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
- 666, 667, 668, 669, 670, 671, 649, 508, 514, 509,
- 510, 511, 512, 513, 0, 515, 0, 0, 0, 0,
- 0, 398, 0, 591, 592, 672, 384, 486, 603, 335,
- 349, 352, 341, 361, 0, 362, 337, 338, 343, 346,
- 347, 348, 353, 354, 358, 364, 249, 210, 390, 399,
- 578, 312, 216, 217, 218, 524, 525, 526, 527, 619,
- 620, 624, 205, 462, 463, 464, 465, 292, 614, 309,
- 468, 467, 331, 332, 379, 449, 540, 542, 553, 557,
- 559, 561, 567, 570, 541, 543, 554, 558, 560, 562,
- 568, 571, 530, 532, 534, 536, 549, 548, 545, 573,
- 574, 551, 556, 535, 547, 552, 565, 572, 569, 529,
- 533, 537, 546, 564, 563, 544, 555, 566, 550, 538,
- 531, 539, 0, 196, 221, 368, 0, 454, 288, 650,
- 618, 484, 613, 206, 223, 0, 262, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 198, 200,
- 209, 222, 232, 236, 243, 261, 276, 278, 285, 298,
- 310, 318, 319, 322, 328, 380, 386, 387, 388, 389,
- 409, 410, 411, 414, 417, 418, 421, 423, 424, 427,
- 431, 435, 436, 437, 439, 441, 443, 455, 460, 474,
- 475, 476, 477, 478, 481, 482, 488, 489, 490, 491,
- 492, 500, 501, 516, 586, 588, 605, 625, 632, 480,
- 301, 302, 444, 445, 314, 315, 646, 647, 300, 600,
- 633, 597, 645, 627, 438, 378, 0, 0, 381, 281,
- 305, 320, 0, 617, 502, 227, 466, 290, 251, 0,
- 0, 211, 246, 230, 259, 274, 277, 324, 391, 400,
- 429, 434, 296, 271, 244, 459, 241, 485, 519, 520,
- 521, 523, 395, 266, 433, 396, 0, 376, 576, 577,
- 316, 0, 0, 0, 528, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 416, 0, 0, 0,
- 0, 0, 0, 0, 270, 0, 0, 0, 0, 366,
- 267, 0, 0, 204, 505, 0, 430, 0, 203, 0,
- 487, 252, 377, 374, 583, 282, 273, 269, 250, 317,
- 385, 428, 518, 422, 0, 370, 0, 0, 497, 401,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 323, 248,
- 325, 202, 413, 498, 286, 0, 0, 0, 0, 0,
- 507, 194, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 238, 0, 0, 245, 0, 0, 0, 351, 360,
- 359, 339, 340, 342, 344, 350, 357, 363, 336, 345,
- 0, 0, 609, 0, 0, 0, 265, 321, 272, 264,
- 580, 0, 0, 0, 0, 0, 0, 596, 0, 0,
- 229, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 275, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1456, 0, 297, 0, 402,
- 257, 0, 453, 0, 0, 0, 629, 0, 0, 0,
- 0, 0, 0, 0, 365, 0, 330, 197, 225, 0,
- 0, 412, 461, 473, 0, 0, 0, 253, 0, 471,
- 426, 604, 233, 284, 458, 432, 469, 440, 287, 0,
- 0, 470, 372, 585, 450, 601, 630, 631, 263, 406,
- 615, 522, 623, 648, 226, 260, 420, 506, 607, 494,
- 397, 581, 582, 329, 493, 295, 201, 369, 636, 224,
- 479, 371, 242, 231, 587, 612, 299, 289, 456, 643,
- 213, 517, 598, 239, 483, 0, 0, 651, 247, 504,
- 610, 599, 215, 594, 503, 393, 326, 327, 214, 0,
- 457, 268, 293, 0, 0, 258, 415, 589, 590, 256,
- 652, 228, 622, 220, 0, 621, 408, 584, 595, 394,
- 383, 219, 593, 392, 382, 334, 355, 356, 280, 307,
- 447, 375, 448, 306, 308, 404, 403, 405, 207, 608,
- 626, 0, 208, 0, 499, 611, 653, 452, 212, 234,
- 235, 237, 0, 279, 283, 291, 294, 303, 304, 313,
- 367, 419, 446, 442, 451, 0, 579, 602, 616, 628,
- 634, 635, 637, 638, 639, 640, 641, 644, 642, 407,
- 311, 495, 333, 373, 0, 0, 425, 472, 240, 606,
- 496, 199, 0, 0, 0, 0, 254, 255, 0, 575,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 654,
- 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
- 665, 666, 667, 668, 669, 670, 671, 649, 508, 514,
- 509, 510, 511, 512, 513, 0, 515, 0, 0, 0,
- 0, 0, 398, 0, 591, 592, 672, 384, 486, 603,
- 335, 349, 352, 341, 361, 0, 362, 337, 338, 343,
- 346, 347, 348, 353, 354, 358, 364, 249, 210, 390,
- 399, 578, 312, 216, 217, 218, 524, 525, 526, 527,
- 619, 620, 624, 205, 462, 463, 464, 465, 292, 614,
- 309, 468, 467, 331, 332, 379, 449, 540, 542, 553,
- 557, 559, 561, 567, 570, 541, 543, 554, 558, 560,
- 562, 568, 571, 530, 532, 534, 536, 549, 548, 545,
- 573, 574, 551, 556, 535, 547, 552, 565, 572, 569,
- 529, 533, 537, 546, 564, 563, 544, 555, 566, 550,
- 538, 531, 539, 0, 196, 221, 368, 0, 454, 288,
- 650, 618, 484, 613, 206, 223, 0, 262, 0, 0,
+ 666, 667, 668, 669, 670, 671, 672, 650, 509, 515,
+ 510, 511, 512, 513, 514, 0, 516, 0, 0, 0,
+ 0, 0, 399, 0, 592, 593, 673, 385, 487, 604,
+ 336, 350, 353, 342, 362, 0, 363, 338, 339, 344,
+ 347, 348, 349, 354, 355, 359, 365, 249, 210, 391,
+ 400, 579, 313, 216, 217, 218, 525, 526, 527, 528,
+ 620, 621, 625, 205, 463, 464, 465, 466, 293, 615,
+ 310, 469, 468, 332, 333, 380, 450, 541, 543, 554,
+ 558, 560, 562, 568, 571, 542, 544, 555, 559, 561,
+ 563, 569, 572, 531, 533, 535, 537, 550, 549, 546,
+ 574, 575, 552, 557, 536, 548, 553, 566, 573, 570,
+ 530, 534, 538, 547, 565, 564, 545, 556, 567, 551,
+ 539, 532, 540, 0, 196, 221, 369, 0, 455, 289,
+ 651, 619, 485, 614, 206, 223, 0, 263, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 198,
- 200, 209, 222, 232, 236, 243, 261, 276, 278, 285,
- 298, 310, 318, 319, 322, 328, 380, 386, 387, 388,
- 389, 409, 410, 411, 414, 417, 418, 421, 423, 424,
- 427, 431, 435, 436, 437, 439, 441, 443, 455, 460,
- 474, 475, 476, 477, 478, 481, 482, 488, 489, 490,
- 491, 492, 500, 501, 516, 586, 588, 605, 625, 632,
- 480, 301, 302, 444, 445, 314, 315, 646, 647, 1455,
- 600, 633, 597, 645, 627, 438, 378, 0, 0, 381,
- 281, 305, 320, 0, 617, 502, 227, 466, 290, 251,
- 0, 0, 211, 246, 230, 259, 274, 277, 324, 391,
- 400, 429, 434, 296, 271, 244, 459, 241, 485, 519,
- 520, 521, 523, 395, 266, 433, 396, 0, 376, 576,
- 577, 316, 0, 0, 0, 528, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 416, 0, 0,
- 0, 0, 0, 0, 0, 270, 0, 0, 0, 0,
- 366, 267, 0, 0, 204, 505, 0, 430, 0, 203,
- 0, 487, 252, 377, 374, 583, 282, 273, 269, 250,
- 317, 385, 428, 518, 422, 0, 370, 0, 0, 497,
- 401, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 323,
- 248, 325, 202, 413, 498, 286, 0, 0, 0, 0,
- 0, 507, 194, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 238, 0, 0, 245, 0, 0, 0, 351,
- 360, 359, 339, 340, 342, 344, 350, 357, 363, 336,
- 345, 0, 0, 609, 0, 0, 0, 265, 321, 272,
- 264, 580, 0, 0, 0, 0, 0, 0, 596, 0,
+ 200, 209, 222, 232, 236, 243, 262, 277, 279, 286,
+ 299, 311, 319, 320, 323, 329, 381, 387, 388, 389,
+ 390, 410, 411, 412, 415, 418, 419, 422, 424, 425,
+ 428, 432, 436, 437, 438, 440, 442, 444, 456, 461,
+ 475, 476, 477, 478, 479, 482, 483, 489, 490, 491,
+ 492, 493, 501, 502, 517, 587, 589, 606, 626, 633,
+ 481, 302, 303, 445, 446, 315, 316, 647, 648, 301,
+ 601, 634, 598, 646, 628, 439, 379, 0, 0, 382,
+ 282, 306, 321, 0, 618, 503, 227, 467, 291, 251,
+ 0, 0, 211, 246, 230, 260, 275, 278, 325, 392,
+ 401, 430, 435, 297, 272, 244, 460, 241, 486, 520,
+ 521, 522, 524, 396, 267, 434, 397, 0, 377, 577,
+ 578, 317, 0, 0, 0, 529, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 417, 0, 0,
+ 0, 0, 0, 0, 0, 271, 0, 0, 0, 0,
+ 367, 268, 0, 1923, 204, 506, 0, 431, 0, 203,
+ 0, 488, 253, 378, 375, 584, 283, 274, 270, 250,
+ 318, 386, 429, 519, 423, 0, 371, 0, 0, 498,
+ 402, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 324,
+ 248, 326, 202, 414, 499, 287, 0, 0, 0, 0,
+ 0, 508, 725, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 238, 0, 0, 245, 0, 0, 0, 352,
+ 361, 360, 340, 341, 343, 345, 351, 358, 364, 337,
+ 346, 0, 0, 610, 0, 0, 0, 266, 322, 273,
+ 265, 581, 0, 0, 0, 0, 0, 0, 597, 0,
0, 229, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 275, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 297, 0,
- 402, 257, 0, 453, 0, 0, 0, 629, 0, 0,
- 0, 0, 0, 0, 0, 365, 0, 330, 197, 225,
- 0, 0, 412, 461, 473, 0, 0, 0, 253, 0,
- 471, 426, 604, 233, 284, 458, 432, 469, 440, 287,
- 0, 0, 470, 372, 585, 450, 601, 630, 631, 263,
- 406, 615, 522, 623, 648, 226, 260, 420, 506, 607,
- 494, 397, 581, 582, 329, 493, 295, 201, 369, 636,
- 224, 479, 371, 242, 231, 587, 612, 299, 289, 456,
- 643, 213, 517, 598, 239, 483, 0, 0, 651, 247,
- 504, 610, 599, 215, 594, 503, 393, 326, 327, 214,
- 0, 457, 268, 293, 0, 0, 258, 415, 589, 590,
- 256, 652, 228, 622, 220, 0, 621, 408, 584, 595,
- 394, 383, 219, 593, 392, 382, 334, 355, 356, 280,
- 307, 447, 375, 448, 306, 308, 404, 403, 405, 207,
- 608, 626, 0, 208, 0, 499, 611, 653, 452, 212,
- 234, 235, 237, 0, 279, 283, 291, 294, 303, 304,
- 313, 367, 419, 446, 442, 451, 0, 579, 602, 616,
- 628, 634, 635, 637, 638, 639, 640, 641, 644, 642,
- 407, 311, 495, 333, 373, 0, 0, 425, 472, 240,
- 606, 496, 199, 0, 0, 0, 0, 254, 255, 0,
- 575, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 654, 655, 656, 657, 658, 659, 660, 661, 662, 663,
- 664, 665, 666, 667, 668, 669, 670, 671, 649, 508,
- 514, 509, 510, 511, 512, 513, 0, 515, 0, 0,
- 0, 0, 0, 398, 0, 591, 592, 672, 384, 486,
- 603, 335, 349, 352, 341, 361, 0, 362, 337, 338,
- 343, 346, 347, 348, 353, 354, 358, 364, 249, 210,
- 390, 399, 578, 312, 216, 217, 218, 524, 525, 526,
- 527, 619, 620, 624, 205, 462, 463, 464, 465, 292,
- 614, 309, 468, 467, 331, 332, 379, 449, 540, 542,
- 553, 557, 559, 561, 567, 570, 541, 543, 554, 558,
- 560, 562, 568, 571, 530, 532, 534, 536, 549, 548,
- 545, 573, 574, 551, 556, 535, 547, 552, 565, 572,
- 569, 529, 533, 537, 546, 564, 563, 544, 555, 566,
- 550, 538, 531, 539, 0, 196, 221, 368, 0, 454,
- 288, 650, 618, 484, 613, 206, 223, 0, 262, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1049, 0, 0, 0,
- 198, 200, 209, 222, 232, 236, 243, 261, 276, 278,
- 285, 298, 310, 318, 319, 322, 328, 380, 386, 387,
- 388, 389, 409, 410, 411, 414, 417, 418, 421, 423,
- 424, 427, 431, 435, 436, 437, 439, 441, 443, 455,
- 460, 474, 475, 476, 477, 478, 481, 482, 488, 489,
- 490, 491, 492, 500, 501, 516, 586, 588, 605, 625,
- 632, 480, 301, 302, 444, 445, 314, 315, 646, 647,
- 300, 600, 633, 597, 645, 627, 438, 378, 0, 0,
- 381, 281, 305, 320, 0, 617, 502, 227, 466, 290,
- 251, 0, 0, 211, 246, 230, 259, 274, 277, 324,
- 391, 400, 429, 434, 296, 271, 244, 459, 241, 485,
- 519, 520, 521, 523, 395, 266, 433, 396, 0, 376,
- 576, 577, 316, 0, 0, 0, 528, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 416, 0,
- 0, 0, 0, 0, 0, 0, 270, 0, 0, 0,
- 0, 366, 267, 0, 0, 204, 505, 0, 430, 0,
- 203, 0, 487, 252, 377, 374, 583, 282, 273, 269,
- 250, 317, 385, 428, 518, 422, 0, 370, 0, 0,
- 497, 401, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 323, 248, 325, 202, 413, 498, 286, 0, 0, 0,
- 0, 0, 507, 194, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 238, 0, 0, 245, 0, 0, 0,
- 351, 360, 359, 339, 340, 342, 344, 350, 357, 363,
- 336, 345, 0, 0, 609, 0, 0, 0, 265, 321,
- 272, 264, 580, 0, 0, 0, 0, 0, 0, 596,
- 0, 0, 229, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 275, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 297,
- 0, 402, 257, 0, 453, 0, 675, 0, 629, 0,
- 0, 0, 0, 0, 0, 0, 365, 0, 330, 197,
- 225, 0, 0, 412, 461, 473, 0, 0, 0, 253,
- 0, 471, 426, 604, 233, 284, 458, 432, 469, 440,
- 287, 0, 0, 470, 372, 585, 450, 601, 630, 631,
- 263, 406, 615, 522, 623, 648, 226, 260, 420, 506,
- 607, 494, 397, 581, 582, 329, 493, 295, 201, 369,
- 636, 224, 479, 371, 242, 231, 587, 612, 299, 289,
- 456, 643, 213, 517, 598, 239, 483, 0, 0, 651,
- 247, 504, 610, 599, 215, 594, 503, 393, 326, 327,
- 214, 0, 457, 268, 293, 0, 0, 258, 415, 589,
- 590, 256, 652, 228, 622, 220, 0, 621, 408, 584,
- 595, 394, 383, 219, 593, 392, 382, 334, 355, 356,
- 280, 307, 447, 375, 448, 306, 308, 404, 403, 405,
- 207, 608, 626, 0, 208, 0, 499, 611, 653, 452,
- 212, 234, 235, 237, 0, 279, 283, 291, 294, 303,
- 304, 313, 367, 419, 446, 442, 451, 0, 579, 602,
- 616, 628, 634, 635, 637, 638, 639, 640, 641, 644,
- 642, 407, 311, 495, 333, 373, 0, 0, 425, 472,
- 240, 606, 496, 199, 0, 0, 0, 0, 254, 255,
- 0, 575, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 654, 655, 656, 657, 658, 659, 660, 661, 662,
- 663, 664, 665, 666, 667, 668, 669, 670, 671, 649,
- 508, 514, 509, 510, 511, 512, 513, 0, 515, 0,
- 0, 0, 0, 0, 398, 0, 591, 592, 672, 384,
- 486, 603, 335, 349, 352, 341, 361, 0, 362, 337,
- 338, 343, 346, 347, 348, 353, 354, 358, 364, 249,
- 210, 390, 399, 578, 312, 216, 217, 218, 524, 525,
- 526, 527, 619, 620, 624, 205, 462, 463, 464, 465,
- 292, 614, 309, 468, 467, 331, 332, 379, 449, 540,
- 542, 553, 557, 559, 561, 567, 570, 541, 543, 554,
- 558, 560, 562, 568, 571, 530, 532, 534, 536, 549,
- 548, 545, 573, 574, 551, 556, 535, 547, 552, 565,
- 572, 569, 529, 533, 537, 546, 564, 563, 544, 555,
- 566, 550, 538, 531, 539, 0, 196, 221, 368, 0,
- 454, 288, 650, 618, 484, 613, 206, 223, 0, 262,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 198, 200, 209, 222, 232, 236, 243, 261, 276,
- 278, 285, 298, 310, 318, 319, 322, 328, 380, 386,
- 387, 388, 389, 409, 410, 411, 414, 417, 418, 421,
- 423, 424, 427, 431, 435, 436, 437, 439, 441, 443,
- 455, 460, 474, 475, 476, 477, 478, 481, 482, 488,
- 489, 490, 491, 492, 500, 501, 516, 586, 588, 605,
- 625, 632, 480, 301, 302, 444, 445, 314, 315, 646,
- 647, 300, 600, 633, 597, 645, 627, 438, 378, 0,
- 0, 381, 281, 305, 320, 0, 617, 502, 227, 466,
- 290, 251, 0, 0, 211, 246, 230, 259, 274, 277,
- 324, 391, 400, 429, 434, 296, 271, 244, 459, 241,
- 485, 519, 520, 521, 523, 395, 266, 433, 396, 0,
- 376, 576, 577, 316, 0, 0, 0, 528, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 416,
- 0, 0, 0, 0, 0, 0, 0, 270, 0, 0,
- 0, 0, 366, 267, 0, 0, 204, 505, 0, 430,
- 0, 203, 0, 487, 252, 377, 374, 583, 282, 273,
- 269, 250, 317, 385, 428, 518, 422, 0, 370, 0,
- 0, 497, 401, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 323, 248, 325, 202, 413, 498, 286, 0, 0,
- 0, 0, 0, 507, 724, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 276, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 298, 0,
+ 403, 258, 0, 454, 0, 0, 0, 630, 0, 0,
+ 0, 0, 0, 0, 0, 366, 0, 331, 197, 225,
+ 0, 0, 413, 462, 474, 0, 0, 0, 254, 0,
+ 472, 427, 605, 233, 285, 459, 433, 470, 441, 288,
+ 0, 0, 471, 373, 586, 451, 602, 631, 632, 264,
+ 407, 616, 523, 624, 649, 226, 261, 421, 507, 608,
+ 495, 398, 582, 583, 330, 494, 296, 201, 370, 637,
+ 224, 480, 372, 242, 231, 588, 613, 300, 252, 290,
+ 457, 644, 213, 518, 599, 239, 484, 0, 0, 652,
+ 247, 505, 611, 600, 215, 595, 504, 394, 327, 328,
+ 214, 0, 458, 269, 294, 0, 0, 259, 416, 590,
+ 591, 257, 653, 228, 623, 220, 0, 622, 409, 585,
+ 596, 395, 384, 219, 594, 393, 383, 335, 356, 357,
+ 281, 308, 448, 376, 449, 307, 309, 405, 404, 406,
+ 207, 609, 627, 0, 208, 0, 500, 612, 654, 453,
+ 212, 234, 235, 237, 0, 280, 284, 292, 295, 304,
+ 305, 314, 368, 420, 447, 443, 452, 0, 580, 603,
+ 617, 629, 635, 636, 638, 639, 640, 641, 642, 645,
+ 643, 408, 312, 496, 334, 374, 0, 0, 426, 473,
+ 240, 607, 497, 199, 0, 0, 0, 0, 255, 256,
+ 0, 576, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 655, 656, 657, 658, 659, 660, 661, 662, 663,
+ 664, 665, 666, 667, 668, 669, 670, 671, 672, 650,
+ 509, 515, 510, 511, 512, 513, 514, 0, 516, 0,
+ 0, 0, 0, 0, 399, 0, 592, 593, 673, 385,
+ 487, 604, 336, 350, 353, 342, 362, 0, 363, 338,
+ 339, 344, 347, 348, 349, 354, 355, 359, 365, 249,
+ 210, 391, 400, 579, 313, 216, 217, 218, 525, 526,
+ 527, 528, 620, 621, 625, 205, 463, 464, 465, 466,
+ 293, 615, 310, 469, 468, 332, 333, 380, 450, 541,
+ 543, 554, 558, 560, 562, 568, 571, 542, 544, 555,
+ 559, 561, 563, 569, 572, 531, 533, 535, 537, 550,
+ 549, 546, 574, 575, 552, 557, 536, 548, 553, 566,
+ 573, 570, 530, 534, 538, 547, 565, 564, 545, 556,
+ 567, 551, 539, 532, 540, 0, 196, 221, 369, 0,
+ 455, 289, 651, 619, 485, 614, 206, 223, 0, 263,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 198, 200, 209, 222, 232, 236, 243, 262, 277,
+ 279, 286, 299, 311, 319, 320, 323, 329, 381, 387,
+ 388, 389, 390, 410, 411, 412, 415, 418, 419, 422,
+ 424, 425, 428, 432, 436, 437, 438, 440, 442, 444,
+ 456, 461, 475, 476, 477, 478, 479, 482, 483, 489,
+ 490, 491, 492, 493, 501, 502, 517, 587, 589, 606,
+ 626, 633, 481, 302, 303, 445, 446, 315, 316, 647,
+ 648, 301, 601, 634, 598, 646, 628, 439, 379, 0,
+ 0, 382, 282, 306, 321, 0, 618, 503, 227, 467,
+ 291, 251, 0, 0, 211, 246, 230, 260, 275, 278,
+ 325, 392, 401, 430, 435, 297, 272, 244, 460, 241,
+ 486, 520, 521, 522, 524, 396, 267, 434, 397, 0,
+ 377, 577, 578, 317, 0, 0, 0, 529, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 417,
+ 0, 0, 0, 0, 0, 0, 0, 271, 0, 0,
+ 0, 0, 367, 268, 0, 1921, 204, 506, 0, 431,
+ 0, 203, 0, 488, 253, 378, 375, 584, 283, 274,
+ 270, 250, 318, 386, 429, 519, 423, 0, 371, 0,
+ 0, 498, 402, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 324, 248, 326, 202, 414, 499, 287, 0, 0,
+ 0, 0, 0, 508, 725, 0, 0, 0, 0, 0,
0, 0, 0, 0, 238, 0, 0, 245, 0, 0,
- 0, 351, 360, 359, 339, 340, 342, 344, 350, 357,
- 363, 336, 345, 0, 0, 609, 0, 0, 0, 265,
- 321, 272, 264, 580, 0, 0, 0, 0, 0, 0,
- 596, 0, 0, 229, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 275, 0,
+ 0, 352, 361, 360, 340, 341, 343, 345, 351, 358,
+ 364, 337, 346, 0, 0, 610, 0, 0, 0, 266,
+ 322, 273, 265, 581, 0, 0, 0, 0, 0, 0,
+ 597, 0, 0, 229, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 276, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -7148,147 +6384,73 @@ var yyAct = [...]int{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 297, 0, 402, 257, 0, 453, 0, 0, 0, 629,
- 0, 0, 0, 0, 0, 0, 0, 365, 0, 330,
- 197, 225, 0, 0, 412, 461, 473, 0, 0, 0,
- 253, 0, 471, 426, 604, 233, 284, 458, 432, 469,
- 440, 287, 0, 0, 470, 372, 585, 450, 601, 630,
- 631, 263, 406, 615, 522, 623, 648, 226, 260, 420,
- 506, 607, 494, 397, 581, 582, 329, 493, 295, 201,
- 369, 636, 224, 479, 371, 242, 231, 587, 612, 299,
- 289, 456, 643, 213, 517, 598, 239, 483, 0, 0,
- 651, 247, 504, 610, 599, 215, 594, 503, 393, 326,
- 327, 214, 0, 457, 268, 293, 0, 0, 258, 415,
- 589, 590, 256, 652, 228, 622, 220, 0, 621, 408,
- 584, 595, 394, 383, 219, 593, 392, 382, 334, 355,
- 356, 280, 307, 447, 375, 448, 306, 308, 404, 403,
- 405, 207, 608, 626, 0, 208, 0, 499, 611, 653,
- 452, 212, 234, 235, 237, 0, 279, 283, 291, 294,
- 303, 304, 313, 367, 419, 446, 442, 451, 0, 579,
- 602, 616, 628, 634, 635, 637, 638, 639, 640, 641,
- 644, 642, 407, 311, 495, 333, 373, 0, 0, 425,
- 472, 240, 606, 496, 199, 0, 0, 0, 0, 254,
- 255, 0, 575, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 654, 655, 656, 657, 658, 659, 660, 661,
+ 298, 0, 403, 258, 0, 454, 0, 0, 0, 630,
+ 0, 0, 0, 0, 0, 0, 0, 366, 0, 331,
+ 197, 225, 0, 0, 413, 462, 474, 0, 0, 0,
+ 254, 0, 472, 427, 605, 233, 285, 459, 433, 470,
+ 441, 288, 0, 0, 471, 373, 586, 451, 602, 631,
+ 632, 264, 407, 616, 523, 624, 649, 226, 261, 421,
+ 507, 608, 495, 398, 582, 583, 330, 494, 296, 201,
+ 370, 637, 224, 480, 372, 242, 231, 588, 613, 300,
+ 252, 290, 457, 644, 213, 518, 599, 239, 484, 0,
+ 0, 652, 247, 505, 611, 600, 215, 595, 504, 394,
+ 327, 328, 214, 0, 458, 269, 294, 0, 0, 259,
+ 416, 590, 591, 257, 653, 228, 623, 220, 0, 622,
+ 409, 585, 596, 395, 384, 219, 594, 393, 383, 335,
+ 356, 357, 281, 308, 448, 376, 449, 307, 309, 405,
+ 404, 406, 207, 609, 627, 0, 208, 0, 500, 612,
+ 654, 453, 212, 234, 235, 237, 0, 280, 284, 292,
+ 295, 304, 305, 314, 368, 420, 447, 443, 452, 0,
+ 580, 603, 617, 629, 635, 636, 638, 639, 640, 641,
+ 642, 645, 643, 408, 312, 496, 334, 374, 0, 0,
+ 426, 473, 240, 607, 497, 199, 0, 0, 0, 0,
+ 255, 256, 0, 576, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 655, 656, 657, 658, 659, 660, 661,
662, 663, 664, 665, 666, 667, 668, 669, 670, 671,
- 649, 508, 514, 509, 510, 511, 512, 513, 0, 515,
- 0, 0, 0, 0, 0, 398, 0, 591, 592, 672,
- 384, 486, 603, 335, 349, 352, 341, 361, 0, 362,
- 337, 338, 343, 346, 347, 348, 353, 354, 358, 364,
- 249, 210, 390, 399, 578, 312, 216, 217, 218, 524,
- 525, 526, 527, 619, 620, 624, 205, 462, 463, 464,
- 465, 292, 614, 309, 468, 467, 331, 332, 379, 449,
- 540, 542, 553, 557, 559, 561, 567, 570, 541, 543,
- 554, 558, 560, 562, 568, 571, 530, 532, 534, 536,
- 549, 548, 545, 573, 574, 551, 556, 535, 547, 552,
- 565, 572, 569, 529, 533, 537, 546, 564, 563, 544,
- 555, 566, 550, 538, 531, 539, 0, 196, 221, 368,
- 0, 454, 288, 650, 618, 484, 613, 206, 223, 0,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 198, 200, 209, 222, 232, 236, 243, 261,
- 276, 278, 285, 298, 310, 318, 319, 322, 328, 380,
- 386, 387, 388, 389, 4137, 410, 411, 414, 417, 418,
- 421, 423, 424, 427, 431, 435, 436, 437, 439, 441,
- 443, 455, 460, 474, 475, 476, 477, 478, 481, 482,
- 488, 489, 490, 491, 492, 500, 501, 516, 586, 588,
- 605, 625, 632, 480, 301, 302, 444, 445, 314, 315,
- 646, 647, 300, 600, 633, 597, 645, 627, 438, 378,
- 0, 0, 381, 281, 305, 320, 0, 617, 502, 227,
- 466, 290, 251, 0, 0, 211, 246, 230, 259, 274,
- 277, 324, 391, 400, 429, 434, 296, 271, 244, 459,
- 241, 485, 519, 520, 521, 523, 395, 266, 433, 396,
- 0, 376, 576, 577, 316, 0, 0, 0, 528, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 416, 0, 0, 0, 0, 0, 0, 0, 270, 0,
- 0, 0, 0, 366, 267, 0, 0, 204, 505, 0,
- 430, 0, 203, 0, 487, 252, 377, 374, 583, 282,
- 273, 269, 250, 317, 385, 428, 518, 422, 0, 370,
- 0, 0, 497, 401, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 323, 248, 325, 202, 413, 498, 286, 0,
- 0, 0, 0, 0, 507, 724, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 238, 0, 0, 245, 0,
- 0, 0, 351, 360, 359, 339, 340, 342, 344, 350,
- 357, 363, 336, 345, 0, 0, 609, 0, 0, 0,
- 265, 321, 272, 264, 580, 0, 0, 0, 0, 0,
- 0, 596, 0, 0, 229, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 275,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 297, 0, 402, 257, 0, 453, 0, 0, 0,
- 629, 0, 0, 0, 0, 0, 0, 0, 365, 0,
- 330, 197, 225, 0, 0, 412, 461, 473, 0, 0,
- 0, 253, 0, 471, 426, 604, 233, 284, 458, 432,
- 469, 440, 287, 0, 0, 470, 372, 585, 450, 601,
- 630, 631, 263, 406, 615, 522, 623, 648, 226, 260,
- 420, 506, 607, 494, 397, 581, 582, 329, 493, 295,
- 201, 369, 636, 224, 479, 371, 242, 231, 587, 612,
- 299, 289, 456, 643, 213, 517, 598, 239, 483, 0,
- 0, 651, 247, 504, 610, 599, 215, 594, 503, 393,
- 326, 327, 214, 0, 457, 268, 293, 0, 0, 258,
- 415, 589, 590, 256, 652, 228, 622, 220, 0, 621,
- 408, 584, 595, 394, 383, 219, 593, 392, 382, 334,
- 355, 356, 280, 307, 447, 375, 448, 306, 308, 404,
- 403, 405, 207, 608, 626, 0, 208, 0, 499, 611,
- 653, 452, 212, 234, 235, 237, 0, 279, 283, 291,
- 294, 303, 304, 313, 367, 419, 446, 442, 451, 0,
- 579, 602, 616, 628, 634, 635, 637, 638, 639, 640,
- 641, 644, 642, 407, 311, 495, 333, 373, 0, 0,
- 425, 472, 240, 606, 496, 199, 0, 0, 0, 0,
- 254, 255, 0, 575, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 654, 655, 656, 657, 658, 659, 660,
- 661, 662, 663, 664, 665, 666, 667, 668, 669, 670,
- 671, 649, 508, 514, 509, 510, 511, 512, 513, 0,
- 515, 0, 0, 0, 0, 0, 398, 0, 591, 592,
- 672, 384, 486, 603, 335, 349, 352, 341, 361, 0,
- 362, 337, 338, 343, 346, 347, 348, 353, 354, 358,
- 364, 249, 210, 390, 399, 578, 312, 216, 217, 218,
- 524, 525, 526, 527, 619, 620, 624, 205, 462, 463,
- 464, 465, 292, 614, 309, 468, 467, 331, 332, 379,
- 449, 540, 542, 553, 557, 559, 561, 567, 570, 541,
- 543, 554, 558, 560, 562, 568, 571, 530, 532, 534,
- 536, 549, 548, 545, 573, 574, 551, 556, 535, 547,
- 552, 565, 572, 569, 529, 533, 537, 546, 564, 563,
- 544, 555, 566, 550, 538, 531, 539, 0, 196, 221,
- 368, 0, 454, 288, 650, 618, 484, 613, 206, 223,
- 0, 262, 0, 0, 0, 0, 0, 0, 0, 0,
+ 672, 650, 509, 515, 510, 511, 512, 513, 514, 0,
+ 516, 0, 0, 0, 0, 0, 399, 0, 592, 593,
+ 673, 385, 487, 604, 336, 350, 353, 342, 362, 0,
+ 363, 338, 339, 344, 347, 348, 349, 354, 355, 359,
+ 365, 249, 210, 391, 400, 579, 313, 216, 217, 218,
+ 525, 526, 527, 528, 620, 621, 625, 205, 463, 464,
+ 465, 466, 293, 615, 310, 469, 468, 332, 333, 380,
+ 450, 541, 543, 554, 558, 560, 562, 568, 571, 542,
+ 544, 555, 559, 561, 563, 569, 572, 531, 533, 535,
+ 537, 550, 549, 546, 574, 575, 552, 557, 536, 548,
+ 553, 566, 573, 570, 530, 534, 538, 547, 565, 564,
+ 545, 556, 567, 551, 539, 532, 540, 0, 196, 221,
+ 369, 0, 455, 289, 651, 619, 485, 614, 206, 223,
+ 0, 263, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 198, 200, 209, 222, 232, 236, 243,
- 261, 276, 278, 285, 298, 310, 318, 319, 322, 328,
- 380, 386, 387, 388, 389, 409, 410, 411, 414, 417,
- 418, 421, 423, 424, 427, 431, 435, 436, 437, 439,
- 441, 443, 455, 460, 474, 475, 476, 477, 478, 481,
- 482, 488, 489, 490, 491, 492, 500, 501, 516, 586,
- 588, 605, 625, 632, 480, 301, 302, 444, 445, 314,
- 315, 646, 647, 300, 600, 633, 597, 645, 627, 438,
- 378, 0, 0, 381, 281, 305, 320, 0, 617, 502,
- 227, 466, 290, 251, 0, 0, 211, 246, 230, 259,
- 274, 277, 324, 391, 400, 429, 434, 296, 271, 244,
- 459, 241, 485, 519, 520, 521, 523, 395, 266, 433,
- 396, 0, 376, 576, 577, 316, 0, 0, 0, 528,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 416, 0, 0, 0, 0, 0, 0, 0, 270,
- 0, 0, 0, 0, 366, 267, 0, 0, 204, 505,
- 0, 430, 0, 203, 0, 487, 252, 377, 374, 583,
- 282, 273, 269, 250, 317, 385, 428, 518, 422, 0,
- 370, 0, 0, 497, 401, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 323, 248, 325, 202, 413, 498, 286,
- 0, 0, 0, 0, 0, 507, 959, 0, 0, 0,
+ 262, 277, 279, 286, 299, 311, 319, 320, 323, 329,
+ 381, 387, 388, 389, 390, 410, 411, 412, 415, 418,
+ 419, 422, 424, 425, 428, 432, 436, 437, 438, 440,
+ 442, 444, 456, 461, 475, 476, 477, 478, 479, 482,
+ 483, 489, 490, 491, 492, 493, 501, 502, 517, 587,
+ 589, 606, 626, 633, 481, 302, 303, 445, 446, 315,
+ 316, 647, 648, 301, 601, 634, 598, 646, 628, 439,
+ 379, 0, 0, 382, 282, 306, 321, 0, 618, 503,
+ 227, 467, 291, 251, 0, 0, 211, 246, 230, 260,
+ 275, 278, 325, 392, 401, 430, 435, 297, 272, 244,
+ 460, 241, 486, 520, 521, 522, 524, 396, 267, 434,
+ 397, 0, 377, 577, 578, 317, 0, 0, 0, 529,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 417, 0, 0, 0, 0, 0, 0, 0, 271,
+ 0, 0, 0, 0, 367, 268, 0, 1917, 204, 506,
+ 0, 431, 0, 203, 0, 488, 253, 378, 375, 584,
+ 283, 274, 270, 250, 318, 386, 429, 519, 423, 0,
+ 371, 0, 0, 498, 402, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 324, 248, 326, 202, 414, 499, 287,
+ 0, 0, 0, 0, 0, 508, 725, 0, 0, 0,
0, 0, 0, 0, 0, 0, 238, 0, 0, 245,
- 0, 0, 0, 351, 360, 359, 339, 340, 342, 344,
- 350, 357, 363, 336, 345, 0, 0, 609, 0, 0,
- 0, 265, 321, 272, 264, 580, 0, 0, 0, 0,
- 0, 0, 596, 0, 0, 229, 0, 0, 0, 0,
+ 0, 0, 0, 352, 361, 360, 340, 341, 343, 345,
+ 351, 358, 364, 337, 346, 0, 0, 610, 0, 0,
+ 0, 266, 322, 273, 265, 581, 0, 0, 0, 0,
+ 0, 0, 597, 0, 0, 229, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 275, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 276, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -7296,161 +6458,971 @@ var yyAct = [...]int{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 297, 0, 402, 257, 0, 453, 0, 0,
- 0, 629, 0, 0, 0, 0, 0, 0, 0, 365,
- 0, 330, 197, 225, 0, 0, 412, 461, 473, 0,
- 0, 0, 253, 0, 471, 426, 604, 233, 284, 458,
- 432, 469, 440, 287, 0, 0, 470, 372, 585, 450,
- 601, 630, 631, 263, 406, 615, 522, 623, 648, 226,
- 260, 420, 506, 607, 494, 397, 581, 582, 329, 493,
- 295, 201, 369, 636, 224, 479, 371, 242, 231, 587,
- 612, 299, 289, 456, 643, 213, 517, 598, 239, 483,
- 0, 0, 651, 247, 504, 610, 599, 215, 594, 503,
- 393, 326, 327, 214, 0, 457, 268, 293, 0, 0,
- 258, 415, 589, 590, 256, 652, 228, 622, 220, 0,
- 621, 408, 584, 595, 394, 383, 219, 593, 392, 382,
- 334, 355, 356, 280, 307, 447, 375, 448, 306, 308,
- 404, 403, 405, 207, 608, 626, 0, 208, 0, 499,
- 611, 653, 452, 212, 234, 235, 237, 0, 279, 283,
- 291, 294, 303, 304, 313, 367, 419, 446, 442, 451,
- 0, 579, 602, 616, 628, 634, 635, 637, 638, 639,
- 640, 641, 644, 642, 407, 311, 495, 333, 373, 0,
- 0, 425, 472, 240, 606, 496, 199, 0, 0, 0,
- 0, 254, 255, 0, 575, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 654, 655, 656, 657, 658, 659,
+ 0, 0, 298, 0, 403, 258, 0, 454, 0, 0,
+ 0, 630, 0, 0, 0, 0, 0, 0, 0, 366,
+ 0, 331, 197, 225, 0, 0, 413, 462, 474, 0,
+ 0, 0, 254, 0, 472, 427, 605, 233, 285, 459,
+ 433, 470, 441, 288, 0, 0, 471, 373, 586, 451,
+ 602, 631, 632, 264, 407, 616, 523, 624, 649, 226,
+ 261, 421, 507, 608, 495, 398, 582, 583, 330, 494,
+ 296, 201, 370, 637, 224, 480, 372, 242, 231, 588,
+ 613, 300, 252, 290, 457, 644, 213, 518, 599, 239,
+ 484, 0, 0, 652, 247, 505, 611, 600, 215, 595,
+ 504, 394, 327, 328, 214, 0, 458, 269, 294, 0,
+ 0, 259, 416, 590, 591, 257, 653, 228, 623, 220,
+ 0, 622, 409, 585, 596, 395, 384, 219, 594, 393,
+ 383, 335, 356, 357, 281, 308, 448, 376, 449, 307,
+ 309, 405, 404, 406, 207, 609, 627, 0, 208, 0,
+ 500, 612, 654, 453, 212, 234, 235, 237, 0, 280,
+ 284, 292, 295, 304, 305, 314, 368, 420, 447, 443,
+ 452, 0, 580, 603, 617, 629, 635, 636, 638, 639,
+ 640, 641, 642, 645, 643, 408, 312, 496, 334, 374,
+ 0, 0, 426, 473, 240, 607, 497, 199, 0, 0,
+ 0, 0, 255, 256, 0, 576, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 655, 656, 657, 658, 659,
660, 661, 662, 663, 664, 665, 666, 667, 668, 669,
- 670, 671, 649, 508, 514, 509, 510, 511, 512, 513,
- 0, 515, 0, 0, 0, 0, 0, 398, 0, 591,
- 592, 672, 384, 486, 603, 335, 349, 352, 341, 361,
- 0, 362, 337, 338, 343, 346, 347, 348, 353, 354,
- 358, 364, 249, 210, 390, 399, 578, 312, 216, 217,
- 218, 524, 525, 526, 527, 619, 620, 624, 205, 462,
- 463, 464, 465, 292, 614, 309, 468, 467, 331, 332,
- 379, 449, 540, 542, 553, 557, 559, 561, 567, 570,
- 541, 543, 554, 558, 560, 562, 568, 571, 530, 532,
- 534, 536, 549, 548, 545, 573, 574, 551, 556, 535,
- 547, 552, 565, 572, 569, 529, 533, 537, 546, 564,
- 563, 544, 555, 566, 550, 538, 531, 539, 0, 196,
- 221, 368, 0, 454, 288, 650, 618, 484, 613, 206,
- 223, 0, 262, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 198, 200, 209, 222, 232, 236,
- 243, 261, 276, 278, 285, 298, 310, 318, 319, 322,
- 328, 380, 386, 387, 388, 389, 409, 410, 411, 414,
- 417, 418, 421, 423, 424, 427, 431, 435, 436, 437,
- 439, 441, 443, 455, 460, 474, 475, 476, 477, 478,
- 481, 482, 488, 489, 490, 491, 492, 500, 501, 516,
- 586, 588, 605, 625, 632, 480, 301, 302, 444, 445,
- 314, 315, 646, 647, 300, 600, 633, 597, 645, 627,
- 438, 378, 0, 0, 381, 281, 305, 320, 0, 617,
- 502, 227, 466, 290, 251, 0, 0, 211, 246, 230,
- 259, 274, 277, 324, 391, 400, 429, 434, 296, 271,
- 244, 459, 241, 485, 519, 520, 521, 523, 395, 266,
- 433, 396, 0, 376, 576, 577, 316, 0, 0, 0,
- 528, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 416, 0, 0, 0, 0, 0, 0, 0,
- 270, 0, 0, 0, 0, 366, 267, 0, 0, 204,
- 505, 0, 430, 0, 203, 0, 487, 252, 377, 374,
- 583, 282, 273, 269, 250, 317, 385, 428, 518, 422,
- 0, 370, 0, 0, 497, 401, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 323, 248, 325, 202, 413, 498,
- 286, 0, 0, 0, 0, 0, 507, 194, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 238, 0, 0,
- 245, 0, 0, 0, 351, 360, 359, 339, 340, 342,
- 344, 350, 357, 363, 336, 345, 0, 0, 609, 0,
- 0, 0, 265, 321, 272, 264, 580, 0, 0, 0,
- 0, 0, 0, 596, 0, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 275, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 297, 0, 402, 257, 0, 453, 0,
- 0, 0, 629, 0, 0, 0, 0, 0, 0, 0,
- 365, 0, 330, 197, 225, 0, 0, 412, 461, 473,
- 0, 0, 0, 253, 0, 471, 426, 604, 233, 284,
- 458, 432, 469, 440, 287, 0, 0, 470, 372, 585,
- 450, 601, 630, 631, 263, 406, 615, 522, 623, 648,
- 226, 260, 420, 506, 607, 494, 397, 581, 582, 329,
- 493, 295, 201, 369, 636, 224, 479, 371, 242, 231,
- 587, 612, 299, 289, 456, 643, 213, 517, 598, 239,
- 483, 0, 0, 651, 247, 504, 610, 599, 215, 594,
- 503, 393, 326, 327, 214, 0, 457, 268, 293, 0,
- 0, 258, 415, 589, 590, 256, 652, 228, 622, 220,
- 0, 621, 408, 584, 595, 394, 383, 219, 593, 392,
- 382, 334, 355, 356, 280, 307, 447, 375, 448, 306,
- 308, 404, 403, 405, 207, 608, 626, 0, 208, 0,
- 499, 611, 653, 452, 212, 234, 235, 237, 0, 279,
- 283, 291, 294, 303, 304, 313, 367, 419, 446, 442,
- 451, 0, 579, 602, 616, 628, 634, 635, 637, 638,
- 639, 640, 641, 644, 642, 407, 311, 495, 333, 373,
- 0, 0, 425, 472, 240, 606, 496, 199, 0, 0,
- 0, 0, 254, 255, 0, 575, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 654, 655, 656, 657, 658,
- 659, 660, 661, 662, 663, 664, 665, 666, 667, 668,
- 669, 670, 671, 649, 508, 514, 509, 510, 511, 512,
- 513, 0, 515, 0, 0, 0, 0, 0, 398, 0,
- 591, 592, 672, 384, 486, 603, 335, 349, 352, 341,
- 361, 0, 362, 337, 338, 343, 346, 347, 348, 353,
- 354, 358, 364, 249, 210, 390, 399, 578, 312, 216,
- 217, 218, 524, 525, 526, 527, 619, 620, 624, 205,
- 462, 463, 464, 465, 292, 614, 309, 468, 467, 331,
- 332, 379, 449, 540, 542, 553, 557, 559, 561, 567,
- 570, 541, 543, 554, 558, 560, 562, 568, 571, 530,
- 532, 534, 536, 549, 548, 545, 573, 574, 551, 556,
- 535, 547, 552, 565, 572, 569, 529, 533, 537, 546,
- 564, 563, 544, 555, 566, 550, 538, 531, 539, 0,
- 196, 221, 368, 0, 454, 288, 650, 618, 484, 613,
- 206, 223, 0, 262, 0, 0, 0, 0, 0, 0,
+ 670, 671, 672, 650, 509, 515, 510, 511, 512, 513,
+ 514, 0, 516, 0, 0, 0, 0, 0, 399, 0,
+ 592, 593, 673, 385, 487, 604, 336, 350, 353, 342,
+ 362, 0, 363, 338, 339, 344, 347, 348, 349, 354,
+ 355, 359, 365, 249, 210, 391, 400, 579, 313, 216,
+ 217, 218, 525, 526, 527, 528, 620, 621, 625, 205,
+ 463, 464, 465, 466, 293, 615, 310, 469, 468, 332,
+ 333, 380, 450, 541, 543, 554, 558, 560, 562, 568,
+ 571, 542, 544, 555, 559, 561, 563, 569, 572, 531,
+ 533, 535, 537, 550, 549, 546, 574, 575, 552, 557,
+ 536, 548, 553, 566, 573, 570, 530, 534, 538, 547,
+ 565, 564, 545, 556, 567, 551, 539, 532, 540, 0,
+ 196, 221, 369, 0, 455, 289, 651, 619, 485, 614,
+ 206, 223, 0, 263, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 198, 200, 209, 222, 232,
- 236, 243, 261, 276, 278, 285, 298, 310, 318, 319,
- 322, 328, 380, 386, 387, 388, 389, 409, 410, 411,
- 414, 417, 418, 421, 423, 424, 427, 431, 435, 436,
- 437, 439, 441, 443, 455, 460, 474, 475, 476, 477,
- 478, 481, 482, 488, 489, 490, 491, 492, 500, 501,
- 516, 586, 588, 605, 625, 632, 480, 301, 302, 444,
- 445, 314, 315, 646, 647, 300, 600, 633, 597, 645,
- 627, 438, 378, 0, 0, 381, 281, 305, 320, 0,
- 617, 502, 227, 466, 290, 251, 0, 0, 211, 246,
- 230, 259, 274, 277, 324, 391, 400, 429, 434, 296,
- 271, 244, 459, 241, 485, 519, 520, 521, 523, 395,
- 266, 433, 0, 0, 376, 576, 577, 316,
-}
-
-var yyPact = [...]int{
- -1000, -1000, 4288, -1000, -548, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, 2378, 2438, -1000, -1000, -1000, -1000, 2578, -1000, 993,
- 2027, -1000, 2363, 5078, -1000, 56487, 523, -1000, 53523, -453,
- 858, 217, 37221, -1000, 197, -1000, 185, 55005, 190, -1000,
- -1000, -1000, -1000, -453, 22401, 2260, 54, 53, 56487, -1000,
- -1000, -1000, -1000, -374, 2525, 1986, -1000, 406, -1000, -1000,
- -1000, -1000, -1000, -1000, 52782, -1000, 1086, -1000, -1000, 2375,
- 2360, 2240, 902, 2242, -1000, 2466, 1986, -1000, 22401, 2518,
- 2334, 21660, 21660, 462, -1000, -1000, 232, -1000, -1000, 32034,
- 56487, 40185, 281, -1000, 2363, -1000, -1000, -1000, 202, -1000,
- 360, 1906, -1000, 1905, -1000, 909, 875, 370, 860, 473,
- 369, 366, 365, 364, 363, 361, 359, 346, 383, -1000,
- 926, 926, -210, -211, 1338, 447, 445, 445, 1067, 478,
- 2336, 2332, -1000, -1000, 926, 926, 926, 341, 926, 926,
- 926, 926, 314, 312, 926, 926, 926, 926, 926, 926,
- 926, 926, 926, 926, 926, 926, 926, 926, 926, 926,
- 926, 932, 2363, 282, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ 236, 243, 262, 277, 279, 286, 299, 311, 319, 320,
+ 323, 329, 381, 387, 388, 389, 390, 410, 411, 412,
+ 415, 418, 419, 422, 424, 425, 428, 432, 436, 437,
+ 438, 440, 442, 444, 456, 461, 475, 476, 477, 478,
+ 479, 482, 483, 489, 490, 491, 492, 493, 501, 502,
+ 517, 587, 589, 606, 626, 633, 481, 302, 303, 445,
+ 446, 315, 316, 647, 648, 301, 601, 634, 598, 646,
+ 628, 439, 379, 0, 0, 382, 282, 306, 321, 0,
+ 618, 503, 227, 467, 291, 251, 0, 0, 211, 246,
+ 230, 260, 275, 278, 325, 392, 401, 430, 435, 297,
+ 272, 244, 460, 241, 486, 520, 521, 522, 524, 396,
+ 267, 434, 397, 0, 377, 577, 578, 317, 0, 0,
+ 0, 529, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 417, 0, 0, 0, 0, 0, 0,
+ 0, 271, 0, 0, 0, 0, 367, 268, 0, 1915,
+ 204, 506, 0, 431, 0, 203, 0, 488, 253, 378,
+ 375, 584, 283, 274, 270, 250, 318, 386, 429, 519,
+ 423, 0, 371, 0, 0, 498, 402, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 324, 248, 326, 202, 414,
+ 499, 287, 0, 0, 0, 0, 0, 508, 725, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 238, 0,
+ 0, 245, 0, 0, 0, 352, 361, 360, 340, 341,
+ 343, 345, 351, 358, 364, 337, 346, 0, 0, 610,
+ 0, 0, 0, 266, 322, 273, 265, 581, 0, 0,
+ 0, 0, 0, 0, 597, 0, 0, 229, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 276, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 298, 0, 403, 258, 0, 454,
+ 0, 0, 0, 630, 0, 0, 0, 0, 0, 0,
+ 0, 366, 0, 331, 197, 225, 0, 0, 413, 462,
+ 474, 0, 0, 0, 254, 0, 472, 427, 605, 233,
+ 285, 459, 433, 470, 441, 288, 0, 0, 471, 373,
+ 586, 451, 602, 631, 632, 264, 407, 616, 523, 624,
+ 649, 226, 261, 421, 507, 608, 495, 398, 582, 583,
+ 330, 494, 296, 201, 370, 637, 224, 480, 372, 242,
+ 231, 588, 613, 300, 252, 290, 457, 644, 213, 518,
+ 599, 239, 484, 0, 0, 652, 247, 505, 611, 600,
+ 215, 595, 504, 394, 327, 328, 214, 0, 458, 269,
+ 294, 0, 0, 259, 416, 590, 591, 257, 653, 228,
+ 623, 220, 0, 622, 409, 585, 596, 395, 384, 219,
+ 594, 393, 383, 335, 356, 357, 281, 308, 448, 376,
+ 449, 307, 309, 405, 404, 406, 207, 609, 627, 0,
+ 208, 0, 500, 612, 654, 453, 212, 234, 235, 237,
+ 0, 280, 284, 292, 295, 304, 305, 314, 368, 420,
+ 447, 443, 452, 0, 580, 603, 617, 629, 635, 636,
+ 638, 639, 640, 641, 642, 645, 643, 408, 312, 496,
+ 334, 374, 0, 0, 426, 473, 240, 607, 497, 199,
+ 0, 0, 0, 0, 255, 256, 0, 576, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 655, 656, 657,
+ 658, 659, 660, 661, 662, 663, 664, 665, 666, 667,
+ 668, 669, 670, 671, 672, 650, 509, 515, 510, 511,
+ 512, 513, 514, 0, 516, 0, 0, 0, 0, 0,
+ 399, 0, 592, 593, 673, 385, 487, 604, 336, 350,
+ 353, 342, 362, 0, 363, 338, 339, 344, 347, 348,
+ 349, 354, 355, 359, 365, 249, 210, 391, 400, 579,
+ 313, 216, 217, 218, 525, 526, 527, 528, 620, 621,
+ 625, 205, 463, 464, 465, 466, 293, 615, 310, 469,
+ 468, 332, 333, 380, 450, 541, 543, 554, 558, 560,
+ 562, 568, 571, 542, 544, 555, 559, 561, 563, 569,
+ 572, 531, 533, 535, 537, 550, 549, 546, 574, 575,
+ 552, 557, 536, 548, 553, 566, 573, 570, 530, 534,
+ 538, 547, 565, 564, 545, 556, 567, 551, 539, 532,
+ 540, 0, 196, 221, 369, 0, 455, 289, 651, 619,
+ 485, 614, 206, 223, 0, 263, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 198, 200, 209,
+ 222, 232, 236, 243, 262, 277, 279, 286, 299, 311,
+ 319, 320, 323, 329, 381, 387, 388, 389, 390, 410,
+ 411, 412, 415, 418, 419, 422, 424, 425, 428, 432,
+ 436, 437, 438, 440, 442, 444, 456, 461, 475, 476,
+ 477, 478, 479, 482, 483, 489, 490, 491, 492, 493,
+ 501, 502, 517, 587, 589, 606, 626, 633, 481, 302,
+ 303, 445, 446, 315, 316, 647, 648, 301, 601, 634,
+ 598, 646, 628, 439, 379, 0, 0, 382, 282, 306,
+ 321, 0, 618, 503, 227, 467, 291, 251, 0, 0,
+ 211, 246, 230, 260, 275, 278, 325, 392, 401, 430,
+ 435, 297, 272, 244, 460, 241, 486, 520, 521, 522,
+ 524, 396, 267, 434, 397, 0, 377, 577, 578, 317,
+ 0, 0, 0, 529, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 417, 0, 0, 0, 0,
+ 0, 0, 0, 271, 0, 0, 0, 0, 367, 268,
+ 0, 1913, 204, 506, 0, 431, 0, 203, 0, 488,
+ 253, 378, 375, 584, 283, 274, 270, 250, 318, 386,
+ 429, 519, 423, 0, 371, 0, 0, 498, 402, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 324, 248, 326,
+ 202, 414, 499, 287, 0, 0, 0, 0, 0, 508,
+ 725, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 238, 0, 0, 245, 0, 0, 0, 352, 361, 360,
+ 340, 341, 343, 345, 351, 358, 364, 337, 346, 0,
+ 0, 610, 0, 0, 0, 266, 322, 273, 265, 581,
+ 0, 0, 0, 0, 0, 0, 597, 0, 0, 229,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 276, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 298, 0, 403, 258,
+ 0, 454, 0, 0, 0, 630, 0, 0, 0, 0,
+ 0, 0, 0, 366, 0, 331, 197, 225, 0, 0,
+ 413, 462, 474, 0, 0, 0, 254, 0, 472, 427,
+ 605, 233, 285, 459, 433, 470, 441, 288, 0, 0,
+ 471, 373, 586, 451, 602, 631, 632, 264, 407, 616,
+ 523, 624, 649, 226, 261, 421, 507, 608, 495, 398,
+ 582, 583, 330, 494, 296, 201, 370, 637, 224, 480,
+ 372, 242, 231, 588, 613, 300, 252, 290, 457, 644,
+ 213, 518, 599, 239, 484, 0, 0, 652, 247, 505,
+ 611, 600, 215, 595, 504, 394, 327, 328, 214, 0,
+ 458, 269, 294, 0, 0, 259, 416, 590, 591, 257,
+ 653, 228, 623, 220, 0, 622, 409, 585, 596, 395,
+ 384, 219, 594, 393, 383, 335, 356, 357, 281, 308,
+ 448, 376, 449, 307, 309, 405, 404, 406, 207, 609,
+ 627, 0, 208, 0, 500, 612, 654, 453, 212, 234,
+ 235, 237, 0, 280, 284, 292, 295, 304, 305, 314,
+ 368, 420, 447, 443, 452, 0, 580, 603, 617, 629,
+ 635, 636, 638, 639, 640, 641, 642, 645, 643, 408,
+ 312, 496, 334, 374, 0, 0, 426, 473, 240, 607,
+ 497, 199, 0, 0, 0, 0, 255, 256, 0, 576,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 655,
+ 656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
+ 666, 667, 668, 669, 670, 671, 672, 650, 509, 515,
+ 510, 511, 512, 513, 514, 0, 516, 0, 0, 0,
+ 0, 0, 399, 0, 592, 593, 673, 385, 487, 604,
+ 336, 350, 353, 342, 362, 0, 363, 338, 339, 344,
+ 347, 348, 349, 354, 355, 359, 365, 249, 210, 391,
+ 400, 579, 313, 216, 217, 218, 525, 526, 527, 528,
+ 620, 621, 625, 205, 463, 464, 465, 466, 293, 615,
+ 310, 469, 468, 332, 333, 380, 450, 541, 543, 554,
+ 558, 560, 562, 568, 571, 542, 544, 555, 559, 561,
+ 563, 569, 572, 531, 533, 535, 537, 550, 549, 546,
+ 574, 575, 552, 557, 536, 548, 553, 566, 573, 570,
+ 530, 534, 538, 547, 565, 564, 545, 556, 567, 551,
+ 539, 532, 540, 0, 196, 221, 369, 0, 455, 289,
+ 651, 619, 485, 614, 206, 223, 0, 263, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 198,
+ 200, 209, 222, 232, 236, 243, 262, 277, 279, 286,
+ 299, 311, 319, 320, 323, 329, 381, 387, 388, 389,
+ 390, 410, 411, 412, 415, 418, 419, 422, 424, 425,
+ 428, 432, 436, 437, 438, 440, 442, 444, 456, 461,
+ 475, 476, 477, 478, 479, 482, 483, 489, 490, 491,
+ 492, 493, 501, 502, 517, 587, 589, 606, 626, 633,
+ 481, 302, 303, 445, 446, 315, 316, 647, 648, 301,
+ 601, 634, 598, 646, 628, 439, 379, 0, 0, 382,
+ 282, 306, 321, 0, 618, 503, 227, 467, 291, 251,
+ 0, 0, 211, 246, 230, 260, 275, 278, 325, 392,
+ 401, 430, 435, 297, 272, 244, 460, 241, 486, 520,
+ 521, 522, 524, 396, 267, 434, 397, 0, 377, 577,
+ 578, 317, 0, 0, 0, 529, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 417, 0, 0,
+ 0, 0, 0, 0, 0, 271, 0, 0, 0, 0,
+ 367, 268, 0, 0, 204, 506, 0, 431, 0, 203,
+ 0, 488, 253, 378, 375, 584, 283, 274, 270, 250,
+ 318, 386, 429, 519, 423, 0, 371, 0, 0, 498,
+ 402, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 324,
+ 248, 326, 202, 414, 499, 287, 0, 1888, 0, 0,
+ 0, 508, 725, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 238, 0, 0, 245, 0, 0, 0, 352,
+ 361, 360, 340, 341, 343, 345, 351, 358, 364, 337,
+ 346, 0, 0, 610, 0, 0, 0, 266, 322, 273,
+ 265, 581, 0, 0, 0, 0, 0, 0, 597, 0,
+ 0, 229, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 276, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 298, 0,
+ 403, 258, 0, 454, 0, 0, 0, 630, 0, 0,
+ 0, 0, 0, 0, 0, 366, 0, 331, 197, 225,
+ 0, 0, 413, 462, 474, 0, 0, 0, 254, 0,
+ 472, 427, 605, 233, 285, 459, 433, 470, 441, 288,
+ 0, 0, 471, 373, 586, 451, 602, 631, 632, 264,
+ 407, 616, 523, 624, 649, 226, 261, 421, 507, 608,
+ 495, 398, 582, 583, 330, 494, 296, 201, 370, 637,
+ 224, 480, 372, 242, 231, 588, 613, 300, 252, 290,
+ 457, 644, 213, 518, 599, 239, 484, 0, 0, 652,
+ 247, 505, 611, 600, 215, 595, 504, 394, 327, 328,
+ 214, 0, 458, 269, 294, 0, 0, 259, 416, 590,
+ 591, 257, 653, 228, 623, 220, 0, 622, 409, 585,
+ 596, 395, 384, 219, 594, 393, 383, 335, 356, 357,
+ 281, 308, 448, 376, 449, 307, 309, 405, 404, 406,
+ 207, 609, 627, 0, 208, 0, 500, 612, 654, 453,
+ 212, 234, 235, 237, 0, 280, 284, 292, 295, 304,
+ 305, 314, 368, 420, 447, 443, 452, 0, 580, 603,
+ 617, 629, 635, 636, 638, 639, 640, 641, 642, 645,
+ 643, 408, 312, 496, 334, 374, 0, 0, 426, 473,
+ 240, 607, 497, 199, 0, 0, 0, 0, 255, 256,
+ 0, 576, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 655, 656, 657, 658, 659, 660, 661, 662, 663,
+ 664, 665, 666, 667, 668, 669, 670, 671, 672, 650,
+ 509, 515, 510, 511, 512, 513, 514, 0, 516, 0,
+ 0, 0, 0, 0, 399, 0, 592, 593, 673, 385,
+ 487, 604, 336, 350, 353, 342, 362, 0, 363, 338,
+ 339, 344, 347, 348, 349, 354, 355, 359, 365, 249,
+ 210, 391, 400, 579, 313, 216, 217, 218, 525, 526,
+ 527, 528, 620, 621, 625, 205, 463, 464, 465, 466,
+ 293, 615, 310, 469, 468, 332, 333, 380, 450, 541,
+ 543, 554, 558, 560, 562, 568, 571, 542, 544, 555,
+ 559, 561, 563, 569, 572, 531, 533, 535, 537, 550,
+ 549, 546, 574, 575, 552, 557, 536, 548, 553, 566,
+ 573, 570, 530, 534, 538, 547, 565, 564, 545, 556,
+ 567, 551, 539, 532, 540, 0, 196, 221, 369, 0,
+ 455, 289, 651, 619, 485, 614, 206, 223, 0, 263,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 198, 200, 209, 222, 232, 236, 243, 262, 277,
+ 279, 286, 299, 311, 319, 320, 323, 329, 381, 387,
+ 388, 389, 390, 410, 411, 412, 415, 418, 419, 422,
+ 424, 425, 428, 432, 436, 437, 438, 440, 442, 444,
+ 456, 461, 475, 476, 477, 478, 479, 482, 483, 489,
+ 490, 491, 492, 493, 501, 502, 517, 587, 589, 606,
+ 626, 633, 481, 302, 303, 445, 446, 315, 316, 647,
+ 648, 301, 601, 634, 598, 646, 628, 439, 379, 0,
+ 0, 382, 282, 306, 321, 0, 618, 503, 227, 467,
+ 291, 251, 0, 0, 211, 246, 230, 260, 275, 278,
+ 325, 392, 401, 430, 435, 297, 272, 244, 460, 241,
+ 486, 520, 521, 522, 524, 396, 267, 434, 397, 0,
+ 377, 577, 578, 317, 0, 0, 0, 529, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 417,
+ 0, 0, 0, 0, 0, 0, 1785, 271, 0, 0,
+ 0, 0, 367, 268, 0, 0, 204, 506, 0, 431,
+ 0, 203, 0, 488, 253, 378, 375, 584, 283, 274,
+ 270, 250, 318, 386, 429, 519, 423, 0, 371, 0,
+ 0, 498, 402, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 324, 248, 326, 202, 414, 499, 287, 0, 0,
+ 0, 0, 0, 508, 194, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 238, 0, 0, 245, 0, 0,
+ 0, 352, 361, 360, 340, 341, 343, 345, 351, 358,
+ 364, 337, 346, 0, 0, 610, 0, 0, 0, 266,
+ 322, 273, 265, 581, 0, 0, 0, 0, 0, 0,
+ 597, 0, 0, 229, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 276, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 298, 0, 403, 258, 0, 454, 0, 0, 0, 630,
+ 0, 0, 0, 0, 0, 0, 0, 366, 0, 331,
+ 197, 225, 0, 0, 413, 462, 474, 0, 0, 0,
+ 254, 0, 472, 427, 605, 233, 285, 459, 433, 470,
+ 441, 288, 0, 0, 471, 373, 586, 451, 602, 631,
+ 632, 264, 407, 616, 523, 624, 649, 226, 261, 421,
+ 507, 608, 495, 398, 582, 583, 330, 494, 296, 201,
+ 370, 637, 224, 480, 372, 242, 231, 588, 613, 300,
+ 252, 290, 457, 644, 213, 518, 599, 239, 484, 0,
+ 0, 652, 247, 505, 611, 600, 215, 595, 504, 394,
+ 327, 328, 214, 0, 458, 269, 294, 0, 0, 259,
+ 416, 590, 591, 257, 653, 228, 623, 220, 0, 622,
+ 409, 585, 596, 395, 384, 219, 594, 393, 383, 335,
+ 356, 357, 281, 308, 448, 376, 449, 307, 309, 405,
+ 404, 406, 207, 609, 627, 0, 208, 0, 500, 612,
+ 654, 453, 212, 234, 235, 237, 0, 280, 284, 292,
+ 295, 304, 305, 314, 368, 420, 447, 443, 452, 0,
+ 580, 603, 617, 629, 635, 636, 638, 639, 640, 641,
+ 642, 645, 643, 408, 312, 496, 334, 374, 0, 0,
+ 426, 473, 240, 607, 497, 199, 0, 0, 0, 0,
+ 255, 256, 0, 576, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 655, 656, 657, 658, 659, 660, 661,
+ 662, 663, 664, 665, 666, 667, 668, 669, 670, 671,
+ 672, 650, 509, 515, 510, 511, 512, 513, 514, 0,
+ 516, 0, 0, 0, 0, 0, 399, 0, 592, 593,
+ 673, 385, 487, 604, 336, 350, 353, 342, 362, 0,
+ 363, 338, 339, 344, 347, 348, 349, 354, 355, 359,
+ 365, 249, 210, 391, 400, 579, 313, 216, 217, 218,
+ 525, 526, 527, 528, 620, 621, 625, 205, 463, 464,
+ 465, 466, 293, 615, 310, 469, 468, 332, 333, 380,
+ 450, 541, 543, 554, 558, 560, 562, 568, 571, 542,
+ 544, 555, 559, 561, 563, 569, 572, 531, 533, 535,
+ 537, 550, 549, 546, 574, 575, 552, 557, 536, 548,
+ 553, 566, 573, 570, 530, 534, 538, 547, 565, 564,
+ 545, 556, 567, 551, 539, 532, 540, 0, 196, 221,
+ 369, 0, 455, 289, 651, 619, 485, 614, 206, 223,
+ 0, 263, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 198, 200, 209, 222, 232, 236, 243,
+ 262, 277, 279, 286, 299, 311, 319, 320, 323, 329,
+ 381, 387, 388, 389, 390, 410, 411, 412, 415, 418,
+ 419, 422, 424, 425, 428, 432, 436, 437, 438, 440,
+ 442, 444, 456, 461, 475, 476, 477, 478, 479, 482,
+ 483, 489, 490, 491, 492, 493, 501, 502, 517, 587,
+ 589, 606, 626, 633, 481, 302, 303, 445, 446, 315,
+ 316, 647, 648, 301, 601, 634, 598, 646, 628, 439,
+ 379, 0, 0, 382, 282, 306, 321, 0, 618, 503,
+ 227, 467, 291, 251, 0, 0, 211, 246, 230, 260,
+ 275, 278, 325, 392, 401, 430, 435, 297, 272, 244,
+ 460, 241, 486, 520, 521, 522, 524, 396, 267, 434,
+ 397, 0, 377, 577, 578, 317, 0, 0, 0, 529,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 417, 0, 0, 0, 0, 0, 0, 0, 271,
+ 0, 0, 0, 0, 367, 268, 0, 0, 204, 506,
+ 0, 431, 0, 203, 0, 488, 253, 378, 375, 584,
+ 283, 274, 270, 250, 318, 386, 429, 519, 423, 0,
+ 371, 0, 0, 498, 402, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 324, 248, 326, 202, 414, 499, 287,
+ 0, 95, 0, 0, 0, 508, 960, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 238, 0, 0, 245,
+ 0, 0, 0, 352, 361, 360, 340, 341, 343, 345,
+ 351, 358, 364, 337, 346, 0, 0, 610, 0, 0,
+ 0, 266, 322, 273, 265, 581, 0, 0, 0, 0,
+ 0, 0, 597, 0, 0, 229, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 276, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 298, 0, 403, 258, 0, 454, 0, 0,
+ 0, 630, 0, 0, 0, 0, 0, 0, 0, 366,
+ 0, 331, 197, 225, 0, 0, 413, 462, 474, 0,
+ 0, 0, 254, 0, 472, 427, 605, 233, 285, 459,
+ 433, 470, 441, 288, 0, 0, 471, 373, 586, 451,
+ 602, 631, 632, 264, 407, 616, 523, 624, 649, 226,
+ 261, 421, 507, 608, 495, 398, 582, 583, 330, 494,
+ 296, 201, 370, 637, 224, 480, 372, 242, 231, 588,
+ 613, 300, 252, 290, 457, 644, 213, 518, 599, 239,
+ 484, 0, 0, 652, 247, 505, 611, 600, 215, 595,
+ 504, 394, 327, 328, 214, 0, 458, 269, 294, 0,
+ 0, 259, 416, 590, 591, 257, 653, 228, 623, 220,
+ 0, 622, 409, 585, 596, 395, 384, 219, 594, 393,
+ 383, 335, 356, 357, 281, 308, 448, 376, 449, 307,
+ 309, 405, 404, 406, 207, 609, 627, 0, 208, 0,
+ 500, 612, 654, 453, 212, 234, 235, 237, 0, 280,
+ 284, 292, 295, 304, 305, 314, 368, 420, 447, 443,
+ 452, 0, 580, 603, 617, 629, 635, 636, 638, 639,
+ 640, 641, 642, 645, 643, 408, 312, 496, 334, 374,
+ 0, 0, 426, 473, 240, 607, 497, 199, 0, 0,
+ 0, 0, 255, 256, 0, 576, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 655, 656, 657, 658, 659,
+ 660, 661, 662, 663, 664, 665, 666, 667, 668, 669,
+ 670, 671, 672, 650, 509, 515, 510, 511, 512, 513,
+ 514, 0, 516, 0, 0, 0, 0, 0, 399, 0,
+ 592, 593, 673, 385, 487, 604, 336, 350, 353, 342,
+ 362, 0, 363, 338, 339, 344, 347, 348, 349, 354,
+ 355, 359, 365, 249, 210, 391, 400, 579, 313, 216,
+ 217, 218, 525, 526, 527, 528, 620, 621, 625, 205,
+ 463, 464, 465, 466, 293, 615, 310, 469, 468, 332,
+ 333, 380, 450, 541, 543, 554, 558, 560, 562, 568,
+ 571, 542, 544, 555, 559, 561, 563, 569, 572, 531,
+ 533, 535, 537, 550, 549, 546, 574, 575, 552, 557,
+ 536, 548, 553, 566, 573, 570, 530, 534, 538, 547,
+ 565, 564, 545, 556, 567, 551, 539, 532, 540, 0,
+ 196, 221, 369, 0, 455, 289, 651, 619, 485, 614,
+ 206, 223, 0, 263, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 198, 200, 209, 222, 232,
+ 236, 243, 262, 277, 279, 286, 299, 311, 319, 320,
+ 323, 329, 381, 387, 388, 389, 390, 410, 411, 412,
+ 415, 418, 419, 422, 424, 425, 428, 432, 436, 437,
+ 438, 440, 442, 444, 456, 461, 475, 476, 477, 478,
+ 479, 482, 483, 489, 490, 491, 492, 493, 501, 502,
+ 517, 587, 589, 606, 626, 633, 481, 302, 303, 445,
+ 446, 315, 316, 647, 648, 301, 601, 634, 598, 646,
+ 628, 439, 379, 0, 0, 382, 282, 306, 321, 0,
+ 618, 503, 227, 467, 291, 251, 0, 0, 211, 246,
+ 230, 260, 275, 278, 325, 392, 401, 430, 435, 297,
+ 272, 244, 460, 241, 486, 520, 521, 522, 524, 396,
+ 267, 434, 397, 0, 377, 577, 578, 317, 0, 0,
+ 0, 529, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 417, 0, 0, 0, 0, 0, 0,
+ 0, 271, 0, 0, 0, 0, 367, 268, 0, 0,
+ 204, 506, 0, 431, 0, 203, 0, 488, 253, 378,
+ 375, 584, 283, 274, 270, 250, 318, 386, 429, 519,
+ 423, 0, 371, 0, 0, 498, 402, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 324, 248, 326, 202, 414,
+ 499, 287, 0, 0, 0, 0, 0, 508, 194, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 238, 0,
+ 0, 245, 0, 0, 0, 352, 361, 360, 340, 341,
+ 343, 345, 351, 358, 364, 337, 346, 0, 0, 610,
+ 0, 0, 0, 266, 322, 273, 265, 581, 0, 0,
+ 0, 0, 0, 0, 597, 0, 0, 229, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 276, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1457, 0, 298, 0, 403, 258, 0, 454,
+ 0, 0, 0, 630, 0, 0, 0, 0, 0, 0,
+ 0, 366, 0, 331, 197, 225, 0, 0, 413, 462,
+ 474, 0, 0, 0, 254, 0, 472, 427, 605, 233,
+ 285, 459, 433, 470, 441, 288, 0, 0, 471, 373,
+ 586, 451, 602, 631, 632, 264, 407, 616, 523, 624,
+ 649, 226, 261, 421, 507, 608, 495, 398, 582, 583,
+ 330, 494, 296, 201, 370, 637, 224, 480, 372, 242,
+ 231, 588, 613, 300, 252, 290, 457, 644, 213, 518,
+ 599, 239, 484, 0, 0, 652, 247, 505, 611, 600,
+ 215, 595, 504, 394, 327, 328, 214, 0, 458, 269,
+ 294, 0, 0, 259, 416, 590, 591, 257, 653, 228,
+ 623, 220, 0, 622, 409, 585, 596, 395, 384, 219,
+ 594, 393, 383, 335, 356, 357, 281, 308, 448, 376,
+ 449, 307, 309, 405, 404, 406, 207, 609, 627, 0,
+ 208, 0, 500, 612, 654, 453, 212, 234, 235, 237,
+ 0, 280, 284, 292, 295, 304, 305, 314, 368, 420,
+ 447, 443, 452, 0, 580, 603, 617, 629, 635, 636,
+ 638, 639, 640, 641, 642, 645, 643, 408, 312, 496,
+ 334, 374, 0, 0, 426, 473, 240, 607, 497, 199,
+ 0, 0, 0, 0, 255, 256, 0, 576, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 655, 656, 657,
+ 658, 659, 660, 661, 662, 663, 664, 665, 666, 667,
+ 668, 669, 670, 671, 672, 650, 509, 515, 510, 511,
+ 512, 513, 514, 0, 516, 0, 0, 0, 0, 0,
+ 399, 0, 592, 593, 673, 385, 487, 604, 336, 350,
+ 353, 342, 362, 0, 363, 338, 339, 344, 347, 348,
+ 349, 354, 355, 359, 365, 249, 210, 391, 400, 579,
+ 313, 216, 217, 218, 525, 526, 527, 528, 620, 621,
+ 625, 205, 463, 464, 465, 466, 293, 615, 310, 469,
+ 468, 332, 333, 380, 450, 541, 543, 554, 558, 560,
+ 562, 568, 571, 542, 544, 555, 559, 561, 563, 569,
+ 572, 531, 533, 535, 537, 550, 549, 546, 574, 575,
+ 552, 557, 536, 548, 553, 566, 573, 570, 530, 534,
+ 538, 547, 565, 564, 545, 556, 567, 551, 539, 532,
+ 540, 0, 196, 221, 369, 0, 455, 289, 651, 619,
+ 485, 614, 206, 223, 0, 263, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 198, 200, 209,
+ 222, 232, 236, 243, 262, 277, 279, 286, 299, 311,
+ 319, 320, 323, 329, 381, 387, 388, 389, 390, 410,
+ 411, 412, 415, 418, 419, 422, 424, 425, 428, 432,
+ 436, 437, 438, 440, 442, 444, 456, 461, 475, 476,
+ 477, 478, 479, 482, 483, 489, 490, 491, 492, 493,
+ 501, 502, 517, 587, 589, 606, 626, 633, 481, 302,
+ 303, 445, 446, 315, 316, 647, 648, 1456, 601, 634,
+ 598, 646, 628, 439, 379, 0, 0, 382, 282, 306,
+ 321, 0, 618, 503, 227, 467, 291, 251, 0, 0,
+ 211, 246, 230, 260, 275, 278, 325, 392, 401, 430,
+ 435, 297, 272, 244, 460, 241, 486, 520, 521, 522,
+ 524, 396, 267, 434, 397, 0, 377, 577, 578, 317,
+ 0, 0, 0, 529, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 417, 0, 0, 0, 0,
+ 0, 0, 0, 271, 0, 0, 0, 0, 367, 268,
+ 0, 0, 204, 506, 0, 431, 0, 203, 0, 488,
+ 253, 378, 375, 584, 283, 274, 270, 250, 318, 386,
+ 429, 519, 423, 0, 371, 0, 0, 498, 402, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 324, 248, 326,
+ 202, 414, 499, 287, 0, 0, 0, 0, 0, 508,
+ 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 238, 0, 0, 245, 0, 0, 0, 352, 361, 360,
+ 340, 341, 343, 345, 351, 358, 364, 337, 346, 0,
+ 0, 610, 0, 0, 0, 266, 322, 273, 265, 581,
+ 0, 0, 0, 0, 0, 0, 597, 0, 0, 229,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 276, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 298, 0, 403, 258,
+ 0, 454, 0, 0, 0, 630, 0, 0, 0, 0,
+ 0, 0, 0, 366, 0, 331, 197, 225, 0, 0,
+ 413, 462, 474, 0, 0, 0, 254, 0, 472, 427,
+ 605, 233, 285, 459, 433, 470, 441, 288, 0, 0,
+ 471, 373, 586, 451, 602, 631, 632, 264, 407, 616,
+ 523, 624, 649, 226, 261, 421, 507, 608, 495, 398,
+ 582, 583, 330, 494, 296, 201, 370, 637, 224, 480,
+ 372, 242, 231, 588, 613, 300, 252, 290, 457, 644,
+ 213, 518, 599, 239, 484, 0, 0, 652, 247, 505,
+ 611, 600, 215, 595, 504, 394, 327, 328, 214, 0,
+ 458, 269, 294, 0, 0, 259, 416, 590, 591, 257,
+ 653, 228, 623, 220, 0, 622, 409, 585, 596, 395,
+ 384, 219, 594, 393, 383, 335, 356, 357, 281, 308,
+ 448, 376, 449, 307, 309, 405, 404, 406, 207, 609,
+ 627, 0, 208, 0, 500, 612, 654, 453, 212, 234,
+ 235, 237, 0, 280, 284, 292, 295, 304, 305, 314,
+ 368, 420, 447, 443, 452, 0, 580, 603, 617, 629,
+ 635, 636, 638, 639, 640, 641, 642, 645, 643, 408,
+ 312, 496, 334, 374, 0, 0, 426, 473, 240, 607,
+ 497, 199, 0, 0, 0, 0, 255, 256, 0, 576,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 655,
+ 656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
+ 666, 667, 668, 669, 670, 671, 672, 650, 509, 515,
+ 510, 511, 512, 513, 514, 0, 516, 0, 0, 0,
+ 0, 0, 399, 0, 592, 593, 673, 385, 487, 604,
+ 336, 350, 353, 342, 362, 0, 363, 338, 339, 344,
+ 347, 348, 349, 354, 355, 359, 365, 249, 210, 391,
+ 400, 579, 313, 216, 217, 218, 525, 526, 527, 528,
+ 620, 621, 625, 205, 463, 464, 465, 466, 293, 615,
+ 310, 469, 468, 332, 333, 380, 450, 541, 543, 554,
+ 558, 560, 562, 568, 571, 542, 544, 555, 559, 561,
+ 563, 569, 572, 531, 533, 535, 537, 550, 549, 546,
+ 574, 575, 552, 557, 536, 548, 553, 566, 573, 570,
+ 530, 534, 538, 547, 565, 564, 545, 556, 567, 551,
+ 539, 532, 540, 0, 196, 221, 369, 0, 455, 289,
+ 651, 619, 485, 614, 206, 223, 0, 263, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1050, 0, 0, 0, 198,
+ 200, 209, 222, 232, 236, 243, 262, 277, 279, 286,
+ 299, 311, 319, 320, 323, 329, 381, 387, 388, 389,
+ 390, 410, 411, 412, 415, 418, 419, 422, 424, 425,
+ 428, 432, 436, 437, 438, 440, 442, 444, 456, 461,
+ 475, 476, 477, 478, 479, 482, 483, 489, 490, 491,
+ 492, 493, 501, 502, 517, 587, 589, 606, 626, 633,
+ 481, 302, 303, 445, 446, 315, 316, 647, 648, 301,
+ 601, 634, 598, 646, 628, 439, 379, 0, 0, 382,
+ 282, 306, 321, 0, 618, 503, 227, 467, 291, 251,
+ 0, 0, 211, 246, 230, 260, 275, 278, 325, 392,
+ 401, 430, 435, 297, 272, 244, 460, 241, 486, 520,
+ 521, 522, 524, 396, 267, 434, 397, 0, 377, 577,
+ 578, 317, 0, 0, 0, 529, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 417, 0, 0,
+ 0, 0, 0, 0, 0, 271, 0, 0, 0, 0,
+ 367, 268, 0, 0, 204, 506, 0, 431, 0, 203,
+ 0, 488, 253, 378, 375, 584, 283, 274, 270, 250,
+ 318, 386, 429, 519, 423, 0, 371, 0, 0, 498,
+ 402, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 324,
+ 248, 326, 202, 414, 499, 287, 0, 0, 0, 0,
+ 0, 508, 194, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 238, 0, 0, 245, 0, 0, 0, 352,
+ 361, 360, 340, 341, 343, 345, 351, 358, 364, 337,
+ 346, 0, 0, 610, 0, 0, 0, 266, 322, 273,
+ 265, 581, 0, 0, 0, 0, 0, 0, 597, 0,
+ 0, 229, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 276, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 298, 0,
+ 403, 258, 0, 454, 0, 676, 0, 630, 0, 0,
+ 0, 0, 0, 0, 0, 366, 0, 331, 197, 225,
+ 0, 0, 413, 462, 474, 0, 0, 0, 254, 0,
+ 472, 427, 605, 233, 285, 459, 433, 470, 441, 288,
+ 0, 0, 471, 373, 586, 451, 602, 631, 632, 264,
+ 407, 616, 523, 624, 649, 226, 261, 421, 507, 608,
+ 495, 398, 582, 583, 330, 494, 296, 201, 370, 637,
+ 224, 480, 372, 242, 231, 588, 613, 300, 252, 290,
+ 457, 644, 213, 518, 599, 239, 484, 0, 0, 652,
+ 247, 505, 611, 600, 215, 595, 504, 394, 327, 328,
+ 214, 0, 458, 269, 294, 0, 0, 259, 416, 590,
+ 591, 257, 653, 228, 623, 220, 0, 622, 409, 585,
+ 596, 395, 384, 219, 594, 393, 383, 335, 356, 357,
+ 281, 308, 448, 376, 449, 307, 309, 405, 404, 406,
+ 207, 609, 627, 0, 208, 0, 500, 612, 654, 453,
+ 212, 234, 235, 237, 0, 280, 284, 292, 295, 304,
+ 305, 314, 368, 420, 447, 443, 452, 0, 580, 603,
+ 617, 629, 635, 636, 638, 639, 640, 641, 642, 645,
+ 643, 408, 312, 496, 334, 374, 0, 0, 426, 473,
+ 240, 607, 497, 199, 0, 0, 0, 0, 255, 256,
+ 0, 576, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 655, 656, 657, 658, 659, 660, 661, 662, 663,
+ 664, 665, 666, 667, 668, 669, 670, 671, 672, 650,
+ 509, 515, 510, 511, 512, 513, 514, 0, 516, 0,
+ 0, 0, 0, 0, 399, 0, 592, 593, 673, 385,
+ 487, 604, 336, 350, 353, 342, 362, 0, 363, 338,
+ 339, 344, 347, 348, 349, 354, 355, 359, 365, 249,
+ 210, 391, 400, 579, 313, 216, 217, 218, 525, 526,
+ 527, 528, 620, 621, 625, 205, 463, 464, 465, 466,
+ 293, 615, 310, 469, 468, 332, 333, 380, 450, 541,
+ 543, 554, 558, 560, 562, 568, 571, 542, 544, 555,
+ 559, 561, 563, 569, 572, 531, 533, 535, 537, 550,
+ 549, 546, 574, 575, 552, 557, 536, 548, 553, 566,
+ 573, 570, 530, 534, 538, 547, 565, 564, 545, 556,
+ 567, 551, 539, 532, 540, 0, 196, 221, 369, 0,
+ 455, 289, 651, 619, 485, 614, 206, 223, 0, 263,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 198, 200, 209, 222, 232, 236, 243, 262, 277,
+ 279, 286, 299, 311, 319, 320, 323, 329, 381, 387,
+ 388, 389, 390, 410, 411, 412, 415, 418, 419, 422,
+ 424, 425, 428, 432, 436, 437, 438, 440, 442, 444,
+ 456, 461, 475, 476, 477, 478, 479, 482, 483, 489,
+ 490, 491, 492, 493, 501, 502, 517, 587, 589, 606,
+ 626, 633, 481, 302, 303, 445, 446, 315, 316, 647,
+ 648, 301, 601, 634, 598, 646, 628, 439, 379, 0,
+ 0, 382, 282, 306, 321, 0, 618, 503, 227, 467,
+ 291, 251, 0, 0, 211, 246, 230, 260, 275, 278,
+ 325, 392, 401, 430, 435, 297, 272, 244, 460, 241,
+ 486, 520, 521, 522, 524, 396, 267, 434, 397, 0,
+ 377, 577, 578, 317, 0, 0, 0, 529, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 417,
+ 0, 0, 0, 0, 0, 0, 0, 271, 0, 0,
+ 0, 0, 367, 268, 0, 0, 204, 506, 0, 431,
+ 0, 203, 0, 488, 253, 378, 375, 584, 283, 274,
+ 270, 250, 318, 386, 429, 519, 423, 0, 371, 0,
+ 0, 498, 402, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 324, 248, 326, 202, 414, 499, 287, 0, 0,
+ 0, 0, 0, 508, 725, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 238, 0, 0, 245, 0, 0,
+ 0, 352, 361, 360, 340, 341, 343, 345, 351, 358,
+ 364, 337, 346, 0, 0, 610, 0, 0, 0, 266,
+ 322, 273, 265, 581, 0, 0, 0, 0, 0, 0,
+ 597, 0, 0, 229, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 276, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 298, 0, 403, 258, 0, 454, 0, 0, 0, 630,
+ 0, 0, 0, 0, 0, 0, 0, 366, 0, 331,
+ 197, 225, 0, 0, 413, 462, 474, 0, 0, 0,
+ 254, 0, 472, 427, 605, 233, 285, 459, 433, 470,
+ 441, 288, 0, 0, 471, 373, 586, 451, 602, 631,
+ 632, 264, 407, 616, 523, 624, 649, 226, 261, 421,
+ 507, 608, 495, 398, 582, 583, 330, 494, 296, 201,
+ 370, 637, 224, 480, 372, 242, 231, 588, 613, 300,
+ 252, 290, 457, 644, 213, 518, 599, 239, 484, 0,
+ 0, 652, 247, 505, 611, 600, 215, 595, 504, 394,
+ 327, 328, 214, 0, 458, 269, 294, 0, 0, 259,
+ 416, 590, 591, 257, 653, 228, 623, 220, 0, 622,
+ 409, 585, 596, 395, 384, 219, 594, 393, 383, 335,
+ 356, 357, 281, 308, 448, 376, 449, 307, 309, 405,
+ 404, 406, 207, 609, 627, 0, 208, 0, 500, 612,
+ 654, 453, 212, 234, 235, 237, 0, 280, 284, 292,
+ 295, 304, 305, 314, 368, 420, 447, 443, 452, 0,
+ 580, 603, 617, 629, 635, 636, 638, 639, 640, 641,
+ 642, 645, 643, 408, 312, 496, 334, 374, 0, 0,
+ 426, 473, 240, 607, 497, 199, 0, 0, 0, 0,
+ 255, 256, 0, 576, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 655, 656, 657, 658, 659, 660, 661,
+ 662, 663, 664, 665, 666, 667, 668, 669, 670, 671,
+ 672, 650, 509, 515, 510, 511, 512, 513, 514, 0,
+ 516, 0, 0, 0, 0, 0, 399, 0, 592, 593,
+ 673, 385, 487, 604, 336, 350, 353, 342, 362, 0,
+ 363, 338, 339, 344, 347, 348, 349, 354, 355, 359,
+ 365, 249, 210, 391, 400, 579, 313, 216, 217, 218,
+ 525, 526, 527, 528, 620, 621, 625, 205, 463, 464,
+ 465, 466, 293, 615, 310, 469, 468, 332, 333, 380,
+ 450, 541, 543, 554, 558, 560, 562, 568, 571, 542,
+ 544, 555, 559, 561, 563, 569, 572, 531, 533, 535,
+ 537, 550, 549, 546, 574, 575, 552, 557, 536, 548,
+ 553, 566, 573, 570, 530, 534, 538, 547, 565, 564,
+ 545, 556, 567, 551, 539, 532, 540, 0, 196, 221,
+ 369, 0, 455, 289, 651, 619, 485, 614, 206, 223,
+ 0, 263, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 198, 200, 209, 222, 232, 236, 243,
+ 262, 277, 279, 286, 299, 311, 319, 320, 323, 329,
+ 381, 387, 388, 389, 390, 4139, 411, 412, 415, 418,
+ 419, 422, 424, 425, 428, 432, 436, 437, 438, 440,
+ 442, 444, 456, 461, 475, 476, 477, 478, 479, 482,
+ 483, 489, 490, 491, 492, 493, 501, 502, 517, 587,
+ 589, 606, 626, 633, 481, 302, 303, 445, 446, 315,
+ 316, 647, 648, 301, 601, 634, 598, 646, 628, 439,
+ 379, 0, 0, 382, 282, 306, 321, 0, 618, 503,
+ 227, 467, 291, 251, 0, 0, 211, 246, 230, 260,
+ 275, 278, 325, 392, 401, 430, 435, 297, 272, 244,
+ 460, 241, 486, 520, 521, 522, 524, 396, 267, 434,
+ 397, 0, 377, 577, 578, 317, 0, 0, 0, 529,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 417, 0, 0, 0, 0, 0, 0, 0, 271,
+ 0, 0, 0, 0, 367, 268, 0, 0, 204, 506,
+ 0, 431, 0, 203, 0, 488, 253, 378, 375, 584,
+ 283, 274, 270, 250, 318, 386, 429, 519, 423, 0,
+ 371, 0, 0, 498, 402, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 324, 248, 326, 202, 414, 499, 287,
+ 0, 0, 0, 0, 0, 508, 725, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 238, 0, 0, 245,
+ 0, 0, 0, 352, 361, 360, 340, 341, 343, 345,
+ 351, 358, 364, 337, 346, 0, 0, 610, 0, 0,
+ 0, 266, 322, 273, 265, 581, 0, 0, 0, 0,
+ 0, 0, 597, 0, 0, 229, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 276, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 298, 0, 403, 258, 0, 454, 0, 0,
+ 0, 630, 0, 0, 0, 0, 0, 0, 0, 366,
+ 0, 331, 197, 225, 0, 0, 413, 462, 474, 0,
+ 0, 0, 254, 0, 472, 427, 605, 233, 285, 459,
+ 433, 470, 441, 288, 0, 0, 471, 373, 586, 451,
+ 602, 631, 632, 264, 407, 616, 523, 624, 649, 226,
+ 261, 421, 507, 608, 495, 398, 582, 583, 330, 494,
+ 296, 201, 370, 637, 224, 480, 372, 242, 231, 588,
+ 613, 300, 252, 290, 457, 644, 213, 518, 599, 239,
+ 484, 0, 0, 652, 247, 505, 611, 600, 215, 595,
+ 504, 394, 327, 328, 214, 0, 458, 269, 294, 0,
+ 0, 259, 416, 590, 591, 257, 653, 228, 623, 220,
+ 0, 622, 409, 585, 596, 395, 384, 219, 594, 393,
+ 383, 335, 356, 357, 281, 308, 448, 376, 449, 307,
+ 309, 405, 404, 406, 207, 609, 627, 0, 208, 0,
+ 500, 612, 654, 453, 212, 234, 235, 237, 0, 280,
+ 284, 292, 295, 304, 305, 314, 368, 420, 447, 443,
+ 452, 0, 580, 603, 617, 629, 635, 636, 638, 639,
+ 640, 641, 642, 645, 643, 408, 312, 496, 334, 374,
+ 0, 0, 426, 473, 240, 607, 497, 199, 0, 0,
+ 0, 0, 255, 256, 0, 576, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 655, 656, 657, 658, 659,
+ 660, 661, 662, 663, 664, 665, 666, 667, 668, 669,
+ 670, 671, 672, 650, 509, 515, 510, 511, 512, 513,
+ 514, 0, 516, 0, 0, 0, 0, 0, 399, 0,
+ 592, 593, 673, 385, 487, 604, 336, 350, 353, 342,
+ 362, 0, 363, 338, 339, 344, 347, 348, 349, 354,
+ 355, 359, 365, 249, 210, 391, 400, 579, 313, 216,
+ 217, 218, 525, 526, 527, 528, 620, 621, 625, 205,
+ 463, 464, 465, 466, 293, 615, 310, 469, 468, 332,
+ 333, 380, 450, 541, 543, 554, 558, 560, 562, 568,
+ 571, 542, 544, 555, 559, 561, 563, 569, 572, 531,
+ 533, 535, 537, 550, 549, 546, 574, 575, 552, 557,
+ 536, 548, 553, 566, 573, 570, 530, 534, 538, 547,
+ 565, 564, 545, 556, 567, 551, 539, 532, 540, 0,
+ 196, 221, 369, 0, 455, 289, 651, 619, 485, 614,
+ 206, 223, 0, 263, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 198, 200, 209, 222, 232,
+ 236, 243, 262, 277, 279, 286, 299, 311, 319, 320,
+ 323, 329, 381, 387, 388, 389, 390, 410, 411, 412,
+ 415, 418, 419, 422, 424, 425, 428, 432, 436, 437,
+ 438, 440, 442, 444, 456, 461, 475, 476, 477, 478,
+ 479, 482, 483, 489, 490, 491, 492, 493, 501, 502,
+ 517, 587, 589, 606, 626, 633, 481, 302, 303, 445,
+ 446, 315, 316, 647, 648, 301, 601, 634, 598, 646,
+ 628, 439, 379, 0, 0, 382, 282, 306, 321, 0,
+ 618, 503, 227, 467, 291, 251, 0, 0, 211, 246,
+ 230, 260, 275, 278, 325, 392, 401, 430, 435, 297,
+ 272, 244, 460, 241, 486, 520, 521, 522, 524, 396,
+ 267, 434, 397, 0, 377, 577, 578, 317, 0, 0,
+ 0, 529, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 417, 0, 0, 0, 0, 0, 0,
+ 0, 271, 0, 0, 0, 0, 367, 268, 0, 0,
+ 204, 506, 0, 431, 0, 203, 0, 488, 253, 378,
+ 375, 584, 283, 274, 270, 250, 318, 386, 429, 519,
+ 423, 0, 371, 0, 0, 498, 402, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 324, 248, 326, 202, 414,
+ 499, 287, 0, 0, 0, 0, 0, 508, 960, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 238, 0,
+ 0, 245, 0, 0, 0, 352, 361, 360, 340, 341,
+ 343, 345, 351, 358, 364, 337, 346, 0, 0, 610,
+ 0, 0, 0, 266, 322, 273, 265, 581, 0, 0,
+ 0, 0, 0, 0, 597, 0, 0, 229, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 276, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 298, 0, 403, 258, 0, 454,
+ 0, 0, 0, 630, 0, 0, 0, 0, 0, 0,
+ 0, 366, 0, 331, 197, 225, 0, 0, 413, 462,
+ 474, 0, 0, 0, 254, 0, 472, 427, 605, 233,
+ 285, 459, 433, 470, 441, 288, 0, 0, 471, 373,
+ 586, 451, 602, 631, 632, 264, 407, 616, 523, 624,
+ 649, 226, 261, 421, 507, 608, 495, 398, 582, 583,
+ 330, 494, 296, 201, 370, 637, 224, 480, 372, 242,
+ 231, 588, 613, 300, 252, 290, 457, 644, 213, 518,
+ 599, 239, 484, 0, 0, 652, 247, 505, 611, 600,
+ 215, 595, 504, 394, 327, 328, 214, 0, 458, 269,
+ 294, 0, 0, 259, 416, 590, 591, 257, 653, 228,
+ 623, 220, 0, 622, 409, 585, 596, 395, 384, 219,
+ 594, 393, 383, 335, 356, 357, 281, 308, 448, 376,
+ 449, 307, 309, 405, 404, 406, 207, 609, 627, 0,
+ 208, 0, 500, 612, 654, 453, 212, 234, 235, 237,
+ 0, 280, 284, 292, 295, 304, 305, 314, 368, 420,
+ 447, 443, 452, 0, 580, 603, 617, 629, 635, 636,
+ 638, 639, 640, 641, 642, 645, 643, 408, 312, 496,
+ 334, 374, 0, 0, 426, 473, 240, 607, 497, 199,
+ 0, 0, 0, 0, 255, 256, 0, 576, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 655, 656, 657,
+ 658, 659, 660, 661, 662, 663, 664, 665, 666, 667,
+ 668, 669, 670, 671, 672, 650, 509, 515, 510, 511,
+ 512, 513, 514, 0, 516, 0, 0, 0, 0, 0,
+ 399, 0, 592, 593, 673, 385, 487, 604, 336, 350,
+ 353, 342, 362, 0, 363, 338, 339, 344, 347, 348,
+ 349, 354, 355, 359, 365, 249, 210, 391, 400, 579,
+ 313, 216, 217, 218, 525, 526, 527, 528, 620, 621,
+ 625, 205, 463, 464, 465, 466, 293, 615, 310, 469,
+ 468, 332, 333, 380, 450, 541, 543, 554, 558, 560,
+ 562, 568, 571, 542, 544, 555, 559, 561, 563, 569,
+ 572, 531, 533, 535, 537, 550, 549, 546, 574, 575,
+ 552, 557, 536, 548, 553, 566, 573, 570, 530, 534,
+ 538, 547, 565, 564, 545, 556, 567, 551, 539, 532,
+ 540, 0, 196, 221, 369, 0, 455, 289, 651, 619,
+ 485, 614, 206, 223, 0, 263, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 198, 200, 209,
+ 222, 232, 236, 243, 262, 277, 279, 286, 299, 311,
+ 319, 320, 323, 329, 381, 387, 388, 389, 390, 410,
+ 411, 412, 415, 418, 419, 422, 424, 425, 428, 432,
+ 436, 437, 438, 440, 442, 444, 456, 461, 475, 476,
+ 477, 478, 479, 482, 483, 489, 490, 491, 492, 493,
+ 501, 502, 517, 587, 589, 606, 626, 633, 481, 302,
+ 303, 445, 446, 315, 316, 647, 648, 301, 601, 634,
+ 598, 646, 628, 439, 379, 0, 0, 382, 282, 306,
+ 321, 0, 618, 503, 227, 467, 291, 251, 0, 0,
+ 211, 246, 230, 260, 275, 278, 325, 392, 401, 430,
+ 435, 297, 272, 244, 460, 241, 486, 520, 521, 522,
+ 524, 396, 267, 434, 397, 0, 377, 577, 578, 317,
+ 0, 0, 0, 529, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 417, 0, 0, 0, 0,
+ 0, 0, 0, 271, 0, 0, 0, 0, 367, 268,
+ 0, 0, 204, 506, 0, 431, 0, 203, 0, 488,
+ 253, 378, 375, 584, 283, 274, 270, 250, 318, 386,
+ 429, 519, 423, 0, 371, 0, 0, 498, 402, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 324, 248, 326,
+ 202, 414, 499, 287, 0, 0, 0, 0, 0, 508,
+ 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 238, 0, 0, 245, 0, 0, 0, 352, 361, 360,
+ 340, 341, 343, 345, 351, 358, 364, 337, 346, 0,
+ 0, 610, 0, 0, 0, 266, 322, 273, 265, 581,
+ 0, 0, 0, 0, 0, 0, 597, 0, 0, 229,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 276, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 298, 0, 403, 258,
+ 0, 454, 0, 0, 0, 630, 0, 0, 0, 0,
+ 0, 0, 0, 366, 0, 331, 197, 225, 0, 0,
+ 413, 462, 474, 0, 0, 0, 254, 0, 472, 427,
+ 605, 233, 285, 459, 433, 470, 441, 288, 0, 0,
+ 471, 373, 586, 451, 602, 631, 632, 264, 407, 616,
+ 523, 624, 649, 226, 261, 421, 507, 608, 495, 398,
+ 582, 583, 330, 494, 296, 201, 370, 637, 224, 480,
+ 372, 242, 231, 588, 613, 300, 252, 290, 457, 644,
+ 213, 518, 599, 239, 484, 0, 0, 652, 247, 505,
+ 611, 600, 215, 595, 504, 394, 327, 328, 214, 0,
+ 458, 269, 294, 0, 0, 259, 416, 590, 591, 257,
+ 653, 228, 623, 220, 0, 622, 409, 585, 596, 395,
+ 384, 219, 594, 393, 383, 335, 356, 357, 281, 308,
+ 448, 376, 449, 307, 309, 405, 404, 406, 207, 609,
+ 627, 0, 208, 0, 500, 612, 654, 453, 212, 234,
+ 235, 237, 0, 280, 284, 292, 295, 304, 305, 314,
+ 368, 420, 447, 443, 452, 0, 580, 603, 617, 629,
+ 635, 636, 638, 639, 640, 641, 642, 645, 643, 408,
+ 312, 496, 334, 374, 0, 0, 426, 473, 240, 607,
+ 497, 199, 0, 0, 0, 0, 255, 256, 0, 576,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 655,
+ 656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
+ 666, 667, 668, 669, 670, 671, 672, 650, 509, 515,
+ 510, 511, 512, 513, 514, 0, 516, 0, 0, 0,
+ 0, 0, 399, 0, 592, 593, 673, 385, 487, 604,
+ 336, 350, 353, 342, 362, 0, 363, 338, 339, 344,
+ 347, 348, 349, 354, 355, 359, 365, 249, 210, 391,
+ 400, 579, 313, 216, 217, 218, 525, 526, 527, 528,
+ 620, 621, 625, 205, 463, 464, 465, 466, 293, 615,
+ 310, 469, 468, 332, 333, 380, 450, 541, 543, 554,
+ 558, 560, 562, 568, 571, 542, 544, 555, 559, 561,
+ 563, 569, 572, 531, 533, 535, 537, 550, 549, 546,
+ 574, 575, 552, 557, 536, 548, 553, 566, 573, 570,
+ 530, 534, 538, 547, 565, 564, 545, 556, 567, 551,
+ 539, 532, 540, 0, 196, 221, 369, 0, 455, 289,
+ 651, 619, 485, 614, 206, 223, 0, 263, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 198,
+ 200, 209, 222, 232, 236, 243, 262, 277, 279, 286,
+ 299, 311, 319, 320, 323, 329, 381, 387, 388, 389,
+ 390, 410, 411, 412, 415, 418, 419, 422, 424, 425,
+ 428, 432, 436, 437, 438, 440, 442, 444, 456, 461,
+ 475, 476, 477, 478, 479, 482, 483, 489, 490, 491,
+ 492, 493, 501, 502, 517, 587, 589, 606, 626, 633,
+ 481, 302, 303, 445, 446, 315, 316, 647, 648, 301,
+ 601, 634, 598, 646, 628, 439, 379, 0, 0, 382,
+ 282, 306, 321, 0, 618, 503, 227, 467, 291, 251,
+ 0, 0, 211, 246, 230, 260, 275, 278, 325, 392,
+ 401, 430, 435, 297, 272, 244, 460, 241, 486, 520,
+ 521, 522, 524, 396, 267, 434, 0, 0, 377, 577,
+ 578, 317,
+}
+
+var yyPact = [...]int{
+ -1000, -1000, 4350, -1000, -549, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, 2520, 2555, -1000, -1000, -1000, -1000, 2696, -1000, 1031,
+ 2117, -1000, 2474, 4989, -1000, 56250, 778, -1000, 53282, -420,
+ 897, 238, 36958, -1000, 193, -1000, 186, 54766, 189, -1000,
+ -1000, -1000, -1000, -420, 22860, 2334, 57, 55, 56250, -1000,
+ -1000, -1000, -1000, -373, 2641, 2087, -1000, 392, -1000, -1000,
+ -1000, -1000, -1000, -1000, 52540, -1000, 1119, -1000, -1000, 2482,
+ 2485, 2309, 941, 2399, -1000, 2569, 2087, -1000, 22860, 2632,
+ 2475, 22118, 22118, 456, -1000, -1000, 269, -1000, -1000, 31764,
+ 56250, 39926, 322, -1000, 2474, -1000, -1000, -1000, 211, -1000,
+ 342, 1987, -1000, 1971, -1000, 937, 914, 389, 473, 471,
+ 386, 385, 384, 368, 367, 363, 358, 355, 399, -1000,
+ 958, 958, -218, -220, 371, 769, 460, 460, 1035, 490,
+ 2427, 2379, -1000, -1000, 958, 958, 958, 339, 958, 958,
+ 958, 958, 311, 310, 958, 958, 958, 958, 958, 958,
+ 958, 958, 958, 958, 958, 958, 958, 958, 958, 958,
+ 958, 917, 2474, 270, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
@@ -7491,74 +7463,74 @@ var yyPact = [...]int{
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, 56487, 188, 56487, -1000, 808, 516, -1000,
- -1000, -457, 1091, 1091, 84, 1091, 1091, 1091, 1091, 179,
- 939, 52, -1000, 178, 271, 175, 278, 1065, 172, -1000,
- -1000, 267, 1065, 1813, -1000, 911, 274, 191, -1000, 1091,
- 1091, -1000, 14967, 215, 14967, 14967, 269, 164, -1000, 2356,
- -1000, -1000, -1000, -1000, -1000, 1337, -1000, -1000, -1000, -1000,
- -23, 476, -1000, -1000, -1000, -1000, 55005, 52041, 212, -1000,
- -1000, 29, 1636, 1234, 22401, 1674, 885, -1000, -1000, 1584,
- 864, -1000, -1000, -1000, -1000, -1000, 797, -1000, 24624, 24624,
- 24624, 24624, -1000, -1000, 1904, 51300, 1904, 1904, 24624, 1904,
- 24624, 1904, 1904, 1904, 1904, 22401, 1904, 1904, 1904, 1904,
- -1000, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- -1000, -1000, -1000, -1000, 1904, 805, 1904, 1904, 1904, 1904,
- 1904, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1904, 1904,
- 1904, 1904, 1904, 1904, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, -1000, -1000, -1000,
- 1621, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 27588, 1541,
- 1540, 1539, -1000, 19437, 1904, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, 56487, -1000, 1904, 219,
- 55005, 55005, 317, 1286, -1000, -1000, 2466, 1986, -1000, 2525,
- 2494, 406, -1000, 3898, 2151, 1553, 1378, 1986, 1877, 56487,
- -1000, 1927, -1000, -1000, -1000, -355, -358, 2175, 1423, 1812,
- -1000, -1000, -1000, -1000, 2693, 22401, -1000, -1000, 2559, -1000,
- 29070, 803, 2556, 50559, -1000, 462, 462, 1901, 429, 20,
- -1000, -1000, -1000, -1000, 952, 36480, -1000, -1000, -1000, -1000,
- -1000, 1811, 56487, -1000, -1000, 5491, 55005, -1000, 2022, -1000,
- 1809, -1000, 1952, 22401, 2028, 511, 55005, 493, 490, 482,
- 459, -62, -1000, -1000, -1000, -1000, -1000, -1000, 926, 926,
- 926, -1000, 381, 2510, 5078, 6391, -1000, -1000, -1000, 49818,
- 2021, 55005, -1000, 2013, -1000, 1021, 853, 892, 892, 55005,
- -1000, -1000, 55746, 55005, 1017, 1016, 55005, 55005, 55005, 55005,
- -1000, 49077, -1000, 48336, 47595, 1281, 55005, 46854, 46113, 45372,
- 44631, 43890, -1000, 2295, -1000, 2097, -1000, -1000, -1000, 55746,
- 55005, 55005, 55746, 55005, 55746, 56487, 55005, -1000, -1000, 343,
- -1000, -1000, 1266, 1265, 1262, 926, 926, 1257, 1800, 1794,
- 1792, 926, 926, 1254, 1776, 38703, 1764, 268, 1252, 1251,
- 1243, 1268, 1739, 257, 1726, 1241, 1195, 1239, 55005, 2011,
- 56487, -1000, 260, 1005, 428, 951, 2363, 2254, 1896, 475,
- 505, 55005, 450, 450, 55005, -1000, 15714, 56487, 235, -1000,
- 1714, 22401, -1000, 1089, 1065, 1065, -1000, -1000, -1000, -1000,
- -1000, -1000, 1091, 56487, 1089, -1000, -1000, -1000, 1065, 1091,
- 56487, 1091, 1091, 1091, 1091, 1065, 1065, 1065, 1091, 56487,
- 56487, 56487, 56487, 56487, 56487, 56487, 56487, 56487, 14967, 911,
- 1091, -459, -1000, 1709, -1000, -1000, -1000, 2127, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, 56250, 194, 56250, -1000, 828, 775,
+ -1000, -1000, -459, 1114, 1114, 101, 1114, 1114, 1114, 1114,
+ 183, 1043, 54, -1000, 182, 261, 168, 271, 1096, 304,
+ -1000, -1000, 257, 1096, 1834, -1000, 946, 266, 169, -1000,
+ 1114, 1114, -1000, 15416, 203, 15416, 15416, 265, 172, -1000,
+ 2464, -1000, -1000, -1000, -1000, -1000, 1344, -1000, -1000, -1000,
+ -1000, -37, 489, -1000, -1000, -1000, -1000, 54766, 51798, 283,
+ -1000, -1000, 780, 1851, 1393, 22860, 1315, 938, -1000, -1000,
+ 1434, 900, -1000, -1000, -1000, -1000, -1000, 809, -1000, 25086,
+ 25086, 25086, 25086, -1000, -1000, 1830, 51056, 1830, 1830, 25086,
+ 1830, 25086, 1830, 1830, 1830, 1830, 22860, 1830, 1830, 1830,
+ 1830, -1000, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, -1000, -1000, -1000, -1000, 1830, 826, 1830, 1830, 1830,
+ 1830, 1830, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1830,
+ 1830, 1830, 1830, 1830, 1830, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, -1000, -1000,
+ -1000, 1692, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1693,
+ 1513, 1500, 1498, -1000, 19892, 1830, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, 56250, -1000, 1830,
+ 216, 54766, 54766, 340, 1333, -1000, -1000, 2569, 2087, -1000,
+ 2641, 2620, 392, -1000, 3919, 2111, 1683, 1406, 2087, 1954,
+ 56250, -1000, 2005, -1000, -1000, -1000, -357, -364, 2232, 1455,
+ 1829, -1000, -1000, -1000, -1000, 1798, 22860, -1000, -1000, 2693,
+ -1000, 28796, 823, 2687, 50314, -1000, 456, 456, 1969, 421,
+ 13, -1000, -1000, -1000, -1000, 979, 36216, -1000, -1000, -1000,
+ -1000, -1000, 1884, 56250, -1000, -1000, 5043, 54766, -1000, 2107,
+ -1000, 1875, -1000, 2041, 22860, 2126, 768, 54766, 523, 516,
+ 510, 475, -62, -1000, -1000, -1000, -1000, -1000, -1000, 958,
+ 958, 958, -1000, 395, 2623, 4989, 5064, -1000, -1000, -1000,
+ 49572, 2102, 54766, -1000, 2088, -1000, 1039, 861, 864, 864,
+ 54766, -1000, -1000, 55508, 54766, 1037, 1033, 54766, 54766, 54766,
+ 54766, -1000, 48830, -1000, 48088, 47346, 1331, 54766, 46604, 45862,
+ 45120, 44378, 43636, -1000, 2609, -1000, 2204, -1000, -1000, -1000,
+ 55508, 54766, 54766, 55508, 54766, 55508, 56250, 54766, -1000, -1000,
+ 357, -1000, -1000, 1329, 1327, 1319, 958, 958, 1317, 1828,
+ 1823, 1816, 958, 958, 1305, 1800, 38442, 1780, 276, 1299,
+ 1296, 1294, 1293, 1775, 259, 1757, 1237, 1220, 1272, 54766,
+ 2083, 56250, -1000, 250, 1070, 434, 978, 2474, 2331, 1964,
+ 488, 767, 54766, 474, 474, 54766, -1000, 16164, 56250, 230,
+ -1000, 1744, 22860, -1000, 1117, 1096, 1096, -1000, -1000, -1000,
+ -1000, -1000, -1000, 1114, 56250, 1117, -1000, -1000, -1000, 1096,
+ 1114, 56250, 1114, 1114, 1114, 1114, 1096, 1096, 1096, 1114,
+ 56250, 56250, 56250, 56250, 56250, 56250, 56250, 56250, 56250, 15416,
+ 946, 1114, -460, -1000, 1742, -1000, -1000, -1000, 2230, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
@@ -7567,337 +7539,344 @@ var yyPact = [...]int{
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 14967, 14967,
- -1000, -1000, 2454, 2451, -1000, -1000, -1000, 1887, -1000, 180,
- 13, 182, -1000, 43149, 515, 950, -1000, 515, -1000, -1000,
- -1000, -1000, -1000, 1886, 42408, -1000, -460, -461, -462, -468,
- -1000, -1000, -1000, -470, -472, -1000, -1000, -1000, 22401, 22401,
- 22401, 22401, -250, -1000, 1208, 24624, 2396, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, 22401, 262, 928, 24624, 24624, 24624,
- 24624, 24624, 24624, 24624, 26106, 25365, 24624, 24624, 24624, 24624,
- 24624, 24624, -1000, -1000, 34257, 4437, 4437, 864, 864, 864,
- 864, -1000, -173, 1884, 55746, -1000, -1000, -1000, 801, 22401,
- 22401, 864, -1000, 1269, 940, 19437, 22401, 22401, 22401, 22401,
- 931, 1234, 55746, 22401, -1000, 1378, -1000, -1000, -1000, -1000,
- 1169, -1000, -1000, 1032, 2307, 2307, 2307, 2307, 22401, 22401,
- 22401, 22401, 22401, 22401, 22401, 22401, 22401, 22401, 2307, 22401,
- 1034, 1034, 1145, 22401, 22401, 22401, 22401, 22401, 22401, 22401,
- 22401, 17955, 22401, 22401, 24624, 22401, 22401, 22401, 1378, 22401,
- 22401, 22401, 22401, 22401, 22401, 22401, 22401, 22401, 22401, 22401,
- 22401, 22401, 22401, 22401, 22401, 22401, 22401, 22401, 22401, 22401,
- 22401, 22401, 22401, 22401, 22401, 22401, 22401, 22401, 22401, 22401,
- 22401, 22401, 22401, 22401, 22401, 22401, 22401, 22401, 22401, 22401,
- 22401, 22401, 22401, 22401, 22401, 22401, 22401, 22401, 22401, 22401,
- 22401, 22401, 22401, 22401, 22401, 22401, 22401, 22401, 22401, 22401,
- 22401, 22401, 22401, 22401, 22401, 22401, 22401, 22401, 22401, 22401,
- 22401, 22401, 22401, 22401, 22401, 22401, 22401, 22401, 1378, 22401,
- 1190, 22401, 22401, 22401, 22401, 22401, 22401, 22401, 17208, 22401,
- 22401, 22401, 22401, 22401, -1000, -1000, -1000, -1000, -1000, -1000,
- 22401, 22401, 22401, 22401, 22401, 22401, 22401, 22401, 1378, 22401,
- 22401, 22401, 22401, 22401, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, 1537, 1526, 1403, 22401, -1000,
- 1883, -1000, -200, 31293, 22401, 1706, 2554, 2053, 55005, -1000,
- -1000, -1000, -1000, 2466, -1000, 2466, 1537, 3661, 2178, 21660,
- -1000, -1000, 3661, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, 1841, -1000, 56487, 1877,
- 2431, 55005, -1000, -286, -1000, -289, 2173, 1703, 339, -1000,
- 22401, 22401, 1876, -1000, 1440, 56487, -1000, -250, -1000, 41667,
- -1000, -1000, 14220, 56487, 336, 56487, -1000, 30552, 40926, 300,
- -1000, 20, 1865, -1000, 26, 11, 18696, 862, -1000, -1000,
- -1000, 1338, 26847, 1817, 862, 109, -1000, -1000, -1000, 1952,
- -1000, 1952, 1952, 1952, 1952, 339, 339, 339, 339, -1000,
- -1000, -1000, -1000, -1000, 2007, 1952, 2004, -1000, 1952, 1952,
- 1952, 1952, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1998,
- 1998, 1998, 1995, 1995, 1957, 1957, 436, -1000, 22401, 408,
- 40185, 2444, 1238, 1505, 260, 459, 2052, 55005, 55005, 55005,
- 56487, 974, -1000, 1364, 1361, 1356, -1000, -533, 1875, -1000,
- -1000, 2509, -1000, -1000, 1028, 1048, 1041, 1049, 55005, 233,
- 331, -1000, 418, -1000, 40185, 55005, 1001, 892, 55005, -1000,
- 55005, -1000, -1000, -1000, -1000, -1000, 55005, -1000, -1000, 1874,
- -1000, 1888, 1128, 1035, 1095, 1011, 1874, -1000, -1000, -179,
- 1874, -1000, 1874, -1000, 1874, -1000, 1874, -1000, 1874, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 980, 328,
- -343, 55005, 233, 469, -1000, 468, 34257, -1000, -1000, -1000,
- 34257, 34257, -1000, -1000, -1000, -1000, 1692, 1663, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, -522, 56487, -1000,
- 256, 949, 292, 299, 305, 56487, 354, 2327, 2325, 2324,
- 2317, 2304, 2299, 2291, 248, 311, 56487, 56487, 450, 2106,
- 56487, 2403, 56487, -1000, -1000, -1000, -1000, -1000, 1653, 1647,
- -1000, 1234, 56487, -1000, -1000, 1091, 1091, -1000, -1000, 56487,
- 1091, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1091,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, 56487, -1000, -1000, -1000, -1000,
- 1630, -1000, 56487, -23, 169, -1000, -1000, 55005, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, -109, -1000, 777,
- 21, 390, -1000, -1000, -1000, -1000, -1000, 2440, -1000, 1234,
- 999, 953, -1000, 1904, -1000, -1000, 1303, -1000, -1000, -1000,
- -1000, -1000, 1904, 1904, 1904, -1000, -1000, -1000, -1000, -1000,
- 262, 24624, 24624, 24624, 1596, 479, 1635, 1244, 1670, 1506,
- 1506, 1146, 24624, 1146, 24624, 863, 863, 863, 863, 863,
- -1000, -1000, -1000, -1000, -1000, -1000, 1621, -1000, 1616, -1000,
- 1904, 55746, 1774, 17208, 1552, 1264, 1378, 877, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 3572, 1378,
- 1636, 1378, 1769, 3539, 969, -1000, 22401, 1378, 3524, -1000,
- -1000, 1378, 1378, 22401, -1000, -1000, 22401, 22401, 22401, 22401,
- 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505,
- 22401, 1505, 1873, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, 1870, 2549, 1529, 1505, 1505, 1505, 1505, 3505, 1505,
- 1505, 22401, 1477, -1000, -1000, -1000, 1377, 3495, 1344, 3490,
- 1505, 1505, -1000, 1505, 3486, 3481, 1378, 2689, 2684, 1505,
- 1505, 1505, 1505, 1505, 2680, 2676, 1505, 1505, 2668, 1505,
- 3477, 1505, 2657, 2615, 2589, 2585, 2566, 2560, 2548, 2521,
- 2483, 2479, 2460, 2452, 2448, 2443, 2413, 2398, 2344, 2333,
- 1505, 1505, 1505, 3473, 1505, 3466, 1505, 3459, 1505, 1505,
- 3454, 2329, 2323, 1378, 1866, -1000, 3434, 1505, 3425, 3415,
- 3411, 2316, 3405, 3396, 3391, 1505, 1505, 1505, 2312, 3386,
- 3379, 3369, 3349, 3281, 3071, 3064, 3060, 3049, 1505, 1403,
- 1403, 1403, 1403, 1403, 3044, -256, 1505, 1378, -1000, -1000,
- -1000, -1000, -1000, 3040, 2298, 3019, 3009, 3002, 2993, 1378,
- 1904, 796, -1000, -1000, 1403, 1378, 1378, 1403, 1403, 2969,
- 2958, 2951, 2940, 2928, 2924, 1505, 1505, -1000, 1505, 2887,
- 2811, 2280, 2250, 1378, -1000, 1403, 56487, -1000, -446, -1000,
- 22, 944, 1904, -1000, 38703, 1378, -1000, 5069, -1000, 1317,
- -1000, -1000, -1000, -1000, -1000, 35739, 1857, -1000, -1000, -1000,
- -1000, 1904, 1763, -1000, -1000, -1000, -1000, 339, 72, 34998,
- 857, 857, 124, 1234, 1234, 22401, -1000, -1000, -1000, -1000,
- -1000, -1000, 794, 2527, 387, 1904, -1000, 1895, 2899, -1000,
- -1000, -1000, 2429, 28329, -1000, -1000, 1904, 1904, 56487, 1846,
- 1845, -1000, 789, -1000, 1342, 1865, 20, -4, -1000, -1000,
- -1000, -1000, 1234, -1000, 1352, 345, 342, -1000, 435, -1000,
- -1000, -1000, -1000, 2278, 85, -1000, -1000, -1000, 322, 339,
- -1000, -1000, -1000, -1000, -1000, -1000, 1606, -1000, 1606, -1000,
- -1000, -1000, -1000, -1000, 1237, -1000, -1000, -1000, -1000, 1223,
- -1000, -1000, 1221, -1000, -1000, 2358, 2108, 408, -1000, -1000,
- 926, 1599, -1000, -1000, 2283, 926, 926, 55005, -1000, -1000,
- 1731, 2444, 256, 56487, 2100, -1000, 2052, 2052, 2052, -1000,
- 2392, -1000, -1000, -1000, -1000, -1000, -1000, -524, 163, 571,
- -1000, -1000, -1000, 5530, 55005, 1730, -1000, 229, -1000, 1651,
- -1000, 55005, -1000, 1702, 1988, 55005, 55005, -1000, -1000, -1000,
- 55005, 1904, -1000, -1000, -1000, -1000, 504, 2359, 330, -1000,
- -1000, -300, -1000, -1000, 233, 229, 55746, 55005, 862, -1000,
- -1000, -1000, -1000, -1000, -525, 1700, 480, 240, 488, 56487,
- 56487, 56487, 56487, 56487, 56487, 774, -1000, -1000, 37, -1000,
- -1000, 211, -1000, -1000, -1000, -1000, -1000, -1000, 211, -1000,
- -1000, -1000, -1000, -1000, 287, 465, -1000, 56487, 56487, 935,
- -1000, -1000, -1000, -1000, -1000, 1065, -1000, -1000, 1065, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, 2352, 56487, 0, -491, -1000, -488, 22401, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, 1197, 477, 1635, 24624, 24624,
- 940, 940, 24624, -1000, -1000, -1000, 832, 832, 34257, -1000,
- 24624, 22401, -1000, -1000, 22401, 22401, 22401, 929, -1000, 22401,
- 1199, -1000, 22401, -1000, -256, 1403, 1505, 1505, 1505, 1505,
- -256, -256, -256, -256, -256, -256, -256, -256, -256, -256,
- 1894, -1000, 22401, 22401, 22401, 1378, 291, -1000, -1000, -1000,
- -256, 22401, -1000, -1000, 2547, -1000, 22401, -1000, 34257, 22401,
- 22401, 22401, -1000, -1000, -1000, 22401, 22401, -1000, -1000, 22401,
- -1000, 22401, -1000, -1000, -1000, -1000, -1000, -1000, 22401, -1000,
- 22401, -1000, -1000, -1000, 22401, -1000, 22401, -1000, -1000, 22401,
- -1000, 22401, -1000, 22401, -1000, 22401, -1000, 22401, -1000, 22401,
- -1000, 22401, -1000, 22401, -1000, 22401, -1000, 22401, -1000, 22401,
- -1000, 22401, -1000, 22401, -1000, 22401, -1000, 22401, -1000, 22401,
- -1000, 22401, -1000, 22401, -1000, -1000, -1000, 22401, -1000, 22401,
- -1000, 22401, -1000, -1000, 22401, -1000, 22401, -1000, 22401, -1000,
- 22401, 22401, -1000, 22401, 22401, 22401, -1000, 22401, 22401, 22401,
- 22401, -1000, -1000, -1000, -1000, 22401, 22401, 22401, 22401, 22401,
- 22401, 22401, 22401, 22401, 22401, -1000, -1000, -1000, -1000, -1000,
- -1000, 22401, -1000, 40185, 43, -256, 1190, 43, 1190, 23883,
- 812, 811, 23142, -1000, 22401, 16461, -1000, -1000, -1000, -1000,
- -1000, 22401, 22401, 22401, 22401, 22401, 22401, -1000, -1000, -1000,
- 22401, 22401, -1000, 22401, -1000, 22401, -1000, -1000, -1000, -1000,
- -1000, 944, -1000, 466, 464, 892, 55005, -1000, -1000, -1000,
- -1000, 1864, -1000, 2455, -1000, 2206, 2205, 2537, 2527, 21660,
- -1000, 30552, -1000, -1000, 55005, -408, -1000, 2247, 2369, 857,
- 857, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 13473, 2466,
- 22401, 2092, 55746, 223, -1000, 29811, 55005, 55746, 30552, 30552,
- 30552, 30552, 30552, -1000, 2140, 2126, -1000, 2180, 2136, 2261,
- 56487, -1000, 1537, 1696, -1000, 22401, 32775, 1827, 30552, -1000,
- -1000, 30552, 56487, 12726, -1000, -1000, -3, -1, -1000, -1000,
- -1000, -1000, 1338, -1000, -1000, 1066, 2422, 2272, -1000, -1000,
- -1000, -1000, -1000, 1689, -1000, 1659, 1859, 1643, 1634, 328,
- -1000, 2005, 2349, 926, 926, -1000, 1219, -1000, 1269, 1597,
- 1585, -1000, -1000, -1000, 467, -1000, 56487, 2083, 2074, 2073,
- -1000, -540, 1217, 1985, 1941, 22401, 1979, 2507, 1851, 55005,
- -1000, -1000, 55746, -1000, 259, -1000, 408, 55005, -1000, -1000,
- -1000, 331, 56487, -1000, 8967, -1000, -1000, -1000, 229, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, 56487, 242, -1000, 1978,
- 1336, -1000, -1000, 2038, -1000, -1000, -1000, -1000, -1000, 213,
- 210, 1583, 195, 1569, 195, -1000, 56487, 927, 2108, 56487,
- -1000, -1000, -1000, 1091, 1091, -1000, -1000, 2343, -1000, 1269,
- 1505, 24624, 24624, -1000, 864, -1000, -1000, 510, -223, 1952,
- 1952, -1000, 1952, 1957, -1000, 1952, 154, 1952, 149, 1952,
- -1000, -1000, 1378, 1378, -1000, 1403, 2234, 1821, 2792, -1000,
- 1234, 22401, 2786, -1000, -1000, -256, -256, -256, -256, -256,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -69, 2765, 2720, 1505, -1000, 1951, 1950, -1000, 1505, 22401,
- 1505, 1378, 2225, 1505, 1505, 1505, 1505, 1505, 1505, 1505,
- 1505, 1505, 1505, 1505, 1505, 2204, 2200, 2170, 2162, 2156,
- 2150, 2139, 2130, 2122, 2117, 2109, 2084, 2075, 2068, 2054,
- 2040, 1505, 1505, 2023, 1505, 1974, 1959, -1000, 1234, 1403,
- 2713, 1403, 1505, 1505, 2703, 306, 1505, 1628, 1628, 1628,
- 1628, 1628, 1403, 1403, 1403, 1403, 1505, 55005, -1000, -256,
- -1000, -1000, -325, -327, -1000, 1378, -256, 1855, 24624, 1505,
- 24624, 24624, 24624, 1505, 1378, -1000, 1954, 1945, 2647, 1936,
- 1505, 2044, 1505, 1505, 1505, 1929, -1000, 2435, 1904, 2435,
- 1904, 2435, 1568, 1317, 56487, -1000, -1000, -1000, -1000, 2527,
- 2486, -1000, 1854, -1000, 72, 599, -1000, 2210, 2369, -1000,
- 2506, 2233, 2505, -1000, -1000, -1000, -1000, -1000, 1234, -1000,
- 2366, 1858, -1000, 948, 1839, -1000, -1000, 20919, 1605, 2198,
- 785, 1568, 1893, 2899, 2047, 2072, 3365, -1000, -1000, -1000,
- -1000, 2119, -1000, 2107, -1000, -1000, 1927, -1000, 2000, 336,
- 30552, 1890, 1890, -1000, 781, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, 1083, 8967, 2567, -1000, 1557, -1000, 1343, 203,
- 1214, -1000, -1000, 926, 926, -1000, 996, 994, -1000, 56487,
- 1948, -1000, 339, 1546, 339, 1206, -1000, -1000, 1200, -1000,
- -1000, -1000, -1000, 1903, 2255, -1000, -1000, -1000, -1000, 56487,
- -1000, 56487, 56487, 56487, 1939, 2503, -1000, 22401, 1935, 934,
- 2348, 55005, 55005, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, 421, 926, -504, 302, 301, 926,
- 926, 926, -543, -1000, -1000, 1566, 1544, -1000, -208, -1000,
- 22401, -1000, -1000, -1000, -1000, -1000, 1180, 1180, 1541, 1540,
- 1539, -1000, 1927, -1000, -1000, -1000, 1629, -1000, -1000, -185,
- 55005, 55005, 55005, 55005, -1000, -1000, -1000, 1114, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 15416,
+ 15416, -1000, -1000, 2565, 2559, -1000, -1000, -1000, 1960, -1000,
+ 184, 17, 185, -1000, 42894, 535, 974, -1000, 535, -1000,
+ -1000, -1000, -1000, -1000, 1959, 42152, -1000, -461, -464, -467,
+ -469, -1000, -1000, -1000, -471, -473, -1000, -1000, -1000, 22860,
+ 22860, 22860, 22860, -257, -1000, 1217, 25086, 2491, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, 22860, 247, 1131, 25086, 25086,
+ 25086, 25086, 25086, 25086, 25086, 26570, 25828, 25086, 25086, 25086,
+ 25086, 25086, 25086, -1000, -1000, 33990, 6271, 6271, 900, 900,
+ 900, 900, -1000, -174, 1958, 55508, -1000, -1000, -1000, 822,
+ 22860, 22860, 900, -1000, 1238, 2007, 19892, 22860, 22860, 22860,
+ 22860, 960, 1393, 55508, 22860, -1000, 1406, -1000, -1000, -1000,
+ -1000, 1234, -1000, -1000, 1081, 2376, 2376, 2376, 2376, 22860,
+ 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 2376,
+ 22860, 208, 208, 919, 22860, 22860, 22860, 22860, 22860, 22860,
+ 22860, 22860, 18408, 22860, 22860, 25086, 22860, 22860, 22860, 1406,
+ 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860,
+ 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860,
+ 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860,
+ 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860,
+ 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860,
+ 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860,
+ 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860,
+ 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 1406,
+ 22860, 1221, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 17660,
+ 22860, 22860, 22860, 22860, 22860, -1000, -1000, -1000, -1000, -1000,
+ -1000, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 22860, 1406,
+ 22860, 22860, 22860, 22860, 22860, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, 1686, 1493, 1478, 22860, -1000,
+ 1957, -1000, -202, 31022, 22860, 1739, 2683, 2157, 54766, -1000,
+ -1000, -1000, -1000, 2569, -1000, 2569, 1686, 3881, 2277, 22118,
+ -1000, -1000, 3881, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, 1737, -1000, 56250, 1954,
+ 2545, 54766, -1000, -294, -1000, -295, 2272, 1730, 351, -1000,
+ 22860, 22860, 1953, -1000, 1399, 56250, -1000, -257, -1000, 41410,
+ -1000, -1000, 14668, 56250, 350, 56250, -1000, 30280, 40668, 306,
+ -1000, 13, 1933, -1000, 29, 1, 19150, 899, -1000, -1000,
+ -1000, 371, 27312, 1822, 899, 100, -1000, -1000, -1000, 2041,
+ -1000, 2041, 2041, 2041, 2041, 351, 351, 351, 351, -1000,
+ -1000, -1000, -1000, -1000, 2079, 2041, 2075, -1000, 2041, 2041,
+ 2041, 2041, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2073,
+ 2073, 2073, 2061, 2061, 2042, 2042, 447, -1000, 22860, 486,
+ 39926, 2537, 1270, 1538, 250, 475, 2144, 54766, 54766, 54766,
+ 56250, 989, -1000, 1445, 1412, 1398, -1000, -532, 1952, -1000,
+ -1000, 2617, -1000, -1000, 956, 1088, 1084, 1064, 54766, 214,
+ 335, -1000, 433, -1000, 39926, 54766, 1029, 864, 54766, -1000,
+ 54766, -1000, -1000, -1000, -1000, -1000, 54766, -1000, -1000, 1950,
+ -1000, 1927, 1106, 1083, 1098, 1080, 1950, -1000, -1000, -183,
+ 1950, -1000, 1950, -1000, 1950, -1000, 1950, -1000, 1950, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1001, 278,
+ -350, 54766, 214, 487, -1000, 485, 33990, -1000, -1000, -1000,
+ 33990, 33990, -1000, -1000, -1000, -1000, 1726, 1723, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- 864, 1378, 344, -191, 1378, -1000, -1000, 339, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 22401, -1000,
- 22401, -1000, 22401, 1234, 22401, -1000, -1000, -1000, -1000, -1000,
- 2466, 1533, 22401, 22401, -1000, 1193, 1188, -256, 1505, -1000,
- -1000, -1000, 22401, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, 22401, -1000, 22401, -1000,
- 22401, -1000, 22401, -1000, 22401, -1000, 22401, -1000, 22401, -1000,
- 22401, -1000, 22401, -1000, 22401, -1000, 22401, -1000, 22401, -1000,
- 22401, -1000, 22401, -1000, 22401, -1000, 22401, -1000, -1000, 22401,
- -1000, -1000, -1000, 22401, -1000, 22401, -1000, 22401, -1000, -1000,
- -1000, 22401, 264, 832, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, 1378, 333, -1000, -1000, -1000,
- 2532, -1000, 1378, 22401, 940, -1000, 940, 940, 940, -1000,
- -1000, -1000, 22401, -1000, 22401, 22401, -1000, 22401, -1000, 22401,
- -1000, -1000, -1000, -1000, 22401, 1904, 2212, 39444, 1904, 39444,
- 1904, 32775, -1000, -1000, 2486, 2522, 2499, 2220, 2223, 2223,
- 2210, -1000, 2498, 2489, -1000, 1502, 2485, 1485, 954, -1000,
- 55746, 22401, -1000, 223, 38703, -1000, 401, 55005, 223, 55005,
- -1000, 2480, -1000, -1000, 22401, 1934, -1000, 22401, -1000, -1000,
- -1000, -1000, 4437, 2527, 1890, -1000, -1000, 873, -1000, 22401,
- -1000, 10484, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- 1483, 1469, -1000, -1000, 1933, 22401, -1000, -1000, -1000, 1538,
- 1527, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1927,
- -1000, -1000, -1000, -1000, 331, -529, 2216, 55005, 1130, -1000,
- 1501, 1851, 310, 223, 1467, 926, 926, 926, 1126, 1123,
- 38703, 1494, -1000, 55005, 409, -1000, 331, -1000, -216, -217,
- 1505, -1000, -1000, 2420, -1000, -1000, 16461, -1000, -1000, 1920,
- 2049, -1000, -1000, -1000, -1000, 2157, -176, -194, -1000, -1000,
- 1505, 1505, 1505, 1388, 1378, -1000, 1505, 1505, 1491, 1475,
- -1000, -1000, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505,
- 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505,
- 1505, 1505, 1403, 1868, -1000, 264, 1378, 2067, -1000, -1000,
- 4437, -1000, -1000, 2480, 2484, 43, -1000, -1000, 225, 43,
- 1234, 960, 1378, 1378, 960, 1832, 1505, 1738, 1713, 1505,
- 1505, 33516, -1000, 2470, 2469, 1457, -1000, -1000, 39444, 1457,
- 39444, 944, 2522, -267, 22401, 22401, 2214, 1147, -1000, -1000,
- -1000, -1000, 1465, 1444, -1000, 1410, -1000, 2565, -1000, 1234,
- -1000, 1904, 223, -1000, 545, 1839, -1000, 2466, 1234, 55005,
- 1234, 73, 2480, -1000, 1505, -1000, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
- 1904, 1904, 1904, 1904, 1904, 1904, 1904, -1000, -1000, 55005,
- 2031, -1000, -1000, 2415, 1474, 162, -1000, 1454, 1851, -1000,
- -1000, 221, -1000, 22401, -1000, 38703, 1398, 1355, -1000, -1000,
- -1000, -1000, -543, -1000, -1000, -1000, -1000, -1000, -1000, 406,
- 1848, -1000, 924, 55005, 56487, -1000, 2154, -1000, -1000, -1000,
- -1000, 22401, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 22401,
- -1000, 1378, 2063, -1000, -363, -1000, -505, 22401, -256, -1000,
- -1000, -256, -1000, -1000, -1000, -1000, -1000, 22401, -1000, -1000,
- 22401, -1000, 22401, -1000, -1000, 1457, -1000, -1000, -1000, 37962,
- -1000, 1457, -1000, 1457, -1000, -267, -1000, 1830, -1000, 55005,
- 1234, 332, -1000, 1142, -1000, -1000, -1000, -1000, -1000, 55746,
- 55005, 1839, 55005, -1000, -1000, 1453, 1378, 1904, 2466, -1000,
- 1449, -1000, 406, -1000, 1916, 1941, -1000, -1000, -1000, 20178,
- -1000, -1000, -1000, -1000, -1000, 239, -184, 16461, 11979, 1438,
- -1000, -182, 1505, 1403, -1000, -477, -1000, -1000, -1000, -1000,
- 280, -1000, -1000, 1636, -1000, -1000, 1650, 1560, 1556, -1000,
- -1000, -1000, -1000, -1000, -1000, -267, -1000, -1000, 2406, -1000,
- -219, -1000, -1000, 1503, 1386, -1000, -1000, -1000, 32775, 54264,
- -1000, -171, 410, -184, 22401, 1910, 1378, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -48, -1000, -1000, 527, -1000,
- -1000, -1000, 2038, -192, -1000, -1000, -1000, 290, -495, -296,
- -297, 24624, -1000, 22401, -1000, 22401, -1000, 22401, -1000, 55005,
- 1904, -1000, -1000, -1000, 1383, -1000, 5057, -341, 2062, -1000,
- -111, -1000, -1000, -1000, 1079, 1351, -1000, -1000, -1000, -1000,
- -1000, -1000, 2014, 55005, -1000, 420, -1000, -1000, 15714, -185,
- -195, 941, -1000, -1000, -1000, -1000, -1000, 940, 1490, 1472,
- 1505, -1000, 55005, -1000, 54264, -332, 862, 4437, -1000, 2061,
- 2057, 2543, -1000, -1000, -1000, -1000, -1000, -1000, -545, 1369,
- 261, -1000, -1000, -1000, 290, -309, -1000, 22401, -1000, 22401,
- -1000, 1378, -1000, -1000, 2382, 73, -1000, 2562, -1000, 2544,
- 1040, 1040, -1000, 1109, -545, -1000, -1000, -1000, -1000, 1505,
- 1505, -1000, -349, -1000, -1000, -1000, -1000, -1000, 417, 1171,
- -1000, -1000, -1000, -1000, -1000, 4437, -1000, -1000, -1000, 285,
- 285, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -520, 56250, -1000,
+ 236, 971, 268, 376, 291, 56250, 405, 2423, 2413, 2403,
+ 2396, 2391, 2373, 2366, 242, 298, 56250, 56250, 474, 2206,
+ 56250, 2522, 56250, -1000, -1000, -1000, -1000, -1000, 1716, 1708,
+ -1000, 1393, 56250, -1000, -1000, 1114, 1114, -1000, -1000, 56250,
+ 1114, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1114,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, 56250, -1000, -1000, -1000, -1000,
+ 1702, -1000, 56250, -37, 177, -1000, -1000, 54766, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -114, -1000, 854,
+ 26, 393, -1000, -1000, -1000, -1000, -1000, 2550, -1000, 1393,
+ 1021, 1010, -1000, 1830, -1000, -1000, 1233, -1000, -1000, -1000,
+ -1000, -1000, 1830, 1830, 1830, -1000, -1000, -1000, -1000, -1000,
+ 247, 25086, 25086, 25086, 1782, 777, 1891, 1812, 1474, 1231,
+ 1231, 976, 25086, 976, 25086, 918, 918, 918, 918, 918,
+ -1000, -1000, -1000, -1000, -1000, -1000, 1692, -1000, 1667, -1000,
+ 1830, 55508, 1827, 17660, 1747, 1599, 1406, 932, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 3935, 1406,
+ 1851, 1406, 1674, 3902, 1026, -1000, 22860, 1406, 3610, -1000,
+ -1000, 1406, 1406, 22860, -1000, -1000, 22860, 22860, 22860, 22860,
+ 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538,
+ 22860, 1538, 1947, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, 1938, 2669, 1558, 1538, 1538, 1538, 1538, 3587, 1538,
+ 1538, 22860, 1358, -1000, -1000, -1000, 1419, 3583, 1684, 3572,
+ 1538, 1538, -1000, 1538, 3541, 3536, 1406, 2928, 2820, 1538,
+ 1538, 1538, 1538, 1538, 2792, 2778, 1538, 1538, 2705, 1538,
+ 3522, 1538, 2698, 2681, 2677, 2633, 2611, 2603, 2594, 2570,
+ 2561, 2539, 2533, 2523, 2509, 2492, 2458, 2448, 2444, 2407,
+ 1538, 1538, 1538, 3508, 1538, 3489, 1538, 3485, 1538, 1538,
+ 3474, 2394, 2364, 1406, 1934, -1000, 3469, 1538, 3457, 3453,
+ 3446, 2354, 3427, 3422, 3418, 1538, 1538, 1538, 2339, 3413,
+ 3407, 3395, 3391, 3374, 3369, 3364, 3355, 3343, 1538, 1478,
+ 1478, 1478, 1478, 1478, 3253, -259, 1538, 1406, -1000, -1000,
+ -1000, -1000, -1000, 3092, 2333, 3042, 3030, 3011, 3003, 1406,
+ 1830, 821, -1000, -1000, 1478, 1406, 1406, 1478, 1478, 2995,
+ 2963, 2957, 2953, 2933, 2834, 1538, 1538, -1000, 1538, 2810,
+ 2800, 2303, 2290, 1406, -1000, 1478, 56250, -1000, -451, -1000,
+ -8, 954, 1830, -1000, 38442, 1406, -1000, 4349, -1000, 1168,
+ -1000, -1000, -1000, -1000, -1000, 35474, 1879, -1000, -1000, -1000,
+ -1000, 1830, 1762, -1000, -1000, -1000, -1000, 351, 73, 34732,
+ 890, 890, 123, 1393, 1393, 22860, -1000, -1000, -1000, -1000,
+ -1000, -1000, 820, 2642, 404, 1830, -1000, 1948, 3576, -1000,
+ -1000, -1000, 2544, 28054, -1000, -1000, 1830, 1830, 56250, 1939,
+ 1745, -1000, 819, -1000, 1320, 1933, 13, 24, -1000, -1000,
+ -1000, -1000, 1393, -1000, 1378, 353, 346, -1000, 437, -1000,
+ -1000, -1000, -1000, 2343, 81, -1000, -1000, -1000, 912, 351,
+ -1000, -1000, -1000, -1000, -1000, -1000, 1664, -1000, 1664, -1000,
+ -1000, -1000, -1000, -1000, 1268, -1000, -1000, -1000, -1000, 1266,
+ -1000, -1000, 1256, -1000, -1000, 2877, 2183, 486, -1000, -1000,
+ 958, 1655, -1000, -1000, 2356, 958, 958, 54766, -1000, -1000,
+ 1783, 2537, 236, 56250, 2203, -1000, 2144, 2144, 2144, -1000,
+ 2497, -1000, -1000, -1000, -1000, -1000, -1000, -522, 174, 609,
+ -1000, -1000, -1000, 1389, 54766, 1721, -1000, 224, -1000, 1779,
+ -1000, 54766, -1000, 1713, 2053, 54766, 54766, -1000, -1000, -1000,
+ 54766, 1830, -1000, -1000, -1000, -1000, 760, 2471, 319, -1000,
+ -1000, -283, -1000, -1000, 214, 224, 55508, 54766, 899, -1000,
+ -1000, -1000, -1000, -1000, -523, 1690, 506, 228, 328, 56250,
+ 56250, 56250, 56250, 56250, 56250, 800, -1000, -1000, 39, -1000,
+ -1000, 202, -1000, -1000, 1623, -1000, -1000, -1000, -1000, 202,
+ -1000, -1000, -1000, -1000, -1000, 275, 478, -1000, 56250, 56250,
+ 964, -1000, -1000, -1000, -1000, -1000, 1096, -1000, -1000, 1096,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, 2457, 56250, 20, -490, -1000, -486, 22860, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, 1666, 749, 1891, 25086,
+ 25086, 2007, 2007, 25086, -1000, -1000, -1000, 1076, 1076, 33990,
+ -1000, 25086, 22860, -1000, -1000, 22860, 22860, 22860, 981, -1000,
+ 22860, 1181, -1000, 22860, -1000, -259, 1478, 1538, 1538, 1538,
+ 1538, -259, -259, -259, -259, -259, -259, -259, -259, -259,
+ -259, 1908, -1000, 22860, 22860, 22860, 1406, 334, -1000, -1000,
+ -1000, -259, 22860, -1000, -1000, 2666, -1000, 22860, -1000, 33990,
+ 22860, 22860, 22860, -1000, -1000, -1000, 22860, 22860, -1000, -1000,
+ 22860, -1000, 22860, -1000, -1000, -1000, -1000, -1000, -1000, 22860,
+ -1000, 22860, -1000, -1000, -1000, 22860, -1000, 22860, -1000, -1000,
+ 22860, -1000, 22860, -1000, 22860, -1000, 22860, -1000, 22860, -1000,
+ 22860, -1000, 22860, -1000, 22860, -1000, 22860, -1000, 22860, -1000,
+ 22860, -1000, 22860, -1000, 22860, -1000, 22860, -1000, 22860, -1000,
+ 22860, -1000, 22860, -1000, 22860, -1000, -1000, -1000, 22860, -1000,
+ 22860, -1000, 22860, -1000, -1000, 22860, -1000, 22860, -1000, 22860,
+ -1000, 22860, 22860, -1000, 22860, 22860, 22860, -1000, 22860, 22860,
+ 22860, 22860, -1000, -1000, -1000, -1000, 22860, 22860, 22860, 22860,
+ 22860, 22860, 22860, 22860, 22860, 22860, -1000, -1000, -1000, -1000,
+ -1000, -1000, 22860, -1000, 39926, 47, -259, 1221, 47, 1221,
+ 24344, 832, 507, 23602, -1000, 22860, 16912, -1000, -1000, -1000,
+ -1000, -1000, 22860, 22860, 22860, 22860, 22860, 22860, -1000, -1000,
+ -1000, 22860, 22860, -1000, 22860, -1000, 22860, -1000, -1000, -1000,
+ -1000, -1000, 954, -1000, 455, 453, 864, 54766, -1000, -1000,
+ -1000, -1000, 1930, -1000, 2564, -1000, 2285, 2284, 2659, 2642,
+ 22118, -1000, 30280, -1000, -1000, 54766, -419, -1000, 2326, 2476,
+ 890, 890, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 13920,
+ 2569, 22860, 2201, 55508, 223, -1000, 29538, 54766, 55508, 30280,
+ 30280, 30280, 30280, 30280, -1000, 2242, 2235, -1000, 2254, 2228,
+ 2313, 56250, -1000, 1686, 1688, -1000, 22860, 32506, 1935, 30280,
+ -1000, -1000, 30280, 56250, 13172, -1000, -1000, 6, -7, -1000,
+ -1000, -1000, -1000, 371, -1000, -1000, 1082, 2543, 2338, -1000,
+ -1000, -1000, -1000, -1000, 1682, -1000, 1676, 1928, 1671, 1662,
+ 278, -1000, 2067, 2451, 958, 958, -1000, 1254, -1000, 1238,
+ 1614, 1586, -1000, -1000, -1000, 496, -1000, 56250, 2200, 2195,
+ 2194, -1000, -540, 1253, 2052, 2012, 22860, 2051, 2615, 1913,
+ 54766, -1000, -1000, 55508, -1000, 197, -1000, 486, 54766, -1000,
+ -1000, -1000, 335, 56250, -1000, 7068, -1000, -1000, -1000, 224,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, 56250, 233, -1000,
+ 2047, 1343, -1000, -1000, 2140, -1000, -1000, -1000, -1000, -1000,
+ 213, 201, 1583, 199, 1547, -1000, 199, -1000, 56250, 928,
+ 2183, 56250, -1000, -1000, -1000, 1114, 1114, -1000, -1000, 2449,
+ -1000, 1238, 1538, 25086, 25086, -1000, 900, -1000, -1000, 435,
+ -229, 2041, 2041, -1000, 2041, 2042, -1000, 2041, 171, 2041,
+ 154, 2041, -1000, -1000, 1406, 1406, -1000, 1478, 2286, 1439,
+ 2796, -1000, 1393, 22860, 2715, -1000, -1000, -259, -259, -259,
+ -259, -259, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -69, 2689, 2637, 1538, -1000, 2039, 2036, -1000,
+ 1538, 22860, 1538, 1406, 2278, 1538, 1538, 1538, 1538, 1538,
+ 1538, 1538, 1538, 1538, 1538, 1538, 1538, 2266, 2257, 2249,
+ 2196, 2175, 2171, 2167, 2163, 2158, 2149, 2145, 2128, 2084,
+ 2080, 2076, 2062, 1538, 1538, 2058, 1538, 2054, 2048, -1000,
+ 1393, 1478, 2628, 1478, 1538, 1538, 2527, 337, 1538, 1651,
+ 1651, 1651, 1651, 1651, 1478, 1478, 1478, 1478, 1538, 54766,
+ -1000, -259, -1000, -1000, -307, -309, -1000, 1406, -259, 1926,
+ 25086, 1538, 25086, 25086, 25086, 1538, 1406, -1000, 2043, 2010,
+ 2270, 1940, 1538, 1832, 1538, 1538, 1538, 1821, -1000, 2535,
+ 1830, 2535, 1830, 2535, 1647, 1168, 56250, -1000, -1000, -1000,
+ -1000, 2642, 2639, -1000, 1914, -1000, 73, 639, -1000, 2311,
+ 2476, -1000, 2610, 2306, 2598, -1000, -1000, -1000, -1000, -1000,
+ 1393, -1000, 2479, 1916, -1000, 963, 1907, -1000, -1000, 21376,
+ 1649, 2281, 817, 1647, 1923, 3576, 2136, 2190, 3359, -1000,
+ -1000, -1000, -1000, 2231, -1000, 2063, -1000, -1000, 2005, -1000,
+ 1790, 350, 30280, 1877, 1877, -1000, 816, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, 1100, 7068, 2704, -1000, 1544, -1000,
+ 1366, 195, 1240, -1000, -1000, 958, 958, -1000, 1028, 1020,
+ -1000, 56250, 2031, -1000, 351, 1529, 351, 1225, -1000, -1000,
+ 1215, -1000, -1000, -1000, -1000, 1994, 2562, -1000, -1000, -1000,
+ -1000, 56250, -1000, 56250, 56250, 56250, 2029, 2595, -1000, 22860,
+ 2015, 962, 2253, 54766, 54766, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, 427, 958, -503, 297,
+ 294, 958, 958, 958, -541, -1000, -1000, 1639, 1637, -1000,
+ -205, -1000, 22860, -1000, -1000, -1000, -1000, -1000, 1249, 1249,
+ 1513, 1500, 1498, -1000, 2005, -1000, -1000, -1000, 1722, -1000,
+ -1000, -186, 54766, 54766, 54766, 54766, -1000, -1000, -1000, 1187,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, 900, 1406, 375, -188, 1406, -1000, -1000, 351,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ 22860, -1000, 22860, -1000, 22860, 1393, 22860, -1000, -1000, -1000,
+ -1000, -1000, 2569, 1489, 22860, 22860, -1000, 1211, 1209, -259,
+ 1538, -1000, -1000, -1000, 22860, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 22860, -1000,
+ 22860, -1000, 22860, -1000, 22860, -1000, 22860, -1000, 22860, -1000,
+ 22860, -1000, 22860, -1000, 22860, -1000, 22860, -1000, 22860, -1000,
+ 22860, -1000, 22860, -1000, 22860, -1000, 22860, -1000, 22860, -1000,
+ -1000, 22860, -1000, -1000, -1000, 22860, -1000, 22860, -1000, 22860,
+ -1000, -1000, -1000, 22860, 264, 1076, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1406, 347, -1000,
+ -1000, -1000, 2650, -1000, 1406, 22860, 2007, -1000, 2007, 2007,
+ 2007, -1000, -1000, -1000, 22860, -1000, 22860, 22860, -1000, 22860,
+ -1000, 22860, -1000, -1000, -1000, -1000, 22860, 1830, 2374, 39184,
+ 1830, 39184, 1830, 32506, -1000, -1000, 2639, 2596, 2593, 2300,
+ 2312, 2312, 2311, -1000, 2589, 2587, -1000, 1472, 2585, 1458,
+ 1006, -1000, 55508, 22860, -1000, 223, 38442, -1000, 403, 54766,
+ 223, 54766, -1000, 2634, -1000, -1000, 22860, 2014, -1000, 22860,
+ -1000, -1000, -1000, -1000, 6271, 2642, 1877, -1000, -1000, 922,
+ -1000, 22860, -1000, 11485, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, 1453, 1446, -1000, -1000, 2006, 22860, -1000, -1000,
+ -1000, 1663, 1652, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, 2005, -1000, -1000, -1000, -1000, 335, -527, 2224, 54766,
+ 1206, -1000, 1632, 1913, 288, 223, 1432, 958, 958, 958,
+ 1161, 1152, 38442, 1605, -1000, 54766, 364, -1000, 335, -1000,
+ -222, -223, 1538, -1000, -1000, 2530, -1000, -1000, 16912, -1000,
+ -1000, 2003, 2141, -1000, -1000, -1000, -1000, 2264, -179, -200,
+ -1000, -1000, 1538, 1538, 1538, 1405, 1406, -1000, 1538, 1538,
+ 1633, 1543, -1000, -1000, 1538, 1538, 1538, 1538, 1538, 1538,
+ 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538,
+ 1538, 1538, 1538, 1538, 1478, 1778, -1000, 264, 1406, 2184,
+ -1000, -1000, 6271, -1000, -1000, 2634, 2579, 47, -1000, -1000,
+ 222, 47, 1393, 1032, 1406, 1406, 1032, 1760, 1538, 1660,
+ 1642, 1538, 1538, 33248, -1000, 2572, 2571, 1542, -1000, -1000,
+ 39184, 1542, 39184, 954, 2596, -270, 22860, 22860, 2297, 1164,
+ -1000, -1000, -1000, -1000, 1402, 1390, -1000, 1377, -1000, 2699,
+ -1000, 1393, -1000, 1830, 223, -1000, 808, 1907, -1000, 2569,
+ 1393, 54766, 1393, 75, 2634, -1000, 1538, -1000, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, -1000,
+ -1000, 54766, 2180, -1000, -1000, 2529, 1554, 166, -1000, 1475,
+ 1913, -1000, -1000, 221, -1000, 22860, -1000, 38442, 1374, 1360,
+ -1000, -1000, -1000, -1000, -541, -1000, -1000, -1000, -1000, -1000,
+ -1000, 392, 1888, -1000, 957, 54766, 56250, -1000, 2188, -1000,
+ -1000, -1000, -1000, 22860, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, 22860, -1000, 1406, 2181, -1000, -375, -1000, -504, 22860,
+ -259, -1000, -1000, -259, -1000, -1000, -1000, -1000, -1000, 22860,
+ -1000, -1000, 22860, -1000, 22860, -1000, -1000, 1542, -1000, -1000,
+ -1000, 37700, -1000, 1542, -1000, 1542, -1000, -270, -1000, 1882,
+ -1000, 54766, 1393, 345, -1000, 1162, -1000, -1000, -1000, -1000,
+ -1000, 55508, 54766, 1907, 54766, -1000, -1000, 1508, 1406, 1830,
+ 2569, -1000, 1482, -1000, 392, -1000, 2002, 2012, -1000, -1000,
+ -1000, 20634, -1000, -1000, -1000, -1000, -1000, 249, -185, 16912,
+ 12424, 1480, -1000, -184, 1538, 1478, -1000, -479, -1000, -1000,
+ -1000, -1000, 279, -1000, -1000, 1851, -1000, -1000, 1621, 1527,
+ 1444, -1000, -1000, -1000, -1000, -1000, -1000, -270, -1000, -1000,
+ 2525, -1000, -226, -1000, -1000, 1367, 1442, -1000, -1000, -1000,
+ 32506, 54024, -1000, -171, 293, -185, 22860, 1995, 1406, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -52, -1000, -1000,
+ 799, -1000, -1000, -1000, 2140, -189, -1000, -1000, -1000, 284,
+ -494, -291, -292, 25086, -1000, 22860, -1000, 22860, -1000, 22860,
+ -1000, 54766, 1830, -1000, -1000, -1000, 1426, -1000, 4978, -334,
+ 2177, -1000, -126, -1000, -1000, -1000, 1042, 1359, -1000, -1000,
+ -1000, -1000, -1000, -1000, 1936, 54766, -1000, 446, -1000, -1000,
+ 16164, -186, -201, 1000, -1000, -1000, -1000, -1000, -1000, 2007,
+ 1365, 1353, 1538, -1000, 54766, -1000, 54024, -314, 899, 6271,
+ -1000, 2164, 2159, 2656, -1000, -1000, -1000, -1000, -1000, -1000,
+ -544, 1356, 243, -1000, -1000, -1000, 284, -338, -1000, 22860,
+ -1000, 22860, -1000, 1406, -1000, -1000, 2494, 75, -1000, 2658,
+ -1000, 2643, 1016, 1016, -1000, 1136, -544, -1000, -1000, -1000,
+ -1000, 1538, 1538, -1000, -354, -1000, -1000, -1000, -1000, -1000,
+ 440, 1275, -1000, -1000, -1000, -1000, -1000, 6271, -1000, -1000,
+ -1000, 263, 263, -1000, -1000,
}
var yyPgo = [...]int{
- 0, 3177, 3171, 31, 7, 40, 39, 3170, 3168, 3166,
- 164, 3163, 3161, 3159, 3154, 3153, 3152, 2627, 2611, 2597,
- 3151, 3150, 3147, 3144, 3143, 3142, 3141, 3139, 3138, 27,
- 96, 100, 111, 225, 192, 3137, 171, 156, 198, 3129,
- 3127, 3118, 116, 181, 81, 83, 191, 3117, 3116, 68,
- 3112, 3110, 3109, 180, 179, 177, 1061, 3108, 178, 114,
- 47, 3102, 3100, 3099, 3092, 3090, 3088, 3087, 3085, 3082,
- 3078, 3076, 3072, 3071, 3070, 3069, 3066, 3060, 3059, 292,
- 3056, 3055, 16, 3052, 73, 3051, 3050, 3049, 3039, 3038,
- 9, 3037, 3033, 32, 41, 55, 3031, 3030, 44, 3029,
- 3028, 3027, 3026, 3025, 79, 3016, 14, 3015, 35, 3014,
- 3011, 125, 2994, 2988, 2987, 42, 2986, 2984, 2982, 11,
- 163, 2979, 2968, 137, 2957, 2952, 2951, 165, 200, 2949,
- 2202, 2946, 93, 2940, 2931, 2929, 160, 189, 2926, 120,
- 2925, 2924, 2923, 148, 2916, 3301, 2914, 2908, 62, 80,
- 168, 2905, 2898, 201, 72, 8, 2897, 22, 23, 2895,
- 2893, 67, 61, 2892, 98, 2890, 2889, 97, 99, 2886,
- 110, 90, 2884, 2880, 10, 5, 2877, 1, 4, 2,
- 115, 2874, 2871, 108, 2870, 2867, 2864, 94, 2863, 2860,
- 6960, 2855, 87, 129, 104, 64, 2854, 170, 172, 2852,
- 2851, 2850, 2847, 2838, 2834, 49, 2830, 2828, 2827, 134,
- 1270, 113, 2826, 145, 352, 51, 146, 2825, 193, 75,
- 196, 161, 2822, 2818, 133, 132, 2808, 2807, 53, 166,
- 197, 2805, 95, 128, 119, 183, 92, 130, 2804, 2798,
- 59, 58, 2795, 2794, 2793, 2792, 162, 2791, 2788, 63,
- 2787, 56, 2784, 187, 2783, 340, 77, 2782, 185, 169,
- 2779, 66, 2778, 2775, 85, 101, 57, 29, 2774, 154,
- 158, 126, 167, 2767, 2766, 52, 2763, 2762, 2761, 195,
- 293, 2760, 2759, 323, 175, 140, 144, 82, 2756, 321,
- 2755, 2752, 2749, 19, 4427, 6727, 182, 17, 159, 2748,
- 2747, 7891, 48, 43, 13, 2737, 211, 2736, 194, 2725,
- 2723, 2720, 210, 209, 102, 155, 54, 2714, 2710, 2708,
- 2705, 71, 2699, 2696, 2695, 2694, 2692, 2691, 38, 37,
- 36, 70, 228, 60, 25, 89, 157, 152, 65, 2690,
- 2689, 2687, 123, 78, 2683, 153, 149, 124, 105, 2679,
- 176, 141, 118, 2678, 91, 34, 2675, 2673, 2671, 2670,
- 84, 2668, 2667, 2666, 2665, 151, 142, 121, 74, 2664,
- 76, 117, 147, 143, 50, 2660, 45, 2659, 2658, 33,
- 190, 28, 2650, 21, 106, 112, 2649, 6390, 2648, 12,
- 331, 150, 2647, 2646, 15, 18, 6, 2643, 2642, 2641,
- 2637, 131, 2633, 2628, 2622, 2620, 26, 46, 24, 20,
- 109, 136, 69, 2612, 2610, 139, 2606, 2602, 2590, 0,
- 1040, 127, 2585, 202,
+ 0, 3243, 3242, 31, 6, 37, 36, 3240, 3239, 3238,
+ 174, 3237, 3235, 3224, 3223, 3222, 3221, 2754, 2745, 2728,
+ 3220, 3219, 3218, 3215, 3213, 3211, 3210, 3209, 3208, 38,
+ 116, 91, 104, 201, 213, 3205, 170, 161, 197, 3203,
+ 3202, 3201, 115, 187, 84, 92, 195, 3200, 3199, 71,
+ 3196, 3194, 3192, 190, 189, 188, 1092, 3190, 184, 114,
+ 48, 3189, 3187, 3184, 3182, 3179, 3178, 3176, 3174, 3173,
+ 3172, 3170, 3169, 3168, 3165, 3163, 3162, 3161, 3160, 285,
+ 3157, 3155, 12, 3154, 73, 3153, 3152, 3149, 3147, 3146,
+ 8, 3140, 3139, 26, 45, 63, 3136, 3134, 44, 3132,
+ 3131, 3129, 3125, 3124, 72, 3123, 27, 3121, 40, 3120,
+ 3117, 124, 3115, 3111, 3105, 42, 3104, 3100, 3098, 28,
+ 169, 3097, 3094, 140, 3093, 3092, 3087, 167, 205, 3085,
+ 2265, 3082, 99, 3080, 3079, 3077, 166, 193, 3076, 125,
+ 3074, 3073, 3072, 152, 3068, 3263, 3066, 3065, 59, 80,
+ 164, 3064, 3062, 199, 79, 54, 3061, 17, 19, 3060,
+ 3058, 67, 70, 3057, 108, 3056, 3054, 103, 77, 3052,
+ 105, 102, 3051, 3050, 5, 7, 3048, 1, 4, 2,
+ 83, 3047, 3044, 119, 3041, 3040, 3039, 101, 3037, 3035,
+ 4407, 3031, 93, 130, 106, 76, 3028, 171, 132, 3027,
+ 3026, 3022, 3021, 3016, 2985, 49, 2984, 2983, 2982, 136,
+ 22, 110, 2981, 146, 346, 51, 147, 2978, 196, 78,
+ 2977, 172, 2971, 2969, 134, 133, 2968, 2962, 58, 168,
+ 194, 2960, 96, 129, 120, 176, 95, 135, 2954, 2946,
+ 56, 62, 2944, 2943, 2940, 2939, 181, 2935, 2929, 61,
+ 2927, 53, 2925, 182, 2924, 306, 69, 2922, 180, 162,
+ 2921, 60, 2919, 2918, 68, 100, 55, 39, 2914, 157,
+ 160, 127, 165, 2913, 2912, 52, 2905, 2899, 2894, 200,
+ 301, 2891, 2890, 329, 183, 143, 149, 85, 2887, 323,
+ 2886, 2885, 2884, 16, 5094, 7550, 186, 25, 159, 2883,
+ 2882, 8334, 20, 43, 24, 2872, 210, 2869, 185, 2867,
+ 2866, 2865, 211, 207, 112, 158, 57, 2864, 2859, 2857,
+ 2856, 64, 2855, 2850, 2849, 2848, 2847, 2846, 35, 34,
+ 33, 75, 218, 65, 21, 98, 156, 151, 66, 2843,
+ 2841, 2839, 123, 90, 2835, 155, 153, 126, 163, 2829,
+ 175, 142, 117, 2823, 87, 32, 2822, 2821, 2819, 2818,
+ 89, 2813, 2810, 2806, 2805, 150, 144, 121, 81, 2803,
+ 82, 118, 148, 145, 50, 2799, 46, 2798, 2797, 30,
+ 191, 29, 2787, 13, 111, 109, 2780, 6691, 2779, 9,
+ 305, 154, 2776, 2775, 10, 11, 14, 2772, 2771, 2770,
+ 2769, 131, 2768, 2765, 2763, 2761, 23, 47, 18, 15,
+ 113, 137, 74, 2760, 2746, 141, 2732, 2727, 2722, 0,
+ 1034, 128, 2721, 202,
}
-//line sql.y:8759
+//line sql.y:8764
type yySymType struct {
union any
empty struct{}
@@ -8621,40 +8600,40 @@ var yyR1 = [...]int{
239, 239, 239, 239, 239, 239, 239, 239, 149, 149,
161, 161, 161, 161, 161, 161, 147, 147, 148, 146,
146, 146, 154, 154, 154, 154, 154, 154, 154, 154,
- 154, 154, 154, 154, 154, 154, 154, 154, 154, 409,
+ 154, 154, 154, 154, 154, 154, 154, 154, 409, 409,
409, 409, 409, 409, 409, 409, 409, 409, 409, 409,
409, 409, 409, 409, 409, 409, 409, 409, 409, 409,
409, 409, 409, 409, 409, 409, 409, 409, 409, 409,
409, 409, 409, 409, 409, 409, 409, 409, 409, 409,
- 409, 160, 160, 155, 155, 155, 157, 157, 156, 156,
- 156, 158, 158, 406, 406, 406, 406, 321, 321, 321,
- 321, 324, 324, 322, 322, 322, 322, 322, 322, 322,
- 322, 322, 323, 323, 323, 323, 323, 323, 323, 325,
- 325, 325, 325, 325, 326, 326, 326, 326, 326, 326,
+ 160, 160, 155, 155, 155, 157, 157, 156, 156, 156,
+ 158, 158, 406, 406, 406, 406, 321, 321, 321, 321,
+ 324, 324, 322, 322, 322, 322, 322, 322, 322, 322,
+ 322, 323, 323, 323, 323, 323, 323, 323, 325, 325,
+ 325, 325, 325, 326, 326, 326, 326, 326, 326, 326,
326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
- 326, 327, 327, 327, 327, 327, 327, 327, 327, 342,
- 342, 331, 331, 336, 336, 337, 337, 338, 338, 338,
- 339, 339, 339, 340, 340, 333, 333, 333, 333, 333,
- 333, 333, 333, 333, 335, 335, 334, 334, 334, 345,
- 370, 370, 369, 369, 367, 367, 367, 367, 367, 367,
- 367, 367, 354, 354, 364, 364, 364, 364, 364, 353,
- 353, 349, 349, 349, 350, 350, 351, 351, 348, 348,
- 352, 352, 366, 366, 365, 365, 346, 346, 347, 347,
- 372, 407, 407, 407, 407, 407, 408, 408, 373, 397,
- 399, 399, 399, 398, 398, 395, 396, 394, 394, 394,
- 394, 394, 84, 84, 84, 287, 287, 288, 288, 362,
- 362, 361, 361, 361, 363, 363, 360, 360, 360, 360,
+ 327, 327, 327, 327, 327, 327, 327, 327, 342, 342,
+ 331, 331, 336, 336, 337, 337, 338, 338, 338, 339,
+ 339, 339, 340, 340, 333, 333, 333, 333, 333, 333,
+ 333, 333, 333, 335, 335, 334, 334, 334, 345, 370,
+ 370, 369, 369, 367, 367, 367, 367, 367, 367, 367,
+ 367, 354, 354, 364, 364, 364, 364, 364, 353, 353,
+ 349, 349, 349, 350, 350, 351, 351, 348, 348, 352,
+ 352, 366, 366, 365, 365, 346, 346, 347, 347, 372,
+ 407, 407, 407, 407, 407, 408, 408, 373, 397, 399,
+ 399, 399, 398, 398, 395, 396, 394, 394, 394, 394,
+ 394, 84, 84, 84, 287, 287, 288, 288, 362, 362,
+ 361, 361, 361, 363, 363, 360, 360, 360, 360, 360,
360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
- 360, 360, 360, 360, 360, 360, 360, 282, 282, 282,
- 393, 393, 393, 393, 393, 393, 392, 392, 392, 359,
- 359, 359, 359, 391, 391, 59, 59, 219, 219, 410,
- 410, 412, 412, 412, 47, 47, 47, 47, 47, 47,
- 46, 46, 46, 42, 42, 42, 42, 42, 42, 42,
+ 360, 360, 360, 360, 360, 360, 282, 282, 282, 393,
+ 393, 393, 393, 393, 393, 392, 392, 392, 359, 359,
+ 359, 359, 391, 391, 59, 59, 219, 219, 410, 410,
+ 412, 412, 412, 47, 47, 47, 47, 47, 47, 46,
+ 46, 46, 42, 42, 42, 42, 42, 42, 42, 42,
42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
- 42, 42, 42, 42, 48, 48, 43, 43, 43, 43,
- 43, 43, 43, 43, 43, 43, 23, 23, 23, 23,
+ 42, 42, 42, 48, 48, 43, 43, 43, 43, 43,
+ 43, 43, 43, 43, 43, 23, 23, 23, 23, 23,
23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
23, 23, 23, 23, 23, 23, 23, 23, 23, 111,
@@ -8825,7 +8804,7 @@ var yyR1 = [...]int{
294, 294, 294, 294, 294, 294, 294, 294, 294, 294,
294, 294, 294, 294, 294, 294, 294, 294, 294, 294,
294, 294, 294, 294, 294, 294, 294, 294, 294, 294,
- 294, 294, 419, 420, 312, 313, 313, 313,
+ 294, 294, 294, 419, 420, 312, 313, 313, 313,
}
var yyR2 = [...]int{
@@ -8853,43 +8832,43 @@ var yyR2 = [...]int{
0, 2, 2, 3, 3, 2, 2, 2, 1, 1,
2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 2, 1, 1,
- 2, 1, 1, 2, 1, 2, 1, 3, 1, 1,
- 1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 2, 2, 2, 2, 2, 2, 2, 1,
- 2, 2, 2, 2, 3, 3, 3, 2, 2, 2,
- 2, 2, 2, 1, 1, 1, 1, 1, 5, 2,
- 5, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 3, 0, 3, 0, 5, 1, 3, 0, 3, 5,
- 0, 1, 1, 0, 1, 0, 3, 3, 2, 2,
- 2, 1, 2, 2, 0, 1, 0, 2, 2, 5,
- 0, 1, 1, 2, 1, 3, 2, 1, 1, 3,
- 3, 3, 0, 1, 4, 3, 3, 4, 2, 0,
- 2, 1, 1, 1, 1, 1, 0, 1, 1, 1,
- 0, 1, 1, 3, 3, 4, 3, 1, 3, 1,
- 7, 6, 7, 7, 8, 8, 0, 1, 5, 2,
- 1, 1, 1, 0, 1, 3, 3, 1, 1, 2,
- 2, 2, 0, 1, 1, 1, 2, 0, 1, 0,
- 1, 1, 3, 2, 1, 2, 3, 3, 3, 4,
- 4, 3, 3, 3, 3, 4, 4, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 4, 5, 0, 2, 2,
+ 1, 1, 1, 1, 1, 1, 2, 1, 1, 2,
+ 1, 1, 2, 1, 2, 1, 3, 1, 1, 1,
+ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 2, 2, 2, 2, 2, 2, 1, 2,
+ 2, 2, 2, 3, 3, 3, 2, 2, 2, 2,
+ 2, 2, 1, 1, 1, 1, 1, 5, 2, 5,
1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
- 1, 1, 1, 0, 1, 0, 1, 0, 2, 0,
- 2, 0, 2, 2, 0, 1, 5, 1, 3, 7,
- 1, 3, 3, 1, 2, 2, 2, 5, 5, 5,
- 6, 8, 5, 5, 4, 4, 4, 6, 5, 5,
- 5, 2, 2, 2, 2, 3, 3, 3, 4, 3,
- 3, 1, 3, 5, 1, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 2, 2, 3, 4, 4, 2,
- 11, 3, 6, 8, 6, 6, 6, 13, 8, 6,
- 6, 10, 7, 5, 5, 5, 5, 7, 5, 5,
- 5, 5, 5, 7, 7, 5, 5, 5, 5, 0,
+ 0, 3, 0, 5, 1, 3, 0, 3, 5, 0,
+ 1, 1, 0, 1, 0, 3, 3, 2, 2, 2,
+ 1, 2, 2, 0, 1, 0, 2, 2, 5, 0,
+ 1, 1, 2, 1, 3, 2, 1, 1, 3, 3,
+ 3, 0, 1, 4, 3, 3, 4, 2, 0, 2,
+ 1, 1, 1, 1, 1, 0, 1, 1, 1, 0,
+ 1, 1, 3, 3, 4, 3, 1, 3, 1, 7,
+ 6, 7, 7, 8, 8, 0, 1, 5, 2, 1,
+ 1, 1, 0, 1, 3, 3, 1, 1, 2, 2,
+ 2, 0, 1, 1, 1, 2, 0, 1, 0, 1,
+ 1, 3, 2, 1, 2, 3, 3, 3, 4, 4,
+ 3, 3, 3, 3, 4, 4, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 4, 5, 0, 2, 2, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 3, 1,
+ 1, 1, 0, 1, 0, 1, 0, 2, 0, 2,
+ 0, 2, 2, 0, 1, 5, 1, 3, 7, 1,
+ 3, 3, 1, 2, 2, 2, 5, 5, 5, 6,
+ 8, 5, 5, 4, 4, 4, 6, 5, 5, 5,
+ 2, 2, 2, 2, 3, 3, 3, 4, 3, 3,
+ 1, 3, 5, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 2, 3, 4, 4, 2, 11,
+ 3, 6, 8, 6, 6, 6, 13, 8, 6, 6,
+ 10, 7, 5, 5, 5, 5, 7, 5, 5, 5,
+ 5, 5, 7, 7, 5, 5, 5, 5, 6, 0,
6, 5, 6, 4, 5, 0, 8, 9, 0, 3,
0, 1, 0, 3, 8, 4, 1, 3, 3, 6,
7, 7, 8, 4, 0, 1, 0, 1, 3, 3,
@@ -9057,7 +9036,7 @@ var yyR2 = [...]int{
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 0, 0, 1, 1,
+ 1, 1, 1, 1, 1, 0, 0, 1, 1,
}
var yyChk = [...]int{
@@ -9067,157 +9046,156 @@ var yyChk = [...]int{
-27, -28, -74, -75, -76, -77, -78, -12, -13, -14,
-8, -32, -31, -30, 13, 14, -109, -35, 35, -40,
-50, 240, -51, -41, 241, -52, 243, 242, 280, 244,
- 396, 273, 83, 329, 330, 332, 333, 334, 335, -110,
- 703, 278, 279, 246, 39, 51, 36, 37, 40, 250,
- 286, 287, 249, 145, -33, -36, 12, -419, 15, 486,
- 275, 274, 31, -34, 596, 95, -80, -418, 751, -253,
+ 397, 273, 83, 330, 331, 333, 334, 335, 336, -110,
+ 704, 278, 279, 246, 39, 51, 36, 37, 40, 250,
+ 286, 287, 249, 145, -33, -36, 12, -419, 15, 487,
+ 275, 274, 31, -34, 597, 95, -80, -418, 752, -253,
-237, 26, 36, 32, -236, -232, -128, -237, 24, 22,
11, -79, -79, -79, 16, 17, -79, -356, -358, 95,
173, 95, -79, -57, -56, -54, -53, -55, -58, 34,
-47, -48, -380, -46, -43, 245, 242, 290, 135, 136,
280, 281, 282, 244, 264, 279, 283, 278, 299, -42,
- 90, 36, 596, 599, -363, 241, 247, 248, 243, 487,
- 138, 137, 84, -360, 391, 630, 721, -58, 723, 110,
- 113, 722, 50, 254, 724, 725, 726, 637, 727, 263,
- 728, 729, 730, 731, 737, 678, 738, 739, 740, 139,
- 11, -79, -305, -301, 100, -294, 593, 266, 628, 440,
- 629, 315, 90, 47, 42, 532, 603, 387, 391, 630,
- 517, 721, 397, 329, 347, 341, 522, 523, 524, 370,
- 362, 594, 631, 604, 318, 267, 303, 715, 360, 149,
- 723, 322, 632, 281, 398, 399, 633, 400, 110, 332,
- 437, 736, 321, 634, 734, 113, 722, 337, 88, 516,
- 57, 718, 50, 276, 445, 446, 358, 249, 354, 724,
- 304, 635, 606, 297, 138, 135, 743, 39, 350, 56,
- 33, 733, 137, 55, 725, 164, 636, 726, 637, 402,
- 377, 709, 54, 403, 282, 638, 93, 287, 598, 326,
- 717, 404, 537, 351, 405, 314, 732, 246, 639, 325,
- 698, 690, 691, 406, 407, 710, 382, 378, 383, 539,
- 640, 429, 521, 408, 694, 695, 750, 58, 641, 642,
- 711, 136, 643, 87, 727, 89, 345, 346, 644, 312,
- 265, 542, 543, 431, 374, 499, 127, 506, 507, 120,
- 121, 502, 122, 508, 123, 128, 509, 510, 511, 500,
- 124, 117, 501, 512, 513, 375, 376, 125, 514, 119,
- 118, 503, 505, 126, 515, 263, 38, 409, 595, 316,
- 64, 320, 291, 432, 52, 380, 747, 51, 705, 544,
- 645, 708, 373, 369, 496, 59, 646, 647, 648, 649,
- 518, 728, 372, 344, 368, 742, 4, 309, 491, 519,
- 729, 68, 248, 385, 384, 386, 298, 428, 365, 650,
- 651, 652, 270, 91, 653, 355, 25, 654, 655, 410,
- 305, 656, 62, 657, 658, 435, 279, 659, 60, 730,
- 45, 660, 284, 744, 731, 661, 662, 663, 704, 664,
- 286, 665, 412, 666, 692, 693, 411, 379, 381, 545,
- 293, 413, 396, 251, 597, 667, 327, 349, 283, 735,
- 668, 271, 533, 534, 535, 536, 716, 541, 540, 285,
- 290, 278, 436, 272, 669, 670, 671, 672, 673, 319,
- 689, 674, 675, 333, 601, 737, 497, 49, 676, 677,
- 678, 679, 680, 313, 308, 430, 439, 67, 92, 393,
- 681, 682, 714, 343, 338, 43, 306, 99, 477, 479,
- 480, 481, 482, 483, 478, 485, 683, 330, 61, 738,
- 739, 740, 300, 741, 525, 526, 527, 528, 13, 579,
- 562, 590, 563, 580, 564, 573, 565, 581, 589, 591,
- 546, 554, 547, 555, 585, 568, 582, 574, 567, 566,
- 588, 571, 575, 548, 556, 586, 572, 549, 557, 550,
- 558, 551, 559, 584, 583, 576, 587, 552, 560, 578,
- 553, 561, 577, 569, 570, 448, 748, 749, 520, 415,
- 139, 310, 311, 53, 366, 292, 684, 323, 685, 356,
- 357, 493, 494, 371, 342, 367, 146, 701, 331, 340,
- 699, 294, 416, 498, 280, 686, 438, 307, 388, 131,
- 339, 394, 324, 602, 538, 299, 417, 713, 600, 529,
- 530, 364, 361, 301, 531, 687, 389, 703, 418, 255,
- 295, 296, 688, 700, 419, 420, 317, 421, 422, 423,
- 424, 425, 427, 328, 426, 702, 696, 697, 302, 476,
- 599, 336, 359, 395, 458, 459, 460, 461, 462, 463,
+ 90, 36, 597, 600, -363, 241, 247, 248, 243, 488,
+ 138, 137, 84, -360, 392, 631, 722, -58, 724, 110,
+ 113, 723, 50, 254, 725, 726, 727, 638, 728, 263,
+ 729, 730, 731, 732, 738, 679, 739, 740, 741, 139,
+ 11, -79, -305, -301, 100, -294, 594, 266, 629, 441,
+ 630, 315, 90, 47, 42, 533, 604, 388, 392, 631,
+ 518, 722, 398, 330, 348, 342, 523, 524, 525, 371,
+ 363, 595, 632, 605, 318, 267, 303, 716, 361, 149,
+ 724, 322, 633, 281, 399, 400, 634, 401, 110, 333,
+ 438, 737, 321, 635, 735, 113, 723, 338, 88, 517,
+ 57, 719, 326, 50, 276, 446, 447, 359, 249, 355,
+ 725, 304, 636, 607, 297, 138, 135, 744, 39, 351,
+ 56, 33, 734, 137, 55, 726, 164, 637, 727, 638,
+ 403, 378, 710, 54, 404, 282, 639, 93, 287, 599,
+ 327, 718, 405, 538, 352, 406, 314, 733, 246, 640,
+ 325, 699, 691, 692, 407, 408, 711, 383, 379, 384,
+ 540, 641, 430, 522, 409, 695, 696, 751, 58, 642,
+ 643, 712, 136, 644, 87, 728, 89, 346, 347, 645,
+ 312, 265, 543, 544, 432, 375, 500, 127, 507, 508,
+ 120, 121, 503, 122, 509, 123, 128, 510, 511, 512,
+ 501, 124, 117, 502, 513, 514, 376, 377, 125, 515,
+ 119, 118, 504, 506, 126, 516, 263, 38, 410, 596,
+ 316, 64, 320, 291, 433, 52, 381, 748, 51, 706,
+ 545, 646, 709, 374, 370, 497, 59, 647, 648, 649,
+ 650, 519, 729, 373, 345, 369, 743, 4, 309, 492,
+ 520, 730, 68, 248, 386, 385, 387, 298, 429, 366,
+ 651, 652, 653, 270, 91, 654, 356, 25, 655, 656,
+ 411, 305, 657, 62, 658, 659, 436, 279, 660, 60,
+ 731, 45, 661, 284, 745, 732, 662, 663, 664, 705,
+ 665, 286, 666, 413, 667, 693, 694, 412, 380, 382,
+ 546, 293, 414, 397, 251, 598, 668, 328, 350, 283,
+ 736, 669, 271, 534, 535, 536, 537, 717, 542, 541,
+ 285, 290, 278, 437, 272, 670, 671, 672, 673, 674,
+ 319, 690, 675, 676, 334, 602, 738, 498, 49, 677,
+ 678, 679, 680, 681, 313, 308, 431, 440, 67, 92,
+ 394, 682, 683, 715, 344, 339, 43, 306, 99, 478,
+ 480, 481, 482, 483, 484, 479, 486, 684, 331, 61,
+ 739, 740, 741, 300, 742, 526, 527, 528, 529, 13,
+ 580, 563, 591, 564, 581, 565, 574, 566, 582, 590,
+ 592, 547, 555, 548, 556, 586, 569, 583, 575, 568,
+ 567, 589, 572, 576, 549, 557, 587, 573, 550, 558,
+ 551, 559, 552, 560, 585, 584, 577, 588, 553, 561,
+ 579, 554, 562, 578, 570, 571, 449, 749, 750, 521,
+ 416, 139, 310, 311, 53, 367, 292, 685, 323, 686,
+ 357, 358, 494, 495, 372, 343, 368, 146, 702, 332,
+ 341, 700, 294, 417, 499, 280, 687, 439, 307, 389,
+ 131, 340, 395, 324, 603, 539, 299, 418, 714, 601,
+ 530, 531, 365, 362, 301, 532, 688, 390, 704, 419,
+ 255, 295, 296, 689, 701, 420, 421, 317, 422, 423,
+ 424, 425, 426, 428, 329, 427, 703, 697, 698, 302,
+ 477, 600, 337, 360, 396, 459, 460, 461, 462, 463,
464, 465, 466, 467, 468, 469, 470, 471, 472, 473,
- 474, 475, 495, 253, -79, 253, -190, -301, -130, 705,
- 707, 192, -272, 399, -290, 401, 414, 409, 419, 407,
- -281, 410, 412, 293, -403, 429, 253, 416, 240, 402,
- 411, 420, 421, 317, 427, 422, 328, 426, 302, 423,
- 424, 425, -387, 192, 726, 741, 331, 339, 149, 363,
- 406, 404, 430, 705, 100, -307, 100, 101, 102, -294,
- 331, -310, 336, -295, -387, -294, 334, -79, -79, -312,
- -312, -130, -210, -145, 157, -159, -261, -162, 101, -150,
- -153, -204, -205, -206, -207, -160, -220, -259, 181, 182,
- 189, 158, -216, -163, 29, 592, 488, 487, 192, 34,
- 235, 77, 78, 490, 491, 160, 63, 15, 453, 454,
- -161, 443, 444, 455, 449, 450, 516, 518, 519, 520,
- 517, 522, 523, 524, 525, 526, 527, 528, 529, 530,
- 531, 521, 532, 493, 494, 129, 495, 117, 119, 118,
- 127, 128, 496, 497, 498, 360, 544, 545, 539, 542,
- 543, 541, 540, 375, 376, 499, 562, 563, 567, 566,
- 564, 565, 568, 571, 572, 573, 574, 575, 576, 578,
- 577, 569, 570, 547, 546, 548, 549, 550, 551, 552,
- 553, 555, 554, 556, 557, 558, 559, 560, 561, 579,
- 580, 581, 582, 583, 585, 584, 589, 588, 586, 587,
- 591, 590, 500, 501, 120, 121, 122, 123, 124, 125,
- 126, 502, 505, 503, 504, 506, 507, 508, 513, 514,
- 509, 510, 511, 512, 515, 386, 384, 385, 381, 380,
- 379, -89, -102, 619, 618, -103, 440, 445, 446, 448,
- -151, -152, -165, -166, -295, -301, 258, 442, 252, 187,
- 486, -154, -148, -218, 116, 102, -31, -214, 441, 451,
- 452, 456, 447, 457, 605, 607, 622, 623, 625, 610,
- 615, 614, 617, 533, 534, 535, 536, 537, 538, 690,
- 691, 692, 693, 694, 695, 696, 697, -387, -294, 100,
- -157, -155, -199, 103, 108, 111, 112, 114, -409, 276,
- 356, 357, 130, -419, 719, -156, 105, 106, 107, 132,
- 133, 193, 194, 195, 196, 197, 198, 199, 200, 201,
- 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
- 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,
- 222, 223, 224, 225, 226, 227, 228, 229, 230, 231,
- 232, 233, 234, 98, 104, 50, 415, 415, -190, -79,
- -79, -79, -79, -416, 722, 597, -230, -128, -232, -33,
- -31, -419, 12, -79, -31, -32, -30, -36, -38, 624,
- -37, -301, 109, -237, -253, 16, 67, 176, 48, 56,
- -235, -236, -34, -31, -145, 23, 41, 27, -132, 183,
- -145, -301, -132, -279, 257, -79, -79, -268, -315, 331,
- -270, 430, 705, 429, -260, -273, 100, -259, -272, 428,
- 101, -357, 173, -343, -347, -295, 268, -373, 264, -190,
- -366, -365, -295, -419, -129, -289, 254, 262, 261, 150,
- -390, 153, 310, 442, 252, -53, -54, -55, -272, 191,
- 725, -111, 285, 289, 96, 96, -347, -346, -345, -391,
- 289, 268, -372, -364, 260, 269, -353, 261, 262, -348,
- 254, 151, -391, -348, 259, 269, 264, 268, 289, 289,
- 139, 289, 139, 289, 289, 289, 289, 289, 289, 289,
- 289, 289, 284, -354, 165, -354, 600, 600, -360, -391,
- 264, 254, -391, -391, 260, -291, -348, 256, 28, 256,
- 38, 38, -354, -354, -354, -272, 191, -354, -354, -354,
- -354, 297, 297, -354, -354, -354, -354, -354, -354, -354,
+ 474, 475, 476, 496, 253, -79, 253, -190, -301, -130,
+ 706, 708, 192, -272, 400, -290, 402, 415, 410, 420,
+ 408, -281, 411, 413, 293, -403, 430, 253, 417, 240,
+ 403, 412, 421, 422, 317, 428, 423, 329, 427, 302,
+ 424, 425, 426, -387, 192, 727, 742, 332, 340, 149,
+ 364, 407, 405, 431, 706, 100, -307, 100, 101, 102,
+ -294, 332, -310, 337, -295, -387, -294, 335, -79, -79,
+ -312, -312, -130, -210, -145, 157, -159, -261, -162, 101,
+ -150, -153, -204, -205, -206, -207, -160, -220, -259, 181,
+ 182, 189, 158, -216, -163, 29, 593, 489, 488, 192,
+ 34, 235, 77, 78, 491, 492, 160, 63, 15, 454,
+ 455, -161, 444, 445, 456, 450, 451, 517, 519, 520,
+ 521, 518, 523, 524, 525, 526, 527, 528, 529, 530,
+ 531, 532, 522, 533, 494, 495, 129, 496, 117, 119,
+ 118, 127, 128, 497, 498, 499, 361, 545, 546, 540,
+ 543, 544, 542, 541, 376, 377, 500, 563, 564, 568,
+ 567, 565, 566, 569, 572, 573, 574, 575, 576, 577,
+ 579, 578, 570, 571, 548, 547, 549, 550, 551, 552,
+ 553, 554, 556, 555, 557, 558, 559, 560, 561, 562,
+ 580, 581, 582, 583, 584, 586, 585, 590, 589, 587,
+ 588, 592, 591, 501, 502, 120, 121, 122, 123, 124,
+ 125, 126, 503, 506, 504, 505, 507, 508, 509, 514,
+ 515, 510, 511, 512, 513, 516, 387, 385, 386, 382,
+ 381, 380, -89, -102, 620, 619, -103, 441, 446, 447,
+ 449, -151, -152, -165, -166, -295, -301, 258, 443, 252,
+ 187, 487, -154, -148, -218, 116, 102, -31, -214, 442,
+ 452, 453, 457, 448, 458, 606, 608, 623, 624, 626,
+ 611, 616, 615, 618, 534, 535, 536, 537, 538, 539,
+ 691, 692, 693, 694, 695, 696, 697, 698, -387, -294,
+ 100, -157, -155, -199, 103, 108, 111, 112, 114, -409,
+ 276, 357, 358, 130, -419, 720, -156, 105, 106, 107,
+ 132, 133, 193, 194, 195, 196, 197, 198, 199, 200,
+ 201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
+ 211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
+ 221, 222, 223, 224, 225, 226, 227, 228, 229, 230,
+ 231, 232, 233, 234, 98, 104, 50, 416, 416, -190,
+ -79, -79, -79, -79, -416, 723, 598, -230, -128, -232,
+ -33, -31, -419, 12, -79, -31, -32, -30, -36, -38,
+ 625, -37, -301, 109, -237, -253, 16, 67, 176, 48,
+ 56, -235, -236, -34, -31, -145, 23, 41, 27, -132,
+ 183, -145, -301, -132, -279, 257, -79, -79, -268, -315,
+ 332, -270, 431, 706, 430, -260, -273, 100, -259, -272,
+ 429, 101, -357, 173, -343, -347, -295, 268, -373, 264,
+ -190, -366, -365, -295, -419, -129, -289, 254, 262, 261,
+ 150, -390, 153, 310, 443, 252, -53, -54, -55, -272,
+ 191, 726, -111, 285, 289, 96, 96, -347, -346, -345,
+ -391, 289, 268, -372, -364, 260, 269, -353, 261, 262,
+ -348, 254, 151, -391, -348, 259, 269, 264, 268, 289,
+ 289, 139, 289, 139, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 284, -354, 165, -354, 601, 601, -360,
+ -391, 264, 254, -391, -391, 260, -291, -348, 256, 28,
+ 256, 38, 38, -354, -354, -354, -272, 191, -354, -354,
+ -354, -354, 297, 297, -354, -354, -354, -354, -354, -354,
-354, -354, -354, -354, -354, -354, -354, -354, -354, -354,
- 253, -390, -137, 426, 317, 90, -56, 299, -39, -190,
- -289, 254, 255, -390, 286, -190, 236, 253, 708, -283,
- 173, 19, -283, -280, 415, 413, 400, 405, -283, -283,
- -283, -283, 300, 398, -349, 254, 38, 265, 415, 300,
- 398, 300, 301, 300, 301, 408, 418, 300, -306, 18,
- 176, 442, 403, 407, 293, 253, 294, 255, 417, 301,
- -306, 98, -284, 173, 300, 415, 409, 296, -283, -283,
- -313, -419, -297, -295, -293, 245, 41, 156, 28, 30,
- 159, 192, 142, 23, 160, 40, 247, 363, 264, 191,
- 260, 487, 240, 81, 605, 443, 450, 441, 449, 453,
- 489, 490, 442, 401, 34, 17, 607, 31, 274, 27,
- 44, 185, 242, 163, 608, 277, 29, 275, 129, 133,
- 610, 26, 84, 269, 18, 262, 46, 20, 611, 612,
- 21, 74, 258, 257, 176, 254, 79, 15, 235, 32,
- 172, 75, 613, 151, 145, 614, 615, 616, 617, 143,
- 77, 173, 24, 745, 451, 452, 36, 706, 592, 288,
- 187, 82, 65, 707, 157, 447, 618, 619, 130, 620,
- 134, 85, 712, 153, 22, 80, 48, 621, 289, 622,
- 259, 746, 623, 433, 624, 174, 243, 486, 78, 175,
- 719, 625, 720, 252, 414, 12, 492, 35, 273, 261,
- 73, 72, 141, 76, 457, 626, 253, 162, 256, 144,
- 132, 11, 150, 37, 16, 83, 86, 454, 455, 456,
- 63, 140, 596, 161, 19, 627, 434, 155, -387, 708,
- -313, -313, 300, 340, 35, 101, -413, -414, -415, 596,
- 433, 256, -295, -190, -85, 698, 244, -86, 704, 41,
- 251, 146, 38, -135, 415, -123, 192, 726, 709, 710,
- 711, 708, 412, 716, 714, 712, 300, 713, 96, 153,
- 155, 156, 4, -145, 172, -200, -201, 171, 165, 166,
- 167, 168, 169, 170, 177, 176, 157, 159, 173, -246,
- 154, 178, 179, 180, 181, 182, 183, 184, 186, 185,
- 187, 188, 174, 175, 191, 238, 239, -153, -153, -153,
- -153, -216, -222, -221, -419, -218, -387, -294, -301, -419,
- -419, -153, -278, -419, -150, -419, -419, -419, -419, -419,
- -225, -145, -419, -419, -423, -419, -423, -423, -423, -332,
- -419, -332, -332, -419, -419, -419, -419, -419, -419, -419,
- -419, -419, -419, -419, -419, -419, -419, -419, -419, -419,
+ -354, 253, -390, -137, 427, 317, 90, -56, 299, -39,
+ -190, -289, 254, 255, -390, 286, -190, 236, 253, 709,
+ -283, 173, 19, -283, -280, 416, 414, 401, 406, -283,
+ -283, -283, -283, 300, 399, -349, 254, 38, 265, 416,
+ 300, 399, 300, 301, 300, 301, 409, 419, 300, -306,
+ 18, 176, 443, 404, 408, 293, 253, 294, 255, 418,
+ 301, -306, 98, -284, 173, 300, 416, 410, 296, -283,
+ -283, -313, -419, -297, -295, -293, 245, 41, 156, 28,
+ 30, 159, 192, 142, 23, 160, 40, 247, 364, 264,
+ 191, 260, 488, 240, 81, 606, 444, 451, 442, 450,
+ 454, 490, 491, 443, 402, 34, 17, 608, 31, 274,
+ 27, 44, 185, 242, 163, 609, 277, 29, 275, 129,
+ 133, 611, 26, 84, 269, 18, 262, 46, 20, 612,
+ 613, 21, 74, 258, 257, 176, 254, 79, 15, 235,
+ 32, 172, 75, 614, 151, 145, 615, 616, 617, 618,
+ 143, 77, 173, 24, 746, 452, 453, 36, 707, 593,
+ 288, 187, 82, 65, 708, 157, 448, 619, 620, 130,
+ 621, 134, 85, 713, 153, 22, 80, 48, 622, 289,
+ 623, 259, 747, 624, 434, 625, 174, 243, 487, 78,
+ 175, 720, 626, 721, 252, 415, 12, 493, 35, 273,
+ 261, 73, 72, 141, 76, 458, 627, 253, 162, 256,
+ 144, 132, 11, 150, 37, 16, 83, 86, 455, 456,
+ 457, 63, 140, 597, 161, 19, 628, 435, 155, -387,
+ 709, -313, -313, 300, 341, 35, 101, -413, -414, -415,
+ 597, 434, 256, -295, -190, -85, 699, 244, -86, 705,
+ 41, 251, 146, 38, -135, 416, -123, 192, 727, 710,
+ 711, 712, 709, 413, 717, 715, 713, 300, 714, 96,
+ 153, 155, 156, 4, -145, 172, -200, -201, 171, 165,
+ 166, 167, 168, 169, 170, 177, 176, 157, 159, 173,
+ -246, 154, 178, 179, 180, 181, 182, 183, 184, 186,
+ 185, 187, 188, 174, 175, 191, 238, 239, -153, -153,
+ -153, -153, -216, -222, -221, -419, -218, -387, -294, -301,
+ -419, -419, -153, -278, -419, -150, -419, -419, -419, -419,
+ -419, -225, -145, -419, -419, -423, -419, -423, -423, -423,
+ -332, -419, -332, -332, -419, -419, -419, -419, -419, -419,
-419, -419, -419, -419, -419, -419, -419, -419, -419, -419,
-419, -419, -419, -419, -419, -419, -419, -419, -419, -419,
-419, -419, -419, -419, -419, -419, -419, -419, -419, -419,
@@ -9228,27 +9206,28 @@ var yyChk = [...]int{
-419, -419, -419, -419, -419, -419, -419, -419, -419, -419,
-419, -419, -419, -419, -419, -419, -419, -419, -419, -419,
-419, -419, -419, -419, -419, -419, -419, -419, -419, -419,
- -419, -419, -419, -419, -419, -419, -419, -419, 236, -419,
- -419, -419, -419, -419, -332, -332, -332, -332, -332, -332,
-419, -419, -419, -419, -419, -419, -419, -419, -419, -419,
- -419, -419, -419, -419, 98, 112, 108, 111, 103, -220,
+ -419, -419, -419, -419, -419, -419, -419, -419, -419, 236,
+ -419, -419, -419, -419, -419, -332, -332, -332, -332, -332,
+ -332, -419, -419, -419, -419, -419, -419, -419, -419, -419,
+ -419, -419, -419, -419, -419, 98, 112, 108, 111, 103,
114, 98, 98, 98, 98, -31, -32, -210, -419, -312,
-400, -401, -193, -190, -419, 317, -295, -295, 286, 105,
-235, -34, -31, -230, -236, -232, -31, -79, -121, -134,
69, 70, -133, -136, 27, 44, 74, 76, 99, 72,
73, 71, 41, -420, 97, -420, -253, -420, 96, -38,
- -256, 95, 652, 682, 652, 682, 67, 49, 98, 98,
+ -256, 95, 653, 683, 653, 683, 67, 49, 98, 98,
96, 25, -231, -233, -145, 18, -299, 4, -298, 28,
-295, 98, 236, 18, -191, 32, -190, -279, -279, 96,
- 100, 331, -269, -271, 431, 433, 165, -300, -295, 98,
+ 100, 332, -269, -271, 432, 434, 165, -300, -295, 98,
34, 97, 96, -190, -321, -324, -326, -325, -327, -322,
- -323, 360, 361, 192, 364, 366, 367, 368, 369, 370,
- 371, 372, 373, 374, 377, 389, 35, 276, 356, 357,
- 358, 359, 378, 379, 380, 381, 383, 384, 385, 386,
- 341, 362, 594, 342, 343, 344, 345, 346, 347, 349,
- 350, 353, 351, 352, 354, 355, -296, -295, 95, 97,
+ -323, 361, 362, 192, 365, 367, 368, 369, 370, 371,
+ 372, 373, 374, 375, 378, 390, 35, 276, 357, 358,
+ 359, 360, 379, 380, 381, 382, 384, 385, 386, 387,
+ 342, 363, 595, 343, 344, 345, 346, 347, 348, 350,
+ 351, 354, 352, 353, 355, 356, -296, -295, 95, 97,
96, -331, 95, -145, -137, 253, -295, 254, 254, 254,
- -286, 258, 486, -354, -354, -354, 284, 23, -46, -43,
+ -286, 258, 487, -354, -354, -354, 284, 23, -46, -43,
-380, 22, -42, -43, 245, 135, 136, 242, 95, -343,
95, -352, -296, -295, 95, 151, 259, 150, -351, -348,
-351, -352, -295, -218, -295, 151, 151, -295, -295, -265,
@@ -9258,32 +9237,32 @@ var yyChk = [...]int{
-295, -218, -343, -218, -190, -295, -272, 105, 105, 105,
-354, -354, 105, 98, 98, 98, -354, -354, 105, 98,
-303, -301, 98, 98, -392, 270, 314, 316, 105, 105,
- 105, 105, 34, 98, -393, 34, 733, 732, 734, 735,
- 736, 98, 105, 34, 105, 34, 105, -295, 95, -190,
+ 105, 105, 34, 98, -393, 34, 734, 733, 735, 736,
+ 737, 98, 105, 34, 105, 34, 105, -295, 95, -190,
-143, 304, 240, 242, 245, 85, 98, 322, 320, 321,
318, 323, 324, 325, 165, 50, 96, 256, 253, -295,
- -285, 258, -285, -295, -302, -301, -293, -190, 256, 397,
+ -285, 258, -285, -295, -302, -301, -293, -190, 256, 398,
98, -145, -350, 18, 176, -306, -306, -283, -190, -350,
-306, -283, -190, -283, -283, -283, -283, -306, -306, -306,
-283, -301, -301, -190, -190, -190, -190, -190, -190, -190,
- -313, -284, -283, 708, 98, -277, 18, 85, -313, -313,
- -292, 26, 26, 96, 337, 434, 435, -311, 334, -81,
+ -313, -284, -283, 709, 98, -277, 18, 85, -313, -313,
+ -292, 26, 26, 96, 338, 435, 436, -311, 335, -81,
-295, 98, -10, -29, -18, -17, -19, 165, -10, 96,
- 596, -183, -190, 708, 708, 708, 708, 708, 708, -145,
- -145, -145, -145, 620, -208, -411, 157, 132, 133, 130,
+ 597, -183, -190, 709, 709, 709, 709, 709, 709, -145,
+ -145, -145, -145, 621, -208, -411, 157, 132, 133, 130,
131, -162, 42, 43, 41, -145, -209, -214, -216, 115,
176, 159, 173, -246, -150, -153, -150, -150, -150, -150,
-150, -150, 235, -150, 235, -150, -150, -150, -150, -150,
-150, -314, -295, 98, 192, -158, -157, 114, -409, -158,
- 593, 96, -221, 236, -145, -145, -387, -119, 459, 460,
- 461, 462, 464, 465, 466, 469, 470, 474, 475, 458,
- 476, 463, 468, 471, 472, 473, 467, 359, -145, -211,
+ 594, 96, -221, 236, -145, -145, -387, -119, 460, 461,
+ 462, 463, 465, 466, 467, 470, 471, 475, 476, 459,
+ 477, 464, 469, 472, 473, 474, 468, 360, -145, -211,
-210, -211, -145, -145, -223, -224, 161, -218, -145, -420,
-420, 105, 183, -127, 27, 44, -127, -127, -127, -127,
-145, -145, -145, -145, -145, -145, -145, -145, -145, -145,
- -127, -145, -120, 458, 476, 463, 468, 471, 472, 473,
- 467, 359, 477, 478, 479, 480, 481, 482, 483, 484,
- 485, -120, -119, -145, -145, -145, -145, -145, -145, -145,
+ -127, -145, -120, 459, 477, 464, 469, 472, 473, 474,
+ 468, 360, 478, 479, 480, 481, 482, 483, 484, 485,
+ 486, -120, -119, -145, -145, -145, -145, -145, -145, -145,
-145, -87, -145, 142, 143, 144, -210, -145, -150, -145,
-145, -145, -420, -145, -145, -145, -211, -145, -145, -145,
-145, -145, -145, -145, -145, -145, -145, -145, -145, -145,
@@ -9297,195 +9276,195 @@ var yyChk = [...]int{
-261, 114, 101, -145, -145, -145, -145, -145, -145, -211,
-297, -302, -293, -294, -210, -211, -211, -210, -210, -145,
-145, -145, -145, -145, -145, -145, -145, -420, -145, -145,
- -145, -145, -145, -253, -420, -210, 96, -402, 433, 434,
- 706, -304, 289, -303, 28, -211, 98, 18, -263, 86,
+ -145, -145, -145, -253, -420, -210, 96, -402, 434, 435,
+ 707, -304, 289, -303, 28, -211, 98, 18, -263, 86,
-295, -235, -235, 69, 70, 65, -131, -132, -136, -420,
- -37, 28, -255, -295, 645, 645, 68, 98, -333, -272,
- 387, 388, 192, -145, -145, 96, -234, 30, 31, -190,
+ -37, 28, -255, -295, 646, 646, 68, 98, -333, -272,
+ 388, 389, 192, -145, -145, 96, -234, 30, 31, -190,
-298, 183, -302, -190, -264, 289, -190, -168, -170, -171,
- -172, -193, -217, -419, -173, -31, 616, 613, 18, -183,
- -184, -192, -301, -270, -315, -269, 96, 432, 434, 435,
+ -172, -193, -217, -419, -173, -31, 617, 614, 18, -183,
+ -184, -192, -301, -270, -315, -269, 96, 433, 435, 436,
85, 134, -145, -334, 191, -362, -361, -360, -343, -345,
- -346, -347, 97, -334, -339, 394, 393, -331, -331, -331,
+ -346, -347, 97, -334, -339, 395, 394, -331, -331, -331,
-331, -331, -333, -333, -333, -333, 95, -331, 95, -331,
-331, -331, -331, -336, 95, -336, -336, -337, -336, 95,
-337, -338, 95, -338, -373, -145, -370, -369, -367, -368,
- 263, 110, 688, 644, 596, 637, 678, 86, -365, -234,
+ 263, 110, 689, 645, 597, 638, 679, 86, -365, -234,
105, -420, -143, -286, -371, -368, -295, -295, -295, -301,
157, 100, 98, 100, 98, 100, 98, -112, -60, -1,
- 745, 746, 747, 96, 23, -344, -343, -59, 314, -376,
+ 746, 747, 748, 96, 23, -344, -343, -59, 314, -376,
-377, 289, -372, -366, -352, 151, -351, -352, -352, -295,
- 96, 32, 139, 139, 139, 139, 596, 242, 35, -287,
- 636, 157, 688, 644, -343, -59, 256, 256, -314, -314,
- -314, 98, 98, -282, 741, -183, -139, 306, 165, 295,
+ 96, 32, 139, 139, 139, 139, 597, 242, 35, -287,
+ 637, 157, 689, 645, -343, -59, 256, 256, -314, -314,
+ -314, 98, 98, -282, 742, -183, -139, 306, 165, 295,
295, 253, 308, 253, 308, -190, 319, 322, 320, 321,
- 318, 323, 324, 325, 41, 41, 41, 41, 41, 41,
- 41, 307, 309, 311, 297, -190, -190, -285, 85, -185,
- -190, 29, -301, 98, 98, -190, -283, -283, -190, -283,
- -283, -190, 98, -301, -415, 338, -295, 374, 699, 701,
- -123, 433, 96, 596, 26, -124, 26, -419, -411, 132,
- 133, -216, -216, -216, -209, -150, -153, -150, 156, 277,
- -150, -150, -419, -218, -420, -297, 28, 96, 86, -420,
- 181, 96, -420, -420, 96, 18, 96, -226, -224, 163,
- -145, -420, 96, -420, -420, -210, -145, -145, -145, -145,
- -420, -420, -420, -420, -420, -420, -420, -420, -420, -420,
- -210, -420, 96, 96, 18, -318, 28, -420, -420, -420,
- -420, 96, -420, -420, -225, -420, 18, -420, 86, 96,
- 176, 96, -420, -420, -420, 96, 96, -420, -420, 96,
- -420, 96, -420, -420, -420, -420, -420, -420, 96, -420,
- 96, -420, -420, -420, 96, -420, 96, -420, -420, 96,
- -420, 96, -420, 96, -420, 96, -420, 96, -420, 96,
- -420, 96, -420, 96, -420, 96, -420, 96, -420, 96,
- -420, 96, -420, 96, -420, 96, -420, 96, -420, 96,
- -420, 96, -420, 96, -420, -420, -420, 96, -420, 96,
- -420, 96, -420, -420, 96, -420, 96, -420, 96, -420,
- 96, 96, -420, 96, 96, 96, -420, 96, 96, 96,
- 96, -420, -420, -420, -420, 96, 96, 96, 96, 96,
- 96, 96, 96, 96, 96, -420, -420, -420, -420, -420,
- -420, 96, -94, 621, -420, -420, 96, -420, 96, 96,
- 96, 96, 96, -420, -419, 236, -420, -420, -420, -420,
- -420, 96, 96, 96, 96, 96, 96, -420, -420, -420,
- 96, 96, -420, 96, -420, 96, -420, -401, 705, 434,
- -197, -196, -194, 83, 257, 84, -419, -303, -420, -158,
- -261, -262, -261, -203, -295, 105, 114, -237, -167, 96,
- -169, 18, -216, 97, 96, -333, -241, -247, -280, -295,
- 98, 192, -335, 192, -335, 387, 388, -233, 236, -198,
- 19, -202, 35, 63, -29, -419, -419, 35, 96, -186,
- -188, -187, -189, 75, 79, 81, 76, 77, 78, 82,
- -309, 28, -31, -168, -31, -419, -190, -183, -421, 18,
- 86, -421, 96, 236, -271, -274, 436, 433, 439, -387,
- 98, -111, 96, -360, -347, -238, -140, 46, -340, 395,
- -333, 604, -333, -342, 98, -342, 105, 105, 105, 97,
- -49, -44, -45, 36, 90, -367, -354, 98, 45, -354,
- -354, -295, 97, -234, -139, -190, 85, -371, -371, -371,
- 29, -2, 744, 750, 151, 95, 400, 22, -255, 96,
- 97, -219, 315, 97, -113, -295, 97, 95, -352, -352,
- -295, -419, 253, 34, 34, 688, 644, 636, -59, -219,
- -218, -295, -334, 743, 742, 97, 255, 313, -144, 453,
- -141, 98, 100, -190, -190, -190, -190, -190, -190, 245,
- 242, 423, -410, 326, -410, 298, 256, -183, -190, 96,
- -84, 272, 267, -306, -306, 36, -190, 433, 717, 715,
- -145, 156, 277, -162, -153, -119, -119, -150, -316, 192,
- 360, 276, 358, 354, 374, 365, 393, 356, 394, 351,
- 350, 349, -316, -314, -150, -210, -145, -145, -145, 164,
- -145, 162, -145, -95, -94, -420, -420, -420, -420, -420,
- -95, -95, -95, -95, -95, -95, -95, -95, -95, -95,
- -230, -145, -145, -145, -420, 192, 360, -95, -145, 18,
- -145, -314, -145, -145, -145, -145, -145, -145, -145, -145,
+ 318, 323, 324, 325, 326, 41, 41, 41, 41, 41,
+ 41, 41, 307, 309, 311, 297, -190, -190, -285, 85,
+ -185, -190, 29, -301, 98, 98, -190, -283, -283, -190,
+ -283, -283, -190, 98, -301, -415, 339, -295, 375, 700,
+ 702, -123, 434, 96, 597, 26, -124, 26, -419, -411,
+ 132, 133, -216, -216, -216, -209, -150, -153, -150, 156,
+ 277, -150, -150, -419, -218, -420, -297, 28, 96, 86,
+ -420, 181, 96, -420, -420, 96, 18, 96, -226, -224,
+ 163, -145, -420, 96, -420, -420, -210, -145, -145, -145,
+ -145, -420, -420, -420, -420, -420, -420, -420, -420, -420,
+ -420, -210, -420, 96, 96, 18, -318, 28, -420, -420,
+ -420, -420, 96, -420, -420, -225, -420, 18, -420, 86,
+ 96, 176, 96, -420, -420, -420, 96, 96, -420, -420,
+ 96, -420, 96, -420, -420, -420, -420, -420, -420, 96,
+ -420, 96, -420, -420, -420, 96, -420, 96, -420, -420,
+ 96, -420, 96, -420, 96, -420, 96, -420, 96, -420,
+ 96, -420, 96, -420, 96, -420, 96, -420, 96, -420,
+ 96, -420, 96, -420, 96, -420, 96, -420, 96, -420,
+ 96, -420, 96, -420, 96, -420, -420, -420, 96, -420,
+ 96, -420, 96, -420, -420, 96, -420, 96, -420, 96,
+ -420, 96, 96, -420, 96, 96, 96, -420, 96, 96,
+ 96, 96, -420, -420, -420, -420, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, -420, -420, -420, -420,
+ -420, -420, 96, -94, 622, -420, -420, 96, -420, 96,
+ 96, 96, 96, 96, -420, -419, 236, -420, -420, -420,
+ -420, -420, 96, 96, 96, 96, 96, 96, -420, -420,
+ -420, 96, 96, -420, 96, -420, 96, -420, -401, 706,
+ 435, -197, -196, -194, 83, 257, 84, -419, -303, -420,
+ -158, -261, -262, -261, -203, -295, 105, 114, -237, -167,
+ 96, -169, 18, -216, 97, 96, -333, -241, -247, -280,
+ -295, 98, 192, -335, 192, -335, 388, 389, -233, 236,
+ -198, 19, -202, 35, 63, -29, -419, -419, 35, 96,
+ -186, -188, -187, -189, 75, 79, 81, 76, 77, 78,
+ 82, -309, 28, -31, -168, -31, -419, -190, -183, -421,
+ 18, 86, -421, 96, 236, -271, -274, 437, 434, 440,
+ -387, 98, -111, 96, -360, -347, -238, -140, 46, -340,
+ 396, -333, 605, -333, -342, 98, -342, 105, 105, 105,
+ 97, -49, -44, -45, 36, 90, -367, -354, 98, 45,
+ -354, -354, -295, 97, -234, -139, -190, 85, -371, -371,
+ -371, 29, -2, 745, 751, 151, 95, 401, 22, -255,
+ 96, 97, -219, 315, 97, -113, -295, 97, 95, -352,
+ -352, -295, -419, 253, 34, 34, 689, 645, 637, -59,
+ -219, -218, -295, -334, 744, 743, 97, 255, 313, -144,
+ 454, -141, 98, 100, -190, -190, -190, -190, -190, -190,
+ 245, 242, 424, -410, 327, 98, -410, 298, 256, -183,
+ -190, 96, -84, 272, 267, -306, -306, 36, -190, 434,
+ 718, 716, -145, 156, 277, -162, -153, -119, -119, -150,
+ -316, 192, 361, 276, 359, 355, 375, 366, 394, 357,
+ 395, 352, 351, 350, -316, -314, -150, -210, -145, -145,
+ -145, 164, -145, 162, -145, -95, -94, -420, -420, -420,
+ -420, -420, -95, -95, -95, -95, -95, -95, -95, -95,
+ -95, -95, -230, -145, -145, -145, -420, 192, 361, -95,
+ -145, 18, -145, -314, -145, -145, -145, -145, -145, -145,
-145, -145, -145, -145, -145, -145, -145, -145, -145, -145,
-145, -145, -145, -145, -145, -145, -145, -145, -145, -145,
- -145, -145, -145, -145, -145, -145, -145, -384, -145, -210,
- -145, -210, -145, -145, -145, -145, -145, -385, -385, -385,
- -385, -385, -210, -210, -210, -210, -145, -419, -295, -98,
- -97, -96, 671, 257, -94, -164, -98, -164, 235, -145,
- 235, 235, 235, -145, -211, -297, -145, -145, -145, -145,
- -145, -145, -145, -145, -145, -145, -194, -348, 295, -348,
- 295, -348, -265, 96, -276, 26, 18, 63, 63, -167,
- -198, -132, -168, -295, -244, 698, -250, 52, -248, -249,
- 53, -245, 54, 62, -335, -335, 183, -235, -145, -266,
- 85, -267, -275, -218, -213, -215, -214, -419, -254, -420,
- -295, -265, -267, -170, -171, -171, -170, -171, 75, 75,
- 75, 80, 75, 80, 75, -187, -301, -420, -145, -304,
- 86, -168, -168, -192, -301, 183, 433, 437, 438, -360,
- -408, 130, 157, 34, 85, 391, 110, -406, 191, 633,
- 683, 688, 644, 637, 678, -407, 259, 150, 151, 271,
- 28, 47, 97, 96, 97, 96, 97, 97, 96, -288,
- -287, -45, -44, -354, -354, 105, -387, 98, 98, 255,
- -190, 85, 85, 85, -114, 748, 105, 95, -3, 90,
- -145, 95, 23, -343, -218, -378, -328, -379, -329, -330,
- -5, -6, -355, -117, 63, 110, -63, 50, 254, 728,
- 729, 139, -419, 741, -370, -255, -374, -376, -190, -149,
- -419, -161, -147, -146, -148, -154, 181, 182, 276, 356,
- 357, -219, -190, -138, 304, 312, 95, -142, 101, -389,
- 86, 295, 391, 295, 391, 98, -412, 327, 98, -412,
- -190, -84, -49, -190, -283, -283, 36, -387, -420, -162,
- -153, -126, 176, 596, -319, 603, -331, -331, -331, -338,
- -331, 346, -331, 346, -331, -420, -420, -420, 96, -420,
- 26, -420, 96, -145, 96, -95, -95, -95, -95, -95,
- -122, 492, 96, 96, -420, 95, 95, -420, -145, -420,
- -420, -420, 96, -420, -420, -420, -420, -420, -420, -420,
- -420, -420, -420, -420, -420, -420, 96, -420, 96, -420,
+ -145, -145, -145, -145, -145, -145, -145, -145, -145, -384,
+ -145, -210, -145, -210, -145, -145, -145, -145, -145, -385,
+ -385, -385, -385, -385, -210, -210, -210, -210, -145, -419,
+ -295, -98, -97, -96, 672, 257, -94, -164, -98, -164,
+ 235, -145, 235, 235, 235, -145, -211, -297, -145, -145,
+ -145, -145, -145, -145, -145, -145, -145, -145, -194, -348,
+ 295, -348, 295, -348, -265, 96, -276, 26, 18, 63,
+ 63, -167, -198, -132, -168, -295, -244, 699, -250, 52,
+ -248, -249, 53, -245, 54, 62, -335, -335, 183, -235,
+ -145, -266, 85, -267, -275, -218, -213, -215, -214, -419,
+ -254, -420, -295, -265, -267, -170, -171, -171, -170, -171,
+ 75, 75, 75, 80, 75, 80, 75, -187, -301, -420,
+ -145, -304, 86, -168, -168, -192, -301, 183, 434, 438,
+ 439, -360, -408, 130, 157, 34, 85, 392, 110, -406,
+ 191, 634, 684, 689, 645, 638, 679, -407, 259, 150,
+ 151, 271, 28, 47, 97, 96, 97, 96, 97, 97,
+ 96, -288, -287, -45, -44, -354, -354, 105, -387, 98,
+ 98, 255, -190, 85, 85, 85, -114, 749, 105, 95,
+ -3, 90, -145, 95, 23, -343, -218, -378, -328, -379,
+ -329, -330, -5, -6, -355, -117, 63, 110, -63, 50,
+ 254, 729, 730, 139, -419, 742, -370, -255, -374, -376,
+ -190, -149, -419, -161, -147, -146, -148, -154, 181, 182,
+ 276, 357, 358, -219, -190, -138, 304, 312, 95, -142,
+ 101, -389, 86, 295, 392, 295, 392, 98, -412, 328,
+ 98, -412, -190, -84, -49, -190, -283, -283, 36, -387,
+ -420, -162, -153, -126, 176, 597, -319, 604, -331, -331,
+ -331, -338, -331, 347, -331, 347, -331, -420, -420, -420,
+ 96, -420, 26, -420, 96, -145, 96, -95, -95, -95,
+ -95, -95, -122, 493, 96, 96, -420, 95, 95, -420,
+ -145, -420, -420, -420, 96, -420, -420, -420, -420, -420,
+ -420, -420, -420, -420, -420, -420, -420, -420, 96, -420,
96, -420, 96, -420, 96, -420, 96, -420, 96, -420,
96, -420, 96, -420, 96, -420, 96, -420, 96, -420,
- 96, -420, 96, -420, 96, -420, 96, -420, -420, 96,
- -420, -420, -420, 96, -420, 96, -420, 96, -420, -420,
- -420, 96, -317, 689, -420, -420, -420, -420, -420, -420,
- -420, -420, -420, -420, -420, -93, -296, -94, 653, 653,
- -420, -94, -227, 96, -150, -420, -150, -150, -150, -420,
- -420, -420, 96, -420, 96, 96, -420, 96, -420, 96,
- -420, -420, -420, -420, 96, -195, 26, -419, -195, -419,
- -195, -420, -261, -190, -198, -228, 20, -241, 57, 366,
- -252, -251, 61, 53, -249, 23, 55, 23, 33, -266,
- 96, 165, -308, 96, 28, -420, -420, 96, 63, 236,
- -420, -198, -181, -180, 85, 86, -182, 85, -180, 75,
- 75, -256, 96, -264, -168, -198, -198, 236, 130, -419,
- -149, 16, 98, 98, -387, -405, 732, 733, 34, 105,
- -354, -354, 151, 151, -190, 95, -333, 98, -333, 105,
- 105, 34, 91, 92, 93, 34, 87, 88, 89, -190,
- -190, -190, -190, -375, 95, 23, -145, 95, 165, 97,
- -255, -255, 291, 176, -354, 726, 297, 297, -354, -354,
- -354, -116, -115, 748, 97, -420, 96, -341, 596, 599,
- -145, -155, -155, -256, 97, -383, 596, -388, -295, -295,
- -295, -295, 105, 107, -420, 594, 82, 597, -420, -333,
- -145, -145, -145, -145, -235, 98, -145, -145, 105, 105,
- -95, -420, -145, -145, -145, -145, -145, -145, -145, -145,
+ 96, -420, 96, -420, 96, -420, 96, -420, 96, -420,
+ -420, 96, -420, -420, -420, 96, -420, 96, -420, 96,
+ -420, -420, -420, 96, -317, 690, -420, -420, -420, -420,
+ -420, -420, -420, -420, -420, -420, -420, -93, -296, -94,
+ 654, 654, -420, -94, -227, 96, -150, -420, -150, -150,
+ -150, -420, -420, -420, 96, -420, 96, 96, -420, 96,
+ -420, 96, -420, -420, -420, -420, 96, -195, 26, -419,
+ -195, -419, -195, -420, -261, -190, -198, -228, 20, -241,
+ 57, 367, -252, -251, 61, 53, -249, 23, 55, 23,
+ 33, -266, 96, 165, -308, 96, 28, -420, -420, 96,
+ 63, 236, -420, -198, -181, -180, 85, 86, -182, 85,
+ -180, 75, 75, -256, 96, -264, -168, -198, -198, 236,
+ 130, -419, -149, 16, 98, 98, -387, -405, 733, 734,
+ 34, 105, -354, -354, 151, 151, -190, 95, -333, 98,
+ -333, 105, 105, 34, 91, 92, 93, 34, 87, 88,
+ 89, -190, -190, -190, -190, -375, 95, 23, -145, 95,
+ 165, 97, -255, -255, 291, 176, -354, 727, 297, 297,
+ -354, -354, -354, -116, -115, 749, 97, -420, 96, -341,
+ 597, 600, -145, -155, -155, -256, 97, -383, 597, -388,
+ -295, -295, -295, -295, 105, 107, -420, 595, 82, 598,
+ -420, -333, -145, -145, -145, -145, -235, 98, -145, -145,
+ 105, 105, -95, -420, -145, -145, -145, -145, -145, -145,
-145, -145, -145, -145, -145, -145, -145, -145, -145, -145,
- -145, -145, -210, -145, -420, -178, -177, -179, 709, 130,
- 34, -316, -420, -212, 289, -101, -100, -99, 18, -420,
- -145, -119, -119, -119, -119, -145, -145, -145, -145, -145,
- -145, -419, 75, 22, 20, -258, -295, 259, -419, -258,
- -419, -304, -228, -229, 21, 23, -242, 59, -240, 58,
- -240, -251, 23, 23, 98, 23, 98, 151, -275, -145,
- -215, -303, 63, -29, -295, -213, -295, -230, -145, 95,
- -145, -158, -198, -198, -145, -205, 516, 518, 519, 520,
- 517, 522, 523, 524, 525, 526, 527, 528, 529, 530,
- 531, 521, 532, 493, 494, 495, 117, 119, 118, 127,
- 128, 496, 497, 498, 360, 544, 545, 539, 542, 543,
- 541, 540, 375, 376, 499, 562, 563, 567, 566, 564,
- 565, 568, 571, 572, 573, 574, 575, 576, 578, 577,
- 569, 570, 547, 546, 548, 549, 550, 551, 552, 553,
- 555, 554, 556, 557, 558, 559, 560, 561, 579, 580,
- 581, 582, 583, 585, 584, 589, 588, 586, 587, 591,
- 590, 500, 501, 120, 121, 122, 123, 124, 125, 126,
- 502, 505, 503, 506, 507, 508, 513, 514, 509, 510,
- 511, 512, 515, 386, 384, 385, 381, 380, 379, 440,
- 445, 446, 448, 533, 534, 535, 536, 537, 538, 690,
- 691, 692, 693, 694, 695, 696, 697, 98, 98, 95,
- -145, 97, 97, -256, -374, -60, 97, -257, -255, 105,
- 97, 292, -214, -419, 98, -354, -354, -354, 105, 105,
- -303, -420, 96, -295, -407, -376, 600, 600, -420, 28,
- -382, -381, -297, 95, 86, 68, 595, 598, -420, -420,
- -420, 96, -420, -420, -420, 97, 97, -420, -420, -420,
+ -145, -145, -145, -145, -210, -145, -420, -178, -177, -179,
+ 710, 130, 34, -316, -420, -212, 289, -101, -100, -99,
+ 18, -420, -145, -119, -119, -119, -119, -145, -145, -145,
+ -145, -145, -145, -419, 75, 22, 20, -258, -295, 259,
+ -419, -258, -419, -304, -228, -229, 21, 23, -242, 59,
+ -240, 58, -240, -251, 23, 23, 98, 23, 98, 151,
+ -275, -145, -215, -303, 63, -29, -295, -213, -295, -230,
+ -145, 95, -145, -158, -198, -198, -145, -205, 517, 519,
+ 520, 521, 518, 523, 524, 525, 526, 527, 528, 529,
+ 530, 531, 532, 522, 533, 494, 495, 496, 117, 119,
+ 118, 127, 128, 497, 498, 499, 361, 545, 546, 540,
+ 543, 544, 542, 541, 376, 377, 500, 563, 564, 568,
+ 567, 565, 566, 569, 572, 573, 574, 575, 576, 577,
+ 579, 578, 570, 571, 548, 547, 549, 550, 551, 552,
+ 553, 554, 556, 555, 557, 558, 559, 560, 561, 562,
+ 580, 581, 582, 583, 584, 586, 585, 590, 589, 587,
+ 588, 592, 591, 501, 502, 120, 121, 122, 123, 124,
+ 125, 126, 503, 506, 504, 507, 508, 509, 514, 515,
+ 510, 511, 512, 513, 516, 387, 385, 386, 382, 381,
+ 380, 441, 446, 447, 449, 534, 535, 536, 537, 538,
+ 539, 691, 692, 693, 694, 695, 696, 697, 698, 98,
+ 98, 95, -145, 97, 97, -256, -374, -60, 97, -257,
+ -255, 105, 97, 292, -214, -419, 98, -354, -354, -354,
+ 105, 105, -303, -420, 96, -295, -407, -376, 601, 601,
+ -420, 28, -382, -381, -297, 95, 86, 68, 596, 599,
+ -420, -420, -420, 96, -420, -420, -420, 97, 97, -420,
+ -420, -420, -420, -420, -420, -420, -420, -420, -420, -420,
-420, -420, -420, -420, -420, -420, -420, -420, -420, -420,
- -420, -420, -420, -420, -420, -420, -420, -420, -420, 96,
- -420, -177, -179, -420, 85, -158, -230, 23, -98, 314,
- 316, -98, -420, -420, -420, -420, -420, 96, -420, -420,
- 96, -420, 96, -420, -420, -258, -420, 23, 23, 96,
- -420, -258, -420, -258, -197, -229, -108, -107, -106, 627,
- -145, -210, -243, 60, 85, 134, 98, 98, 98, 16,
- -419, -213, 236, -308, -235, -255, -175, 400, -230, -420,
- -255, 97, 28, 97, 750, 151, 97, -214, -125, -419,
- 288, -303, 98, 98, -115, -118, -29, 96, 165, -255,
- -190, 68, -145, -210, -420, 85, 608, 709, -92, -91,
- -88, 720, 746, -210, -94, -94, -145, -145, -145, -420,
- -295, 259, -420, -420, -108, 96, -105, -104, -295, -320,
- 596, 85, 134, -267, -255, -308, -295, 97, -420, -419,
- -235, 97, -239, -29, 95, -3, 288, -328, -379, -329,
- -330, -5, -6, -355, -82, 596, -381, -359, -301, -297,
- 98, 105, 97, 596, -420, -420, -90, 159, 718, 686,
- -155, 235, -420, 96, -420, 96, -420, 96, -106, 96,
- 28, 601, -420, -304, -176, -174, -295, 650, -398, -397,
- 592, -408, -404, 130, 157, 110, -406, 688, 644, 140,
- 141, -82, -145, 95, -420, -83, 303, 705, 236, -389,
- 597, -90, 719, 664, 639, 664, 639, -150, -145, -145,
- -145, -104, -419, -420, 96, 26, -321, -62, 661, -395,
- -396, 85, -399, 406, 660, 681, 130, 98, 97, -255,
- 264, -302, -383, 598, 156, -119, -420, 96, -420, 96,
- -420, -93, -174, 657, -334, -158, -396, 85, -395, 85,
- 17, 16, -4, 749, 97, 305, -90, 664, 639, -145,
- -145, -420, -61, 29, -175, -394, 272, 267, 270, 35,
- -394, 105, -4, -420, -420, 661, 266, 34, 130, -158,
- -178, -177, -177,
+ -420, 96, -420, -177, -179, -420, 85, -158, -230, 23,
+ -98, 314, 316, -98, -420, -420, -420, -420, -420, 96,
+ -420, -420, 96, -420, 96, -420, -420, -258, -420, 23,
+ 23, 96, -420, -258, -420, -258, -197, -229, -108, -107,
+ -106, 628, -145, -210, -243, 60, 85, 134, 98, 98,
+ 98, 16, -419, -213, 236, -308, -235, -255, -175, 401,
+ -230, -420, -255, 97, 28, 97, 751, 151, 97, -214,
+ -125, -419, 288, -303, 98, 98, -115, -118, -29, 96,
+ 165, -255, -190, 68, -145, -210, -420, 85, 609, 710,
+ -92, -91, -88, 721, 747, -210, -94, -94, -145, -145,
+ -145, -420, -295, 259, -420, -420, -108, 96, -105, -104,
+ -295, -320, 597, 85, 134, -267, -255, -308, -295, 97,
+ -420, -419, -235, 97, -239, -29, 95, -3, 288, -328,
+ -379, -329, -330, -5, -6, -355, -82, 597, -381, -359,
+ -301, -297, 98, 105, 97, 597, -420, -420, -90, 159,
+ 719, 687, -155, 235, -420, 96, -420, 96, -420, 96,
+ -106, 96, 28, 602, -420, -304, -176, -174, -295, 651,
+ -398, -397, 593, -408, -404, 130, 157, 110, -406, 689,
+ 645, 140, 141, -82, -145, 95, -420, -83, 303, 706,
+ 236, -389, 598, -90, 720, 665, 640, 665, 640, -150,
+ -145, -145, -145, -104, -419, -420, 96, 26, -321, -62,
+ 662, -395, -396, 85, -399, 407, 661, 682, 130, 98,
+ 97, -255, 264, -302, -383, 599, 156, -119, -420, 96,
+ -420, 96, -420, -93, -174, 658, -334, -158, -396, 85,
+ -395, 85, 17, 16, -4, 750, 97, 305, -90, 665,
+ 640, -145, -145, -420, -61, 29, -175, -394, 272, 267,
+ 270, 35, -394, 105, -4, -420, -420, 662, 266, 34,
+ 130, -158, -178, -177, -177,
}
var yyDef = [...]int{
@@ -9496,19 +9475,19 @@ var yyDef = [...]int{
39, 70, 72, 73, 889, 889, 889, 0, 889, 0,
0, 889, -2, -2, 889, 1644, 0, 889, 0, 884,
0, -2, 804, 810, 0, 819, -2, 0, 0, 889,
- 889, 2284, 2284, 884, 0, 0, 0, 0, 0, 889,
+ 889, 2285, 2285, 884, 0, 0, 0, 0, 0, 889,
889, 889, 889, 1649, 1502, 50, 889, 0, 85, 86,
- 839, 840, 841, 65, 0, 2282, 890, 1, 3, 71,
+ 839, 840, 841, 65, 0, 2283, 890, 1, 3, 71,
75, 0, 0, 0, 58, 1511, 0, 78, 0, 0,
893, 0, 0, 1627, 889, 889, 0, 126, 127, 0,
0, 0, -2, 130, -2, 159, 160, 161, 0, 166,
- 609, 527, 579, 525, 564, -2, 513, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 530,
- 402, 402, 0, 0, -2, 513, 513, 513, 1629, 0,
- 0, 0, 561, 464, 402, 402, 402, 0, 402, 402,
- 402, 402, 0, 0, 402, 402, 402, 402, 402, 402,
- 402, 402, 402, 402, 402, 402, 402, 402, 402, 402,
- 402, 1529, 165, 1645, 1642, 1643, 1805, 1806, 1807, 1808,
+ 609, 526, 578, 524, 563, -2, 512, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 529,
+ 401, 401, 0, 0, -2, 512, 512, 512, 1629, 0,
+ 0, 0, 560, 463, 401, 401, 401, 0, 401, 401,
+ 401, 401, 0, 0, 401, 401, 401, 401, 401, 401,
+ 401, 401, 401, 401, 401, 401, 401, 401, 401, 401,
+ 401, 1529, 165, 1645, 1642, 1643, 1805, 1806, 1807, 1808,
1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818,
1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828,
1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838,
@@ -9556,142 +9535,142 @@ var yyDef = [...]int{
2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258,
2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268,
2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278,
- 2279, 2280, 2281, 0, 1621, 0, 722, 993, 0, 885,
- 886, 0, 793, 793, 0, 793, 793, 793, 793, 0,
- 0, 0, 736, 0, 0, 0, 0, 790, 0, 752,
- 753, 0, 790, 0, 759, 796, 0, 0, 766, 793,
- 793, 769, 2285, 0, 2285, 2285, 0, 0, 1612, 0,
- 787, 785, 799, 800, 42, 803, 806, 807, 808, 809,
- 812, 0, 823, 826, 1638, 1639, 0, 828, 833, 852,
- 853, 0, 45, 1153, 0, 1017, 0, 1028, -2, 1039,
- 1056, 1057, 1058, 1059, 1060, 1062, 1063, 1064, 0, 0,
- 0, 0, 1069, 1070, 0, 0, 0, 0, 0, 1133,
- 0, 0, 0, 0, 2007, 1473, 0, 0, 1435, 1435,
- 1169, 1435, 1435, 1437, 1437, 1437, 1858, 1999, 2008, 2187,
- 1819, 1825, 1826, 1827, 2133, 2134, 2135, 2136, 2228, 2229,
- 2233, 1921, 1814, 2200, 2201, 0, 2281, 1960, 1968, 1969,
- 1945, 1954, 1993, 2095, 2212, 1837, 1988, 2058, 1918, 1940,
- 1941, 2076, 2077, 1964, 1965, 1944, 2139, 2141, 2157, 2158,
- 2143, 2145, 2154, 2160, 2165, 2144, 2156, 2161, 2174, 2178,
- 2181, 2182, 2183, 2151, 2149, 2162, 2166, 2168, 2170, 2176,
- 2179, 2152, 2150, 2163, 2167, 2169, 2171, 2177, 2180, 2138,
- 2142, 2146, 2155, 2173, 2153, 2172, 2147, 2159, 2164, 2175,
- 2148, 2140, 1958, 1961, 1948, 1949, 1951, 1953, 1959, 1966,
- 1972, 1950, 1971, 1970, 0, 1946, 1947, 1952, 1963, 1967,
- 1955, 1956, 1957, 1962, 1973, 2014, 2013, 2012, 2057, 1984,
- 2056, 0, 0, 0, 0, 0, 1808, 1863, 1864, 2184,
- 1357, 1358, 1359, 1360, 0, 0, 0, 0, 0, 0,
- 0, 291, 292, 1486, 1487, 44, 1152, 1608, 1437, 1437,
- 1437, 1437, 1437, 1437, 1091, 1092, 1093, 1094, 1095, 1121,
- 1122, 1128, 1129, 2071, 2072, 2073, 2074, 1901, 2223, 1910,
- 1911, 2053, 2054, 1923, 1924, 2255, 2256, -2, -2, -2,
- 232, 233, 234, 235, 236, 237, 238, 239, 0, 1862,
- 2198, 2199, 228, 0, 0, 296, 293, 294, 295, 1135,
- 1136, 249, 250, 251, 252, 253, 254, 255, 256, 257,
- 258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
- 268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
- 278, 279, 280, 281, 282, 283, 284, 285, 286, 287,
- 288, 289, 290, 298, 299, 2284, 0, 862, 0, 0,
- 0, 0, 0, 0, 1650, 1651, 1511, 0, 1503, 1502,
- 63, 0, 889, -2, 0, 0, 0, 0, 47, 0,
- 52, 950, 892, 77, 76, 1551, 1554, 0, 0, 0,
- 59, 1512, 67, 69, 1513, 0, 894, 895, 0, 926,
- 930, 0, 0, 0, 1628, 1627, 1627, 102, 0, 0,
- 103, 123, 124, 125, 0, 0, 109, 110, 1614, 1615,
- 43, 0, 0, 177, 178, 0, 1109, 429, 0, 173,
- 0, 422, 361, 0, 1529, 0, 0, 0, 0, 0,
- 1625, 0, 1622, 154, 155, 162, 163, 164, 402, 402,
- 402, 576, 0, 0, 165, 165, 534, 535, 536, 0,
- 0, -2, 427, 0, 514, 0, 0, 416, 416, 420,
- 418, 419, 0, 0, 0, 0, 0, 0, 0, 0,
- 553, 0, 554, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 670, 0, 403, 0, 574, 575, 465, 0,
- 0, 0, 0, 0, 0, 0, 0, 1630, 1631, 0,
- 551, 552, 0, 0, 0, 402, 402, 0, 0, 0,
- 0, 402, 402, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 153, 1542, 0, 0, 0, -2, 0, 714, 0,
- 0, 0, 1623, 1623, 0, 721, 0, 0, 0, 726,
- 0, 0, 727, 0, 790, 790, 788, 789, 729, 730,
- 731, 732, 793, 0, 0, 411, 412, 413, 790, 793,
- 0, 793, 793, 793, 793, 790, 790, 790, 793, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2285, 796,
- 793, 0, 760, 0, 761, 762, 763, 764, 767, 768,
- 770, 2286, 2287, 1640, 1641, 1652, 1653, 1654, 1655, 1656,
- 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666,
- 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676,
- 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686,
- 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696,
- 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706,
- 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716,
- 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726,
- 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736,
- 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746,
- 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756,
- 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766,
- 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776,
- 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786,
- 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796,
- 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 2285, 2285,
- 774, 778, 782, 780, 1613, 805, 811, 813, 814, 0,
- 0, 824, 827, 846, 49, 1909, 832, 49, 834, 835,
- 836, 837, 838, 864, 865, 870, 0, 0, 0, 0,
- 876, 877, 878, 0, 0, 881, 882, 883, 0, 0,
- 0, 0, 0, 1015, 0, 0, 1141, 1142, 1143, 1144,
- 1145, 1146, 1147, 1148, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1040, 1041, 0, 0, 0, 1065, 1066, 1067,
- 1068, 1071, 0, 1082, 0, 1084, 1482, -2, 0, 0,
- 0, 1076, 1077, 0, 0, 0, 1633, 1633, 0, 0,
- 0, 1474, 0, 0, 1167, 0, 1168, 1170, 1171, 1172,
- 0, 1173, 1174, 899, 899, 899, 899, 899, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 899, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1633, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 141,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1633, 0, 0,
- 1633, 1633, 0, 0, 220, 221, 222, 223, 224, 225,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 297, 240, 241, 242, 243, 244,
- 245, 300, 246, 247, 248, 1152, 0, 0, 0, 46,
+ 2279, 2280, 2281, 2282, 0, 1621, 0, 722, 993, 0,
+ 885, 886, 0, 793, 793, 0, 793, 793, 793, 793,
+ 0, 0, 0, 736, 0, 0, 0, 0, 790, 0,
+ 752, 753, 0, 790, 0, 759, 796, 0, 0, 766,
+ 793, 793, 769, 2286, 0, 2286, 2286, 0, 0, 1612,
+ 0, 787, 785, 799, 800, 42, 803, 806, 807, 808,
+ 809, 812, 0, 823, 826, 1638, 1639, 0, 828, 833,
+ 852, 853, 0, 45, 1153, 0, 1017, 0, 1028, -2,
+ 1039, 1056, 1057, 1058, 1059, 1060, 1062, 1063, 1064, 0,
+ 0, 0, 0, 1069, 1070, 0, 0, 0, 0, 0,
+ 1133, 0, 0, 0, 0, 2008, 1473, 0, 0, 1435,
+ 1435, 1169, 1435, 1435, 1437, 1437, 1437, 1858, 2000, 2009,
+ 2188, 1819, 1825, 1826, 1827, 2134, 2135, 2136, 2137, 2229,
+ 2230, 2234, 1922, 1814, 2201, 2202, 0, 2282, 1961, 1969,
+ 1970, 1946, 1955, 1994, 2096, 2213, 1837, 1989, 2059, 1919,
+ 1941, 1942, 2077, 2078, 1965, 1966, 1945, 2140, 2142, 2158,
+ 2159, 2144, 2146, 2155, 2161, 2166, 2145, 2157, 2162, 2175,
+ 2179, 2182, 2183, 2184, 2152, 2150, 2163, 2167, 2169, 2171,
+ 2177, 2180, 2153, 2151, 2164, 2168, 2170, 2172, 2178, 2181,
+ 2139, 2143, 2147, 2156, 2174, 2154, 2173, 2148, 2160, 2165,
+ 2176, 2149, 2141, 1959, 1962, 1949, 1950, 1952, 1954, 1960,
+ 1967, 1973, 1951, 1972, 1971, 0, 1947, 1948, 1953, 1964,
+ 1968, 1956, 1957, 1958, 1963, 1974, 2015, 2014, 2013, 2058,
+ 1985, 2057, 0, 0, 0, 0, 0, 1808, 1864, 1865,
+ 2185, 1357, 1358, 1359, 1360, 0, 0, 0, 0, 0,
+ 0, 0, 290, 291, 1486, 1487, 44, 1152, 1608, 1437,
+ 1437, 1437, 1437, 1437, 1437, 1091, 1092, 1093, 1094, 1095,
+ 1121, 1122, 1128, 1129, 2072, 2073, 2074, 2075, 1902, 2224,
+ 1911, 1912, 2054, 2055, 1924, 1925, 2256, 2257, -2, -2,
+ -2, 232, 233, 234, 235, 236, 237, 238, 239, 0,
+ 1863, 2199, 2200, 228, 0, 0, 295, 292, 293, 294,
+ 1135, 1136, 248, 249, 250, 251, 252, 253, 254, 255,
+ 256, 257, 258, 259, 260, 261, 262, 263, 264, 265,
+ 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
+ 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,
+ 286, 287, 288, 289, 297, 298, 2285, 0, 862, 0,
+ 0, 0, 0, 0, 0, 1650, 1651, 1511, 0, 1503,
+ 1502, 63, 0, 889, -2, 0, 0, 0, 0, 47,
+ 0, 52, 950, 892, 77, 76, 1551, 1554, 0, 0,
+ 0, 59, 1512, 67, 69, 1513, 0, 894, 895, 0,
+ 926, 930, 0, 0, 0, 1628, 1627, 1627, 102, 0,
+ 0, 103, 123, 124, 125, 0, 0, 109, 110, 1614,
+ 1615, 43, 0, 0, 177, 178, 0, 1109, 428, 0,
+ 173, 0, 421, 360, 0, 1529, 0, 0, 0, 0,
+ 0, 1625, 0, 1622, 154, 155, 162, 163, 164, 401,
+ 401, 401, 575, 0, 0, 165, 165, 533, 534, 535,
+ 0, 0, -2, 426, 0, 513, 0, 0, 415, 415,
+ 419, 417, 418, 0, 0, 0, 0, 0, 0, 0,
+ 0, 552, 0, 553, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 670, 0, 402, 0, 573, 574, 464,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1630, 1631,
+ 0, 550, 551, 0, 0, 0, 401, 401, 0, 0,
+ 0, 0, 401, 401, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 153, 1542, 0, 0, 0, -2, 0, 714,
+ 0, 0, 0, 1623, 1623, 0, 721, 0, 0, 0,
+ 726, 0, 0, 727, 0, 790, 790, 788, 789, 729,
+ 730, 731, 732, 793, 0, 0, 410, 411, 412, 790,
+ 793, 0, 793, 793, 793, 793, 790, 790, 790, 793,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 2286,
+ 796, 793, 0, 760, 0, 761, 762, 763, 764, 767,
+ 768, 770, 2287, 2288, 1640, 1641, 1652, 1653, 1654, 1655,
+ 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665,
+ 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675,
+ 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685,
+ 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695,
+ 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705,
+ 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715,
+ 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725,
+ 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735,
+ 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745,
+ 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755,
+ 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765,
+ 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775,
+ 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785,
+ 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795,
+ 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 2286,
+ 2286, 774, 778, 782, 780, 1613, 805, 811, 813, 814,
+ 0, 0, 824, 827, 846, 49, 1910, 832, 49, 834,
+ 835, 836, 837, 838, 864, 865, 870, 0, 0, 0,
+ 0, 876, 877, 878, 0, 0, 881, 882, 883, 0,
+ 0, 0, 0, 0, 1015, 0, 0, 1141, 1142, 1143,
+ 1144, 1145, 1146, 1147, 1148, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1040, 1041, 0, 0, 0, 1065, 1066,
+ 1067, 1068, 1071, 0, 1082, 0, 1084, 1482, -2, 0,
+ 0, 0, 1076, 1077, 0, 0, 0, 1633, 1633, 0,
+ 0, 0, 1474, 0, 0, 1167, 0, 1168, 1170, 1171,
+ 1172, 0, 1173, 1174, 899, 899, 899, 899, 899, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 899,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1633, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 141, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1633, 0,
+ 0, 1633, 1633, 0, 0, 220, 221, 222, 223, 224,
+ 225, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 296, 240, 241, 242, 243,
+ 244, 299, 245, 246, 247, 1152, 0, 0, 0, 46,
854, 855, 0, 976, 1633, 0, 0, 905, 0, 1648,
57, 66, 68, 1511, 61, 1511, 0, 909, 0, 0,
-2, -2, 910, 911, 915, 916, 917, 918, 919, 920,
- 921, 922, 923, 54, 2283, 55, 0, 74, 0, 48,
- 0, 0, 1552, 0, 1555, 0, 0, 0, 375, 1559,
- 0, 0, 1504, 1505, 1508, 0, 927, 2005, 931, 0,
+ 921, 922, 923, 54, 2284, 55, 0, 74, 0, 48,
+ 0, 0, 1552, 0, 1555, 0, 0, 0, 374, 1559,
+ 0, 0, 1504, 1505, 1508, 0, 927, 2006, 931, 0,
933, 934, 0, 0, 100, 0, 992, 0, 0, 0,
- 111, 0, 113, 114, 0, 0, 0, 386, 1616, 1617,
- 1618, -2, 409, 0, 386, 370, 308, 309, 310, 361,
- 312, 361, 361, 361, 361, 375, 375, 375, 375, 343,
- 344, 345, 346, 347, 0, 361, 0, 329, 361, 361,
- 361, 361, 351, 352, 353, 354, 355, 356, 357, 358,
- 313, 314, 315, 316, 317, 318, 319, 320, 321, 363,
- 363, 363, 363, 363, 367, 367, 0, 1110, 0, 390,
+ 111, 0, 113, 114, 0, 0, 0, 385, 1616, 1617,
+ 1618, -2, 408, 0, 385, 369, 307, 308, 309, 360,
+ 311, 360, 360, 360, 360, 374, 374, 374, 374, 342,
+ 343, 344, 345, 346, 0, 360, 0, 328, 360, 360,
+ 360, 360, 350, 351, 352, 353, 354, 355, 356, 357,
+ 312, 313, 314, 315, 316, 317, 318, 319, 320, 362,
+ 362, 362, 362, 362, 366, 366, 0, 1110, 0, 389,
0, 1508, 0, 0, 1542, 1625, 1635, 0, 0, 0,
- 0, 0, 132, 0, 0, 0, 577, 620, 528, 565,
- 578, 0, 531, 532, -2, 0, 0, 513, 0, 515,
- 0, 410, 0, -2, 0, 420, 0, 416, 420, 417,
- 420, 408, 421, 555, 556, 557, 0, 559, 560, 650,
+ 0, 0, 132, 0, 0, 0, 576, 620, 527, 564,
+ 577, 0, 530, 531, -2, 0, 0, 512, 0, 514,
+ 0, 409, 0, -2, 0, 419, 0, 415, 419, 416,
+ 419, 407, 420, 554, 555, 556, 0, 558, 559, 650,
962, 0, 0, 0, 0, 0, 656, 657, 658, 0,
660, 661, 662, 663, 664, 665, 666, 667, 668, 669,
- 566, 567, 568, 569, 570, 571, 572, 573, 0, 0,
- 0, 0, 515, 0, 562, 0, 0, 466, 467, 468,
- 0, 0, 471, 472, 473, 474, 0, 0, 477, 478,
- 479, 979, 980, 480, 481, 506, 507, 508, 482, 483,
- 484, 485, 486, 487, 488, 500, 501, 502, 503, 504,
- 505, 489, 490, 491, 492, 493, 494, 497, 0, 147,
+ 565, 566, 567, 568, 569, 570, 571, 572, 0, 0,
+ 0, 0, 514, 0, 561, 0, 0, 465, 466, 467,
+ 0, 0, 470, 471, 472, 473, 0, 0, 476, 477,
+ 478, 979, 980, 479, 480, 505, 506, 507, 481, 482,
+ 483, 484, 485, 486, 487, 499, 500, 501, 502, 503,
+ 504, 488, 489, 490, 491, 492, 493, 496, 0, 147,
1533, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 1623, 0,
0, 0, 0, 908, 994, 1646, 1647, 723, 0, 0,
- 794, 795, 0, 414, 415, 793, 793, 733, 775, 0,
+ 794, 795, 0, 413, 414, 793, 793, 733, 775, 0,
793, 737, 776, 738, 740, 739, 741, 754, 755, 793,
744, 791, 792, 745, 746, 747, 748, 749, 750, 751,
771, 756, 757, 758, 797, 0, 801, 802, 772, 773,
@@ -9702,7 +9681,7 @@ var yyDef = [...]int{
1021, 1024, 0, 0, 0, 1018, 1029, 1149, 1150, 1151,
0, 0, 0, 0, 0, 1033, 1037, 1042, 1043, 1044,
1045, 1046, 0, 1047, 0, 1050, 1051, 1052, 1053, 1054,
- 1055, 1061, 1450, 1451, 1452, 1080, 301, 302, 0, 1081,
+ 1055, 1061, 1450, 1451, 1452, 1080, 300, 301, 0, 1081,
0, 0, 0, 0, 0, 0, 0, 0, 1397, 1398,
1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408,
1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1153, 0,
@@ -9728,192 +9707,192 @@ var yyDef = [...]int{
0, 0, 0, 0, 1606, 0, 0, 857, 858, 860,
0, 996, 0, 977, 0, 0, 863, 0, 904, 0,
907, 60, 62, 913, 914, 0, 935, 924, 912, 56,
- 51, 0, 0, 954, 1553, 1556, 1557, 375, 1579, 0,
- 384, 384, 381, 1514, 1515, 0, 1507, 1509, 1510, 79,
+ 51, 0, 0, 954, 1553, 1556, 1557, 374, 1579, 0,
+ 383, 383, 380, 1514, 1515, 0, 1507, 1509, 1510, 79,
932, 928, 0, 1010, 0, 0, 991, 0, 938, 940,
941, 942, 974, 0, 945, 946, 0, 0, 0, 0,
0, 98, 993, 104, 0, 112, 0, 0, 117, 118,
- 105, 106, 107, 108, 0, 609, -2, 461, 179, 181,
- 182, 183, 174, -2, 373, 371, 372, 311, 375, 375,
- 337, 338, 339, 340, 341, 342, 0, 349, 0, 330,
- 331, 332, 333, 322, 0, 323, 324, 325, 365, 0,
- 326, 327, 0, 328, 428, 0, 1516, 391, 392, 394,
- 402, 0, 397, 398, 0, 402, 402, 0, 423, 424,
+ 105, 106, 107, 108, 0, 609, -2, 460, 179, 181,
+ 182, 183, 174, -2, 372, 370, 371, 310, 374, 374,
+ 336, 337, 338, 339, 340, 341, 0, 348, 0, 329,
+ 330, 331, 332, 321, 0, 322, 323, 324, 364, 0,
+ 325, 326, 0, 327, 427, 0, 1516, 390, 391, 393,
+ 401, 0, 396, 397, 0, 401, 401, 0, 422, 423,
0, 1508, 1533, 0, 0, 1636, 1635, 1635, 1635, 152,
0, 167, 168, 169, 170, 171, 172, 645, 0, 0,
- 621, 643, 644, 165, 0, 0, 175, 517, 516, 0,
- 677, 0, 426, 0, 0, 420, 420, 405, 406, 558,
- 0, 0, 652, 653, 654, 655, 0, 0, 0, 544,
- 455, 0, 545, 546, 515, 517, 0, 0, 386, 469,
- 470, 475, 476, 495, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 593, 594, 596, 599,
- 601, 519, 605, 607, 595, 598, 600, 602, 519, 606,
- 608, 1530, 1531, 1532, 0, 0, 715, 0, 0, 452,
- 94, 1624, 720, 724, 725, 790, 743, 777, 790, 735,
- 742, 765, 779, 781, 815, 816, 821, 829, 830, 831,
- 871, 0, 0, 0, 0, 879, 0, 0, 1023, 1138,
- 1140, 1025, 1026, 1027, 1030, 0, 1034, 1038, 0, 0,
- 0, 0, 0, 1085, 1083, 1484, 0, 0, 0, 1134,
- 0, 0, 1157, 1158, 0, 0, 0, 0, 1478, 0,
- 0, 1165, 0, 1439, 1115, 0, 0, 0, 0, 0,
- 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
- 1502, 1192, 0, 0, 0, 0, 0, 1197, 1198, 1199,
- 1115, 0, 1202, 1203, 0, 1205, 0, 1206, 0, 0,
- 0, 0, 1213, 1214, 1216, 0, 0, 1219, 1220, 0,
- 1222, 0, 1224, 1225, 1226, 1227, 1228, 1229, 0, 1231,
- 0, 1233, 1234, 1235, 0, 1237, 0, 1239, 1240, 0,
- 1242, 0, 1244, 0, 1247, 0, 1250, 0, 1253, 0,
- 1256, 0, 1259, 0, 1262, 0, 1265, 0, 1268, 0,
- 1271, 0, 1274, 0, 1277, 0, 1280, 0, 1283, 0,
- 1286, 0, 1289, 0, 1292, 1293, 1294, 0, 1296, 0,
- 1298, 0, 1301, 1302, 0, 1304, 0, 1307, 0, 1310,
- 0, 0, 1311, 0, 0, 0, 1315, 0, 0, 0,
- 0, 1324, 1325, 1326, 1327, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1338, 1339, 1340, 1341, 1342,
- 1343, 0, 1345, 0, 1116, 0, 0, 1116, 0, 0,
- 0, 0, 0, 1155, 1633, 0, 1440, 1441, 1442, 1443,
- 1444, 0, 0, 0, 0, 0, 0, 1384, 1385, 1387,
- 0, 0, 1390, 0, 1392, 0, 1607, 856, 859, 861,
- 948, 997, 998, 0, 0, 0, 0, 978, 1632, 902,
- 903, 906, 956, 0, 1488, 0, 0, 935, 1010, 0,
- 936, 0, 53, 951, 0, 1561, 1560, 1573, 1586, 384,
- 384, 378, 379, 385, 380, 382, 383, 1506, 0, 1511,
- 0, 1600, 0, 0, 1589, 0, 0, 0, 0, 0,
- 0, 0, 0, 981, 0, 0, 984, 0, 0, 0,
- 0, 975, 946, 0, 947, 0, -2, 0, 0, 92,
- 93, 0, 0, 0, 115, 116, 0, 0, 122, 387,
- 388, 156, 165, 463, 180, 436, 0, 0, 307, 374,
- 334, 335, 336, 0, 359, 0, 0, 0, 0, 457,
- 128, 1520, 1519, 402, 402, 393, 0, 396, 0, 0,
- 0, 1637, 362, 425, 0, 146, 0, 0, 0, 0,
- 1626, 615, 0, 0, 622, 0, 0, 0, 526, 0,
- 537, 538, 0, 649, -2, 711, 390, 0, 404, 407,
- 963, 0, 0, 539, 0, 542, 543, 456, 517, 548,
- 549, 563, 550, 498, 499, 496, 0, 0, 1543, 1544,
- 1549, 1547, 1548, 133, 584, 586, 590, 585, 589, 0,
- 0, 0, 521, 0, 521, 582, 0, 452, 1516, 0,
- 719, 453, 454, 793, 793, 866, 97, 0, 869, 0,
- 0, 0, 0, 1031, 1035, 1048, 1049, 1445, 1471, 361,
- 361, 1458, 361, 367, 1461, 361, 1463, 361, 1466, 361,
- 1469, 1470, 0, 0, 1078, 0, 0, 0, 0, 1164,
- 1481, 0, 0, 1175, 1114, 1115, 1115, 1115, 1115, 1115,
- 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190,
- 1475, 0, 0, 0, 1196, 0, 0, 1200, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 144, 145, 0,
- 0, 0, 0, 0, 0, 1395, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1109, 1113, 0,
- 1117, 1118, 0, 0, 1347, 0, 0, 1365, 0, 0,
- 0, 0, 0, 0, 0, 1485, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 999, 1006, 0, 1006,
- 0, 1006, 0, 0, 0, 1619, 1620, 1489, 1490, 1010,
- 1491, 925, 937, 955, 1579, 0, 1572, 0, -2, 1581,
- 0, 0, 0, 1587, 376, 377, 929, 80, 1011, 83,
- 0, 1600, 1609, 0, 1597, 1602, 1604, 0, 0, 0,
- 1593, 0, 1010, 939, 970, 972, 0, 967, 982, 983,
- 985, 0, 987, 0, 989, 990, 950, 944, 0, 100,
- 0, 1010, 1010, 99, 0, 995, 119, 120, 121, 462,
- 184, 189, 0, 0, 0, 194, 0, 196, 0, 0,
- 0, 201, 202, 402, 402, 437, 0, 304, 306, 0,
- 0, 187, 375, 0, 375, 0, 366, 368, 0, 438,
- 458, 1517, 1518, 0, 0, 395, 399, 400, 401, 0,
- 148, 0, 0, 0, 618, 0, 646, 0, 0, 0,
- 0, 0, 0, 176, 518, 678, 679, 680, 681, 682,
- 683, 684, 685, 686, 0, 402, 0, 0, 0, 402,
- 402, 402, 0, 703, 389, 0, 0, 674, 671, 540,
- 0, 218, 219, 226, 227, 229, 0, 0, 0, 0,
- 0, 547, 950, 1534, 1535, 1536, 0, 1546, 1550, 136,
- 0, 0, 0, 0, 592, 597, 603, 0, 520, 604,
- 716, 717, 718, 95, 728, 734, 868, 888, 1019, 1032,
- 1036, 0, 0, 0, 0, 1472, 1456, 375, 1459, 1460,
- 1462, 1464, 1465, 1467, 1468, 1074, 1075, 1079, 0, 1161,
- 0, 1163, 0, 1479, 0, 1176, 1177, 1178, 1179, 1180,
- 1511, 0, 0, 0, 1195, 0, 0, 1115, 0, 1208,
- 1207, 1209, 0, 1211, 1212, 1217, 1218, 1221, 1223, 1230,
- 1232, 1236, 1238, 1241, 1243, 1245, 0, 1248, 0, 1251,
- 0, 1254, 0, 1257, 0, 1260, 0, 1263, 0, 1266,
- 0, 1269, 0, 1272, 0, 1275, 0, 1278, 0, 1281,
- 0, 1284, 0, 1287, 0, 1290, 0, 1295, 1297, 0,
- 1300, 1303, 1305, 0, 1308, 0, 1312, 0, 1314, 1316,
- 1317, 0, 0, 0, 1328, 1329, 1330, 1331, 1332, 1333,
- 1334, 1335, 1336, 1337, 1344, 0, 1107, 1346, 1119, 1120,
- 1125, 1349, 0, 0, 0, 1352, 0, 0, 0, 1356,
- 1156, 1367, 0, 1372, 0, 0, 1378, 0, 1382, 0,
- 1388, 1389, 1391, 1393, 0, 0, 0, 0, 0, 0,
- 0, 976, 957, 64, 1491, 1495, 0, 1566, 1564, 1564,
- 1574, 1575, 0, 0, 1582, 0, 0, 0, 0, 84,
- 0, 0, 1588, 0, 0, 1605, 0, 0, 0, 0,
- 101, 1502, 964, 971, 0, 0, 965, 0, 966, 986,
- 988, 943, 0, 1010, 1010, 90, 91, 0, 190, 0,
- 192, 0, 195, 197, 198, 199, 205, 206, 207, 200,
- 0, 0, 303, 305, 0, 0, 348, 360, 350, 0,
- 0, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 950,
- 149, 150, 151, 610, 0, 620, 0, 952, 0, 613,
- 0, 529, 0, 0, 0, 402, 402, 402, 0, 0,
- 0, 0, 688, 0, 0, 651, 0, 659, 0, 0,
- 0, 230, 231, 0, 1545, 583, 0, 134, 135, 0,
- 0, 588, 522, 523, 1072, 0, 0, 0, 1073, 1457,
- 0, 0, 0, 0, 0, 1476, 0, 0, 0, 0,
- 1201, 1204, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1320, 0, 0, 0, 640, 641,
- 0, 1396, 1112, 1502, 0, 1116, 1126, 1127, 0, 1116,
- 1366, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1007, 0, 0, 0, 958, 959, 0, 0,
- 0, 996, 1495, 1500, 0, 0, 1569, 0, 1562, 1565,
- 1563, 1576, 0, 0, 1583, 0, 1585, 0, 1610, 1611,
- 1603, 1598, 0, 1592, 1595, 1597, 1594, 1511, 968, 0,
- 973, 0, 1502, 89, 0, 193, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 203, 204, 0,
- 0, 364, 369, 0, 0, 0, 611, 0, 953, 623,
- 614, 0, 701, 0, 705, 0, 0, 0, 708, 709,
- 710, 687, 0, 691, 430, 675, 672, 673, 541, 0,
- 137, 138, 0, 0, 0, 1446, 0, 1449, 1159, 1162,
- 1160, 0, 1191, 1193, 1194, 1454, 1455, 1210, 1246, 1249,
- 1252, 1255, 1258, 1261, 1264, 1267, 1270, 1273, 1276, 1279,
- 1282, 1285, 1288, 1291, 1299, 1306, 1309, 1313, 1318, 0,
- 1321, 0, 0, 1322, 0, 642, 1103, 0, 0, 1123,
- 1124, 0, 1351, 1353, 1354, 1355, 1368, 0, 1373, 1374,
- 0, 1379, 0, 1383, 1394, 0, 1001, 1008, 1009, 0,
- 1004, 0, 1005, 0, 949, 1500, 82, 1501, 1498, 0,
- 1496, 1493, 1558, 0, 1567, 1568, 1577, 1578, 1584, 0,
- 0, 1597, 0, 1591, 87, 0, 0, 0, 1511, 191,
- 0, 210, 0, 619, 0, 622, 612, 699, 700, 0,
- 712, 704, 706, 707, 689, -2, 1537, 0, 0, 0,
- 591, 1447, 0, 0, 1323, 0, 638, 639, 1111, 1104,
- 0, 1089, 1090, 1108, 1348, 1350, 0, 0, 0, 1000,
- 960, 961, 1002, 1003, 81, 0, 1497, 1131, 0, 1492,
- 0, 1570, 1571, 1601, 0, 1590, 1596, 969, 976, 0,
- 88, 443, 436, 1537, 0, 0, 0, 692, 693, 694,
- 695, 696, 697, 698, 580, 1539, 139, 140, 0, 510,
- 511, 512, 133, 0, 1166, 1319, 1105, 0, 0, 0,
- 0, 0, 1369, 0, 1375, 0, 1380, 0, 1499, 0,
- 0, 1494, 1599, 624, 0, 626, 0, -2, 431, 444,
- 0, 185, 211, 212, 0, 0, 215, 216, 217, 208,
- 209, 129, 0, 0, 713, 0, 1540, 1541, 0, 136,
- 0, 0, 1096, 1097, 1098, 1099, 1101, 0, 0, 0,
- 0, 1132, 1109, 625, 0, 0, 386, 0, 635, 432,
- 433, 0, 439, 440, 441, 442, 213, 214, 647, 0,
- 0, 509, 587, 1448, 0, 0, 1370, 0, 1376, 0,
- 1381, 0, 627, 628, 636, 0, 434, 0, 435, 0,
- 0, 0, 616, 0, 647, 1538, 1106, 1100, 1102, 0,
- 0, 1130, 0, 637, 633, 445, 447, 448, 0, 0,
- 446, 648, 617, 1371, 1377, 0, 449, 450, 451, 629,
- 630, 631, 632,
+ 621, 643, 644, 165, 0, 0, 175, 516, 515, 0,
+ 677, 0, 425, 0, 0, 419, 419, 404, 405, 557,
+ 0, 0, 652, 653, 654, 655, 0, 0, 0, 543,
+ 454, 0, 544, 545, 514, 516, 0, 0, 385, 468,
+ 469, 474, 475, 494, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 592, 593, 595, 598,
+ 600, 518, 604, 606, 0, 594, 597, 599, 601, 518,
+ 605, 607, 1530, 1531, 1532, 0, 0, 715, 0, 0,
+ 451, 94, 1624, 720, 724, 725, 790, 743, 777, 790,
+ 735, 742, 765, 779, 781, 815, 816, 821, 829, 830,
+ 831, 871, 0, 0, 0, 0, 879, 0, 0, 1023,
+ 1138, 1140, 1025, 1026, 1027, 1030, 0, 1034, 1038, 0,
+ 0, 0, 0, 0, 1085, 1083, 1484, 0, 0, 0,
+ 1134, 0, 0, 1157, 1158, 0, 0, 0, 0, 1478,
+ 0, 0, 1165, 0, 1439, 1115, 0, 0, 0, 0,
+ 0, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1502, 1192, 0, 0, 0, 0, 0, 1197, 1198,
+ 1199, 1115, 0, 1202, 1203, 0, 1205, 0, 1206, 0,
+ 0, 0, 0, 1213, 1214, 1216, 0, 0, 1219, 1220,
+ 0, 1222, 0, 1224, 1225, 1226, 1227, 1228, 1229, 0,
+ 1231, 0, 1233, 1234, 1235, 0, 1237, 0, 1239, 1240,
+ 0, 1242, 0, 1244, 0, 1247, 0, 1250, 0, 1253,
+ 0, 1256, 0, 1259, 0, 1262, 0, 1265, 0, 1268,
+ 0, 1271, 0, 1274, 0, 1277, 0, 1280, 0, 1283,
+ 0, 1286, 0, 1289, 0, 1292, 1293, 1294, 0, 1296,
+ 0, 1298, 0, 1301, 1302, 0, 1304, 0, 1307, 0,
+ 1310, 0, 0, 1311, 0, 0, 0, 1315, 0, 0,
+ 0, 0, 1324, 1325, 1326, 1327, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1338, 1339, 1340, 1341,
+ 1342, 1343, 0, 1345, 0, 1116, 0, 0, 1116, 0,
+ 0, 0, 0, 0, 1155, 1633, 0, 1440, 1441, 1442,
+ 1443, 1444, 0, 0, 0, 0, 0, 0, 1384, 1385,
+ 1387, 0, 0, 1390, 0, 1392, 0, 1607, 856, 859,
+ 861, 948, 997, 998, 0, 0, 0, 0, 978, 1632,
+ 902, 903, 906, 956, 0, 1488, 0, 0, 935, 1010,
+ 0, 936, 0, 53, 951, 0, 1561, 1560, 1573, 1586,
+ 383, 383, 377, 378, 384, 379, 381, 382, 1506, 0,
+ 1511, 0, 1600, 0, 0, 1589, 0, 0, 0, 0,
+ 0, 0, 0, 0, 981, 0, 0, 984, 0, 0,
+ 0, 0, 975, 946, 0, 947, 0, -2, 0, 0,
+ 92, 93, 0, 0, 0, 115, 116, 0, 0, 122,
+ 386, 387, 156, 165, 462, 180, 435, 0, 0, 306,
+ 373, 333, 334, 335, 0, 358, 0, 0, 0, 0,
+ 456, 128, 1520, 1519, 401, 401, 392, 0, 395, 0,
+ 0, 0, 1637, 361, 424, 0, 146, 0, 0, 0,
+ 0, 1626, 615, 0, 0, 622, 0, 0, 0, 525,
+ 0, 536, 537, 0, 649, -2, 711, 389, 0, 403,
+ 406, 963, 0, 0, 538, 0, 541, 542, 455, 516,
+ 547, 548, 562, 549, 497, 498, 495, 0, 0, 1543,
+ 1544, 1549, 1547, 1548, 133, 583, 585, 589, 584, 588,
+ 0, 0, 0, 520, 0, 608, 520, 581, 0, 451,
+ 1516, 0, 719, 452, 453, 793, 793, 866, 97, 0,
+ 869, 0, 0, 0, 0, 1031, 1035, 1048, 1049, 1445,
+ 1471, 360, 360, 1458, 360, 366, 1461, 360, 1463, 360,
+ 1466, 360, 1469, 1470, 0, 0, 1078, 0, 0, 0,
+ 0, 1164, 1481, 0, 0, 1175, 1114, 1115, 1115, 1115,
+ 1115, 1115, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188,
+ 1189, 1190, 1475, 0, 0, 0, 1196, 0, 0, 1200,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 144,
+ 145, 0, 0, 0, 0, 0, 0, 1395, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1109,
+ 1113, 0, 1117, 1118, 0, 0, 1347, 0, 0, 1365,
+ 0, 0, 0, 0, 0, 0, 0, 1485, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 999, 1006,
+ 0, 1006, 0, 1006, 0, 0, 0, 1619, 1620, 1489,
+ 1490, 1010, 1491, 925, 937, 955, 1579, 0, 1572, 0,
+ -2, 1581, 0, 0, 0, 1587, 375, 376, 929, 80,
+ 1011, 83, 0, 1600, 1609, 0, 1597, 1602, 1604, 0,
+ 0, 0, 1593, 0, 1010, 939, 970, 972, 0, 967,
+ 982, 983, 985, 0, 987, 0, 989, 990, 950, 944,
+ 0, 100, 0, 1010, 1010, 99, 0, 995, 119, 120,
+ 121, 461, 184, 189, 0, 0, 0, 194, 0, 196,
+ 0, 0, 0, 201, 202, 401, 401, 436, 0, 303,
+ 305, 0, 0, 187, 374, 0, 374, 0, 365, 367,
+ 0, 437, 457, 1517, 1518, 0, 0, 394, 398, 399,
+ 400, 0, 148, 0, 0, 0, 618, 0, 646, 0,
+ 0, 0, 0, 0, 0, 176, 517, 678, 679, 680,
+ 681, 682, 683, 684, 685, 686, 0, 401, 0, 0,
+ 0, 401, 401, 401, 0, 703, 388, 0, 0, 674,
+ 671, 539, 0, 218, 219, 226, 227, 229, 0, 0,
+ 0, 0, 0, 546, 950, 1534, 1535, 1536, 0, 1546,
+ 1550, 136, 0, 0, 0, 0, 591, 596, 602, 0,
+ 519, 603, 716, 717, 718, 95, 728, 734, 868, 888,
+ 1019, 1032, 1036, 0, 0, 0, 0, 1472, 1456, 374,
+ 1459, 1460, 1462, 1464, 1465, 1467, 1468, 1074, 1075, 1079,
+ 0, 1161, 0, 1163, 0, 1479, 0, 1176, 1177, 1178,
+ 1179, 1180, 1511, 0, 0, 0, 1195, 0, 0, 1115,
+ 0, 1208, 1207, 1209, 0, 1211, 1212, 1217, 1218, 1221,
+ 1223, 1230, 1232, 1236, 1238, 1241, 1243, 1245, 0, 1248,
+ 0, 1251, 0, 1254, 0, 1257, 0, 1260, 0, 1263,
+ 0, 1266, 0, 1269, 0, 1272, 0, 1275, 0, 1278,
+ 0, 1281, 0, 1284, 0, 1287, 0, 1290, 0, 1295,
+ 1297, 0, 1300, 1303, 1305, 0, 1308, 0, 1312, 0,
+ 1314, 1316, 1317, 0, 0, 0, 1328, 1329, 1330, 1331,
+ 1332, 1333, 1334, 1335, 1336, 1337, 1344, 0, 1107, 1346,
+ 1119, 1120, 1125, 1349, 0, 0, 0, 1352, 0, 0,
+ 0, 1356, 1156, 1367, 0, 1372, 0, 0, 1378, 0,
+ 1382, 0, 1388, 1389, 1391, 1393, 0, 0, 0, 0,
+ 0, 0, 0, 976, 957, 64, 1491, 1495, 0, 1566,
+ 1564, 1564, 1574, 1575, 0, 0, 1582, 0, 0, 0,
+ 0, 84, 0, 0, 1588, 0, 0, 1605, 0, 0,
+ 0, 0, 101, 1502, 964, 971, 0, 0, 965, 0,
+ 966, 986, 988, 943, 0, 1010, 1010, 90, 91, 0,
+ 190, 0, 192, 0, 195, 197, 198, 199, 205, 206,
+ 207, 200, 0, 0, 302, 304, 0, 0, 347, 359,
+ 349, 0, 0, 1521, 1522, 1523, 1524, 1525, 1526, 1527,
+ 1528, 950, 149, 150, 151, 610, 0, 620, 0, 952,
+ 0, 613, 0, 528, 0, 0, 0, 401, 401, 401,
+ 0, 0, 0, 0, 688, 0, 0, 651, 0, 659,
+ 0, 0, 0, 230, 231, 0, 1545, 582, 0, 134,
+ 135, 0, 0, 587, 521, 522, 1072, 0, 0, 0,
+ 1073, 1457, 0, 0, 0, 0, 0, 1476, 0, 0,
+ 0, 0, 1201, 1204, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1320, 0, 0, 0,
+ 640, 641, 0, 1396, 1112, 1502, 0, 1116, 1126, 1127,
+ 0, 1116, 1366, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1007, 0, 0, 0, 958, 959,
+ 0, 0, 0, 996, 1495, 1500, 0, 0, 1569, 0,
+ 1562, 1565, 1563, 1576, 0, 0, 1583, 0, 1585, 0,
+ 1610, 1611, 1603, 1598, 0, 1592, 1595, 1597, 1594, 1511,
+ 968, 0, 973, 0, 1502, 89, 0, 193, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 203,
+ 204, 0, 0, 363, 368, 0, 0, 0, 611, 0,
+ 953, 623, 614, 0, 701, 0, 705, 0, 0, 0,
+ 708, 709, 710, 687, 0, 691, 429, 675, 672, 673,
+ 540, 0, 137, 138, 0, 0, 0, 1446, 0, 1449,
+ 1159, 1162, 1160, 0, 1191, 1193, 1194, 1454, 1455, 1210,
+ 1246, 1249, 1252, 1255, 1258, 1261, 1264, 1267, 1270, 1273,
+ 1276, 1279, 1282, 1285, 1288, 1291, 1299, 1306, 1309, 1313,
+ 1318, 0, 1321, 0, 0, 1322, 0, 642, 1103, 0,
+ 0, 1123, 1124, 0, 1351, 1353, 1354, 1355, 1368, 0,
+ 1373, 1374, 0, 1379, 0, 1383, 1394, 0, 1001, 1008,
+ 1009, 0, 1004, 0, 1005, 0, 949, 1500, 82, 1501,
+ 1498, 0, 1496, 1493, 1558, 0, 1567, 1568, 1577, 1578,
+ 1584, 0, 0, 1597, 0, 1591, 87, 0, 0, 0,
+ 1511, 191, 0, 210, 0, 619, 0, 622, 612, 699,
+ 700, 0, 712, 704, 706, 707, 689, -2, 1537, 0,
+ 0, 0, 590, 1447, 0, 0, 1323, 0, 638, 639,
+ 1111, 1104, 0, 1089, 1090, 1108, 1348, 1350, 0, 0,
+ 0, 1000, 960, 961, 1002, 1003, 81, 0, 1497, 1131,
+ 0, 1492, 0, 1570, 1571, 1601, 0, 1590, 1596, 969,
+ 976, 0, 88, 442, 435, 1537, 0, 0, 0, 692,
+ 693, 694, 695, 696, 697, 698, 579, 1539, 139, 140,
+ 0, 509, 510, 511, 133, 0, 1166, 1319, 1105, 0,
+ 0, 0, 0, 0, 1369, 0, 1375, 0, 1380, 0,
+ 1499, 0, 0, 1494, 1599, 624, 0, 626, 0, -2,
+ 430, 443, 0, 185, 211, 212, 0, 0, 215, 216,
+ 217, 208, 209, 129, 0, 0, 713, 0, 1540, 1541,
+ 0, 136, 0, 0, 1096, 1097, 1098, 1099, 1101, 0,
+ 0, 0, 0, 1132, 1109, 625, 0, 0, 385, 0,
+ 635, 431, 432, 0, 438, 439, 440, 441, 213, 214,
+ 647, 0, 0, 508, 586, 1448, 0, 0, 1370, 0,
+ 1376, 0, 1381, 0, 627, 628, 636, 0, 433, 0,
+ 434, 0, 0, 0, 616, 0, 647, 1538, 1106, 1100,
+ 1102, 0, 0, 1130, 0, 637, 633, 444, 446, 447,
+ 0, 0, 445, 648, 617, 1371, 1377, 0, 448, 449,
+ 450, 629, 630, 631, 632,
}
var yyTok1 = [...]int{
@@ -9922,7 +9901,7 @@ var yyTok1 = [...]int{
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 158, 3, 3, 3, 186, 178, 3,
95, 97, 183, 181, 96, 182, 236, 184, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 751,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 752,
166, 165, 167, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
@@ -10057,7 +10036,7 @@ var yyTok3 = [...]int{
58060, 735, 58061, 736, 58062, 737, 58063, 738, 58064, 739,
58065, 740, 58066, 741, 58067, 742, 58068, 743, 58069, 744,
58070, 745, 58071, 746, 58072, 747, 58073, 748, 58074, 749,
- 58075, 750, 0,
+ 58075, 750, 58076, 751, 0,
}
var yyErrorMessages = [...]struct {
@@ -12041,16 +12020,16 @@ yydefault:
var yyLOCAL Expr
//line sql.y:1734
{
- yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: yyDollar[2].exprUnion()}
+ arg := parseBindVariable(yylex, yyDollar[2].str[1:])
+ yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: arg}
}
yyVAL.union = yyLOCAL
case 245:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1738
+//line sql.y:1739
{
- arg := parseBindVariable(yylex, yyDollar[2].str[1:])
- yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: arg}
+ yyLOCAL = NewDateLiteral(yyDollar[2].str)
}
yyVAL.union = yyLOCAL
case 246:
@@ -12058,7 +12037,7 @@ yydefault:
var yyLOCAL Expr
//line sql.y:1743
{
- yyLOCAL = NewDateLiteral(yyDollar[2].str)
+ yyLOCAL = NewTimeLiteral(yyDollar[2].str)
}
yyVAL.union = yyLOCAL
case 247:
@@ -12066,275 +12045,275 @@ yydefault:
var yyLOCAL Expr
//line sql.y:1747
{
- yyLOCAL = NewTimeLiteral(yyDollar[2].str)
+ yyLOCAL = NewTimestampLiteral(yyDollar[2].str)
}
yyVAL.union = yyLOCAL
case 248:
- yyDollar = yyS[yypt-2 : yypt+1]
- var yyLOCAL Expr
-//line sql.y:1751
+ yyDollar = yyS[yypt-1 : yypt+1]
+//line sql.y:1753
{
- yyLOCAL = NewTimestampLiteral(yyDollar[2].str)
+ yyVAL.str = Armscii8Str
}
- yyVAL.union = yyLOCAL
case 249:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1757
{
- yyVAL.str = Armscii8Str
+ yyVAL.str = ASCIIStr
}
case 250:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1761
{
- yyVAL.str = ASCIIStr
+ yyVAL.str = Big5Str
}
case 251:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1765
{
- yyVAL.str = Big5Str
+ yyVAL.str = UBinaryStr
}
case 252:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1769
{
- yyVAL.str = UBinaryStr
+ yyVAL.str = Cp1250Str
}
case 253:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1773
{
- yyVAL.str = Cp1250Str
+ yyVAL.str = Cp1251Str
}
case 254:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1777
{
- yyVAL.str = Cp1251Str
+ yyVAL.str = Cp1256Str
}
case 255:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1781
{
- yyVAL.str = Cp1256Str
+ yyVAL.str = Cp1257Str
}
case 256:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1785
{
- yyVAL.str = Cp1257Str
+ yyVAL.str = Cp850Str
}
case 257:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1789
{
- yyVAL.str = Cp850Str
+ yyVAL.str = Cp852Str
}
case 258:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1793
{
- yyVAL.str = Cp852Str
+ yyVAL.str = Cp866Str
}
case 259:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1797
{
- yyVAL.str = Cp866Str
+ yyVAL.str = Cp932Str
}
case 260:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1801
{
- yyVAL.str = Cp932Str
+ yyVAL.str = Dec8Str
}
case 261:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1805
{
- yyVAL.str = Dec8Str
+ yyVAL.str = EucjpmsStr
}
case 262:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1809
{
- yyVAL.str = EucjpmsStr
+ yyVAL.str = EuckrStr
}
case 263:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1813
{
- yyVAL.str = EuckrStr
+ yyVAL.str = Gb18030Str
}
case 264:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1817
{
- yyVAL.str = Gb18030Str
+ yyVAL.str = Gb2312Str
}
case 265:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1821
{
- yyVAL.str = Gb2312Str
+ yyVAL.str = GbkStr
}
case 266:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1825
{
- yyVAL.str = GbkStr
+ yyVAL.str = Geostd8Str
}
case 267:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1829
{
- yyVAL.str = Geostd8Str
+ yyVAL.str = GreekStr
}
case 268:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1833
{
- yyVAL.str = GreekStr
+ yyVAL.str = HebrewStr
}
case 269:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1837
{
- yyVAL.str = HebrewStr
+ yyVAL.str = Hp8Str
}
case 270:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1841
{
- yyVAL.str = Hp8Str
+ yyVAL.str = Keybcs2Str
}
case 271:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1845
{
- yyVAL.str = Keybcs2Str
+ yyVAL.str = Koi8rStr
}
case 272:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1849
{
- yyVAL.str = Koi8rStr
+ yyVAL.str = Koi8uStr
}
case 273:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1853
{
- yyVAL.str = Koi8uStr
+ yyVAL.str = Latin1Str
}
case 274:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1857
{
- yyVAL.str = Latin1Str
+ yyVAL.str = Latin2Str
}
case 275:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1861
{
- yyVAL.str = Latin2Str
+ yyVAL.str = Latin5Str
}
case 276:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1865
{
- yyVAL.str = Latin5Str
+ yyVAL.str = Latin7Str
}
case 277:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1869
{
- yyVAL.str = Latin7Str
+ yyVAL.str = MacceStr
}
case 278:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1873
{
- yyVAL.str = MacceStr
+ yyVAL.str = MacromanStr
}
case 279:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1877
{
- yyVAL.str = MacromanStr
+ yyVAL.str = SjisStr
}
case 280:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1881
{
- yyVAL.str = SjisStr
+ yyVAL.str = Swe7Str
}
case 281:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1885
{
- yyVAL.str = Swe7Str
+ yyVAL.str = Tis620Str
}
case 282:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1889
{
- yyVAL.str = Tis620Str
+ yyVAL.str = Ucs2Str
}
case 283:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1893
{
- yyVAL.str = Ucs2Str
+ yyVAL.str = UjisStr
}
case 284:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1897
{
- yyVAL.str = UjisStr
+ yyVAL.str = Utf16Str
}
case 285:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1901
{
- yyVAL.str = Utf16Str
+ yyVAL.str = Utf16leStr
}
case 286:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1905
{
- yyVAL.str = Utf16leStr
+ yyVAL.str = Utf32Str
}
case 287:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1909
{
- yyVAL.str = Utf32Str
+ yyVAL.str = Utf8mb3Str
}
case 288:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1913
{
- yyVAL.str = Utf8mb3Str
+ yyVAL.str = Utf8mb4Str
}
case 289:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:1917
{
- yyVAL.str = Utf8mb4Str
+ yyVAL.str = Utf8mb3Str
}
- case 290:
+ case 292:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:1921
+ var yyLOCAL Expr
+//line sql.y:1927
{
- yyVAL.str = Utf8mb3Str
+ yyLOCAL = NewIntLiteral(yyDollar[1].str)
}
+ yyVAL.union = yyLOCAL
case 293:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
//line sql.y:1931
{
- yyLOCAL = NewIntLiteral(yyDollar[1].str)
+ yyLOCAL = NewFloatLiteral(yyDollar[1].str)
}
yyVAL.union = yyLOCAL
case 294:
@@ -12342,31 +12321,31 @@ yydefault:
var yyLOCAL Expr
//line sql.y:1935
{
- yyLOCAL = NewFloatLiteral(yyDollar[1].str)
+ yyLOCAL = NewDecimalLiteral(yyDollar[1].str)
}
yyVAL.union = yyLOCAL
case 295:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1939
+//line sql.y:1941
{
- yyLOCAL = NewDecimalLiteral(yyDollar[1].str)
+ yyLOCAL = yyDollar[1].exprUnion()
}
yyVAL.union = yyLOCAL
case 296:
- yyDollar = yyS[yypt-1 : yypt+1]
+ yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
//line sql.y:1945
{
- yyLOCAL = yyDollar[1].exprUnion()
+ yyLOCAL = AppendString(yyDollar[1].exprUnion(), yyDollar[2].str)
}
yyVAL.union = yyLOCAL
case 297:
- yyDollar = yyS[yypt-2 : yypt+1]
+ yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1949
+//line sql.y:1951
{
- yyLOCAL = AppendString(yyDollar[1].exprUnion(), yyDollar[2].str)
+ yyLOCAL = NewStrLiteral(yyDollar[1].str)
}
yyVAL.union = yyLOCAL
case 298:
@@ -12374,23 +12353,23 @@ yydefault:
var yyLOCAL Expr
//line sql.y:1955
{
- yyLOCAL = NewStrLiteral(yyDollar[1].str)
+ yyLOCAL = &UnaryExpr{Operator: NStringOp, Expr: NewStrLiteral(yyDollar[1].str)}
}
yyVAL.union = yyLOCAL
case 299:
- yyDollar = yyS[yypt-1 : yypt+1]
+ yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
//line sql.y:1959
{
- yyLOCAL = &UnaryExpr{Operator: NStringOp, Expr: NewStrLiteral(yyDollar[1].str)}
+ yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewStrLiteral(yyDollar[2].str)}
}
yyVAL.union = yyLOCAL
case 300:
- yyDollar = yyS[yypt-2 : yypt+1]
+ yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:1963
+//line sql.y:1965
{
- yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewStrLiteral(yyDollar[2].str)}
+ yyLOCAL = yyDollar[1].exprUnion()
}
yyVAL.union = yyLOCAL
case 301:
@@ -12398,70 +12377,68 @@ yydefault:
var yyLOCAL Expr
//line sql.y:1969
{
- yyLOCAL = yyDollar[1].exprUnion()
+ yyLOCAL = parseBindVariable(yylex, yyDollar[1].str[1:])
}
yyVAL.union = yyLOCAL
case 302:
- yyDollar = yyS[yypt-1 : yypt+1]
- var yyLOCAL Expr
-//line sql.y:1973
- {
- yyLOCAL = parseBindVariable(yylex, yyDollar[1].str[1:])
- }
- yyVAL.union = yyLOCAL
- case 303:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL ColumnKeyOption
-//line sql.y:1979
+//line sql.y:1975
{
yyLOCAL = ColKeyPrimary
}
yyVAL.union = yyLOCAL
- case 304:
+ case 303:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ColumnKeyOption
-//line sql.y:1983
+//line sql.y:1979
{
yyLOCAL = ColKeyUnique
}
yyVAL.union = yyLOCAL
- case 305:
+ case 304:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL ColumnKeyOption
-//line sql.y:1987
+//line sql.y:1983
{
yyLOCAL = ColKeyUniqueKey
}
yyVAL.union = yyLOCAL
- case 306:
+ case 305:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ColumnKeyOption
-//line sql.y:1991
+//line sql.y:1987
{
yyLOCAL = ColKey
}
yyVAL.union = yyLOCAL
- case 307:
+ case 306:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:1997
+//line sql.y:1993
{
yyVAL.columnType = yyDollar[1].columnType
yyVAL.columnType.Unsigned = yyDollar[2].booleanUnion()
yyVAL.columnType.Zerofill = yyDollar[3].booleanUnion()
}
- case 311:
+ case 310:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2008
+//line sql.y:2004
{
yyVAL.columnType = yyDollar[1].columnType
yyVAL.columnType.Length = yyDollar[2].intPtrUnion()
}
- case 312:
+ case 311:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2013
+//line sql.y:2009
{
yyVAL.columnType = yyDollar[1].columnType
}
+ case 312:
+ yyDollar = yyS[yypt-1 : yypt+1]
+//line sql.y:2015
+ {
+ yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
+ }
case 313:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:2019
@@ -12511,14 +12488,16 @@ yydefault:
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 321:
- yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2051
+ yyDollar = yyS[yypt-2 : yypt+1]
+//line sql.y:2053
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
+ yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length
+ yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale
}
case 322:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2057
+//line sql.y:2059
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length
@@ -12526,7 +12505,7 @@ yydefault:
}
case 323:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2063
+//line sql.y:2065
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length
@@ -12534,7 +12513,7 @@ yydefault:
}
case 324:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2069
+//line sql.y:2071
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length
@@ -12542,7 +12521,7 @@ yydefault:
}
case 325:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2075
+//line sql.y:2077
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length
@@ -12550,7 +12529,7 @@ yydefault:
}
case 326:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2081
+//line sql.y:2083
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length
@@ -12558,25 +12537,23 @@ yydefault:
}
case 327:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2087
+//line sql.y:2089
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length
yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale
}
case 328:
- yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2093
+ yyDollar = yyS[yypt-1 : yypt+1]
+//line sql.y:2097
{
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
- yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length
- yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale
}
case 329:
- yyDollar = yyS[yypt-1 : yypt+1]
+ yyDollar = yyS[yypt-2 : yypt+1]
//line sql.y:2101
{
- yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
+ yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()}
}
case 330:
yyDollar = yyS[yypt-2 : yypt+1]
@@ -12597,30 +12574,30 @@ yydefault:
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()}
}
case 333:
- yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2117
+ yyDollar = yyS[yypt-3 : yypt+1]
+//line sql.y:2119
{
- yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()}
+ yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion(), Charset: yyDollar[3].columnCharset}
}
case 334:
yyDollar = yyS[yypt-3 : yypt+1]
//line sql.y:2123
{
- yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion(), Charset: yyDollar[3].columnCharset}
+ // CHAR BYTE is an alias for binary. See also:
+ // https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html
+ yyVAL.columnType = &ColumnType{Type: "binary", Length: yyDollar[2].intPtrUnion()}
}
case 335:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:2127
+//line sql.y:2129
{
- // CHAR BYTE is an alias for binary. See also:
- // https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html
- yyVAL.columnType = &ColumnType{Type: "binary", Length: yyDollar[2].intPtrUnion()}
+ yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion(), Charset: yyDollar[3].columnCharset}
}
case 336:
- yyDollar = yyS[yypt-3 : yypt+1]
+ yyDollar = yyS[yypt-2 : yypt+1]
//line sql.y:2133
{
- yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion(), Charset: yyDollar[3].columnCharset}
+ yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()}
}
case 337:
yyDollar = yyS[yypt-2 : yypt+1]
@@ -12632,7 +12609,7 @@ yydefault:
yyDollar = yyS[yypt-2 : yypt+1]
//line sql.y:2141
{
- yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()}
+ yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset}
}
case 339:
yyDollar = yyS[yypt-2 : yypt+1]
@@ -12653,10 +12630,10 @@ yydefault:
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset}
}
case 342:
- yyDollar = yyS[yypt-2 : yypt+1]
+ yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:2157
{
- yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset}
+ yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 343:
yyDollar = yyS[yypt-1 : yypt+1]
@@ -12683,28 +12660,28 @@ yydefault:
yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 347:
- yyDollar = yyS[yypt-1 : yypt+1]
+ yyDollar = yyS[yypt-5 : yypt+1]
//line sql.y:2177
{
- yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
+ yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].columnCharset}
}
case 348:
- yyDollar = yyS[yypt-5 : yypt+1]
+ yyDollar = yyS[yypt-2 : yypt+1]
//line sql.y:2181
{
- yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].columnCharset}
+ yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()}
}
case 349:
- yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2185
+ yyDollar = yyS[yypt-5 : yypt+1]
+//line sql.y:2186
{
- yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()}
+ yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].columnCharset}
}
case 350:
- yyDollar = yyS[yypt-5 : yypt+1]
-//line sql.y:2190
+ yyDollar = yyS[yypt-1 : yypt+1]
+//line sql.y:2192
{
- yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].columnCharset}
+ yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
}
case 351:
yyDollar = yyS[yypt-1 : yypt+1]
@@ -12750,392 +12727,392 @@ yydefault:
}
case 358:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2224
- {
- yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)}
- }
- case 359:
- yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2230
+//line sql.y:2226
{
yyVAL.strs = make([]string, 0, 4)
yyVAL.strs = append(yyVAL.strs, encodeSQLString(yyDollar[1].str))
}
- case 360:
+ case 359:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:2235
+//line sql.y:2231
{
yyVAL.strs = append(yyDollar[1].strs, encodeSQLString(yyDollar[3].str))
}
- case 361:
+ case 360:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *int
-//line sql.y:2240
+//line sql.y:2236
{
yyLOCAL = nil
}
yyVAL.union = yyLOCAL
- case 362:
+ case 361:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *int
-//line sql.y:2244
+//line sql.y:2240
{
yyLOCAL = ptr.Of(convertStringToInt(yyDollar[2].str))
}
yyVAL.union = yyLOCAL
- case 363:
+ case 362:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:2249
+//line sql.y:2245
{
yyVAL.LengthScaleOption = LengthScaleOption{}
}
- case 364:
+ case 363:
yyDollar = yyS[yypt-5 : yypt+1]
-//line sql.y:2253
+//line sql.y:2249
{
yyVAL.LengthScaleOption = LengthScaleOption{
Length: ptr.Of(convertStringToInt(yyDollar[2].str)),
Scale: ptr.Of(convertStringToInt(yyDollar[4].str)),
}
}
- case 365:
+ case 364:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2262
+//line sql.y:2258
{
yyVAL.LengthScaleOption = yyDollar[1].LengthScaleOption
}
- case 366:
+ case 365:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:2266
+//line sql.y:2262
{
yyVAL.LengthScaleOption = LengthScaleOption{
Length: ptr.Of(convertStringToInt(yyDollar[2].str)),
}
}
- case 367:
+ case 366:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:2273
+//line sql.y:2269
{
yyVAL.LengthScaleOption = LengthScaleOption{}
}
- case 368:
+ case 367:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:2277
+//line sql.y:2273
{
yyVAL.LengthScaleOption = LengthScaleOption{
Length: ptr.Of(convertStringToInt(yyDollar[2].str)),
}
}
- case 369:
+ case 368:
yyDollar = yyS[yypt-5 : yypt+1]
-//line sql.y:2283
+//line sql.y:2279
{
yyVAL.LengthScaleOption = LengthScaleOption{
Length: ptr.Of(convertStringToInt(yyDollar[2].str)),
Scale: ptr.Of(convertStringToInt(yyDollar[4].str)),
}
}
- case 370:
+ case 369:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:2291
+//line sql.y:2287
{
yyLOCAL = false
}
yyVAL.union = yyLOCAL
- case 371:
+ case 370:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:2295
+//line sql.y:2291
{
yyLOCAL = true
}
yyVAL.union = yyLOCAL
- case 372:
+ case 371:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:2299
+//line sql.y:2295
{
yyLOCAL = false
}
yyVAL.union = yyLOCAL
- case 373:
+ case 372:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:2304
+//line sql.y:2300
{
yyLOCAL = false
}
yyVAL.union = yyLOCAL
- case 374:
+ case 373:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:2308
+//line sql.y:2304
{
yyLOCAL = true
}
yyVAL.union = yyLOCAL
- case 375:
+ case 374:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:2313
+//line sql.y:2309
{
yyVAL.columnCharset = ColumnCharset{}
}
- case 376:
+ case 375:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:2317
+//line sql.y:2313
{
yyVAL.columnCharset = ColumnCharset{Name: string(yyDollar[2].identifierCI.String()), Binary: yyDollar[3].booleanUnion()}
}
- case 377:
+ case 376:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:2321
+//line sql.y:2317
{
yyVAL.columnCharset = ColumnCharset{Name: encodeSQLString(yyDollar[2].str), Binary: yyDollar[3].booleanUnion()}
}
- case 378:
+ case 377:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2325
+//line sql.y:2321
{
yyVAL.columnCharset = ColumnCharset{Name: string(yyDollar[2].str)}
}
- case 379:
+ case 378:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2329
+//line sql.y:2325
{
// ASCII: Shorthand for CHARACTER SET latin1.
yyVAL.columnCharset = ColumnCharset{Name: "latin1", Binary: yyDollar[2].booleanUnion()}
}
- case 380:
+ case 379:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2334
+//line sql.y:2330
{
// UNICODE: Shorthand for CHARACTER SET ucs2.
yyVAL.columnCharset = ColumnCharset{Name: "ucs2", Binary: yyDollar[2].booleanUnion()}
}
- case 381:
+ case 380:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2339
+//line sql.y:2335
{
// BINARY: Shorthand for default CHARACTER SET but with binary collation
yyVAL.columnCharset = ColumnCharset{Name: "", Binary: true}
}
- case 382:
+ case 381:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2344
+//line sql.y:2340
{
// BINARY ASCII: Shorthand for CHARACTER SET latin1 with binary collation
yyVAL.columnCharset = ColumnCharset{Name: "latin1", Binary: true}
}
- case 383:
+ case 382:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2349
+//line sql.y:2345
{
// BINARY UNICODE: Shorthand for CHARACTER SET ucs2 with binary collation
yyVAL.columnCharset = ColumnCharset{Name: "ucs2", Binary: true}
}
- case 384:
+ case 383:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:2355
+//line sql.y:2351
{
yyLOCAL = false
}
yyVAL.union = yyLOCAL
- case 385:
+ case 384:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:2359
+//line sql.y:2355
{
yyLOCAL = true
}
yyVAL.union = yyLOCAL
- case 386:
+ case 385:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:2364
+//line sql.y:2360
{
yyVAL.str = ""
}
- case 387:
+ case 386:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2368
+//line sql.y:2364
{
yyVAL.str = string(yyDollar[2].identifierCI.String())
}
- case 388:
+ case 387:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2372
+//line sql.y:2368
{
yyVAL.str = encodeSQLString(yyDollar[2].str)
}
- case 389:
+ case 388:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *IndexDefinition
-//line sql.y:2378
+//line sql.y:2374
{
yyLOCAL = &IndexDefinition{Info: yyDollar[1].indexInfoUnion(), Columns: yyDollar[3].indexColumnsUnion(), Options: yyDollar[5].indexOptionsUnion()}
}
yyVAL.union = yyLOCAL
- case 390:
+ case 389:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL []*IndexOption
-//line sql.y:2383
+//line sql.y:2379
{
yyLOCAL = nil
}
yyVAL.union = yyLOCAL
- case 391:
+ case 390:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []*IndexOption
-//line sql.y:2387
+//line sql.y:2383
{
yyLOCAL = yyDollar[1].indexOptionsUnion()
}
yyVAL.union = yyLOCAL
- case 392:
+ case 391:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []*IndexOption
-//line sql.y:2393
+//line sql.y:2389
{
yyLOCAL = []*IndexOption{yyDollar[1].indexOptionUnion()}
}
yyVAL.union = yyLOCAL
- case 393:
+ case 392:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2397
+//line sql.y:2393
{
yySLICE := (*[]*IndexOption)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[2].indexOptionUnion())
}
- case 394:
+ case 393:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *IndexOption
-//line sql.y:2403
+//line sql.y:2399
{
yyLOCAL = yyDollar[1].indexOptionUnion()
}
yyVAL.union = yyLOCAL
- case 395:
+ case 394:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *IndexOption
-//line sql.y:2407
+//line sql.y:2403
{
// should not be string
yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
}
yyVAL.union = yyLOCAL
- case 396:
+ case 395:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *IndexOption
-//line sql.y:2412
+//line sql.y:2408
{
yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[2].str)}
}
yyVAL.union = yyLOCAL
- case 397:
+ case 396:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *IndexOption
-//line sql.y:2416
+//line sql.y:2412
{
yyLOCAL = &IndexOption{Name: string(yyDollar[1].str)}
}
yyVAL.union = yyLOCAL
- case 398:
+ case 397:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *IndexOption
-//line sql.y:2420
+//line sql.y:2416
{
yyLOCAL = &IndexOption{Name: string(yyDollar[1].str)}
}
yyVAL.union = yyLOCAL
- case 399:
+ case 398:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *IndexOption
-//line sql.y:2424
+//line sql.y:2420
{
yyLOCAL = &IndexOption{Name: string(yyDollar[1].str) + " " + string(yyDollar[2].str), String: yyDollar[3].identifierCI.String()}
}
yyVAL.union = yyLOCAL
- case 400:
+ case 399:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *IndexOption
-//line sql.y:2428
+//line sql.y:2424
{
yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)}
}
yyVAL.union = yyLOCAL
- case 401:
+ case 400:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *IndexOption
-//line sql.y:2432
+//line sql.y:2428
{
yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)}
}
yyVAL.union = yyLOCAL
- case 402:
+ case 401:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:2438
+//line sql.y:2434
{
yyVAL.str = ""
}
- case 403:
+ case 402:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2442
+//line sql.y:2438
{
yyVAL.str = string(yyDollar[1].str)
}
- case 404:
+ case 403:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *IndexInfo
-//line sql.y:2448
+//line sql.y:2444
{
yyLOCAL = &IndexInfo{Type: IndexTypePrimary, ConstraintName: NewIdentifierCI(yyDollar[1].str), Name: NewIdentifierCI("PRIMARY")}
}
yyVAL.union = yyLOCAL
- case 405:
+ case 404:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *IndexInfo
-//line sql.y:2452
+//line sql.y:2448
{
yyLOCAL = &IndexInfo{Type: IndexTypeSpatial, Name: NewIdentifierCI(yyDollar[3].str)}
}
yyVAL.union = yyLOCAL
- case 406:
+ case 405:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *IndexInfo
-//line sql.y:2456
+//line sql.y:2452
{
yyLOCAL = &IndexInfo{Type: IndexTypeFullText, Name: NewIdentifierCI(yyDollar[3].str)}
}
yyVAL.union = yyLOCAL
- case 407:
+ case 406:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *IndexInfo
-//line sql.y:2460
+//line sql.y:2456
{
yyLOCAL = &IndexInfo{Type: IndexTypeUnique, ConstraintName: NewIdentifierCI(yyDollar[1].str), Name: NewIdentifierCI(yyDollar[4].str)}
}
yyVAL.union = yyLOCAL
- case 408:
+ case 407:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *IndexInfo
-//line sql.y:2464
+//line sql.y:2460
{
yyLOCAL = &IndexInfo{Type: IndexTypeDefault, Name: NewIdentifierCI(yyDollar[2].str)}
}
yyVAL.union = yyLOCAL
- case 409:
+ case 408:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:2469
+//line sql.y:2465
{
yyVAL.str = ""
}
- case 410:
+ case 409:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2473
+//line sql.y:2469
{
yyVAL.str = yyDollar[2].str
}
+ case 410:
+ yyDollar = yyS[yypt-1 : yypt+1]
+//line sql.y:2475
+ {
+ yyVAL.str = string(yyDollar[1].str)
+ }
case 411:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:2479
@@ -13150,7 +13127,7 @@ yydefault:
}
case 413:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2487
+//line sql.y:2489
{
yyVAL.str = string(yyDollar[1].str)
}
@@ -13161,22 +13138,22 @@ yydefault:
yyVAL.str = string(yyDollar[1].str)
}
case 415:
- yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2497
+ yyDollar = yyS[yypt-0 : yypt+1]
+//line sql.y:2498
{
- yyVAL.str = string(yyDollar[1].str)
+ yyVAL.str = ""
}
case 416:
- yyDollar = yyS[yypt-0 : yypt+1]
+ yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:2502
{
- yyVAL.str = ""
+ yyVAL.str = yyDollar[1].str
}
case 417:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2506
+//line sql.y:2508
{
- yyVAL.str = yyDollar[1].str
+ yyVAL.str = string(yyDollar[1].str)
}
case 418:
yyDollar = yyS[yypt-1 : yypt+1]
@@ -13185,365 +13162,367 @@ yydefault:
yyVAL.str = string(yyDollar[1].str)
}
case 419:
- yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2516
- {
- yyVAL.str = string(yyDollar[1].str)
- }
- case 420:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:2521
+//line sql.y:2517
{
yyVAL.str = ""
}
- case 421:
+ case 420:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2525
+//line sql.y:2521
{
yyVAL.str = string(yyDollar[1].identifierCI.String())
}
- case 422:
+ case 421:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []*IndexColumn
-//line sql.y:2531
+//line sql.y:2527
{
yyLOCAL = []*IndexColumn{yyDollar[1].indexColumnUnion()}
}
yyVAL.union = yyLOCAL
- case 423:
+ case 422:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:2535
+//line sql.y:2531
{
yySLICE := (*[]*IndexColumn)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].indexColumnUnion())
}
- case 424:
+ case 423:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *IndexColumn
-//line sql.y:2541
+//line sql.y:2537
{
yyLOCAL = &IndexColumn{Column: yyDollar[1].identifierCI, Length: yyDollar[2].intPtrUnion(), Direction: yyDollar[3].orderDirectionUnion()}
}
yyVAL.union = yyLOCAL
- case 425:
+ case 424:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *IndexColumn
-//line sql.y:2545
+//line sql.y:2541
{
yyLOCAL = &IndexColumn{Expression: yyDollar[2].exprUnion(), Direction: yyDollar[4].orderDirectionUnion()}
}
yyVAL.union = yyLOCAL
- case 426:
+ case 425:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *ConstraintDefinition
-//line sql.y:2551
+//line sql.y:2547
{
yyLOCAL = &ConstraintDefinition{Name: yyDollar[2].identifierCI, Details: yyDollar[3].constraintInfoUnion()}
}
yyVAL.union = yyLOCAL
- case 427:
+ case 426:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *ConstraintDefinition
-//line sql.y:2555
+//line sql.y:2551
{
yyLOCAL = &ConstraintDefinition{Details: yyDollar[1].constraintInfoUnion()}
}
yyVAL.union = yyLOCAL
- case 428:
+ case 427:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *ConstraintDefinition
-//line sql.y:2561
+//line sql.y:2557
{
yyLOCAL = &ConstraintDefinition{Name: yyDollar[2].identifierCI, Details: yyDollar[3].constraintInfoUnion()}
}
yyVAL.union = yyLOCAL
- case 429:
+ case 428:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *ConstraintDefinition
-//line sql.y:2565
+//line sql.y:2561
{
yyLOCAL = &ConstraintDefinition{Details: yyDollar[1].constraintInfoUnion()}
}
yyVAL.union = yyLOCAL
- case 430:
+ case 429:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL ConstraintInfo
-//line sql.y:2571
+//line sql.y:2567
{
yyLOCAL = &ForeignKeyDefinition{IndexName: NewIdentifierCI(yyDollar[3].str), Source: yyDollar[5].columnsUnion(), ReferenceDefinition: yyDollar[7].referenceDefinitionUnion()}
}
yyVAL.union = yyLOCAL
- case 431:
+ case 430:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL *ReferenceDefinition
-//line sql.y:2577
+//line sql.y:2573
{
yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion()}
}
yyVAL.union = yyLOCAL
- case 432:
+ case 431:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL *ReferenceDefinition
-//line sql.y:2581
+//line sql.y:2577
{
yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnDelete: yyDollar[7].referenceActionUnion()}
}
yyVAL.union = yyLOCAL
- case 433:
+ case 432:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL *ReferenceDefinition
-//line sql.y:2585
+//line sql.y:2581
{
yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnUpdate: yyDollar[7].referenceActionUnion()}
}
yyVAL.union = yyLOCAL
- case 434:
+ case 433:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL *ReferenceDefinition
-//line sql.y:2589
+//line sql.y:2585
{
yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnDelete: yyDollar[7].referenceActionUnion(), OnUpdate: yyDollar[8].referenceActionUnion()}
}
yyVAL.union = yyLOCAL
- case 435:
+ case 434:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL *ReferenceDefinition
-//line sql.y:2593
+//line sql.y:2589
{
yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnUpdate: yyDollar[7].referenceActionUnion(), OnDelete: yyDollar[8].referenceActionUnion()}
}
yyVAL.union = yyLOCAL
- case 436:
+ case 435:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *ReferenceDefinition
-//line sql.y:2598
+//line sql.y:2594
{
yyLOCAL = nil
}
yyVAL.union = yyLOCAL
- case 437:
+ case 436:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *ReferenceDefinition
-//line sql.y:2602
+//line sql.y:2598
{
yyLOCAL = yyDollar[1].referenceDefinitionUnion()
}
yyVAL.union = yyLOCAL
- case 438:
+ case 437:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL ConstraintInfo
-//line sql.y:2608
+//line sql.y:2604
{
yyLOCAL = &CheckConstraintDefinition{Expr: yyDollar[3].exprUnion(), Enforced: yyDollar[5].booleanUnion()}
}
yyVAL.union = yyLOCAL
- case 439:
+ case 438:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL MatchAction
-//line sql.y:2614
+//line sql.y:2610
{
yyLOCAL = yyDollar[2].matchActionUnion()
}
yyVAL.union = yyLOCAL
- case 440:
+ case 439:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL MatchAction
-//line sql.y:2620
+//line sql.y:2616
{
yyLOCAL = Full
}
yyVAL.union = yyLOCAL
- case 441:
+ case 440:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL MatchAction
-//line sql.y:2624
+//line sql.y:2620
{
yyLOCAL = Partial
}
yyVAL.union = yyLOCAL
- case 442:
+ case 441:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL MatchAction
-//line sql.y:2628
+//line sql.y:2624
{
yyLOCAL = Simple
}
yyVAL.union = yyLOCAL
- case 443:
+ case 442:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL MatchAction
-//line sql.y:2633
+//line sql.y:2629
{
yyLOCAL = DefaultMatch
}
yyVAL.union = yyLOCAL
- case 444:
+ case 443:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL MatchAction
-//line sql.y:2637
+//line sql.y:2633
{
yyLOCAL = yyDollar[1].matchActionUnion()
}
yyVAL.union = yyLOCAL
- case 445:
+ case 444:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL ReferenceAction
-//line sql.y:2643
+//line sql.y:2639
{
yyLOCAL = yyDollar[3].referenceActionUnion()
}
yyVAL.union = yyLOCAL
- case 446:
+ case 445:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL ReferenceAction
-//line sql.y:2649
+//line sql.y:2645
{
yyLOCAL = yyDollar[3].referenceActionUnion()
}
yyVAL.union = yyLOCAL
- case 447:
+ case 446:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ReferenceAction
-//line sql.y:2655
+//line sql.y:2651
{
yyLOCAL = Restrict
}
yyVAL.union = yyLOCAL
- case 448:
+ case 447:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ReferenceAction
-//line sql.y:2659
+//line sql.y:2655
{
yyLOCAL = Cascade
}
yyVAL.union = yyLOCAL
- case 449:
+ case 448:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL ReferenceAction
-//line sql.y:2663
+//line sql.y:2659
{
yyLOCAL = NoAction
}
yyVAL.union = yyLOCAL
- case 450:
+ case 449:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL ReferenceAction
-//line sql.y:2667
+//line sql.y:2663
{
yyLOCAL = SetDefault
}
yyVAL.union = yyLOCAL
- case 451:
+ case 450:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL ReferenceAction
-//line sql.y:2671
+//line sql.y:2667
{
yyLOCAL = SetNull
}
yyVAL.union = yyLOCAL
- case 452:
+ case 451:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:2676
+//line sql.y:2672
{
yyVAL.str = ""
}
- case 453:
+ case 452:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2680
+//line sql.y:2676
{
yyVAL.str = string(yyDollar[1].str)
}
- case 454:
+ case 453:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2684
+//line sql.y:2680
{
yyVAL.str = string(yyDollar[1].str)
}
- case 455:
+ case 454:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:2690
+//line sql.y:2686
{
yyLOCAL = true
}
yyVAL.union = yyLOCAL
- case 456:
+ case 455:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL bool
-//line sql.y:2694
+//line sql.y:2690
{
yyLOCAL = false
}
yyVAL.union = yyLOCAL
- case 457:
+ case 456:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:2699
+//line sql.y:2695
{
yyLOCAL = true
}
yyVAL.union = yyLOCAL
- case 458:
+ case 457:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:2703
+//line sql.y:2699
{
yyLOCAL = yyDollar[1].booleanUnion()
}
yyVAL.union = yyLOCAL
- case 459:
+ case 458:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL TableOptions
-//line sql.y:2708
+//line sql.y:2704
{
yyLOCAL = nil
}
yyVAL.union = yyLOCAL
- case 460:
+ case 459:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL TableOptions
-//line sql.y:2712
+//line sql.y:2708
{
yyLOCAL = yyDollar[1].tableOptionsUnion()
}
yyVAL.union = yyLOCAL
- case 461:
+ case 460:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL TableOptions
-//line sql.y:2718
+//line sql.y:2714
{
yyLOCAL = TableOptions{yyDollar[1].tableOptionUnion()}
}
yyVAL.union = yyLOCAL
- case 462:
+ case 461:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:2722
+//line sql.y:2718
{
yySLICE := (*TableOptions)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].tableOptionUnion())
}
- case 463:
+ case 462:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2726
+//line sql.y:2722
{
yySLICE := (*TableOptions)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[2].tableOptionUnion())
}
- case 464:
+ case 463:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL TableOptions
-//line sql.y:2732
+//line sql.y:2728
{
yyLOCAL = TableOptions{yyDollar[1].tableOptionUnion()}
}
yyVAL.union = yyLOCAL
- case 465:
+ case 464:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2736
+//line sql.y:2732
{
yySLICE := (*TableOptions)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[2].tableOptionUnion())
}
+ case 465:
+ yyDollar = yyS[yypt-3 : yypt+1]
+ var yyLOCAL *TableOption
+//line sql.y:2738
+ {
+ yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
+ }
+ yyVAL.union = yyLOCAL
case 466:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
@@ -13561,11 +13540,11 @@ yydefault:
}
yyVAL.union = yyLOCAL
case 468:
- yyDollar = yyS[yypt-3 : yypt+1]
+ yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *TableOption
//line sql.y:2750
{
- yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
+ yyLOCAL = &TableOption{Name: (string(yyDollar[2].str)), String: yyDollar[4].str, CaseSensitive: true}
}
yyVAL.union = yyLOCAL
case 469:
@@ -13573,15 +13552,15 @@ yydefault:
var yyLOCAL *TableOption
//line sql.y:2754
{
- yyLOCAL = &TableOption{Name: (string(yyDollar[2].str)), String: yyDollar[4].str, CaseSensitive: true}
+ yyLOCAL = &TableOption{Name: string(yyDollar[2].str), String: yyDollar[4].str, CaseSensitive: true}
}
yyVAL.union = yyLOCAL
case 470:
- yyDollar = yyS[yypt-4 : yypt+1]
+ yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
//line sql.y:2758
{
- yyLOCAL = &TableOption{Name: string(yyDollar[2].str), String: yyDollar[4].str, CaseSensitive: true}
+ yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
}
yyVAL.union = yyLOCAL
case 471:
@@ -13589,7 +13568,7 @@ yydefault:
var yyLOCAL *TableOption
//line sql.y:2762
{
- yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
+ yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)}
}
yyVAL.union = yyLOCAL
case 472:
@@ -13609,11 +13588,11 @@ yydefault:
}
yyVAL.union = yyLOCAL
case 474:
- yyDollar = yyS[yypt-3 : yypt+1]
+ yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *TableOption
//line sql.y:2774
{
- yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)}
+ yyLOCAL = &TableOption{Name: (string(yyDollar[1].str) + " " + string(yyDollar[2].str)), Value: NewStrLiteral(yyDollar[4].str)}
}
yyVAL.union = yyLOCAL
case 475:
@@ -13625,11 +13604,11 @@ yydefault:
}
yyVAL.union = yyLOCAL
case 476:
- yyDollar = yyS[yypt-4 : yypt+1]
+ yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *TableOption
//line sql.y:2782
{
- yyLOCAL = &TableOption{Name: (string(yyDollar[1].str) + " " + string(yyDollar[2].str)), Value: NewStrLiteral(yyDollar[4].str)}
+ yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
}
yyVAL.union = yyLOCAL
case 477:
@@ -13637,7 +13616,7 @@ yydefault:
var yyLOCAL *TableOption
//line sql.y:2786
{
- yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
+ yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)}
}
yyVAL.union = yyLOCAL
case 478:
@@ -13645,7 +13624,7 @@ yydefault:
var yyLOCAL *TableOption
//line sql.y:2790
{
- yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)}
+ yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: yyDollar[3].identifierCS.String(), CaseSensitive: true}
}
yyVAL.union = yyLOCAL
case 479:
@@ -13653,7 +13632,7 @@ yydefault:
var yyLOCAL *TableOption
//line sql.y:2794
{
- yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: yyDollar[3].identifierCS.String(), CaseSensitive: true}
+ yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)}
}
yyVAL.union = yyLOCAL
case 480:
@@ -13661,7 +13640,7 @@ yydefault:
var yyLOCAL *TableOption
//line sql.y:2798
{
- yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)}
+ yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)}
}
yyVAL.union = yyLOCAL
case 481:
@@ -13669,7 +13648,7 @@ yydefault:
var yyLOCAL *TableOption
//line sql.y:2802
{
- yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)}
+ yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
}
yyVAL.union = yyLOCAL
case 482:
@@ -13701,7 +13680,7 @@ yydefault:
var yyLOCAL *TableOption
//line sql.y:2818
{
- yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
+ yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)}
}
yyVAL.union = yyLOCAL
case 486:
@@ -13709,7 +13688,7 @@ yydefault:
var yyLOCAL *TableOption
//line sql.y:2822
{
- yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)}
+ yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)}
}
yyVAL.union = yyLOCAL
case 487:
@@ -13717,7 +13696,7 @@ yydefault:
var yyLOCAL *TableOption
//line sql.y:2826
{
- yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)}
+ yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)}
}
yyVAL.union = yyLOCAL
case 488:
@@ -13725,7 +13704,7 @@ yydefault:
var yyLOCAL *TableOption
//line sql.y:2830
{
- yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)}
+ yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)}
}
yyVAL.union = yyLOCAL
case 489:
@@ -13733,7 +13712,7 @@ yydefault:
var yyLOCAL *TableOption
//line sql.y:2834
{
- yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)}
+ yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
}
yyVAL.union = yyLOCAL
case 490:
@@ -13741,7 +13720,7 @@ yydefault:
var yyLOCAL *TableOption
//line sql.y:2838
{
- yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
+ yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)}
}
yyVAL.union = yyLOCAL
case 491:
@@ -13749,7 +13728,7 @@ yydefault:
var yyLOCAL *TableOption
//line sql.y:2842
{
- yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)}
+ yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
}
yyVAL.union = yyLOCAL
case 492:
@@ -13757,7 +13736,7 @@ yydefault:
var yyLOCAL *TableOption
//line sql.y:2846
{
- yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
+ yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)}
}
yyVAL.union = yyLOCAL
case 493:
@@ -13765,38 +13744,36 @@ yydefault:
var yyLOCAL *TableOption
//line sql.y:2850
{
- yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)}
+ yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
}
yyVAL.union = yyLOCAL
case 494:
- yyDollar = yyS[yypt-3 : yypt+1]
+ yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *TableOption
//line sql.y:2854
{
- yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)}
+ yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: (yyDollar[3].identifierCI.String() + yyDollar[4].str), CaseSensitive: true}
}
yyVAL.union = yyLOCAL
case 495:
- yyDollar = yyS[yypt-4 : yypt+1]
+ yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *TableOption
//line sql.y:2858
{
- yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: (yyDollar[3].identifierCI.String() + yyDollar[4].str), CaseSensitive: true}
+ yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Tables: yyDollar[4].tableNamesUnion()}
}
yyVAL.union = yyLOCAL
case 496:
- yyDollar = yyS[yypt-5 : yypt+1]
- var yyLOCAL *TableOption
-//line sql.y:2862
+ yyDollar = yyS[yypt-0 : yypt+1]
+//line sql.y:2863
{
- yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Tables: yyDollar[4].tableNamesUnion()}
+ yyVAL.str = ""
}
- yyVAL.union = yyLOCAL
case 497:
- yyDollar = yyS[yypt-0 : yypt+1]
+ yyDollar = yyS[yypt-2 : yypt+1]
//line sql.y:2867
{
- yyVAL.str = ""
+ yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str)
}
case 498:
yyDollar = yyS[yypt-2 : yypt+1]
@@ -13804,186 +13781,188 @@ yydefault:
{
yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str)
}
- case 499:
- yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2875
+ case 508:
+ yyDollar = yyS[yypt-3 : yypt+1]
+//line sql.y:2890
{
- yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str)
+ yyVAL.str = String(TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS})
}
case 509:
- yyDollar = yyS[yypt-3 : yypt+1]
+ yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:2894
{
- yyVAL.str = String(TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS})
+ yyVAL.str = yyDollar[1].identifierCI.String()
}
case 510:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:2898
{
- yyVAL.str = yyDollar[1].identifierCI.String()
+ yyVAL.str = encodeSQLString(yyDollar[1].str)
}
case 511:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:2902
- {
- yyVAL.str = encodeSQLString(yyDollar[1].str)
- }
- case 512:
- yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:2906
{
yyVAL.str = string(yyDollar[1].str)
}
- case 513:
+ case 512:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:2911
+//line sql.y:2907
{
yyVAL.str = ""
}
- case 515:
+ case 514:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:2917
+//line sql.y:2913
{
yyLOCAL = false
}
yyVAL.union = yyLOCAL
- case 516:
+ case 515:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:2921
+//line sql.y:2917
{
yyLOCAL = true
}
yyVAL.union = yyLOCAL
- case 517:
+ case 516:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *ColName
-//line sql.y:2926
+//line sql.y:2922
{
yyLOCAL = nil
}
yyVAL.union = yyLOCAL
- case 518:
+ case 517:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ColName
-//line sql.y:2930
+//line sql.y:2926
{
yyLOCAL = yyDollar[2].colNameUnion()
}
yyVAL.union = yyLOCAL
- case 519:
+ case 518:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:2935
+//line sql.y:2931
{
yyVAL.str = ""
}
- case 520:
+ case 519:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:2939
+//line sql.y:2935
{
yyVAL.str = string(yyDollar[2].str)
}
- case 521:
+ case 520:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *Literal
-//line sql.y:2944
+//line sql.y:2940
{
yyLOCAL = nil
}
yyVAL.union = yyLOCAL
- case 522:
+ case 521:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *Literal
-//line sql.y:2948
+//line sql.y:2944
{
yyLOCAL = NewIntLiteral(yyDollar[2].str)
}
yyVAL.union = yyLOCAL
- case 523:
+ case 522:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *Literal
-//line sql.y:2952
+//line sql.y:2948
{
yyLOCAL = NewDecimalLiteral(yyDollar[2].str)
}
yyVAL.union = yyLOCAL
- case 524:
+ case 523:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL []AlterOption
-//line sql.y:2957
+//line sql.y:2953
{
yyLOCAL = nil
}
yyVAL.union = yyLOCAL
- case 525:
+ case 524:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []AlterOption
-//line sql.y:2961
+//line sql.y:2957
{
yyLOCAL = yyDollar[1].alterOptionsUnion()
}
yyVAL.union = yyLOCAL
- case 526:
+ case 525:
yyDollar = yyS[yypt-5 : yypt+1]
-//line sql.y:2965
+//line sql.y:2961
{
yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, &OrderByOption{Cols: yyDollar[5].columnsUnion()})
}
- case 527:
+ case 526:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []AlterOption
-//line sql.y:2969
+//line sql.y:2965
{
yyLOCAL = yyDollar[1].alterOptionsUnion()
}
yyVAL.union = yyLOCAL
- case 528:
+ case 527:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:2973
+//line sql.y:2969
{
yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].alterOptionsUnion()...)
}
- case 529:
+ case 528:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL []AlterOption
-//line sql.y:2977
+//line sql.y:2973
{
yyLOCAL = append(append(yyDollar[1].alterOptionsUnion(), yyDollar[3].alterOptionsUnion()...), &OrderByOption{Cols: yyDollar[7].columnsUnion()})
}
yyVAL.union = yyLOCAL
- case 530:
+ case 529:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []AlterOption
-//line sql.y:2983
+//line sql.y:2979
{
yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()}
}
yyVAL.union = yyLOCAL
- case 531:
+ case 530:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:2987
+//line sql.y:2983
{
yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].alterOptionUnion())
}
- case 532:
+ case 531:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:2991
+//line sql.y:2987
{
yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].alterOptionUnion())
}
- case 533:
+ case 532:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:2997
+//line sql.y:2993
{
yyLOCAL = yyDollar[1].tableOptionsUnion()
}
yyVAL.union = yyLOCAL
+ case 533:
+ yyDollar = yyS[yypt-2 : yypt+1]
+ var yyLOCAL AlterOption
+//line sql.y:2997
+ {
+ yyLOCAL = &AddConstraintDefinition{ConstraintDefinition: yyDollar[2].constraintDefinitionUnion()}
+ }
+ yyVAL.union = yyLOCAL
case 534:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL AlterOption
@@ -13997,15 +13976,15 @@ yydefault:
var yyLOCAL AlterOption
//line sql.y:3005
{
- yyLOCAL = &AddConstraintDefinition{ConstraintDefinition: yyDollar[2].constraintDefinitionUnion()}
+ yyLOCAL = &AddIndexDefinition{IndexDefinition: yyDollar[2].indexDefinitionUnion()}
}
yyVAL.union = yyLOCAL
case 536:
- yyDollar = yyS[yypt-2 : yypt+1]
+ yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL AlterOption
//line sql.y:3009
{
- yyLOCAL = &AddIndexDefinition{IndexDefinition: yyDollar[2].indexDefinitionUnion()}
+ yyLOCAL = &AddColumns{Columns: yyDollar[4].columnDefinitionsUnion()}
}
yyVAL.union = yyLOCAL
case 537:
@@ -14013,7 +13992,7 @@ yydefault:
var yyLOCAL AlterOption
//line sql.y:3013
{
- yyLOCAL = &AddColumns{Columns: yyDollar[4].columnDefinitionsUnion()}
+ yyLOCAL = &AddColumns{Columns: []*ColumnDefinition{yyDollar[3].columnDefinitionUnion()}, First: yyDollar[4].booleanUnion(), After: yyDollar[5].colNameUnion()}
}
yyVAL.union = yyLOCAL
case 538:
@@ -14021,31 +14000,31 @@ yydefault:
var yyLOCAL AlterOption
//line sql.y:3017
{
- yyLOCAL = &AddColumns{Columns: []*ColumnDefinition{yyDollar[3].columnDefinitionUnion()}, First: yyDollar[4].booleanUnion(), After: yyDollar[5].colNameUnion()}
+ yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: true}
}
yyVAL.union = yyLOCAL
case 539:
- yyDollar = yyS[yypt-5 : yypt+1]
+ yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL AlterOption
//line sql.y:3021
{
- yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: true}
+ yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: false, DefaultVal: yyDollar[6].exprUnion(), DefaultLiteral: true}
}
yyVAL.union = yyLOCAL
case 540:
- yyDollar = yyS[yypt-6 : yypt+1]
+ yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL AlterOption
//line sql.y:3025
{
- yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: false, DefaultVal: yyDollar[6].exprUnion(), DefaultLiteral: true}
+ yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: false, DefaultVal: yyDollar[7].exprUnion()}
}
yyVAL.union = yyLOCAL
case 541:
- yyDollar = yyS[yypt-8 : yypt+1]
+ yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL AlterOption
//line sql.y:3029
{
- yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: false, DefaultVal: yyDollar[7].exprUnion()}
+ yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), Invisible: ptr.Of(false)}
}
yyVAL.union = yyLOCAL
case 542:
@@ -14053,15 +14032,15 @@ yydefault:
var yyLOCAL AlterOption
//line sql.y:3033
{
- yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), Invisible: ptr.Of(false)}
+ yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), Invisible: ptr.Of(true)}
}
yyVAL.union = yyLOCAL
case 543:
- yyDollar = yyS[yypt-5 : yypt+1]
+ yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL AlterOption
//line sql.y:3037
{
- yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), Invisible: ptr.Of(true)}
+ yyLOCAL = &AlterCheck{Name: yyDollar[3].identifierCI, Enforced: yyDollar[4].booleanUnion()}
}
yyVAL.union = yyLOCAL
case 544:
@@ -14069,7 +14048,7 @@ yydefault:
var yyLOCAL AlterOption
//line sql.y:3041
{
- yyLOCAL = &AlterCheck{Name: yyDollar[3].identifierCI, Enforced: yyDollar[4].booleanUnion()}
+ yyLOCAL = &AlterIndex{Name: yyDollar[3].identifierCI, Invisible: false}
}
yyVAL.union = yyLOCAL
case 545:
@@ -14077,23 +14056,23 @@ yydefault:
var yyLOCAL AlterOption
//line sql.y:3045
{
- yyLOCAL = &AlterIndex{Name: yyDollar[3].identifierCI, Invisible: false}
+ yyLOCAL = &AlterIndex{Name: yyDollar[3].identifierCI, Invisible: true}
}
yyVAL.union = yyLOCAL
case 546:
- yyDollar = yyS[yypt-4 : yypt+1]
+ yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL AlterOption
//line sql.y:3049
{
- yyLOCAL = &AlterIndex{Name: yyDollar[3].identifierCI, Invisible: true}
+ yyLOCAL = &ChangeColumn{OldColumn: yyDollar[3].colNameUnion(), NewColDefinition: yyDollar[4].columnDefinitionUnion(), First: yyDollar[5].booleanUnion(), After: yyDollar[6].colNameUnion()}
}
yyVAL.union = yyLOCAL
case 547:
- yyDollar = yyS[yypt-6 : yypt+1]
+ yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL AlterOption
//line sql.y:3053
{
- yyLOCAL = &ChangeColumn{OldColumn: yyDollar[3].colNameUnion(), NewColDefinition: yyDollar[4].columnDefinitionUnion(), First: yyDollar[5].booleanUnion(), After: yyDollar[6].colNameUnion()}
+ yyLOCAL = &ModifyColumn{NewColDefinition: yyDollar[3].columnDefinitionUnion(), First: yyDollar[4].booleanUnion(), After: yyDollar[5].colNameUnion()}
}
yyVAL.union = yyLOCAL
case 548:
@@ -14101,7 +14080,7 @@ yydefault:
var yyLOCAL AlterOption
//line sql.y:3057
{
- yyLOCAL = &ModifyColumn{NewColDefinition: yyDollar[3].columnDefinitionUnion(), First: yyDollar[4].booleanUnion(), After: yyDollar[5].colNameUnion()}
+ yyLOCAL = &RenameColumn{OldName: yyDollar[3].colNameUnion(), NewName: yyDollar[5].colNameUnion()}
}
yyVAL.union = yyLOCAL
case 549:
@@ -14109,15 +14088,15 @@ yydefault:
var yyLOCAL AlterOption
//line sql.y:3061
{
- yyLOCAL = &RenameColumn{OldName: yyDollar[3].colNameUnion(), NewName: yyDollar[5].colNameUnion()}
+ yyLOCAL = &AlterCharset{CharacterSet: yyDollar[4].str, Collate: yyDollar[5].str}
}
yyVAL.union = yyLOCAL
case 550:
- yyDollar = yyS[yypt-5 : yypt+1]
+ yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL AlterOption
//line sql.y:3065
{
- yyLOCAL = &AlterCharset{CharacterSet: yyDollar[4].str, Collate: yyDollar[5].str}
+ yyLOCAL = &KeyState{Enable: false}
}
yyVAL.union = yyLOCAL
case 551:
@@ -14125,7 +14104,7 @@ yydefault:
var yyLOCAL AlterOption
//line sql.y:3069
{
- yyLOCAL = &KeyState{Enable: false}
+ yyLOCAL = &KeyState{Enable: true}
}
yyVAL.union = yyLOCAL
case 552:
@@ -14133,7 +14112,7 @@ yydefault:
var yyLOCAL AlterOption
//line sql.y:3073
{
- yyLOCAL = &KeyState{Enable: true}
+ yyLOCAL = &TablespaceOperation{Import: false}
}
yyVAL.union = yyLOCAL
case 553:
@@ -14141,15 +14120,15 @@ yydefault:
var yyLOCAL AlterOption
//line sql.y:3077
{
- yyLOCAL = &TablespaceOperation{Import: false}
+ yyLOCAL = &TablespaceOperation{Import: true}
}
yyVAL.union = yyLOCAL
case 554:
- yyDollar = yyS[yypt-2 : yypt+1]
+ yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
//line sql.y:3081
{
- yyLOCAL = &TablespaceOperation{Import: true}
+ yyLOCAL = &DropColumn{Name: yyDollar[3].colNameUnion()}
}
yyVAL.union = yyLOCAL
case 555:
@@ -14157,7 +14136,7 @@ yydefault:
var yyLOCAL AlterOption
//line sql.y:3085
{
- yyLOCAL = &DropColumn{Name: yyDollar[3].colNameUnion()}
+ yyLOCAL = &DropKey{Type: NormalKeyType, Name: yyDollar[3].identifierCI}
}
yyVAL.union = yyLOCAL
case 556:
@@ -14165,23 +14144,23 @@ yydefault:
var yyLOCAL AlterOption
//line sql.y:3089
{
- yyLOCAL = &DropKey{Type: NormalKeyType, Name: yyDollar[3].identifierCI}
+ yyLOCAL = &DropKey{Type: PrimaryKeyType}
}
yyVAL.union = yyLOCAL
case 557:
- yyDollar = yyS[yypt-3 : yypt+1]
+ yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL AlterOption
//line sql.y:3093
{
- yyLOCAL = &DropKey{Type: PrimaryKeyType}
+ yyLOCAL = &DropKey{Type: ForeignKeyType, Name: yyDollar[4].identifierCI}
}
yyVAL.union = yyLOCAL
case 558:
- yyDollar = yyS[yypt-4 : yypt+1]
+ yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
//line sql.y:3097
{
- yyLOCAL = &DropKey{Type: ForeignKeyType, Name: yyDollar[4].identifierCI}
+ yyLOCAL = &DropKey{Type: CheckKeyType, Name: yyDollar[3].identifierCI}
}
yyVAL.union = yyLOCAL
case 559:
@@ -14193,52 +14172,52 @@ yydefault:
}
yyVAL.union = yyLOCAL
case 560:
- yyDollar = yyS[yypt-3 : yypt+1]
- var yyLOCAL AlterOption
-//line sql.y:3105
- {
- yyLOCAL = &DropKey{Type: CheckKeyType, Name: yyDollar[3].identifierCI}
- }
- yyVAL.union = yyLOCAL
- case 561:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3109
+//line sql.y:3105
{
yyLOCAL = &Force{}
}
yyVAL.union = yyLOCAL
- case 562:
+ case 561:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3113
+//line sql.y:3109
{
yyLOCAL = &RenameTableName{Table: yyDollar[3].tableName}
}
yyVAL.union = yyLOCAL
- case 563:
+ case 562:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3117
+//line sql.y:3113
{
yyLOCAL = &RenameIndex{OldName: yyDollar[3].identifierCI, NewName: yyDollar[5].identifierCI}
}
yyVAL.union = yyLOCAL
- case 564:
+ case 563:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []AlterOption
-//line sql.y:3123
+//line sql.y:3119
{
yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()}
}
yyVAL.union = yyLOCAL
- case 565:
+ case 564:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:3127
+//line sql.y:3123
{
yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].alterOptionUnion())
}
+ case 565:
+ yyDollar = yyS[yypt-3 : yypt+1]
+ var yyLOCAL AlterOption
+//line sql.y:3129
+ {
+ yyLOCAL = AlgorithmValue(string(yyDollar[3].str))
+ }
+ yyVAL.union = yyLOCAL
case 566:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
@@ -14268,7 +14247,7 @@ yydefault:
var yyLOCAL AlterOption
//line sql.y:3145
{
- yyLOCAL = AlgorithmValue(string(yyDollar[3].str))
+ yyLOCAL = &LockOption{Type: DefaultType}
}
yyVAL.union = yyLOCAL
case 570:
@@ -14276,53 +14255,45 @@ yydefault:
var yyLOCAL AlterOption
//line sql.y:3149
{
- yyLOCAL = &LockOption{Type: DefaultType}
+ yyLOCAL = &LockOption{Type: NoneType}
}
yyVAL.union = yyLOCAL
case 571:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
//line sql.y:3153
- {
- yyLOCAL = &LockOption{Type: NoneType}
- }
- yyVAL.union = yyLOCAL
- case 572:
- yyDollar = yyS[yypt-3 : yypt+1]
- var yyLOCAL AlterOption
-//line sql.y:3157
{
yyLOCAL = &LockOption{Type: SharedType}
}
yyVAL.union = yyLOCAL
- case 573:
+ case 572:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3161
+//line sql.y:3157
{
yyLOCAL = &LockOption{Type: ExclusiveType}
}
yyVAL.union = yyLOCAL
- case 574:
+ case 573:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3165
+//line sql.y:3161
{
yyLOCAL = &Validation{With: true}
}
yyVAL.union = yyLOCAL
- case 575:
+ case 574:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:3169
+//line sql.y:3165
{
yyLOCAL = &Validation{With: false}
}
yyVAL.union = yyLOCAL
- case 576:
+ case 575:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3175
+//line sql.y:3171
{
yyDollar[1].alterTableUnion().FullyParsed = true
yyDollar[1].alterTableUnion().AlterOptions = yyDollar[2].alterOptionsUnion()
@@ -14330,10 +14301,10 @@ yydefault:
yyLOCAL = yyDollar[1].alterTableUnion()
}
yyVAL.union = yyLOCAL
- case 577:
+ case 576:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3182
+//line sql.y:3178
{
yyDollar[1].alterTableUnion().FullyParsed = true
yyDollar[1].alterTableUnion().AlterOptions = yyDollar[2].alterOptionsUnion()
@@ -14341,10 +14312,10 @@ yydefault:
yyLOCAL = yyDollar[1].alterTableUnion()
}
yyVAL.union = yyLOCAL
- case 578:
+ case 577:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3189
+//line sql.y:3185
{
yyDollar[1].alterTableUnion().FullyParsed = true
yyDollar[1].alterTableUnion().AlterOptions = yyDollar[2].alterOptionsUnion()
@@ -14352,28 +14323,28 @@ yydefault:
yyLOCAL = yyDollar[1].alterTableUnion()
}
yyVAL.union = yyLOCAL
- case 579:
+ case 578:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3196
+//line sql.y:3192
{
yyDollar[1].alterTableUnion().FullyParsed = true
yyDollar[1].alterTableUnion().PartitionSpec = yyDollar[2].partSpecUnion()
yyLOCAL = yyDollar[1].alterTableUnion()
}
yyVAL.union = yyLOCAL
- case 580:
+ case 579:
yyDollar = yyS[yypt-11 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3202
+//line sql.y:3198
{
yyLOCAL = &AlterView{ViewName: yyDollar[7].tableName, Comments: Comments(yyDollar[2].strs).Parsed(), Algorithm: yyDollar[3].str, Definer: yyDollar[4].definerUnion(), Security: yyDollar[5].str, Columns: yyDollar[8].columnsUnion(), Select: yyDollar[10].selStmtUnion(), CheckOption: yyDollar[11].str}
}
yyVAL.union = yyLOCAL
- case 581:
+ case 580:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3212
+//line sql.y:3208
{
yyDollar[1].alterDatabaseUnion().FullyParsed = true
yyDollar[1].alterDatabaseUnion().DBName = yyDollar[2].identifierCS
@@ -14381,10 +14352,10 @@ yydefault:
yyLOCAL = yyDollar[1].alterDatabaseUnion()
}
yyVAL.union = yyLOCAL
- case 582:
+ case 581:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3219
+//line sql.y:3215
{
yyDollar[1].alterDatabaseUnion().FullyParsed = true
yyDollar[1].alterDatabaseUnion().DBName = yyDollar[2].identifierCS
@@ -14392,10 +14363,10 @@ yydefault:
yyLOCAL = yyDollar[1].alterDatabaseUnion()
}
yyVAL.union = yyLOCAL
- case 583:
+ case 582:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3226
+//line sql.y:3222
{
yyLOCAL = &AlterVschema{
Action: CreateVindexDDLAction,
@@ -14408,10 +14379,10 @@ yydefault:
}
}
yyVAL.union = yyLOCAL
- case 584:
+ case 583:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3238
+//line sql.y:3234
{
yyLOCAL = &AlterVschema{
Action: DropVindexDDLAction,
@@ -14422,26 +14393,26 @@ yydefault:
}
}
yyVAL.union = yyLOCAL
- case 585:
+ case 584:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3248
+//line sql.y:3244
{
yyLOCAL = &AlterVschema{Action: AddVschemaTableDDLAction, Table: yyDollar[6].tableName}
}
yyVAL.union = yyLOCAL
- case 586:
+ case 585:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3252
+//line sql.y:3248
{
yyLOCAL = &AlterVschema{Action: DropVschemaTableDDLAction, Table: yyDollar[6].tableName}
}
yyVAL.union = yyLOCAL
- case 587:
+ case 586:
yyDollar = yyS[yypt-13 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3256
+//line sql.y:3252
{
yyLOCAL = &AlterVschema{
Action: AddColVindexDDLAction,
@@ -14455,10 +14426,10 @@ yydefault:
}
}
yyVAL.union = yyLOCAL
- case 588:
+ case 587:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3269
+//line sql.y:3265
{
yyLOCAL = &AlterVschema{
Action: DropColVindexDDLAction,
@@ -14469,26 +14440,26 @@ yydefault:
}
}
yyVAL.union = yyLOCAL
- case 589:
+ case 588:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3279
+//line sql.y:3275
{
yyLOCAL = &AlterVschema{Action: AddSequenceDDLAction, Table: yyDollar[6].tableName}
}
yyVAL.union = yyLOCAL
- case 590:
+ case 589:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3283
+//line sql.y:3279
{
yyLOCAL = &AlterVschema{Action: DropSequenceDDLAction, Table: yyDollar[6].tableName}
}
yyVAL.union = yyLOCAL
- case 591:
+ case 590:
yyDollar = yyS[yypt-10 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3287
+//line sql.y:3283
{
yyLOCAL = &AlterVschema{
Action: AddAutoIncDDLAction,
@@ -14500,10 +14471,10 @@ yydefault:
}
}
yyVAL.union = yyLOCAL
- case 592:
+ case 591:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3298
+//line sql.y:3294
{
yyLOCAL = &AlterVschema{
Action: DropAutoIncDDLAction,
@@ -14511,10 +14482,10 @@ yydefault:
}
}
yyVAL.union = yyLOCAL
- case 593:
+ case 592:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3305
+//line sql.y:3301
{
yyLOCAL = &AlterMigration{
Type: RetryMigrationType,
@@ -14522,10 +14493,10 @@ yydefault:
}
}
yyVAL.union = yyLOCAL
- case 594:
+ case 593:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3312
+//line sql.y:3308
{
yyLOCAL = &AlterMigration{
Type: CleanupMigrationType,
@@ -14533,20 +14504,20 @@ yydefault:
}
}
yyVAL.union = yyLOCAL
- case 595:
+ case 594:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3319
+//line sql.y:3315
{
yyLOCAL = &AlterMigration{
Type: CleanupAllMigrationType,
}
}
yyVAL.union = yyLOCAL
- case 596:
+ case 595:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3325
+//line sql.y:3321
{
yyLOCAL = &AlterMigration{
Type: LaunchMigrationType,
@@ -14554,10 +14525,10 @@ yydefault:
}
}
yyVAL.union = yyLOCAL
- case 597:
+ case 596:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3332
+//line sql.y:3328
{
yyLOCAL = &AlterMigration{
Type: LaunchMigrationType,
@@ -14566,20 +14537,20 @@ yydefault:
}
}
yyVAL.union = yyLOCAL
- case 598:
+ case 597:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3340
+//line sql.y:3336
{
yyLOCAL = &AlterMigration{
Type: LaunchAllMigrationType,
}
}
yyVAL.union = yyLOCAL
- case 599:
+ case 598:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3346
+//line sql.y:3342
{
yyLOCAL = &AlterMigration{
Type: CompleteMigrationType,
@@ -14587,20 +14558,20 @@ yydefault:
}
}
yyVAL.union = yyLOCAL
- case 600:
+ case 599:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3353
+//line sql.y:3349
{
yyLOCAL = &AlterMigration{
Type: CompleteAllMigrationType,
}
}
yyVAL.union = yyLOCAL
- case 601:
+ case 600:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3359
+//line sql.y:3355
{
yyLOCAL = &AlterMigration{
Type: CancelMigrationType,
@@ -14608,20 +14579,20 @@ yydefault:
}
}
yyVAL.union = yyLOCAL
- case 602:
+ case 601:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3366
+//line sql.y:3362
{
yyLOCAL = &AlterMigration{
Type: CancelAllMigrationType,
}
}
yyVAL.union = yyLOCAL
- case 603:
+ case 602:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3372
+//line sql.y:3368
{
yyLOCAL = &AlterMigration{
Type: ThrottleMigrationType,
@@ -14631,10 +14602,10 @@ yydefault:
}
}
yyVAL.union = yyLOCAL
- case 604:
+ case 603:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3381
+//line sql.y:3377
{
yyLOCAL = &AlterMigration{
Type: ThrottleAllMigrationType,
@@ -14643,10 +14614,10 @@ yydefault:
}
}
yyVAL.union = yyLOCAL
- case 605:
+ case 604:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3389
+//line sql.y:3385
{
yyLOCAL = &AlterMigration{
Type: UnthrottleMigrationType,
@@ -14654,20 +14625,20 @@ yydefault:
}
}
yyVAL.union = yyLOCAL
- case 606:
+ case 605:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3396
+//line sql.y:3392
{
yyLOCAL = &AlterMigration{
Type: UnthrottleAllMigrationType,
}
}
yyVAL.union = yyLOCAL
- case 607:
+ case 606:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3402
+//line sql.y:3398
{
yyLOCAL = &AlterMigration{
Type: ForceCutOverMigrationType,
@@ -14675,20 +14646,32 @@ yydefault:
}
}
yyVAL.union = yyLOCAL
- case 608:
+ case 607:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3409
+//line sql.y:3405
{
yyLOCAL = &AlterMigration{
Type: ForceCutOverAllMigrationType,
}
}
yyVAL.union = yyLOCAL
+ case 608:
+ yyDollar = yyS[yypt-6 : yypt+1]
+ var yyLOCAL Statement
+//line sql.y:3411
+ {
+ yyLOCAL = &AlterMigration{
+ Type: SetCutOverThresholdMigrationType,
+ UUID: string(yyDollar[4].str),
+ Threshold: yyDollar[6].str,
+ }
+ }
+ yyVAL.union = yyLOCAL
case 609:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *PartitionOption
-//line sql.y:3416
+//line sql.y:3420
{
yyLOCAL = nil
}
@@ -14696,7 +14679,7 @@ yydefault:
case 610:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL *PartitionOption
-//line sql.y:3420
+//line sql.y:3424
{
yyDollar[3].partitionOptionUnion().Partitions = yyDollar[4].integerUnion()
yyDollar[3].partitionOptionUnion().SubPartition = yyDollar[5].subPartitionUnion()
@@ -14707,7 +14690,7 @@ yydefault:
case 611:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *PartitionOption
-//line sql.y:3429
+//line sql.y:3433
{
yyLOCAL = &PartitionOption{
IsLinear: yyDollar[1].booleanUnion(),
@@ -14719,7 +14702,7 @@ yydefault:
case 612:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL *PartitionOption
-//line sql.y:3437
+//line sql.y:3441
{
yyLOCAL = &PartitionOption{
IsLinear: yyDollar[1].booleanUnion(),
@@ -14732,7 +14715,7 @@ yydefault:
case 613:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *PartitionOption
-//line sql.y:3446
+//line sql.y:3450
{
yyLOCAL = &PartitionOption{
Type: yyDollar[1].partitionByTypeUnion(),
@@ -14743,7 +14726,7 @@ yydefault:
case 614:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *PartitionOption
-//line sql.y:3453
+//line sql.y:3457
{
yyLOCAL = &PartitionOption{
Type: yyDollar[1].partitionByTypeUnion(),
@@ -14754,7 +14737,7 @@ yydefault:
case 615:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *SubPartition
-//line sql.y:3461
+//line sql.y:3465
{
yyLOCAL = nil
}
@@ -14762,7 +14745,7 @@ yydefault:
case 616:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL *SubPartition
-//line sql.y:3465
+//line sql.y:3469
{
yyLOCAL = &SubPartition{
IsLinear: yyDollar[3].booleanUnion(),
@@ -14775,7 +14758,7 @@ yydefault:
case 617:
yyDollar = yyS[yypt-9 : yypt+1]
var yyLOCAL *SubPartition
-//line sql.y:3474
+//line sql.y:3478
{
yyLOCAL = &SubPartition{
IsLinear: yyDollar[3].booleanUnion(),
@@ -14789,7 +14772,7 @@ yydefault:
case 618:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL []*PartitionDefinition
-//line sql.y:3485
+//line sql.y:3489
{
yyLOCAL = nil
}
@@ -14797,7 +14780,7 @@ yydefault:
case 619:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL []*PartitionDefinition
-//line sql.y:3489
+//line sql.y:3493
{
yyLOCAL = yyDollar[2].partDefsUnion()
}
@@ -14805,7 +14788,7 @@ yydefault:
case 620:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:3494
+//line sql.y:3498
{
yyLOCAL = false
}
@@ -14813,7 +14796,7 @@ yydefault:
case 621:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:3498
+//line sql.y:3502
{
yyLOCAL = true
}
@@ -14821,7 +14804,7 @@ yydefault:
case 622:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL int
-//line sql.y:3503
+//line sql.y:3507
{
yyLOCAL = 0
}
@@ -14829,7 +14812,7 @@ yydefault:
case 623:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL int
-//line sql.y:3507
+//line sql.y:3511
{
yyLOCAL = convertStringToInt(yyDollar[3].str)
}
@@ -14837,7 +14820,7 @@ yydefault:
case 624:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL TableExpr
-//line sql.y:3513
+//line sql.y:3517
{
yyLOCAL = &JSONTableExpr{Expr: yyDollar[3].exprUnion(), Filter: yyDollar[5].exprUnion(), Columns: yyDollar[6].jtColumnListUnion(), Alias: yyDollar[8].identifierCS}
}
@@ -14845,7 +14828,7 @@ yydefault:
case 625:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL []*JtColumnDefinition
-//line sql.y:3519
+//line sql.y:3523
{
yyLOCAL = yyDollar[3].jtColumnListUnion()
}
@@ -14853,14 +14836,14 @@ yydefault:
case 626:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []*JtColumnDefinition
-//line sql.y:3525
+//line sql.y:3529
{
yyLOCAL = []*JtColumnDefinition{yyDollar[1].jtColumnDefinitionUnion()}
}
yyVAL.union = yyLOCAL
case 627:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:3529
+//line sql.y:3533
{
yySLICE := (*[]*JtColumnDefinition)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].jtColumnDefinitionUnion())
@@ -14868,7 +14851,7 @@ yydefault:
case 628:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *JtColumnDefinition
-//line sql.y:3535
+//line sql.y:3539
{
yyLOCAL = &JtColumnDefinition{JtOrdinal: &JtOrdinalColDef{Name: yyDollar[1].identifierCI}}
}
@@ -14876,7 +14859,7 @@ yydefault:
case 629:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL *JtColumnDefinition
-//line sql.y:3539
+//line sql.y:3543
{
yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str}
jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion()}
@@ -14886,7 +14869,7 @@ yydefault:
case 630:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL *JtColumnDefinition
-//line sql.y:3545
+//line sql.y:3549
{
yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str}
jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion()}
@@ -14896,7 +14879,7 @@ yydefault:
case 631:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL *JtColumnDefinition
-//line sql.y:3551
+//line sql.y:3555
{
yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str}
jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), ErrorOnResponse: yyDollar[7].jtOnResponseUnion()}
@@ -14906,7 +14889,7 @@ yydefault:
case 632:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL *JtColumnDefinition
-//line sql.y:3557
+//line sql.y:3561
{
yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str}
jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion(), ErrorOnResponse: yyDollar[8].jtOnResponseUnion()}
@@ -14916,7 +14899,7 @@ yydefault:
case 633:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *JtColumnDefinition
-//line sql.y:3563
+//line sql.y:3567
{
jtNestedPath := &JtNestedPathColDef{Path: yyDollar[3].exprUnion(), Columns: yyDollar[4].jtColumnListUnion()}
yyLOCAL = &JtColumnDefinition{JtNestedPath: jtNestedPath}
@@ -14925,7 +14908,7 @@ yydefault:
case 634:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:3569
+//line sql.y:3573
{
yyLOCAL = false
}
@@ -14933,7 +14916,7 @@ yydefault:
case 635:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:3573
+//line sql.y:3577
{
yyLOCAL = true
}
@@ -14941,7 +14924,7 @@ yydefault:
case 636:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:3577
+//line sql.y:3581
{
yyLOCAL = false
}
@@ -14949,7 +14932,7 @@ yydefault:
case 637:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:3581
+//line sql.y:3585
{
yyLOCAL = true
}
@@ -14957,7 +14940,7 @@ yydefault:
case 638:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *JtOnResponse
-//line sql.y:3587
+//line sql.y:3591
{
yyLOCAL = yyDollar[1].jtOnResponseUnion()
}
@@ -14965,7 +14948,7 @@ yydefault:
case 639:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *JtOnResponse
-//line sql.y:3593
+//line sql.y:3597
{
yyLOCAL = yyDollar[1].jtOnResponseUnion()
}
@@ -14973,7 +14956,7 @@ yydefault:
case 640:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *JtOnResponse
-//line sql.y:3599
+//line sql.y:3603
{
yyLOCAL = &JtOnResponse{ResponseType: ErrorJSONType}
}
@@ -14981,7 +14964,7 @@ yydefault:
case 641:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *JtOnResponse
-//line sql.y:3603
+//line sql.y:3607
{
yyLOCAL = &JtOnResponse{ResponseType: NullJSONType}
}
@@ -14989,7 +14972,7 @@ yydefault:
case 642:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *JtOnResponse
-//line sql.y:3607
+//line sql.y:3611
{
yyLOCAL = &JtOnResponse{ResponseType: DefaultJSONType, Expr: yyDollar[2].exprUnion()}
}
@@ -14997,7 +14980,7 @@ yydefault:
case 643:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL PartitionByType
-//line sql.y:3613
+//line sql.y:3617
{
yyLOCAL = RangeType
}
@@ -15005,7 +14988,7 @@ yydefault:
case 644:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL PartitionByType
-//line sql.y:3617
+//line sql.y:3621
{
yyLOCAL = ListType
}
@@ -15013,7 +14996,7 @@ yydefault:
case 645:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL int
-//line sql.y:3622
+//line sql.y:3626
{
yyLOCAL = -1
}
@@ -15021,7 +15004,7 @@ yydefault:
case 646:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL int
-//line sql.y:3626
+//line sql.y:3630
{
yyLOCAL = convertStringToInt(yyDollar[2].str)
}
@@ -15029,7 +15012,7 @@ yydefault:
case 647:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL int
-//line sql.y:3631
+//line sql.y:3635
{
yyLOCAL = -1
}
@@ -15037,7 +15020,7 @@ yydefault:
case 648:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL int
-//line sql.y:3635
+//line sql.y:3639
{
yyLOCAL = convertStringToInt(yyDollar[2].str)
}
@@ -15045,7 +15028,7 @@ yydefault:
case 649:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3641
+//line sql.y:3645
{
yyLOCAL = &PartitionSpec{Action: AddAction, Definitions: []*PartitionDefinition{yyDollar[4].partDefUnion()}}
}
@@ -15053,7 +15036,7 @@ yydefault:
case 650:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3645
+//line sql.y:3649
{
yyLOCAL = &PartitionSpec{Action: DropAction, Names: yyDollar[3].partitionsUnion()}
}
@@ -15061,7 +15044,7 @@ yydefault:
case 651:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3649
+//line sql.y:3653
{
yyLOCAL = &PartitionSpec{Action: ReorganizeAction, Names: yyDollar[3].partitionsUnion(), Definitions: yyDollar[6].partDefsUnion()}
}
@@ -15069,7 +15052,7 @@ yydefault:
case 652:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3653
+//line sql.y:3657
{
yyLOCAL = &PartitionSpec{Action: DiscardAction, Names: yyDollar[3].partitionsUnion()}
}
@@ -15077,7 +15060,7 @@ yydefault:
case 653:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3657
+//line sql.y:3661
{
yyLOCAL = &PartitionSpec{Action: DiscardAction, IsAll: true}
}
@@ -15085,7 +15068,7 @@ yydefault:
case 654:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3661
+//line sql.y:3665
{
yyLOCAL = &PartitionSpec{Action: ImportAction, Names: yyDollar[3].partitionsUnion()}
}
@@ -15093,7 +15076,7 @@ yydefault:
case 655:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3665
+//line sql.y:3669
{
yyLOCAL = &PartitionSpec{Action: ImportAction, IsAll: true}
}
@@ -15101,7 +15084,7 @@ yydefault:
case 656:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3669
+//line sql.y:3673
{
yyLOCAL = &PartitionSpec{Action: TruncateAction, Names: yyDollar[3].partitionsUnion()}
}
@@ -15109,7 +15092,7 @@ yydefault:
case 657:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3673
+//line sql.y:3677
{
yyLOCAL = &PartitionSpec{Action: TruncateAction, IsAll: true}
}
@@ -15117,7 +15100,7 @@ yydefault:
case 658:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3677
+//line sql.y:3681
{
yyLOCAL = &PartitionSpec{Action: CoalesceAction, Number: NewIntLiteral(yyDollar[3].str)}
}
@@ -15125,7 +15108,7 @@ yydefault:
case 659:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3681
+//line sql.y:3685
{
yyLOCAL = &PartitionSpec{Action: ExchangeAction, Names: Partitions{yyDollar[3].identifierCI}, TableName: yyDollar[6].tableName, WithoutValidation: yyDollar[7].booleanUnion()}
}
@@ -15133,7 +15116,7 @@ yydefault:
case 660:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3685
+//line sql.y:3689
{
yyLOCAL = &PartitionSpec{Action: AnalyzeAction, Names: yyDollar[3].partitionsUnion()}
}
@@ -15141,7 +15124,7 @@ yydefault:
case 661:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3689
+//line sql.y:3693
{
yyLOCAL = &PartitionSpec{Action: AnalyzeAction, IsAll: true}
}
@@ -15149,7 +15132,7 @@ yydefault:
case 662:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3693
+//line sql.y:3697
{
yyLOCAL = &PartitionSpec{Action: CheckAction, Names: yyDollar[3].partitionsUnion()}
}
@@ -15157,7 +15140,7 @@ yydefault:
case 663:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3697
+//line sql.y:3701
{
yyLOCAL = &PartitionSpec{Action: CheckAction, IsAll: true}
}
@@ -15165,7 +15148,7 @@ yydefault:
case 664:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3701
+//line sql.y:3705
{
yyLOCAL = &PartitionSpec{Action: OptimizeAction, Names: yyDollar[3].partitionsUnion()}
}
@@ -15173,7 +15156,7 @@ yydefault:
case 665:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3705
+//line sql.y:3709
{
yyLOCAL = &PartitionSpec{Action: OptimizeAction, IsAll: true}
}
@@ -15181,7 +15164,7 @@ yydefault:
case 666:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3709
+//line sql.y:3713
{
yyLOCAL = &PartitionSpec{Action: RebuildAction, Names: yyDollar[3].partitionsUnion()}
}
@@ -15189,7 +15172,7 @@ yydefault:
case 667:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3713
+//line sql.y:3717
{
yyLOCAL = &PartitionSpec{Action: RebuildAction, IsAll: true}
}
@@ -15197,7 +15180,7 @@ yydefault:
case 668:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3717
+//line sql.y:3721
{
yyLOCAL = &PartitionSpec{Action: RepairAction, Names: yyDollar[3].partitionsUnion()}
}
@@ -15205,7 +15188,7 @@ yydefault:
case 669:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3721
+//line sql.y:3725
{
yyLOCAL = &PartitionSpec{Action: RepairAction, IsAll: true}
}
@@ -15213,7 +15196,7 @@ yydefault:
case 670:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *PartitionSpec
-//line sql.y:3725
+//line sql.y:3729
{
yyLOCAL = &PartitionSpec{Action: UpgradeAction}
}
@@ -15221,7 +15204,7 @@ yydefault:
case 671:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:3730
+//line sql.y:3734
{
yyLOCAL = false
}
@@ -15229,7 +15212,7 @@ yydefault:
case 672:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL bool
-//line sql.y:3734
+//line sql.y:3738
{
yyLOCAL = false
}
@@ -15237,7 +15220,7 @@ yydefault:
case 673:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL bool
-//line sql.y:3738
+//line sql.y:3742
{
yyLOCAL = true
}
@@ -15245,28 +15228,28 @@ yydefault:
case 674:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []*PartitionDefinition
-//line sql.y:3744
+//line sql.y:3748
{
yyLOCAL = []*PartitionDefinition{yyDollar[1].partDefUnion()}
}
yyVAL.union = yyLOCAL
case 675:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:3748
+//line sql.y:3752
{
yySLICE := (*[]*PartitionDefinition)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].partDefUnion())
}
case 676:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:3754
+//line sql.y:3758
{
yyVAL.partDefUnion().Options = yyDollar[2].partitionDefinitionOptionsUnion()
}
case 677:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *PartitionDefinitionOptions
-//line sql.y:3759
+//line sql.y:3763
{
yyLOCAL = &PartitionDefinitionOptions{}
}
@@ -15274,7 +15257,7 @@ yydefault:
case 678:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *PartitionDefinitionOptions
-//line sql.y:3763
+//line sql.y:3767
{
yyDollar[1].partitionDefinitionOptionsUnion().ValueRange = yyDollar[2].partitionValueRangeUnion()
yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion()
@@ -15283,7 +15266,7 @@ yydefault:
case 679:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *PartitionDefinitionOptions
-//line sql.y:3768
+//line sql.y:3772
{
yyDollar[1].partitionDefinitionOptionsUnion().Comment = yyDollar[2].literalUnion()
yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion()
@@ -15292,7 +15275,7 @@ yydefault:
case 680:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *PartitionDefinitionOptions
-//line sql.y:3773
+//line sql.y:3777
{
yyDollar[1].partitionDefinitionOptionsUnion().Engine = yyDollar[2].partitionEngineUnion()
yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion()
@@ -15301,7 +15284,7 @@ yydefault:
case 681:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *PartitionDefinitionOptions
-//line sql.y:3778
+//line sql.y:3782
{
yyDollar[1].partitionDefinitionOptionsUnion().DataDirectory = yyDollar[2].literalUnion()
yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion()
@@ -15310,7 +15293,7 @@ yydefault:
case 682:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *PartitionDefinitionOptions
-//line sql.y:3783
+//line sql.y:3787
{
yyDollar[1].partitionDefinitionOptionsUnion().IndexDirectory = yyDollar[2].literalUnion()
yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion()
@@ -15319,7 +15302,7 @@ yydefault:
case 683:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *PartitionDefinitionOptions
-//line sql.y:3788
+//line sql.y:3792
{
yyDollar[1].partitionDefinitionOptionsUnion().MaxRows = ptr.Of(yyDollar[2].integerUnion())
yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion()
@@ -15328,7 +15311,7 @@ yydefault:
case 684:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *PartitionDefinitionOptions
-//line sql.y:3793
+//line sql.y:3797
{
yyDollar[1].partitionDefinitionOptionsUnion().MinRows = ptr.Of(yyDollar[2].integerUnion())
yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion()
@@ -15337,7 +15320,7 @@ yydefault:
case 685:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *PartitionDefinitionOptions
-//line sql.y:3798
+//line sql.y:3802
{
yyDollar[1].partitionDefinitionOptionsUnion().TableSpace = yyDollar[2].str
yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion()
@@ -15346,7 +15329,7 @@ yydefault:
case 686:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *PartitionDefinitionOptions
-//line sql.y:3803
+//line sql.y:3807
{
yyDollar[1].partitionDefinitionOptionsUnion().SubPartitionDefinitions = yyDollar[2].subPartitionDefinitionsUnion()
yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion()
@@ -15355,7 +15338,7 @@ yydefault:
case 687:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL SubPartitionDefinitions
-//line sql.y:3809
+//line sql.y:3813
{
yyLOCAL = yyDollar[2].subPartitionDefinitionsUnion()
}
@@ -15363,14 +15346,14 @@ yydefault:
case 688:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL SubPartitionDefinitions
-//line sql.y:3815
+//line sql.y:3819
{
yyLOCAL = SubPartitionDefinitions{yyDollar[1].subPartitionDefinitionUnion()}
}
yyVAL.union = yyLOCAL
case 689:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:3819
+//line sql.y:3823
{
yySLICE := (*SubPartitionDefinitions)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].subPartitionDefinitionUnion())
@@ -15378,7 +15361,7 @@ yydefault:
case 690:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *SubPartitionDefinition
-//line sql.y:3825
+//line sql.y:3829
{
yyLOCAL = &SubPartitionDefinition{Name: yyDollar[2].identifierCI, Options: yyDollar[3].subPartitionDefinitionOptionsUnion()}
}
@@ -15386,7 +15369,7 @@ yydefault:
case 691:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *SubPartitionDefinitionOptions
-//line sql.y:3830
+//line sql.y:3834
{
yyLOCAL = &SubPartitionDefinitionOptions{}
}
@@ -15394,7 +15377,7 @@ yydefault:
case 692:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *SubPartitionDefinitionOptions
-//line sql.y:3834
+//line sql.y:3838
{
yyDollar[1].subPartitionDefinitionOptionsUnion().Comment = yyDollar[2].literalUnion()
yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion()
@@ -15403,7 +15386,7 @@ yydefault:
case 693:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *SubPartitionDefinitionOptions
-//line sql.y:3839
+//line sql.y:3843
{
yyDollar[1].subPartitionDefinitionOptionsUnion().Engine = yyDollar[2].partitionEngineUnion()
yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion()
@@ -15412,7 +15395,7 @@ yydefault:
case 694:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *SubPartitionDefinitionOptions
-//line sql.y:3844
+//line sql.y:3848
{
yyDollar[1].subPartitionDefinitionOptionsUnion().DataDirectory = yyDollar[2].literalUnion()
yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion()
@@ -15421,7 +15404,7 @@ yydefault:
case 695:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *SubPartitionDefinitionOptions
-//line sql.y:3849
+//line sql.y:3853
{
yyDollar[1].subPartitionDefinitionOptionsUnion().IndexDirectory = yyDollar[2].literalUnion()
yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion()
@@ -15430,7 +15413,7 @@ yydefault:
case 696:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *SubPartitionDefinitionOptions
-//line sql.y:3854
+//line sql.y:3858
{
yyDollar[1].subPartitionDefinitionOptionsUnion().MaxRows = ptr.Of(yyDollar[2].integerUnion())
yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion()
@@ -15439,7 +15422,7 @@ yydefault:
case 697:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *SubPartitionDefinitionOptions
-//line sql.y:3859
+//line sql.y:3863
{
yyDollar[1].subPartitionDefinitionOptionsUnion().MinRows = ptr.Of(yyDollar[2].integerUnion())
yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion()
@@ -15448,7 +15431,7 @@ yydefault:
case 698:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *SubPartitionDefinitionOptions
-//line sql.y:3864
+//line sql.y:3868
{
yyDollar[1].subPartitionDefinitionOptionsUnion().TableSpace = yyDollar[2].str
yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion()
@@ -15457,7 +15440,7 @@ yydefault:
case 699:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *PartitionValueRange
-//line sql.y:3871
+//line sql.y:3875
{
yyLOCAL = &PartitionValueRange{
Type: LessThanType,
@@ -15468,7 +15451,7 @@ yydefault:
case 700:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *PartitionValueRange
-//line sql.y:3878
+//line sql.y:3882
{
yyLOCAL = &PartitionValueRange{
Type: LessThanType,
@@ -15479,7 +15462,7 @@ yydefault:
case 701:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *PartitionValueRange
-//line sql.y:3885
+//line sql.y:3889
{
yyLOCAL = &PartitionValueRange{
Type: InType,
@@ -15490,7 +15473,7 @@ yydefault:
case 702:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:3893
+//line sql.y:3897
{
yyLOCAL = false
}
@@ -15498,7 +15481,7 @@ yydefault:
case 703:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:3897
+//line sql.y:3901
{
yyLOCAL = true
}
@@ -15506,7 +15489,7 @@ yydefault:
case 704:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *PartitionEngine
-//line sql.y:3903
+//line sql.y:3907
{
yyLOCAL = &PartitionEngine{Storage: yyDollar[1].booleanUnion(), Name: yyDollar[4].identifierCS.String()}
}
@@ -15514,7 +15497,7 @@ yydefault:
case 705:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *Literal
-//line sql.y:3909
+//line sql.y:3913
{
yyLOCAL = NewStrLiteral(yyDollar[3].str)
}
@@ -15522,7 +15505,7 @@ yydefault:
case 706:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *Literal
-//line sql.y:3915
+//line sql.y:3919
{
yyLOCAL = NewStrLiteral(yyDollar[4].str)
}
@@ -15530,7 +15513,7 @@ yydefault:
case 707:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *Literal
-//line sql.y:3921
+//line sql.y:3925
{
yyLOCAL = NewStrLiteral(yyDollar[4].str)
}
@@ -15538,7 +15521,7 @@ yydefault:
case 708:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL int
-//line sql.y:3927
+//line sql.y:3931
{
yyLOCAL = convertStringToInt(yyDollar[3].str)
}
@@ -15546,41 +15529,41 @@ yydefault:
case 709:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL int
-//line sql.y:3933
+//line sql.y:3937
{
yyLOCAL = convertStringToInt(yyDollar[3].str)
}
yyVAL.union = yyLOCAL
case 710:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:3939
+//line sql.y:3943
{
yyVAL.str = yyDollar[3].identifierCS.String()
}
case 711:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *PartitionDefinition
-//line sql.y:3945
+//line sql.y:3949
{
yyLOCAL = &PartitionDefinition{Name: yyDollar[2].identifierCI}
}
yyVAL.union = yyLOCAL
case 712:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:3951
+//line sql.y:3955
{
yyVAL.str = ""
}
case 713:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:3955
+//line sql.y:3959
{
yyVAL.str = ""
}
case 714:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3961
+//line sql.y:3965
{
yyLOCAL = &RenameTable{TablePairs: yyDollar[3].renameTablePairsUnion()}
}
@@ -15588,14 +15571,14 @@ yydefault:
case 715:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL []*RenameTablePair
-//line sql.y:3967
+//line sql.y:3971
{
yyLOCAL = []*RenameTablePair{{FromTable: yyDollar[1].tableName, ToTable: yyDollar[3].tableName}}
}
yyVAL.union = yyLOCAL
case 716:
yyDollar = yyS[yypt-5 : yypt+1]
-//line sql.y:3971
+//line sql.y:3975
{
yySLICE := (*[]*RenameTablePair)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, &RenameTablePair{FromTable: yyDollar[3].tableName, ToTable: yyDollar[5].tableName})
@@ -15603,7 +15586,7 @@ yydefault:
case 717:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3977
+//line sql.y:3981
{
yyLOCAL = &DropTable{FromTables: yyDollar[6].tableNamesUnion(), IfExists: yyDollar[5].booleanUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), Temp: yyDollar[3].booleanUnion()}
}
@@ -15611,7 +15594,7 @@ yydefault:
case 718:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3981
+//line sql.y:3985
{
// Change this to an alter statement
if yyDollar[4].identifierCI.Lowered() == "primary" {
@@ -15624,7 +15607,7 @@ yydefault:
case 719:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3990
+//line sql.y:3994
{
yyLOCAL = &DropView{FromTables: yyDollar[5].tableNamesUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), IfExists: yyDollar[4].booleanUnion()}
}
@@ -15632,7 +15615,7 @@ yydefault:
case 720:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:3994
+//line sql.y:3998
{
yyLOCAL = &DropDatabase{Comments: Comments(yyDollar[2].strs).Parsed(), DBName: yyDollar[5].identifierCS, IfExists: yyDollar[4].booleanUnion()}
}
@@ -15640,7 +15623,7 @@ yydefault:
case 721:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4000
+//line sql.y:4004
{
yyLOCAL = &TruncateTable{Table: yyDollar[3].tableName}
}
@@ -15648,7 +15631,7 @@ yydefault:
case 722:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4004
+//line sql.y:4008
{
yyLOCAL = &TruncateTable{Table: yyDollar[2].tableName}
}
@@ -15656,7 +15639,7 @@ yydefault:
case 723:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4010
+//line sql.y:4014
{
yyLOCAL = &Analyze{IsLocal: yyDollar[2].booleanUnion(), Table: yyDollar[4].tableName}
}
@@ -15664,7 +15647,7 @@ yydefault:
case 724:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4016
+//line sql.y:4020
{
yyLOCAL = &PurgeBinaryLogs{To: string(yyDollar[5].str)}
}
@@ -15672,7 +15655,7 @@ yydefault:
case 725:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4020
+//line sql.y:4024
{
yyLOCAL = &PurgeBinaryLogs{Before: string(yyDollar[5].str)}
}
@@ -15680,7 +15663,7 @@ yydefault:
case 726:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4026
+//line sql.y:4030
{
yyLOCAL = &Show{&ShowBasic{Command: Charset, Filter: yyDollar[3].showFilterUnion()}}
}
@@ -15688,7 +15671,7 @@ yydefault:
case 727:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4030
+//line sql.y:4034
{
yyLOCAL = &Show{&ShowBasic{Command: Collation, Filter: yyDollar[3].showFilterUnion()}}
}
@@ -15696,7 +15679,7 @@ yydefault:
case 728:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4034
+//line sql.y:4038
{
yyLOCAL = &Show{&ShowBasic{Full: yyDollar[2].booleanUnion(), Command: Column, Tbl: yyDollar[5].tableName, DbName: yyDollar[6].identifierCS, Filter: yyDollar[7].showFilterUnion()}}
}
@@ -15704,7 +15687,7 @@ yydefault:
case 729:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4038
+//line sql.y:4042
{
yyLOCAL = &Show{&ShowBasic{Command: Database, Filter: yyDollar[3].showFilterUnion()}}
}
@@ -15712,7 +15695,7 @@ yydefault:
case 730:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4042
+//line sql.y:4046
{
yyLOCAL = &Show{&ShowBasic{Command: Database, Filter: yyDollar[3].showFilterUnion()}}
}
@@ -15720,7 +15703,7 @@ yydefault:
case 731:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4046
+//line sql.y:4050
{
yyLOCAL = &Show{&ShowBasic{Command: Keyspace, Filter: yyDollar[3].showFilterUnion()}}
}
@@ -15728,7 +15711,7 @@ yydefault:
case 732:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4050
+//line sql.y:4054
{
yyLOCAL = &Show{&ShowBasic{Command: Keyspace, Filter: yyDollar[3].showFilterUnion()}}
}
@@ -15736,7 +15719,7 @@ yydefault:
case 733:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4054
+//line sql.y:4058
{
yyLOCAL = &Show{&ShowBasic{Command: Function, Filter: yyDollar[4].showFilterUnion()}}
}
@@ -15744,7 +15727,7 @@ yydefault:
case 734:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4058
+//line sql.y:4062
{
yyLOCAL = &Show{&ShowBasic{Command: Index, Tbl: yyDollar[5].tableName, DbName: yyDollar[6].identifierCS, Filter: yyDollar[7].showFilterUnion()}}
}
@@ -15752,7 +15735,7 @@ yydefault:
case 735:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4062
+//line sql.y:4066
{
yyLOCAL = &Show{&ShowBasic{Command: OpenTable, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}}
}
@@ -15760,7 +15743,7 @@ yydefault:
case 736:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4066
+//line sql.y:4070
{
yyLOCAL = &Show{&ShowBasic{Command: Privilege}}
}
@@ -15768,7 +15751,7 @@ yydefault:
case 737:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4070
+//line sql.y:4074
{
yyLOCAL = &Show{&ShowBasic{Command: Procedure, Filter: yyDollar[4].showFilterUnion()}}
}
@@ -15776,7 +15759,7 @@ yydefault:
case 738:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4074
+//line sql.y:4078
{
yyLOCAL = &Show{&ShowBasic{Command: StatusSession, Filter: yyDollar[4].showFilterUnion()}}
}
@@ -15784,7 +15767,7 @@ yydefault:
case 739:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4078
+//line sql.y:4082
{
yyLOCAL = &Show{&ShowBasic{Command: StatusGlobal, Filter: yyDollar[4].showFilterUnion()}}
}
@@ -15792,7 +15775,7 @@ yydefault:
case 740:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4082
+//line sql.y:4086
{
yyLOCAL = &Show{&ShowBasic{Command: VariableSession, Filter: yyDollar[4].showFilterUnion()}}
}
@@ -15800,7 +15783,7 @@ yydefault:
case 741:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4086
+//line sql.y:4090
{
yyLOCAL = &Show{&ShowBasic{Command: VariableGlobal, Filter: yyDollar[4].showFilterUnion()}}
}
@@ -15808,7 +15791,7 @@ yydefault:
case 742:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4090
+//line sql.y:4094
{
yyLOCAL = &Show{&ShowBasic{Command: TableStatus, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}}
}
@@ -15816,7 +15799,7 @@ yydefault:
case 743:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4094
+//line sql.y:4098
{
yyLOCAL = &Show{&ShowBasic{Command: Table, Full: yyDollar[2].booleanUnion(), DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}}
}
@@ -15824,7 +15807,7 @@ yydefault:
case 744:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4098
+//line sql.y:4102
{
yyLOCAL = &Show{&ShowBasic{Command: Trigger, DbName: yyDollar[3].identifierCS, Filter: yyDollar[4].showFilterUnion()}}
}
@@ -15832,7 +15815,7 @@ yydefault:
case 745:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4102
+//line sql.y:4106
{
yyLOCAL = &Show{&ShowCreate{Command: CreateDb, Op: yyDollar[4].tableName}}
}
@@ -15840,7 +15823,7 @@ yydefault:
case 746:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4106
+//line sql.y:4110
{
yyLOCAL = &Show{&ShowCreate{Command: CreateE, Op: yyDollar[4].tableName}}
}
@@ -15848,7 +15831,7 @@ yydefault:
case 747:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4110
+//line sql.y:4114
{
yyLOCAL = &Show{&ShowCreate{Command: CreateF, Op: yyDollar[4].tableName}}
}
@@ -15856,7 +15839,7 @@ yydefault:
case 748:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4114
+//line sql.y:4118
{
yyLOCAL = &Show{&ShowCreate{Command: CreateProc, Op: yyDollar[4].tableName}}
}
@@ -15864,7 +15847,7 @@ yydefault:
case 749:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4118
+//line sql.y:4122
{
yyLOCAL = &Show{&ShowCreate{Command: CreateTbl, Op: yyDollar[4].tableName}}
}
@@ -15872,7 +15855,7 @@ yydefault:
case 750:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4122
+//line sql.y:4126
{
yyLOCAL = &Show{&ShowCreate{Command: CreateTr, Op: yyDollar[4].tableName}}
}
@@ -15880,7 +15863,7 @@ yydefault:
case 751:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4126
+//line sql.y:4130
{
yyLOCAL = &Show{&ShowCreate{Command: CreateV, Op: yyDollar[4].tableName}}
}
@@ -15888,7 +15871,7 @@ yydefault:
case 752:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4130
+//line sql.y:4134
{
yyLOCAL = &Show{&ShowBasic{Command: Engines}}
}
@@ -15896,7 +15879,7 @@ yydefault:
case 753:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4134
+//line sql.y:4138
{
yyLOCAL = &Show{&ShowBasic{Command: Plugins}}
}
@@ -15904,7 +15887,7 @@ yydefault:
case 754:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4138
+//line sql.y:4142
{
yyLOCAL = &Show{&ShowBasic{Command: GtidExecGlobal, DbName: yyDollar[4].identifierCS}}
}
@@ -15912,7 +15895,7 @@ yydefault:
case 755:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4142
+//line sql.y:4146
{
yyLOCAL = &Show{&ShowBasic{Command: VGtidExecGlobal, DbName: yyDollar[4].identifierCS}}
}
@@ -15920,7 +15903,7 @@ yydefault:
case 756:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4146
+//line sql.y:4150
{
yyLOCAL = &Show{&ShowBasic{Command: VitessVariables, Filter: yyDollar[4].showFilterUnion()}}
}
@@ -15928,7 +15911,7 @@ yydefault:
case 757:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4150
+//line sql.y:4154
{
yyLOCAL = &Show{&ShowBasic{Command: VitessMigrations, Filter: yyDollar[4].showFilterUnion(), DbName: yyDollar[3].identifierCS}}
}
@@ -15936,7 +15919,7 @@ yydefault:
case 758:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4154
+//line sql.y:4158
{
yyLOCAL = &ShowMigrationLogs{UUID: string(yyDollar[3].str)}
}
@@ -15944,7 +15927,7 @@ yydefault:
case 759:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4158
+//line sql.y:4162
{
yyLOCAL = &ShowThrottledApps{}
}
@@ -15952,7 +15935,7 @@ yydefault:
case 760:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4162
+//line sql.y:4166
{
yyLOCAL = &Show{&ShowBasic{Command: VitessReplicationStatus, Filter: yyDollar[3].showFilterUnion()}}
}
@@ -15960,7 +15943,7 @@ yydefault:
case 761:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4166
+//line sql.y:4170
{
yyLOCAL = &ShowThrottlerStatus{}
}
@@ -15968,7 +15951,7 @@ yydefault:
case 762:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4170
+//line sql.y:4174
{
yyLOCAL = &Show{&ShowBasic{Command: VschemaTables}}
}
@@ -15976,7 +15959,7 @@ yydefault:
case 763:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4174
+//line sql.y:4178
{
yyLOCAL = &Show{&ShowBasic{Command: VschemaKeyspaces}}
}
@@ -15984,7 +15967,7 @@ yydefault:
case 764:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4178
+//line sql.y:4182
{
yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes}}
}
@@ -15992,7 +15975,7 @@ yydefault:
case 765:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4182
+//line sql.y:4186
{
yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes, Tbl: yyDollar[5].tableName}}
}
@@ -16000,7 +15983,7 @@ yydefault:
case 766:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4186
+//line sql.y:4190
{
yyLOCAL = &Show{&ShowBasic{Command: Warnings}}
}
@@ -16008,7 +15991,7 @@ yydefault:
case 767:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4190
+//line sql.y:4194
{
yyLOCAL = &Show{&ShowBasic{Command: VitessShards, Filter: yyDollar[3].showFilterUnion()}}
}
@@ -16016,7 +15999,7 @@ yydefault:
case 768:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4194
+//line sql.y:4198
{
yyLOCAL = &Show{&ShowBasic{Command: VitessTablets, Filter: yyDollar[3].showFilterUnion()}}
}
@@ -16024,7 +16007,7 @@ yydefault:
case 769:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4198
+//line sql.y:4202
{
yyLOCAL = &Show{&ShowBasic{Command: VitessTarget}}
}
@@ -16032,7 +16015,7 @@ yydefault:
case 770:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4205
+//line sql.y:4209
{
yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].identifierCI.String())}}
}
@@ -16040,7 +16023,7 @@ yydefault:
case 771:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4209
+//line sql.y:4213
{
yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}}
}
@@ -16048,7 +16031,7 @@ yydefault:
case 772:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4213
+//line sql.y:4217
{
yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String()}}
}
@@ -16056,7 +16039,7 @@ yydefault:
case 773:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4217
+//line sql.y:4221
{
yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}}
}
@@ -16064,7 +16047,7 @@ yydefault:
case 774:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4221
+//line sql.y:4225
{
yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str)}}
}
@@ -16072,7 +16055,7 @@ yydefault:
case 775:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4225
+//line sql.y:4229
{
yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}}
}
@@ -16080,7 +16063,7 @@ yydefault:
case 776:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4229
+//line sql.y:4233
{
yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}}
}
@@ -16088,7 +16071,7 @@ yydefault:
case 777:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4233
+//line sql.y:4237
{
yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[3].str)}}
}
@@ -16096,7 +16079,7 @@ yydefault:
case 778:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4237
+//line sql.y:4241
{
yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str)}}
}
@@ -16104,7 +16087,7 @@ yydefault:
case 779:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4241
+//line sql.y:4245
{
yyLOCAL = &Show{&ShowTransactionStatus{TransactionID: string(yyDollar[5].str)}}
}
@@ -16112,7 +16095,7 @@ yydefault:
case 780:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4245
+//line sql.y:4249
{
yyLOCAL = &Show{&ShowTransactionStatus{}}
}
@@ -16120,37 +16103,37 @@ yydefault:
case 781:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4249
+//line sql.y:4253
{
yyLOCAL = &Show{&ShowTransactionStatus{Keyspace: yyDollar[5].identifierCS.String()}}
}
yyVAL.union = yyLOCAL
case 782:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:4254
+//line sql.y:4258
{
}
case 783:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4256
+//line sql.y:4260
{
}
case 784:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:4260
+//line sql.y:4264
{
yyVAL.str = ""
}
case 785:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4264
+//line sql.y:4268
{
yyVAL.str = "extended "
}
case 786:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:4270
+//line sql.y:4274
{
yyLOCAL = false
}
@@ -16158,45 +16141,45 @@ yydefault:
case 787:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:4274
+//line sql.y:4278
{
yyLOCAL = true
}
yyVAL.union = yyLOCAL
case 788:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4280
+//line sql.y:4284
{
yyVAL.str = string(yyDollar[1].str)
}
case 789:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4284
+//line sql.y:4288
{
yyVAL.str = string(yyDollar[1].str)
}
case 790:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:4290
+//line sql.y:4294
{
yyVAL.identifierCS = NewIdentifierCS("")
}
case 791:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:4294
+//line sql.y:4298
{
yyVAL.identifierCS = yyDollar[2].identifierCS
}
case 792:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:4298
+//line sql.y:4302
{
yyVAL.identifierCS = yyDollar[2].identifierCS
}
case 793:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *ShowFilter
-//line sql.y:4304
+//line sql.y:4308
{
yyLOCAL = nil
}
@@ -16204,7 +16187,7 @@ yydefault:
case 794:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ShowFilter
-//line sql.y:4308
+//line sql.y:4312
{
yyLOCAL = &ShowFilter{Like: string(yyDollar[2].str)}
}
@@ -16212,7 +16195,7 @@ yydefault:
case 795:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ShowFilter
-//line sql.y:4312
+//line sql.y:4316
{
yyLOCAL = &ShowFilter{Filter: yyDollar[2].exprUnion()}
}
@@ -16220,7 +16203,7 @@ yydefault:
case 796:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *ShowFilter
-//line sql.y:4318
+//line sql.y:4322
{
yyLOCAL = nil
}
@@ -16228,45 +16211,45 @@ yydefault:
case 797:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ShowFilter
-//line sql.y:4322
+//line sql.y:4326
{
yyLOCAL = &ShowFilter{Like: string(yyDollar[2].str)}
}
yyVAL.union = yyLOCAL
case 798:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:4328
+//line sql.y:4332
{
yyVAL.empty = struct{}{}
}
case 799:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4332
+//line sql.y:4336
{
yyVAL.empty = struct{}{}
}
case 800:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4336
+//line sql.y:4340
{
yyVAL.empty = struct{}{}
}
case 801:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4342
+//line sql.y:4346
{
yyVAL.str = string(yyDollar[1].str)
}
case 802:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4346
+//line sql.y:4350
{
yyVAL.str = string(yyDollar[1].str)
}
case 803:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4352
+//line sql.y:4356
{
yyLOCAL = &Use{DBName: yyDollar[2].identifierCS}
}
@@ -16274,7 +16257,7 @@ yydefault:
case 804:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4356
+//line sql.y:4360
{
yyLOCAL = &Use{DBName: IdentifierCS{v: ""}}
}
@@ -16282,39 +16265,39 @@ yydefault:
case 805:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4360
+//line sql.y:4364
{
yyLOCAL = &Use{DBName: NewIdentifierCS(yyDollar[2].identifierCS.String() + "@" + string(yyDollar[3].str))}
}
yyVAL.union = yyLOCAL
case 806:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4367
+//line sql.y:4371
{
yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str))
}
case 807:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4371
+//line sql.y:4375
{
yyVAL.identifierCS = NewIdentifierCS("@" + string(yyDollar[1].str))
}
case 808:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4375
+//line sql.y:4379
{
yyVAL.identifierCS = NewIdentifierCS("@@" + string(yyDollar[1].str))
}
case 809:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4379
+//line sql.y:4383
{
yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str))
}
case 810:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4386
+//line sql.y:4390
{
yyLOCAL = &Begin{}
}
@@ -16322,7 +16305,7 @@ yydefault:
case 811:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4390
+//line sql.y:4394
{
yyLOCAL = &Begin{TxAccessModes: yyDollar[3].txAccessModesUnion()}
}
@@ -16330,7 +16313,7 @@ yydefault:
case 812:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL []TxAccessMode
-//line sql.y:4395
+//line sql.y:4399
{
yyLOCAL = nil
}
@@ -16338,7 +16321,7 @@ yydefault:
case 813:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []TxAccessMode
-//line sql.y:4399
+//line sql.y:4403
{
yyLOCAL = yyDollar[1].txAccessModesUnion()
}
@@ -16346,14 +16329,14 @@ yydefault:
case 814:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []TxAccessMode
-//line sql.y:4405
+//line sql.y:4409
{
yyLOCAL = []TxAccessMode{yyDollar[1].txAccessModeUnion()}
}
yyVAL.union = yyLOCAL
case 815:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:4409
+//line sql.y:4413
{
yySLICE := (*[]TxAccessMode)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].txAccessModeUnion())
@@ -16361,7 +16344,7 @@ yydefault:
case 816:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL TxAccessMode
-//line sql.y:4415
+//line sql.y:4419
{
yyLOCAL = WithConsistentSnapshot
}
@@ -16369,7 +16352,7 @@ yydefault:
case 817:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL TxAccessMode
-//line sql.y:4419
+//line sql.y:4423
{
yyLOCAL = ReadWrite
}
@@ -16377,7 +16360,7 @@ yydefault:
case 818:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL TxAccessMode
-//line sql.y:4423
+//line sql.y:4427
{
yyLOCAL = ReadOnly
}
@@ -16385,7 +16368,7 @@ yydefault:
case 819:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4430
+//line sql.y:4434
{
yyLOCAL = &Commit{}
}
@@ -16393,7 +16376,7 @@ yydefault:
case 820:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4436
+//line sql.y:4440
{
yyLOCAL = &Rollback{}
}
@@ -16401,39 +16384,39 @@ yydefault:
case 821:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4440
+//line sql.y:4444
{
yyLOCAL = &SRollback{Name: yyDollar[5].identifierCI}
}
yyVAL.union = yyLOCAL
case 822:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:4445
+//line sql.y:4449
{
yyVAL.empty = struct{}{}
}
case 823:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4447
+//line sql.y:4451
{
yyVAL.empty = struct{}{}
}
case 824:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:4450
+//line sql.y:4454
{
yyVAL.empty = struct{}{}
}
case 825:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4452
+//line sql.y:4456
{
yyVAL.empty = struct{}{}
}
case 826:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4456
+//line sql.y:4460
{
yyLOCAL = &Savepoint{Name: yyDollar[2].identifierCI}
}
@@ -16441,7 +16424,7 @@ yydefault:
case 827:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4462
+//line sql.y:4466
{
yyLOCAL = &Release{Name: yyDollar[3].identifierCI}
}
@@ -16449,7 +16432,7 @@ yydefault:
case 828:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL ExplainType
-//line sql.y:4467
+//line sql.y:4471
{
yyLOCAL = EmptyType
}
@@ -16457,7 +16440,7 @@ yydefault:
case 829:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL ExplainType
-//line sql.y:4471
+//line sql.y:4475
{
yyLOCAL = JSONType
}
@@ -16465,7 +16448,7 @@ yydefault:
case 830:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL ExplainType
-//line sql.y:4475
+//line sql.y:4479
{
yyLOCAL = TreeType
}
@@ -16473,7 +16456,7 @@ yydefault:
case 831:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL ExplainType
-//line sql.y:4479
+//line sql.y:4483
{
yyLOCAL = TraditionalType
}
@@ -16481,7 +16464,7 @@ yydefault:
case 832:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ExplainType
-//line sql.y:4483
+//line sql.y:4487
{
yyLOCAL = AnalyzeType
}
@@ -16489,7 +16472,7 @@ yydefault:
case 833:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL VExplainType
-//line sql.y:4488
+//line sql.y:4492
{
yyLOCAL = PlanVExplainType
}
@@ -16497,7 +16480,7 @@ yydefault:
case 834:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL VExplainType
-//line sql.y:4492
+//line sql.y:4496
{
yyLOCAL = PlanVExplainType
}
@@ -16505,7 +16488,7 @@ yydefault:
case 835:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL VExplainType
-//line sql.y:4496
+//line sql.y:4500
{
yyLOCAL = AllVExplainType
}
@@ -16513,7 +16496,7 @@ yydefault:
case 836:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL VExplainType
-//line sql.y:4500
+//line sql.y:4504
{
yyLOCAL = QueriesVExplainType
}
@@ -16521,7 +16504,7 @@ yydefault:
case 837:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL VExplainType
-//line sql.y:4504
+//line sql.y:4508
{
yyLOCAL = TraceVExplainType
}
@@ -16529,33 +16512,33 @@ yydefault:
case 838:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL VExplainType
-//line sql.y:4508
+//line sql.y:4512
{
yyLOCAL = KeysVExplainType
}
yyVAL.union = yyLOCAL
case 839:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4514
+//line sql.y:4518
{
yyVAL.str = yyDollar[1].str
}
case 840:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4518
+//line sql.y:4522
{
yyVAL.str = yyDollar[1].str
}
case 841:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4522
+//line sql.y:4526
{
yyVAL.str = yyDollar[1].str
}
case 842:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4528
+//line sql.y:4532
{
yyLOCAL = yyDollar[1].selStmtUnion()
}
@@ -16563,7 +16546,7 @@ yydefault:
case 843:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4532
+//line sql.y:4536
{
yyLOCAL = yyDollar[1].statementUnion()
}
@@ -16571,7 +16554,7 @@ yydefault:
case 844:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4536
+//line sql.y:4540
{
yyLOCAL = yyDollar[1].statementUnion()
}
@@ -16579,33 +16562,33 @@ yydefault:
case 845:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4540
+//line sql.y:4544
{
yyLOCAL = yyDollar[1].statementUnion()
}
yyVAL.union = yyLOCAL
case 846:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:4545
+//line sql.y:4549
{
yyVAL.str = ""
}
case 847:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4549
+//line sql.y:4553
{
yyVAL.str = yyDollar[1].identifierCI.val
}
case 848:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4553
+//line sql.y:4557
{
yyVAL.str = encodeSQLString(yyDollar[1].str)
}
case 849:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4559
+//line sql.y:4563
{
yyLOCAL = &ExplainTab{Table: yyDollar[3].tableName, Wild: yyDollar[4].str}
}
@@ -16613,7 +16596,7 @@ yydefault:
case 850:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4563
+//line sql.y:4567
{
yyLOCAL = &ExplainStmt{Type: yyDollar[3].explainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()}
}
@@ -16621,7 +16604,7 @@ yydefault:
case 851:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4569
+//line sql.y:4573
{
yyLOCAL = &VExplainStmt{Type: yyDollar[3].vexplainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()}
}
@@ -16629,7 +16612,7 @@ yydefault:
case 852:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4575
+//line sql.y:4579
{
yyLOCAL = &OtherAdmin{}
}
@@ -16637,7 +16620,7 @@ yydefault:
case 853:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4579
+//line sql.y:4583
{
yyLOCAL = &OtherAdmin{}
}
@@ -16645,7 +16628,7 @@ yydefault:
case 854:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4585
+//line sql.y:4589
{
yyLOCAL = &LockTables{Tables: yyDollar[3].tableAndLockTypesUnion()}
}
@@ -16653,14 +16636,14 @@ yydefault:
case 855:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL TableAndLockTypes
-//line sql.y:4591
+//line sql.y:4595
{
yyLOCAL = TableAndLockTypes{yyDollar[1].tableAndLockTypeUnion()}
}
yyVAL.union = yyLOCAL
case 856:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:4595
+//line sql.y:4599
{
yySLICE := (*TableAndLockTypes)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].tableAndLockTypeUnion())
@@ -16668,7 +16651,7 @@ yydefault:
case 857:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *TableAndLockType
-//line sql.y:4601
+//line sql.y:4605
{
yyLOCAL = &TableAndLockType{Table: yyDollar[1].aliasedTableNameUnion(), Lock: yyDollar[2].lockTypeUnion()}
}
@@ -16676,7 +16659,7 @@ yydefault:
case 858:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL LockType
-//line sql.y:4607
+//line sql.y:4611
{
yyLOCAL = Read
}
@@ -16684,7 +16667,7 @@ yydefault:
case 859:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL LockType
-//line sql.y:4611
+//line sql.y:4615
{
yyLOCAL = ReadLocal
}
@@ -16692,7 +16675,7 @@ yydefault:
case 860:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL LockType
-//line sql.y:4615
+//line sql.y:4619
{
yyLOCAL = Write
}
@@ -16700,7 +16683,7 @@ yydefault:
case 861:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL LockType
-//line sql.y:4619
+//line sql.y:4623
{
yyLOCAL = LowPriorityWrite
}
@@ -16708,7 +16691,7 @@ yydefault:
case 862:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4625
+//line sql.y:4629
{
yyLOCAL = &UnlockTables{}
}
@@ -16716,7 +16699,7 @@ yydefault:
case 863:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4631
+//line sql.y:4635
{
yyLOCAL = &RevertMigration{Comments: Comments(yyDollar[2].strs).Parsed(), UUID: string(yyDollar[4].str)}
}
@@ -16724,7 +16707,7 @@ yydefault:
case 864:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4637
+//line sql.y:4641
{
yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), FlushOptions: yyDollar[3].strs}
}
@@ -16732,7 +16715,7 @@ yydefault:
case 865:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4641
+//line sql.y:4645
{
yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion()}
}
@@ -16740,7 +16723,7 @@ yydefault:
case 866:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4645
+//line sql.y:4649
{
yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), WithLock: true}
}
@@ -16748,7 +16731,7 @@ yydefault:
case 867:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4649
+//line sql.y:4653
{
yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion()}
}
@@ -16756,7 +16739,7 @@ yydefault:
case 868:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4653
+//line sql.y:4657
{
yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion(), WithLock: true}
}
@@ -16764,99 +16747,99 @@ yydefault:
case 869:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4657
+//line sql.y:4661
{
yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion(), ForExport: true}
}
yyVAL.union = yyLOCAL
case 870:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4663
+//line sql.y:4667
{
yyVAL.strs = []string{yyDollar[1].str}
}
case 871:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:4667
+//line sql.y:4671
{
yyVAL.strs = append(yyDollar[1].strs, yyDollar[3].str)
}
case 872:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:4673
+//line sql.y:4677
{
yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str)
}
case 873:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:4677
+//line sql.y:4681
{
yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str)
}
case 874:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:4681
+//line sql.y:4685
{
yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str)
}
case 875:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:4685
+//line sql.y:4689
{
yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str)
}
case 876:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4689
+//line sql.y:4693
{
yyVAL.str = string(yyDollar[1].str)
}
case 877:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4693
+//line sql.y:4697
{
yyVAL.str = string(yyDollar[1].str)
}
case 878:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4697
+//line sql.y:4701
{
yyVAL.str = string(yyDollar[1].str)
}
case 879:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:4701
+//line sql.y:4705
{
yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) + yyDollar[3].str
}
case 880:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:4705
+//line sql.y:4709
{
yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str)
}
case 881:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4709
+//line sql.y:4713
{
yyVAL.str = string(yyDollar[1].str)
}
case 882:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4713
+//line sql.y:4717
{
yyVAL.str = string(yyDollar[1].str)
}
case 883:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4717
+//line sql.y:4721
{
yyVAL.str = string(yyDollar[1].str)
}
case 884:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:4722
+//line sql.y:4726
{
yyLOCAL = false
}
@@ -16864,7 +16847,7 @@ yydefault:
case 885:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:4726
+//line sql.y:4730
{
yyLOCAL = true
}
@@ -16872,52 +16855,52 @@ yydefault:
case 886:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:4730
+//line sql.y:4734
{
yyLOCAL = true
}
yyVAL.union = yyLOCAL
case 887:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:4735
+//line sql.y:4739
{
yyVAL.str = ""
}
case 888:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:4739
+//line sql.y:4743
{
yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String()
}
case 889:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:4744
+//line sql.y:4748
{
setAllowComments(yylex, true)
}
case 890:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:4748
+//line sql.y:4752
{
yyVAL.strs = yyDollar[2].strs
setAllowComments(yylex, false)
}
case 891:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:4754
+//line sql.y:4758
{
yyVAL.strs = nil
}
case 892:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:4758
+//line sql.y:4762
{
yyVAL.strs = append(yyDollar[1].strs, yyDollar[2].str)
}
case 893:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:4764
+//line sql.y:4768
{
yyLOCAL = true
}
@@ -16925,7 +16908,7 @@ yydefault:
case 894:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL bool
-//line sql.y:4768
+//line sql.y:4772
{
yyLOCAL = false
}
@@ -16933,33 +16916,33 @@ yydefault:
case 895:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL bool
-//line sql.y:4772
+//line sql.y:4776
{
yyLOCAL = true
}
yyVAL.union = yyLOCAL
case 896:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:4777
+//line sql.y:4781
{
yyVAL.str = ""
}
case 897:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4781
+//line sql.y:4785
{
yyVAL.str = SQLNoCacheStr
}
case 898:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4785
+//line sql.y:4789
{
yyVAL.str = SQLCacheStr
}
case 899:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:4790
+//line sql.y:4794
{
yyLOCAL = false
}
@@ -16967,7 +16950,7 @@ yydefault:
case 900:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:4794
+//line sql.y:4798
{
yyLOCAL = true
}
@@ -16975,7 +16958,7 @@ yydefault:
case 901:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:4798
+//line sql.y:4802
{
yyLOCAL = true
}
@@ -16983,7 +16966,7 @@ yydefault:
case 902:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4804
+//line sql.y:4808
{
yyLOCAL = &PrepareStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Statement: yyDollar[5].exprUnion()}
}
@@ -16991,7 +16974,7 @@ yydefault:
case 903:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4808
+//line sql.y:4812
{
yyLOCAL = &PrepareStmt{
Name: yyDollar[3].identifierCI,
@@ -17003,7 +16986,7 @@ yydefault:
case 904:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4818
+//line sql.y:4822
{
yyLOCAL = &ExecuteStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Arguments: yyDollar[4].variablesUnion()}
}
@@ -17011,7 +16994,7 @@ yydefault:
case 905:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL []*Variable
-//line sql.y:4823
+//line sql.y:4827
{
yyLOCAL = nil
}
@@ -17019,7 +17002,7 @@ yydefault:
case 906:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL []*Variable
-//line sql.y:4827
+//line sql.y:4831
{
yyLOCAL = yyDollar[2].variablesUnion()
}
@@ -17027,7 +17010,7 @@ yydefault:
case 907:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4833
+//line sql.y:4837
{
yyLOCAL = &DeallocateStmt{Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI}
}
@@ -17035,112 +17018,112 @@ yydefault:
case 908:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Statement
-//line sql.y:4837
+//line sql.y:4841
{
yyLOCAL = &DeallocateStmt{Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI}
}
yyVAL.union = yyLOCAL
case 909:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:4842
+//line sql.y:4846
{
yyVAL.strs = nil
}
case 910:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4846
+//line sql.y:4850
{
yyVAL.strs = yyDollar[1].strs
}
case 911:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4852
+//line sql.y:4856
{
yyVAL.strs = []string{yyDollar[1].str}
}
case 912:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:4856
+//line sql.y:4860
{
yyVAL.strs = append(yyDollar[1].strs, yyDollar[2].str)
}
case 913:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4862
+//line sql.y:4866
{
yyVAL.str = SQLNoCacheStr
}
case 914:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4866
+//line sql.y:4870
{
yyVAL.str = SQLCacheStr
}
case 915:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4870
+//line sql.y:4874
{
yyVAL.str = DistinctStr
}
case 916:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4874
+//line sql.y:4878
{
yyVAL.str = DistinctStr
}
case 917:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4878
+//line sql.y:4882
{
yyVAL.str = HighPriorityStr
}
case 918:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4882
+//line sql.y:4886
{
yyVAL.str = StraightJoinHint
}
case 919:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4886
+//line sql.y:4890
{
yyVAL.str = SQLBufferResultStr
}
case 920:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4890
+//line sql.y:4894
{
yyVAL.str = SQLSmallResultStr
}
case 921:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4894
+//line sql.y:4898
{
yyVAL.str = SQLBigResultStr
}
case 922:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4898
+//line sql.y:4902
{
yyVAL.str = SQLCalcFoundRowsStr
}
case 923:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4902
+//line sql.y:4906
{
yyVAL.str = AllStr // These are not picked up by NewSelect, and so ALL will be dropped. But this is OK, since it's redundant anyway
}
case 924:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL SelectExprs
-//line sql.y:4908
+//line sql.y:4912
{
yyLOCAL = SelectExprs{yyDollar[1].selectExprUnion()}
}
yyVAL.union = yyLOCAL
case 925:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:4912
+//line sql.y:4916
{
yySLICE := (*SelectExprs)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].selectExprUnion())
@@ -17148,7 +17131,7 @@ yydefault:
case 926:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL SelectExpr
-//line sql.y:4918
+//line sql.y:4922
{
yyLOCAL = &StarExpr{}
}
@@ -17156,7 +17139,7 @@ yydefault:
case 927:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL SelectExpr
-//line sql.y:4922
+//line sql.y:4926
{
yyLOCAL = &AliasedExpr{Expr: yyDollar[1].exprUnion(), As: yyDollar[2].identifierCI}
}
@@ -17164,7 +17147,7 @@ yydefault:
case 928:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL SelectExpr
-//line sql.y:4926
+//line sql.y:4930
{
yyLOCAL = &StarExpr{TableName: TableName{Name: yyDollar[1].identifierCS}}
}
@@ -17172,39 +17155,39 @@ yydefault:
case 929:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL SelectExpr
-//line sql.y:4930
+//line sql.y:4934
{
yyLOCAL = &StarExpr{TableName: TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}}
}
yyVAL.union = yyLOCAL
case 930:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:4935
+//line sql.y:4939
{
yyVAL.identifierCI = IdentifierCI{}
}
case 931:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4939
+//line sql.y:4943
{
yyVAL.identifierCI = yyDollar[1].identifierCI
}
case 932:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:4943
+//line sql.y:4947
{
yyVAL.identifierCI = yyDollar[2].identifierCI
}
case 934:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:4950
+//line sql.y:4954
{
yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str))
}
case 935:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL TableExprs
-//line sql.y:4955
+//line sql.y:4959
{
yyLOCAL = TableExprs{&AliasedTableExpr{Expr: TableName{Name: NewIdentifierCS("dual")}}}
}
@@ -17212,7 +17195,7 @@ yydefault:
case 936:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL TableExprs
-//line sql.y:4959
+//line sql.y:4963
{
yyLOCAL = yyDollar[1].tableExprsUnion()
}
@@ -17220,7 +17203,7 @@ yydefault:
case 937:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL TableExprs
-//line sql.y:4965
+//line sql.y:4969
{
yyLOCAL = yyDollar[2].tableExprsUnion()
}
@@ -17228,14 +17211,14 @@ yydefault:
case 938:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL TableExprs
-//line sql.y:4971
+//line sql.y:4975
{
yyLOCAL = TableExprs{yyDollar[1].tableExprUnion()}
}
yyVAL.union = yyLOCAL
case 939:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:4975
+//line sql.y:4979
{
yySLICE := (*TableExprs)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].tableExprUnion())
@@ -17243,7 +17226,7 @@ yydefault:
case 942:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL TableExpr
-//line sql.y:4985
+//line sql.y:4989
{
yyLOCAL = yyDollar[1].aliasedTableNameUnion()
}
@@ -17251,7 +17234,7 @@ yydefault:
case 943:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL TableExpr
-//line sql.y:4989
+//line sql.y:4993
{
yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].derivedTableUnion(), As: yyDollar[3].identifierCS, Columns: yyDollar[4].columnsUnion()}
}
@@ -17259,7 +17242,7 @@ yydefault:
case 944:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL TableExpr
-//line sql.y:4993
+//line sql.y:4997
{
yyLOCAL = &ParenTableExpr{Exprs: yyDollar[2].tableExprsUnion()}
}
@@ -17267,7 +17250,7 @@ yydefault:
case 945:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL TableExpr
-//line sql.y:4997
+//line sql.y:5001
{
yyLOCAL = yyDollar[1].tableExprUnion()
}
@@ -17275,7 +17258,7 @@ yydefault:
case 946:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *DerivedTable
-//line sql.y:5003
+//line sql.y:5007
{
yyLOCAL = &DerivedTable{Lateral: false, Select: yyDollar[1].selStmtUnion()}
}
@@ -17283,7 +17266,7 @@ yydefault:
case 947:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *DerivedTable
-//line sql.y:5007
+//line sql.y:5011
{
yyLOCAL = &DerivedTable{Lateral: true, Select: yyDollar[2].selStmtUnion()}
}
@@ -17291,7 +17274,7 @@ yydefault:
case 948:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *AliasedTableExpr
-//line sql.y:5013
+//line sql.y:5017
{
yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].tableName, As: yyDollar[2].identifierCS, Hints: yyDollar[3].indexHintsUnion()}
}
@@ -17299,7 +17282,7 @@ yydefault:
case 949:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL *AliasedTableExpr
-//line sql.y:5017
+//line sql.y:5021
{
yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].tableName, Partitions: yyDollar[4].partitionsUnion(), As: yyDollar[6].identifierCS, Hints: yyDollar[7].indexHintsUnion()}
}
@@ -17307,7 +17290,7 @@ yydefault:
case 950:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL Columns
-//line sql.y:5022
+//line sql.y:5026
{
yyLOCAL = nil
}
@@ -17315,7 +17298,7 @@ yydefault:
case 951:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Columns
-//line sql.y:5026
+//line sql.y:5030
{
yyLOCAL = yyDollar[2].columnsUnion()
}
@@ -17323,7 +17306,7 @@ yydefault:
case 952:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL Columns
-//line sql.y:5031
+//line sql.y:5035
{
yyLOCAL = nil
}
@@ -17331,7 +17314,7 @@ yydefault:
case 953:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Columns
-//line sql.y:5035
+//line sql.y:5039
{
yyLOCAL = yyDollar[1].columnsUnion()
}
@@ -17339,14 +17322,14 @@ yydefault:
case 954:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Columns
-//line sql.y:5041
+//line sql.y:5045
{
yyLOCAL = Columns{yyDollar[1].identifierCI}
}
yyVAL.union = yyLOCAL
case 955:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:5045
+//line sql.y:5049
{
yySLICE := (*Columns)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].identifierCI)
@@ -17354,14 +17337,14 @@ yydefault:
case 956:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []*Variable
-//line sql.y:5051
+//line sql.y:5055
{
yyLOCAL = []*Variable{yyDollar[1].variableUnion()}
}
yyVAL.union = yyLOCAL
case 957:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:5055
+//line sql.y:5059
{
yySLICE := (*[]*Variable)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].variableUnion())
@@ -17369,7 +17352,7 @@ yydefault:
case 958:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Columns
-//line sql.y:5061
+//line sql.y:5065
{
yyLOCAL = Columns{yyDollar[1].identifierCI}
}
@@ -17377,21 +17360,21 @@ yydefault:
case 959:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Columns
-//line sql.y:5065
+//line sql.y:5069
{
yyLOCAL = Columns{NewIdentifierCI(string(yyDollar[1].str))}
}
yyVAL.union = yyLOCAL
case 960:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:5069
+//line sql.y:5073
{
yySLICE := (*Columns)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].identifierCI)
}
case 961:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:5073
+//line sql.y:5077
{
yySLICE := (*Columns)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, NewIdentifierCI(string(yyDollar[3].str)))
@@ -17399,14 +17382,14 @@ yydefault:
case 962:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Partitions
-//line sql.y:5079
+//line sql.y:5083
{
yyLOCAL = Partitions{yyDollar[1].identifierCI}
}
yyVAL.union = yyLOCAL
case 963:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:5083
+//line sql.y:5087
{
yySLICE := (*Partitions)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].identifierCI)
@@ -17414,7 +17397,7 @@ yydefault:
case 964:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL TableExpr
-//line sql.y:5096
+//line sql.y:5100
{
yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition}
}
@@ -17422,7 +17405,7 @@ yydefault:
case 965:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL TableExpr
-//line sql.y:5100
+//line sql.y:5104
{
yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition}
}
@@ -17430,7 +17413,7 @@ yydefault:
case 966:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL TableExpr
-//line sql.y:5104
+//line sql.y:5108
{
yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition}
}
@@ -17438,87 +17421,87 @@ yydefault:
case 967:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL TableExpr
-//line sql.y:5108
+//line sql.y:5112
{
yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion()}
}
yyVAL.union = yyLOCAL
case 968:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:5114
+//line sql.y:5118
{
yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()}
}
case 969:
yyDollar = yyS[yypt-4 : yypt+1]
-//line sql.y:5116
+//line sql.y:5120
{
yyVAL.joinCondition = &JoinCondition{Using: yyDollar[3].columnsUnion()}
}
case 970:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:5120
+//line sql.y:5124
{
yyVAL.joinCondition = &JoinCondition{}
}
case 971:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:5122
+//line sql.y:5126
{
yyVAL.joinCondition = yyDollar[1].joinCondition
}
case 972:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:5126
+//line sql.y:5130
{
yyVAL.joinCondition = &JoinCondition{}
}
case 973:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:5128
+//line sql.y:5132
{
yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()}
}
case 974:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:5131
+//line sql.y:5135
{
yyVAL.empty = struct{}{}
}
case 975:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:5133
+//line sql.y:5137
{
yyVAL.empty = struct{}{}
}
case 976:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:5136
+//line sql.y:5140
{
yyVAL.identifierCS = NewIdentifierCS("")
}
case 977:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:5140
+//line sql.y:5144
{
yyVAL.identifierCS = yyDollar[1].identifierCS
}
case 978:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:5144
+//line sql.y:5148
{
yyVAL.identifierCS = yyDollar[2].identifierCS
}
case 980:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:5151
+//line sql.y:5155
{
yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str))
}
case 981:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL JoinType
-//line sql.y:5157
+//line sql.y:5161
{
yyLOCAL = NormalJoinType
}
@@ -17526,7 +17509,7 @@ yydefault:
case 982:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL JoinType
-//line sql.y:5161
+//line sql.y:5165
{
yyLOCAL = NormalJoinType
}
@@ -17534,7 +17517,7 @@ yydefault:
case 983:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL JoinType
-//line sql.y:5165
+//line sql.y:5169
{
yyLOCAL = NormalJoinType
}
@@ -17542,7 +17525,7 @@ yydefault:
case 984:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL JoinType
-//line sql.y:5171
+//line sql.y:5175
{
yyLOCAL = StraightJoinType
}
@@ -17550,7 +17533,7 @@ yydefault:
case 985:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL JoinType
-//line sql.y:5177
+//line sql.y:5181
{
yyLOCAL = LeftJoinType
}
@@ -17558,7 +17541,7 @@ yydefault:
case 986:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL JoinType
-//line sql.y:5181
+//line sql.y:5185
{
yyLOCAL = LeftJoinType
}
@@ -17566,7 +17549,7 @@ yydefault:
case 987:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL JoinType
-//line sql.y:5185
+//line sql.y:5189
{
yyLOCAL = RightJoinType
}
@@ -17574,7 +17557,7 @@ yydefault:
case 988:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL JoinType
-//line sql.y:5189
+//line sql.y:5193
{
yyLOCAL = RightJoinType
}
@@ -17582,7 +17565,7 @@ yydefault:
case 989:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL JoinType
-//line sql.y:5195
+//line sql.y:5199
{
yyLOCAL = NaturalJoinType
}
@@ -17590,7 +17573,7 @@ yydefault:
case 990:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL JoinType
-//line sql.y:5199
+//line sql.y:5203
{
if yyDollar[2].joinTypeUnion() == LeftJoinType {
yyLOCAL = NaturalLeftJoinType
@@ -17601,38 +17584,38 @@ yydefault:
yyVAL.union = yyLOCAL
case 991:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:5209
+//line sql.y:5213
{
yyVAL.tableName = yyDollar[2].tableName
}
case 992:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:5213
+//line sql.y:5217
{
yyVAL.tableName = yyDollar[1].tableName
}
case 993:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:5219
+//line sql.y:5223
{
yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS}
}
case 994:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:5223
+//line sql.y:5227
{
yyVAL.tableName = TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}
}
case 995:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:5229
+//line sql.y:5233
{
yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS}
}
case 996:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL IndexHints
-//line sql.y:5234
+//line sql.y:5238
{
yyLOCAL = nil
}
@@ -17640,7 +17623,7 @@ yydefault:
case 997:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IndexHints
-//line sql.y:5238
+//line sql.y:5242
{
yyLOCAL = yyDollar[1].indexHintsUnion()
}
@@ -17648,14 +17631,14 @@ yydefault:
case 998:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IndexHints
-//line sql.y:5244
+//line sql.y:5248
{
yyLOCAL = IndexHints{yyDollar[1].indexHintUnion()}
}
yyVAL.union = yyLOCAL
case 999:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:5248
+//line sql.y:5252
{
yySLICE := (*IndexHints)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[2].indexHintUnion())
@@ -17663,7 +17646,7 @@ yydefault:
case 1000:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL *IndexHint
-//line sql.y:5254
+//line sql.y:5258
{
yyLOCAL = &IndexHint{Type: UseOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()}
}
@@ -17671,7 +17654,7 @@ yydefault:
case 1001:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *IndexHint
-//line sql.y:5258
+//line sql.y:5262
{
yyLOCAL = &IndexHint{Type: UseOp, ForType: yyDollar[3].indexHintForTypeUnion()}
}
@@ -17679,7 +17662,7 @@ yydefault:
case 1002:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL *IndexHint
-//line sql.y:5262
+//line sql.y:5266
{
yyLOCAL = &IndexHint{Type: IgnoreOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()}
}
@@ -17687,7 +17670,7 @@ yydefault:
case 1003:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL *IndexHint
-//line sql.y:5266
+//line sql.y:5270
{
yyLOCAL = &IndexHint{Type: ForceOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()}
}
@@ -17695,7 +17678,7 @@ yydefault:
case 1004:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *IndexHint
-//line sql.y:5270
+//line sql.y:5274
{
yyLOCAL = &IndexHint{Type: UseVindexOp, Indexes: yyDollar[4].columnsUnion()}
}
@@ -17703,7 +17686,7 @@ yydefault:
case 1005:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *IndexHint
-//line sql.y:5274
+//line sql.y:5278
{
yyLOCAL = &IndexHint{Type: IgnoreVindexOp, Indexes: yyDollar[4].columnsUnion()}
}
@@ -17711,7 +17694,7 @@ yydefault:
case 1006:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL IndexHintForType
-//line sql.y:5279
+//line sql.y:5283
{
yyLOCAL = NoForType
}
@@ -17719,7 +17702,7 @@ yydefault:
case 1007:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL IndexHintForType
-//line sql.y:5283
+//line sql.y:5287
{
yyLOCAL = JoinForType
}
@@ -17727,7 +17710,7 @@ yydefault:
case 1008:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL IndexHintForType
-//line sql.y:5287
+//line sql.y:5291
{
yyLOCAL = OrderByForType
}
@@ -17735,7 +17718,7 @@ yydefault:
case 1009:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL IndexHintForType
-//line sql.y:5291
+//line sql.y:5295
{
yyLOCAL = GroupByForType
}
@@ -17743,7 +17726,7 @@ yydefault:
case 1010:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5297
+//line sql.y:5301
{
yyLOCAL = nil
}
@@ -17751,7 +17734,7 @@ yydefault:
case 1011:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5301
+//line sql.y:5305
{
yyLOCAL = yyDollar[2].exprUnion()
}
@@ -17759,7 +17742,7 @@ yydefault:
case 1012:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5308
+//line sql.y:5312
{
yyLOCAL = &OrExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()}
}
@@ -17767,7 +17750,7 @@ yydefault:
case 1013:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5312
+//line sql.y:5316
{
yyLOCAL = &XorExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()}
}
@@ -17775,7 +17758,7 @@ yydefault:
case 1014:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5316
+//line sql.y:5320
{
yyLOCAL = &AndExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()}
}
@@ -17783,7 +17766,7 @@ yydefault:
case 1015:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5320
+//line sql.y:5324
{
yyLOCAL = &NotExpr{Expr: yyDollar[2].exprUnion()}
}
@@ -17791,7 +17774,7 @@ yydefault:
case 1016:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5324
+//line sql.y:5328
{
yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].isExprOperatorUnion()}
}
@@ -17799,7 +17782,7 @@ yydefault:
case 1017:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5328
+//line sql.y:5332
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -17807,7 +17790,7 @@ yydefault:
case 1018:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5332
+//line sql.y:5336
{
yyLOCAL = &AssignmentExpr{Left: yyDollar[1].variableUnion(), Right: yyDollar[3].exprUnion()}
}
@@ -17815,25 +17798,25 @@ yydefault:
case 1019:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5336
+//line sql.y:5340
{
yyLOCAL = &MemberOfExpr{Value: yyDollar[1].exprUnion(), JSONArr: yyDollar[5].exprUnion()}
}
yyVAL.union = yyLOCAL
case 1020:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:5342
+//line sql.y:5346
{
}
case 1021:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:5345
+//line sql.y:5349
{
}
case 1022:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5350
+//line sql.y:5354
{
yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNullOp}
}
@@ -17841,7 +17824,7 @@ yydefault:
case 1023:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5354
+//line sql.y:5358
{
yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNotNullOp}
}
@@ -17849,7 +17832,7 @@ yydefault:
case 1024:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5358
+//line sql.y:5362
{
yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Right: yyDollar[3].exprUnion()}
}
@@ -17857,7 +17840,7 @@ yydefault:
case 1025:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5362
+//line sql.y:5366
{
yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Modifier: Any, Right: yyDollar[4].subqueryUnion()}
}
@@ -17865,7 +17848,7 @@ yydefault:
case 1026:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5366
+//line sql.y:5370
{
yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Modifier: Any, Right: yyDollar[4].subqueryUnion()}
}
@@ -17873,7 +17856,7 @@ yydefault:
case 1027:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5370
+//line sql.y:5374
{
yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Modifier: All, Right: yyDollar[4].subqueryUnion()}
}
@@ -17881,7 +17864,7 @@ yydefault:
case 1028:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5374
+//line sql.y:5378
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -17889,7 +17872,7 @@ yydefault:
case 1029:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5380
+//line sql.y:5384
{
yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: InOp, Right: yyDollar[3].colTupleUnion()}
}
@@ -17897,7 +17880,7 @@ yydefault:
case 1030:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5384
+//line sql.y:5388
{
yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotInOp, Right: yyDollar[4].colTupleUnion()}
}
@@ -17905,7 +17888,7 @@ yydefault:
case 1031:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5388
+//line sql.y:5392
{
yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: true, From: yyDollar[3].exprUnion(), To: yyDollar[5].exprUnion()}
}
@@ -17913,7 +17896,7 @@ yydefault:
case 1032:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5392
+//line sql.y:5396
{
yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: false, From: yyDollar[4].exprUnion(), To: yyDollar[6].exprUnion()}
}
@@ -17921,7 +17904,7 @@ yydefault:
case 1033:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5396
+//line sql.y:5400
{
yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: LikeOp, Right: yyDollar[3].exprUnion()}
}
@@ -17929,7 +17912,7 @@ yydefault:
case 1034:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5400
+//line sql.y:5404
{
yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotLikeOp, Right: yyDollar[4].exprUnion()}
}
@@ -17937,7 +17920,7 @@ yydefault:
case 1035:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5404
+//line sql.y:5408
{
yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: LikeOp, Right: yyDollar[3].exprUnion(), Escape: yyDollar[5].exprUnion()}
}
@@ -17945,7 +17928,7 @@ yydefault:
case 1036:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5408
+//line sql.y:5412
{
yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotLikeOp, Right: yyDollar[4].exprUnion(), Escape: yyDollar[6].exprUnion()}
}
@@ -17953,7 +17936,7 @@ yydefault:
case 1037:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5412
+//line sql.y:5416
{
yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: RegexpOp, Right: yyDollar[3].exprUnion()}
}
@@ -17961,7 +17944,7 @@ yydefault:
case 1038:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5416
+//line sql.y:5420
{
yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotRegexpOp, Right: yyDollar[4].exprUnion()}
}
@@ -17969,25 +17952,25 @@ yydefault:
case 1039:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5420
+//line sql.y:5424
{
yyLOCAL = yyDollar[1].exprUnion()
}
yyVAL.union = yyLOCAL
case 1040:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:5426
+//line sql.y:5430
{
}
case 1041:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:5429
+//line sql.y:5433
{
}
case 1042:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5435
+//line sql.y:5439
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitOrOp, Right: yyDollar[3].exprUnion()}
}
@@ -17995,7 +17978,7 @@ yydefault:
case 1043:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5439
+//line sql.y:5443
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitAndOp, Right: yyDollar[3].exprUnion()}
}
@@ -18003,7 +17986,7 @@ yydefault:
case 1044:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5443
+//line sql.y:5447
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftLeftOp, Right: yyDollar[3].exprUnion()}
}
@@ -18011,7 +17994,7 @@ yydefault:
case 1045:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5447
+//line sql.y:5451
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftRightOp, Right: yyDollar[3].exprUnion()}
}
@@ -18019,7 +18002,7 @@ yydefault:
case 1046:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5451
+//line sql.y:5455
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: PlusOp, Right: yyDollar[3].exprUnion()}
}
@@ -18027,7 +18010,7 @@ yydefault:
case 1047:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5455
+//line sql.y:5459
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MinusOp, Right: yyDollar[3].exprUnion()}
}
@@ -18035,7 +18018,7 @@ yydefault:
case 1048:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5459
+//line sql.y:5463
{
yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprBinaryAdd, Date: yyDollar[1].exprUnion(), Unit: yyDollar[5].intervalTypeUnion(), Interval: yyDollar[4].exprUnion()}
}
@@ -18043,7 +18026,7 @@ yydefault:
case 1049:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5463
+//line sql.y:5467
{
yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprBinarySub, Date: yyDollar[1].exprUnion(), Unit: yyDollar[5].intervalTypeUnion(), Interval: yyDollar[4].exprUnion()}
}
@@ -18051,7 +18034,7 @@ yydefault:
case 1050:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5467
+//line sql.y:5471
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MultOp, Right: yyDollar[3].exprUnion()}
}
@@ -18059,7 +18042,7 @@ yydefault:
case 1051:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5471
+//line sql.y:5475
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: DivOp, Right: yyDollar[3].exprUnion()}
}
@@ -18067,7 +18050,7 @@ yydefault:
case 1052:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5475
+//line sql.y:5479
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()}
}
@@ -18075,7 +18058,7 @@ yydefault:
case 1053:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5479
+//line sql.y:5483
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: IntDivOp, Right: yyDollar[3].exprUnion()}
}
@@ -18083,7 +18066,7 @@ yydefault:
case 1054:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5483
+//line sql.y:5487
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()}
}
@@ -18091,7 +18074,7 @@ yydefault:
case 1055:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5487
+//line sql.y:5491
{
yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitXorOp, Right: yyDollar[3].exprUnion()}
}
@@ -18099,7 +18082,7 @@ yydefault:
case 1056:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5491
+//line sql.y:5495
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -18107,7 +18090,7 @@ yydefault:
case 1057:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5497
+//line sql.y:5501
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -18115,7 +18098,7 @@ yydefault:
case 1058:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5501
+//line sql.y:5505
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -18123,7 +18106,7 @@ yydefault:
case 1059:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5505
+//line sql.y:5509
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -18131,7 +18114,7 @@ yydefault:
case 1060:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5509
+//line sql.y:5513
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -18139,7 +18122,7 @@ yydefault:
case 1061:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5513
+//line sql.y:5517
{
yyLOCAL = &CollateExpr{Expr: yyDollar[1].exprUnion(), Collation: yyDollar[3].str}
}
@@ -18147,7 +18130,7 @@ yydefault:
case 1062:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5517
+//line sql.y:5521
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -18155,7 +18138,7 @@ yydefault:
case 1063:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5521
+//line sql.y:5525
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -18163,7 +18146,7 @@ yydefault:
case 1064:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5525
+//line sql.y:5529
{
yyLOCAL = yyDollar[1].variableUnion()
}
@@ -18171,7 +18154,7 @@ yydefault:
case 1065:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5529
+//line sql.y:5533
{
yyLOCAL = yyDollar[2].exprUnion() // TODO: do we really want to ignore unary '+' before any kind of literals?
}
@@ -18179,7 +18162,7 @@ yydefault:
case 1066:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5533
+//line sql.y:5537
{
yyLOCAL = &UnaryExpr{Operator: UMinusOp, Expr: yyDollar[2].exprUnion()}
}
@@ -18187,7 +18170,7 @@ yydefault:
case 1067:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5537
+//line sql.y:5541
{
yyLOCAL = &UnaryExpr{Operator: TildaOp, Expr: yyDollar[2].exprUnion()}
}
@@ -18195,7 +18178,7 @@ yydefault:
case 1068:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5541
+//line sql.y:5545
{
yyLOCAL = &UnaryExpr{Operator: BangOp, Expr: yyDollar[2].exprUnion()}
}
@@ -18203,7 +18186,7 @@ yydefault:
case 1069:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5545
+//line sql.y:5549
{
yyLOCAL = yyDollar[1].subqueryUnion()
}
@@ -18211,7 +18194,7 @@ yydefault:
case 1070:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5549
+//line sql.y:5553
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -18219,7 +18202,7 @@ yydefault:
case 1071:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5553
+//line sql.y:5557
{
yyLOCAL = &ExistsExpr{Subquery: yyDollar[2].subqueryUnion()}
}
@@ -18227,7 +18210,7 @@ yydefault:
case 1072:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5557
+//line sql.y:5561
{
yyLOCAL = &MatchExpr{Columns: yyDollar[2].colNamesUnion(), Expr: yyDollar[5].exprUnion(), Option: yyDollar[6].matchExprOptionUnion()}
}
@@ -18235,7 +18218,7 @@ yydefault:
case 1073:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5561
+//line sql.y:5565
{
yyLOCAL = &CastExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion(), Array: yyDollar[6].booleanUnion()}
}
@@ -18243,7 +18226,7 @@ yydefault:
case 1074:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5565
+//line sql.y:5569
{
yyLOCAL = &ConvertExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion()}
}
@@ -18251,7 +18234,7 @@ yydefault:
case 1075:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5569
+//line sql.y:5573
{
yyLOCAL = &ConvertUsingExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].str}
}
@@ -18259,7 +18242,7 @@ yydefault:
case 1076:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5573
+//line sql.y:5577
{
// From: https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#operator_binary
// To convert a string expression to a binary string, these constructs are equivalent:
@@ -18271,7 +18254,7 @@ yydefault:
case 1077:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5581
+//line sql.y:5585
{
yyLOCAL = &Default{ColName: yyDollar[2].str}
}
@@ -18279,7 +18262,7 @@ yydefault:
case 1078:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5585
+//line sql.y:5589
{
yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprBinaryAddLeft, Date: yyDollar[5].exprUnion(), Unit: yyDollar[3].intervalTypeUnion(), Interval: yyDollar[2].exprUnion()}
}
@@ -18287,7 +18270,7 @@ yydefault:
case 1079:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5589
+//line sql.y:5593
{
yyLOCAL = &IntervalFuncExpr{Expr: yyDollar[3].exprUnion(), Exprs: yyDollar[5].exprsUnion()}
}
@@ -18295,23 +18278,23 @@ yydefault:
case 1080:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5593
+//line sql.y:5597
{
- yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: JSONExtractOp, Right: yyDollar[3].exprUnion()}
+ yyLOCAL = &JSONExtractExpr{JSONDoc: yyDollar[1].exprUnion(), PathList: []Expr{yyDollar[3].exprUnion()}}
}
yyVAL.union = yyLOCAL
case 1081:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5597
+//line sql.y:5601
{
- yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: JSONUnquoteExtractOp, Right: yyDollar[3].exprUnion()}
+ yyLOCAL = &JSONUnquoteExpr{JSONValue: &JSONExtractExpr{JSONDoc: yyDollar[1].exprUnion(), PathList: []Expr{yyDollar[3].exprUnion()}}}
}
yyVAL.union = yyLOCAL
case 1082:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []*ColName
-//line sql.y:5603
+//line sql.y:5607
{
yyLOCAL = yyDollar[1].colNamesUnion()
}
@@ -18319,7 +18302,7 @@ yydefault:
case 1083:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL []*ColName
-//line sql.y:5607
+//line sql.y:5611
{
yyLOCAL = yyDollar[2].colNamesUnion()
}
@@ -18327,14 +18310,14 @@ yydefault:
case 1084:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []*ColName
-//line sql.y:5613
+//line sql.y:5617
{
yyLOCAL = []*ColName{yyDollar[1].colNameUnion()}
}
yyVAL.union = yyLOCAL
case 1085:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:5617
+//line sql.y:5621
{
yySLICE := (*[]*ColName)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].colNameUnion())
@@ -18342,7 +18325,7 @@ yydefault:
case 1086:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL TrimType
-//line sql.y:5623
+//line sql.y:5627
{
yyLOCAL = BothTrimType
}
@@ -18350,7 +18333,7 @@ yydefault:
case 1087:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL TrimType
-//line sql.y:5627
+//line sql.y:5631
{
yyLOCAL = LeadingTrimType
}
@@ -18358,7 +18341,7 @@ yydefault:
case 1088:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL TrimType
-//line sql.y:5631
+//line sql.y:5635
{
yyLOCAL = TrailingTrimType
}
@@ -18366,7 +18349,7 @@ yydefault:
case 1089:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL FrameUnitType
-//line sql.y:5637
+//line sql.y:5641
{
yyLOCAL = FrameRowsType
}
@@ -18374,7 +18357,7 @@ yydefault:
case 1090:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL FrameUnitType
-//line sql.y:5641
+//line sql.y:5645
{
yyLOCAL = FrameRangeType
}
@@ -18382,7 +18365,7 @@ yydefault:
case 1091:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ArgumentLessWindowExprType
-//line sql.y:5648
+//line sql.y:5652
{
yyLOCAL = CumeDistExprType
}
@@ -18390,7 +18373,7 @@ yydefault:
case 1092:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ArgumentLessWindowExprType
-//line sql.y:5652
+//line sql.y:5656
{
yyLOCAL = DenseRankExprType
}
@@ -18398,7 +18381,7 @@ yydefault:
case 1093:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ArgumentLessWindowExprType
-//line sql.y:5656
+//line sql.y:5660
{
yyLOCAL = PercentRankExprType
}
@@ -18406,7 +18389,7 @@ yydefault:
case 1094:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ArgumentLessWindowExprType
-//line sql.y:5660
+//line sql.y:5664
{
yyLOCAL = RankExprType
}
@@ -18414,7 +18397,7 @@ yydefault:
case 1095:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ArgumentLessWindowExprType
-//line sql.y:5664
+//line sql.y:5668
{
yyLOCAL = RowNumberExprType
}
@@ -18422,7 +18405,7 @@ yydefault:
case 1096:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *FramePoint
-//line sql.y:5670
+//line sql.y:5674
{
yyLOCAL = &FramePoint{Type: CurrentRowType}
}
@@ -18430,7 +18413,7 @@ yydefault:
case 1097:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *FramePoint
-//line sql.y:5674
+//line sql.y:5678
{
yyLOCAL = &FramePoint{Type: UnboundedPrecedingType}
}
@@ -18438,7 +18421,7 @@ yydefault:
case 1098:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *FramePoint
-//line sql.y:5678
+//line sql.y:5682
{
yyLOCAL = &FramePoint{Type: UnboundedFollowingType}
}
@@ -18446,7 +18429,7 @@ yydefault:
case 1099:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *FramePoint
-//line sql.y:5682
+//line sql.y:5686
{
yyLOCAL = &FramePoint{Type: ExprPrecedingType, Expr: yyDollar[1].exprUnion()}
}
@@ -18454,7 +18437,7 @@ yydefault:
case 1100:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *FramePoint
-//line sql.y:5686
+//line sql.y:5690
{
yyLOCAL = &FramePoint{Type: ExprPrecedingType, Expr: yyDollar[2].exprUnion(), Unit: yyDollar[3].intervalTypeUnion()}
}
@@ -18462,7 +18445,7 @@ yydefault:
case 1101:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *FramePoint
-//line sql.y:5690
+//line sql.y:5694
{
yyLOCAL = &FramePoint{Type: ExprFollowingType, Expr: yyDollar[1].exprUnion()}
}
@@ -18470,7 +18453,7 @@ yydefault:
case 1102:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *FramePoint
-//line sql.y:5694
+//line sql.y:5698
{
yyLOCAL = &FramePoint{Type: ExprFollowingType, Expr: yyDollar[2].exprUnion(), Unit: yyDollar[3].intervalTypeUnion()}
}
@@ -18478,7 +18461,7 @@ yydefault:
case 1103:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *FrameClause
-//line sql.y:5699
+//line sql.y:5703
{
yyLOCAL = nil
}
@@ -18486,7 +18469,7 @@ yydefault:
case 1104:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *FrameClause
-//line sql.y:5703
+//line sql.y:5707
{
yyLOCAL = yyDollar[1].frameClauseUnion()
}
@@ -18494,7 +18477,7 @@ yydefault:
case 1105:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *FrameClause
-//line sql.y:5709
+//line sql.y:5713
{
yyLOCAL = &FrameClause{Unit: yyDollar[1].frameUnitTypeUnion(), Start: yyDollar[2].framePointUnion()}
}
@@ -18502,7 +18485,7 @@ yydefault:
case 1106:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *FrameClause
-//line sql.y:5713
+//line sql.y:5717
{
yyLOCAL = &FrameClause{Unit: yyDollar[1].frameUnitTypeUnion(), Start: yyDollar[3].framePointUnion(), End: yyDollar[5].framePointUnion()}
}
@@ -18510,7 +18493,7 @@ yydefault:
case 1107:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL Exprs
-//line sql.y:5718
+//line sql.y:5722
{
yyLOCAL = nil
}
@@ -18518,27 +18501,27 @@ yydefault:
case 1108:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Exprs
-//line sql.y:5722
+//line sql.y:5726
{
yyLOCAL = yyDollar[3].exprsUnion()
}
yyVAL.union = yyLOCAL
case 1109:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:5727
+//line sql.y:5731
{
yyVAL.identifierCI = IdentifierCI{}
}
case 1110:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:5731
+//line sql.y:5735
{
yyVAL.identifierCI = yyDollar[1].identifierCI
}
case 1111:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *WindowSpecification
-//line sql.y:5737
+//line sql.y:5741
{
yyLOCAL = &WindowSpecification{Name: yyDollar[1].identifierCI, PartitionClause: yyDollar[2].exprsUnion(), OrderClause: yyDollar[3].orderByUnion(), FrameClause: yyDollar[4].frameClauseUnion()}
}
@@ -18546,7 +18529,7 @@ yydefault:
case 1112:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *OverClause
-//line sql.y:5743
+//line sql.y:5747
{
yyLOCAL = &OverClause{WindowSpec: yyDollar[3].windowSpecificationUnion()}
}
@@ -18554,7 +18537,7 @@ yydefault:
case 1113:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *OverClause
-//line sql.y:5747
+//line sql.y:5751
{
yyLOCAL = &OverClause{WindowName: yyDollar[2].identifierCI}
}
@@ -18562,7 +18545,7 @@ yydefault:
case 1114:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *OverClause
-//line sql.y:5753
+//line sql.y:5757
{
yyLOCAL = yyDollar[1].overClauseUnion()
}
@@ -18570,7 +18553,7 @@ yydefault:
case 1115:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *OverClause
-//line sql.y:5757
+//line sql.y:5761
{
yyLOCAL = nil
}
@@ -18578,7 +18561,7 @@ yydefault:
case 1116:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *NullTreatmentClause
-//line sql.y:5762
+//line sql.y:5766
{
yyLOCAL = nil
}
@@ -18586,7 +18569,7 @@ yydefault:
case 1118:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *NullTreatmentClause
-//line sql.y:5769
+//line sql.y:5773
{
yyLOCAL = &NullTreatmentClause{yyDollar[1].nullTreatmentTypeUnion()}
}
@@ -18594,7 +18577,7 @@ yydefault:
case 1119:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL NullTreatmentType
-//line sql.y:5775
+//line sql.y:5779
{
yyLOCAL = RespectNullsType
}
@@ -18602,7 +18585,7 @@ yydefault:
case 1120:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL NullTreatmentType
-//line sql.y:5779
+//line sql.y:5783
{
yyLOCAL = IgnoreNullsType
}
@@ -18610,7 +18593,7 @@ yydefault:
case 1121:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL FirstOrLastValueExprType
-//line sql.y:5785
+//line sql.y:5789
{
yyLOCAL = FirstValueExprType
}
@@ -18618,7 +18601,7 @@ yydefault:
case 1122:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL FirstOrLastValueExprType
-//line sql.y:5789
+//line sql.y:5793
{
yyLOCAL = LastValueExprType
}
@@ -18626,7 +18609,7 @@ yydefault:
case 1123:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL FromFirstLastType
-//line sql.y:5795
+//line sql.y:5799
{
yyLOCAL = FromFirstType
}
@@ -18634,7 +18617,7 @@ yydefault:
case 1124:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL FromFirstLastType
-//line sql.y:5799
+//line sql.y:5803
{
yyLOCAL = FromLastType
}
@@ -18642,7 +18625,7 @@ yydefault:
case 1125:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *FromFirstLastClause
-//line sql.y:5804
+//line sql.y:5808
{
yyLOCAL = nil
}
@@ -18650,7 +18633,7 @@ yydefault:
case 1127:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *FromFirstLastClause
-//line sql.y:5811
+//line sql.y:5815
{
yyLOCAL = &FromFirstLastClause{yyDollar[1].fromFirstLastTypeUnion()}
}
@@ -18658,7 +18641,7 @@ yydefault:
case 1128:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL LagLeadExprType
-//line sql.y:5817
+//line sql.y:5821
{
yyLOCAL = LagExprType
}
@@ -18666,7 +18649,7 @@ yydefault:
case 1129:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL LagLeadExprType
-//line sql.y:5821
+//line sql.y:5825
{
yyLOCAL = LeadExprType
}
@@ -18674,7 +18657,7 @@ yydefault:
case 1130:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *WindowDefinition
-//line sql.y:5827
+//line sql.y:5831
{
yyLOCAL = &WindowDefinition{Name: yyDollar[1].identifierCI, WindowSpec: yyDollar[4].windowSpecificationUnion()}
}
@@ -18682,34 +18665,34 @@ yydefault:
case 1131:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL WindowDefinitions
-//line sql.y:5833
+//line sql.y:5837
{
yyLOCAL = WindowDefinitions{yyDollar[1].windowDefinitionUnion()}
}
yyVAL.union = yyLOCAL
case 1132:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:5837
+//line sql.y:5841
{
yySLICE := (*WindowDefinitions)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].windowDefinitionUnion())
}
case 1133:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:5843
+//line sql.y:5847
{
yyVAL.str = ""
}
case 1134:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:5847
+//line sql.y:5851
{
yyVAL.str = string(yyDollar[2].identifierCI.String())
}
case 1135:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL BoolVal
-//line sql.y:5853
+//line sql.y:5857
{
yyLOCAL = BoolVal(true)
}
@@ -18717,7 +18700,7 @@ yydefault:
case 1136:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL BoolVal
-//line sql.y:5857
+//line sql.y:5861
{
yyLOCAL = BoolVal(false)
}
@@ -18725,7 +18708,7 @@ yydefault:
case 1137:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IsExprOperator
-//line sql.y:5864
+//line sql.y:5868
{
yyLOCAL = IsTrueOp
}
@@ -18733,7 +18716,7 @@ yydefault:
case 1138:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL IsExprOperator
-//line sql.y:5868
+//line sql.y:5872
{
yyLOCAL = IsNotTrueOp
}
@@ -18741,7 +18724,7 @@ yydefault:
case 1139:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IsExprOperator
-//line sql.y:5872
+//line sql.y:5876
{
yyLOCAL = IsFalseOp
}
@@ -18749,7 +18732,7 @@ yydefault:
case 1140:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL IsExprOperator
-//line sql.y:5876
+//line sql.y:5880
{
yyLOCAL = IsNotFalseOp
}
@@ -18757,7 +18740,7 @@ yydefault:
case 1141:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ComparisonExprOperator
-//line sql.y:5882
+//line sql.y:5886
{
yyLOCAL = yyDollar[1].comparisonExprOperatorUnion()
}
@@ -18765,7 +18748,7 @@ yydefault:
case 1142:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ComparisonExprOperator
-//line sql.y:5886
+//line sql.y:5890
{
yyLOCAL = NullSafeEqualOp
}
@@ -18773,7 +18756,7 @@ yydefault:
case 1143:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ComparisonExprOperator
-//line sql.y:5892
+//line sql.y:5896
{
yyLOCAL = EqualOp
}
@@ -18781,7 +18764,7 @@ yydefault:
case 1144:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ComparisonExprOperator
-//line sql.y:5896
+//line sql.y:5900
{
yyLOCAL = LessThanOp
}
@@ -18789,7 +18772,7 @@ yydefault:
case 1145:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ComparisonExprOperator
-//line sql.y:5900
+//line sql.y:5904
{
yyLOCAL = GreaterThanOp
}
@@ -18797,7 +18780,7 @@ yydefault:
case 1146:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ComparisonExprOperator
-//line sql.y:5904
+//line sql.y:5908
{
yyLOCAL = LessEqualOp
}
@@ -18805,7 +18788,7 @@ yydefault:
case 1147:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ComparisonExprOperator
-//line sql.y:5908
+//line sql.y:5912
{
yyLOCAL = GreaterEqualOp
}
@@ -18813,7 +18796,7 @@ yydefault:
case 1148:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ComparisonExprOperator
-//line sql.y:5912
+//line sql.y:5916
{
yyLOCAL = NotEqualOp
}
@@ -18821,7 +18804,7 @@ yydefault:
case 1149:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ColTuple
-//line sql.y:5918
+//line sql.y:5922
{
yyLOCAL = yyDollar[1].valTupleUnion()
}
@@ -18829,7 +18812,7 @@ yydefault:
case 1150:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ColTuple
-//line sql.y:5922
+//line sql.y:5926
{
yyLOCAL = yyDollar[1].subqueryUnion()
}
@@ -18837,7 +18820,7 @@ yydefault:
case 1151:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ColTuple
-//line sql.y:5926
+//line sql.y:5930
{
yyLOCAL = ListArg(yyDollar[1].str[2:])
markBindVariable(yylex, yyDollar[1].str[2:])
@@ -18846,7 +18829,7 @@ yydefault:
case 1152:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *Subquery
-//line sql.y:5933
+//line sql.y:5937
{
yyLOCAL = &Subquery{yyDollar[1].selStmtUnion()}
}
@@ -18854,14 +18837,14 @@ yydefault:
case 1153:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Exprs
-//line sql.y:5939
+//line sql.y:5943
{
yyLOCAL = Exprs{yyDollar[1].exprUnion()}
}
yyVAL.union = yyLOCAL
case 1154:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:5943
+//line sql.y:5947
{
yySLICE := (*Exprs)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].exprUnion())
@@ -18869,7 +18852,7 @@ yydefault:
case 1155:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5953
+//line sql.y:5957
{
yyLOCAL = &FuncExpr{Name: yyDollar[1].identifierCI, Exprs: yyDollar[3].exprsUnion()}
}
@@ -18877,7 +18860,7 @@ yydefault:
case 1156:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5957
+//line sql.y:5961
{
yyLOCAL = &FuncExpr{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCI, Exprs: yyDollar[5].exprsUnion()}
}
@@ -18885,7 +18868,7 @@ yydefault:
case 1157:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5967
+//line sql.y:5971
{
yyLOCAL = &FuncExpr{Name: NewIdentifierCI("left"), Exprs: yyDollar[3].exprsUnion()}
}
@@ -18893,7 +18876,7 @@ yydefault:
case 1158:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5971
+//line sql.y:5975
{
yyLOCAL = &FuncExpr{Name: NewIdentifierCI("right"), Exprs: yyDollar[3].exprsUnion()}
}
@@ -18901,7 +18884,7 @@ yydefault:
case 1159:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5975
+//line sql.y:5979
{
yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()}
}
@@ -18909,7 +18892,7 @@ yydefault:
case 1160:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5979
+//line sql.y:5983
{
yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()}
}
@@ -18917,7 +18900,7 @@ yydefault:
case 1161:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5983
+//line sql.y:5987
{
yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion()}
}
@@ -18925,7 +18908,7 @@ yydefault:
case 1162:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5987
+//line sql.y:5991
{
yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()}
}
@@ -18933,7 +18916,7 @@ yydefault:
case 1163:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5991
+//line sql.y:5995
{
yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion()}
}
@@ -18941,7 +18924,7 @@ yydefault:
case 1164:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5995
+//line sql.y:5999
{
yyLOCAL = &CaseExpr{Expr: yyDollar[2].exprUnion(), Whens: yyDollar[3].whensUnion(), Else: yyDollar[4].exprUnion()}
}
@@ -18949,7 +18932,7 @@ yydefault:
case 1165:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:5999
+//line sql.y:6003
{
yyLOCAL = &ValuesFuncExpr{Name: yyDollar[3].colNameUnion()}
}
@@ -18957,7 +18940,7 @@ yydefault:
case 1166:
yyDollar = yyS[yypt-10 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6003
+//line sql.y:6007
{
yyLOCAL = &InsertExpr{Str: yyDollar[3].exprUnion(), Pos: yyDollar[5].exprUnion(), Len: yyDollar[7].exprUnion(), NewStr: yyDollar[9].exprUnion()}
}
@@ -18965,7 +18948,7 @@ yydefault:
case 1167:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6007
+//line sql.y:6011
{
yyLOCAL = &FuncExpr{Name: NewIdentifierCI(yyDollar[1].str)}
}
@@ -18973,7 +18956,7 @@ yydefault:
case 1168:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6018
+//line sql.y:6022
{
yyLOCAL = &FuncExpr{Name: NewIdentifierCI("utc_date")}
}
@@ -18981,7 +18964,7 @@ yydefault:
case 1169:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6022
+//line sql.y:6026
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -18989,7 +18972,7 @@ yydefault:
case 1170:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6028
+//line sql.y:6032
{
yyLOCAL = &FuncExpr{Name: NewIdentifierCI("current_date")}
}
@@ -18997,7 +18980,7 @@ yydefault:
case 1171:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6032
+//line sql.y:6036
{
yyLOCAL = &FuncExpr{Name: NewIdentifierCI("curdate")}
}
@@ -19005,7 +18988,7 @@ yydefault:
case 1172:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6036
+//line sql.y:6040
{
yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("utc_time"), Fsp: yyDollar[2].integerUnion()}
}
@@ -19013,7 +18996,7 @@ yydefault:
case 1173:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6041
+//line sql.y:6045
{
yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("curtime"), Fsp: yyDollar[2].integerUnion()}
}
@@ -19021,7 +19004,7 @@ yydefault:
case 1174:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6046
+//line sql.y:6050
{
yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("current_time"), Fsp: yyDollar[2].integerUnion()}
}
@@ -19029,7 +19012,7 @@ yydefault:
case 1175:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6050
+//line sql.y:6054
{
yyLOCAL = &CountStar{OverClause: yyDollar[5].overClauseUnion()}
}
@@ -19037,7 +19020,7 @@ yydefault:
case 1176:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6054
+//line sql.y:6058
{
yyLOCAL = &Count{Distinct: yyDollar[3].booleanUnion(), Args: yyDollar[4].exprsUnion(), OverClause: yyDollar[6].overClauseUnion()}
}
@@ -19045,7 +19028,7 @@ yydefault:
case 1177:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6058
+//line sql.y:6062
{
yyLOCAL = &Max{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion(), OverClause: yyDollar[6].overClauseUnion()}
}
@@ -19053,7 +19036,7 @@ yydefault:
case 1178:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6062
+//line sql.y:6066
{
yyLOCAL = &Min{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion(), OverClause: yyDollar[6].overClauseUnion()}
}
@@ -19061,7 +19044,7 @@ yydefault:
case 1179:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6066
+//line sql.y:6070
{
yyLOCAL = &Sum{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion(), OverClause: yyDollar[6].overClauseUnion()}
}
@@ -19069,7 +19052,7 @@ yydefault:
case 1180:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6070
+//line sql.y:6074
{
yyLOCAL = &Avg{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion(), OverClause: yyDollar[6].overClauseUnion()}
}
@@ -19077,7 +19060,7 @@ yydefault:
case 1181:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6074
+//line sql.y:6078
{
yyLOCAL = &BitAnd{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()}
}
@@ -19085,7 +19068,7 @@ yydefault:
case 1182:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6078
+//line sql.y:6082
{
yyLOCAL = &BitOr{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()}
}
@@ -19093,7 +19076,7 @@ yydefault:
case 1183:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6082
+//line sql.y:6086
{
yyLOCAL = &BitXor{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()}
}
@@ -19101,7 +19084,7 @@ yydefault:
case 1184:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6086
+//line sql.y:6090
{
yyLOCAL = &Std{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()}
}
@@ -19109,7 +19092,7 @@ yydefault:
case 1185:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6090
+//line sql.y:6094
{
yyLOCAL = &StdDev{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()}
}
@@ -19117,7 +19100,7 @@ yydefault:
case 1186:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6094
+//line sql.y:6098
{
yyLOCAL = &StdPop{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()}
}
@@ -19125,7 +19108,7 @@ yydefault:
case 1187:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6098
+//line sql.y:6102
{
yyLOCAL = &StdSamp{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()}
}
@@ -19133,7 +19116,7 @@ yydefault:
case 1188:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6102
+//line sql.y:6106
{
yyLOCAL = &VarPop{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()}
}
@@ -19141,7 +19124,7 @@ yydefault:
case 1189:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6106
+//line sql.y:6110
{
yyLOCAL = &VarSamp{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()}
}
@@ -19149,7 +19132,7 @@ yydefault:
case 1190:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6110
+//line sql.y:6114
{
yyLOCAL = &Variance{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()}
}
@@ -19157,7 +19140,7 @@ yydefault:
case 1191:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6114
+//line sql.y:6118
{
yyLOCAL = &GroupConcatExpr{Distinct: yyDollar[3].booleanUnion(), Exprs: yyDollar[4].exprsUnion(), OrderBy: yyDollar[5].orderByUnion(), Separator: yyDollar[6].str, Limit: yyDollar[7].limitUnion()}
}
@@ -19165,7 +19148,7 @@ yydefault:
case 1192:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6118
+//line sql.y:6122
{
yyLOCAL = &AnyValue{Arg: yyDollar[3].exprUnion()}
}
@@ -19173,7 +19156,7 @@ yydefault:
case 1193:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6122
+//line sql.y:6126
{
yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprTimestampadd, Date: yyDollar[7].exprUnion(), Interval: yyDollar[5].exprUnion(), Unit: yyDollar[3].intervalTypeUnion()}
}
@@ -19181,7 +19164,7 @@ yydefault:
case 1194:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6126
+//line sql.y:6130
{
yyLOCAL = &TimestampDiffExpr{Unit: yyDollar[3].intervalTypeUnion(), Expr1: yyDollar[5].exprUnion(), Expr2: yyDollar[7].exprUnion()}
}
@@ -19189,7 +19172,7 @@ yydefault:
case 1195:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6130
+//line sql.y:6134
{
yyLOCAL = &ExtractFuncExpr{IntervalType: yyDollar[3].intervalTypeUnion(), Expr: yyDollar[5].exprUnion()}
}
@@ -19197,7 +19180,7 @@ yydefault:
case 1196:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6134
+//line sql.y:6138
{
yyLOCAL = &WeightStringFuncExpr{Expr: yyDollar[3].exprUnion(), As: yyDollar[4].convertTypeUnion()}
}
@@ -19205,7 +19188,7 @@ yydefault:
case 1197:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6138
+//line sql.y:6142
{
yyLOCAL = &JSONPrettyExpr{JSONVal: yyDollar[3].exprUnion()}
}
@@ -19213,7 +19196,7 @@ yydefault:
case 1198:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6142
+//line sql.y:6146
{
yyLOCAL = &JSONStorageFreeExpr{JSONVal: yyDollar[3].exprUnion()}
}
@@ -19221,7 +19204,7 @@ yydefault:
case 1199:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6146
+//line sql.y:6150
{
yyLOCAL = &JSONStorageSizeExpr{JSONVal: yyDollar[3].exprUnion()}
}
@@ -19229,7 +19212,7 @@ yydefault:
case 1200:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6150
+//line sql.y:6154
{
yyLOCAL = &JSONArrayAgg{Expr: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()}
}
@@ -19237,7 +19220,7 @@ yydefault:
case 1201:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6154
+//line sql.y:6158
{
yyLOCAL = &JSONObjectAgg{Key: yyDollar[3].exprUnion(), Value: yyDollar[5].exprUnion(), OverClause: yyDollar[7].overClauseUnion()}
}
@@ -19245,7 +19228,7 @@ yydefault:
case 1202:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6158
+//line sql.y:6162
{
yyLOCAL = &TrimFuncExpr{TrimFuncType: LTrimType, Type: LeadingTrimType, StringArg: yyDollar[3].exprUnion()}
}
@@ -19253,7 +19236,7 @@ yydefault:
case 1203:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6162
+//line sql.y:6166
{
yyLOCAL = &TrimFuncExpr{TrimFuncType: RTrimType, Type: TrailingTrimType, StringArg: yyDollar[3].exprUnion()}
}
@@ -19261,7 +19244,7 @@ yydefault:
case 1204:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6166
+//line sql.y:6170
{
yyLOCAL = &TrimFuncExpr{Type: yyDollar[3].trimTypeUnion(), TrimArg: yyDollar[4].exprUnion(), StringArg: yyDollar[6].exprUnion()}
}
@@ -19269,7 +19252,7 @@ yydefault:
case 1205:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6170
+//line sql.y:6174
{
yyLOCAL = &TrimFuncExpr{StringArg: yyDollar[3].exprUnion()}
}
@@ -19277,7 +19260,7 @@ yydefault:
case 1206:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6174
+//line sql.y:6178
{
yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion()}
}
@@ -19285,7 +19268,7 @@ yydefault:
case 1207:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6178
+//line sql.y:6182
{
yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion(), Charset: yyDollar[5].str}
}
@@ -19293,7 +19276,7 @@ yydefault:
case 1208:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6182
+//line sql.y:6186
{
yyLOCAL = &TrimFuncExpr{TrimArg: yyDollar[3].exprUnion(), StringArg: yyDollar[5].exprUnion()}
}
@@ -19301,7 +19284,7 @@ yydefault:
case 1209:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6186
+//line sql.y:6190
{
yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()}
}
@@ -19309,7 +19292,7 @@ yydefault:
case 1210:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6190
+//line sql.y:6194
{
yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion(), Pos: yyDollar[7].exprUnion()}
}
@@ -19317,7 +19300,7 @@ yydefault:
case 1211:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6194
+//line sql.y:6198
{
yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()}
}
@@ -19325,7 +19308,7 @@ yydefault:
case 1212:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6198
+//line sql.y:6202
{
yyLOCAL = &LockingFunc{Type: GetLock, Name: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()}
}
@@ -19333,7 +19316,7 @@ yydefault:
case 1213:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6202
+//line sql.y:6206
{
yyLOCAL = &LockingFunc{Type: IsFreeLock, Name: yyDollar[3].exprUnion()}
}
@@ -19341,7 +19324,7 @@ yydefault:
case 1214:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6206
+//line sql.y:6210
{
yyLOCAL = &LockingFunc{Type: IsUsedLock, Name: yyDollar[3].exprUnion()}
}
@@ -19349,7 +19332,7 @@ yydefault:
case 1215:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6210
+//line sql.y:6214
{
yyLOCAL = &LockingFunc{Type: ReleaseAllLocks}
}
@@ -19357,7 +19340,7 @@ yydefault:
case 1216:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6214
+//line sql.y:6218
{
yyLOCAL = &LockingFunc{Type: ReleaseLock, Name: yyDollar[3].exprUnion()}
}
@@ -19365,7 +19348,7 @@ yydefault:
case 1217:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6218
+//line sql.y:6222
{
yyLOCAL = &JSONSchemaValidFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()}
}
@@ -19373,7 +19356,7 @@ yydefault:
case 1218:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6222
+//line sql.y:6226
{
yyLOCAL = &JSONSchemaValidationReportFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()}
}
@@ -19381,7 +19364,7 @@ yydefault:
case 1219:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6226
+//line sql.y:6230
{
yyLOCAL = &JSONArrayExpr{Params: yyDollar[3].exprsUnion()}
}
@@ -19389,7 +19372,7 @@ yydefault:
case 1220:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6230
+//line sql.y:6234
{
yyLOCAL = &GeomFormatExpr{FormatType: BinaryFormat, Geom: yyDollar[3].exprUnion()}
}
@@ -19397,7 +19380,7 @@ yydefault:
case 1221:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6234
+//line sql.y:6238
{
yyLOCAL = &GeomFormatExpr{FormatType: BinaryFormat, Geom: yyDollar[3].exprUnion(), AxisOrderOpt: yyDollar[5].exprUnion()}
}
@@ -19405,7 +19388,7 @@ yydefault:
case 1222:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6238
+//line sql.y:6242
{
yyLOCAL = &GeomFormatExpr{FormatType: TextFormat, Geom: yyDollar[3].exprUnion()}
}
@@ -19413,7 +19396,7 @@ yydefault:
case 1223:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6242
+//line sql.y:6246
{
yyLOCAL = &GeomFormatExpr{FormatType: TextFormat, Geom: yyDollar[3].exprUnion(), AxisOrderOpt: yyDollar[5].exprUnion()}
}
@@ -19421,7 +19404,7 @@ yydefault:
case 1224:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6246
+//line sql.y:6250
{
yyLOCAL = &GeomPropertyFuncExpr{Property: IsEmpty, Geom: yyDollar[3].exprUnion()}
}
@@ -19429,7 +19412,7 @@ yydefault:
case 1225:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6250
+//line sql.y:6254
{
yyLOCAL = &GeomPropertyFuncExpr{Property: IsSimple, Geom: yyDollar[3].exprUnion()}
}
@@ -19437,7 +19420,7 @@ yydefault:
case 1226:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6254
+//line sql.y:6258
{
yyLOCAL = &GeomPropertyFuncExpr{Property: Dimension, Geom: yyDollar[3].exprUnion()}
}
@@ -19445,7 +19428,7 @@ yydefault:
case 1227:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6258
+//line sql.y:6262
{
yyLOCAL = &GeomPropertyFuncExpr{Property: Envelope, Geom: yyDollar[3].exprUnion()}
}
@@ -19453,7 +19436,7 @@ yydefault:
case 1228:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6262
+//line sql.y:6266
{
yyLOCAL = &GeomPropertyFuncExpr{Property: GeometryType, Geom: yyDollar[3].exprUnion()}
}
@@ -19461,7 +19444,7 @@ yydefault:
case 1229:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6266
+//line sql.y:6270
{
yyLOCAL = &PointPropertyFuncExpr{Property: Latitude, Point: yyDollar[3].exprUnion()}
}
@@ -19469,7 +19452,7 @@ yydefault:
case 1230:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6270
+//line sql.y:6274
{
yyLOCAL = &PointPropertyFuncExpr{Property: Latitude, Point: yyDollar[3].exprUnion(), ValueToSet: yyDollar[5].exprUnion()}
}
@@ -19477,7 +19460,7 @@ yydefault:
case 1231:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6274
+//line sql.y:6278
{
yyLOCAL = &PointPropertyFuncExpr{Property: Longitude, Point: yyDollar[3].exprUnion()}
}
@@ -19485,7 +19468,7 @@ yydefault:
case 1232:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6278
+//line sql.y:6282
{
yyLOCAL = &PointPropertyFuncExpr{Property: Longitude, Point: yyDollar[3].exprUnion(), ValueToSet: yyDollar[5].exprUnion()}
}
@@ -19493,7 +19476,7 @@ yydefault:
case 1233:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6282
+//line sql.y:6286
{
yyLOCAL = &LinestrPropertyFuncExpr{Property: EndPoint, Linestring: yyDollar[3].exprUnion()}
}
@@ -19501,7 +19484,7 @@ yydefault:
case 1234:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6286
+//line sql.y:6290
{
yyLOCAL = &LinestrPropertyFuncExpr{Property: IsClosed, Linestring: yyDollar[3].exprUnion()}
}
@@ -19509,7 +19492,7 @@ yydefault:
case 1235:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6290
+//line sql.y:6294
{
yyLOCAL = &LinestrPropertyFuncExpr{Property: Length, Linestring: yyDollar[3].exprUnion()}
}
@@ -19517,7 +19500,7 @@ yydefault:
case 1236:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6294
+//line sql.y:6298
{
yyLOCAL = &LinestrPropertyFuncExpr{Property: Length, Linestring: yyDollar[3].exprUnion(), PropertyDefArg: yyDollar[5].exprUnion()}
}
@@ -19525,7 +19508,7 @@ yydefault:
case 1237:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6298
+//line sql.y:6302
{
yyLOCAL = &LinestrPropertyFuncExpr{Property: NumPoints, Linestring: yyDollar[3].exprUnion()}
}
@@ -19533,7 +19516,7 @@ yydefault:
case 1238:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6302
+//line sql.y:6306
{
yyLOCAL = &LinestrPropertyFuncExpr{Property: PointN, Linestring: yyDollar[3].exprUnion(), PropertyDefArg: yyDollar[5].exprUnion()}
}
@@ -19541,7 +19524,7 @@ yydefault:
case 1239:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6306
+//line sql.y:6310
{
yyLOCAL = &LinestrPropertyFuncExpr{Property: StartPoint, Linestring: yyDollar[3].exprUnion()}
}
@@ -19549,7 +19532,7 @@ yydefault:
case 1240:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6310
+//line sql.y:6314
{
yyLOCAL = &PointPropertyFuncExpr{Property: XCordinate, Point: yyDollar[3].exprUnion()}
}
@@ -19557,7 +19540,7 @@ yydefault:
case 1241:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6314
+//line sql.y:6318
{
yyLOCAL = &PointPropertyFuncExpr{Property: XCordinate, Point: yyDollar[3].exprUnion(), ValueToSet: yyDollar[5].exprUnion()}
}
@@ -19565,7 +19548,7 @@ yydefault:
case 1242:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6318
+//line sql.y:6322
{
yyLOCAL = &PointPropertyFuncExpr{Property: YCordinate, Point: yyDollar[3].exprUnion()}
}
@@ -19573,7 +19556,7 @@ yydefault:
case 1243:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6322
+//line sql.y:6326
{
yyLOCAL = &PointPropertyFuncExpr{Property: YCordinate, Point: yyDollar[3].exprUnion(), ValueToSet: yyDollar[5].exprUnion()}
}
@@ -19581,7 +19564,7 @@ yydefault:
case 1244:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6326
+//line sql.y:6330
{
yyLOCAL = &GeomFromTextExpr{Type: GeometryFromText, WktText: yyDollar[3].exprUnion()}
}
@@ -19589,7 +19572,7 @@ yydefault:
case 1245:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6330
+//line sql.y:6334
{
yyLOCAL = &GeomFromTextExpr{Type: GeometryFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
@@ -19597,7 +19580,7 @@ yydefault:
case 1246:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6334
+//line sql.y:6338
{
yyLOCAL = &GeomFromTextExpr{Type: GeometryFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
@@ -19605,7 +19588,7 @@ yydefault:
case 1247:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6338
+//line sql.y:6342
{
yyLOCAL = &GeomFromTextExpr{Type: GeometryCollectionFromText, WktText: yyDollar[3].exprUnion()}
}
@@ -19613,7 +19596,7 @@ yydefault:
case 1248:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6342
+//line sql.y:6346
{
yyLOCAL = &GeomFromTextExpr{Type: GeometryCollectionFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
@@ -19621,7 +19604,7 @@ yydefault:
case 1249:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6346
+//line sql.y:6350
{
yyLOCAL = &GeomFromTextExpr{Type: GeometryCollectionFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
@@ -19629,7 +19612,7 @@ yydefault:
case 1250:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6350
+//line sql.y:6354
{
yyLOCAL = &GeomFromTextExpr{Type: LineStringFromText, WktText: yyDollar[3].exprUnion()}
}
@@ -19637,7 +19620,7 @@ yydefault:
case 1251:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6354
+//line sql.y:6358
{
yyLOCAL = &GeomFromTextExpr{Type: LineStringFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
@@ -19645,7 +19628,7 @@ yydefault:
case 1252:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6358
+//line sql.y:6362
{
yyLOCAL = &GeomFromTextExpr{Type: LineStringFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
@@ -19653,7 +19636,7 @@ yydefault:
case 1253:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6362
+//line sql.y:6366
{
yyLOCAL = &GeomFromTextExpr{Type: MultiLinestringFromText, WktText: yyDollar[3].exprUnion()}
}
@@ -19661,7 +19644,7 @@ yydefault:
case 1254:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6366
+//line sql.y:6370
{
yyLOCAL = &GeomFromTextExpr{Type: MultiLinestringFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
@@ -19669,7 +19652,7 @@ yydefault:
case 1255:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6370
+//line sql.y:6374
{
yyLOCAL = &GeomFromTextExpr{Type: MultiLinestringFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
@@ -19677,7 +19660,7 @@ yydefault:
case 1256:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6374
+//line sql.y:6378
{
yyLOCAL = &GeomFromTextExpr{Type: MultiPointFromText, WktText: yyDollar[3].exprUnion()}
}
@@ -19685,7 +19668,7 @@ yydefault:
case 1257:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6378
+//line sql.y:6382
{
yyLOCAL = &GeomFromTextExpr{Type: MultiPointFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
@@ -19693,7 +19676,7 @@ yydefault:
case 1258:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6382
+//line sql.y:6386
{
yyLOCAL = &GeomFromTextExpr{Type: MultiPointFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
@@ -19701,7 +19684,7 @@ yydefault:
case 1259:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6386
+//line sql.y:6390
{
yyLOCAL = &GeomFromTextExpr{Type: MultiPolygonFromText, WktText: yyDollar[3].exprUnion()}
}
@@ -19709,7 +19692,7 @@ yydefault:
case 1260:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6390
+//line sql.y:6394
{
yyLOCAL = &GeomFromTextExpr{Type: MultiPolygonFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
@@ -19717,7 +19700,7 @@ yydefault:
case 1261:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6394
+//line sql.y:6398
{
yyLOCAL = &GeomFromTextExpr{Type: MultiPolygonFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
@@ -19725,7 +19708,7 @@ yydefault:
case 1262:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6398
+//line sql.y:6402
{
yyLOCAL = &GeomFromTextExpr{Type: PointFromText, WktText: yyDollar[3].exprUnion()}
}
@@ -19733,7 +19716,7 @@ yydefault:
case 1263:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6402
+//line sql.y:6406
{
yyLOCAL = &GeomFromTextExpr{Type: PointFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
@@ -19741,7 +19724,7 @@ yydefault:
case 1264:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6406
+//line sql.y:6410
{
yyLOCAL = &GeomFromTextExpr{Type: PointFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
@@ -19749,7 +19732,7 @@ yydefault:
case 1265:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6410
+//line sql.y:6414
{
yyLOCAL = &GeomFromTextExpr{Type: PolygonFromText, WktText: yyDollar[3].exprUnion()}
}
@@ -19757,7 +19740,7 @@ yydefault:
case 1266:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6414
+//line sql.y:6418
{
yyLOCAL = &GeomFromTextExpr{Type: PolygonFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
@@ -19765,7 +19748,7 @@ yydefault:
case 1267:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6418
+//line sql.y:6422
{
yyLOCAL = &GeomFromTextExpr{Type: PolygonFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
@@ -19773,7 +19756,7 @@ yydefault:
case 1268:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6422
+//line sql.y:6426
{
yyLOCAL = &GeomFromWKBExpr{Type: GeometryFromWKB, WkbBlob: yyDollar[3].exprUnion()}
}
@@ -19781,7 +19764,7 @@ yydefault:
case 1269:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6426
+//line sql.y:6430
{
yyLOCAL = &GeomFromWKBExpr{Type: GeometryFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
@@ -19789,7 +19772,7 @@ yydefault:
case 1270:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6430
+//line sql.y:6434
{
yyLOCAL = &GeomFromWKBExpr{Type: GeometryFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
@@ -19797,7 +19780,7 @@ yydefault:
case 1271:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6434
+//line sql.y:6438
{
yyLOCAL = &GeomFromWKBExpr{Type: GeometryCollectionFromWKB, WkbBlob: yyDollar[3].exprUnion()}
}
@@ -19805,7 +19788,7 @@ yydefault:
case 1272:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6438
+//line sql.y:6442
{
yyLOCAL = &GeomFromWKBExpr{Type: GeometryCollectionFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
@@ -19813,7 +19796,7 @@ yydefault:
case 1273:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6442
+//line sql.y:6446
{
yyLOCAL = &GeomFromWKBExpr{Type: GeometryCollectionFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
@@ -19821,7 +19804,7 @@ yydefault:
case 1274:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6446
+//line sql.y:6450
{
yyLOCAL = &GeomFromWKBExpr{Type: LineStringFromWKB, WkbBlob: yyDollar[3].exprUnion()}
}
@@ -19829,7 +19812,7 @@ yydefault:
case 1275:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6450
+//line sql.y:6454
{
yyLOCAL = &GeomFromWKBExpr{Type: LineStringFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
@@ -19837,7 +19820,7 @@ yydefault:
case 1276:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6454
+//line sql.y:6458
{
yyLOCAL = &GeomFromWKBExpr{Type: LineStringFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
@@ -19845,7 +19828,7 @@ yydefault:
case 1277:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6458
+//line sql.y:6462
{
yyLOCAL = &GeomFromWKBExpr{Type: MultiLinestringFromWKB, WkbBlob: yyDollar[3].exprUnion()}
}
@@ -19853,7 +19836,7 @@ yydefault:
case 1278:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6462
+//line sql.y:6466
{
yyLOCAL = &GeomFromWKBExpr{Type: MultiLinestringFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
@@ -19861,7 +19844,7 @@ yydefault:
case 1279:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6466
+//line sql.y:6470
{
yyLOCAL = &GeomFromWKBExpr{Type: MultiLinestringFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
@@ -19869,7 +19852,7 @@ yydefault:
case 1280:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6470
+//line sql.y:6474
{
yyLOCAL = &GeomFromWKBExpr{Type: MultiPointFromWKB, WkbBlob: yyDollar[3].exprUnion()}
}
@@ -19877,7 +19860,7 @@ yydefault:
case 1281:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6474
+//line sql.y:6478
{
yyLOCAL = &GeomFromWKBExpr{Type: MultiPointFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
@@ -19885,7 +19868,7 @@ yydefault:
case 1282:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6478
+//line sql.y:6482
{
yyLOCAL = &GeomFromWKBExpr{Type: MultiPointFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
@@ -19893,7 +19876,7 @@ yydefault:
case 1283:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6482
+//line sql.y:6486
{
yyLOCAL = &GeomFromWKBExpr{Type: MultiPolygonFromWKB, WkbBlob: yyDollar[3].exprUnion()}
}
@@ -19901,7 +19884,7 @@ yydefault:
case 1284:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6486
+//line sql.y:6490
{
yyLOCAL = &GeomFromWKBExpr{Type: MultiPolygonFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
@@ -19909,7 +19892,7 @@ yydefault:
case 1285:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6490
+//line sql.y:6494
{
yyLOCAL = &GeomFromWKBExpr{Type: MultiPolygonFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
@@ -19917,7 +19900,7 @@ yydefault:
case 1286:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6494
+//line sql.y:6498
{
yyLOCAL = &GeomFromWKBExpr{Type: PointFromWKB, WkbBlob: yyDollar[3].exprUnion()}
}
@@ -19925,7 +19908,7 @@ yydefault:
case 1287:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6498
+//line sql.y:6502
{
yyLOCAL = &GeomFromWKBExpr{Type: PointFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
@@ -19933,7 +19916,7 @@ yydefault:
case 1288:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6502
+//line sql.y:6506
{
yyLOCAL = &GeomFromWKBExpr{Type: PointFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
@@ -19941,7 +19924,7 @@ yydefault:
case 1289:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6506
+//line sql.y:6510
{
yyLOCAL = &GeomFromWKBExpr{Type: PolygonFromWKB, WkbBlob: yyDollar[3].exprUnion()}
}
@@ -19949,7 +19932,7 @@ yydefault:
case 1290:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6510
+//line sql.y:6514
{
yyLOCAL = &GeomFromWKBExpr{Type: PolygonFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()}
}
@@ -19957,7 +19940,7 @@ yydefault:
case 1291:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6514
+//line sql.y:6518
{
yyLOCAL = &GeomFromWKBExpr{Type: PolygonFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()}
}
@@ -19965,7 +19948,7 @@ yydefault:
case 1292:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6518
+//line sql.y:6522
{
yyLOCAL = &PolygonPropertyFuncExpr{Property: Area, Polygon: yyDollar[3].exprUnion()}
}
@@ -19973,7 +19956,7 @@ yydefault:
case 1293:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6522
+//line sql.y:6526
{
yyLOCAL = &PolygonPropertyFuncExpr{Property: Centroid, Polygon: yyDollar[3].exprUnion()}
}
@@ -19981,7 +19964,7 @@ yydefault:
case 1294:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6526
+//line sql.y:6530
{
yyLOCAL = &PolygonPropertyFuncExpr{Property: ExteriorRing, Polygon: yyDollar[3].exprUnion()}
}
@@ -19989,7 +19972,7 @@ yydefault:
case 1295:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6530
+//line sql.y:6534
{
yyLOCAL = &PolygonPropertyFuncExpr{Property: InteriorRingN, Polygon: yyDollar[3].exprUnion(), PropertyDefArg: yyDollar[5].exprUnion()}
}
@@ -19997,7 +19980,7 @@ yydefault:
case 1296:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6534
+//line sql.y:6538
{
yyLOCAL = &PolygonPropertyFuncExpr{Property: NumInteriorRings, Polygon: yyDollar[3].exprUnion()}
}
@@ -20005,7 +19988,7 @@ yydefault:
case 1297:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6538
+//line sql.y:6542
{
yyLOCAL = &GeomCollPropertyFuncExpr{Property: GeometryN, GeomColl: yyDollar[3].exprUnion(), PropertyDefArg: yyDollar[5].exprUnion()}
}
@@ -20013,7 +19996,7 @@ yydefault:
case 1298:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6542
+//line sql.y:6546
{
yyLOCAL = &GeomCollPropertyFuncExpr{Property: NumGeometries, GeomColl: yyDollar[3].exprUnion()}
}
@@ -20021,7 +20004,7 @@ yydefault:
case 1299:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6546
+//line sql.y:6550
{
yyLOCAL = &GeoHashFromLatLongExpr{Longitude: yyDollar[3].exprUnion(), Latitude: yyDollar[5].exprUnion(), MaxLength: yyDollar[7].exprUnion()}
}
@@ -20029,7 +20012,7 @@ yydefault:
case 1300:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6550
+//line sql.y:6554
{
yyLOCAL = &GeoHashFromPointExpr{Point: yyDollar[3].exprUnion(), MaxLength: yyDollar[5].exprUnion()}
}
@@ -20037,7 +20020,7 @@ yydefault:
case 1301:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6554
+//line sql.y:6558
{
yyLOCAL = &GeomFromGeoHashExpr{GeomType: LatitudeFromHash, GeoHash: yyDollar[3].exprUnion()}
}
@@ -20045,7 +20028,7 @@ yydefault:
case 1302:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6558
+//line sql.y:6562
{
yyLOCAL = &GeomFromGeoHashExpr{GeomType: LongitudeFromHash, GeoHash: yyDollar[3].exprUnion()}
}
@@ -20053,7 +20036,7 @@ yydefault:
case 1303:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6562
+//line sql.y:6566
{
yyLOCAL = &GeomFromGeoHashExpr{GeomType: PointFromHash, GeoHash: yyDollar[3].exprUnion(), SridOpt: yyDollar[5].exprUnion()}
}
@@ -20061,7 +20044,7 @@ yydefault:
case 1304:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6566
+//line sql.y:6570
{
yyLOCAL = &GeomFromGeoJSONExpr{GeoJSON: yyDollar[3].exprUnion()}
}
@@ -20069,7 +20052,7 @@ yydefault:
case 1305:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6570
+//line sql.y:6574
{
yyLOCAL = &GeomFromGeoJSONExpr{GeoJSON: yyDollar[3].exprUnion(), HigherDimHandlerOpt: yyDollar[5].exprUnion()}
}
@@ -20077,7 +20060,7 @@ yydefault:
case 1306:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6574
+//line sql.y:6578
{
yyLOCAL = &GeomFromGeoJSONExpr{GeoJSON: yyDollar[3].exprUnion(), HigherDimHandlerOpt: yyDollar[5].exprUnion(), Srid: yyDollar[7].exprUnion()}
}
@@ -20085,7 +20068,7 @@ yydefault:
case 1307:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6578
+//line sql.y:6582
{
yyLOCAL = &GeoJSONFromGeomExpr{Geom: yyDollar[3].exprUnion()}
}
@@ -20093,7 +20076,7 @@ yydefault:
case 1308:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6582
+//line sql.y:6586
{
yyLOCAL = &GeoJSONFromGeomExpr{Geom: yyDollar[3].exprUnion(), MaxDecimalDigits: yyDollar[5].exprUnion()}
}
@@ -20101,7 +20084,7 @@ yydefault:
case 1309:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6586
+//line sql.y:6590
{
yyLOCAL = &GeoJSONFromGeomExpr{Geom: yyDollar[3].exprUnion(), MaxDecimalDigits: yyDollar[5].exprUnion(), Bitmask: yyDollar[7].exprUnion()}
}
@@ -20109,7 +20092,7 @@ yydefault:
case 1310:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6590
+//line sql.y:6594
{
yyLOCAL = &JSONObjectExpr{Params: yyDollar[3].jsonObjectParamsUnion()}
}
@@ -20117,7 +20100,7 @@ yydefault:
case 1311:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6594
+//line sql.y:6598
{
yyLOCAL = &JSONQuoteExpr{StringArg: yyDollar[3].exprUnion()}
}
@@ -20125,7 +20108,7 @@ yydefault:
case 1312:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6598
+//line sql.y:6602
{
yyLOCAL = &JSONContainsExpr{Target: yyDollar[3].exprUnion(), Candidate: yyDollar[5].exprsUnion()[0], PathList: yyDollar[5].exprsUnion()[1:]}
}
@@ -20133,7 +20116,7 @@ yydefault:
case 1313:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6602
+//line sql.y:6606
{
yyLOCAL = &JSONContainsPathExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), PathList: yyDollar[7].exprsUnion()}
}
@@ -20141,7 +20124,7 @@ yydefault:
case 1314:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6606
+//line sql.y:6610
{
yyLOCAL = &JSONExtractExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()}
}
@@ -20149,7 +20132,7 @@ yydefault:
case 1315:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6610
+//line sql.y:6614
{
yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion()}
}
@@ -20157,7 +20140,7 @@ yydefault:
case 1316:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6614
+//line sql.y:6618
{
yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()}
}
@@ -20165,7 +20148,7 @@ yydefault:
case 1317:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6618
+//line sql.y:6622
{
yyLOCAL = &JSONOverlapsExpr{JSONDoc1: yyDollar[3].exprUnion(), JSONDoc2: yyDollar[5].exprUnion()}
}
@@ -20173,7 +20156,7 @@ yydefault:
case 1318:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6622
+//line sql.y:6626
{
yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion()}
}
@@ -20181,7 +20164,7 @@ yydefault:
case 1319:
yyDollar = yyS[yypt-10 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6626
+//line sql.y:6630
{
yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion(), EscapeChar: yyDollar[9].exprsUnion()[0], PathList: yyDollar[9].exprsUnion()[1:]}
}
@@ -20189,7 +20172,7 @@ yydefault:
case 1320:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6630
+//line sql.y:6634
{
yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion()}
}
@@ -20197,7 +20180,7 @@ yydefault:
case 1321:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6634
+//line sql.y:6638
{
yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion()}
}
@@ -20205,7 +20188,7 @@ yydefault:
case 1322:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6638
+//line sql.y:6642
{
yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), ErrorOnResponse: yyDollar[7].jtOnResponseUnion()}
}
@@ -20213,7 +20196,7 @@ yydefault:
case 1323:
yyDollar = yyS[yypt-9 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6642
+//line sql.y:6646
{
yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion(), ErrorOnResponse: yyDollar[8].jtOnResponseUnion()}
}
@@ -20221,7 +20204,7 @@ yydefault:
case 1324:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6646
+//line sql.y:6650
{
yyLOCAL = &JSONAttributesExpr{Type: DepthAttributeType, JSONDoc: yyDollar[3].exprUnion()}
}
@@ -20229,7 +20212,7 @@ yydefault:
case 1325:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6650
+//line sql.y:6654
{
yyLOCAL = &JSONAttributesExpr{Type: ValidAttributeType, JSONDoc: yyDollar[3].exprUnion()}
}
@@ -20237,7 +20220,7 @@ yydefault:
case 1326:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6654
+//line sql.y:6658
{
yyLOCAL = &JSONAttributesExpr{Type: TypeAttributeType, JSONDoc: yyDollar[3].exprUnion()}
}
@@ -20245,7 +20228,7 @@ yydefault:
case 1327:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6658
+//line sql.y:6662
{
yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion()}
}
@@ -20253,7 +20236,7 @@ yydefault:
case 1328:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6662
+//line sql.y:6666
{
yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()}
}
@@ -20261,7 +20244,7 @@ yydefault:
case 1329:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6666
+//line sql.y:6670
{
yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayAppendType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()}
}
@@ -20269,7 +20252,7 @@ yydefault:
case 1330:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6670
+//line sql.y:6674
{
yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()}
}
@@ -20277,7 +20260,7 @@ yydefault:
case 1331:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6674
+//line sql.y:6678
{
yyLOCAL = &JSONValueModifierExpr{Type: JSONInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()}
}
@@ -20285,7 +20268,7 @@ yydefault:
case 1332:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6678
+//line sql.y:6682
{
yyLOCAL = &JSONValueModifierExpr{Type: JSONReplaceType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()}
}
@@ -20293,7 +20276,7 @@ yydefault:
case 1333:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6682
+//line sql.y:6686
{
yyLOCAL = &JSONValueModifierExpr{Type: JSONSetType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()}
}
@@ -20301,7 +20284,7 @@ yydefault:
case 1334:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6686
+//line sql.y:6690
{
yyLOCAL = &JSONValueMergeExpr{Type: JSONMergeType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()}
}
@@ -20309,7 +20292,7 @@ yydefault:
case 1335:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6690
+//line sql.y:6694
{
yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePatchType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()}
}
@@ -20317,7 +20300,7 @@ yydefault:
case 1336:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6694
+//line sql.y:6698
{
yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePreserveType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()}
}
@@ -20325,7 +20308,7 @@ yydefault:
case 1337:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6698
+//line sql.y:6702
{
yyLOCAL = &JSONRemoveExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()}
}
@@ -20333,7 +20316,7 @@ yydefault:
case 1338:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6702
+//line sql.y:6706
{
yyLOCAL = &JSONUnquoteExpr{JSONValue: yyDollar[3].exprUnion()}
}
@@ -20341,7 +20324,7 @@ yydefault:
case 1339:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6706
+//line sql.y:6710
{
yyLOCAL = &MultiPolygonExpr{PolygonParams: yyDollar[3].exprsUnion()}
}
@@ -20349,7 +20332,7 @@ yydefault:
case 1340:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6710
+//line sql.y:6714
{
yyLOCAL = &MultiPointExpr{PointParams: yyDollar[3].exprsUnion()}
}
@@ -20357,7 +20340,7 @@ yydefault:
case 1341:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6714
+//line sql.y:6718
{
yyLOCAL = &MultiLinestringExpr{LinestringParams: yyDollar[3].exprsUnion()}
}
@@ -20365,7 +20348,7 @@ yydefault:
case 1342:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6718
+//line sql.y:6722
{
yyLOCAL = &PolygonExpr{LinestringParams: yyDollar[3].exprsUnion()}
}
@@ -20373,7 +20356,7 @@ yydefault:
case 1343:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6722
+//line sql.y:6726
{
yyLOCAL = &LineStringExpr{PointParams: yyDollar[3].exprsUnion()}
}
@@ -20381,7 +20364,7 @@ yydefault:
case 1344:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6726
+//line sql.y:6730
{
yyLOCAL = &PointExpr{XCordinate: yyDollar[3].exprUnion(), YCordinate: yyDollar[5].exprUnion()}
}
@@ -20389,7 +20372,7 @@ yydefault:
case 1345:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6730
+//line sql.y:6734
{
yyLOCAL = &ArgumentLessWindowExpr{Type: yyDollar[1].argumentLessWindowExprTypeUnion(), OverClause: yyDollar[4].overClauseUnion()}
}
@@ -20397,7 +20380,7 @@ yydefault:
case 1346:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6734
+//line sql.y:6738
{
yyLOCAL = &FirstOrLastValueExpr{Type: yyDollar[1].firstOrLastValueExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()}
}
@@ -20405,7 +20388,7 @@ yydefault:
case 1347:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6738
+//line sql.y:6742
{
yyLOCAL = &NtileExpr{N: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()}
}
@@ -20413,7 +20396,7 @@ yydefault:
case 1348:
yyDollar = yyS[yypt-9 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6742
+//line sql.y:6746
{
yyLOCAL = &NTHValueExpr{Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), FromFirstLastClause: yyDollar[7].fromFirstLastClauseUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()}
}
@@ -20421,7 +20404,7 @@ yydefault:
case 1349:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6746
+//line sql.y:6750
{
yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()}
}
@@ -20429,7 +20412,7 @@ yydefault:
case 1350:
yyDollar = yyS[yypt-9 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6750
+//line sql.y:6754
{
yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), Default: yyDollar[6].exprUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()}
}
@@ -20437,7 +20420,7 @@ yydefault:
case 1351:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6754
+//line sql.y:6758
{
yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprAdddate, Date: yyDollar[3].exprUnion(), Interval: yyDollar[6].exprUnion(), Unit: yyDollar[7].intervalTypeUnion()}
}
@@ -20445,7 +20428,7 @@ yydefault:
case 1352:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6758
+//line sql.y:6762
{
yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprAdddate, Date: yyDollar[3].exprUnion(), Interval: yyDollar[5].exprUnion(), Unit: IntervalNone}
}
@@ -20453,7 +20436,7 @@ yydefault:
case 1353:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6762
+//line sql.y:6766
{
yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprDateAdd, Date: yyDollar[3].exprUnion(), Interval: yyDollar[6].exprUnion(), Unit: yyDollar[7].intervalTypeUnion()}
}
@@ -20461,7 +20444,7 @@ yydefault:
case 1354:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6766
+//line sql.y:6770
{
yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprDateSub, Date: yyDollar[3].exprUnion(), Interval: yyDollar[6].exprUnion(), Unit: yyDollar[7].intervalTypeUnion()}
}
@@ -20469,7 +20452,7 @@ yydefault:
case 1355:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6770
+//line sql.y:6774
{
yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprSubdate, Date: yyDollar[3].exprUnion(), Interval: yyDollar[6].exprUnion(), Unit: yyDollar[7].intervalTypeUnion()}
}
@@ -20477,7 +20460,7 @@ yydefault:
case 1356:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6774
+//line sql.y:6778
{
yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprSubdate, Date: yyDollar[3].exprUnion(), Interval: yyDollar[5].exprUnion(), Unit: IntervalNone}
}
@@ -20485,7 +20468,7 @@ yydefault:
case 1361:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6784
+//line sql.y:6788
{
yyLOCAL = yyDollar[1].exprUnion()
}
@@ -20493,7 +20476,7 @@ yydefault:
case 1362:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6788
+//line sql.y:6792
{
yyLOCAL = NewIntLiteral(yyDollar[1].str)
}
@@ -20501,7 +20484,7 @@ yydefault:
case 1363:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6792
+//line sql.y:6796
{
yyLOCAL = yyDollar[1].variableUnion()
}
@@ -20509,7 +20492,7 @@ yydefault:
case 1364:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6796
+//line sql.y:6800
{
yyLOCAL = parseBindVariable(yylex, yyDollar[1].str[1:])
}
@@ -20517,7 +20500,7 @@ yydefault:
case 1365:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6801
+//line sql.y:6805
{
yyLOCAL = nil
}
@@ -20525,7 +20508,7 @@ yydefault:
case 1366:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6805
+//line sql.y:6809
{
yyLOCAL = yyDollar[2].exprUnion()
}
@@ -20533,7 +20516,7 @@ yydefault:
case 1367:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6811
+//line sql.y:6815
{
yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()}
}
@@ -20541,7 +20524,7 @@ yydefault:
case 1368:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6815
+//line sql.y:6819
{
yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()}
}
@@ -20549,7 +20532,7 @@ yydefault:
case 1369:
yyDollar = yyS[yypt-10 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6819
+//line sql.y:6823
{
yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion()}
}
@@ -20557,7 +20540,7 @@ yydefault:
case 1370:
yyDollar = yyS[yypt-12 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6823
+//line sql.y:6827
{
yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), ReturnOption: yyDollar[11].exprUnion()}
}
@@ -20565,7 +20548,7 @@ yydefault:
case 1371:
yyDollar = yyS[yypt-14 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6827
+//line sql.y:6831
{
// Match type is kept expression as TRIM( ' m ') is accepted
yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), ReturnOption: yyDollar[11].exprUnion(), MatchType: yyDollar[13].exprUnion()}
@@ -20574,7 +20557,7 @@ yydefault:
case 1372:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6832
+//line sql.y:6836
{
yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()}
}
@@ -20582,7 +20565,7 @@ yydefault:
case 1373:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6836
+//line sql.y:6840
{
yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), MatchType: yyDollar[7].exprUnion()}
}
@@ -20590,7 +20573,7 @@ yydefault:
case 1374:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6840
+//line sql.y:6844
{
yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion()}
}
@@ -20598,7 +20581,7 @@ yydefault:
case 1375:
yyDollar = yyS[yypt-10 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6844
+//line sql.y:6848
{
yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion()}
}
@@ -20606,7 +20589,7 @@ yydefault:
case 1376:
yyDollar = yyS[yypt-12 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6848
+//line sql.y:6852
{
yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion()}
}
@@ -20614,7 +20597,7 @@ yydefault:
case 1377:
yyDollar = yyS[yypt-14 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6852
+//line sql.y:6856
{
// Match type is kept expression as TRIM( ' m ') is accepted
yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion(), MatchType: yyDollar[13].exprUnion()}
@@ -20623,7 +20606,7 @@ yydefault:
case 1378:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6857
+//line sql.y:6861
{
yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()}
}
@@ -20631,7 +20614,7 @@ yydefault:
case 1379:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6861
+//line sql.y:6865
{
yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()}
}
@@ -20639,7 +20622,7 @@ yydefault:
case 1380:
yyDollar = yyS[yypt-10 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6865
+//line sql.y:6869
{
yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion()}
}
@@ -20647,7 +20630,7 @@ yydefault:
case 1381:
yyDollar = yyS[yypt-12 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6869
+//line sql.y:6873
{
// Match type is kept expression as TRIM( ' m ') is accepted
yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), MatchType: yyDollar[11].exprUnion()}
@@ -20656,7 +20639,7 @@ yydefault:
case 1382:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6876
+//line sql.y:6880
{
yyLOCAL = &ExtractValueExpr{Fragment: yyDollar[3].exprUnion(), XPathExpr: yyDollar[5].exprUnion()}
}
@@ -20664,7 +20647,7 @@ yydefault:
case 1383:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6880
+//line sql.y:6884
{
yyLOCAL = &UpdateXMLExpr{Target: yyDollar[3].exprUnion(), XPathExpr: yyDollar[5].exprUnion(), NewXML: yyDollar[7].exprUnion()}
}
@@ -20672,7 +20655,7 @@ yydefault:
case 1384:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6886
+//line sql.y:6890
{
yyLOCAL = &PerformanceSchemaFuncExpr{Type: FormatBytesType, Argument: yyDollar[3].exprUnion()}
}
@@ -20680,7 +20663,7 @@ yydefault:
case 1385:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6890
+//line sql.y:6894
{
yyLOCAL = &PerformanceSchemaFuncExpr{Type: FormatPicoTimeType, Argument: yyDollar[3].exprUnion()}
}
@@ -20688,7 +20671,7 @@ yydefault:
case 1386:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6894
+//line sql.y:6898
{
yyLOCAL = &PerformanceSchemaFuncExpr{Type: PsCurrentThreadIDType}
}
@@ -20696,7 +20679,7 @@ yydefault:
case 1387:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6898
+//line sql.y:6902
{
yyLOCAL = &PerformanceSchemaFuncExpr{Type: PsThreadIDType, Argument: yyDollar[3].exprUnion()}
}
@@ -20704,7 +20687,7 @@ yydefault:
case 1388:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6904
+//line sql.y:6908
{
yyLOCAL = >IDFuncExpr{Type: GTIDSubsetType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()}
}
@@ -20712,7 +20695,7 @@ yydefault:
case 1389:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6908
+//line sql.y:6912
{
yyLOCAL = >IDFuncExpr{Type: GTIDSubtractType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()}
}
@@ -20720,7 +20703,7 @@ yydefault:
case 1390:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6912
+//line sql.y:6916
{
yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion()}
}
@@ -20728,7 +20711,7 @@ yydefault:
case 1391:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6916
+//line sql.y:6920
{
yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()}
}
@@ -20736,7 +20719,7 @@ yydefault:
case 1392:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6920
+//line sql.y:6924
{
yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion()}
}
@@ -20744,7 +20727,7 @@ yydefault:
case 1393:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6924
+//line sql.y:6928
{
yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()}
}
@@ -20752,7 +20735,7 @@ yydefault:
case 1394:
yyDollar = yyS[yypt-8 : yypt+1]
var yyLOCAL Expr
-//line sql.y:6928
+//line sql.y:6932
{
yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion(), Channel: yyDollar[7].exprUnion()}
}
@@ -20760,7 +20743,7 @@ yydefault:
case 1395:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:6933
+//line sql.y:6937
{
yyLOCAL = nil
}
@@ -20768,7 +20751,7 @@ yydefault:
case 1396:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:6937
+//line sql.y:6941
{
yyLOCAL = yyDollar[2].convertTypeUnion()
}
@@ -20776,7 +20759,7 @@ yydefault:
case 1397:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6943
+//line sql.y:6947
{
yyLOCAL = IntervalDayHour
}
@@ -20784,7 +20767,7 @@ yydefault:
case 1398:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6947
+//line sql.y:6951
{
yyLOCAL = IntervalDayMicrosecond
}
@@ -20792,7 +20775,7 @@ yydefault:
case 1399:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6951
+//line sql.y:6955
{
yyLOCAL = IntervalDayMinute
}
@@ -20800,7 +20783,7 @@ yydefault:
case 1400:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6955
+//line sql.y:6959
{
yyLOCAL = IntervalDaySecond
}
@@ -20808,7 +20791,7 @@ yydefault:
case 1401:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6959
+//line sql.y:6963
{
yyLOCAL = IntervalHourMicrosecond
}
@@ -20816,7 +20799,7 @@ yydefault:
case 1402:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6963
+//line sql.y:6967
{
yyLOCAL = IntervalHourMinute
}
@@ -20824,7 +20807,7 @@ yydefault:
case 1403:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6967
+//line sql.y:6971
{
yyLOCAL = IntervalHourSecond
}
@@ -20832,7 +20815,7 @@ yydefault:
case 1404:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6971
+//line sql.y:6975
{
yyLOCAL = IntervalMinuteMicrosecond
}
@@ -20840,7 +20823,7 @@ yydefault:
case 1405:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6975
+//line sql.y:6979
{
yyLOCAL = IntervalMinuteSecond
}
@@ -20848,7 +20831,7 @@ yydefault:
case 1406:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6979
+//line sql.y:6983
{
yyLOCAL = IntervalSecondMicrosecond
}
@@ -20856,7 +20839,7 @@ yydefault:
case 1407:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6983
+//line sql.y:6987
{
yyLOCAL = IntervalYearMonth
}
@@ -20864,7 +20847,7 @@ yydefault:
case 1408:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6987
+//line sql.y:6991
{
yyLOCAL = IntervalDay
}
@@ -20872,7 +20855,7 @@ yydefault:
case 1409:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6991
+//line sql.y:6995
{
yyLOCAL = IntervalWeek
}
@@ -20880,7 +20863,7 @@ yydefault:
case 1410:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6995
+//line sql.y:6999
{
yyLOCAL = IntervalHour
}
@@ -20888,7 +20871,7 @@ yydefault:
case 1411:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:6999
+//line sql.y:7003
{
yyLOCAL = IntervalMinute
}
@@ -20896,7 +20879,7 @@ yydefault:
case 1412:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7003
+//line sql.y:7007
{
yyLOCAL = IntervalMonth
}
@@ -20904,7 +20887,7 @@ yydefault:
case 1413:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7007
+//line sql.y:7011
{
yyLOCAL = IntervalQuarter
}
@@ -20912,7 +20895,7 @@ yydefault:
case 1414:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7011
+//line sql.y:7015
{
yyLOCAL = IntervalSecond
}
@@ -20920,7 +20903,7 @@ yydefault:
case 1415:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7015
+//line sql.y:7019
{
yyLOCAL = IntervalMicrosecond
}
@@ -20928,7 +20911,7 @@ yydefault:
case 1416:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7019
+//line sql.y:7023
{
yyLOCAL = IntervalYear
}
@@ -20936,7 +20919,7 @@ yydefault:
case 1417:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7025
+//line sql.y:7029
{
yyLOCAL = IntervalDay
}
@@ -20944,7 +20927,7 @@ yydefault:
case 1418:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7029
+//line sql.y:7033
{
yyLOCAL = IntervalWeek
}
@@ -20952,7 +20935,7 @@ yydefault:
case 1419:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7033
+//line sql.y:7037
{
yyLOCAL = IntervalHour
}
@@ -20960,7 +20943,7 @@ yydefault:
case 1420:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7037
+//line sql.y:7041
{
yyLOCAL = IntervalMinute
}
@@ -20968,7 +20951,7 @@ yydefault:
case 1421:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7041
+//line sql.y:7045
{
yyLOCAL = IntervalMonth
}
@@ -20976,7 +20959,7 @@ yydefault:
case 1422:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7045
+//line sql.y:7049
{
yyLOCAL = IntervalQuarter
}
@@ -20984,7 +20967,7 @@ yydefault:
case 1423:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7049
+//line sql.y:7053
{
yyLOCAL = IntervalSecond
}
@@ -20992,7 +20975,7 @@ yydefault:
case 1424:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7053
+//line sql.y:7057
{
yyLOCAL = IntervalMicrosecond
}
@@ -21000,7 +20983,7 @@ yydefault:
case 1425:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7057
+//line sql.y:7061
{
yyLOCAL = IntervalYear
}
@@ -21008,7 +20991,7 @@ yydefault:
case 1426:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7061
+//line sql.y:7065
{
yyLOCAL = IntervalDay
}
@@ -21016,7 +20999,7 @@ yydefault:
case 1427:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7065
+//line sql.y:7069
{
yyLOCAL = IntervalWeek
}
@@ -21024,7 +21007,7 @@ yydefault:
case 1428:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7069
+//line sql.y:7073
{
yyLOCAL = IntervalHour
}
@@ -21032,7 +21015,7 @@ yydefault:
case 1429:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7073
+//line sql.y:7077
{
yyLOCAL = IntervalMinute
}
@@ -21040,7 +21023,7 @@ yydefault:
case 1430:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7077
+//line sql.y:7081
{
yyLOCAL = IntervalMonth
}
@@ -21048,7 +21031,7 @@ yydefault:
case 1431:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7081
+//line sql.y:7085
{
yyLOCAL = IntervalQuarter
}
@@ -21056,7 +21039,7 @@ yydefault:
case 1432:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7085
+//line sql.y:7089
{
yyLOCAL = IntervalSecond
}
@@ -21064,7 +21047,7 @@ yydefault:
case 1433:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7089
+//line sql.y:7093
{
yyLOCAL = IntervalMicrosecond
}
@@ -21072,7 +21055,7 @@ yydefault:
case 1434:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL IntervalType
-//line sql.y:7093
+//line sql.y:7097
{
yyLOCAL = IntervalYear
}
@@ -21080,7 +21063,7 @@ yydefault:
case 1437:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL int
-//line sql.y:7103
+//line sql.y:7107
{
yyLOCAL = 0
}
@@ -21088,7 +21071,7 @@ yydefault:
case 1438:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL int
-//line sql.y:7107
+//line sql.y:7111
{
yyLOCAL = 0
}
@@ -21096,7 +21079,7 @@ yydefault:
case 1439:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL int
-//line sql.y:7111
+//line sql.y:7115
{
yyLOCAL = convertStringToInt(yyDollar[2].str)
}
@@ -21104,7 +21087,7 @@ yydefault:
case 1440:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7121
+//line sql.y:7125
{
yyLOCAL = &FuncExpr{Name: NewIdentifierCI("if"), Exprs: yyDollar[3].exprsUnion()}
}
@@ -21112,7 +21095,7 @@ yydefault:
case 1441:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7125
+//line sql.y:7129
{
yyLOCAL = &FuncExpr{Name: NewIdentifierCI("database"), Exprs: yyDollar[3].exprsUnion()}
}
@@ -21120,7 +21103,7 @@ yydefault:
case 1442:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7129
+//line sql.y:7133
{
yyLOCAL = &FuncExpr{Name: NewIdentifierCI("schema"), Exprs: yyDollar[3].exprsUnion()}
}
@@ -21128,7 +21111,7 @@ yydefault:
case 1443:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7133
+//line sql.y:7137
{
yyLOCAL = &FuncExpr{Name: NewIdentifierCI("mod"), Exprs: yyDollar[3].exprsUnion()}
}
@@ -21136,7 +21119,7 @@ yydefault:
case 1444:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7137
+//line sql.y:7141
{
yyLOCAL = &FuncExpr{Name: NewIdentifierCI("replace"), Exprs: yyDollar[3].exprsUnion()}
}
@@ -21144,7 +21127,7 @@ yydefault:
case 1445:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL MatchExprOption
-//line sql.y:7143
+//line sql.y:7147
{
yyLOCAL = NoOption
}
@@ -21152,7 +21135,7 @@ yydefault:
case 1446:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL MatchExprOption
-//line sql.y:7147
+//line sql.y:7151
{
yyLOCAL = BooleanModeOpt
}
@@ -21160,7 +21143,7 @@ yydefault:
case 1447:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL MatchExprOption
-//line sql.y:7151
+//line sql.y:7155
{
yyLOCAL = NaturalLanguageModeOpt
}
@@ -21168,7 +21151,7 @@ yydefault:
case 1448:
yyDollar = yyS[yypt-7 : yypt+1]
var yyLOCAL MatchExprOption
-//line sql.y:7155
+//line sql.y:7159
{
yyLOCAL = NaturalLanguageModeWithQueryExpansionOpt
}
@@ -21176,33 +21159,33 @@ yydefault:
case 1449:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL MatchExprOption
-//line sql.y:7159
+//line sql.y:7163
{
yyLOCAL = QueryExpansionOpt
}
yyVAL.union = yyLOCAL
case 1450:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7165
+//line sql.y:7169
{
yyVAL.str = string(yyDollar[1].identifierCI.String())
}
case 1451:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7169
+//line sql.y:7173
{
yyVAL.str = string(yyDollar[1].str)
}
case 1452:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7173
+//line sql.y:7177
{
yyVAL.str = string(yyDollar[1].str)
}
case 1453:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7179
+//line sql.y:7183
{
yyLOCAL = nil
}
@@ -21210,7 +21193,7 @@ yydefault:
case 1454:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7183
+//line sql.y:7187
{
yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: ptr.Of(convertStringToInt(yyDollar[4].str))}
}
@@ -21218,7 +21201,7 @@ yydefault:
case 1455:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7187
+//line sql.y:7191
{
yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: ptr.Of(convertStringToInt(yyDollar[4].str))}
}
@@ -21226,7 +21209,7 @@ yydefault:
case 1456:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7193
+//line sql.y:7197
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()}
}
@@ -21234,7 +21217,7 @@ yydefault:
case 1457:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7197
+//line sql.y:7201
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion(), Charset: yyDollar[3].columnCharset}
}
@@ -21242,7 +21225,7 @@ yydefault:
case 1458:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7201
+//line sql.y:7205
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)}
}
@@ -21250,7 +21233,7 @@ yydefault:
case 1459:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7205
+//line sql.y:7209
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()}
}
@@ -21258,7 +21241,7 @@ yydefault:
case 1460:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7209
+//line sql.y:7213
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)}
yyLOCAL.Length = yyDollar[2].LengthScaleOption.Length
@@ -21268,7 +21251,7 @@ yydefault:
case 1461:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7215
+//line sql.y:7219
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)}
}
@@ -21276,7 +21259,7 @@ yydefault:
case 1462:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7219
+//line sql.y:7223
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()}
}
@@ -21284,7 +21267,7 @@ yydefault:
case 1463:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7223
+//line sql.y:7227
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)}
}
@@ -21292,7 +21275,7 @@ yydefault:
case 1464:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7227
+//line sql.y:7231
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)}
}
@@ -21300,7 +21283,7 @@ yydefault:
case 1465:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7231
+//line sql.y:7235
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()}
}
@@ -21308,7 +21291,7 @@ yydefault:
case 1466:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7235
+//line sql.y:7239
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)}
}
@@ -21316,7 +21299,7 @@ yydefault:
case 1467:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7239
+//line sql.y:7243
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)}
}
@@ -21324,7 +21307,7 @@ yydefault:
case 1468:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7243
+//line sql.y:7247
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()}
}
@@ -21332,7 +21315,7 @@ yydefault:
case 1469:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7247
+//line sql.y:7251
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)}
}
@@ -21340,7 +21323,7 @@ yydefault:
case 1470:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *ConvertType
-//line sql.y:7251
+//line sql.y:7255
{
yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)}
}
@@ -21348,7 +21331,7 @@ yydefault:
case 1471:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:7257
+//line sql.y:7261
{
yyLOCAL = false
}
@@ -21356,7 +21339,7 @@ yydefault:
case 1472:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:7261
+//line sql.y:7265
{
yyLOCAL = true
}
@@ -21364,7 +21347,7 @@ yydefault:
case 1473:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7266
+//line sql.y:7270
{
yyLOCAL = nil
}
@@ -21372,34 +21355,34 @@ yydefault:
case 1474:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7270
+//line sql.y:7274
{
yyLOCAL = yyDollar[1].exprUnion()
}
yyVAL.union = yyLOCAL
case 1475:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7275
+//line sql.y:7279
{
yyVAL.str = string("")
}
case 1476:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:7279
+//line sql.y:7283
{
yyVAL.str = encodeSQLString(yyDollar[2].str)
}
case 1477:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []*When
-//line sql.y:7285
+//line sql.y:7289
{
yyLOCAL = []*When{yyDollar[1].whenUnion()}
}
yyVAL.union = yyLOCAL
case 1478:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:7289
+//line sql.y:7293
{
yySLICE := (*[]*When)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[2].whenUnion())
@@ -21407,7 +21390,7 @@ yydefault:
case 1479:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *When
-//line sql.y:7295
+//line sql.y:7299
{
yyLOCAL = &When{Cond: yyDollar[2].exprUnion(), Val: yyDollar[4].exprUnion()}
}
@@ -21415,7 +21398,7 @@ yydefault:
case 1480:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7300
+//line sql.y:7304
{
yyLOCAL = nil
}
@@ -21423,7 +21406,7 @@ yydefault:
case 1481:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7304
+//line sql.y:7308
{
yyLOCAL = yyDollar[2].exprUnion()
}
@@ -21431,7 +21414,7 @@ yydefault:
case 1482:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *ColName
-//line sql.y:7310
+//line sql.y:7314
{
yyLOCAL = &ColName{Name: yyDollar[1].identifierCI}
}
@@ -21439,7 +21422,7 @@ yydefault:
case 1483:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *ColName
-//line sql.y:7314
+//line sql.y:7318
{
yyLOCAL = &ColName{Name: NewIdentifierCI(string(yyDollar[1].str))}
}
@@ -21447,7 +21430,7 @@ yydefault:
case 1484:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *ColName
-//line sql.y:7318
+//line sql.y:7322
{
yyLOCAL = &ColName{Qualifier: TableName{Name: yyDollar[1].identifierCS}, Name: yyDollar[3].identifierCI}
}
@@ -21455,7 +21438,7 @@ yydefault:
case 1485:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *ColName
-//line sql.y:7322
+//line sql.y:7326
{
yyLOCAL = &ColName{Qualifier: TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}, Name: yyDollar[5].identifierCI}
}
@@ -21463,7 +21446,7 @@ yydefault:
case 1486:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7328
+//line sql.y:7332
{
yyLOCAL = yyDollar[1].colNameUnion()
}
@@ -21471,7 +21454,7 @@ yydefault:
case 1487:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7332
+//line sql.y:7336
{
yyLOCAL = &Offset{V: convertStringToInt(yyDollar[1].str)}
}
@@ -21479,7 +21462,7 @@ yydefault:
case 1488:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7338
+//line sql.y:7342
{
// TODO(sougou): Deprecate this construct.
if yyDollar[1].identifierCI.Lowered() != "value" {
@@ -21492,7 +21475,7 @@ yydefault:
case 1489:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7347
+//line sql.y:7351
{
yyLOCAL = NewIntLiteral(yyDollar[1].str)
}
@@ -21500,7 +21483,7 @@ yydefault:
case 1490:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7351
+//line sql.y:7355
{
yyLOCAL = parseBindVariable(yylex, yyDollar[1].str[1:])
}
@@ -21508,7 +21491,7 @@ yydefault:
case 1491:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *GroupBy
-//line sql.y:7356
+//line sql.y:7360
{
yyLOCAL = nil
}
@@ -21516,7 +21499,7 @@ yydefault:
case 1492:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *GroupBy
-//line sql.y:7360
+//line sql.y:7364
{
yyLOCAL = &GroupBy{Exprs: yyDollar[3].exprsUnion(), WithRollup: yyDollar[4].booleanUnion()}
}
@@ -21524,7 +21507,7 @@ yydefault:
case 1493:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:7365
+//line sql.y:7369
{
yyLOCAL = false
}
@@ -21532,7 +21515,7 @@ yydefault:
case 1494:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL bool
-//line sql.y:7369
+//line sql.y:7373
{
yyLOCAL = true
}
@@ -21540,7 +21523,7 @@ yydefault:
case 1495:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7375
+//line sql.y:7379
{
yyLOCAL = nil
}
@@ -21548,7 +21531,7 @@ yydefault:
case 1496:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7379
+//line sql.y:7383
{
yyLOCAL = yyDollar[2].exprUnion()
}
@@ -21556,7 +21539,7 @@ yydefault:
case 1497:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *NamedWindow
-//line sql.y:7385
+//line sql.y:7389
{
yyLOCAL = &NamedWindow{yyDollar[2].windowDefinitionsUnion()}
}
@@ -21564,14 +21547,14 @@ yydefault:
case 1498:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL NamedWindows
-//line sql.y:7391
+//line sql.y:7395
{
yyLOCAL = NamedWindows{yyDollar[1].namedWindowUnion()}
}
yyVAL.union = yyLOCAL
case 1499:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7395
+//line sql.y:7399
{
yySLICE := (*NamedWindows)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].namedWindowUnion())
@@ -21579,7 +21562,7 @@ yydefault:
case 1500:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL NamedWindows
-//line sql.y:7400
+//line sql.y:7404
{
yyLOCAL = nil
}
@@ -21587,7 +21570,7 @@ yydefault:
case 1501:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL NamedWindows
-//line sql.y:7404
+//line sql.y:7408
{
yyLOCAL = yyDollar[1].namedWindowsUnion()
}
@@ -21595,7 +21578,7 @@ yydefault:
case 1502:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL OrderBy
-//line sql.y:7409
+//line sql.y:7413
{
yyLOCAL = nil
}
@@ -21603,7 +21586,7 @@ yydefault:
case 1503:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL OrderBy
-//line sql.y:7413
+//line sql.y:7417
{
yyLOCAL = yyDollar[1].orderByUnion()
}
@@ -21611,7 +21594,7 @@ yydefault:
case 1504:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL OrderBy
-//line sql.y:7419
+//line sql.y:7423
{
yyLOCAL = yyDollar[3].orderByUnion()
}
@@ -21619,14 +21602,14 @@ yydefault:
case 1505:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL OrderBy
-//line sql.y:7425
+//line sql.y:7429
{
yyLOCAL = OrderBy{yyDollar[1].orderUnion()}
}
yyVAL.union = yyLOCAL
case 1506:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7429
+//line sql.y:7433
{
yySLICE := (*OrderBy)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].orderUnion())
@@ -21634,7 +21617,7 @@ yydefault:
case 1507:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *Order
-//line sql.y:7435
+//line sql.y:7439
{
yyLOCAL = &Order{Expr: yyDollar[1].exprUnion(), Direction: yyDollar[2].orderDirectionUnion()}
}
@@ -21642,7 +21625,7 @@ yydefault:
case 1508:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL OrderDirection
-//line sql.y:7440
+//line sql.y:7444
{
yyLOCAL = AscOrder
}
@@ -21650,7 +21633,7 @@ yydefault:
case 1509:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL OrderDirection
-//line sql.y:7444
+//line sql.y:7448
{
yyLOCAL = AscOrder
}
@@ -21658,7 +21641,7 @@ yydefault:
case 1510:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL OrderDirection
-//line sql.y:7448
+//line sql.y:7452
{
yyLOCAL = DescOrder
}
@@ -21666,7 +21649,7 @@ yydefault:
case 1511:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *Limit
-//line sql.y:7453
+//line sql.y:7457
{
yyLOCAL = nil
}
@@ -21674,7 +21657,7 @@ yydefault:
case 1512:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *Limit
-//line sql.y:7457
+//line sql.y:7461
{
yyLOCAL = yyDollar[1].limitUnion()
}
@@ -21682,7 +21665,7 @@ yydefault:
case 1513:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *Limit
-//line sql.y:7463
+//line sql.y:7467
{
yyLOCAL = &Limit{Rowcount: yyDollar[2].exprUnion()}
}
@@ -21690,7 +21673,7 @@ yydefault:
case 1514:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *Limit
-//line sql.y:7467
+//line sql.y:7471
{
yyLOCAL = &Limit{Offset: yyDollar[2].exprUnion(), Rowcount: yyDollar[4].exprUnion()}
}
@@ -21698,7 +21681,7 @@ yydefault:
case 1515:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *Limit
-//line sql.y:7471
+//line sql.y:7475
{
yyLOCAL = &Limit{Offset: yyDollar[4].exprUnion(), Rowcount: yyDollar[2].exprUnion()}
}
@@ -21706,7 +21689,7 @@ yydefault:
case 1516:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL []AlterOption
-//line sql.y:7476
+//line sql.y:7480
{
yyLOCAL = nil
}
@@ -21714,7 +21697,7 @@ yydefault:
case 1517:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL []AlterOption
-//line sql.y:7480
+//line sql.y:7484
{
yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()}
}
@@ -21722,7 +21705,7 @@ yydefault:
case 1518:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL []AlterOption
-//line sql.y:7484
+//line sql.y:7488
{
yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()}
}
@@ -21730,7 +21713,7 @@ yydefault:
case 1519:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []AlterOption
-//line sql.y:7488
+//line sql.y:7492
{
yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()}
}
@@ -21738,7 +21721,7 @@ yydefault:
case 1520:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []AlterOption
-//line sql.y:7492
+//line sql.y:7496
{
yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()}
}
@@ -21746,7 +21729,7 @@ yydefault:
case 1521:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:7499
+//line sql.y:7503
{
yyLOCAL = &LockOption{Type: DefaultType}
}
@@ -21754,7 +21737,7 @@ yydefault:
case 1522:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:7503
+//line sql.y:7507
{
yyLOCAL = &LockOption{Type: NoneType}
}
@@ -21762,7 +21745,7 @@ yydefault:
case 1523:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:7507
+//line sql.y:7511
{
yyLOCAL = &LockOption{Type: SharedType}
}
@@ -21770,7 +21753,7 @@ yydefault:
case 1524:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:7511
+//line sql.y:7515
{
yyLOCAL = &LockOption{Type: ExclusiveType}
}
@@ -21778,7 +21761,7 @@ yydefault:
case 1525:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:7517
+//line sql.y:7521
{
yyLOCAL = AlgorithmValue(yyDollar[3].str)
}
@@ -21786,7 +21769,7 @@ yydefault:
case 1526:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:7521
+//line sql.y:7525
{
yyLOCAL = AlgorithmValue(yyDollar[3].str)
}
@@ -21794,7 +21777,7 @@ yydefault:
case 1527:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:7525
+//line sql.y:7529
{
yyLOCAL = AlgorithmValue(yyDollar[3].str)
}
@@ -21802,93 +21785,93 @@ yydefault:
case 1528:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL AlterOption
-//line sql.y:7529
+//line sql.y:7533
{
yyLOCAL = AlgorithmValue(yyDollar[3].str)
}
yyVAL.union = yyLOCAL
case 1529:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7534
+//line sql.y:7538
{
yyVAL.str = ""
}
case 1530:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7538
+//line sql.y:7542
{
yyVAL.str = string(yyDollar[3].str)
}
case 1531:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7542
+//line sql.y:7546
{
yyVAL.str = string(yyDollar[3].str)
}
case 1532:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7546
+//line sql.y:7550
{
yyVAL.str = string(yyDollar[3].str)
}
case 1533:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7551
+//line sql.y:7555
{
yyVAL.str = ""
}
case 1534:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7555
+//line sql.y:7559
{
yyVAL.str = yyDollar[3].str
}
case 1535:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7561
+//line sql.y:7565
{
yyVAL.str = string(yyDollar[1].str)
}
case 1536:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7565
+//line sql.y:7569
{
yyVAL.str = string(yyDollar[1].str)
}
case 1537:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7570
+//line sql.y:7574
{
yyVAL.str = ""
}
case 1538:
yyDollar = yyS[yypt-4 : yypt+1]
-//line sql.y:7574
+//line sql.y:7578
{
yyVAL.str = yyDollar[2].str
}
case 1539:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7579
+//line sql.y:7583
{
yyVAL.str = "cascaded"
}
case 1540:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7583
+//line sql.y:7587
{
yyVAL.str = string(yyDollar[1].str)
}
case 1541:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7587
+//line sql.y:7591
{
yyVAL.str = string(yyDollar[1].str)
}
case 1542:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *Definer
-//line sql.y:7592
+//line sql.y:7596
{
yyLOCAL = nil
}
@@ -21896,7 +21879,7 @@ yydefault:
case 1543:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *Definer
-//line sql.y:7596
+//line sql.y:7600
{
yyLOCAL = yyDollar[3].definerUnion()
}
@@ -21904,7 +21887,7 @@ yydefault:
case 1544:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *Definer
-//line sql.y:7602
+//line sql.y:7606
{
yyLOCAL = &Definer{
Name: string(yyDollar[1].str),
@@ -21914,7 +21897,7 @@ yydefault:
case 1545:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *Definer
-//line sql.y:7608
+//line sql.y:7612
{
yyLOCAL = &Definer{
Name: string(yyDollar[1].str),
@@ -21924,7 +21907,7 @@ yydefault:
case 1546:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *Definer
-//line sql.y:7614
+//line sql.y:7618
{
yyLOCAL = &Definer{
Name: yyDollar[1].str,
@@ -21934,32 +21917,32 @@ yydefault:
yyVAL.union = yyLOCAL
case 1547:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7623
+//line sql.y:7627
{
yyVAL.str = encodeSQLString(yyDollar[1].str)
}
case 1548:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7627
+//line sql.y:7631
{
yyVAL.str = formatIdentifier(yyDollar[1].str)
}
case 1549:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7632
+//line sql.y:7636
{
yyVAL.str = ""
}
case 1550:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7636
+//line sql.y:7640
{
yyVAL.str = formatAddress(yyDollar[1].str)
}
case 1551:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Lock
-//line sql.y:7642
+//line sql.y:7646
{
yyLOCAL = ForUpdateLock
}
@@ -21967,7 +21950,7 @@ yydefault:
case 1552:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Lock
-//line sql.y:7646
+//line sql.y:7650
{
yyLOCAL = ForUpdateLockNoWait
}
@@ -21975,7 +21958,7 @@ yydefault:
case 1553:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Lock
-//line sql.y:7650
+//line sql.y:7654
{
yyLOCAL = ForUpdateLockSkipLocked
}
@@ -21983,7 +21966,7 @@ yydefault:
case 1554:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL Lock
-//line sql.y:7654
+//line sql.y:7658
{
yyLOCAL = ForShareLock
}
@@ -21991,7 +21974,7 @@ yydefault:
case 1555:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Lock
-//line sql.y:7658
+//line sql.y:7662
{
yyLOCAL = ForShareLockNoWait
}
@@ -21999,7 +21982,7 @@ yydefault:
case 1556:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Lock
-//line sql.y:7662
+//line sql.y:7666
{
yyLOCAL = ForShareLockSkipLocked
}
@@ -22007,7 +21990,7 @@ yydefault:
case 1557:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL Lock
-//line sql.y:7666
+//line sql.y:7670
{
yyLOCAL = ShareModeLock
}
@@ -22015,7 +21998,7 @@ yydefault:
case 1558:
yyDollar = yyS[yypt-9 : yypt+1]
var yyLOCAL *SelectInto
-//line sql.y:7672
+//line sql.y:7676
{
yyLOCAL = &SelectInto{Type: IntoOutfileS3, FileName: encodeSQLString(yyDollar[4].str), Charset: yyDollar[5].columnCharset, FormatOption: yyDollar[6].str, ExportOption: yyDollar[7].str, Manifest: yyDollar[8].str, Overwrite: yyDollar[9].str}
}
@@ -22023,7 +22006,7 @@ yydefault:
case 1559:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *SelectInto
-//line sql.y:7676
+//line sql.y:7680
{
yyLOCAL = &SelectInto{Type: IntoDumpfile, FileName: encodeSQLString(yyDollar[3].str), Charset: ColumnCharset{}, FormatOption: "", ExportOption: "", Manifest: "", Overwrite: ""}
}
@@ -22031,177 +22014,177 @@ yydefault:
case 1560:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *SelectInto
-//line sql.y:7680
+//line sql.y:7684
{
yyLOCAL = &SelectInto{Type: IntoOutfile, FileName: encodeSQLString(yyDollar[3].str), Charset: yyDollar[4].columnCharset, FormatOption: "", ExportOption: yyDollar[5].str, Manifest: "", Overwrite: ""}
}
yyVAL.union = yyLOCAL
case 1561:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7685
+//line sql.y:7689
{
yyVAL.str = ""
}
case 1562:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7689
+//line sql.y:7693
{
yyVAL.str = " format csv" + yyDollar[3].str
}
case 1563:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7693
+//line sql.y:7697
{
yyVAL.str = " format text" + yyDollar[3].str
}
case 1564:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7698
+//line sql.y:7702
{
yyVAL.str = ""
}
case 1565:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7702
+//line sql.y:7706
{
yyVAL.str = " header"
}
case 1566:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7707
+//line sql.y:7711
{
yyVAL.str = ""
}
case 1567:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:7711
+//line sql.y:7715
{
yyVAL.str = " manifest on"
}
case 1568:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:7715
+//line sql.y:7719
{
yyVAL.str = " manifest off"
}
case 1569:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7720
+//line sql.y:7724
{
yyVAL.str = ""
}
case 1570:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:7724
+//line sql.y:7728
{
yyVAL.str = " overwrite on"
}
case 1571:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:7728
+//line sql.y:7732
{
yyVAL.str = " overwrite off"
}
case 1572:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:7734
+//line sql.y:7738
{
yyVAL.str = yyDollar[1].str + yyDollar[2].str
}
case 1573:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7739
+//line sql.y:7743
{
yyVAL.str = ""
}
case 1574:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:7743
+//line sql.y:7747
{
yyVAL.str = " lines" + yyDollar[2].str
}
case 1575:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7749
+//line sql.y:7753
{
yyVAL.str = yyDollar[1].str
}
case 1576:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:7753
+//line sql.y:7757
{
yyVAL.str = yyDollar[1].str + yyDollar[2].str
}
case 1577:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7759
+//line sql.y:7763
{
yyVAL.str = " starting by " + encodeSQLString(yyDollar[3].str)
}
case 1578:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7763
+//line sql.y:7767
{
yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str)
}
case 1579:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7768
+//line sql.y:7772
{
yyVAL.str = ""
}
case 1580:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:7772
+//line sql.y:7776
{
yyVAL.str = " " + yyDollar[1].str + yyDollar[2].str
}
case 1581:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7778
+//line sql.y:7782
{
yyVAL.str = yyDollar[1].str
}
case 1582:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:7782
+//line sql.y:7786
{
yyVAL.str = yyDollar[1].str + yyDollar[2].str
}
case 1583:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7788
+//line sql.y:7792
{
yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str)
}
case 1584:
yyDollar = yyS[yypt-4 : yypt+1]
-//line sql.y:7792
+//line sql.y:7796
{
yyVAL.str = yyDollar[1].str + " enclosed by " + encodeSQLString(yyDollar[4].str)
}
case 1585:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7796
+//line sql.y:7800
{
yyVAL.str = " escaped by " + encodeSQLString(yyDollar[3].str)
}
case 1586:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7801
+//line sql.y:7805
{
yyVAL.str = ""
}
case 1587:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7805
+//line sql.y:7809
{
yyVAL.str = " optionally"
}
case 1588:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *Insert
-//line sql.y:7818
+//line sql.y:7822
{
yyLOCAL = &Insert{Rows: yyDollar[2].valuesUnion(), RowAlias: yyDollar[3].rowAliasUnion()}
}
@@ -22209,7 +22192,7 @@ yydefault:
case 1589:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL *Insert
-//line sql.y:7822
+//line sql.y:7826
{
yyLOCAL = &Insert{Rows: yyDollar[1].selStmtUnion()}
}
@@ -22217,7 +22200,7 @@ yydefault:
case 1590:
yyDollar = yyS[yypt-6 : yypt+1]
var yyLOCAL *Insert
-//line sql.y:7826
+//line sql.y:7830
{
yyLOCAL = &Insert{Columns: yyDollar[2].columnsUnion(), Rows: yyDollar[5].valuesUnion(), RowAlias: yyDollar[6].rowAliasUnion()}
}
@@ -22225,7 +22208,7 @@ yydefault:
case 1591:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *Insert
-//line sql.y:7830
+//line sql.y:7834
{
yyLOCAL = &Insert{Columns: []IdentifierCI{}, Rows: yyDollar[4].valuesUnion(), RowAlias: yyDollar[5].rowAliasUnion()}
}
@@ -22233,7 +22216,7 @@ yydefault:
case 1592:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL *Insert
-//line sql.y:7834
+//line sql.y:7838
{
yyLOCAL = &Insert{Columns: yyDollar[2].columnsUnion(), Rows: yyDollar[4].selStmtUnion()}
}
@@ -22241,7 +22224,7 @@ yydefault:
case 1593:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Columns
-//line sql.y:7840
+//line sql.y:7844
{
yyLOCAL = Columns{yyDollar[1].identifierCI}
}
@@ -22249,21 +22232,21 @@ yydefault:
case 1594:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Columns
-//line sql.y:7844
+//line sql.y:7848
{
yyLOCAL = Columns{yyDollar[3].identifierCI}
}
yyVAL.union = yyLOCAL
case 1595:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7848
+//line sql.y:7852
{
yySLICE := (*Columns)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].identifierCI)
}
case 1596:
yyDollar = yyS[yypt-5 : yypt+1]
-//line sql.y:7852
+//line sql.y:7856
{
yySLICE := (*Columns)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[5].identifierCI)
@@ -22271,7 +22254,7 @@ yydefault:
case 1597:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL *RowAlias
-//line sql.y:7857
+//line sql.y:7861
{
yyLOCAL = nil
}
@@ -22279,7 +22262,7 @@ yydefault:
case 1598:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *RowAlias
-//line sql.y:7861
+//line sql.y:7865
{
yyLOCAL = &RowAlias{TableName: yyDollar[2].identifierCS}
}
@@ -22287,7 +22270,7 @@ yydefault:
case 1599:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL *RowAlias
-//line sql.y:7865
+//line sql.y:7869
{
yyLOCAL = &RowAlias{TableName: yyDollar[2].identifierCS, Columns: yyDollar[4].columnsUnion()}
}
@@ -22295,7 +22278,7 @@ yydefault:
case 1600:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL UpdateExprs
-//line sql.y:7870
+//line sql.y:7874
{
yyLOCAL = nil
}
@@ -22303,7 +22286,7 @@ yydefault:
case 1601:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL UpdateExprs
-//line sql.y:7874
+//line sql.y:7878
{
yyLOCAL = yyDollar[5].updateExprsUnion()
}
@@ -22311,14 +22294,14 @@ yydefault:
case 1602:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Values
-//line sql.y:7880
+//line sql.y:7884
{
yyLOCAL = Values{yyDollar[1].valTupleUnion()}
}
yyVAL.union = yyLOCAL
case 1603:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7884
+//line sql.y:7888
{
yySLICE := (*Values)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].valTupleUnion())
@@ -22326,7 +22309,7 @@ yydefault:
case 1604:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL ValTuple
-//line sql.y:7890
+//line sql.y:7894
{
yyLOCAL = yyDollar[1].valTupleUnion()
}
@@ -22334,7 +22317,7 @@ yydefault:
case 1605:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL ValTuple
-//line sql.y:7894
+//line sql.y:7898
{
yyLOCAL = ValTuple{}
}
@@ -22342,7 +22325,7 @@ yydefault:
case 1606:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL ValTuple
-//line sql.y:7900
+//line sql.y:7904
{
yyLOCAL = ValTuple(yyDollar[2].exprsUnion())
}
@@ -22350,7 +22333,7 @@ yydefault:
case 1607:
yyDollar = yyS[yypt-4 : yypt+1]
var yyLOCAL ValTuple
-//line sql.y:7904
+//line sql.y:7908
{
yyLOCAL = ValTuple(yyDollar[3].exprsUnion())
}
@@ -22358,7 +22341,7 @@ yydefault:
case 1608:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7909
+//line sql.y:7913
{
if len(yyDollar[1].valTupleUnion()) == 1 {
yyLOCAL = yyDollar[1].valTupleUnion()[0]
@@ -22370,14 +22353,14 @@ yydefault:
case 1609:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL UpdateExprs
-//line sql.y:7919
+//line sql.y:7923
{
yyLOCAL = UpdateExprs{yyDollar[1].updateExprUnion()}
}
yyVAL.union = yyLOCAL
case 1610:
yyDollar = yyS[yypt-3 : yypt+1]
-//line sql.y:7923
+//line sql.y:7927
{
yySLICE := (*UpdateExprs)(yyIaddr(yyVAL.union))
*yySLICE = append(*yySLICE, yyDollar[3].updateExprUnion())
@@ -22385,21 +22368,21 @@ yydefault:
case 1611:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL *UpdateExpr
-//line sql.y:7929
+//line sql.y:7933
{
yyLOCAL = &UpdateExpr{Name: yyDollar[1].colNameUnion(), Expr: yyDollar[3].exprUnion()}
}
yyVAL.union = yyLOCAL
case 1613:
yyDollar = yyS[yypt-2 : yypt+1]
-//line sql.y:7936
+//line sql.y:7940
{
yyVAL.str = "charset"
}
case 1616:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7946
+//line sql.y:7950
{
yyLOCAL = NewStrLiteral(yyDollar[1].identifierCI.String())
}
@@ -22407,7 +22390,7 @@ yydefault:
case 1617:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7950
+//line sql.y:7954
{
yyLOCAL = NewStrLiteral(yyDollar[1].str)
}
@@ -22415,7 +22398,7 @@ yydefault:
case 1618:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Expr
-//line sql.y:7954
+//line sql.y:7958
{
yyLOCAL = &Default{}
}
@@ -22423,7 +22406,7 @@ yydefault:
case 1621:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:7963
+//line sql.y:7967
{
yyLOCAL = false
}
@@ -22431,7 +22414,7 @@ yydefault:
case 1622:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL bool
-//line sql.y:7965
+//line sql.y:7969
{
yyLOCAL = true
}
@@ -22439,7 +22422,7 @@ yydefault:
case 1623:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:7968
+//line sql.y:7972
{
yyLOCAL = false
}
@@ -22447,7 +22430,7 @@ yydefault:
case 1624:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL bool
-//line sql.y:7970
+//line sql.y:7974
{
yyLOCAL = true
}
@@ -22455,7 +22438,7 @@ yydefault:
case 1625:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL bool
-//line sql.y:7973
+//line sql.y:7977
{
yyLOCAL = false
}
@@ -22463,7 +22446,7 @@ yydefault:
case 1626:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL bool
-//line sql.y:7975
+//line sql.y:7979
{
yyLOCAL = true
}
@@ -22471,7 +22454,7 @@ yydefault:
case 1627:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL Ignore
-//line sql.y:7978
+//line sql.y:7982
{
yyLOCAL = false
}
@@ -22479,33 +22462,33 @@ yydefault:
case 1628:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Ignore
-//line sql.y:7980
+//line sql.y:7984
{
yyLOCAL = true
}
yyVAL.union = yyLOCAL
case 1629:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:7983
+//line sql.y:7987
{
yyVAL.empty = struct{}{}
}
case 1630:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7985
+//line sql.y:7989
{
yyVAL.empty = struct{}{}
}
case 1631:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:7987
+//line sql.y:7991
{
yyVAL.empty = struct{}{}
}
case 1632:
yyDollar = yyS[yypt-5 : yypt+1]
var yyLOCAL Statement
-//line sql.y:7991
+//line sql.y:7995
{
yyLOCAL = &CallProc{Name: yyDollar[2].tableName, Params: yyDollar[4].exprsUnion()}
}
@@ -22513,7 +22496,7 @@ yydefault:
case 1633:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL Exprs
-//line sql.y:7996
+//line sql.y:8000
{
yyLOCAL = nil
}
@@ -22521,7 +22504,7 @@ yydefault:
case 1634:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL Exprs
-//line sql.y:8000
+//line sql.y:8004
{
yyLOCAL = yyDollar[1].exprsUnion()
}
@@ -22529,7 +22512,7 @@ yydefault:
case 1635:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL []*IndexOption
-//line sql.y:8005
+//line sql.y:8009
{
yyLOCAL = nil
}
@@ -22537,7 +22520,7 @@ yydefault:
case 1636:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL []*IndexOption
-//line sql.y:8007
+//line sql.y:8011
{
yyLOCAL = []*IndexOption{yyDollar[1].indexOptionUnion()}
}
@@ -22545,63 +22528,63 @@ yydefault:
case 1637:
yyDollar = yyS[yypt-2 : yypt+1]
var yyLOCAL *IndexOption
-//line sql.y:8011
+//line sql.y:8015
{
yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), String: string(yyDollar[2].identifierCI.String())}
}
yyVAL.union = yyLOCAL
case 1638:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:8017
+//line sql.y:8021
{
yyVAL.identifierCI = yyDollar[1].identifierCI
}
case 1639:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:8021
+//line sql.y:8025
{
yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str))
}
case 1641:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:8028
+//line sql.y:8032
{
yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str))
}
case 1642:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:8034
+//line sql.y:8038
{
yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str))
}
case 1643:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:8038
+//line sql.y:8042
{
yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str))
}
case 1644:
yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:8044
+//line sql.y:8048
{
yyVAL.identifierCS = NewIdentifierCS("")
}
case 1645:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:8048
+//line sql.y:8052
{
yyVAL.identifierCS = yyDollar[1].identifierCS
}
case 1647:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:8055
+//line sql.y:8059
{
yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str))
}
case 1648:
yyDollar = yyS[yypt-3 : yypt+1]
var yyLOCAL Statement
-//line sql.y:8061
+//line sql.y:8065
{
yyLOCAL = &Kill{Type: yyDollar[2].killTypeUnion(), ProcesslistID: convertStringToUInt64(yyDollar[3].str)}
}
@@ -22609,7 +22592,7 @@ yydefault:
case 1649:
yyDollar = yyS[yypt-0 : yypt+1]
var yyLOCAL KillType
-//line sql.y:8067
+//line sql.y:8071
{
yyLOCAL = ConnectionType
}
@@ -22617,7 +22600,7 @@ yydefault:
case 1650:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL KillType
-//line sql.y:8071
+//line sql.y:8075
{
yyLOCAL = ConnectionType
}
@@ -22625,26 +22608,20 @@ yydefault:
case 1651:
yyDollar = yyS[yypt-1 : yypt+1]
var yyLOCAL KillType
-//line sql.y:8075
+//line sql.y:8079
{
yyLOCAL = QueryType
}
yyVAL.union = yyLOCAL
- case 2282:
- yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:8734
- {
- }
case 2283:
yyDollar = yyS[yypt-1 : yypt+1]
//line sql.y:8739
{
}
case 2284:
- yyDollar = yyS[yypt-0 : yypt+1]
-//line sql.y:8743
+ yyDollar = yyS[yypt-1 : yypt+1]
+//line sql.y:8744
{
- skipToEnd(yylex)
}
case 2285:
yyDollar = yyS[yypt-0 : yypt+1]
@@ -22653,14 +22630,20 @@ yydefault:
skipToEnd(yylex)
}
case 2286:
- yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:8752
+ yyDollar = yyS[yypt-0 : yypt+1]
+//line sql.y:8753
{
skipToEnd(yylex)
}
case 2287:
yyDollar = yyS[yypt-1 : yypt+1]
-//line sql.y:8756
+//line sql.y:8757
+ {
+ skipToEnd(yylex)
+ }
+ case 2288:
+ yyDollar = yyS[yypt-1 : yypt+1]
+//line sql.y:8761
{
skipToEnd(yylex)
}
diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y
index faa7a09db1a..bf1a793e7e8 100644
--- a/go/vt/sqlparser/sql.y
+++ b/go/vt/sqlparser/sql.y
@@ -329,7 +329,7 @@ func markBindVariable(yylex yyLexer, bvar string) {
%token SEQUENCE MERGE TEMPORARY TEMPTABLE INVOKER SECURITY FIRST AFTER LAST
// Migration tokens
-%token VITESS_MIGRATION CANCEL RETRY LAUNCH COMPLETE CLEANUP THROTTLE UNTHROTTLE FORCE_CUTOVER EXPIRE RATIO
+%token VITESS_MIGRATION CANCEL RETRY LAUNCH COMPLETE CLEANUP THROTTLE UNTHROTTLE FORCE_CUTOVER CUTOVER_THRESHOLD EXPIRE RATIO
// Throttler tokens
%token VITESS_THROTTLER
@@ -1730,10 +1730,6 @@ text_literal %prec MULTIPLE_TEXT_LITERAL
{
$$ = &IntroducerExpr{CharacterSet: $1, Expr: NewHexLiteral($2)}
}
-| underscore_charsets column_name_or_offset %prec UNARY
- {
- $$ = &IntroducerExpr{CharacterSet: $1, Expr: $2}
- }
| underscore_charsets VALUE_ARG %prec UNARY
{
arg := parseBindVariable(yylex, $2[1:])
@@ -3411,6 +3407,14 @@ alter_statement:
Type: ForceCutOverAllMigrationType,
}
}
+| ALTER comment_opt VITESS_MIGRATION STRING CUTOVER_THRESHOLD STRING
+ {
+ $$ = &AlterMigration{
+ Type: SetCutOverThresholdMigrationType,
+ UUID: string($4),
+ Threshold: $6,
+ }
+ }
partitions_options_opt:
{
@@ -5591,11 +5595,11 @@ function_call_keyword
}
| column_name_or_offset JSON_EXTRACT_OP text_literal_or_arg
{
- $$ = &BinaryExpr{Left: $1, Operator: JSONExtractOp, Right: $3}
+ $$ = &JSONExtractExpr{JSONDoc: $1, PathList: []Expr{$3}}
}
| column_name_or_offset JSON_UNQUOTE_EXTRACT_OP text_literal_or_arg
{
- $$ = &BinaryExpr{Left: $1, Operator: JSONUnquoteExtractOp, Right: $3}
+ $$ = &JSONUnquoteExpr{JSONValue: &JSONExtractExpr{JSONDoc: $1, PathList: []Expr{$3}}}
}
column_names_opt_paren:
@@ -8305,6 +8309,7 @@ non_reserved_keyword:
| COUNT %prec FUNCTION_CALL_NON_KEYWORD
| CSV
| CURRENT
+| CUTOVER_THRESHOLD
| DATA
| DATE %prec STRING_TYPE_PREFIX_NON_KEYWORD
| DATE_ADD %prec FUNCTION_CALL_NON_KEYWORD
diff --git a/go/vt/sqlparser/tracked_buffer_test.go b/go/vt/sqlparser/tracked_buffer_test.go
index 96f2174481e..13b1363421e 100644
--- a/go/vt/sqlparser/tracked_buffer_test.go
+++ b/go/vt/sqlparser/tracked_buffer_test.go
@@ -270,7 +270,7 @@ func TestCanonicalOutput(t *testing.T) {
},
{
"create table t (id int, info JSON, INDEX zips((CAST(info->'$.field' AS unsigned array))))",
- "CREATE TABLE `t` (\n\t`id` int,\n\t`info` JSON,\n\tKEY `zips` ((CAST(`info` -> '$.field' AS unsigned array)))\n)",
+ "CREATE TABLE `t` (\n\t`id` int,\n\t`info` JSON,\n\tKEY `zips` ((CAST(JSON_EXTRACT(`info`, '$.field') AS unsigned array)))\n)",
},
{
"select 1 from t1 into outfile 'test/t1.txt'",
diff --git a/go/vt/throttler/replication_lag_cache.go b/go/vt/throttler/replication_lag_cache.go
index c9c2e94f113..d47b82474ac 100644
--- a/go/vt/throttler/replication_lag_cache.go
+++ b/go/vt/throttler/replication_lag_cache.go
@@ -18,6 +18,7 @@ package throttler
import (
"sort"
+ "sync"
"time"
"vitess.io/vitess/go/vt/discovery"
@@ -30,6 +31,8 @@ type replicationLagCache struct {
// The map key is replicationLagRecord.LegacyTabletStats.Key.
entries map[string]*replicationLagHistory
+ mu sync.Mutex
+
// slowReplicas is a set of slow replicas.
// The map key is replicationLagRecord.LegacyTabletStats.Key.
// This map will always be recomputed by sortByLag() and must not be modified
@@ -60,6 +63,9 @@ func newReplicationLagCache(historyCapacityPerReplica int) *replicationLagCache
// add inserts or updates "r" in the cache for the replica with the key "r.Key".
func (c *replicationLagCache) add(r replicationLagRecord) {
+ c.mu.Lock()
+ defer c.mu.Unlock()
+
if !r.Serving {
// Tablet is down. Do no longer track it.
delete(c.entries, discovery.TabletToMapKey(r.Tablet))
@@ -76,9 +82,35 @@ func (c *replicationLagCache) add(r replicationLagRecord) {
entry.add(r)
}
+// maxLag returns the maximum replication lag for the entries in cache.
+func (c *replicationLagCache) maxLag() (maxLag uint32) {
+ c.mu.Lock()
+ defer c.mu.Unlock()
+
+ for key := range c.entries {
+ if c.isIgnored(key) {
+ continue
+ }
+
+ entry := c.entries[key]
+ if entry == nil {
+ continue
+ }
+
+ latest := entry.latest()
+ if lag := latest.Stats.ReplicationLagSeconds; lag > maxLag {
+ maxLag = lag
+ }
+ }
+
+ return maxLag
+}
+
// latest returns the current lag record for the given LegacyTabletStats.Key string.
// A zero record is returned if there is no latest entry.
func (c *replicationLagCache) latest(key string) replicationLagRecord {
+ c.mu.Lock()
+ defer c.mu.Unlock()
entry, ok := c.entries[key]
if !ok {
return replicationLagRecord{}
@@ -90,6 +122,8 @@ func (c *replicationLagCache) latest(key string) replicationLagRecord {
// or just after it.
// If there is no such record, a zero record is returned.
func (c *replicationLagCache) atOrAfter(key string, at time.Time) replicationLagRecord {
+ c.mu.Lock()
+ defer c.mu.Unlock()
entry, ok := c.entries[key]
if !ok {
return replicationLagRecord{}
@@ -100,6 +134,9 @@ func (c *replicationLagCache) atOrAfter(key string, at time.Time) replicationLag
// sortByLag sorts all replicas by their latest replication lag value and
// tablet uid and updates the c.slowReplicas set.
func (c *replicationLagCache) sortByLag(ignoreNSlowestReplicas int, minimumReplicationLag int64) {
+ c.mu.Lock()
+ defer c.mu.Unlock()
+
// Reset the current list of ignored replicas.
c.slowReplicas = make(map[string]bool)
@@ -142,6 +179,9 @@ func (a byLagAndTabletUID) Less(i, j int) bool {
// this slow replica.
// "key" refers to ReplicationLagRecord.LegacyTabletStats.Key.
func (c *replicationLagCache) ignoreSlowReplica(key string) bool {
+ c.mu.Lock()
+ defer c.mu.Unlock()
+
if len(c.slowReplicas) == 0 {
// No slow replicas at all.
return false
diff --git a/go/vt/throttler/replication_lag_cache_test.go b/go/vt/throttler/replication_lag_cache_test.go
index 135c0f03956..a81c800ebbe 100644
--- a/go/vt/throttler/replication_lag_cache_test.go
+++ b/go/vt/throttler/replication_lag_cache_test.go
@@ -84,3 +84,10 @@ func TestReplicationLagCache_SortByLag(t *testing.T) {
require.True(t, c.slowReplicas[r1Key], "r1 should be tracked as a slow replica")
}
+
+func TestReplicationLagCache_MaxLag(t *testing.T) {
+ c := newReplicationLagCache(2)
+ c.add(lagRecord(sinceZero(1*time.Second), r1, 30))
+ c.add(lagRecord(sinceZero(1*time.Second), r2, 1))
+ require.Equal(t, uint32(30), c.maxLag())
+}
diff --git a/go/vt/throttler/throttler.go b/go/vt/throttler/throttler.go
index a12d8f241a2..83ea1a18d97 100644
--- a/go/vt/throttler/throttler.go
+++ b/go/vt/throttler/throttler.go
@@ -245,22 +245,10 @@ func (t *ThrottlerImpl) Throttle(threadID int) time.Duration {
// the provided type, excluding ignored tablets.
func (t *ThrottlerImpl) MaxLag(tabletType topodata.TabletType) uint32 {
cache := t.maxReplicationLagModule.lagCacheByType(tabletType)
-
- var maxLag uint32
- cacheEntries := cache.entries
-
- for key := range cacheEntries {
- if cache.isIgnored(key) {
- continue
- }
-
- lag := cache.latest(key).Stats.ReplicationLagSeconds
- if lag > maxLag {
- maxLag = lag
- }
+ if cache == nil {
+ return 0
}
-
- return maxLag
+ return cache.maxLag()
}
// ThreadFinished marks threadID as finished and redistributes the thread's
diff --git a/go/vt/throttler/throttler_test.go b/go/vt/throttler/throttler_test.go
index 74e8784f021..d321207b8ca 100644
--- a/go/vt/throttler/throttler_test.go
+++ b/go/vt/throttler/throttler_test.go
@@ -17,13 +17,25 @@ limitations under the License.
package throttler
import (
+ "context"
"runtime"
+ "sync"
"testing"
"time"
"github.com/stretchr/testify/require"
+
+ "vitess.io/vitess/go/vt/discovery"
+ "vitess.io/vitess/go/vt/proto/query"
+ "vitess.io/vitess/go/vt/proto/topodata"
)
+// testTabletTypes is the list of tablet types to test.
+var testTabletTypes = []topodata.TabletType{
+ topodata.TabletType_REPLICA,
+ topodata.TabletType_RDONLY,
+}
+
// The main purpose of the benchmarks below is to demonstrate the functionality
// of the throttler in the real-world (using a non-faked time.Now).
// The benchmark values should be as close as possible to the request interval
@@ -402,3 +414,73 @@ func TestThreadFinished_SecondCallPanics(t *testing.T) {
}()
throttler.ThreadFinished(0)
}
+
+func TestThrottlerMaxLag(t *testing.T) {
+ fc := &fakeClock{}
+ th, err := newThrottlerWithClock(t.Name(), "queries", 1, 1, 10, fc.now)
+ require.NoError(t, err)
+ throttler := th.(*ThrottlerImpl)
+ defer throttler.Close()
+
+ require.NotNil(t, throttler)
+ require.NotNil(t, throttler.maxReplicationLagModule)
+
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+
+ var wg sync.WaitGroup
+
+ // run .add() and .MaxLag() concurrently to detect races
+ for _, tabletType := range testTabletTypes {
+ wg.Add(1)
+ go func() {
+ defer wg.Done()
+ for {
+ select {
+ case <-ctx.Done():
+ return
+ default:
+ throttler.MaxLag(tabletType)
+ }
+ }
+ }()
+
+ wg.Add(1)
+ go func() {
+ defer wg.Done()
+ for {
+ select {
+ case <-ctx.Done():
+ return
+ default:
+ cache := throttler.maxReplicationLagModule.lagCacheByType(tabletType)
+ require.NotNil(t, cache)
+ cache.add(replicationLagRecord{
+ time: time.Now(),
+ TabletHealth: discovery.TabletHealth{
+ Serving: true,
+ Stats: &query.RealtimeStats{
+ ReplicationLagSeconds: 5,
+ },
+ Tablet: &topodata.Tablet{
+ Hostname: t.Name(),
+ Type: tabletType,
+ PortMap: map[string]int32{
+ "test": 15999,
+ },
+ },
+ },
+ })
+ }
+ }
+ }()
+ }
+ time.Sleep(time.Second)
+ cancel()
+ wg.Wait()
+
+ // check .MaxLag()
+ for _, tabletType := range testTabletTypes {
+ require.Equal(t, uint32(5), throttler.MaxLag(tabletType))
+ }
+}
diff --git a/go/vt/topo/cell_info.go b/go/vt/topo/cell_info.go
index 4a8112084cb..960d0a8e0ae 100644
--- a/go/vt/topo/cell_info.go
+++ b/go/vt/topo/cell_info.go
@@ -46,6 +46,9 @@ func pathForCellInfo(cell string) string {
// GetCellInfoNames returns the names of the existing cells. They are
// sorted by name.
func (ts *Server) GetCellInfoNames(ctx context.Context) ([]string, error) {
+ if ctx.Err() != nil {
+ return nil, ctx.Err()
+ }
entries, err := ts.globalCell.ListDir(ctx, CellsPath, false /*full*/)
switch {
case IsErrType(err, NoNode):
@@ -59,10 +62,10 @@ func (ts *Server) GetCellInfoNames(ctx context.Context) ([]string, error) {
// GetCellInfo reads a CellInfo from the global Conn.
func (ts *Server) GetCellInfo(ctx context.Context, cell string, strongRead bool) (*topodatapb.CellInfo, error) {
- conn := ts.globalCell
if ctx.Err() != nil {
return nil, ctx.Err()
}
+ conn := ts.globalCell
if !strongRead {
conn = ts.globalReadOnlyCell
}
@@ -83,6 +86,9 @@ func (ts *Server) GetCellInfo(ctx context.Context, cell string, strongRead bool)
// CreateCellInfo creates a new CellInfo with the provided content.
func (ts *Server) CreateCellInfo(ctx context.Context, cell string, ci *topodatapb.CellInfo) error {
+ if ctx.Err() != nil {
+ return ctx.Err()
+ }
// Pack the content.
contents, err := ci.MarshalVT()
if err != nil {
@@ -103,6 +109,10 @@ func (ts *Server) CreateCellInfo(ctx context.Context, cell string, ci *topodatap
func (ts *Server) UpdateCellInfoFields(ctx context.Context, cell string, update func(*topodatapb.CellInfo) error) error {
filePath := pathForCellInfo(cell)
for {
+ if ctx.Err() != nil {
+ return ctx.Err()
+ }
+
ci := &topodatapb.CellInfo{}
// Read the file, unpack the contents.
@@ -142,6 +152,9 @@ func (ts *Server) UpdateCellInfoFields(ctx context.Context, cell string, update
// We first try to make sure no Shard record points to the cell,
// but we'll continue regardless if 'force' is true.
func (ts *Server) DeleteCellInfo(ctx context.Context, cell string, force bool) error {
+ if ctx.Err() != nil {
+ return ctx.Err()
+ }
srvKeyspaces, err := ts.GetSrvKeyspaceNames(ctx, cell)
switch {
case err == nil:
@@ -180,6 +193,10 @@ func (ts *Server) DeleteCellInfo(ctx context.Context, cell string, force bool) e
// TODO(alainjobart) once the cell map is migrated to this generic
// package, we can do better than this.
func (ts *Server) GetKnownCells(ctx context.Context) ([]string, error) {
+ if err := ctx.Err(); err != nil {
+ return nil, err
+ }
+
// Note we use the global read-only cell here, as the result
// is not time sensitive.
entries, err := ts.globalReadOnlyCell.ListDir(ctx, CellsPath, false /*full*/)
diff --git a/go/vt/topo/cells_aliases.go b/go/vt/topo/cells_aliases.go
index 683fa08f6ba..4d5161ffe38 100644
--- a/go/vt/topo/cells_aliases.go
+++ b/go/vt/topo/cells_aliases.go
@@ -40,6 +40,9 @@ func pathForCellsAlias(alias string) string {
// GetCellsAliases returns the names of the existing cells. They are
// sorted by name.
func (ts *Server) GetCellsAliases(ctx context.Context, strongRead bool) (ret map[string]*topodatapb.CellsAlias, err error) {
+ if ctx.Err() != nil {
+ return nil, ctx.Err()
+ }
conn := ts.globalCell
if !strongRead {
conn = ts.globalReadOnlyCell
@@ -75,6 +78,9 @@ func (ts *Server) GetCellsAliases(ctx context.Context, strongRead bool) (ret map
// GetCellsAlias returns the CellsAlias that matches the given name.
func (ts *Server) GetCellsAlias(ctx context.Context, name string, strongRead bool) (*topodatapb.CellsAlias, error) {
+ if ctx.Err() != nil {
+ return nil, ctx.Err()
+ }
conn := ts.globalCell
if !strongRead {
conn = ts.globalReadOnlyCell
@@ -97,6 +103,9 @@ func (ts *Server) GetCellsAlias(ctx context.Context, name string, strongRead boo
// DeleteCellsAlias deletes the specified CellsAlias
func (ts *Server) DeleteCellsAlias(ctx context.Context, alias string) error {
+ if ctx.Err() != nil {
+ return ctx.Err()
+ }
ts.clearCellAliasesCache()
filePath := pathForCellsAlias(alias)
@@ -123,6 +132,9 @@ func (ts *Server) CreateCellsAlias(ctx context.Context, alias string, cellsAlias
}
// Save it.
+ if ctx.Err() != nil {
+ return ctx.Err()
+ }
filePath := pathForCellsAlias(alias)
_, err = ts.globalCell.Create(ctx, filePath, contents)
return err
@@ -134,6 +146,10 @@ func (ts *Server) UpdateCellsAlias(ctx context.Context, alias string, update fun
filePath := pathForCellsAlias(alias)
for {
+ if ctx.Err() != nil {
+ return ctx.Err()
+ }
+
cellsAlias := &topodatapb.CellsAlias{}
// Read the file, unpack the contents.
diff --git a/go/vt/topo/external_vitess_cluster.go b/go/vt/topo/external_vitess_cluster.go
index a7d0a69bf2c..936a30a4533 100644
--- a/go/vt/topo/external_vitess_cluster.go
+++ b/go/vt/topo/external_vitess_cluster.go
@@ -47,6 +47,9 @@ func GetExternalVitessClusterPath(clusterName string) string {
// CreateExternalVitessCluster creates a topo record for the passed vitess cluster
func (ts *Server) CreateExternalVitessCluster(ctx context.Context, clusterName string, value *topodatapb.ExternalVitessCluster) error {
+ if ctx.Err() != nil {
+ return ctx.Err()
+ }
data, err := value.MarshalVT()
if err != nil {
return err
@@ -66,6 +69,9 @@ func (ts *Server) CreateExternalVitessCluster(ctx context.Context, clusterName s
// GetExternalVitessCluster returns a topo record for the named vitess cluster
func (ts *Server) GetExternalVitessCluster(ctx context.Context, clusterName string) (*ExternalVitessClusterInfo, error) {
+ if ctx.Err() != nil {
+ return nil, ctx.Err()
+ }
data, version, err := ts.globalCell.Get(ctx, GetExternalVitessClusterPath(clusterName))
switch {
case IsErrType(err, NoNode):
@@ -88,7 +94,10 @@ func (ts *Server) GetExternalVitessCluster(ctx context.Context, clusterName stri
// UpdateExternalVitessCluster updates the topo record for the named vitess cluster
func (ts *Server) UpdateExternalVitessCluster(ctx context.Context, vc *ExternalVitessClusterInfo) error {
- //FIXME: check for cluster lock
+ if ctx.Err() != nil {
+ return ctx.Err()
+ }
+ // FIXME: check for cluster lock
data, err := vc.ExternalVitessCluster.MarshalVT()
if err != nil {
return err
@@ -109,6 +118,9 @@ func (ts *Server) UpdateExternalVitessCluster(ctx context.Context, vc *ExternalV
// DeleteExternalVitessCluster deletes the topo record for the named vitess cluster
func (ts *Server) DeleteExternalVitessCluster(ctx context.Context, clusterName string) error {
+ if ctx.Err() != nil {
+ return ctx.Err()
+ }
if err := ts.globalCell.Delete(ctx, GetExternalVitessClusterPath(clusterName), nil); err != nil {
return err
}
@@ -123,6 +135,9 @@ func (ts *Server) DeleteExternalVitessCluster(ctx context.Context, clusterName s
// GetExternalVitessClusters returns the list of external vitess clusters in the topology.
func (ts *Server) GetExternalVitessClusters(ctx context.Context) ([]string, error) {
+ if ctx.Err() != nil {
+ return nil, ctx.Err()
+ }
children, err := ts.globalCell.ListDir(ctx, GetExternalVitessClusterDir(), false /*full*/)
switch {
case err == nil:
diff --git a/go/vt/topo/keyspace.go b/go/vt/topo/keyspace.go
index dced769ca78..710bbee0653 100755
--- a/go/vt/topo/keyspace.go
+++ b/go/vt/topo/keyspace.go
@@ -22,43 +22,26 @@ import (
"sort"
"sync"
- "github.com/spf13/pflag"
"golang.org/x/sync/errgroup"
"vitess.io/vitess/go/constants/sidecar"
+ "vitess.io/vitess/go/event"
"vitess.io/vitess/go/sqlescape"
"vitess.io/vitess/go/vt/key"
- "vitess.io/vitess/go/vt/servenv"
- "vitess.io/vitess/go/vt/vterrors"
-
- "vitess.io/vitess/go/event"
"vitess.io/vitess/go/vt/log"
- "vitess.io/vitess/go/vt/topo/events"
-
topodatapb "vitess.io/vitess/go/vt/proto/topodata"
vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc"
+ "vitess.io/vitess/go/vt/topo/events"
+ "vitess.io/vitess/go/vt/vterrors"
)
// This file contains keyspace utility functions.
-// Default concurrency to use in order to avoid overhwelming the topo server.
-var DefaultConcurrency = 32
-
// shardKeySuffix is the suffix of a shard key.
// The full key looks like this:
// /vitess/global/keyspaces/customer/shards/80-/Shard
const shardKeySuffix = "Shard"
-func registerFlags(fs *pflag.FlagSet) {
- fs.IntVar(&DefaultConcurrency, "topo_read_concurrency", DefaultConcurrency, "Concurrency of topo reads.")
-}
-
-func init() {
- servenv.OnParseFor("vtcombo", registerFlags)
- servenv.OnParseFor("vtctld", registerFlags)
- servenv.OnParseFor("vtgate", registerFlags)
-}
-
// KeyspaceInfo is a meta struct that contains metadata to give the
// data more context and convenience. This is the main way we interact
// with a keyspace.
@@ -87,6 +70,10 @@ func ValidateKeyspaceName(name string) error {
// CreateKeyspace wraps the underlying Conn.Create
// and dispatches the event.
func (ts *Server) CreateKeyspace(ctx context.Context, keyspace string, value *topodatapb.Keyspace) error {
+ if ctx.Err() != nil {
+ return ctx.Err()
+ }
+
if err := ValidateKeyspaceName(keyspace); err != nil {
return vterrors.Wrapf(err, "CreateKeyspace: %s", err)
}
@@ -111,6 +98,10 @@ func (ts *Server) CreateKeyspace(ctx context.Context, keyspace string, value *to
// GetKeyspace reads the given keyspace and returns it
func (ts *Server) GetKeyspace(ctx context.Context, keyspace string) (*KeyspaceInfo, error) {
+ if ctx.Err() != nil {
+ return nil, ctx.Err()
+ }
+
if err := ValidateKeyspaceName(keyspace); err != nil {
return nil, vterrors.Wrapf(err, "GetKeyspace: %s", err)
}
@@ -168,6 +159,10 @@ func (ts *Server) GetThrottlerConfig(ctx context.Context, keyspace string) (*top
// UpdateKeyspace updates the keyspace data. It checks the keyspace is locked.
func (ts *Server) UpdateKeyspace(ctx context.Context, ki *KeyspaceInfo) error {
+ if ctx.Err() != nil {
+ return ctx.Err()
+ }
+
// make sure it is locked first
if err := CheckKeyspaceLocked(ctx, ki.keyspace); err != nil {
return err
@@ -197,7 +192,7 @@ func (ts *Server) UpdateKeyspace(ctx context.Context, ki *KeyspaceInfo) error {
type FindAllShardsInKeyspaceOptions struct {
// Concurrency controls the maximum number of concurrent calls to GetShard.
// If <= 0, Concurrency is set to 1.
- Concurrency int
+ Concurrency int64
}
// FindAllShardsInKeyspace reads and returns all the existing shards in a
@@ -206,12 +201,16 @@ type FindAllShardsInKeyspaceOptions struct {
// If opt is non-nil, it is used to configure the method's behavior. Otherwise,
// the default options are used.
func (ts *Server) FindAllShardsInKeyspace(ctx context.Context, keyspace string, opt *FindAllShardsInKeyspaceOptions) (map[string]*ShardInfo, error) {
+ if ctx.Err() != nil {
+ return nil, ctx.Err()
+ }
+
// Apply any necessary defaults.
if opt == nil {
opt = &FindAllShardsInKeyspaceOptions{}
}
if opt.Concurrency <= 0 {
- opt.Concurrency = DefaultConcurrency
+ opt.Concurrency = DefaultReadConcurrency
}
// Unescape the keyspace name as this can e.g. come from the VSchema where
@@ -371,6 +370,10 @@ func (ts *Server) GetOnlyShard(ctx context.Context, keyspace string) (*ShardInfo
// DeleteKeyspace wraps the underlying Conn.Delete
// and dispatches the event.
func (ts *Server) DeleteKeyspace(ctx context.Context, keyspace string) error {
+ if ctx.Err() != nil {
+ return ctx.Err()
+ }
+
keyspacePath := path.Join(KeyspacesPath, keyspace, KeyspaceFile)
if err := ts.globalCell.Delete(ctx, keyspacePath, nil); err != nil {
return err
@@ -392,6 +395,10 @@ func (ts *Server) DeleteKeyspace(ctx context.Context, keyspace string) error {
// GetKeyspaces returns the list of keyspaces in the topology.
func (ts *Server) GetKeyspaces(ctx context.Context) ([]string, error) {
+ if ctx.Err() != nil {
+ return nil, ctx.Err()
+ }
+
children, err := ts.globalCell.ListDir(ctx, KeyspacesPath, false /*full*/)
switch {
case err == nil:
@@ -405,6 +412,10 @@ func (ts *Server) GetKeyspaces(ctx context.Context) ([]string, error) {
// GetShardNames returns the list of shards in a keyspace.
func (ts *Server) GetShardNames(ctx context.Context, keyspace string) ([]string, error) {
+ if ctx.Err() != nil {
+ return nil, ctx.Err()
+ }
+
shardsPath := path.Join(KeyspacesPath, keyspace, ShardsPath)
children, err := ts.globalCell.ListDir(ctx, shardsPath, false /*full*/)
if IsErrType(err, NoNode) {
diff --git a/go/vt/topo/locks.go b/go/vt/topo/locks.go
index f46e5f06e4b..967d3f7f2e4 100644
--- a/go/vt/topo/locks.go
+++ b/go/vt/topo/locks.go
@@ -19,6 +19,7 @@ package topo
import (
"context"
"encoding/json"
+ "errors"
"os"
"os/user"
"sync"
@@ -175,6 +176,12 @@ func (l *Lock) lock(ctx context.Context, ts *Server, lt iTopoLock, opts ...LockO
return nil, err
}
+ if err := ctx.Err(); err != nil {
+ return nil, err
+ }
+ if ts.globalCell == nil {
+ return nil, errors.New("no global cell connection on the topo server")
+ }
switch l.Options.lockType {
case NonBlocking:
return ts.globalCell.TryLock(ctx, lt.Path(), j)
diff --git a/go/vt/topo/metadata.go b/go/vt/topo/metadata.go
index 4d24630a309..1c569f3fb10 100644
--- a/go/vt/topo/metadata.go
+++ b/go/vt/topo/metadata.go
@@ -28,6 +28,10 @@ import (
// UpsertMetadata sets the key/value in the metadata if it doesn't exist, otherwise it updates the content
func (ts *Server) UpsertMetadata(ctx context.Context, key string, val string) error {
+ if err := ctx.Err(); err != nil {
+ return err
+ }
+
keyPath := path.Join(MetadataPath, key)
_, _, err := ts.globalCell.Get(ctx, keyPath)
@@ -52,6 +56,10 @@ func (ts *Server) UpsertMetadata(ctx context.Context, key string, val string) er
// GetMetadata retrieves all metadata value that matches the given key regular expression. If empty all values are returned.
func (ts *Server) GetMetadata(ctx context.Context, keyFilter string) (map[string]string, error) {
+ if err := ctx.Err(); err != nil {
+ return nil, err
+ }
+
keys, err := ts.globalCell.ListDir(ctx, MetadataPath, false)
if err != nil {
return nil, err
@@ -77,6 +85,10 @@ func (ts *Server) GetMetadata(ctx context.Context, keyFilter string) (map[string
// DeleteMetadata deletes the key in the metadata
func (ts *Server) DeleteMetadata(ctx context.Context, key string) error {
+ if err := ctx.Err(); err != nil {
+ return err
+ }
+
keyPath := path.Join(MetadataPath, key)
// nil version means that it will insert if keyPath does not exist
@@ -89,6 +101,10 @@ func (ts *Server) DeleteMetadata(ctx context.Context, key string) error {
}
func (ts *Server) getMetadata(ctx context.Context, key string) (string, error) {
+ if err := ctx.Err(); err != nil {
+ return "", err
+ }
+
keyPath := path.Join(MetadataPath, key)
contents, _, err := ts.globalCell.Get(ctx, keyPath)
if err != nil {
diff --git a/go/vt/topo/server.go b/go/vt/topo/server.go
index 23b7be6cfa1..865dbc4bed8 100644
--- a/go/vt/topo/server.go
+++ b/go/vt/topo/server.go
@@ -49,6 +49,7 @@ import (
"sync"
"github.com/spf13/pflag"
+ "golang.org/x/sync/semaphore"
"vitess.io/vitess/go/vt/log"
"vitess.io/vitess/go/vt/proto/topodata"
@@ -181,6 +182,9 @@ var (
FlagBinaries = []string{"vttablet", "vtctl", "vtctld", "vtcombo", "vtgate",
"vtorc", "vtbackup"}
+
+ // Default read concurrency to use in order to avoid overhwelming the topo server.
+ DefaultReadConcurrency int64 = 32
)
func init() {
@@ -193,6 +197,7 @@ func registerTopoFlags(fs *pflag.FlagSet) {
fs.StringVar(&topoImplementation, "topo_implementation", topoImplementation, "the topology implementation to use")
fs.StringVar(&topoGlobalServerAddress, "topo_global_server_address", topoGlobalServerAddress, "the address of the global topology server")
fs.StringVar(&topoGlobalRoot, "topo_global_root", topoGlobalRoot, "the path of the global topology data in the global topology server")
+ fs.Int64Var(&DefaultReadConcurrency, "topo_read_concurrency", DefaultReadConcurrency, "Maximum concurrency of topo reads per global or local cell.")
}
// RegisterFactory registers a Factory for an implementation for a Server.
@@ -208,11 +213,12 @@ func RegisterFactory(name string, factory Factory) {
// NewWithFactory creates a new Server based on the given Factory.
// It also opens the global cell connection.
func NewWithFactory(factory Factory, serverAddress, root string) (*Server, error) {
+ globalReadSem := semaphore.NewWeighted(DefaultReadConcurrency)
conn, err := factory.Create(GlobalCell, serverAddress, root)
if err != nil {
return nil, err
}
- conn = NewStatsConn(GlobalCell, conn)
+ conn = NewStatsConn(GlobalCell, conn, globalReadSem)
var connReadOnly Conn
if factory.HasGlobalReadOnlyCell(serverAddress, root) {
@@ -220,7 +226,7 @@ func NewWithFactory(factory Factory, serverAddress, root string) (*Server, error
if err != nil {
return nil, err
}
- connReadOnly = NewStatsConn(GlobalReadOnlyCell, connReadOnly)
+ connReadOnly = NewStatsConn(GlobalReadOnlyCell, connReadOnly, globalReadSem)
} else {
connReadOnly = conn
}
@@ -262,11 +268,12 @@ func Open() *Server {
// ConnForCell returns a Conn object for the given cell.
// It caches Conn objects from previously requested cells.
func (ts *Server) ConnForCell(ctx context.Context, cell string) (Conn, error) {
+ if err := ctx.Err(); err != nil {
+ return nil, err
+ }
+
// Global cell is the easy case.
if cell == GlobalCell {
- if ctx.Err() != nil {
- return nil, ctx.Err()
- }
return ts.globalCell, nil
}
@@ -301,7 +308,8 @@ func (ts *Server) ConnForCell(ctx context.Context, cell string) (Conn, error) {
conn, err := ts.factory.Create(cell, ci.ServerAddress, ci.Root)
switch {
case err == nil:
- conn = NewStatsConn(cell, conn)
+ cellReadSem := semaphore.NewWeighted(DefaultReadConcurrency)
+ conn = NewStatsConn(cell, conn, cellReadSem)
ts.cellConns[cell] = cellConn{ci, conn}
return conn, nil
case IsErrType(err, NoNode):
@@ -343,8 +351,10 @@ func GetAliasByCell(ctx context.Context, ts *Server, cell string) string {
// Close will close all connections to underlying topo Server.
// It will nil all member variables, so any further access will panic.
func (ts *Server) Close() {
- ts.globalCell.Close()
- if ts.globalReadOnlyCell != ts.globalCell {
+ if ts.globalCell != nil {
+ ts.globalCell.Close()
+ }
+ if ts.globalReadOnlyCell != nil && ts.globalReadOnlyCell != ts.globalCell {
ts.globalReadOnlyCell.Close()
}
ts.globalCell = nil
diff --git a/go/vt/topo/shard.go b/go/vt/topo/shard.go
index ba3a02a68ca..a610cac885a 100644
--- a/go/vt/topo/shard.go
+++ b/go/vt/topo/shard.go
@@ -20,7 +20,6 @@ import (
"context"
"encoding/hex"
"errors"
- "fmt"
"path"
"slices"
"sort"
@@ -28,20 +27,20 @@ import (
"sync"
"time"
- "vitess.io/vitess/go/constants/sidecar"
- "vitess.io/vitess/go/protoutil"
- "vitess.io/vitess/go/vt/proto/vtrpc"
- "vitess.io/vitess/go/vt/vterrors"
+ "golang.org/x/sync/errgroup"
+ "vitess.io/vitess/go/constants/sidecar"
"vitess.io/vitess/go/event"
+ "vitess.io/vitess/go/protoutil"
"vitess.io/vitess/go/trace"
"vitess.io/vitess/go/vt/concurrency"
"vitess.io/vitess/go/vt/key"
"vitess.io/vitess/go/vt/log"
+ topodatapb "vitess.io/vitess/go/vt/proto/topodata"
+ "vitess.io/vitess/go/vt/proto/vtrpc"
"vitess.io/vitess/go/vt/topo/events"
"vitess.io/vitess/go/vt/topo/topoproto"
-
- topodatapb "vitess.io/vitess/go/vt/proto/topodata"
+ "vitess.io/vitess/go/vt/vterrors"
)
const (
@@ -166,6 +165,10 @@ func (si *ShardInfo) SetPrimaryTermStartTime(t time.Time) {
// GetShard is a high level function to read shard data.
// It generates trace spans.
func (ts *Server) GetShard(ctx context.Context, keyspace, shard string) (*ShardInfo, error) {
+ if err := ctx.Err(); err != nil {
+ return nil, err
+ }
+
if err := ValidateKeyspaceName(keyspace); err != nil {
return nil, err
}
@@ -202,6 +205,10 @@ func (ts *Server) updateShard(ctx context.Context, si *ShardInfo) error {
span.Annotate("shard", si.shardName)
defer span.Finish()
+ if err := ctx.Err(); err != nil {
+ return err
+ }
+
data, err := si.Shard.MarshalVT()
if err != nil {
return err
@@ -253,6 +260,10 @@ func (ts *Server) UpdateShardFields(ctx context.Context, keyspace, shard string,
// This will lock the Keyspace, as we may be looking at other shard servedTypes.
// Using GetOrCreateShard is probably a better idea for most use cases.
func (ts *Server) CreateShard(ctx context.Context, keyspace, shard string) (err error) {
+ if err := ctx.Err(); err != nil {
+ return err
+ }
+
if err := ValidateKeyspaceName(keyspace); err != nil {
return err
}
@@ -356,6 +367,10 @@ func (ts *Server) GetOrCreateShard(ctx context.Context, keyspace, shard string)
// DeleteShard wraps the underlying conn.Delete
// and dispatches the event.
func (ts *Server) DeleteShard(ctx context.Context, keyspace, shard string) error {
+ if err := ctx.Err(); err != nil {
+ return err
+ }
+
shardPath := shardFilePath(keyspace, shard)
if err := ts.globalCell.Delete(ctx, shardPath, nil); err != nil {
return err
@@ -553,7 +568,6 @@ func (ts *Server) FindAllTabletAliasesInShardByCell(ctx context.Context, keyspac
span.Annotate("shard", shard)
span.Annotate("num_cells", len(cells))
defer span.Finish()
- ctx = trace.NewContext(ctx, span)
var err error
// The caller intents to all cells
@@ -597,7 +611,7 @@ func (ts *Server) FindAllTabletAliasesInShardByCell(ctx context.Context, keyspac
case IsErrType(err, NoNode):
// There is no shard replication for this shard in this cell. NOOP
default:
- rec.RecordError(vterrors.Wrap(err, fmt.Sprintf("GetShardReplication(%v, %v, %v) failed.", cell, keyspace, shard)))
+ rec.RecordError(vterrors.Wrapf(err, "GetShardReplication(%v, %v, %v) failed.", cell, keyspace, shard))
return
}
}(cell)
@@ -616,6 +630,67 @@ func (ts *Server) FindAllTabletAliasesInShardByCell(ctx context.Context, keyspac
return result, err
}
+// GetTabletsByShard returns the tablets in the given shard using all cells.
+// It can return ErrPartialResult if it couldn't read all the cells, or all
+// the individual tablets, in which case the result is valid, but partial.
+func (ts *Server) GetTabletsByShard(ctx context.Context, keyspace, shard string) ([]*TabletInfo, error) {
+ return ts.GetTabletsByShardCell(ctx, keyspace, shard, nil)
+}
+
+// GetTabletsByShardCell returns the tablets in the given shard. It can return
+// ErrPartialResult if it couldn't read all the cells, or all the individual
+// tablets, in which case the result is valid, but partial.
+func (ts *Server) GetTabletsByShardCell(ctx context.Context, keyspace, shard string, cells []string) ([]*TabletInfo, error) {
+ span, ctx := trace.NewSpan(ctx, "topo.GetTabletsByShardCell")
+ span.Annotate("keyspace", keyspace)
+ span.Annotate("shard", shard)
+ span.Annotate("num_cells", len(cells))
+ defer span.Finish()
+ var err error
+
+ if len(cells) == 0 {
+ cells, err = ts.GetCellInfoNames(ctx)
+ if err != nil {
+ return nil, err
+ }
+ if len(cells) == 0 { // Nothing to do
+ return nil, nil
+ }
+ }
+
+ mu := sync.Mutex{}
+ eg, ctx := errgroup.WithContext(ctx)
+
+ tablets := make([]*TabletInfo, 0, len(cells))
+ var kss *KeyspaceShard
+ if keyspace != "" {
+ kss = &KeyspaceShard{
+ Keyspace: keyspace,
+ Shard: shard,
+ }
+ }
+ options := &GetTabletsByCellOptions{
+ KeyspaceShard: kss,
+ }
+ for _, cell := range cells {
+ eg.Go(func() error {
+ t, err := ts.GetTabletsByCell(ctx, cell, options)
+ if err != nil {
+ return vterrors.Wrapf(err, "GetTabletsByCell for %v failed.", cell)
+ }
+ mu.Lock()
+ defer mu.Unlock()
+ tablets = append(tablets, t...)
+ return nil
+ })
+ }
+ if err := eg.Wait(); err != nil {
+ log.Warningf("GetTabletsByShardCell(%v,%v): got partial result: %v", keyspace, shard, err)
+ return tablets, NewError(PartialResult, shard)
+ }
+ return tablets, nil
+}
+
// GetTabletMapForShard returns the tablets for a shard. It can return
// ErrPartialResult if it couldn't read all the cells, or all
// the individual tablets, in which case the map is valid, but partial.
@@ -660,6 +735,10 @@ type WatchShardData struct {
// It has the same contract as conn.Watch, but it also unpacks the
// contents into a Shard object
func (ts *Server) WatchShard(ctx context.Context, keyspace, shard string) (*WatchShardData, <-chan *WatchShardData, error) {
+ if err := ctx.Err(); err != nil {
+ return nil, nil, err
+ }
+
shardPath := shardFilePath(keyspace, shard)
ctx, cancel := context.WithCancel(ctx)
diff --git a/go/vt/topo/stats_conn.go b/go/vt/topo/stats_conn.go
index 39bc8c9bc43..ded362b9139 100644
--- a/go/vt/topo/stats_conn.go
+++ b/go/vt/topo/stats_conn.go
@@ -20,6 +20,8 @@ import (
"context"
"time"
+ "golang.org/x/sync/semaphore"
+
"vitess.io/vitess/go/stats"
"vitess.io/vitess/go/vt/proto/vtrpc"
"vitess.io/vitess/go/vt/vterrors"
@@ -37,6 +39,11 @@ var (
"TopologyConnErrors",
"TopologyConnErrors errors per operation",
[]string{"Operation", "Cell"})
+
+ topoStatsConnReadWaitTimings = stats.NewMultiTimings(
+ "TopologyConnReadWaits",
+ "TopologyConnReadWait timings",
+ []string{"Operation", "Cell"})
)
const readOnlyErrorStrFormat = "cannot perform %s on %s as the topology server connection is read-only"
@@ -46,14 +53,16 @@ type StatsConn struct {
cell string
conn Conn
readOnly bool
+ readSem *semaphore.Weighted
}
// NewStatsConn returns a StatsConn
-func NewStatsConn(cell string, conn Conn) *StatsConn {
+func NewStatsConn(cell string, conn Conn, readSem *semaphore.Weighted) *StatsConn {
return &StatsConn{
cell: cell,
conn: conn,
readOnly: false,
+ readSem: readSem,
}
}
@@ -61,6 +70,12 @@ func NewStatsConn(cell string, conn Conn) *StatsConn {
func (st *StatsConn) ListDir(ctx context.Context, dirPath string, full bool) ([]DirEntry, error) {
startTime := time.Now()
statsKey := []string{"ListDir", st.cell}
+ if err := st.readSem.Acquire(ctx, 1); err != nil {
+ return nil, err
+ }
+ defer st.readSem.Release(1)
+ topoStatsConnReadWaitTimings.Record(statsKey, startTime)
+ startTime = time.Now() // reset
defer topoStatsConnTimings.Record(statsKey, startTime)
res, err := st.conn.ListDir(ctx, dirPath, full)
if err != nil {
@@ -106,6 +121,12 @@ func (st *StatsConn) Update(ctx context.Context, filePath string, contents []byt
func (st *StatsConn) Get(ctx context.Context, filePath string) ([]byte, Version, error) {
startTime := time.Now()
statsKey := []string{"Get", st.cell}
+ if err := st.readSem.Acquire(ctx, 1); err != nil {
+ return nil, nil, err
+ }
+ defer st.readSem.Release(1)
+ topoStatsConnReadWaitTimings.Record(statsKey, startTime)
+ startTime = time.Now() // reset
defer topoStatsConnTimings.Record(statsKey, startTime)
bytes, version, err := st.conn.Get(ctx, filePath)
if err != nil {
@@ -119,6 +140,12 @@ func (st *StatsConn) Get(ctx context.Context, filePath string) ([]byte, Version,
func (st *StatsConn) GetVersion(ctx context.Context, filePath string, version int64) ([]byte, error) {
startTime := time.Now()
statsKey := []string{"GetVersion", st.cell}
+ if err := st.readSem.Acquire(ctx, 1); err != nil {
+ return nil, err
+ }
+ defer st.readSem.Release(1)
+ topoStatsConnReadWaitTimings.Record(statsKey, startTime)
+ startTime = time.Now() // reset
defer topoStatsConnTimings.Record(statsKey, startTime)
bytes, err := st.conn.GetVersion(ctx, filePath, version)
if err != nil {
@@ -132,6 +159,12 @@ func (st *StatsConn) GetVersion(ctx context.Context, filePath string, version in
func (st *StatsConn) List(ctx context.Context, filePathPrefix string) ([]KVInfo, error) {
startTime := time.Now()
statsKey := []string{"List", st.cell}
+ if err := st.readSem.Acquire(ctx, 1); err != nil {
+ return nil, err
+ }
+ defer st.readSem.Release(1)
+ topoStatsConnReadWaitTimings.Record(statsKey, startTime)
+ startTime = time.Now() // reset
defer topoStatsConnTimings.Record(statsKey, startTime)
bytes, err := st.conn.List(ctx, filePathPrefix)
if err != nil {
diff --git a/go/vt/topo/stats_conn_test.go b/go/vt/topo/stats_conn_test.go
index 605487697cc..9bc1d51d9ed 100644
--- a/go/vt/topo/stats_conn_test.go
+++ b/go/vt/topo/stats_conn_test.go
@@ -23,11 +23,14 @@ import (
"time"
"github.com/stretchr/testify/require"
+ "golang.org/x/sync/semaphore"
"vitess.io/vitess/go/vt/proto/vtrpc"
"vitess.io/vitess/go/vt/vterrors"
)
+var testStatsConnReadSem = semaphore.NewWeighted(1)
+
// The fakeConn is a wrapper for a Conn that emits stats for every operation
type fakeConn struct {
v Version
@@ -181,18 +184,33 @@ func (st *fakeConn) IsReadOnly() bool {
return st.readOnly
}
+// createTestReadSemaphoreContention simulates semaphore contention on the test read semaphore.
+func createTestReadSemaphoreContention(ctx context.Context, duration time.Duration) {
+ if err := testStatsConnReadSem.Acquire(ctx, 1); err != nil {
+ panic(err)
+ }
+ defer testStatsConnReadSem.Release(1)
+ time.Sleep(duration)
+}
+
// TestStatsConnTopoListDir emits stats on ListDir
func TestStatsConnTopoListDir(t *testing.T) {
conn := &fakeConn{}
- statsConn := NewStatsConn("global", conn)
+ statsConn := NewStatsConn("global", conn, testStatsConnReadSem)
ctx := context.Background()
+ go createTestReadSemaphoreContention(ctx, 100*time.Millisecond)
statsConn.ListDir(ctx, "", true)
timingCounts := topoStatsConnTimings.Counts()["ListDir.global"]
if got, want := timingCounts, int64(1); got != want {
t.Errorf("stats were not properly recorded: got = %d, want = %d", got, want)
}
+ waitTimingsCounts := topoStatsConnReadWaitTimings.Counts()["ListDir.global"]
+ if got := waitTimingsCounts; got != 1 {
+ t.Errorf("stats were not properly recorded: got = %d, want = 1", got)
+ }
+
// error is zero before getting an error
errorCount := topoStatsConnErrors.Counts()["ListDir.global"]
if got, want := errorCount, int64(0); got != want {
@@ -211,7 +229,7 @@ func TestStatsConnTopoListDir(t *testing.T) {
// TestStatsConnTopoCreate emits stats on Create
func TestStatsConnTopoCreate(t *testing.T) {
conn := &fakeConn{}
- statsConn := NewStatsConn("global", conn)
+ statsConn := NewStatsConn("global", conn, testStatsConnReadSem)
ctx := context.Background()
statsConn.Create(ctx, "", []byte{})
@@ -238,7 +256,7 @@ func TestStatsConnTopoCreate(t *testing.T) {
// TestStatsConnTopoUpdate emits stats on Update
func TestStatsConnTopoUpdate(t *testing.T) {
conn := &fakeConn{}
- statsConn := NewStatsConn("global", conn)
+ statsConn := NewStatsConn("global", conn, testStatsConnReadSem)
ctx := context.Background()
statsConn.Update(ctx, "", []byte{}, conn.v)
@@ -265,15 +283,21 @@ func TestStatsConnTopoUpdate(t *testing.T) {
// TestStatsConnTopoGet emits stats on Get
func TestStatsConnTopoGet(t *testing.T) {
conn := &fakeConn{}
- statsConn := NewStatsConn("global", conn)
+ statsConn := NewStatsConn("global", conn, testStatsConnReadSem)
ctx := context.Background()
+ go createTestReadSemaphoreContention(ctx, time.Millisecond*100)
statsConn.Get(ctx, "")
timingCounts := topoStatsConnTimings.Counts()["Get.global"]
if got, want := timingCounts, int64(1); got != want {
t.Errorf("stats were not properly recorded: got = %d, want = %d", got, want)
}
+ waitTimingsCounts := topoStatsConnReadWaitTimings.Counts()["Get.global"]
+ if got := waitTimingsCounts; got != 1 {
+ t.Errorf("stats were not properly recorded: got = %d, want = 1", got)
+ }
+
// error is zero before getting an error
errorCount := topoStatsConnErrors.Counts()["Get.global"]
if got, want := errorCount, int64(0); got != want {
@@ -292,7 +316,7 @@ func TestStatsConnTopoGet(t *testing.T) {
// TestStatsConnTopoDelete emits stats on Delete
func TestStatsConnTopoDelete(t *testing.T) {
conn := &fakeConn{}
- statsConn := NewStatsConn("global", conn)
+ statsConn := NewStatsConn("global", conn, testStatsConnReadSem)
ctx := context.Background()
statsConn.Delete(ctx, "", conn.v)
@@ -319,7 +343,7 @@ func TestStatsConnTopoDelete(t *testing.T) {
// TestStatsConnTopoLock emits stats on Lock
func TestStatsConnTopoLock(t *testing.T) {
conn := &fakeConn{}
- statsConn := NewStatsConn("global", conn)
+ statsConn := NewStatsConn("global", conn, testStatsConnReadSem)
ctx := context.Background()
statsConn.Lock(ctx, "", "")
@@ -348,7 +372,7 @@ func TestStatsConnTopoLock(t *testing.T) {
// TestStatsConnTopoWatch emits stats on Watch
func TestStatsConnTopoWatch(t *testing.T) {
conn := &fakeConn{}
- statsConn := NewStatsConn("global", conn)
+ statsConn := NewStatsConn("global", conn, testStatsConnReadSem)
ctx := context.Background()
statsConn.Watch(ctx, "")
@@ -362,7 +386,7 @@ func TestStatsConnTopoWatch(t *testing.T) {
// TestStatsConnTopoNewLeaderParticipation emits stats on NewLeaderParticipation
func TestStatsConnTopoNewLeaderParticipation(t *testing.T) {
conn := &fakeConn{}
- statsConn := NewStatsConn("global", conn)
+ statsConn := NewStatsConn("global", conn, testStatsConnReadSem)
_, _ = statsConn.NewLeaderParticipation("", "")
timingCounts := topoStatsConnTimings.Counts()["NewLeaderParticipation.global"]
@@ -388,7 +412,7 @@ func TestStatsConnTopoNewLeaderParticipation(t *testing.T) {
// TestStatsConnTopoClose emits stats on Close
func TestStatsConnTopoClose(t *testing.T) {
conn := &fakeConn{}
- statsConn := NewStatsConn("global", conn)
+ statsConn := NewStatsConn("global", conn, testStatsConnReadSem)
statsConn.Close()
timingCounts := topoStatsConnTimings.Counts()["Close.global"]
diff --git a/go/vt/topo/tablet.go b/go/vt/topo/tablet.go
index 671a0f43905..10ba787a3c1 100644
--- a/go/vt/topo/tablet.go
+++ b/go/vt/topo/tablet.go
@@ -24,21 +24,17 @@ import (
"sync"
"time"
- "golang.org/x/sync/semaphore"
-
- "vitess.io/vitess/go/protoutil"
- "vitess.io/vitess/go/vt/key"
-
"vitess.io/vitess/go/event"
"vitess.io/vitess/go/netutil"
+ "vitess.io/vitess/go/protoutil"
"vitess.io/vitess/go/trace"
+ "vitess.io/vitess/go/vt/key"
"vitess.io/vitess/go/vt/log"
- "vitess.io/vitess/go/vt/proto/vtrpc"
- "vitess.io/vitess/go/vt/vterrors"
-
topodatapb "vitess.io/vitess/go/vt/proto/topodata"
+ "vitess.io/vitess/go/vt/proto/vtrpc"
"vitess.io/vitess/go/vt/topo/events"
"vitess.io/vitess/go/vt/topo/topoproto"
+ "vitess.io/vitess/go/vt/vterrors"
)
// IsTrivialTypeChange returns if this db type be trivially reassigned
@@ -234,8 +230,9 @@ func (ts *Server) GetTabletAliasesByCell(ctx context.Context, cell string) ([]*t
// GetTabletsByCellOptions controls the behavior of
// Server.FindAllShardsInKeyspace.
type GetTabletsByCellOptions struct {
- // Concurrency controls the maximum number of concurrent calls to GetTablet.
- Concurrency int
+ // KeyspaceShard is the optional keyspace/shard that tablets must match.
+ // An empty shard value will match all shards in the keyspace.
+ KeyspaceShard *KeyspaceShard
}
// GetTabletsByCell returns all the tablets in the cell.
@@ -263,15 +260,27 @@ func (ts *Server) GetTabletsByCell(ctx context.Context, cellAlias string, opt *G
return nil, err
}
- tablets := make([]*TabletInfo, len(listResults))
+ var capHint int
+ if opt != nil && opt.KeyspaceShard == nil {
+ capHint = len(listResults)
+ }
+
+ tablets := make([]*TabletInfo, 0, capHint)
for n := range listResults {
tablet := &topodatapb.Tablet{}
if err := tablet.UnmarshalVT(listResults[n].Value); err != nil {
return nil, err
}
- tablets[n] = &TabletInfo{Tablet: tablet, version: listResults[n].Version}
+ if opt != nil && opt.KeyspaceShard != nil && opt.KeyspaceShard.Keyspace != "" {
+ if opt.KeyspaceShard.Keyspace != tablet.Keyspace {
+ continue
+ }
+ if opt.KeyspaceShard.Shard != "" && opt.KeyspaceShard.Shard != tablet.Shard {
+ continue
+ }
+ }
+ tablets = append(tablets, &TabletInfo{Tablet: tablet, version: listResults[n].Version})
}
-
return tablets, nil
}
@@ -482,29 +491,11 @@ func (ts *Server) GetTabletMap(ctx context.Context, tabletAliases []*topodatapb.
returnErr error
)
- concurrency := DefaultConcurrency
- if opt != nil && opt.Concurrency > 0 {
- concurrency = opt.Concurrency
- }
- var sem = semaphore.NewWeighted(int64(concurrency))
-
for _, tabletAlias := range tabletAliases {
wg.Add(1)
go func(tabletAlias *topodatapb.TabletAlias) {
defer wg.Done()
- if err := sem.Acquire(ctx, 1); err != nil {
- // Only happens if context is cancelled.
- mu.Lock()
- defer mu.Unlock()
- log.Warningf("%v: %v", tabletAlias, err)
- // We only need to set this on the first error.
- if returnErr == nil {
- returnErr = NewError(PartialResult, tabletAlias.GetCell())
- }
- return
- }
tabletInfo, err := ts.GetTablet(ctx, tabletAlias)
- sem.Release(1)
mu.Lock()
defer mu.Unlock()
if err != nil {
diff --git a/go/vt/topo/tablet_test.go b/go/vt/topo/tablet_test.go
index 3a0153a11b5..1c242e8778b 100644
--- a/go/vt/topo/tablet_test.go
+++ b/go/vt/topo/tablet_test.go
@@ -17,8 +17,10 @@ limitations under the License.
package topo_test
import (
+ "cmp"
"context"
"errors"
+ "slices"
"testing"
"github.com/stretchr/testify/assert"
@@ -34,43 +36,291 @@ import (
// GetTabletsByCell first tries to get all the tablets using List.
// If the response is too large, we will get an error, and fall back to one tablet at a time.
func TestServerGetTabletsByCell(t *testing.T) {
+ const cell = "zone1"
+ const keyspace = "keyspace"
+ const shard = "shard"
+
tests := []struct {
- name string
- tablets int
- opt *topo.GetTabletsByCellOptions
- listError error
+ name string
+ createShardTablets int
+ expectedTablets []*topodatapb.Tablet
+ opt *topo.GetTabletsByCellOptions
+ listError error
+ keyspaceShards []*topo.KeyspaceShard
}{
{
- name: "negative concurrency",
- tablets: 1,
+ name: "negative concurrency",
+ keyspaceShards: []*topo.KeyspaceShard{
+ {Keyspace: keyspace, Shard: shard},
+ },
+ createShardTablets: 1,
+ expectedTablets: []*topodatapb.Tablet{
+ {
+ Alias: &topodatapb.TabletAlias{
+ Cell: cell,
+ Uid: uint32(1),
+ },
+ Hostname: "host1",
+ PortMap: map[string]int32{
+ "vt": int32(1),
+ },
+ Keyspace: keyspace,
+ Shard: shard,
+ },
+ },
// Ensure this doesn't panic.
- opt: &topo.GetTabletsByCellOptions{Concurrency: -1},
},
{
- name: "single",
- tablets: 1,
+ name: "single",
+ keyspaceShards: []*topo.KeyspaceShard{
+ {Keyspace: keyspace, Shard: shard},
+ },
+ createShardTablets: 1,
+ expectedTablets: []*topodatapb.Tablet{
+ {
+ Alias: &topodatapb.TabletAlias{
+ Cell: cell,
+ Uid: uint32(1),
+ },
+ Hostname: "host1",
+ PortMap: map[string]int32{
+ "vt": int32(1),
+ },
+ Keyspace: keyspace,
+ Shard: shard,
+ },
+ },
// Make sure the defaults apply as expected.
opt: nil,
},
{
name: "multiple",
- // should work with more than 1 tablet
- tablets: 32,
- opt: &topo.GetTabletsByCellOptions{Concurrency: 8},
+ keyspaceShards: []*topo.KeyspaceShard{
+ {Keyspace: keyspace, Shard: shard},
+ },
+ // Should work with more than 1 tablet
+ createShardTablets: 4,
+ expectedTablets: []*topodatapb.Tablet{
+ {
+ Alias: &topodatapb.TabletAlias{
+ Cell: cell,
+ Uid: uint32(1),
+ },
+ Hostname: "host1",
+ PortMap: map[string]int32{
+ "vt": int32(1),
+ },
+ Keyspace: keyspace,
+ Shard: shard,
+ },
+ {
+ Alias: &topodatapb.TabletAlias{
+ Cell: cell,
+ Uid: uint32(2),
+ },
+ Hostname: "host1",
+ PortMap: map[string]int32{
+ "vt": int32(2),
+ },
+ Keyspace: keyspace,
+ Shard: shard,
+ },
+ {
+ Alias: &topodatapb.TabletAlias{
+ Cell: cell,
+ Uid: uint32(3),
+ },
+ Hostname: "host1",
+ PortMap: map[string]int32{
+ "vt": int32(3),
+ },
+ Keyspace: keyspace,
+ Shard: shard,
+ },
+ {
+ Alias: &topodatapb.TabletAlias{
+ Cell: cell,
+ Uid: uint32(4),
+ },
+ Hostname: "host1",
+ PortMap: map[string]int32{
+ "vt": int32(4),
+ },
+ Keyspace: keyspace,
+ Shard: shard,
+ },
+ },
},
{
name: "multiple with list error",
- // should work with more than 1 tablet when List returns an error
- tablets: 32,
- opt: &topo.GetTabletsByCellOptions{Concurrency: 8},
+ keyspaceShards: []*topo.KeyspaceShard{
+ {Keyspace: keyspace, Shard: shard},
+ },
+ // Should work with more than 1 tablet when List returns an error
+ createShardTablets: 4,
+ expectedTablets: []*topodatapb.Tablet{
+ {
+ Alias: &topodatapb.TabletAlias{
+ Cell: cell,
+ Uid: uint32(1),
+ },
+ Hostname: "host1",
+ PortMap: map[string]int32{
+ "vt": int32(1),
+ },
+ Keyspace: keyspace,
+ Shard: shard,
+ },
+ {
+ Alias: &topodatapb.TabletAlias{
+ Cell: cell,
+ Uid: uint32(2),
+ },
+ Hostname: "host1",
+ PortMap: map[string]int32{
+ "vt": int32(2),
+ },
+ Keyspace: keyspace,
+ Shard: shard,
+ },
+ {
+ Alias: &topodatapb.TabletAlias{
+ Cell: cell,
+ Uid: uint32(3),
+ },
+ Hostname: "host1",
+ PortMap: map[string]int32{
+ "vt": int32(3),
+ },
+ Keyspace: keyspace,
+ Shard: shard,
+ },
+ {
+ Alias: &topodatapb.TabletAlias{
+ Cell: cell,
+ Uid: uint32(4),
+ },
+ Hostname: "host1",
+ PortMap: map[string]int32{
+ "vt": int32(4),
+ },
+ Keyspace: keyspace,
+ Shard: shard,
+ },
+ },
listError: topo.NewError(topo.ResourceExhausted, ""),
},
+ {
+ name: "filtered by keyspace and shard",
+ keyspaceShards: []*topo.KeyspaceShard{
+ {Keyspace: keyspace, Shard: shard},
+ {Keyspace: "filtered", Shard: "-"},
+ },
+ // Should create 2 tablets in 2 different shards (4 total)
+ // but only a single shard is returned
+ createShardTablets: 2,
+ expectedTablets: []*topodatapb.Tablet{
+ {
+ Alias: &topodatapb.TabletAlias{
+ Cell: cell,
+ Uid: uint32(1),
+ },
+ Hostname: "host1",
+ PortMap: map[string]int32{
+ "vt": int32(1),
+ },
+ Keyspace: keyspace,
+ Shard: shard,
+ },
+ {
+ Alias: &topodatapb.TabletAlias{
+ Cell: cell,
+ Uid: uint32(2),
+ },
+ Hostname: "host1",
+ PortMap: map[string]int32{
+ "vt": int32(2),
+ },
+ Keyspace: keyspace,
+ Shard: shard,
+ },
+ },
+ opt: &topo.GetTabletsByCellOptions{
+ KeyspaceShard: &topo.KeyspaceShard{
+ Keyspace: keyspace,
+ Shard: shard,
+ },
+ },
+ },
+ {
+ name: "filtered by keyspace and no shard",
+ keyspaceShards: []*topo.KeyspaceShard{
+ {Keyspace: keyspace, Shard: shard},
+ {Keyspace: keyspace, Shard: shard + "2"},
+ },
+ // Should create 2 tablets in 2 different shards (4 total)
+ // in the same keyspace and both shards are returned due to
+ // empty shard
+ createShardTablets: 2,
+ expectedTablets: []*topodatapb.Tablet{
+ {
+ Alias: &topodatapb.TabletAlias{
+ Cell: cell,
+ Uid: uint32(1),
+ },
+ Hostname: "host1",
+ PortMap: map[string]int32{
+ "vt": int32(1),
+ },
+ Keyspace: keyspace,
+ Shard: shard,
+ },
+ {
+ Alias: &topodatapb.TabletAlias{
+ Cell: cell,
+ Uid: uint32(2),
+ },
+ Hostname: "host1",
+ PortMap: map[string]int32{
+ "vt": int32(2),
+ },
+ Keyspace: keyspace,
+ Shard: shard,
+ },
+ {
+ Alias: &topodatapb.TabletAlias{
+ Cell: cell,
+ Uid: uint32(3),
+ },
+ Hostname: "host1",
+ PortMap: map[string]int32{
+ "vt": int32(3),
+ },
+ Keyspace: keyspace,
+ Shard: shard + "2",
+ },
+ {
+ Alias: &topodatapb.TabletAlias{
+ Cell: cell,
+ Uid: uint32(4),
+ },
+ Hostname: "host1",
+ PortMap: map[string]int32{
+ "vt": int32(4),
+ },
+ Keyspace: keyspace,
+ Shard: shard + "2",
+ },
+ },
+ opt: &topo.GetTabletsByCellOptions{
+ KeyspaceShard: &topo.KeyspaceShard{
+ Keyspace: keyspace,
+ Shard: "",
+ },
+ },
+ },
}
- const cell = "zone1"
- const keyspace = "keyspace"
- const shard = "shard"
-
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
@@ -84,37 +334,53 @@ func TestServerGetTabletsByCell(t *testing.T) {
// Create an ephemeral keyspace and generate shard records within
// the keyspace to fetch later.
- require.NoError(t, ts.CreateKeyspace(ctx, keyspace, &topodatapb.Keyspace{}))
- require.NoError(t, ts.CreateShard(ctx, keyspace, shard))
-
- tablets := make([]*topo.TabletInfo, tt.tablets)
+ createdKeyspaces := make(map[string]bool, len(tt.keyspaceShards))
+ for _, kss := range tt.keyspaceShards {
+ if !createdKeyspaces[kss.Keyspace] {
+ require.NoError(t, ts.CreateKeyspace(ctx, kss.Keyspace, &topodatapb.Keyspace{}))
+ createdKeyspaces[kss.Keyspace] = true
+ }
+ require.NoError(t, ts.CreateShard(ctx, kss.Keyspace, kss.Shard))
+ }
- for i := 0; i < tt.tablets; i++ {
- tablet := &topodatapb.Tablet{
- Alias: &topodatapb.TabletAlias{
- Cell: cell,
- Uid: uint32(i),
- },
- Hostname: "host1",
- PortMap: map[string]int32{
- "vt": int32(i),
- },
- Keyspace: keyspace,
- Shard: shard,
+ var uid uint32 = 1
+ for _, kss := range tt.keyspaceShards {
+ for i := 0; i < tt.createShardTablets; i++ {
+ tablet := &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: cell,
+ Uid: uid,
+ },
+ Hostname: "host1",
+ PortMap: map[string]int32{
+ "vt": int32(uid),
+ },
+ Keyspace: kss.Keyspace,
+ Shard: kss.Shard,
+ }
+ require.NoError(t, ts.CreateTablet(ctx, tablet))
+ uid++
}
- tInfo := &topo.TabletInfo{Tablet: tablet}
- tablets[i] = tInfo
- require.NoError(t, ts.CreateTablet(ctx, tablet))
}
// Verify that we return a complete list of tablets and that each
// tablet matches what we expect.
out, err := ts.GetTabletsByCell(ctx, cell, tt.opt)
require.NoError(t, err)
- require.Len(t, out, tt.tablets)
+ require.Len(t, out, len(tt.expectedTablets))
+
+ slices.SortFunc(out, func(i, j *topo.TabletInfo) int {
+ return cmp.Compare(i.Alias.Uid, j.Alias.Uid)
+ })
+ slices.SortFunc(tt.expectedTablets, func(i, j *topodatapb.Tablet) int {
+ return cmp.Compare(i.Alias.Uid, j.Alias.Uid)
+ })
- for i, tab := range tablets {
- require.Equal(t, tab.Tablet, tablets[i].Tablet)
+ for i, tablet := range out {
+ expected := tt.expectedTablets[i]
+ require.Equal(t, expected.Alias.String(), tablet.Alias.String())
+ require.Equal(t, expected.Keyspace, tablet.Keyspace)
+ require.Equal(t, expected.Shard, tablet.Shard)
}
})
}
diff --git a/go/vt/topo/vschema.go b/go/vt/topo/vschema.go
index d9802da2c35..21192e1aacb 100644
--- a/go/vt/topo/vschema.go
+++ b/go/vt/topo/vschema.go
@@ -31,6 +31,10 @@ import (
// SaveVSchema saves a Vschema. A valid Vschema should be passed in. It does not verify its correctness.
// If the VSchema is empty, just remove it.
func (ts *Server) SaveVSchema(ctx context.Context, keyspace string, vschema *vschemapb.Keyspace) error {
+ if err := ctx.Err(); err != nil {
+ return err
+ }
+
nodePath := path.Join(KeyspacesPath, keyspace, VSchemaFile)
data, err := vschema.MarshalVT()
if err != nil {
@@ -49,12 +53,19 @@ func (ts *Server) SaveVSchema(ctx context.Context, keyspace string, vschema *vsc
// DeleteVSchema delete the keyspace if it exists
func (ts *Server) DeleteVSchema(ctx context.Context, keyspace string) error {
log.Infof("deleting vschema for keyspace %s", keyspace)
+ if err := ctx.Err(); err != nil {
+ return err
+ }
nodePath := path.Join(KeyspacesPath, keyspace, VSchemaFile)
return ts.globalCell.Delete(ctx, nodePath, nil)
}
// GetVSchema fetches the vschema from the topo.
func (ts *Server) GetVSchema(ctx context.Context, keyspace string) (*vschemapb.Keyspace, error) {
+ if err := ctx.Err(); err != nil {
+ return nil, err
+ }
+
nodePath := path.Join(KeyspacesPath, keyspace, VSchemaFile)
data, _, err := ts.globalCell.Get(ctx, nodePath)
if err != nil {
@@ -90,6 +101,10 @@ func (ts *Server) EnsureVSchema(ctx context.Context, keyspace string) error {
// SaveRoutingRules saves the routing rules into the topo.
func (ts *Server) SaveRoutingRules(ctx context.Context, routingRules *vschemapb.RoutingRules) error {
+ if err := ctx.Err(); err != nil {
+ return err
+ }
+
data, err := routingRules.MarshalVT()
if err != nil {
return err
@@ -109,6 +124,10 @@ func (ts *Server) SaveRoutingRules(ctx context.Context, routingRules *vschemapb.
// GetRoutingRules fetches the routing rules from the topo.
func (ts *Server) GetRoutingRules(ctx context.Context) (*vschemapb.RoutingRules, error) {
+ if err := ctx.Err(); err != nil {
+ return nil, err
+ }
+
rr := &vschemapb.RoutingRules{}
data, _, err := ts.globalCell.Get(ctx, RoutingRulesFile)
if err != nil {
@@ -126,6 +145,10 @@ func (ts *Server) GetRoutingRules(ctx context.Context) (*vschemapb.RoutingRules,
// SaveShardRoutingRules saves the shard routing rules into the topo.
func (ts *Server) SaveShardRoutingRules(ctx context.Context, shardRoutingRules *vschemapb.ShardRoutingRules) error {
+ if err := ctx.Err(); err != nil {
+ return err
+ }
+
data, err := shardRoutingRules.MarshalVT()
if err != nil {
return err
@@ -144,6 +167,10 @@ func (ts *Server) SaveShardRoutingRules(ctx context.Context, shardRoutingRules *
// GetShardRoutingRules fetches the shard routing rules from the topo.
func (ts *Server) GetShardRoutingRules(ctx context.Context) (*vschemapb.ShardRoutingRules, error) {
+ if err := ctx.Err(); err != nil {
+ return nil, err
+ }
+
srr := &vschemapb.ShardRoutingRules{}
data, _, err := ts.globalCell.Get(ctx, ShardRoutingRulesFile)
if err != nil {
@@ -161,6 +188,10 @@ func (ts *Server) GetShardRoutingRules(ctx context.Context) (*vschemapb.ShardRou
// CreateKeyspaceRoutingRules wraps the underlying Conn.Create.
func (ts *Server) CreateKeyspaceRoutingRules(ctx context.Context, value *vschemapb.KeyspaceRoutingRules) error {
+ if err := ctx.Err(); err != nil {
+ return err
+ }
+
data, err := value.MarshalVT()
if err != nil {
return err
@@ -189,6 +220,10 @@ func (ts *Server) CreateKeyspaceRoutingRules(ctx context.Context, value *vschema
// we may come up with a better model and apply it to the keyspace routing rules
// as well.
func (ts *Server) SaveKeyspaceRoutingRules(ctx context.Context, rules *vschemapb.KeyspaceRoutingRules) error {
+ if err := ctx.Err(); err != nil {
+ return err
+ }
+
data, err := rules.MarshalVT()
if err != nil {
return err
@@ -198,6 +233,10 @@ func (ts *Server) SaveKeyspaceRoutingRules(ctx context.Context, rules *vschemapb
}
func (ts *Server) GetKeyspaceRoutingRules(ctx context.Context) (*vschemapb.KeyspaceRoutingRules, error) {
+ if err := ctx.Err(); err != nil {
+ return nil, err
+ }
+
rules := &vschemapb.KeyspaceRoutingRules{}
data, _, err := ts.globalCell.Get(ctx, ts.GetKeyspaceRoutingRulesPath())
if err != nil {
@@ -215,6 +254,10 @@ func (ts *Server) GetKeyspaceRoutingRules(ctx context.Context) (*vschemapb.Keysp
// GetMirrorRules fetches the mirror rules from the topo.
func (ts *Server) GetMirrorRules(ctx context.Context) (*vschemapb.MirrorRules, error) {
+ if err := ctx.Err(); err != nil {
+ return nil, err
+ }
+
rr := &vschemapb.MirrorRules{}
data, _, err := ts.globalCell.Get(ctx, MirrorRulesFile)
if err != nil {
@@ -232,6 +275,10 @@ func (ts *Server) GetMirrorRules(ctx context.Context) (*vschemapb.MirrorRules, e
// SaveMirrorRules saves the mirror rules into the topo.
func (ts *Server) SaveMirrorRules(ctx context.Context, mirrorRules *vschemapb.MirrorRules) error {
+ if err := ctx.Err(); err != nil {
+ return err
+ }
+
data, err := mirrorRules.MarshalVT()
if err != nil {
return err
diff --git a/go/vt/topo/zk2topo/zk_conn.go b/go/vt/topo/zk2topo/zk_conn.go
index 22bd2046b60..aa7ac13d281 100644
--- a/go/vt/topo/zk2topo/zk_conn.go
+++ b/go/vt/topo/zk2topo/zk_conn.go
@@ -272,6 +272,8 @@ func (c *ZkConn) withRetry(ctx context.Context, action func(conn *zk.Conn) error
c.conn = nil
}
c.mu.Unlock()
+ log.Infof("zk conn: got ErrConnectionClosed for addr %v: closing", c.addr)
+ conn.Close()
}
return
}
@@ -322,13 +324,9 @@ func (c *ZkConn) maybeAddAuth(ctx context.Context) {
// clears out the connection record.
func (c *ZkConn) handleSessionEvents(conn *zk.Conn, session <-chan zk.Event) {
for event := range session {
- closeRequired := false
switch event.State {
- case zk.StateExpired, zk.StateConnecting:
- closeRequired = true
- fallthrough
- case zk.StateDisconnected:
+ case zk.StateDisconnected, zk.StateExpired, zk.StateConnecting:
c.mu.Lock()
if c.conn == conn {
// The ZkConn still references this
@@ -336,9 +334,7 @@ func (c *ZkConn) handleSessionEvents(conn *zk.Conn, session <-chan zk.Event) {
c.conn = nil
}
c.mu.Unlock()
- if closeRequired {
- conn.Close()
- }
+ conn.Close()
log.Infof("zk conn: session for addr %v ended: %v", c.addr, event)
return
}
diff --git a/go/vt/topo/zk2topo/zk_conn_test.go b/go/vt/topo/zk2topo/zk_conn_test.go
new file mode 100644
index 00000000000..e79987b562f
--- /dev/null
+++ b/go/vt/topo/zk2topo/zk_conn_test.go
@@ -0,0 +1,62 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package zk2topo
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "github.com/z-division/go-zookeeper/zk"
+
+ "vitess.io/vitess/go/testfiles"
+ "vitess.io/vitess/go/vt/zkctl"
+)
+
+func TestZkConnClosedOnDisconnect(t *testing.T) {
+ zkd, serverAddr := zkctl.StartLocalZk(testfiles.GoVtTopoZk2topoZkID, testfiles.GoVtTopoZk2topoPort)
+ defer zkd.Teardown()
+
+ conn := Connect(serverAddr)
+ defer conn.Close()
+
+ _, _, err := conn.Get(context.Background(), "/")
+ require.NoError(t, err, "Get() failed")
+
+ require.True(t, conn.conn.State().IsConnected(), "Connection not connected")
+
+ oldConn := conn.conn
+
+ // force a disconnect
+ err = zkd.Shutdown()
+ require.NoError(t, err)
+ err = zkd.Start()
+ require.NoError(t, err)
+
+ // do another get to trigger a new connection
+ require.Eventually(t, func() bool {
+ _, _, err = conn.Get(context.Background(), "/")
+ return err == nil
+ }, 10*time.Second, 100*time.Millisecond)
+
+ // Check that old connection is closed
+ _, _, err = oldConn.Get("/")
+ require.ErrorContains(t, err, "zookeeper is closing")
+
+ require.Equal(t, zk.StateDisconnected, oldConn.State(), "Connection is not in disconnected state")
+}
diff --git a/go/vt/topotools/tablet.go b/go/vt/topotools/tablet.go
index 397af9ddf7c..9fae44ac5e1 100644
--- a/go/vt/topotools/tablet.go
+++ b/go/vt/topotools/tablet.go
@@ -36,6 +36,7 @@ import (
"context"
"errors"
"fmt"
+ "maps"
"google.golang.org/protobuf/proto"
@@ -59,6 +60,47 @@ func ConfigureTabletHook(hk *hook.Hook, tabletAlias *topodatapb.TabletAlias) {
hk.ExtraEnv["TABLET_ALIAS"] = topoproto.TabletAliasString(tabletAlias)
}
+// ChangeTags changes the tags of the tablet. Make this external, since these
+// transitions need to be forced from time to time.
+//
+// If successful, the updated tablet record is returned.
+func ChangeTags(ctx context.Context, ts *topo.Server, tabletAlias *topodatapb.TabletAlias, tabletTags map[string]string, replace bool) (*topodatapb.Tablet, error) {
+ var result *topodatapb.Tablet
+ _, err := ts.UpdateTabletFields(ctx, tabletAlias, func(tablet *topodatapb.Tablet) error {
+ if replace && maps.Equal(tablet.Tags, tabletTags) {
+ result = tablet
+ return topo.NewError(topo.NoUpdateNeeded, topoproto.TabletAliasString(tabletAlias))
+ }
+ if replace || tablet.Tags == nil {
+ tablet.Tags = tabletTags
+ } else {
+ var doUpdate bool
+ for key, val := range tabletTags {
+ if val == "" {
+ if _, found := tablet.Tags[key]; found {
+ delete(tablet.Tags, key)
+ doUpdate = true
+ }
+ continue
+ }
+ if tablet.Tags[key] != val {
+ tablet.Tags[key] = val
+ doUpdate = true
+ }
+ }
+ if !doUpdate {
+ return topo.NewError(topo.NoUpdateNeeded, topoproto.TabletAliasString(tabletAlias))
+ }
+ }
+ result = tablet
+ return nil
+ })
+ if err != nil {
+ return nil, err
+ }
+ return result, nil
+}
+
// ChangeType changes the type of the tablet. Make this external, since these
// transitions need to be forced from time to time.
//
diff --git a/go/vt/vitessdriver/convert.go b/go/vt/vitessdriver/convert.go
index 7ba95db4147..aa8bcedc7ee 100644
--- a/go/vt/vitessdriver/convert.go
+++ b/go/vt/vitessdriver/convert.go
@@ -43,10 +43,8 @@ func (cv *converter) ToNative(v sqltypes.Value) (any, error) {
return v.ToUint64()
case v.IsFloat():
return v.ToFloat64()
- case v.Type() == sqltypes.Datetime, v.Type() == sqltypes.Timestamp:
- return datetimeToNative(v, cv.location)
- case v.Type() == sqltypes.Date:
- return dateToNative(v, cv.location)
+ case v.Type() == sqltypes.Datetime, v.Type() == sqltypes.Timestamp, v.Type() == sqltypes.Date:
+ return v.ToTimeInLocation(cv.location)
case v.IsQuoted() || v.Type() == sqltypes.Bit || v.Type() == sqltypes.Decimal:
out, err = v.ToBytes()
case v.Type() == sqltypes.Expression:
diff --git a/go/vt/vitessdriver/time.go b/go/vt/vitessdriver/time.go
index 70ec2d679ae..c6526197d9d 100644
--- a/go/vt/vitessdriver/time.go
+++ b/go/vt/vitessdriver/time.go
@@ -17,83 +17,12 @@ limitations under the License.
package vitessdriver
import (
- "errors"
"time"
"vitess.io/vitess/go/sqltypes"
)
-// ErrInvalidTime is returned when we fail to parse a datetime
-// string from MySQL. This should never happen unless things are
-// seriously messed up.
-var ErrInvalidTime = errors.New("invalid MySQL time string")
-
var isoTimeFormat = "2006-01-02 15:04:05.999999"
-var isoNullTime = "0000-00-00 00:00:00.000000"
-var isoTimeLength = len(isoTimeFormat)
-
-// parseISOTime pases a time string in MySQL's textual datetime format.
-// This is very similar to ISO8601, with some differences:
-//
-// - There is no T separator between the date and time sections;
-// a space is used instead.
-// - There is never a timezone section in the string, as these datetimes
-// are not timezone-aware. There isn't a Z value for UTC times for
-// the same reason.
-//
-// Note that this function can handle both DATE (which should _always_ have
-// a length of 10) and DATETIME strings (which have a variable length, 18+
-// depending on the number of decimal sub-second places).
-//
-// Also note that this function handles the case where MySQL returns a NULL
-// time (with a string where all sections are zeroes) by returning a zeroed
-// out time.Time object. NULL time strings are not considered a parsing error.
-//
-// See: isoTimeFormat
-func parseISOTime(tstr string, loc *time.Location, minLen, maxLen int) (t time.Time, err error) {
- tlen := len(tstr)
- if tlen < minLen || tlen > maxLen {
- err = ErrInvalidTime
- return
- }
-
- if tstr == isoNullTime[:tlen] {
- // This is what MySQL would send when the date is NULL,
- // so return an empty time.Time instead.
- // This is not a parsing error
- return
- }
-
- if loc == nil {
- loc = time.UTC
- }
-
- // Since the time format returned from MySQL never has a Timezone
- // section, ParseInLocation will initialize the time.Time struct
- // with the default `loc` we're passing here.
- return time.ParseInLocation(isoTimeFormat[:tlen], tstr, loc)
-}
-
-// datetimeToNative converts a Datetime Value into a time.Time
-func datetimeToNative(v sqltypes.Value, loc *time.Location) (time.Time, error) {
- // Valid format string offsets for a DATETIME
- // |DATETIME |19+
- // |------------------|------|
- // "2006-01-02 15:04:05.999999"
- return parseISOTime(v.ToString(), loc, 19, isoTimeLength)
-}
-
-// dateToNative converts a Date Value into a time.Time.
-// Note that there's no specific type in the Go stdlib to represent
-// dates without time components, so the returned Time will have
-// their hours/mins/seconds zeroed out.
-func dateToNative(v sqltypes.Value, loc *time.Location) (time.Time, error) {
- // Valid format string offsets for a DATE
- // |DATE |10
- // |---------|
- // "2006-01-02 00:00:00.000000"
- return parseISOTime(v.ToString(), loc, 10, 10)
-}
// NewDatetime builds a Datetime Value
func NewDatetime(t time.Time, defaultLoc *time.Location) sqltypes.Value {
diff --git a/go/vt/vitessdriver/time_test.go b/go/vt/vitessdriver/time_test.go
deleted file mode 100644
index 949d8f43354..00000000000
--- a/go/vt/vitessdriver/time_test.go
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
-Copyright 2019 The Vitess Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package vitessdriver
-
-import (
- "reflect"
- "testing"
- "time"
-
- "vitess.io/vitess/go/sqltypes"
-)
-
-var randomLocation = time.FixedZone("Nowhere", 3*60*60)
-
-func DatetimeValue(str string) sqltypes.Value {
- return sqltypes.TestValue(sqltypes.Datetime, str)
-}
-
-func DateValue(str string) sqltypes.Value {
- return sqltypes.TestValue(sqltypes.Date, str)
-}
-
-func TestDatetimeToNative(t *testing.T) {
-
- tcases := []struct {
- val sqltypes.Value
- loc *time.Location
- out time.Time
- err bool
- }{{
- val: DatetimeValue("1899-08-24 17:20:00"),
- out: time.Date(1899, 8, 24, 17, 20, 0, 0, time.UTC),
- }, {
- val: DatetimeValue("1952-03-11 01:02:03"),
- loc: time.Local,
- out: time.Date(1952, 3, 11, 1, 2, 3, 0, time.Local),
- }, {
- val: DatetimeValue("1952-03-11 01:02:03"),
- loc: randomLocation,
- out: time.Date(1952, 3, 11, 1, 2, 3, 0, randomLocation),
- }, {
- val: DatetimeValue("1952-03-11 01:02:03"),
- loc: time.UTC,
- out: time.Date(1952, 3, 11, 1, 2, 3, 0, time.UTC),
- }, {
- val: DatetimeValue("1899-08-24 17:20:00.000000"),
- out: time.Date(1899, 8, 24, 17, 20, 0, 0, time.UTC),
- }, {
- val: DatetimeValue("1899-08-24 17:20:00.000001"),
- out: time.Date(1899, 8, 24, 17, 20, 0, int(1*time.Microsecond), time.UTC),
- }, {
- val: DatetimeValue("1899-08-24 17:20:00.123456"),
- out: time.Date(1899, 8, 24, 17, 20, 0, int(123456*time.Microsecond), time.UTC),
- }, {
- val: DatetimeValue("1899-08-24 17:20:00.222"),
- out: time.Date(1899, 8, 24, 17, 20, 0, int(222*time.Millisecond), time.UTC),
- }, {
- val: DatetimeValue("1899-08-24 17:20:00.1234567"),
- err: true,
- }, {
- val: DatetimeValue("1899-08-24 17:20:00.1"),
- out: time.Date(1899, 8, 24, 17, 20, 0, int(100*time.Millisecond), time.UTC),
- }, {
- val: DatetimeValue("0000-00-00 00:00:00"),
- out: time.Time{},
- }, {
- val: DatetimeValue("0000-00-00 00:00:00.0"),
- out: time.Time{},
- }, {
- val: DatetimeValue("0000-00-00 00:00:00.000"),
- out: time.Time{},
- }, {
- val: DatetimeValue("0000-00-00 00:00:00.000000"),
- out: time.Time{},
- }, {
- val: DatetimeValue("0000-00-00 00:00:00.0000000"),
- err: true,
- }, {
- val: DatetimeValue("1899-08-24T17:20:00.000000"),
- err: true,
- }, {
- val: DatetimeValue("1899-02-31 17:20:00.000000"),
- err: true,
- }, {
- val: DatetimeValue("1899-08-24 17:20:00."),
- out: time.Date(1899, 8, 24, 17, 20, 0, 0, time.UTC),
- }, {
- val: DatetimeValue("0000-00-00 00:00:00.000001"),
- err: true,
- }, {
- val: DatetimeValue("1899-08-24 17:20:00 +02:00"),
- err: true,
- }, {
- val: DatetimeValue("1899-08-24"),
- err: true,
- }, {
- val: DatetimeValue("This is not a valid timestamp"),
- err: true,
- }}
-
- for _, tcase := range tcases {
- got, err := datetimeToNative(tcase.val, tcase.loc)
- if tcase.err && err == nil {
- t.Errorf("datetimeToNative(%v, %#v) succeeded; expected error", tcase.val, tcase.loc)
- }
- if !tcase.err && err != nil {
- t.Errorf("datetimeToNative(%v, %#v) failed: %v", tcase.val, tcase.loc, err)
- }
- if !reflect.DeepEqual(got, tcase.out) {
- t.Errorf("datetimeToNative(%v, %#v): %v, want %v", tcase.val, tcase.loc, got, tcase.out)
- }
- }
-}
-
-func TestDateToNative(t *testing.T) {
- tcases := []struct {
- val sqltypes.Value
- loc *time.Location
- out time.Time
- err bool
- }{{
- val: DateValue("1899-08-24"),
- out: time.Date(1899, 8, 24, 0, 0, 0, 0, time.UTC),
- }, {
- val: DateValue("1952-03-11"),
- loc: time.Local,
- out: time.Date(1952, 3, 11, 0, 0, 0, 0, time.Local),
- }, {
- val: DateValue("1952-03-11"),
- loc: randomLocation,
- out: time.Date(1952, 3, 11, 0, 0, 0, 0, randomLocation),
- }, {
- val: DateValue("0000-00-00"),
- out: time.Time{},
- }, {
- val: DateValue("1899-02-31"),
- err: true,
- }, {
- val: DateValue("1899-08-24 17:20:00"),
- err: true,
- }, {
- val: DateValue("0000-00-00 00:00:00"),
- err: true,
- }, {
- val: DateValue("This is not a valid timestamp"),
- err: true,
- }}
-
- for _, tcase := range tcases {
- got, err := dateToNative(tcase.val, tcase.loc)
- if tcase.err && err == nil {
- t.Errorf("dateToNative(%v, %#v) succeeded; expected error", tcase.val, tcase.loc)
- }
- if !tcase.err && err != nil {
- t.Errorf("dateToNative(%v, %#v) failed: %v", tcase.val, tcase.loc, err)
- }
- if !reflect.DeepEqual(got, tcase.out) {
- t.Errorf("dateToNative(%v, %#v): %v, want %v", tcase.val, tcase.loc, got, tcase.out)
- }
- }
-}
diff --git a/go/vt/vtadmin/api.go b/go/vt/vtadmin/api.go
index 2dc83b6e233..4f91459d9ed 100644
--- a/go/vt/vtadmin/api.go
+++ b/go/vt/vtadmin/api.go
@@ -20,6 +20,7 @@ import (
"context"
"encoding/json"
"fmt"
+ "math"
"net/http"
"net/http/pprof"
"net/url"
@@ -28,17 +29,22 @@ import (
"sync"
"time"
+ "github.com/google/uuid"
"github.com/gorilla/handlers"
"github.com/gorilla/mux"
"github.com/patrickmn/go-cache"
vreplcommon "vitess.io/vitess/go/cmd/vtctldclient/command/vreplication/common"
+ vdiffcmd "vitess.io/vitess/go/cmd/vtctldclient/command/vreplication/vdiff"
+ "vitess.io/vitess/go/protoutil"
"vitess.io/vitess/go/ptr"
"vitess.io/vitess/go/sets"
+ "vitess.io/vitess/go/sqltypes"
"vitess.io/vitess/go/stats"
"vitess.io/vitess/go/trace"
"vitess.io/vitess/go/vt/concurrency"
"vitess.io/vitess/go/vt/log"
+ "vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/topo"
"vitess.io/vitess/go/vt/topo/memorytopo"
"vitess.io/vitess/go/vt/topo/topoproto"
@@ -53,9 +59,12 @@ import (
"vitess.io/vitess/go/vt/vtadmin/rbac"
"vitess.io/vitess/go/vt/vtadmin/sort"
"vitess.io/vitess/go/vt/vtadmin/vtadminproto"
+ "vitess.io/vitess/go/vt/vtctl/grpcvtctldserver"
+ "vitess.io/vitess/go/vt/vtctl/workflow"
"vitess.io/vitess/go/vt/vtenv"
"vitess.io/vitess/go/vt/vterrors"
"vitess.io/vitess/go/vt/vtexplain"
+ "vitess.io/vitess/go/vt/vttablet/tabletmanager/vdiff"
binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata"
tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata"
@@ -384,6 +393,7 @@ func (api *API) Handler() http.Handler {
router.HandleFunc("/migration/{cluster_id}/{keyspace}/launch", httpAPI.Adapt(vtadminhttp.LaunchSchemaMigration)).Name("API.LaunchSchemaMigration").Methods("PUT", "OPTIONS")
router.HandleFunc("/migration/{cluster_id}/{keyspace}/retry", httpAPI.Adapt(vtadminhttp.RetrySchemaMigration)).Name("API.RetrySchemaMigration").Methods("PUT", "OPTIONS")
router.HandleFunc("/migrations/", httpAPI.Adapt(vtadminhttp.GetSchemaMigrations)).Name("API.GetSchemaMigrations")
+ router.HandleFunc("/movetables/{cluster_id}/complete", httpAPI.Adapt(vtadminhttp.MoveTablesComplete)).Name("API.MoveTablesComplete")
router.HandleFunc("/schema/{table}", httpAPI.Adapt(vtadminhttp.FindSchema)).Name("API.FindSchema")
router.HandleFunc("/schema/{cluster_id}/{keyspace}/{table}", httpAPI.Adapt(vtadminhttp.GetSchema)).Name("API.GetSchema")
router.HandleFunc("/schemas", httpAPI.Adapt(vtadminhttp.GetSchemas)).Name("API.GetSchemas")
@@ -415,8 +425,12 @@ func (api *API) Handler() http.Handler {
router.HandleFunc("/tablet/{tablet}/stop_replication", httpAPI.Adapt(vtadminhttp.StopReplication)).Name("API.StopReplication").Methods("PUT", "OPTIONS")
router.HandleFunc("/tablet/{tablet}/externally_promoted", httpAPI.Adapt(vtadminhttp.TabletExternallyPromoted)).Name("API.TabletExternallyPromoted").Methods("POST")
router.HandleFunc("/transactions/{cluster_id}/{keyspace}", httpAPI.Adapt(vtadminhttp.GetUnresolvedTransactions)).Name("API.GetUnresolvedTransactions").Methods("GET")
+ router.HandleFunc("/transaction/{cluster_id}/{dtid}/conclude", httpAPI.Adapt(vtadminhttp.ConcludeTransaction)).Name("API.ConcludeTransaction")
+ router.HandleFunc("/transaction/{cluster_id}/{dtid}/info", httpAPI.Adapt(vtadminhttp.GetTransactionInfo)).Name("API.GetTransactionInfo")
router.HandleFunc("/vschema/{cluster_id}/{keyspace}", httpAPI.Adapt(vtadminhttp.GetVSchema)).Name("API.GetVSchema")
router.HandleFunc("/vschemas", httpAPI.Adapt(vtadminhttp.GetVSchemas)).Name("API.GetVSchemas")
+ router.HandleFunc("/vdiff/{cluster_id}/", httpAPI.Adapt(vtadminhttp.VDiffCreate)).Name("API.VDiffCreate").Methods("POST")
+ router.HandleFunc("/vdiff/{cluster_id}/show", httpAPI.Adapt(vtadminhttp.VDiffShow)).Name("API.VDiffShow")
router.HandleFunc("/vtctlds", httpAPI.Adapt(vtadminhttp.GetVtctlds)).Name("API.GetVtctlds")
router.HandleFunc("/vtexplain", httpAPI.Adapt(vtadminhttp.VTExplain)).Name("API.VTExplain")
router.HandleFunc("/workflow/{cluster_id}/{keyspace}/{name}", httpAPI.Adapt(vtadminhttp.GetWorkflow)).Name("API.GetWorkflow")
@@ -424,7 +438,11 @@ func (api *API) Handler() http.Handler {
router.HandleFunc("/workflow/{cluster_id}/{keyspace}/{name}/status", httpAPI.Adapt(vtadminhttp.GetWorkflowStatus)).Name("API.GetWorkflowStatus")
router.HandleFunc("/workflow/{cluster_id}/{keyspace}/{name}/start", httpAPI.Adapt(vtadminhttp.StartWorkflow)).Name("API.StartWorkflow")
router.HandleFunc("/workflow/{cluster_id}/{keyspace}/{name}/stop", httpAPI.Adapt(vtadminhttp.StopWorkflow)).Name("API.StopWorkflow")
+ router.HandleFunc("/workflow/{cluster_id}/switchtraffic", httpAPI.Adapt(vtadminhttp.WorkflowSwitchTraffic)).Name("API.WorkflowSwitchTraffic")
+ router.HandleFunc("/workflow/{cluster_id}/delete", httpAPI.Adapt(vtadminhttp.WorkflowDelete)).Name("API.WorkflowDelete")
+ router.HandleFunc("/workflow/{cluster_id}/materialize", httpAPI.Adapt(vtadminhttp.MaterializeCreate)).Name("API.MaterializeCreate").Methods("POST")
router.HandleFunc("/workflow/{cluster_id}/movetables", httpAPI.Adapt(vtadminhttp.MoveTablesCreate)).Name("API.MoveTablesCreate").Methods("POST")
+ router.HandleFunc("/workflow/{cluster_id}/reshard", httpAPI.Adapt(vtadminhttp.ReshardCreate)).Name("API.ReshardCreate").Methods("POST")
experimentalRouter := router.PathPrefix("/experimental").Subrouter()
experimentalRouter.HandleFunc("/tablet/{tablet}/debug/vars", httpAPI.Adapt(experimental.TabletDebugVarsPassthrough)).Name("API.TabletDebugVarsPassthrough")
@@ -471,6 +489,31 @@ func (api *API) ApplySchema(ctx context.Context, req *vtadminpb.ApplySchemaReque
return nil, err
}
+ // Parser with default options. New() itself initializes with default MySQL version.
+ parser, err := sqlparser.New(sqlparser.Options{
+ TruncateUILen: 512,
+ TruncateErrLen: 0,
+ })
+ if err != nil {
+ return nil, err
+ }
+
+ // Split the sql statement received from request.
+ sqlParts, err := parser.SplitStatementToPieces(req.Sql)
+ if err != nil {
+ return nil, err
+ }
+
+ req.Request.Sql = sqlParts
+
+ // Set the callerID if not empty.
+ if req.CallerId != "" {
+ req.Request.CallerId = &vtrpcpb.CallerID{Principal: req.CallerId}
+ }
+
+ // Set the default wait replicas timeout.
+ req.Request.WaitReplicasTimeout = protoutil.DurationToProto(grpcvtctldserver.DefaultWaitReplicasTimeout)
+
return c.ApplySchema(ctx, req.Request)
}
@@ -531,6 +574,27 @@ func (api *API) CompleteSchemaMigration(ctx context.Context, req *vtadminpb.Comp
return c.CompleteSchemaMigration(ctx, req.Request)
}
+// ConcludeTransaction is part of the vtadminpb.VTAdminServer interface.
+func (api *API) ConcludeTransaction(ctx context.Context, req *vtadminpb.ConcludeTransactionRequest) (*vtctldatapb.ConcludeTransactionResponse, error) {
+ span, ctx := trace.NewSpan(ctx, "API.ConcludeTransaction")
+ defer span.Finish()
+
+ if !api.authz.IsAuthorized(ctx, req.ClusterId, rbac.ClusterResource, rbac.GetAction) {
+ return nil, nil
+ }
+
+ c, err := api.getClusterForRequest(req.ClusterId)
+ if err != nil {
+ return nil, err
+ }
+
+ cluster.AnnotateSpan(c, span)
+
+ return c.Vtctld.ConcludeTransaction(ctx, &vtctldatapb.ConcludeTransactionRequest{
+ Dtid: req.Dtid,
+ })
+}
+
// CreateKeyspace is part of the vtadminpb.VTAdminServer interface.
func (api *API) CreateKeyspace(ctx context.Context, req *vtadminpb.CreateKeyspaceRequest) (*vtadminpb.CreateKeyspaceResponse, error) {
span, ctx := trace.NewSpan(ctx, "API.CreateKeyspace")
@@ -1484,6 +1548,25 @@ func (api *API) GetTopologyPath(ctx context.Context, req *vtadminpb.GetTopologyP
return c.Vtctld.GetTopologyPath(ctx, &vtctldatapb.GetTopologyPathRequest{Path: req.Path})
}
+// GetTransactionInfo is part of the vtadminpb.VTAdminServer interface.
+func (api *API) GetTransactionInfo(ctx context.Context, req *vtadminpb.GetTransactionInfoRequest) (*vtctldatapb.GetTransactionInfoResponse, error) {
+ span, ctx := trace.NewSpan(ctx, "API.GetTransactionInfo")
+ defer span.Finish()
+
+ c, err := api.getClusterForRequest(req.ClusterId)
+ if err != nil {
+ return nil, err
+ }
+
+ cluster.AnnotateSpan(c, span)
+
+ if !api.authz.IsAuthorized(ctx, c.ID, rbac.ClusterResource, rbac.GetAction) {
+ return nil, nil
+ }
+
+ return c.Vtctld.GetTransactionInfo(ctx, req.Request)
+}
+
// GetUnresolvedTransactions is part of the vtadminpb.VTAdminServer interface.
func (api *API) GetUnresolvedTransactions(ctx context.Context, req *vtadminpb.GetUnresolvedTransactionsRequest) (*vtctldatapb.GetUnresolvedTransactionsResponse, error) {
span, ctx := trace.NewSpan(ctx, "API.GetUnresolvedTransactions")
@@ -1501,7 +1584,8 @@ func (api *API) GetUnresolvedTransactions(ctx context.Context, req *vtadminpb.Ge
}
return c.Vtctld.GetUnresolvedTransactions(ctx, &vtctldatapb.GetUnresolvedTransactionsRequest{
- Keyspace: req.Keyspace,
+ Keyspace: req.Keyspace,
+ AbandonAge: req.AbandonAge,
})
}
@@ -1621,6 +1705,100 @@ func (api *API) GetVSchemas(ctx context.Context, req *vtadminpb.GetVSchemasReque
}, nil
}
+// VDiffCreate is part of the vtadminpb.VTAdminServer interface.
+func (api *API) VDiffCreate(ctx context.Context, req *vtadminpb.VDiffCreateRequest) (*vtctldatapb.VDiffCreateResponse, error) {
+ span, ctx := trace.NewSpan(ctx, "API.VDiffCreate")
+ defer span.Finish()
+
+ if !api.authz.IsAuthorized(ctx, req.ClusterId, rbac.ClusterResource, rbac.GetAction) {
+ return nil, nil
+ }
+
+ c, err := api.getClusterForRequest(req.ClusterId)
+ if err != nil {
+ return nil, err
+ }
+
+ cluster.AnnotateSpan(c, span)
+
+ // Set the default options
+ req.Request.Uuid = uuid.New().String()
+ req.Request.TabletTypes = vdiffcmd.TabletTypesDefault
+ req.Request.TabletSelectionPreference = tabletmanagerdatapb.TabletSelectionPreference_INORDER
+ req.Request.FilteredReplicationWaitTime = protoutil.DurationToProto(workflow.DefaultTimeout)
+ req.Request.Limit = math.MaxInt64
+ req.Request.MaxReportSampleRows = 10
+ req.Request.MaxExtraRowsToCompare = 1000
+ req.Request.WaitUpdateInterval = protoutil.DurationToProto(time.Duration(1 * time.Minute))
+ req.Request.AutoRetry = true
+ req.Request.RowDiffColumnTruncateAt = 128
+
+ defaultAutoStart := true
+ req.Request.AutoStart = &defaultAutoStart
+
+ return c.Vtctld.VDiffCreate(ctx, req.Request)
+}
+
+// VDiffShow is part of the vtadminpb.VTAdminServer interface.
+func (api *API) VDiffShow(ctx context.Context, req *vtadminpb.VDiffShowRequest) (*vtadminpb.VDiffShowResponse, error) {
+ span, ctx := trace.NewSpan(ctx, "API.VDiffShow")
+ defer span.Finish()
+
+ if !api.authz.IsAuthorized(ctx, req.ClusterId, rbac.ClusterResource, rbac.GetAction) {
+ return nil, nil
+ }
+
+ c, err := api.getClusterForRequest(req.ClusterId)
+ if err != nil {
+ return nil, err
+ }
+
+ cluster.AnnotateSpan(c, span)
+
+ res, err := c.Vtctld.VDiffShow(ctx, req.Request)
+ if err != nil {
+ return nil, err
+ }
+
+ shardReports := map[string]*vtadminpb.VDiffShardReport{}
+ for shard, resp := range res.TabletResponses {
+ report := &vtadminpb.VDiffShardReport{}
+ totalRowsToCompare := int64(0)
+ first := true
+ if resp != nil && resp.Output != nil {
+ qr := sqltypes.Proto3ToResult(resp.Output)
+ for _, row := range qr.Named().Rows {
+ // Since these values will be the same for all subsequent rows we only use
+ // the first row.
+ if first {
+ first = false
+ report.StartedAt = row.AsString("started_at", "")
+ report.CompletedAt = row.AsString("completed_at", "")
+ report.State = strings.ToLower(row.AsString("vdiff_state", ""))
+ }
+
+ report.RowsCompared += row.AsInt64("rows_compared", 0)
+ totalRowsToCompare += row.AsInt64("table_rows", 0)
+ if mm, _ := row.ToBool("has_mismatch"); mm {
+ report.HasMismatch = true
+ }
+ }
+ }
+ if report.State == string(vdiff.StartedState) {
+ progress := vdiffcmd.BuildProgressReport(report.RowsCompared, totalRowsToCompare, report.StartedAt)
+ report.Progress = &vtadminpb.VDiffProgress{
+ Percentage: progress.Percentage,
+ Eta: progress.ETA,
+ }
+ }
+ shardReports[shard] = report
+ }
+
+ return &vtadminpb.VDiffShowResponse{
+ ShardReport: shardReports,
+ }, nil
+}
+
// GetVtctlds is part of the vtadminpb.VTAdminServer interface.
func (api *API) GetVtctlds(ctx context.Context, req *vtadminpb.GetVtctldsRequest) (*vtadminpb.GetVtctldsResponse, error) {
span, ctx := trace.NewSpan(ctx, "API.GetVtctlds")
@@ -1846,6 +2024,57 @@ func (api *API) LaunchSchemaMigration(ctx context.Context, req *vtadminpb.Launch
return c.LaunchSchemaMigration(ctx, req.Request)
}
+// MaterializeCreate is part of the vtadminpb.VTAdminServer interface.
+func (api *API) MaterializeCreate(ctx context.Context, req *vtadminpb.MaterializeCreateRequest) (*vtctldatapb.MaterializeCreateResponse, error) {
+ span, ctx := trace.NewSpan(ctx, "API.MaterializeCreate")
+ defer span.Finish()
+
+ span.Annotate("cluster_id", req.ClusterId)
+
+ if !api.authz.IsAuthorized(ctx, req.ClusterId, rbac.WorkflowResource, rbac.CreateAction) {
+ return nil, fmt.Errorf("%w: cannot create workflow in %s", errors.ErrUnauthorized, req.ClusterId)
+ }
+
+ c, err := api.getClusterForRequest(req.ClusterId)
+ if err != nil {
+ return nil, err
+ }
+
+ // Parser with default options. New() itself initializes with default MySQL version.
+ parser, err := sqlparser.New(sqlparser.Options{
+ TruncateUILen: 512,
+ TruncateErrLen: 0,
+ })
+ if err != nil {
+ return nil, err
+ }
+ req.Request.Settings.TableSettings, err = vreplcommon.ParseTableMaterializeSettings(req.TableSettings, parser)
+ if err != nil {
+ return nil, err
+ }
+
+ return c.Vtctld.MaterializeCreate(ctx, req.Request)
+}
+
+// MoveTablesComplete is part of the vtadminpb.VTAdminServer interface.
+func (api *API) MoveTablesComplete(ctx context.Context, req *vtadminpb.MoveTablesCompleteRequest) (*vtctldatapb.MoveTablesCompleteResponse, error) {
+ span, ctx := trace.NewSpan(ctx, "API.MoveTablesComplete")
+ defer span.Finish()
+
+ span.Annotate("cluster_id", req.ClusterId)
+
+ if !api.authz.IsAuthorized(ctx, req.ClusterId, rbac.WorkflowResource, rbac.CompleteAction) {
+ return nil, fmt.Errorf("%w: cannot complete workflow in %s", errors.ErrUnauthorized, req.ClusterId)
+ }
+
+ c, err := api.getClusterForRequest(req.ClusterId)
+ if err != nil {
+ return nil, err
+ }
+
+ return c.Vtctld.MoveTablesComplete(ctx, req.Request)
+}
+
// MoveTablesCreate is part of the vtadminpb.VTAdminServer interface.
func (api *API) MoveTablesCreate(ctx context.Context, req *vtadminpb.MoveTablesCreateRequest) (*vtctldatapb.WorkflowStatusResponse, error) {
span, ctx := trace.NewSpan(ctx, "API.MoveTablesCreate")
@@ -1865,6 +2094,25 @@ func (api *API) MoveTablesCreate(ctx context.Context, req *vtadminpb.MoveTablesC
return c.Vtctld.MoveTablesCreate(ctx, req.Request)
}
+// ReshardCreate is part of the vtadminpb.VTAdminServer interface.
+func (api *API) ReshardCreate(ctx context.Context, req *vtadminpb.ReshardCreateRequest) (*vtctldatapb.WorkflowStatusResponse, error) {
+ span, ctx := trace.NewSpan(ctx, "API.ReshardCreate")
+ defer span.Finish()
+
+ span.Annotate("cluster_id", req.ClusterId)
+
+ if !api.authz.IsAuthorized(ctx, req.ClusterId, rbac.WorkflowResource, rbac.CreateAction) {
+ return nil, fmt.Errorf("%w: cannot create workflow in %s", errors.ErrUnauthorized, req.ClusterId)
+ }
+
+ c, err := api.getClusterForRequest(req.ClusterId)
+ if err != nil {
+ return nil, err
+ }
+
+ return c.Vtctld.ReshardCreate(ctx, req.Request)
+}
+
// PingTablet is part of the vtadminpb.VTAdminServer interface.
func (api *API) PingTablet(ctx context.Context, req *vtadminpb.PingTabletRequest) (*vtadminpb.PingTabletResponse, error) {
span, ctx := trace.NewSpan(ctx, "API.PingTablet")
@@ -2540,6 +2788,55 @@ func (api *API) VTExplain(ctx context.Context, req *vtadminpb.VTExplainRequest)
}, nil
}
+// WorkflowDelete is part of the vtadminpb.VTAdminServer interface.
+func (api *API) WorkflowDelete(ctx context.Context, req *vtadminpb.WorkflowDeleteRequest) (*vtctldatapb.WorkflowDeleteResponse, error) {
+ span, ctx := trace.NewSpan(ctx, "API.WorkflowDelete")
+ defer span.Finish()
+
+ span.Annotate("cluster_id", req.ClusterId)
+
+ if !api.authz.IsAuthorized(ctx, req.ClusterId, rbac.WorkflowResource, rbac.DeleteAction) {
+ return nil, fmt.Errorf("%w: cannot delete workflow in %s", errors.ErrUnauthorized, req.ClusterId)
+ }
+
+ c, err := api.getClusterForRequest(req.ClusterId)
+ if err != nil {
+ return nil, err
+ }
+
+ // Set the default options which are not supported in VTAdmin Web.
+ return c.Vtctld.WorkflowDelete(ctx, req.Request)
+}
+
+// WorkflowSwitchTraffic is part of the vtadminpb.VTAdminServer interface.
+func (api *API) WorkflowSwitchTraffic(ctx context.Context, req *vtadminpb.WorkflowSwitchTrafficRequest) (*vtctldatapb.WorkflowSwitchTrafficResponse, error) {
+ span, ctx := trace.NewSpan(ctx, "API.WorkflowSwitchTraffic")
+ defer span.Finish()
+
+ span.Annotate("cluster_id", req.ClusterId)
+
+ if !api.authz.IsAuthorized(ctx, req.ClusterId, rbac.WorkflowResource, rbac.CreateAction) {
+ return nil, fmt.Errorf("%w: cannot switch traffic for workflow in %s", errors.ErrUnauthorized, req.ClusterId)
+ }
+
+ c, err := api.getClusterForRequest(req.ClusterId)
+ if err != nil {
+ return nil, err
+ }
+
+ // Set the default options which are not supported in VTAdmin Web.
+ req.Request.TabletTypes = []topodatapb.TabletType{
+ topodatapb.TabletType_PRIMARY,
+ topodatapb.TabletType_REPLICA,
+ topodatapb.TabletType_RDONLY,
+ }
+ req.Request.Timeout = protoutil.DurationToProto(workflow.DefaultTimeout)
+ req.Request.MaxReplicationLagAllowed = protoutil.DurationToProto(vreplcommon.MaxReplicationLagDefault)
+ req.Request.EnableReverseReplication = true
+
+ return c.Vtctld.WorkflowSwitchTraffic(ctx, req.Request)
+}
+
func (api *API) getClusterForRequest(id string) (*cluster.Cluster, error) {
api.clusterMu.Lock()
defer api.clusterMu.Unlock()
diff --git a/go/vt/vtadmin/http/request.go b/go/vt/vtadmin/http/request.go
index 9d38b88ed91..2c31715c630 100644
--- a/go/vt/vtadmin/http/request.go
+++ b/go/vt/vtadmin/http/request.go
@@ -78,7 +78,7 @@ func (r Request) ParseQueryParamAsUint32(name string, defaultVal uint32) (uint32
}
// ParseQueryParamAsInt32 attempts to parse the query parameter of the given
-// name into a uint32 value. If the parameter is not set, the provided default
+// name into a int32 value. If the parameter is not set, the provided default
// value is returned.
func (r Request) ParseQueryParamAsInt32(name string, defaultVal int32) (int32, error) {
if param := r.URL.Query().Get(name); param != "" {
@@ -96,6 +96,25 @@ func (r Request) ParseQueryParamAsInt32(name string, defaultVal int32) (int32, e
return defaultVal, nil
}
+// ParseQueryParamAsInt64 attempts to parse the query parameter of the given
+// name into a int64 value. If the parameter is not set, the provided default
+// value is returned.
+func (r Request) ParseQueryParamAsInt64(name string, defaultVal int64) (int64, error) {
+ if param := r.URL.Query().Get(name); param != "" {
+ val, err := strconv.ParseInt(param, 10, 64)
+ if err != nil {
+ return defaultVal, &errors.BadRequest{
+ Err: err,
+ ErrDetails: fmt.Sprintf("could not parse query parameter %s (= %v) into int64 value", name, param),
+ }
+ }
+
+ return val, nil
+ }
+
+ return defaultVal, nil
+}
+
// Vars is a mapping of the route variable values in a given request.
//
// See (gorilla/mux).Vars for details. We define a type here to add some
diff --git a/go/vt/vtadmin/http/schema_migrations.go b/go/vt/vtadmin/http/schema_migrations.go
index e0207989648..3da6026fe9f 100644
--- a/go/vt/vtadmin/http/schema_migrations.go
+++ b/go/vt/vtadmin/http/schema_migrations.go
@@ -34,19 +34,26 @@ func ApplySchema(ctx context.Context, r Request, api *API) *JSONResponse {
decoder := json.NewDecoder(r.Body)
defer r.Body.Close()
- var req vtctldatapb.ApplySchemaRequest
- if err := decoder.Decode(&req); err != nil {
+ var body struct {
+ Sql string `json:"sql"`
+ CallerId string `json:"caller_id"`
+ Request vtctldatapb.ApplySchemaRequest `json:"request"`
+ }
+
+ if err := decoder.Decode(&body); err != nil {
return NewJSONResponse(nil, &errors.BadRequest{
Err: err,
})
}
vars := mux.Vars(r.Request)
- req.Keyspace = vars["keyspace"]
+ body.Request.Keyspace = vars["keyspace"]
resp, err := api.server.ApplySchema(ctx, &vtadminpb.ApplySchemaRequest{
ClusterId: vars["cluster_id"],
- Request: &req,
+ Sql: body.Sql,
+ CallerId: body.CallerId,
+ Request: &body.Request,
})
return NewJSONResponse(resp, err)
diff --git a/go/vt/vtadmin/http/transactions.go b/go/vt/vtadmin/http/transactions.go
index 2bcf4ee7e2c..fdc54873baf 100644
--- a/go/vt/vtadmin/http/transactions.go
+++ b/go/vt/vtadmin/http/transactions.go
@@ -20,16 +20,51 @@ import (
"context"
vtadminpb "vitess.io/vitess/go/vt/proto/vtadmin"
+ vtctldatapb "vitess.io/vitess/go/vt/proto/vtctldata"
)
// GetUnresolvedTransactions implements the http wrapper for the
-// /transactions/{cluster_id}/{keyspace} route.
+// /transactions/{cluster_id}/{keyspace}[?abandon_age=] route.
func GetUnresolvedTransactions(ctx context.Context, r Request, api *API) *JSONResponse {
vars := r.Vars()
+ abandonAge, err := r.ParseQueryParamAsInt64("abandon_age", 0)
+ if err != nil {
+ return NewJSONResponse(nil, err)
+ }
+
res, err := api.server.GetUnresolvedTransactions(ctx, &vtadminpb.GetUnresolvedTransactionsRequest{
+ ClusterId: vars["cluster_id"],
+ Keyspace: vars["keyspace"],
+ AbandonAge: abandonAge,
+ })
+
+ return NewJSONResponse(res, err)
+}
+
+// GetTransactionInfo implements the http wrapper for the
+// /transaction/{cluster_id}/{dtid}/info route.
+func GetTransactionInfo(ctx context.Context, r Request, api *API) *JSONResponse {
+ vars := r.Vars()
+
+ res, err := api.server.GetTransactionInfo(ctx, &vtadminpb.GetTransactionInfoRequest{
+ ClusterId: vars["cluster_id"],
+ Request: &vtctldatapb.GetTransactionInfoRequest{
+ Dtid: vars["dtid"],
+ },
+ })
+
+ return NewJSONResponse(res, err)
+}
+
+// ConcludeTransaction implements the http wrapper for the
+// /transaction/{cluster_id}/{dtid}/conclude route.
+func ConcludeTransaction(ctx context.Context, r Request, api *API) *JSONResponse {
+ vars := r.Vars()
+
+ res, err := api.server.ConcludeTransaction(ctx, &vtadminpb.ConcludeTransactionRequest{
ClusterId: vars["cluster_id"],
- Keyspace: vars["keyspace"],
+ Dtid: vars["dtid"],
})
return NewJSONResponse(res, err)
diff --git a/go/vt/vtadmin/http/vdiff.go b/go/vt/vtadmin/http/vdiff.go
new file mode 100644
index 00000000000..590a0cc5e95
--- /dev/null
+++ b/go/vt/vtadmin/http/vdiff.go
@@ -0,0 +1,73 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package http
+
+import (
+ "context"
+ "encoding/json"
+
+ "vitess.io/vitess/go/vt/vtadmin/errors"
+
+ vtadminpb "vitess.io/vitess/go/vt/proto/vtadmin"
+ vtctldatapb "vitess.io/vitess/go/vt/proto/vtctldata"
+)
+
+// VDiffCreate implements the http wrapper for the
+// /vdiff/{cluster_id} route.
+func VDiffCreate(ctx context.Context, r Request, api *API) *JSONResponse {
+ vars := r.Vars()
+
+ decoder := json.NewDecoder(r.Body)
+ defer r.Body.Close()
+
+ var req vtctldatapb.VDiffCreateRequest
+ if err := decoder.Decode(&req); err != nil {
+ return NewJSONResponse(nil, &errors.BadRequest{
+ Err: err,
+ })
+ }
+
+ res, err := api.server.VDiffCreate(ctx, &vtadminpb.VDiffCreateRequest{
+ ClusterId: vars["cluster_id"],
+ Request: &req,
+ })
+
+ return NewJSONResponse(res, err)
+}
+
+// VDiffShow implements the http wrapper for the
+// /vdiff/{cluster_id}/show route.
+func VDiffShow(ctx context.Context, r Request, api *API) *JSONResponse {
+ vars := r.Vars()
+
+ decoder := json.NewDecoder(r.Body)
+ defer r.Body.Close()
+
+ var req vtctldatapb.VDiffShowRequest
+ if err := decoder.Decode(&req); err != nil {
+ return NewJSONResponse(nil, &errors.BadRequest{
+ Err: err,
+ })
+ }
+
+ res, err := api.server.VDiffShow(ctx, &vtadminpb.VDiffShowRequest{
+ ClusterId: vars["cluster_id"],
+ Request: &req,
+ })
+
+ return NewJSONResponse(res, err)
+}
diff --git a/go/vt/vtadmin/http/workflows.go b/go/vt/vtadmin/http/workflows.go
index 5300962e248..ecaf92e192e 100644
--- a/go/vt/vtadmin/http/workflows.go
+++ b/go/vt/vtadmin/http/workflows.go
@@ -122,6 +122,30 @@ func StopWorkflow(ctx context.Context, r Request, api *API) *JSONResponse {
return NewJSONResponse(res, err)
}
+// MoveTablesComplete implements the http wrapper for the VTAdminServer.MoveTablesComplete
+// method.
+//
+// Its route is /movetables/{cluster_id}/complete
+func MoveTablesComplete(ctx context.Context, r Request, api *API) *JSONResponse {
+ vars := r.Vars()
+ decoder := json.NewDecoder(r.Body)
+ defer r.Body.Close()
+
+ var req vtctldatapb.MoveTablesCompleteRequest
+ if err := decoder.Decode(&req); err != nil {
+ return NewJSONResponse(nil, &errors.BadRequest{
+ Err: err,
+ })
+ }
+
+ res, err := api.server.MoveTablesComplete(ctx, &vtadminpb.MoveTablesCompleteRequest{
+ ClusterId: vars["cluster_id"],
+ Request: &req,
+ })
+
+ return NewJSONResponse(res, err)
+}
+
// MoveTablesCreate implements the http wrapper for the VTAdminServer.MoveTablesCreate
// method.
//
@@ -145,3 +169,104 @@ func MoveTablesCreate(ctx context.Context, r Request, api *API) *JSONResponse {
return NewJSONResponse(res, err)
}
+
+// WorkflowSwitchTraffic implements the http wrapper for the VTAdminServer.WorkflowSwitchTraffic
+// method.
+//
+// Its route is /workflow/{cluster_id}/switchtraffic
+func WorkflowSwitchTraffic(ctx context.Context, r Request, api *API) *JSONResponse {
+ vars := r.Vars()
+ decoder := json.NewDecoder(r.Body)
+ defer r.Body.Close()
+
+ var req vtctldatapb.WorkflowSwitchTrafficRequest
+ if err := decoder.Decode(&req); err != nil {
+ return NewJSONResponse(nil, &errors.BadRequest{
+ Err: err,
+ })
+ }
+
+ res, err := api.server.WorkflowSwitchTraffic(ctx, &vtadminpb.WorkflowSwitchTrafficRequest{
+ ClusterId: vars["cluster_id"],
+ Request: &req,
+ })
+
+ return NewJSONResponse(res, err)
+}
+
+// ReshardCreate implements the http wrapper for the VTAdminServer.ReshardCreate
+// method.
+//
+// Its route is /workflow/{cluster_id}/reshard
+func ReshardCreate(ctx context.Context, r Request, api *API) *JSONResponse {
+ vars := r.Vars()
+ decoder := json.NewDecoder(r.Body)
+ defer r.Body.Close()
+
+ var req vtctldatapb.ReshardCreateRequest
+ if err := decoder.Decode(&req); err != nil {
+ return NewJSONResponse(nil, &errors.BadRequest{
+ Err: err,
+ })
+ }
+
+ res, err := api.server.ReshardCreate(ctx, &vtadminpb.ReshardCreateRequest{
+ ClusterId: vars["cluster_id"],
+ Request: &req,
+ })
+
+ return NewJSONResponse(res, err)
+}
+
+// WorkflowDelete implements the http wrapper for the VTAdminServer.WorkflowDelete
+// method.
+//
+// Its route is /workflow/{cluster_id}/delete
+func WorkflowDelete(ctx context.Context, r Request, api *API) *JSONResponse {
+ vars := r.Vars()
+ decoder := json.NewDecoder(r.Body)
+ defer r.Body.Close()
+
+ var req vtctldatapb.WorkflowDeleteRequest
+ if err := decoder.Decode(&req); err != nil {
+ return NewJSONResponse(nil, &errors.BadRequest{
+ Err: err,
+ })
+ }
+
+ res, err := api.server.WorkflowDelete(ctx, &vtadminpb.WorkflowDeleteRequest{
+ ClusterId: vars["cluster_id"],
+ Request: &req,
+ })
+
+ return NewJSONResponse(res, err)
+}
+
+// MaterializeCreate implements the http wrapper for the VTAdminServer.MaterializeCreate
+// method.
+//
+// Its route is /workflow/{cluster_id}/materialize
+func MaterializeCreate(ctx context.Context, r Request, api *API) *JSONResponse {
+ var req struct {
+ TableSettings string `json:"table_settings"`
+ Request vtctldatapb.MaterializeCreateRequest `json:"request"`
+ }
+
+ vars := r.Vars()
+ decoder := json.NewDecoder(r.Body)
+ defer r.Body.Close()
+
+ if err := decoder.Decode(&req); err != nil {
+ return NewJSONResponse(nil, &errors.BadRequest{
+ Err: err,
+ })
+ }
+
+ res, err := api.server.MaterializeCreate(ctx, &vtadminpb.MaterializeCreateRequest{
+ ClusterId: vars["cluster_id"],
+ TableSettings: req.TableSettings,
+ Request: &req.Request,
+ })
+
+ return NewJSONResponse(res, err)
+}
diff --git a/go/vt/vtadmin/rbac/config.go b/go/vt/vtadmin/rbac/config.go
index 19179f0fa29..dd90257374e 100644
--- a/go/vt/vtadmin/rbac/config.go
+++ b/go/vt/vtadmin/rbac/config.go
@@ -173,6 +173,7 @@ func DefaultConfig() *Config {
string(CreateAction),
string(DeleteAction),
string(PutAction),
+ string(CompleteAction),
string(PingAction),
string(ReloadAction),
string(EmergencyFailoverShardAction),
diff --git a/go/vt/vtadmin/rbac/rbac.go b/go/vt/vtadmin/rbac/rbac.go
index 3f15a0d22d2..038db46fbd5 100644
--- a/go/vt/vtadmin/rbac/rbac.go
+++ b/go/vt/vtadmin/rbac/rbac.go
@@ -65,14 +65,15 @@ type Action string
const (
/* generic actions */
- CancelAction Action = "cancel"
- CreateAction Action = "create"
- DeleteAction Action = "delete"
- GetAction Action = "get"
- PingAction Action = "ping"
- PutAction Action = "put"
- ReloadAction Action = "reload"
- RetryAction Action = "retry"
+ CancelAction Action = "cancel"
+ CompleteAction Action = "complete"
+ CreateAction Action = "create"
+ DeleteAction Action = "delete"
+ GetAction Action = "get"
+ PingAction Action = "ping"
+ PutAction Action = "put"
+ ReloadAction Action = "reload"
+ RetryAction Action = "retry"
// cancel, complete, cleanup, launch, retry
diff --git a/go/vt/vtcombo/tablet_map.go b/go/vt/vtcombo/tablet_map.go
index 0f2fe972747..fc02409bd5f 100644
--- a/go/vt/vtcombo/tablet_map.go
+++ b/go/vt/vtcombo/tablet_map.go
@@ -539,9 +539,9 @@ func (itc *internalTabletConn) CreateTransaction(
}
// StartCommit is part of queryservice.QueryService
-func (itc *internalTabletConn) StartCommit(ctx context.Context, target *querypb.Target, transactionID int64, dtid string) error {
- err := itc.tablet.qsc.QueryService().StartCommit(ctx, target, transactionID, dtid)
- return tabletconn.ErrorFromGRPC(vterrors.ToGRPC(err))
+func (itc *internalTabletConn) StartCommit(ctx context.Context, target *querypb.Target, transactionID int64, dtid string) (querypb.StartCommitState, error) {
+ state, err := itc.tablet.qsc.QueryService().StartCommit(ctx, target, transactionID, dtid)
+ return state, tabletconn.ErrorFromGRPC(vterrors.ToGRPC(err))
}
// SetRollback is part of queryservice.QueryService
@@ -811,6 +811,20 @@ func (itmc *internalTabletManagerClient) SetReadWrite(ctx context.Context, table
return fmt.Errorf("not implemented in vtcombo")
}
+func (itmc *internalTabletManagerClient) ChangeTags(ctx context.Context, tablet *topodatapb.Tablet, tabletTags map[string]string, replace bool) (*tabletmanagerdatapb.ChangeTagsResponse, error) {
+ t, ok := tabletMap[tablet.Alias.Uid]
+ if !ok {
+ return nil, fmt.Errorf("tmclient: cannot find tablet %v", tablet.Alias.Uid)
+ }
+ afterTags, err := t.tm.ChangeTags(ctx, tabletTags, replace)
+ if err != nil {
+ return nil, err
+ }
+ return &tabletmanagerdatapb.ChangeTagsResponse{
+ Tags: afterTags,
+ }, nil
+}
+
func (itmc *internalTabletManagerClient) ChangeType(ctx context.Context, tablet *topodatapb.Tablet, dbType topodatapb.TabletType, semiSync bool) error {
t, ok := tabletMap[tablet.Alias.Uid]
if !ok {
@@ -894,7 +908,7 @@ func (itmc *internalTabletManagerClient) ExecuteFetchAsApp(context.Context, *top
return nil, fmt.Errorf("not implemented in vtcombo")
}
-func (itmc *internalTabletManagerClient) GetUnresolvedTransactions(ctx context.Context, tablet *topodatapb.Tablet) ([]*querypb.TransactionMetadata, error) {
+func (itmc *internalTabletManagerClient) GetUnresolvedTransactions(ctx context.Context, tablet *topodatapb.Tablet, abandonAge int64) ([]*querypb.TransactionMetadata, error) {
return nil, fmt.Errorf("not implemented in vtcombo")
}
@@ -910,6 +924,10 @@ func (itmc *internalTabletManagerClient) ReadTransaction(ctx context.Context, ta
return nil, fmt.Errorf("not implemented in vtcombo")
}
+func (itmc *internalTabletManagerClient) GetTransactionInfo(ctx context.Context, tablet *topodatapb.Tablet, dtid string) (*tabletmanagerdatapb.GetTransactionInfoResponse, error) {
+ return nil, fmt.Errorf("not implemented in vtcombo")
+}
+
func (itmc *internalTabletManagerClient) PrimaryStatus(context.Context, *topodatapb.Tablet) (*replicationdatapb.PrimaryStatus, error) {
return nil, fmt.Errorf("not implemented in vtcombo")
}
@@ -930,6 +948,10 @@ func (itmc *internalTabletManagerClient) CreateVReplicationWorkflow(context.Cont
return nil, fmt.Errorf("not implemented in vtcombo")
}
+func (itmc *internalTabletManagerClient) DeleteTableData(context.Context, *topodatapb.Tablet, *tabletmanagerdatapb.DeleteTableDataRequest) (*tabletmanagerdatapb.DeleteTableDataResponse, error) {
+ return nil, fmt.Errorf("not implemented in vtcombo")
+}
+
func (itmc *internalTabletManagerClient) DeleteVReplicationWorkflow(context.Context, *topodatapb.Tablet, *tabletmanagerdatapb.DeleteVReplicationWorkflowRequest) (*tabletmanagerdatapb.DeleteVReplicationWorkflowResponse, error) {
return nil, fmt.Errorf("not implemented in vtcombo")
}
@@ -978,6 +1000,11 @@ func (itmc *internalTabletManagerClient) PopulateReparentJournal(context.Context
return fmt.Errorf("not implemented in vtcombo")
}
+// ReadReparentJournalInfo is part of the tmclient.TabletManagerClient interface.
+func (itmc *internalTabletManagerClient) ReadReparentJournalInfo(ctx context.Context, tablet *topodatapb.Tablet) (int, error) {
+ return 0, fmt.Errorf("not implemented in vtcombo")
+}
+
func (itmc *internalTabletManagerClient) DemotePrimary(context.Context, *topodatapb.Tablet) (*replicationdatapb.PrimaryStatus, error) {
return nil, fmt.Errorf("not implemented in vtcombo")
}
diff --git a/go/vt/vtctl/grpcvtctldclient/client_gen.go b/go/vt/vtctl/grpcvtctldclient/client_gen.go
index 45db87a582d..c2da0e97c54 100644
--- a/go/vt/vtctl/grpcvtctldclient/client_gen.go
+++ b/go/vt/vtctl/grpcvtctldclient/client_gen.go
@@ -119,6 +119,15 @@ func (client *gRPCVtctldClient) CancelSchemaMigration(ctx context.Context, in *v
return client.c.CancelSchemaMigration(ctx, in, opts...)
}
+// ChangeTabletTags is part of the vtctlservicepb.VtctldClient interface.
+func (client *gRPCVtctldClient) ChangeTabletTags(ctx context.Context, in *vtctldatapb.ChangeTabletTagsRequest, opts ...grpc.CallOption) (*vtctldatapb.ChangeTabletTagsResponse, error) {
+ if client.c == nil {
+ return nil, status.Error(codes.Unavailable, connClosedMsg)
+ }
+
+ return client.c.ChangeTabletTags(ctx, in, opts...)
+}
+
// ChangeTabletType is part of the vtctlservicepb.VtctldClient interface.
func (client *gRPCVtctldClient) ChangeTabletType(ctx context.Context, in *vtctldatapb.ChangeTabletTypeRequest, opts ...grpc.CallOption) (*vtctldatapb.ChangeTabletTypeResponse, error) {
if client.c == nil {
@@ -515,6 +524,15 @@ func (client *gRPCVtctldClient) GetTopologyPath(ctx context.Context, in *vtctlda
return client.c.GetTopologyPath(ctx, in, opts...)
}
+// GetTransactionInfo is part of the vtctlservicepb.VtctldClient interface.
+func (client *gRPCVtctldClient) GetTransactionInfo(ctx context.Context, in *vtctldatapb.GetTransactionInfoRequest, opts ...grpc.CallOption) (*vtctldatapb.GetTransactionInfoResponse, error) {
+ if client.c == nil {
+ return nil, status.Error(codes.Unavailable, connClosedMsg)
+ }
+
+ return client.c.GetTransactionInfo(ctx, in, opts...)
+}
+
// GetUnresolvedTransactions is part of the vtctlservicepb.VtctldClient interface.
func (client *gRPCVtctldClient) GetUnresolvedTransactions(ctx context.Context, in *vtctldatapb.GetUnresolvedTransactionsRequest, opts ...grpc.CallOption) (*vtctldatapb.GetUnresolvedTransactionsResponse, error) {
if client.c == nil {
diff --git a/go/vt/vtctl/grpcvtctldserver/server.go b/go/vt/vtctl/grpcvtctldserver/server.go
index 8484bc82c73..c3dc22d21b4 100644
--- a/go/vt/vtctl/grpcvtctldserver/server.go
+++ b/go/vt/vtctl/grpcvtctldserver/server.go
@@ -303,7 +303,9 @@ func (s *VtctldServer) ApplySchema(ctx context.Context, req *vtctldatapb.ApplySc
}
for _, shard := range execResult.SuccessShards {
- resp.RowsAffectedByShard[shard.Shard] = shard.Result.RowsAffected
+ for _, result := range shard.Results {
+ resp.RowsAffectedByShard[shard.Shard] += result.RowsAffected
+ }
}
return resp, err
@@ -586,6 +588,39 @@ func (s *VtctldServer) CancelSchemaMigration(ctx context.Context, req *vtctldata
return resp, nil
}
+// ChangeTabletTags is part of the vtctlservicepb.VtctldServer interface.
+func (s *VtctldServer) ChangeTabletTags(ctx context.Context, req *vtctldatapb.ChangeTabletTagsRequest) (resp *vtctldatapb.ChangeTabletTagsResponse, err error) {
+ span, ctx := trace.NewSpan(ctx, "VtctldServer.ChangeTabletTags")
+ defer span.Finish()
+
+ defer panicHandler(&err)
+
+ span.Annotate("tablet_alias", topoproto.TabletAliasString(req.TabletAlias))
+ span.Annotate("replace", req.Replace)
+
+ ctx, cancel := context.WithTimeout(ctx, topo.RemoteOperationTimeout)
+ defer cancel()
+
+ tablet, err := s.ts.GetTablet(ctx, req.TabletAlias)
+ if err != nil {
+ return nil, err
+ }
+
+ span.Annotate("before_tablet_tags", tablet.Tags)
+
+ changeTagsResp, err := s.tmc.ChangeTags(ctx, tablet.Tablet, req.Tags, req.Replace)
+ if err != nil {
+ return nil, err
+ }
+
+ span.Annotate("after_tablet_tags", changeTagsResp.Tags)
+
+ return &vtctldatapb.ChangeTabletTagsResponse{
+ BeforeTags: tablet.Tags,
+ AfterTags: changeTagsResp.Tags,
+ }, nil
+}
+
// ChangeTabletType is part of the vtctlservicepb.VtctldServer interface.
func (s *VtctldServer) ChangeTabletType(ctx context.Context, req *vtctldatapb.ChangeTabletTypeRequest) (resp *vtctldatapb.ChangeTabletTypeResponse, err error) {
span, ctx := trace.NewSpan(ctx, "VtctldServer.ChangeTabletType")
@@ -1236,6 +1271,7 @@ func (s *VtctldServer) EmergencyReparentShard(ctx context.Context, req *vtctldat
WaitReplicasTimeout: waitReplicasTimeout,
WaitAllTablets: req.WaitForAllTablets,
PreventCrossCellPromotion: req.PreventCrossCellPromotion,
+ ExpectedPrimaryAlias: req.ExpectedPrimary,
},
)
@@ -2062,14 +2098,12 @@ func (s *VtctldServer) UpdateThrottlerConfig(ctx context.Context, req *vtctldata
throttlerConfig.CheckAsCheckSelf = false
}
if req.ThrottledApp != nil && req.ThrottledApp.Name != "" {
- // TODO(shlomi) in v22: replace the following line with the commented out block
- throttlerConfig.ThrottledApps[req.ThrottledApp.Name] = req.ThrottledApp
- // timeNow := time.Now()
- // if protoutil.TimeFromProto(req.ThrottledApp.ExpiresAt).After(timeNow) {
- // throttlerConfig.ThrottledApps[req.ThrottledApp.Name] = req.ThrottledApp
- // } else {
- // delete(throttlerConfig.ThrottledApps, req.ThrottledApp.Name)
- // }
+ timeNow := time.Now()
+ if protoutil.TimeFromProto(req.ThrottledApp.ExpiresAt).After(timeNow) {
+ throttlerConfig.ThrottledApps[req.ThrottledApp.Name] = req.ThrottledApp
+ } else {
+ delete(throttlerConfig.ThrottledApps, req.ThrottledApp.Name)
+ }
}
return throttlerConfig
}
@@ -2423,10 +2457,19 @@ func (s *VtctldServer) GetUnresolvedTransactions(ctx context.Context, req *vtctl
if err != nil {
return err
}
- shardTrnxs, err := s.tmc.GetUnresolvedTransactions(newCtx, primary.Tablet)
+ shardTrnxs, err := s.tmc.GetUnresolvedTransactions(newCtx, primary.Tablet, req.AbandonAge)
if err != nil {
return err
}
+ // The metadata manager is itself not part of the list of participants.
+ // We should it to the list before showing it to the users.
+ for _, trnx := range shardTrnxs {
+ trnx.Participants = append(trnx.Participants, &querypb.Target{
+ Keyspace: req.Keyspace,
+ Shard: shard,
+ TabletType: topodatapb.TabletType_PRIMARY,
+ })
+ }
mu.Lock()
defer mu.Unlock()
transactions = append(transactions, shardTrnxs...)
@@ -2493,6 +2536,84 @@ func (s *VtctldServer) ConcludeTransaction(ctx context.Context, req *vtctldatapb
return &vtctldatapb.ConcludeTransactionResponse{}, nil
}
+// GetTransactionInfo is part of the vtctlservicepb.VtctldServer interface.
+// It reads the information about a distributed transaction.
+func (s *VtctldServer) GetTransactionInfo(ctx context.Context, req *vtctldatapb.GetTransactionInfoRequest) (resp *vtctldatapb.GetTransactionInfoResponse, err error) {
+ span, ctx := trace.NewSpan(ctx, "VtctldServer.GetTransactionInfo")
+ defer span.Finish()
+
+ span.Annotate("dtid", req.Dtid)
+
+ // Read the shard where the transaction metadata is stored.
+ ss, err := dtids.ShardSession(req.Dtid)
+ if err != nil {
+ return nil, err
+ }
+ primary, err := s.getPrimaryTablet(ctx, ss.Target)
+ if err != nil {
+ return nil, err
+ }
+
+ // Read the transaction metadata to get the participating resource manager list.
+ transaction, err := s.tmc.ReadTransaction(ctx, primary.Tablet, req.Dtid)
+ if transaction == nil || err != nil {
+ // no transaction record for the given ID. It is already concluded or does not exist.
+ return nil, err
+ }
+ // Store the metadata in the resonse.
+ resp = &vtctldatapb.GetTransactionInfoResponse{
+ Metadata: transaction,
+ }
+ // Create a mutex we use to synchronize the following go routines to read the transaction state from all the shards.
+ mu := sync.Mutex{}
+
+ eg, newCtx := errgroup.WithContext(ctx)
+ eg.SetLimit(10)
+ for _, rm := range transaction.Participants {
+ eg.Go(func() error {
+ primary, err := s.getPrimaryTablet(newCtx, rm)
+ if err != nil {
+ return err
+ }
+ rts, err := s.tmc.GetTransactionInfo(newCtx, primary.Tablet, req.Dtid)
+ if err != nil {
+ return err
+ }
+ mu.Lock()
+ defer mu.Unlock()
+ resp.ShardStates = append(resp.ShardStates, &vtctldatapb.ShardTransactionState{
+ Shard: rm.Shard,
+ State: rts.State,
+ Message: rts.Message,
+ TimeCreated: rts.TimeCreated,
+ Statements: rts.Statements,
+ })
+ return nil
+ })
+ }
+ if err = eg.Wait(); err != nil {
+ return nil, err
+ }
+
+ rts, err := s.tmc.GetTransactionInfo(ctx, primary.Tablet, req.Dtid)
+ if err != nil {
+ return nil, err
+ }
+ resp.ShardStates = append(resp.ShardStates, &vtctldatapb.ShardTransactionState{
+ Shard: ss.Target.Shard,
+ State: rts.State,
+ Message: rts.Message,
+ TimeCreated: rts.TimeCreated,
+ Statements: rts.Statements,
+ })
+
+ // The metadata manager is itself not part of the list of participants.
+ // We should it to the list before showing it to the users.
+ transaction.Participants = append(transaction.Participants, ss.Target)
+
+ return resp, nil
+}
+
func (s *VtctldServer) getPrimaryTablet(newCtx context.Context, rm *querypb.Target) (*topo.TabletInfo, error) {
si, err := s.ts.GetShard(newCtx, rm.Keyspace, rm.Shard)
if err != nil {
@@ -3071,6 +3192,10 @@ func (s *VtctldServer) PlannedReparentShard(ctx context.Context, req *vtctldatap
span.Annotate("avoid_primary_alias", topoproto.TabletAliasString(req.AvoidPrimary))
}
+ if req.ExpectedPrimary != nil {
+ span.Annotate("expected_primary_alias", topoproto.TabletAliasString(req.ExpectedPrimary))
+ }
+
if req.NewPrimary != nil {
span.Annotate("new_primary_alias", topoproto.TabletAliasString(req.NewPrimary))
}
@@ -3090,6 +3215,7 @@ func (s *VtctldServer) PlannedReparentShard(ctx context.Context, req *vtctldatap
reparentutil.PlannedReparentOptions{
AvoidPrimaryAlias: req.AvoidPrimary,
NewPrimaryAlias: req.NewPrimary,
+ ExpectedPrimaryAlias: req.ExpectedPrimary,
WaitReplicasTimeout: waitReplicasTimeout,
TolerableReplLag: tolerableReplLag,
AllowCrossCellPromotion: req.AllowCrossCellPromotion,
diff --git a/go/vt/vtctl/grpcvtctldserver/server_test.go b/go/vt/vtctl/grpcvtctldserver/server_test.go
index adc4095fd06..93f302a1097 100644
--- a/go/vt/vtctl/grpcvtctldserver/server_test.go
+++ b/go/vt/vtctl/grpcvtctldserver/server_test.go
@@ -1458,6 +1458,206 @@ func TestCancelSchemaMigration(t *testing.T) {
}
}
+func TestChangeTabletTags(t *testing.T) {
+ t.Parallel()
+
+ tests := []struct {
+ name string
+ cells []string
+ tablet *topodatapb.Tablet
+ req *vtctldatapb.ChangeTabletTagsRequest
+ expected *vtctldatapb.ChangeTabletTagsResponse
+ shouldErr bool
+ }{
+ {
+ name: "success",
+ cells: []string{"zone1"},
+ tablet: &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 100,
+ },
+ Keyspace: "ks",
+ Shard: "0",
+ },
+ req: &vtctldatapb.ChangeTabletTagsRequest{
+ TabletAlias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 100,
+ },
+ Tags: map[string]string{
+ "test": t.Name(),
+ },
+ },
+ expected: &vtctldatapb.ChangeTabletTagsResponse{
+ AfterTags: map[string]string{
+ "test": t.Name(),
+ },
+ },
+ shouldErr: false,
+ },
+ {
+ name: "success with existing",
+ cells: []string{"zone1"},
+ tablet: &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 100,
+ },
+ Keyspace: "ks",
+ Shard: "0",
+ Tags: map[string]string{
+ "delete": "me",
+ "hello": "world!",
+ },
+ },
+ req: &vtctldatapb.ChangeTabletTagsRequest{
+ TabletAlias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 100,
+ },
+ Tags: map[string]string{
+ "delete": "",
+ "test": t.Name(),
+ },
+ },
+ expected: &vtctldatapb.ChangeTabletTagsResponse{
+ BeforeTags: map[string]string{
+ "delete": "me",
+ "hello": "world!",
+ },
+ AfterTags: map[string]string{
+ "hello": "world!",
+ "test": t.Name(),
+ },
+ },
+ shouldErr: false,
+ },
+ {
+ name: "success with replace",
+ cells: []string{"zone1"},
+ tablet: &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 100,
+ },
+ Keyspace: "ks",
+ Shard: "0",
+ Tags: map[string]string{
+ "hello": "world!",
+ },
+ },
+ req: &vtctldatapb.ChangeTabletTagsRequest{
+ TabletAlias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 100,
+ },
+ Tags: map[string]string{
+ "test": t.Name(),
+ },
+ Replace: true,
+ },
+ expected: &vtctldatapb.ChangeTabletTagsResponse{
+ BeforeTags: map[string]string{
+ "hello": "world!",
+ },
+ AfterTags: map[string]string{
+ "test": t.Name(),
+ },
+ },
+ shouldErr: false,
+ },
+ {
+ name: "tablet not found",
+ cells: []string{"zone1"},
+ tablet: &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 200,
+ },
+ Keyspace: "ks",
+ Shard: "0",
+ },
+ req: &vtctldatapb.ChangeTabletTagsRequest{
+ TabletAlias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 100,
+ },
+ Tags: map[string]string{
+ "test": t.Name(),
+ },
+ },
+ expected: nil,
+ shouldErr: true,
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ t.Parallel()
+
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+ ts := memorytopo.NewServer(ctx, tt.cells...)
+ vtctld := testutil.NewVtctldServerWithTabletManagerClient(t, ts, &testutil.TabletManagerClient{
+ TopoServer: ts,
+ }, func(ts *topo.Server) vtctlservicepb.VtctldServer {
+ return NewVtctldServer(vtenv.NewTestEnv(), ts)
+ })
+
+ testutil.AddTablets(ctx, t, ts, &testutil.AddTabletOptions{
+ AlsoSetShardPrimary: true,
+ }, tt.tablet)
+
+ resp, err := vtctld.ChangeTabletTags(ctx, tt.req)
+ if tt.shouldErr {
+ assert.Error(t, err)
+ return
+ }
+ assert.NoError(t, err)
+ utils.MustMatch(t, tt.expected, resp)
+
+ tablet, err := ts.GetTablet(ctx, tt.req.TabletAlias)
+ assert.NoError(t, err)
+ utils.MustMatch(t, resp.AfterTags, tablet.Tags)
+ })
+ }
+
+ t.Run("tabletmanager failure", func(t *testing.T) {
+ t.Parallel()
+
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+ ts := memorytopo.NewServer(ctx, "zone1")
+ vtctld := testutil.NewVtctldServerWithTabletManagerClient(t, ts, &testutil.TabletManagerClient{
+ TopoServer: nil,
+ }, func(ts *topo.Server) vtctlservicepb.VtctldServer {
+ return NewVtctldServer(vtenv.NewTestEnv(), ts)
+ })
+
+ testutil.AddTablet(ctx, t, ts, &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 100,
+ },
+ Keyspace: "ks",
+ Shard: "0",
+ Type: topodatapb.TabletType_REPLICA,
+ }, nil)
+
+ _, err := vtctld.ChangeTabletTags(ctx, &vtctldatapb.ChangeTabletTagsRequest{
+ TabletAlias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 100,
+ },
+ Tags: map[string]string{
+ "test": t.Name(),
+ },
+ })
+ assert.Error(t, err)
+ })
+}
+
func TestChangeTabletType(t *testing.T) {
t.Parallel()
@@ -5170,6 +5370,16 @@ func TestExecuteHook(t *testing.T) {
func TestGetUnresolvedTransactions(t *testing.T) {
ks := "testkeyspace"
+ shard1Target := &querypb.Target{
+ Keyspace: ks,
+ Shard: "-80",
+ TabletType: topodatapb.TabletType_PRIMARY,
+ }
+ shard2Target := &querypb.Target{
+ Keyspace: ks,
+ Shard: "80-",
+ TabletType: topodatapb.TabletType_PRIMARY,
+ }
tests := []struct {
name string
@@ -5182,24 +5392,25 @@ func TestGetUnresolvedTransactions(t *testing.T) {
name: "unresolved transaction on both shards",
tmc: &testutil.TabletManagerClient{
GetUnresolvedTransactionsResults: map[string][]*querypb.TransactionMetadata{
- "-80": {{Dtid: "aa"}},
- "80-": {{Dtid: "bb"}},
+ "-80": {{Dtid: "aa", Participants: []*querypb.Target{shard2Target}}},
+ "80-": {{Dtid: "bb", Participants: []*querypb.Target{shard1Target}}},
},
},
keyspace: "testkeyspace",
expected: []*querypb.TransactionMetadata{
- {Dtid: "aa"}, {Dtid: "bb"},
+ {Dtid: "aa", Participants: []*querypb.Target{shard2Target, shard1Target}},
+ {Dtid: "bb", Participants: []*querypb.Target{shard1Target, shard2Target}},
},
}, {
- name: "unresolved transaction on one sharda",
+ name: "unresolved transaction on one shard",
tmc: &testutil.TabletManagerClient{
GetUnresolvedTransactionsResults: map[string][]*querypb.TransactionMetadata{
- "80-": {{Dtid: "bb"}},
+ "80-": {{Dtid: "bb", Participants: []*querypb.Target{shard1Target}}},
},
},
keyspace: "testkeyspace",
expected: []*querypb.TransactionMetadata{
- {Dtid: "bb"},
+ {Dtid: "bb", Participants: []*querypb.Target{shard1Target, shard2Target}},
},
},
{
@@ -5333,6 +5544,108 @@ func TestConcludeTransaction(t *testing.T) {
}
}
+func TestGetTransactionInfo(t *testing.T) {
+ ks := "testkeyspace"
+ tests := []struct {
+ name string
+ tmc *testutil.TabletManagerClient
+ dtid string
+ expErr string
+ respWanted *vtctldatapb.GetTransactionInfoResponse
+ }{
+ {
+ name: "invalid dtid",
+ tmc: &testutil.TabletManagerClient{},
+ dtid: "dtid01",
+ expErr: "invalid parts in dtid: dtid01",
+ }, {
+ name: "invalid transaction id",
+ tmc: &testutil.TabletManagerClient{},
+ dtid: "ks:80-:013c",
+ expErr: "invalid transaction id in dtid: ks:80-:013c",
+ }, {
+ name: "Success",
+ tmc: &testutil.TabletManagerClient{
+ ReadTransactionResult: map[string]*querypb.TransactionMetadata{
+ "80-": {
+ Dtid: "bb",
+ Participants: []*querypb.Target{
+ {Keyspace: ks, Shard: "-80", TabletType: topodatapb.TabletType_PRIMARY},
+ },
+ },
+ },
+ GetTransactionInfoResult: map[string]*tabletmanagerdatapb.GetTransactionInfoResponse{
+ "-80": {
+ State: "FAILED",
+ Statements: []string{"stmt1", "stmt2"},
+ },
+ "80-": {}, // Empty result is expected when the transaction has been resolved on that shard or if its the resource manager.
+ },
+ },
+ dtid: "testkeyspace:80-:1234",
+ respWanted: &vtctldatapb.GetTransactionInfoResponse{
+ Metadata: &querypb.TransactionMetadata{
+ Dtid: "bb",
+ Participants: []*querypb.Target{
+ {Keyspace: ks, Shard: "-80", TabletType: topodatapb.TabletType_PRIMARY},
+ {Keyspace: ks, Shard: "80-", TabletType: topodatapb.TabletType_PRIMARY},
+ },
+ },
+ ShardStates: []*vtctldatapb.ShardTransactionState{
+ {
+ Shard: "-80",
+ State: "FAILED",
+ Statements: []string{"stmt1", "stmt2"},
+ },
+ {
+ Shard: "80-",
+ },
+ },
+ },
+ }, {
+ name: "Success - empty metadata",
+ tmc: &testutil.TabletManagerClient{
+ ReadTransactionResult: map[string]*querypb.TransactionMetadata{},
+ },
+ dtid: "testkeyspace:80-:1234",
+ respWanted: nil, // We expected an empty response if the metadata is not found.
+ },
+ }
+
+ tablets := []*topodatapb.Tablet{{
+ Alias: &topodatapb.TabletAlias{Cell: "zone1", Uid: 100},
+ Keyspace: ks,
+ Shard: "-80",
+ Type: topodatapb.TabletType_PRIMARY,
+ }, {
+ Alias: &topodatapb.TabletAlias{Cell: "zone1", Uid: 200},
+ Keyspace: ks,
+ Shard: "80-",
+ Type: topodatapb.TabletType_PRIMARY,
+ }}
+ ts := memorytopo.NewServer(context.Background(), "zone1")
+ testutil.AddTablets(context.Background(), t, ts, &testutil.AddTabletOptions{AlsoSetShardPrimary: true}, tablets...)
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+
+ vtctld := testutil.NewVtctldServerWithTabletManagerClient(t, ts, tt.tmc, func(ts *topo.Server) vtctlservicepb.VtctldServer {
+ return NewVtctldServer(vtenv.NewTestEnv(), ts)
+ })
+ req := &vtctldatapb.GetTransactionInfoRequest{Dtid: tt.dtid}
+ resp, err := vtctld.GetTransactionInfo(ctx, req)
+ if tt.expErr != "" {
+ require.ErrorContains(t, err, tt.expErr)
+ return
+ }
+ require.NoError(t, err)
+ require.EqualValues(t, tt.respWanted, resp)
+ })
+ }
+}
+
func TestFindAllShardsInKeyspace(t *testing.T) {
t.Parallel()
@@ -12993,7 +13306,7 @@ func TestTabletExternallyReparented(t *testing.T) {
defer func() {
topofactory.SetError(nil)
- ctx, cancel := context.WithTimeout(ctx, time.Millisecond*10)
+ ctx, cancel := context.WithTimeout(ctx, time.Second*10)
defer cancel()
resp, err := vtctld.GetTablets(ctx, &vtctldatapb.GetTabletsRequest{})
diff --git a/go/vt/vtctl/grpcvtctldserver/testutil/test_tmclient.go b/go/vt/vtctl/grpcvtctldserver/testutil/test_tmclient.go
index 76297851f14..768fae5bff4 100644
--- a/go/vt/vtctl/grpcvtctldserver/testutil/test_tmclient.go
+++ b/go/vt/vtctl/grpcvtctldserver/testutil/test_tmclient.go
@@ -188,7 +188,14 @@ type TabletManagerClient struct {
EventJitter time.Duration
ErrorAfter time.Duration
}
+ // Backing Up - keyed by tablet alias.
+ TabletsBackupState map[string]bool
// keyed by tablet alias.
+ ChangeTagsResult map[string]struct {
+ Response *tabletmanagerdatapb.ChangeTagsResponse
+ Error error
+ }
+ ChangeTagsDelays map[string]time.Duration
ChangeTabletTypeResult map[string]error
ChangeTabletTypeDelays map[string]time.Duration
// keyed by tablet alias.
@@ -261,6 +268,7 @@ type TabletManagerClient struct {
}
GetUnresolvedTransactionsResults map[string][]*querypb.TransactionMetadata
ReadTransactionResult map[string]*querypb.TransactionMetadata
+ GetTransactionInfoResult map[string]*tabletmanagerdatapb.GetTransactionInfoResponse
// keyed by tablet alias.
InitPrimaryDelays map[string]time.Duration
// keyed by tablet alias. injects a sleep to the end of the function
@@ -286,6 +294,8 @@ type TabletManagerClient struct {
PopulateReparentJournalDelays map[string]time.Duration
// keyed by tablet alias
PopulateReparentJournalResults map[string]error
+ // keyed by tablet alias
+ ReadReparentJournalInfoResults map[string]int
// keyed by tablet alias.
PromoteReplicaDelays map[string]time.Duration
// keyed by tablet alias. injects a sleep to the end of the function
@@ -478,6 +488,39 @@ func (fake *TabletManagerClient) Backup(ctx context.Context, tablet *topodatapb.
return stream, nil
}
+// ChangeTags is part of the tmclient.TabletManagerClient interface.
+func (fake *TabletManagerClient) ChangeTags(ctx context.Context, tablet *topodatapb.Tablet, tabletTags map[string]string, replace bool) (*tabletmanagerdatapb.ChangeTagsResponse, error) {
+ key := topoproto.TabletAliasString(tablet.Alias)
+
+ if fake.ChangeTagsDelays != nil {
+ if delay, ok := fake.ChangeTagsDelays[key]; ok {
+ select {
+ case <-ctx.Done():
+ return nil, ctx.Err()
+ case <-time.After(delay):
+ // proceed to results
+ }
+ }
+ }
+
+ if result, ok := fake.ChangeTagsResult[key]; ok {
+ return result.Response, result.Error
+ }
+
+ if fake.TopoServer == nil {
+ return nil, assert.AnError
+ }
+
+ tablet, err := topotools.ChangeTags(ctx, fake.TopoServer, tablet.Alias, tabletTags, replace)
+ if err != nil {
+ return nil, err
+ }
+
+ return &tabletmanagerdatapb.ChangeTagsResponse{
+ Tags: tablet.Tags,
+ }, nil
+}
+
// ChangeType is part of the tmclient.TabletManagerClient interface.
func (fake *TabletManagerClient) ChangeType(ctx context.Context, tablet *topodatapb.Tablet, newType topodatapb.TabletType, semiSync bool) error {
key := topoproto.TabletAliasString(tablet.Alias)
@@ -656,7 +699,7 @@ func (fake *TabletManagerClient) ExecuteQuery(ctx context.Context, tablet *topod
}
// GetUnresolvedTransactions is part of the tmclient.TabletManagerClient interface.
-func (fake *TabletManagerClient) GetUnresolvedTransactions(ctx context.Context, tablet *topodatapb.Tablet) ([]*querypb.TransactionMetadata, error) {
+func (fake *TabletManagerClient) GetUnresolvedTransactions(ctx context.Context, tablet *topodatapb.Tablet, abandonAge int64) ([]*querypb.TransactionMetadata, error) {
if len(fake.GetUnresolvedTransactionsResults) == 0 {
return nil, fmt.Errorf("%w: no GetUnresolvedTransactions results on fake TabletManagerClient", assert.AnError)
}
@@ -676,6 +719,18 @@ func (fake *TabletManagerClient) ReadTransaction(ctx context.Context, tablet *to
return fake.ReadTransactionResult[tablet.Shard], nil
}
+// GetTransactionInfo is part of the tmclient.TabletManagerClient interface.
+func (fake *TabletManagerClient) GetTransactionInfo(ctx context.Context, tablet *topodatapb.Tablet, dtid string) (*tabletmanagerdatapb.GetTransactionInfoResponse, error) {
+ if fake.CallError {
+ return nil, fmt.Errorf("%w: blocked call for GetTransactionInfo on fake TabletManagerClient", assert.AnError)
+ }
+ if fake.GetTransactionInfoResult == nil {
+ return nil, fmt.Errorf("%w: no GetTransactionInfo result on fake TabletManagerClient", assert.AnError)
+ }
+
+ return fake.GetTransactionInfoResult[tablet.Shard], nil
+}
+
// ConcludeTransaction is part of the tmclient.TabletManagerClient interface.
func (fake *TabletManagerClient) ConcludeTransaction(ctx context.Context, tablet *topodatapb.Tablet, dtid string, mm bool) error {
if fake.CallError {
@@ -918,6 +973,19 @@ func (fake *TabletManagerClient) PopulateReparentJournal(ctx context.Context, ta
return assert.AnError
}
+// ReadReparentJournalInfo is part of the tmclient.TabletManagerClient interface.
+func (fake *TabletManagerClient) ReadReparentJournalInfo(ctx context.Context, tablet *topodatapb.Tablet) (int, error) {
+ if fake.ReadReparentJournalInfoResults == nil {
+ return 1, nil
+ }
+ key := topoproto.TabletAliasString(tablet.Alias)
+ if result, ok := fake.ReadReparentJournalInfoResults[key]; ok {
+ return result, nil
+ }
+
+ return 0, assert.AnError
+}
+
// PromoteReplica is part of the tmclient.TabletManagerClient interface.
func (fake *TabletManagerClient) PromoteReplica(ctx context.Context, tablet *topodatapb.Tablet, semiSync bool) (string, error) {
if fake.PromoteReplicaResults == nil {
@@ -1014,6 +1082,9 @@ func (fake *TabletManagerClient) ReplicationStatus(ctx context.Context, tablet *
}
if result, ok := fake.ReplicationStatusResults[key]; ok {
+ if _, ok = fake.TabletsBackupState[key]; ok {
+ result.Position.BackupRunning = fake.TabletsBackupState[key]
+ }
return result.Position, result.Error
}
diff --git a/go/vt/vtctl/localvtctldclient/client_gen.go b/go/vt/vtctl/localvtctldclient/client_gen.go
index b8fdca174e6..6867f4768f6 100644
--- a/go/vt/vtctl/localvtctldclient/client_gen.go
+++ b/go/vt/vtctl/localvtctldclient/client_gen.go
@@ -171,6 +171,11 @@ func (client *localVtctldClient) CancelSchemaMigration(ctx context.Context, in *
return client.s.CancelSchemaMigration(ctx, in)
}
+// ChangeTabletTags is part of the vtctlservicepb.VtctldClient interface.
+func (client *localVtctldClient) ChangeTabletTags(ctx context.Context, in *vtctldatapb.ChangeTabletTagsRequest, opts ...grpc.CallOption) (*vtctldatapb.ChangeTabletTagsResponse, error) {
+ return client.s.ChangeTabletTags(ctx, in)
+}
+
// ChangeTabletType is part of the vtctlservicepb.VtctldClient interface.
func (client *localVtctldClient) ChangeTabletType(ctx context.Context, in *vtctldatapb.ChangeTabletTypeRequest, opts ...grpc.CallOption) (*vtctldatapb.ChangeTabletTypeResponse, error) {
return client.s.ChangeTabletType(ctx, in)
@@ -391,6 +396,11 @@ func (client *localVtctldClient) GetTopologyPath(ctx context.Context, in *vtctld
return client.s.GetTopologyPath(ctx, in)
}
+// GetTransactionInfo is part of the vtctlservicepb.VtctldClient interface.
+func (client *localVtctldClient) GetTransactionInfo(ctx context.Context, in *vtctldatapb.GetTransactionInfoRequest, opts ...grpc.CallOption) (*vtctldatapb.GetTransactionInfoResponse, error) {
+ return client.s.GetTransactionInfo(ctx, in)
+}
+
// GetUnresolvedTransactions is part of the vtctlservicepb.VtctldClient interface.
func (client *localVtctldClient) GetUnresolvedTransactions(ctx context.Context, in *vtctldatapb.GetUnresolvedTransactionsRequest, opts ...grpc.CallOption) (*vtctldatapb.GetUnresolvedTransactionsResponse, error) {
return client.s.GetUnresolvedTransactions(ctx, in)
diff --git a/go/vt/vtctl/reparentutil/emergency_reparenter.go b/go/vt/vtctl/reparentutil/emergency_reparenter.go
index b776a39e1d7..70faf8958c7 100644
--- a/go/vt/vtctl/reparentutil/emergency_reparenter.go
+++ b/go/vt/vtctl/reparentutil/emergency_reparenter.go
@@ -23,6 +23,7 @@ import (
"time"
"vitess.io/vitess/go/mysql/replication"
+ "vitess.io/vitess/go/vt/log"
"vitess.io/vitess/go/event"
"vitess.io/vitess/go/sets"
@@ -60,6 +61,7 @@ type EmergencyReparentOptions struct {
WaitAllTablets bool
WaitReplicasTimeout time.Duration
PreventCrossCellPromotion bool
+ ExpectedPrimaryAlias *topodatapb.TabletAlias
// Private options managed internally. We use value passing to avoid leaking
// these details back out.
@@ -157,6 +159,7 @@ func (erp *EmergencyReparenter) reparentShardLocked(ctx context.Context, ev *eve
validReplacementCandidates []*topodatapb.Tablet
betterCandidate *topodatapb.Tablet
isIdeal bool
+ isGTIDBased bool
)
shardInfo, err = erp.ts.GetShard(ctx, keyspace, shard)
@@ -165,6 +168,13 @@ func (erp *EmergencyReparenter) reparentShardLocked(ctx context.Context, ev *eve
}
ev.ShardInfo = *shardInfo
+ if opts.ExpectedPrimaryAlias != nil && !topoproto.TabletAliasEqual(opts.ExpectedPrimaryAlias, shardInfo.PrimaryAlias) {
+ return vterrors.Errorf(vtrpc.Code_FAILED_PRECONDITION, "primary %s is not equal to expected alias %s",
+ topoproto.TabletAliasString(shardInfo.PrimaryAlias),
+ topoproto.TabletAliasString(opts.ExpectedPrimaryAlias),
+ )
+ }
+
keyspaceDurability, err := erp.ts.GetKeyspaceDurability(ctx, keyspace)
if err != nil {
return err
@@ -205,9 +215,8 @@ func (erp *EmergencyReparenter) reparentShardLocked(ctx context.Context, ev *eve
return vterrors.Wrap(err, lostTopologyLockMsg)
}
- // find the valid candidates for becoming the primary
- // this is where we check for errant GTIDs and remove the tablets that have them from consideration
- validCandidates, err = FindValidEmergencyReparentCandidates(stoppedReplicationSnapshot.statusMap, stoppedReplicationSnapshot.primaryStatusMap)
+ // find the positions of all the valid candidates.
+ validCandidates, isGTIDBased, err = FindPositionsOfAllCandidates(stoppedReplicationSnapshot.statusMap, stoppedReplicationSnapshot.primaryStatusMap)
if err != nil {
return err
}
@@ -224,6 +233,14 @@ func (erp *EmergencyReparenter) reparentShardLocked(ctx context.Context, ev *eve
return err
}
+ // For GTID based replication, we will run errant GTID detection.
+ if isGTIDBased {
+ validCandidates, err = erp.findErrantGTIDs(ctx, validCandidates, stoppedReplicationSnapshot.statusMap, tabletMap, opts.WaitReplicasTimeout)
+ if err != nil {
+ return err
+ }
+ }
+
// Find the intermediate source for replication that we want other tablets to replicate from.
// This step chooses the most advanced tablet. Further ties are broken by using the promotion rule.
// In case the user has specified a tablet specifically, then it is selected, as long as it is the most advanced.
@@ -241,7 +258,7 @@ func (erp *EmergencyReparenter) reparentShardLocked(ctx context.Context, ev *eve
// 2. Remove the tablets with the Must_not promote rule
// 3. Remove cross-cell tablets if PreventCrossCellPromotion is specified
// Our final primary candidate MUST belong to this list of valid candidates
- validCandidateTablets, err = erp.filterValidCandidates(validCandidateTablets, stoppedReplicationSnapshot.reachableTablets, prevPrimary, opts)
+ validCandidateTablets, err = erp.filterValidCandidates(validCandidateTablets, stoppedReplicationSnapshot.reachableTablets, stoppedReplicationSnapshot.tabletsBackupState, prevPrimary, opts)
if err != nil {
return err
}
@@ -720,9 +737,12 @@ func (erp *EmergencyReparenter) identifyPrimaryCandidate(
return nil, vterrors.Errorf(vtrpc.Code_INTERNAL, "unreachable - did not find a valid primary candidate even though the valid candidate list was non-empty")
}
-// filterValidCandidates filters valid tablets, keeping only the ones which can successfully be promoted without any constraint failures and can make forward progress on being promoted
-func (erp *EmergencyReparenter) filterValidCandidates(validTablets []*topodatapb.Tablet, tabletsReachable []*topodatapb.Tablet, prevPrimary *topodatapb.Tablet, opts EmergencyReparentOptions) ([]*topodatapb.Tablet, error) {
+// filterValidCandidates filters valid tablets, keeping only the ones which can successfully be promoted without any
+// constraint failures and can make forward progress on being promoted. It will filter out candidates taking backups
+// if possible.
+func (erp *EmergencyReparenter) filterValidCandidates(validTablets []*topodatapb.Tablet, tabletsReachable []*topodatapb.Tablet, tabletsBackupState map[string]bool, prevPrimary *topodatapb.Tablet, opts EmergencyReparentOptions) ([]*topodatapb.Tablet, error) {
var restrictedValidTablets []*topodatapb.Tablet
+ var notPreferredValidTablets []*topodatapb.Tablet
for _, tablet := range validTablets {
tabletAliasStr := topoproto.TabletAliasString(tablet.Alias)
// Remove tablets which have MustNot promote rule since they must never be promoted
@@ -749,7 +769,177 @@ func (erp *EmergencyReparenter) filterValidCandidates(validTablets []*topodatapb
}
continue
}
- restrictedValidTablets = append(restrictedValidTablets, tablet)
+ // Put candidates that are running a backup in a separate list
+ backingUp, ok := tabletsBackupState[tabletAliasStr]
+ if ok && backingUp {
+ erp.logger.Infof("Setting %s in list of valid candidates taking a backup", tabletAliasStr)
+ notPreferredValidTablets = append(notPreferredValidTablets, tablet)
+ } else {
+ restrictedValidTablets = append(restrictedValidTablets, tablet)
+ }
+ }
+ if len(restrictedValidTablets) > 0 {
+ return restrictedValidTablets, nil
+ }
+
+ return notPreferredValidTablets, nil
+}
+
+// findErrantGTIDs tries to find errant GTIDs for the valid candidates and returns the updated list of valid candidates.
+// This function does not actually return the identities of errant GTID tablets, if any. It only returns the identities of non-errant GTID tablets, which are eligible for promotion.
+// The caller of this function (ERS) will then choose from among the list of candidate tablets, based on higher-level criteria.
+func (erp *EmergencyReparenter) findErrantGTIDs(
+ ctx context.Context,
+ validCandidates map[string]replication.Position,
+ statusMap map[string]*replicationdatapb.StopReplicationStatus,
+ tabletMap map[string]*topo.TabletInfo,
+ waitReplicasTimeout time.Duration,
+) (map[string]replication.Position, error) {
+ // First we need to collect the reparent journal length for all the candidates.
+ // This will tell us, which of the tablets are severly lagged, and haven't even seen all the primary promotions.
+ // Such severely lagging tablets cannot be used to find errant GTIDs in other tablets, seeing that they themselves don't have enough information.
+ reparentJournalLen, err := erp.gatherReparenJournalInfo(ctx, validCandidates, tabletMap, waitReplicasTimeout)
+ if err != nil {
+ return nil, err
+ }
+
+ // Find the maximum length of the reparent journal among all the candidates.
+ var maxLen int
+ for _, length := range reparentJournalLen {
+ maxLen = max(maxLen, length)
+ }
+
+ // Find the candidates with the maximum length of the reparent journal.
+ var maxLenCandidates []string
+ for alias, length := range reparentJournalLen {
+ if length == maxLen {
+ maxLenCandidates = append(maxLenCandidates, alias)
+ }
+ }
+
+ // We use all the candidates with the maximum length of the reparent journal to find the errant GTIDs amongst them.
+ var maxLenPositions []replication.Position
+ updatedValidCandidates := make(map[string]replication.Position)
+ for _, candidate := range maxLenCandidates {
+ status, ok := statusMap[candidate]
+ if !ok {
+ // If the tablet is not in the status map, and has the maximum length of the reparent journal,
+ // then it should be the latest primary and we don't need to run any errant GTID detection on it!
+ // There is a very unlikely niche case that can happen where we see two tablets report themselves as having
+ // the maximum reparent journal length and also be primaries. Here is the outline of it -
+ // 1. Tablet A is the primary and reparent journal length is 3.
+ // 2. It gets network partitioned, and we promote tablet B as the new primary.
+ // 3. tablet B gets network partitioned before it has written to the reparent journal, and a new ERS call ensues.
+ // 4. During this ERS call, both A and B are seen online. They would both report being primary tablets with the same reparent journal length.
+ // Even in this case, the best we can do is not run errant GTID detection on either, and let the split brain detection code
+ // deal with it, if A in fact has errant GTIDs.
+ maxLenPositions = append(maxLenPositions, validCandidates[candidate])
+ updatedValidCandidates[candidate] = validCandidates[candidate]
+ continue
+ }
+ // Store all the other candidate's positions so that we can run errant GTID detection using them.
+ otherPositions := make([]replication.Position, 0, len(maxLenCandidates)-1)
+ for _, otherCandidate := range maxLenCandidates {
+ if otherCandidate == candidate {
+ continue
+ }
+ otherPositions = append(otherPositions, validCandidates[otherCandidate])
+ }
+ // Run errant GTID detection and throw away any tablet that has errant GTIDs.
+ afterStatus := replication.ProtoToReplicationStatus(status.After)
+ errantGTIDs, err := replication.FindErrantGTIDs(afterStatus.RelayLogPosition, afterStatus.SourceUUID, otherPositions)
+ if err != nil {
+ return nil, err
+ }
+ if errantGTIDs != nil {
+ log.Errorf("skipping %v with GTIDSet:%v because we detected errant GTIDs - %v", candidate, afterStatus.RelayLogPosition.GTIDSet, errantGTIDs)
+ continue
+ }
+ maxLenPositions = append(maxLenPositions, validCandidates[candidate])
+ updatedValidCandidates[candidate] = validCandidates[candidate]
}
- return restrictedValidTablets, nil
+
+ // For all the other tablets, that are lagged enough that they haven't seen all the reparent journal entries,
+ // we run errant GTID detection by using the tablets with the maximum length of the reparent journal.
+ // We throw away any tablet that has errant GTIDs.
+ for alias, length := range reparentJournalLen {
+ if length == maxLen {
+ continue
+ }
+ // Here we don't want to send the source UUID. The reason is that all of these tablets are lagged,
+ // so we don't need to use the source UUID to discount any GTIDs.
+ // To explain this point further, let me use an example. Consider the following situation -
+ // 1. Tablet A is the primary and B is a rdonly replica.
+ // 2. They both get network partitioned, and then a new ERS call ensues, and we promote tablet C.
+ // 3. Tablet C also fails, and we run a new ERS call.
+ // 4. During this ERS, B comes back online and is visible. Since it hasn't seen the last reparent journal entry
+ // it will be considered lagged.
+ // 5. If it has an errant GTID that was written by A, then we want to find that errant GTID. Since B hasn't reparented to a
+ // different tablet, it would still be replicating from A. This means its server UUID would be A.
+ // 6. Because we don't want to discount the writes from tablet A, when we're doing the errant GTID detection on B, we
+ // choose not to pass in the server UUID.
+ // This exact scenario outlined above, can be found in the test for this function, subtest `Case 5a`.
+ // The idea is that if the tablet is lagged, then even the server UUID that it is replicating from
+ // should not be considered a valid source of writes that no other tablet has.
+ errantGTIDs, err := replication.FindErrantGTIDs(validCandidates[alias], replication.SID{}, maxLenPositions)
+ if err != nil {
+ return nil, err
+ }
+ if errantGTIDs != nil {
+ log.Errorf("skipping %v with GTIDSet:%v because we detected errant GTIDs - %v", alias, validCandidates[alias], errantGTIDs)
+ continue
+ }
+ updatedValidCandidates[alias] = validCandidates[alias]
+ }
+
+ return updatedValidCandidates, nil
+}
+
+// gatherReparenJournalInfo reads the reparent journal information from all the tablets in the valid candidates list.
+func (erp *EmergencyReparenter) gatherReparenJournalInfo(
+ ctx context.Context,
+ validCandidates map[string]replication.Position,
+ tabletMap map[string]*topo.TabletInfo,
+ waitReplicasTimeout time.Duration,
+) (map[string]int, error) {
+ reparentJournalLen := make(map[string]int)
+ var mu sync.Mutex
+ errCh := make(chan concurrency.Error)
+ defer close(errCh)
+
+ groupCtx, groupCancel := context.WithTimeout(ctx, waitReplicasTimeout)
+ defer groupCancel()
+
+ waiterCount := 0
+
+ for candidate := range validCandidates {
+ go func(alias string) {
+ var err error
+ var length int
+ defer func() {
+ errCh <- concurrency.Error{
+ Err: err,
+ }
+ }()
+ length, err = erp.tmc.ReadReparentJournalInfo(groupCtx, tabletMap[alias].Tablet)
+ mu.Lock()
+ defer mu.Unlock()
+ reparentJournalLen[alias] = length
+ }(candidate)
+
+ waiterCount++
+ }
+
+ errgroup := concurrency.ErrorGroup{
+ NumGoroutines: waiterCount,
+ NumRequiredSuccesses: waiterCount,
+ NumAllowedErrors: 0,
+ }
+ rec := errgroup.Wait(groupCancel, errCh)
+
+ if len(rec.Errors) != 0 {
+ return nil, vterrors.Wrapf(rec.Error(), "could not read reparent journal information within the provided waitReplicasTimeout (%s): %v", waitReplicasTimeout, rec.Error())
+ }
+
+ return reparentJournalLen, nil
}
diff --git a/go/vt/vtctl/reparentutil/emergency_reparenter_test.go b/go/vt/vtctl/reparentutil/emergency_reparenter_test.go
index ffd2c4a3926..3669c34dc11 100644
--- a/go/vt/vtctl/reparentutil/emergency_reparenter_test.go
+++ b/go/vt/vtctl/reparentutil/emergency_reparenter_test.go
@@ -19,6 +19,7 @@ package reparentutil
import (
"context"
"fmt"
+ "slices"
"testing"
"time"
@@ -26,6 +27,8 @@ import (
"github.com/stretchr/testify/require"
"vitess.io/vitess/go/mysql/replication"
+ logutilpb "vitess.io/vitess/go/vt/proto/logutil"
+ "vitess.io/vitess/go/vt/vttablet/tmclient"
"vitess.io/vitess/go/mysql"
"vitess.io/vitess/go/sets"
@@ -1810,6 +1813,55 @@ func TestEmergencyReparenter_reparentShardLocked(t *testing.T) {
shouldErr: true,
errShouldContain: "proposed primary zone1-0000000102 will not be able to make forward progress on being promoted",
},
+ {
+ name: "expected primary mismatch",
+ durability: "none",
+ emergencyReparentOps: EmergencyReparentOptions{
+ ExpectedPrimaryAlias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 101,
+ },
+ },
+ tmc: &testutil.TabletManagerClient{},
+ shards: []*vtctldatapb.Shard{
+ {
+ Keyspace: "testkeyspace",
+ Name: "-",
+ Shard: &topodatapb.Shard{
+ IsPrimaryServing: true,
+ PrimaryAlias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 100,
+ },
+ },
+ },
+ },
+ tablets: []*topodatapb.Tablet{
+ {
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 100,
+ },
+ Type: topodatapb.TabletType_PRIMARY,
+ Keyspace: "testkeyspace",
+ Shard: "-",
+ },
+ {
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 101,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ Keyspace: "testkeyspace",
+ Shard: "-",
+ },
+ },
+ keyspace: "testkeyspace",
+ shard: "-",
+ cells: []string{"zone1"},
+ shouldErr: true,
+ errShouldContain: "primary zone1-0000000100 is not equal to expected alias zone1-0000000101",
+ },
}
for _, tt := range tests {
@@ -1851,7 +1903,7 @@ func TestEmergencyReparenter_reparentShardLocked(t *testing.T) {
err := erp.reparentShardLocked(ctx, ev, tt.keyspace, tt.shard, tt.emergencyReparentOps)
if tt.shouldErr {
assert.Error(t, err)
- assert.Contains(t, err.Error(), tt.errShouldContain)
+ assert.ErrorContains(t, err, tt.errShouldContain)
return
}
@@ -4411,27 +4463,55 @@ func TestEmergencyReparenter_filterValidCandidates(t *testing.T) {
}
)
allTablets := []*topodatapb.Tablet{primaryTablet, replicaTablet, rdonlyTablet, replicaCrossCellTablet, rdonlyCrossCellTablet}
+ noTabletsTakingBackup := map[string]bool{
+ topoproto.TabletAliasString(primaryTablet.Alias): false, topoproto.TabletAliasString(replicaTablet.Alias): false,
+ topoproto.TabletAliasString(rdonlyTablet.Alias): false, topoproto.TabletAliasString(replicaCrossCellTablet.Alias): false,
+ topoproto.TabletAliasString(rdonlyCrossCellTablet.Alias): false,
+ }
+ replicaTakingBackup := map[string]bool{
+ topoproto.TabletAliasString(primaryTablet.Alias): false, topoproto.TabletAliasString(replicaTablet.Alias): true,
+ topoproto.TabletAliasString(rdonlyTablet.Alias): false, topoproto.TabletAliasString(replicaCrossCellTablet.Alias): false,
+ topoproto.TabletAliasString(rdonlyCrossCellTablet.Alias): false,
+ }
tests := []struct {
- name string
- durability string
- validTablets []*topodatapb.Tablet
- tabletsReachable []*topodatapb.Tablet
- prevPrimary *topodatapb.Tablet
- opts EmergencyReparentOptions
- filteredTablets []*topodatapb.Tablet
- errShouldContain string
+ name string
+ durability string
+ validTablets []*topodatapb.Tablet
+ tabletsReachable []*topodatapb.Tablet
+ tabletsTakingBackup map[string]bool
+ prevPrimary *topodatapb.Tablet
+ opts EmergencyReparentOptions
+ filteredTablets []*topodatapb.Tablet
+ errShouldContain string
}{
{
- name: "filter must not",
- durability: "none",
- validTablets: allTablets,
- tabletsReachable: allTablets,
- filteredTablets: []*topodatapb.Tablet{primaryTablet, replicaTablet, replicaCrossCellTablet},
+ name: "filter must not",
+ durability: "none",
+ validTablets: allTablets,
+ tabletsReachable: allTablets,
+ tabletsTakingBackup: noTabletsTakingBackup,
+ filteredTablets: []*topodatapb.Tablet{primaryTablet, replicaTablet, replicaCrossCellTablet},
+ }, {
+ name: "host taking backup must not be on the list when there are other candidates",
+ durability: "none",
+ validTablets: allTablets,
+ tabletsReachable: []*topodatapb.Tablet{replicaTablet, replicaCrossCellTablet, rdonlyTablet, rdonlyCrossCellTablet},
+ tabletsTakingBackup: replicaTakingBackup,
+ filteredTablets: []*topodatapb.Tablet{replicaCrossCellTablet},
}, {
- name: "filter cross cell",
- durability: "none",
- validTablets: allTablets,
- tabletsReachable: allTablets,
+ name: "host taking backup must be the only one on the list when there are no other candidates",
+ durability: "none",
+ validTablets: allTablets,
+ tabletsReachable: []*topodatapb.Tablet{replicaTablet, rdonlyTablet, rdonlyCrossCellTablet},
+ tabletsTakingBackup: replicaTakingBackup,
+ filteredTablets: []*topodatapb.Tablet{replicaTablet},
+ }, {
+ name: "filter cross cell",
+ durability: "none",
+ validTablets: allTablets,
+ tabletsReachable: allTablets,
+ tabletsTakingBackup: noTabletsTakingBackup,
+
prevPrimary: &topodatapb.Tablet{
Alias: &topodatapb.TabletAlias{
Cell: "zone-1",
@@ -4442,11 +4522,12 @@ func TestEmergencyReparenter_filterValidCandidates(t *testing.T) {
},
filteredTablets: []*topodatapb.Tablet{primaryTablet, replicaTablet},
}, {
- name: "filter establish",
- durability: "cross_cell",
- validTablets: []*topodatapb.Tablet{primaryTablet, replicaTablet},
- tabletsReachable: []*topodatapb.Tablet{primaryTablet, replicaTablet, rdonlyTablet, rdonlyCrossCellTablet},
- filteredTablets: nil,
+ name: "filter establish",
+ durability: "cross_cell",
+ validTablets: []*topodatapb.Tablet{primaryTablet, replicaTablet},
+ tabletsReachable: []*topodatapb.Tablet{primaryTablet, replicaTablet, rdonlyTablet, rdonlyCrossCellTablet},
+ tabletsTakingBackup: noTabletsTakingBackup,
+ filteredTablets: nil,
}, {
name: "filter mixed",
durability: "cross_cell",
@@ -4458,34 +4539,38 @@ func TestEmergencyReparenter_filterValidCandidates(t *testing.T) {
opts: EmergencyReparentOptions{
PreventCrossCellPromotion: true,
},
- validTablets: allTablets,
- tabletsReachable: allTablets,
- filteredTablets: []*topodatapb.Tablet{replicaCrossCellTablet},
+ validTablets: allTablets,
+ tabletsReachable: allTablets,
+ tabletsTakingBackup: noTabletsTakingBackup,
+ filteredTablets: []*topodatapb.Tablet{replicaCrossCellTablet},
}, {
- name: "error - requested primary must not",
- durability: "none",
- validTablets: allTablets,
- tabletsReachable: allTablets,
+ name: "error - requested primary must not",
+ durability: "none",
+ validTablets: allTablets,
+ tabletsReachable: allTablets,
+ tabletsTakingBackup: noTabletsTakingBackup,
opts: EmergencyReparentOptions{
NewPrimaryAlias: rdonlyTablet.Alias,
},
errShouldContain: "proposed primary zone-1-0000000003 has a must not promotion rule",
}, {
- name: "error - requested primary not in same cell",
- durability: "none",
- validTablets: allTablets,
- tabletsReachable: allTablets,
- prevPrimary: primaryTablet,
+ name: "error - requested primary not in same cell",
+ durability: "none",
+ validTablets: allTablets,
+ tabletsReachable: allTablets,
+ tabletsTakingBackup: noTabletsTakingBackup,
+ prevPrimary: primaryTablet,
opts: EmergencyReparentOptions{
PreventCrossCellPromotion: true,
NewPrimaryAlias: replicaCrossCellTablet.Alias,
},
errShouldContain: "proposed primary zone-2-0000000002 is is a different cell as the previous primary",
}, {
- name: "error - requested primary cannot establish",
- durability: "cross_cell",
- validTablets: allTablets,
- tabletsReachable: []*topodatapb.Tablet{primaryTablet, replicaTablet, rdonlyTablet, rdonlyCrossCellTablet},
+ name: "error - requested primary cannot establish",
+ durability: "cross_cell",
+ validTablets: allTablets,
+ tabletsTakingBackup: noTabletsTakingBackup,
+ tabletsReachable: []*topodatapb.Tablet{primaryTablet, replicaTablet, rdonlyTablet, rdonlyCrossCellTablet},
opts: EmergencyReparentOptions{
NewPrimaryAlias: primaryTablet.Alias,
},
@@ -4499,7 +4584,7 @@ func TestEmergencyReparenter_filterValidCandidates(t *testing.T) {
tt.opts.durability = durability
logger := logutil.NewMemoryLogger()
erp := NewEmergencyReparenter(nil, nil, logger)
- tabletList, err := erp.filterValidCandidates(tt.validTablets, tt.tabletsReachable, tt.prevPrimary, tt.opts)
+ tabletList, err := erp.filterValidCandidates(tt.validTablets, tt.tabletsReachable, tt.tabletsTakingBackup, tt.prevPrimary, tt.opts)
if tt.errShouldContain != "" {
require.Error(t, err)
require.Contains(t, err.Error(), tt.errShouldContain)
@@ -4510,3 +4595,942 @@ func TestEmergencyReparenter_filterValidCandidates(t *testing.T) {
})
}
}
+
+// getRelayLogPosition is a helper function that prints out the relay log positions.
+func getRelayLogPosition(gtidSets ...string) string {
+ u1 := "00000000-0000-0000-0000-000000000001"
+ u2 := "00000000-0000-0000-0000-000000000002"
+ u3 := "00000000-0000-0000-0000-000000000003"
+ u4 := "00000000-0000-0000-0000-000000000004"
+ uuids := []string{u1, u2, u3, u4}
+
+ res := "MySQL56/"
+ first := true
+ for idx, set := range gtidSets {
+ if set == "" {
+ continue
+ }
+ if !first {
+ res += ","
+ }
+ first = false
+ res += fmt.Sprintf("%s:%s", uuids[idx], set)
+ }
+ return res
+}
+
+// TestEmergencyReparenterFindErrantGTIDs tests that ERS can find the most advanced replica after marking tablets as errant.
+func TestEmergencyReparenterFindErrantGTIDs(t *testing.T) {
+ u1 := "00000000-0000-0000-0000-000000000001"
+ u2 := "00000000-0000-0000-0000-000000000002"
+ tests := []struct {
+ name string
+ tmc tmclient.TabletManagerClient
+ statusMap map[string]*replicationdatapb.StopReplicationStatus
+ primaryStatusMap map[string]*replicationdatapb.PrimaryStatus
+ tabletMap map[string]*topo.TabletInfo
+ wantedCandidates []string
+ wantMostAdvancedPossible []string
+ wantErr string
+ }{
+ {
+ name: "Case 1a: No Errant GTIDs. This is the first reparent. A replica is the most advanced.",
+ tmc: &testutil.TabletManagerClient{
+ ReadReparentJournalInfoResults: map[string]int{
+ "zone1-0000000102": 1,
+ "zone1-0000000103": 1,
+ "zone1-0000000104": 1,
+ },
+ },
+ tabletMap: map[string]*topo.TabletInfo{
+ "zone1-0000000102": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000102",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 102,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ "zone1-0000000103": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000103",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 103,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ "zone1-0000000104": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000104",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 104,
+ },
+ Type: topodatapb.TabletType_RDONLY,
+ },
+ },
+ },
+ statusMap: map[string]*replicationdatapb.StopReplicationStatus{
+ "zone1-0000000102": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-100"),
+ SourceUuid: u1,
+ },
+ },
+ "zone1-0000000103": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-99"),
+ SourceUuid: u1,
+ },
+ },
+ "zone1-0000000104": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-100"),
+ SourceUuid: u1,
+ },
+ },
+ },
+ wantedCandidates: []string{"zone1-0000000102", "zone1-0000000103", "zone1-0000000104"},
+ wantMostAdvancedPossible: []string{"zone1-0000000102"},
+ },
+ {
+ name: "Case 1b: No Errant GTIDs. This is not the first reparent. A replica is the most advanced.",
+ tabletMap: map[string]*topo.TabletInfo{
+ "zone1-0000000102": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000102",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 102,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ "zone1-0000000103": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000103",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 103,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ "zone1-0000000104": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000104",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 104,
+ },
+ Type: topodatapb.TabletType_RDONLY,
+ },
+ },
+ },
+ tmc: &testutil.TabletManagerClient{
+ ReadReparentJournalInfoResults: map[string]int{
+ "zone1-0000000102": 2,
+ "zone1-0000000103": 2,
+ "zone1-0000000104": 2,
+ },
+ },
+ statusMap: map[string]*replicationdatapb.StopReplicationStatus{
+ "zone1-0000000102": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-100", "1-30"),
+ SourceUuid: u1,
+ },
+ },
+ "zone1-0000000103": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-99", "1-30"),
+ SourceUuid: u1,
+ },
+ },
+ "zone1-0000000104": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-100", "1-30"),
+ SourceUuid: u1,
+ },
+ },
+ },
+ wantedCandidates: []string{"zone1-0000000102", "zone1-0000000103", "zone1-0000000104"},
+ wantMostAdvancedPossible: []string{"zone1-0000000102"},
+ },
+ {
+ name: "Case 1c: No Errant GTIDs. This is not the first reparent. A rdonly is the most advanced.",
+ tabletMap: map[string]*topo.TabletInfo{
+ "zone1-0000000102": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000102",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 102,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ "zone1-0000000103": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000103",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 103,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ "zone1-0000000104": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000104",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 104,
+ },
+ Type: topodatapb.TabletType_RDONLY,
+ },
+ },
+ },
+ tmc: &testutil.TabletManagerClient{
+ ReadReparentJournalInfoResults: map[string]int{
+ "zone1-0000000102": 2,
+ "zone1-0000000103": 2,
+ "zone1-0000000104": 2,
+ },
+ },
+ statusMap: map[string]*replicationdatapb.StopReplicationStatus{
+ "zone1-0000000102": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-100", "1-30"),
+ SourceUuid: u1,
+ },
+ },
+ "zone1-0000000103": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-99", "1-30"),
+ SourceUuid: u1,
+ },
+ },
+ "zone1-0000000104": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-101", "1-30"),
+ SourceUuid: u1,
+ },
+ },
+ },
+ wantedCandidates: []string{"zone1-0000000102", "zone1-0000000103", "zone1-0000000104"},
+ wantMostAdvancedPossible: []string{"zone1-0000000104"},
+ },
+ {
+ name: "Case 2: Only 1 tablet is recent and all others are severely lagged",
+ tabletMap: map[string]*topo.TabletInfo{
+ "zone1-0000000102": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000102",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 102,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ "zone1-0000000103": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000103",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 103,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ "zone1-0000000104": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000104",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 104,
+ },
+ Type: topodatapb.TabletType_RDONLY,
+ },
+ },
+ },
+ tmc: &testutil.TabletManagerClient{
+ ReadReparentJournalInfoResults: map[string]int{
+ "zone1-0000000102": 3,
+ "zone1-0000000103": 2,
+ "zone1-0000000104": 1,
+ },
+ },
+ statusMap: map[string]*replicationdatapb.StopReplicationStatus{
+ "zone1-0000000102": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-100", "1-30", "1-100"),
+ SourceUuid: u1,
+ },
+ },
+ "zone1-0000000103": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("", "1-30", "1-50"),
+ SourceUuid: u1,
+ },
+ },
+ "zone1-0000000104": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("", "1-30"),
+ SourceUuid: u1,
+ },
+ },
+ },
+ wantedCandidates: []string{"zone1-0000000102", "zone1-0000000103", "zone1-0000000104"},
+ wantMostAdvancedPossible: []string{"zone1-0000000102"},
+ },
+ {
+ name: "Case 3: All replicas severely lagged (Primary tablet dies with t1: u1-100, u2:1-30, u3:1-100)",
+ tabletMap: map[string]*topo.TabletInfo{
+ "zone1-0000000102": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000102",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 102,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ "zone1-0000000103": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000103",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 103,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ "zone1-0000000104": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000104",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 104,
+ },
+ Type: topodatapb.TabletType_RDONLY,
+ },
+ },
+ },
+ tmc: &testutil.TabletManagerClient{
+ ReadReparentJournalInfoResults: map[string]int{
+ "zone1-0000000102": 2,
+ "zone1-0000000103": 2,
+ "zone1-0000000104": 1,
+ },
+ },
+ statusMap: map[string]*replicationdatapb.StopReplicationStatus{
+ "zone1-0000000102": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("", "1-30", "1-50"),
+ SourceUuid: u1,
+ },
+ },
+ "zone1-0000000103": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("", "1-30", "1-50"),
+ SourceUuid: u1,
+ },
+ },
+ "zone1-0000000104": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("", "1-30"),
+ SourceUuid: u1,
+ },
+ },
+ },
+ wantedCandidates: []string{"zone1-0000000102", "zone1-0000000103", "zone1-0000000104"},
+ wantMostAdvancedPossible: []string{"zone1-0000000102", "zone1-0000000103"},
+ },
+ {
+ name: "Case 4: Primary dies and comes back, has an extra UUID, right at the point when a new ERS has started.",
+ tabletMap: map[string]*topo.TabletInfo{
+ "zone1-0000000102": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000102",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 102,
+ },
+ Type: topodatapb.TabletType_PRIMARY,
+ },
+ },
+ "zone1-0000000103": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000103",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 103,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ "zone1-0000000104": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000104",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 104,
+ },
+ Type: topodatapb.TabletType_RDONLY,
+ },
+ },
+ },
+ tmc: &testutil.TabletManagerClient{
+ ReadReparentJournalInfoResults: map[string]int{
+ "zone1-0000000102": 2,
+ "zone1-0000000103": 3,
+ "zone1-0000000104": 3,
+ },
+ },
+ statusMap: map[string]*replicationdatapb.StopReplicationStatus{
+ "zone1-0000000103": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-100", "1-30", "1-50"),
+ SourceUuid: u1,
+ },
+ },
+ "zone1-0000000104": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-90", "1-30", "1-50"),
+ SourceUuid: u1,
+ },
+ },
+ },
+ primaryStatusMap: map[string]*replicationdatapb.PrimaryStatus{
+ "zone1-0000000102": {
+ Position: getRelayLogPosition("", "1-31", "1-50"),
+ },
+ },
+ wantedCandidates: []string{"zone1-0000000103", "zone1-0000000104"},
+ wantMostAdvancedPossible: []string{"zone1-0000000103"},
+ },
+ {
+ name: "Case 5a: Old Primary and a rdonly have errant GTID. Old primary is permanently lost and comes up from backup and ronly comes up during ERS",
+ tabletMap: map[string]*topo.TabletInfo{
+ "zone1-0000000102": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000102",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 102,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ "zone1-0000000103": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000103",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 103,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ "zone1-0000000104": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000104",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 104,
+ },
+ Type: topodatapb.TabletType_RDONLY,
+ },
+ },
+ },
+ tmc: &testutil.TabletManagerClient{
+ ReadReparentJournalInfoResults: map[string]int{
+ "zone1-0000000102": 2,
+ "zone1-0000000103": 3,
+ "zone1-0000000104": 2,
+ },
+ },
+ statusMap: map[string]*replicationdatapb.StopReplicationStatus{
+ "zone1-0000000102": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("", "1-20", "1-50"),
+ SourceUuid: u1,
+ },
+ },
+ "zone1-0000000103": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-100", "1-30", "1-50"),
+ SourceUuid: u1,
+ },
+ },
+ "zone1-0000000104": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("", "1-31", "1-50"),
+ SourceUuid: u2,
+ },
+ },
+ },
+ wantedCandidates: []string{"zone1-0000000102", "zone1-0000000103"},
+ wantMostAdvancedPossible: []string{"zone1-0000000103"},
+ },
+ {
+ name: "Case 5b: Old Primary and a rdonly have errant GTID. Both come up during ERS",
+ tabletMap: map[string]*topo.TabletInfo{
+ "zone1-0000000102": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000102",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 102,
+ },
+ Type: topodatapb.TabletType_PRIMARY,
+ },
+ },
+ "zone1-0000000103": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000103",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 103,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ "zone1-0000000104": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000104",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 104,
+ },
+ Type: topodatapb.TabletType_RDONLY,
+ },
+ },
+ },
+ tmc: &testutil.TabletManagerClient{
+ ReadReparentJournalInfoResults: map[string]int{
+ "zone1-0000000102": 2,
+ "zone1-0000000103": 3,
+ "zone1-0000000104": 2,
+ },
+ },
+ statusMap: map[string]*replicationdatapb.StopReplicationStatus{
+ "zone1-0000000103": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-100", "1-30", "1-50"),
+ SourceUuid: u1,
+ },
+ },
+ "zone1-0000000104": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("", "1-31", "1-50"),
+ SourceUuid: u2,
+ },
+ },
+ },
+ primaryStatusMap: map[string]*replicationdatapb.PrimaryStatus{
+ "zone1-0000000102": {
+ Position: getRelayLogPosition("", "1-31", "1-50"),
+ },
+ },
+ wantedCandidates: []string{"zone1-0000000103"},
+ wantMostAdvancedPossible: []string{"zone1-0000000103"},
+ },
+ {
+ name: "Case 6a: Errant GTID introduced on a replica server by a write that shouldn't happen. The replica with errant GTID is not the most advanced.",
+ tabletMap: map[string]*topo.TabletInfo{
+ "zone1-0000000102": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000102",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 102,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ "zone1-0000000103": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000103",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 103,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ "zone1-0000000104": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000104",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 104,
+ },
+ Type: topodatapb.TabletType_RDONLY,
+ },
+ },
+ },
+ tmc: &testutil.TabletManagerClient{
+ ReadReparentJournalInfoResults: map[string]int{
+ "zone1-0000000102": 3,
+ "zone1-0000000103": 3,
+ "zone1-0000000104": 3,
+ },
+ },
+ statusMap: map[string]*replicationdatapb.StopReplicationStatus{
+ "zone1-0000000102": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-99", "1-31", "1-50"),
+ SourceUuid: u1,
+ },
+ },
+ "zone1-0000000103": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-100", "1-30", "1-50"),
+ SourceUuid: u1,
+ },
+ },
+ "zone1-0000000104": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-100", "1-30", "1-50"),
+ SourceUuid: u1,
+ },
+ },
+ },
+ wantedCandidates: []string{"zone1-0000000103", "zone1-0000000104"},
+ wantMostAdvancedPossible: []string{"zone1-0000000103", "zone1-0000000104"},
+ },
+ {
+ name: "Case 6b: Errant GTID introduced on a replica server by a write that shouldn't happen. The replica with errant GTID is the most advanced.",
+ tabletMap: map[string]*topo.TabletInfo{
+ "zone1-0000000102": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000102",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 102,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ "zone1-0000000103": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000103",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 103,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ "zone1-0000000104": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000104",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 104,
+ },
+ Type: topodatapb.TabletType_RDONLY,
+ },
+ },
+ },
+ tmc: &testutil.TabletManagerClient{
+ ReadReparentJournalInfoResults: map[string]int{
+ "zone1-0000000102": 3,
+ "zone1-0000000103": 3,
+ "zone1-0000000104": 2,
+ },
+ },
+ statusMap: map[string]*replicationdatapb.StopReplicationStatus{
+ "zone1-0000000102": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-101", "1-31", "1-50"),
+ SourceUuid: u1,
+ },
+ },
+ "zone1-0000000103": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-100", "1-30", "1-50"),
+ SourceUuid: u1,
+ },
+ },
+ "zone1-0000000104": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-100", "1-30", "1-50"),
+ SourceUuid: u1,
+ },
+ },
+ },
+ wantedCandidates: []string{"zone1-0000000103", "zone1-0000000104"},
+ wantMostAdvancedPossible: []string{"zone1-0000000103"},
+ },
+ {
+ name: "Case 6c: Errant GTID introduced on a replica server by a write that shouldn't happen. Only 2 tablets exist.",
+ tabletMap: map[string]*topo.TabletInfo{
+ "zone1-0000000102": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000102",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 102,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ "zone1-0000000103": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000103",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 103,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ },
+ tmc: &testutil.TabletManagerClient{
+ ReadReparentJournalInfoResults: map[string]int{
+ "zone1-0000000102": 3,
+ "zone1-0000000103": 3,
+ },
+ },
+ statusMap: map[string]*replicationdatapb.StopReplicationStatus{
+ "zone1-0000000102": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-100", "1-31", "1-50"),
+ SourceUuid: u1,
+ },
+ },
+ "zone1-0000000103": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-100", "1-30", "1-50"),
+ SourceUuid: u1,
+ },
+ },
+ },
+ wantedCandidates: []string{"zone1-0000000103"},
+ wantMostAdvancedPossible: []string{"zone1-0000000103"},
+ },
+ {
+ name: "Case 7: Both replicas with errant GTIDs",
+ tabletMap: map[string]*topo.TabletInfo{
+ "zone1-0000000102": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000102",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 102,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ "zone1-0000000103": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000103",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 103,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ "zone1-0000000104": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000104",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 104,
+ },
+ Type: topodatapb.TabletType_RDONLY,
+ },
+ },
+ },
+ tmc: &testutil.TabletManagerClient{
+ ReadReparentJournalInfoResults: map[string]int{
+ "zone1-0000000102": 3,
+ "zone1-0000000103": 3,
+ "zone1-0000000104": 3,
+ },
+ },
+ statusMap: map[string]*replicationdatapb.StopReplicationStatus{
+ "zone1-0000000102": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-100", "1-31", "1-50"),
+ SourceUuid: u1,
+ },
+ },
+ "zone1-0000000103": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-100", "1-30", "1-51"),
+ SourceUuid: u1,
+ },
+ },
+ "zone1-0000000104": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-90", "1-30", "1-50"),
+ SourceUuid: u1,
+ },
+ },
+ },
+ wantedCandidates: []string{"zone1-0000000104"},
+ wantMostAdvancedPossible: []string{"zone1-0000000104"},
+ },
+ {
+ name: "Case 8a: Old primary and rdonly have errant GTID and come up during ERS and replica has an errant GTID introduced by the user.",
+ tabletMap: map[string]*topo.TabletInfo{
+ "zone1-0000000102": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000102",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 102,
+ },
+ Type: topodatapb.TabletType_PRIMARY,
+ },
+ },
+ "zone1-0000000103": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000103",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 103,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ "zone1-0000000104": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000104",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 104,
+ },
+ Type: topodatapb.TabletType_RDONLY,
+ },
+ },
+ },
+ tmc: &testutil.TabletManagerClient{
+ ReadReparentJournalInfoResults: map[string]int{
+ "zone1-0000000102": 2,
+ "zone1-0000000103": 3,
+ "zone1-0000000104": 2,
+ },
+ },
+ statusMap: map[string]*replicationdatapb.StopReplicationStatus{
+ "zone1-0000000103": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-100", "1-30", "1-51"),
+ SourceUuid: u1,
+ },
+ },
+ "zone1-0000000104": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("", "1-31", "1-50"),
+ SourceUuid: u2,
+ },
+ },
+ },
+ primaryStatusMap: map[string]*replicationdatapb.PrimaryStatus{
+ "zone1-0000000102": {
+ Position: getRelayLogPosition("", "1-31", "1-50"),
+ },
+ },
+ wantedCandidates: []string{"zone1-0000000103"},
+ wantMostAdvancedPossible: []string{"zone1-0000000103"},
+ },
+ {
+ name: "Reading reparent journal fails",
+ tabletMap: map[string]*topo.TabletInfo{
+ "zone1-0000000102": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000102",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 102,
+ },
+ Type: topodatapb.TabletType_PRIMARY,
+ },
+ },
+ "zone1-0000000103": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000103",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 103,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ "zone1-0000000104": {
+ Tablet: &topodatapb.Tablet{
+ Hostname: "zone1-0000000104",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 104,
+ },
+ Type: topodatapb.TabletType_RDONLY,
+ },
+ },
+ },
+ tmc: &testutil.TabletManagerClient{
+ ReadReparentJournalInfoResults: map[string]int{},
+ },
+ statusMap: map[string]*replicationdatapb.StopReplicationStatus{
+ "zone1-0000000103": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("1-100", "1-30", "1-51"),
+ SourceUuid: u1,
+ },
+ },
+ "zone1-0000000104": {
+ After: &replicationdatapb.Status{
+ RelayLogPosition: getRelayLogPosition("", "1-31", "1-50"),
+ SourceUuid: u2,
+ },
+ },
+ },
+ primaryStatusMap: map[string]*replicationdatapb.PrimaryStatus{
+ "zone1-0000000102": {
+ Position: getRelayLogPosition("", "1-31", "1-50"),
+ },
+ },
+ wantErr: "could not read reparent journal information",
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ erp := &EmergencyReparenter{
+ tmc: tt.tmc,
+ }
+ validCandidates, isGtid, err := FindPositionsOfAllCandidates(tt.statusMap, tt.primaryStatusMap)
+ require.NoError(t, err)
+ require.True(t, isGtid)
+ candidates, err := erp.findErrantGTIDs(context.Background(), validCandidates, tt.statusMap, tt.tabletMap, 10*time.Second)
+ if tt.wantErr != "" {
+ require.ErrorContains(t, err, tt.wantErr)
+ return
+ }
+ require.NoError(t, err)
+ keys := make([]string, 0, len(candidates))
+ for key := range candidates {
+ keys = append(keys, key)
+ }
+ slices.Sort(keys)
+ require.ElementsMatch(t, tt.wantedCandidates, keys)
+
+ dp, err := GetDurabilityPolicy("semi_sync")
+ require.NoError(t, err)
+ ers := EmergencyReparenter{logger: logutil.NewCallbackLogger(func(*logutilpb.Event) {})}
+ winningPrimary, _, err := ers.findMostAdvanced(candidates, tt.tabletMap, EmergencyReparentOptions{durability: dp})
+ require.NoError(t, err)
+ require.True(t, slices.Contains(tt.wantMostAdvancedPossible, winningPrimary.Hostname), winningPrimary.Hostname)
+ })
+ }
+}
diff --git a/go/vt/vtctl/reparentutil/planned_reparenter.go b/go/vt/vtctl/reparentutil/planned_reparenter.go
index 0852583bec9..91669e33b5f 100644
--- a/go/vt/vtctl/reparentutil/planned_reparenter.go
+++ b/go/vt/vtctl/reparentutil/planned_reparenter.go
@@ -61,6 +61,7 @@ type PlannedReparenter struct {
type PlannedReparentOptions struct {
NewPrimaryAlias *topodatapb.TabletAlias
AvoidPrimaryAlias *topodatapb.TabletAlias
+ ExpectedPrimaryAlias *topodatapb.TabletAlias
WaitReplicasTimeout time.Duration
TolerableReplLag time.Duration
AllowCrossCellPromotion bool
@@ -507,6 +508,13 @@ func (pr *PlannedReparenter) reparentShardLocked(
return err
}
+ if opts.ExpectedPrimaryAlias != nil && !topoproto.TabletAliasEqual(opts.ExpectedPrimaryAlias, shardInfo.PrimaryAlias) {
+ return vterrors.Errorf(vtrpc.Code_FAILED_PRECONDITION, "primary %s is not equal to expected alias %s",
+ topoproto.TabletAliasString(shardInfo.PrimaryAlias),
+ topoproto.TabletAliasString(opts.ExpectedPrimaryAlias),
+ )
+ }
+
keyspaceDurability, err := pr.ts.GetKeyspaceDurability(ctx, keyspace)
if err != nil {
return err
diff --git a/go/vt/vtctl/reparentutil/planned_reparenter_flaky_test.go b/go/vt/vtctl/reparentutil/planned_reparenter_flaky_test.go
index 3a37e178ff8..8e2ee8f9df7 100644
--- a/go/vt/vtctl/reparentutil/planned_reparenter_flaky_test.go
+++ b/go/vt/vtctl/reparentutil/planned_reparenter_flaky_test.go
@@ -2510,6 +2510,7 @@ func TestPlannedReparenter_reparentShardLocked(t *testing.T) {
name string
tmc tmclient.TabletManagerClient
tablets []*topodatapb.Tablet
+ shards []*vtctldatapb.Shard
unlockTopo bool
ev *events.Reparent
@@ -2517,8 +2518,9 @@ func TestPlannedReparenter_reparentShardLocked(t *testing.T) {
shard string
opts PlannedReparentOptions
- shouldErr bool
- expectedEvent *events.Reparent
+ shouldErr bool
+ errShouldContain string
+ expectedEvent *events.Reparent
}{
{
name: "success: current primary cannot be determined", // "Case (1)"
@@ -3296,6 +3298,57 @@ func TestPlannedReparenter_reparentShardLocked(t *testing.T) {
},
},
},
+ {
+ name: "expected primary mismatch",
+ tmc: &testutil.TabletManagerClient{},
+ shards: []*vtctldatapb.Shard{
+ {
+ Keyspace: "testkeyspace",
+ Name: "-",
+ Shard: &topodatapb.Shard{
+ IsPrimaryServing: true,
+ PrimaryAlias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 100,
+ },
+ },
+ },
+ },
+ tablets: []*topodatapb.Tablet{
+ {
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 100,
+ },
+ Type: topodatapb.TabletType_PRIMARY,
+ Keyspace: "testkeyspace",
+ Shard: "-",
+ },
+ {
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 200,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ Keyspace: "testkeyspace",
+ Shard: "-",
+ },
+ },
+
+ ev: &events.Reparent{},
+ keyspace: "testkeyspace",
+ shard: "-",
+ opts: PlannedReparentOptions{
+ // This is not the shard primary, so it should cause an error.
+ ExpectedPrimaryAlias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 200,
+ },
+ },
+ shouldErr: true,
+ errShouldContain: "primary zone1-0000000100 is not equal to expected alias zone1-0000000200",
+ expectedEvent: nil,
+ },
}
logger := logutil.NewMemoryLogger()
@@ -3312,9 +3365,13 @@ func TestPlannedReparenter_reparentShardLocked(t *testing.T) {
testutil.AddTablets(ctx, t, ts, &testutil.AddTabletOptions{
AlsoSetShardPrimary: true,
ForceSetShardPrimary: true, // Some of our test cases count on having multiple primaries, so let the last one "win".
- SkipShardCreation: false,
+ SkipShardCreation: len(tt.shards) > 0,
}, tt.tablets...)
+ if len(tt.shards) > 0 {
+ testutil.AddShards(ctx, t, ts, tt.shards...)
+ }
+
if !tt.unlockTopo {
lctx, unlock, err := ts.LockShard(ctx, tt.keyspace, tt.shard, "locking for testing")
require.NoError(t, err, "could not lock %s/%s for testing", tt.keyspace, tt.shard)
@@ -3338,7 +3395,7 @@ func TestPlannedReparenter_reparentShardLocked(t *testing.T) {
err := pr.reparentShardLocked(ctx, tt.ev, tt.keyspace, tt.shard, tt.opts)
if tt.shouldErr {
assert.Error(t, err)
-
+ assert.ErrorContains(t, err, tt.errShouldContain)
return
}
diff --git a/go/vt/vtctl/reparentutil/reparent_sorter_test.go b/go/vt/vtctl/reparentutil/reparent_sorter_test.go
index ae5d56e884e..87e7b253d54 100644
--- a/go/vt/vtctl/reparentutil/reparent_sorter_test.go
+++ b/go/vt/vtctl/reparentutil/reparent_sorter_test.go
@@ -22,7 +22,6 @@ import (
"github.com/stretchr/testify/require"
"vitess.io/vitess/go/mysql/replication"
-
topodatapb "vitess.io/vitess/go/vt/proto/topodata"
)
diff --git a/go/vt/vtctl/reparentutil/replication.go b/go/vt/vtctl/reparentutil/replication.go
index d04a1992d2e..17dbaeae015 100644
--- a/go/vt/vtctl/reparentutil/replication.go
+++ b/go/vt/vtctl/reparentutil/replication.go
@@ -39,13 +39,13 @@ import (
"vitess.io/vitess/go/vt/vttablet/tmclient"
)
-// FindValidEmergencyReparentCandidates will find candidates for an emergency
+// FindPositionsOfAllCandidates will find candidates for an emergency
// reparent, and, if successful, return a mapping of those tablet aliases (as
// raw strings) to their replication positions for later comparison.
-func FindValidEmergencyReparentCandidates(
+func FindPositionsOfAllCandidates(
statusMap map[string]*replicationdatapb.StopReplicationStatus,
primaryStatusMap map[string]*replicationdatapb.PrimaryStatus,
-) (map[string]replication.Position, error) {
+) (map[string]replication.Position, bool, error) {
replicationStatusMap := make(map[string]*replication.ReplicationStatus, len(statusMap))
positionMap := make(map[string]replication.Position)
@@ -79,68 +79,33 @@ func FindValidEmergencyReparentCandidates(
}
if isGTIDBased && emptyRelayPosErrorRecorder.HasErrors() {
- return nil, emptyRelayPosErrorRecorder.Error()
+ return nil, false, emptyRelayPosErrorRecorder.Error()
}
if isGTIDBased && isNonGTIDBased {
- return nil, vterrors.Errorf(vtrpc.Code_FAILED_PRECONDITION, "encountered mix of GTID-based and non GTID-based relay logs")
+ return nil, false, vterrors.Errorf(vtrpc.Code_FAILED_PRECONDITION, "encountered mix of GTID-based and non GTID-based relay logs")
}
- // Create relevant position list of errant GTID-based positions for later
- // comparison.
+ // Store the final positions in the map.
for alias, status := range replicationStatusMap {
- // If we're not GTID-based, no need to search for errant GTIDs, so just
- // add the position to the map and continue.
if !isGTIDBased {
positionMap[alias] = status.Position
continue
}
-
- // This condition should really never happen, since we did the same cast
- // in the earlier loop, but let's be doubly sure.
- relayLogGTIDSet, ok := status.RelayLogPosition.GTIDSet.(replication.Mysql56GTIDSet)
- if !ok {
- return nil, vterrors.Errorf(vtrpc.Code_FAILED_PRECONDITION, "we got a filled-in relay log position, but it's not of type Mysql56GTIDSet, even though we've determined we need to use GTID based assesment")
- }
-
- // We need to remove this alias's status from the list, otherwise the
- // GTID diff will always be empty.
- statusList := make([]*replication.ReplicationStatus, 0, len(replicationStatusMap)-1)
-
- for a, s := range replicationStatusMap {
- if a != alias {
- statusList = append(statusList, s)
- }
- }
-
- errantGTIDs, err := status.FindErrantGTIDs(statusList)
- switch {
- case err != nil:
- // Could not look up GTIDs to determine if we have any. It's not
- // safe to continue.
- return nil, err
- case len(errantGTIDs) != 0:
- // This tablet has errant GTIDs. It's not a valid candidate for
- // reparent, so don't insert it into the final mapping.
- log.Errorf("skipping %v with GTIDSet:%v because we detected errant GTIDs - %v", alias, relayLogGTIDSet, errantGTIDs)
- continue
- }
-
- pos := replication.Position{GTIDSet: relayLogGTIDSet}
- positionMap[alias] = pos
+ positionMap[alias] = status.RelayLogPosition
}
for alias, primaryStatus := range primaryStatusMap {
executedPosition, err := replication.DecodePosition(primaryStatus.Position)
if err != nil {
- return nil, vterrors.Wrapf(err, "could not decode a primary status executed position for tablet %v: %v", alias, err)
+ return nil, false, vterrors.Wrapf(err, "could not decode a primary status executed position for tablet %v: %v", alias, err)
}
positionMap[alias] = executedPosition
}
- return positionMap, nil
+ return positionMap, isGTIDBased, nil
}
// ReplicaWasRunning returns true if a StopReplicationStatus indicates that the
@@ -200,9 +165,10 @@ func SetReplicationSource(ctx context.Context, ts *topo.Server, tmc tmclient.Tab
// replicationSnapshot stores the status maps and the tablets that were reachable
// when trying to stopReplicationAndBuildStatusMaps.
type replicationSnapshot struct {
- statusMap map[string]*replicationdatapb.StopReplicationStatus
- primaryStatusMap map[string]*replicationdatapb.PrimaryStatus
- reachableTablets []*topodatapb.Tablet
+ statusMap map[string]*replicationdatapb.StopReplicationStatus
+ primaryStatusMap map[string]*replicationdatapb.PrimaryStatus
+ reachableTablets []*topodatapb.Tablet
+ tabletsBackupState map[string]bool
}
// stopReplicationAndBuildStatusMaps stops replication on all replicas, then
@@ -228,9 +194,10 @@ func stopReplicationAndBuildStatusMaps(
errChan = make(chan concurrency.Error)
allTablets []*topodatapb.Tablet
res = &replicationSnapshot{
- statusMap: map[string]*replicationdatapb.StopReplicationStatus{},
- primaryStatusMap: map[string]*replicationdatapb.PrimaryStatus{},
- reachableTablets: []*topodatapb.Tablet{},
+ statusMap: map[string]*replicationdatapb.StopReplicationStatus{},
+ primaryStatusMap: map[string]*replicationdatapb.PrimaryStatus{},
+ reachableTablets: []*topodatapb.Tablet{},
+ tabletsBackupState: map[string]bool{},
}
)
@@ -272,6 +239,20 @@ func stopReplicationAndBuildStatusMaps(
err = vterrors.Wrapf(err, "error when getting replication status for alias %v: %v", alias, err)
}
} else {
+ isTakingBackup := false
+
+ // Prefer the most up-to-date information regarding whether the tablet is taking a backup from the After
+ // replication status, but fall back to the Before status if After is nil.
+ if stopReplicationStatus.After != nil {
+ isTakingBackup = stopReplicationStatus.After.BackupRunning
+ } else if stopReplicationStatus.Before != nil {
+ isTakingBackup = stopReplicationStatus.Before.BackupRunning
+ }
+
+ m.Lock()
+ res.tabletsBackupState[alias] = isTakingBackup
+ m.Unlock()
+
var sqlThreadRunning bool
// Check if the sql thread was running for the tablet
sqlThreadRunning, err = SQLThreadWasRunning(stopReplicationStatus)
diff --git a/go/vt/vtctl/reparentutil/replication_test.go b/go/vt/vtctl/reparentutil/replication_test.go
index 666b41859cf..1b36186efb8 100644
--- a/go/vt/vtctl/reparentutil/replication_test.go
+++ b/go/vt/vtctl/reparentutil/replication_test.go
@@ -46,7 +46,7 @@ func TestMain(m *testing.M) {
os.Exit(m.Run())
}
-func TestFindValidEmergencyReparentCandidates(t *testing.T) {
+func TestFindPositionsOfAllCandidates(t *testing.T) {
t.Parallel()
tests := []struct {
@@ -64,8 +64,9 @@ func TestFindValidEmergencyReparentCandidates(t *testing.T) {
// point is, the combination of (1) whether the test should error and
// (2) the set of keys we expect in the map is enough to fully assert on
// the correctness of the behavior of this functional unit.
- expected []string
- shouldErr bool
+ expected []string
+ expectedGTIDBased bool
+ shouldErr bool
}{
{
name: "success",
@@ -88,8 +89,9 @@ func TestFindValidEmergencyReparentCandidates(t *testing.T) {
Position: "MySQL56/3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5",
},
},
- expected: []string{"r1", "r2", "p1"},
- shouldErr: false,
+ expected: []string{"r1", "r2", "p1"},
+ expectedGTIDBased: true,
+ shouldErr: false,
}, {
name: "success for single tablet",
statusMap: map[string]*replicationdatapb.StopReplicationStatus{
@@ -100,9 +102,10 @@ func TestFindValidEmergencyReparentCandidates(t *testing.T) {
},
},
},
- primaryStatusMap: map[string]*replicationdatapb.PrimaryStatus{},
- expected: []string{"r1"},
- shouldErr: false,
+ primaryStatusMap: map[string]*replicationdatapb.PrimaryStatus{},
+ expected: []string{"r1"},
+ expectedGTIDBased: true,
+ shouldErr: false,
},
{
name: "mixed replication modes",
@@ -160,44 +163,6 @@ func TestFindValidEmergencyReparentCandidates(t *testing.T) {
expected: []string{"r1", "r2"},
shouldErr: false,
},
- {
- name: "tablet with superset GTIDs is included",
- statusMap: map[string]*replicationdatapb.StopReplicationStatus{
- "r1": {
- After: &replicationdatapb.Status{
- SourceUuid: "3E11FA47-71CA-11E1-9E33-C80AA9429562",
- RelayLogPosition: "MySQL56/3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5",
- },
- },
- "r2": {
- After: &replicationdatapb.Status{
- SourceUuid: "3E11FA47-71CA-11E1-9E33-C80AA9429562",
- RelayLogPosition: "MySQL56/3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5,AAAAAAAA-71CA-11E1-9E33-C80AA9429562:1",
- },
- },
- },
- expected: []string{"r1", "r2"},
- shouldErr: false,
- },
- {
- name: "tablets with errant GTIDs are excluded",
- statusMap: map[string]*replicationdatapb.StopReplicationStatus{
- "r1": {
- After: &replicationdatapb.Status{
- SourceUuid: "3E11FA47-71CA-11E1-9E33-C80AA9429562",
- RelayLogPosition: "MySQL56/3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5,AAAAAAAA-71CA-11E1-9E33-C80AA9429562:1",
- },
- },
- "r2": {
- After: &replicationdatapb.Status{
- SourceUuid: "3E11FA47-71CA-11E1-9E33-C80AA9429562",
- RelayLogPosition: "MySQL56/3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5,AAAAAAAA-71CA-11E1-9E33-C80AA9429562:2-3",
- },
- },
- },
- expected: []string{},
- shouldErr: false,
- },
{
name: "bad primary position fails the call",
statusMap: map[string]*replicationdatapb.StopReplicationStatus{
@@ -222,7 +187,8 @@ func TestFindValidEmergencyReparentCandidates(t *testing.T) {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
- actual, err := FindValidEmergencyReparentCandidates(tt.statusMap, tt.primaryStatusMap)
+ actual, isGTIDBased, err := FindPositionsOfAllCandidates(tt.statusMap, tt.primaryStatusMap)
+ require.EqualValues(t, tt.expectedGTIDBased, isGTIDBased)
if tt.shouldErr {
assert.Error(t, err)
return
@@ -317,6 +283,7 @@ func Test_stopReplicationAndBuildStatusMaps(t *testing.T) {
waitForAllTablets bool
expectedStatusMap map[string]*replicationdatapb.StopReplicationStatus
expectedPrimaryStatusMap map[string]*replicationdatapb.PrimaryStatus
+ expectedTakingBackup map[string]bool
expectedTabletsReachable []*topodatapb.Tablet
shouldErr bool
}{
@@ -373,6 +340,7 @@ func Test_stopReplicationAndBuildStatusMaps(t *testing.T) {
After: &replicationdatapb.Status{Position: "MySQL56/3E11FA47-71CA-11E1-9E33-C80AA9429101:1-9"},
},
},
+ expectedTakingBackup: map[string]bool{"zone1-0000000100": false, "zone1-0000000101": false},
expectedPrimaryStatusMap: map[string]*replicationdatapb.PrimaryStatus{},
expectedTabletsReachable: []*topodatapb.Tablet{{
Type: topodatapb.TabletType_REPLICA,
@@ -441,6 +409,7 @@ func Test_stopReplicationAndBuildStatusMaps(t *testing.T) {
After: &replicationdatapb.Status{Position: "MySQL56/3E11FA47-71CA-11E1-9E33-C80AA9429101:1-9"},
},
},
+ expectedTakingBackup: map[string]bool{"zone1-0000000100": false, "zone1-0000000101": false},
expectedPrimaryStatusMap: map[string]*replicationdatapb.PrimaryStatus{},
expectedTabletsReachable: []*topodatapb.Tablet{{
Type: topodatapb.TabletType_REPLICA,
@@ -525,6 +494,7 @@ func Test_stopReplicationAndBuildStatusMaps(t *testing.T) {
After: &replicationdatapb.Status{Position: "MySQL56/3E11FA47-71CA-11E1-9E33-C80AA9429101:1-9"},
},
},
+ expectedTakingBackup: map[string]bool{"zone1-0000000100": false, "zone1-0000000101": false},
expectedPrimaryStatusMap: map[string]*replicationdatapb.PrimaryStatus{},
expectedTabletsReachable: []*topodatapb.Tablet{{
Type: topodatapb.TabletType_REPLICA,
@@ -619,6 +589,7 @@ func Test_stopReplicationAndBuildStatusMaps(t *testing.T) {
After: &replicationdatapb.Status{Position: "MySQL56/3E11FA47-71CA-11E1-9E33-C80AA9429101:1-9"},
},
},
+ expectedTakingBackup: map[string]bool{"zone1-0000000100": false, "zone1-0000000101": false},
expectedPrimaryStatusMap: map[string]*replicationdatapb.PrimaryStatus{},
expectedTabletsReachable: []*topodatapb.Tablet{{
Type: topodatapb.TabletType_REPLICA,
@@ -712,6 +683,7 @@ func Test_stopReplicationAndBuildStatusMaps(t *testing.T) {
After: &replicationdatapb.Status{Position: "MySQL56/3E11FA47-71CA-11E1-9E33-C80AA9429101:1-9"},
},
},
+ expectedTakingBackup: map[string]bool{"zone1-0000000100": false, "zone1-0000000101": false},
expectedPrimaryStatusMap: map[string]*replicationdatapb.PrimaryStatus{},
expectedTabletsReachable: []*topodatapb.Tablet{{
Type: topodatapb.TabletType_REPLICA,
@@ -784,6 +756,7 @@ func Test_stopReplicationAndBuildStatusMaps(t *testing.T) {
Uid: 101,
},
}},
+ expectedTakingBackup: map[string]bool{"zone1-0000000101": false},
expectedPrimaryStatusMap: map[string]*replicationdatapb.PrimaryStatus{},
shouldErr: false,
},
@@ -845,6 +818,7 @@ func Test_stopReplicationAndBuildStatusMaps(t *testing.T) {
After: &replicationdatapb.Status{Position: "MySQL56/3E11FA47-71CA-11E1-9E33-C80AA9429101:1-9"},
},
},
+ expectedTakingBackup: map[string]bool{"zone1-0000000101": false},
expectedPrimaryStatusMap: map[string]*replicationdatapb.PrimaryStatus{
"zone1-0000000100": {
Position: "primary-position-100",
@@ -919,6 +893,7 @@ func Test_stopReplicationAndBuildStatusMaps(t *testing.T) {
After: &replicationdatapb.Status{Position: "MySQL56/3E11FA47-71CA-11E1-9E33-C80AA9429101:1-9"},
},
},
+ expectedTakingBackup: map[string]bool{"zone1-0000000101": false},
expectedPrimaryStatusMap: map[string]*replicationdatapb.PrimaryStatus{}, // zone1-0000000100 fails to demote, so does not appear
expectedTabletsReachable: []*topodatapb.Tablet{{
Type: topodatapb.TabletType_REPLICA,
@@ -1042,6 +1017,7 @@ func Test_stopReplicationAndBuildStatusMaps(t *testing.T) {
Uid: 101,
},
}},
+ expectedTakingBackup: map[string]bool{"zone1-0000000101": false},
expectedPrimaryStatusMap: map[string]*replicationdatapb.PrimaryStatus{},
shouldErr: false,
},
@@ -1091,6 +1067,7 @@ func Test_stopReplicationAndBuildStatusMaps(t *testing.T) {
After: &replicationdatapb.Status{Position: "MySQL56/3E11FA47-71CA-11E1-9E33-C80AA9429101:1-9"},
},
},
+ expectedTakingBackup: map[string]bool{"zone1-0000000101": false},
expectedPrimaryStatusMap: map[string]*replicationdatapb.PrimaryStatus{},
expectedTabletsReachable: []*topodatapb.Tablet{{
Type: topodatapb.TabletType_REPLICA,
@@ -1286,8 +1263,78 @@ func Test_stopReplicationAndBuildStatusMaps(t *testing.T) {
},
}},
stopReplicasTimeout: time.Minute,
+ expectedTakingBackup: map[string]bool{"zone1-0000000100": false, "zone1-0000000101": false, "zone1-0000000102": false},
expectedPrimaryStatusMap: map[string]*replicationdatapb.PrimaryStatus{},
shouldErr: false,
+ }, {
+ name: "Handle nil replication status After. No segfaulting when determining backup status, and fall back to Before status",
+ durability: "none",
+ tmc: &stopReplicationAndBuildStatusMapsTestTMClient{
+ stopReplicationAndGetStatusResults: map[string]*struct {
+ StopStatus *replicationdatapb.StopReplicationStatus
+ Err error
+ }{
+ "zone1-0000000100": {
+ StopStatus: &replicationdatapb.StopReplicationStatus{
+ Before: &replicationdatapb.Status{Position: "MySQL56/3E11FA47-71CA-11E1-9E33-C80AA9429100:1-5", IoState: int32(replication.ReplicationStateRunning), SqlState: int32(replication.ReplicationStateRunning), BackupRunning: true},
+ After: nil,
+ },
+ },
+ "zone1-0000000101": {
+ StopStatus: &replicationdatapb.StopReplicationStatus{
+ Before: &replicationdatapb.Status{Position: "MySQL56/3E11FA47-71CA-11E1-9E33-C80AA9429101:1-5", IoState: int32(replication.ReplicationStateRunning), SqlState: int32(replication.ReplicationStateRunning), BackupRunning: true},
+ After: nil,
+ },
+ },
+ },
+ },
+ tabletMap: map[string]*topo.TabletInfo{
+ "zone1-0000000100": {
+ Tablet: &topodatapb.Tablet{
+ Type: topodatapb.TabletType_REPLICA,
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 100,
+ },
+ },
+ },
+ "zone1-0000000101": {
+ Tablet: &topodatapb.Tablet{
+ Type: topodatapb.TabletType_REPLICA,
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 101,
+ },
+ },
+ },
+ },
+ ignoredTablets: sets.New[string](),
+ expectedStatusMap: map[string]*replicationdatapb.StopReplicationStatus{
+ "zone1-0000000100": {
+ Before: &replicationdatapb.Status{Position: "MySQL56/3E11FA47-71CA-11E1-9E33-C80AA9429100:1-5", IoState: int32(replication.ReplicationStateRunning), SqlState: int32(replication.ReplicationStateRunning), BackupRunning: true},
+ After: nil,
+ },
+ "zone1-0000000101": {
+ Before: &replicationdatapb.Status{Position: "MySQL56/3E11FA47-71CA-11E1-9E33-C80AA9429101:1-5", IoState: int32(replication.ReplicationStateRunning), SqlState: int32(replication.ReplicationStateRunning), BackupRunning: true},
+ After: nil,
+ },
+ },
+ expectedTakingBackup: map[string]bool{"zone1-0000000100": true, "zone1-0000000101": true},
+ expectedPrimaryStatusMap: map[string]*replicationdatapb.PrimaryStatus{},
+ expectedTabletsReachable: []*topodatapb.Tablet{{
+ Type: topodatapb.TabletType_REPLICA,
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 100,
+ },
+ }, {
+ Type: topodatapb.TabletType_REPLICA,
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 101,
+ },
+ }},
+ shouldErr: false,
},
}
@@ -1313,6 +1360,7 @@ func Test_stopReplicationAndBuildStatusMaps(t *testing.T) {
for idx, tablet := range res.reachableTablets {
assert.True(t, topoproto.IsTabletInList(tablet, tt.expectedTabletsReachable), "TabletsReached[%d] not found - %s", idx, topoproto.TabletAliasString(tablet.Alias))
}
+ assert.Equal(t, tt.expectedTakingBackup, res.tabletsBackupState)
})
}
}
diff --git a/go/vt/vtctl/reparentutil/util.go b/go/vt/vtctl/reparentutil/util.go
index fd701f8c69b..c4c23e65c7e 100644
--- a/go/vt/vtctl/reparentutil/util.go
+++ b/go/vt/vtctl/reparentutil/util.go
@@ -58,7 +58,8 @@ const (
// cell as the current primary, and to be different from avoidPrimaryAlias. The
// tablet with the most advanced replication position is chosen to minimize the
// amount of time spent catching up with the current primary. Further ties are
-// broken by the durability rules.
+// broken by the durability rules. Tablets taking backups are excluded from
+// consideration.
// Note that the search for the most advanced replication position will race
// with transactions being executed on the current primary, so when all tablets
// are at roughly the same position, then the choice of new primary-elect will
@@ -126,13 +127,17 @@ func ElectNewPrimary(
tb := tablet
errorGroup.Go(func() error {
// find and store the positions for the tablet
- pos, replLag, err := findPositionAndLagForTablet(groupCtx, tb, logger, tmc, opts.WaitReplicasTimeout)
+ pos, replLag, takingBackup, err := findTabletPositionLagBackupStatus(groupCtx, tb, logger, tmc, opts.WaitReplicasTimeout)
mu.Lock()
defer mu.Unlock()
if err == nil && (opts.TolerableReplLag == 0 || opts.TolerableReplLag >= replLag) {
- validTablets = append(validTablets, tb)
- tabletPositions = append(tabletPositions, pos)
- innodbBufferPool = append(innodbBufferPool, innodbBufferPoolData[topoproto.TabletAliasString(tb.Alias)])
+ if takingBackup {
+ reasonsToInvalidate.WriteString(fmt.Sprintf("\n%v is taking a backup", topoproto.TabletAliasString(tablet.Alias)))
+ } else {
+ validTablets = append(validTablets, tb)
+ tabletPositions = append(tabletPositions, pos)
+ innodbBufferPool = append(innodbBufferPool, innodbBufferPoolData[topoproto.TabletAliasString(tb.Alias)])
+ }
} else {
reasonsToInvalidate.WriteString(fmt.Sprintf("\n%v has %v replication lag which is more than the tolerable amount", topoproto.TabletAliasString(tablet.Alias), replLag))
}
@@ -150,7 +155,7 @@ func ElectNewPrimary(
return nil, vterrors.Errorf(vtrpc.Code_INTERNAL, "cannot find a tablet to reparent to%v", reasonsToInvalidate.String())
}
- // sort the tablets for finding the best primary
+ // sort preferred tablets for finding the best primary
err = sortTabletsForReparent(validTablets, tabletPositions, innodbBufferPool, opts.durability)
if err != nil {
return nil, err
@@ -159,9 +164,9 @@ func ElectNewPrimary(
return validTablets[0].Alias, nil
}
-// findPositionAndLagForTablet processes the replication position and lag for a single tablet and
+// findTabletPositionLagBackupStatus processes the replication position and lag for a single tablet and
// returns it. It is safe to call from multiple goroutines.
-func findPositionAndLagForTablet(ctx context.Context, tablet *topodatapb.Tablet, logger logutil.Logger, tmc tmclient.TabletManagerClient, waitTimeout time.Duration) (replication.Position, time.Duration, error) {
+func findTabletPositionLagBackupStatus(ctx context.Context, tablet *topodatapb.Tablet, logger logutil.Logger, tmc tmclient.TabletManagerClient, waitTimeout time.Duration) (replication.Position, time.Duration, bool, error) {
logger.Infof("getting replication position from %v", topoproto.TabletAliasString(tablet.Alias))
ctx, cancel := context.WithTimeout(ctx, waitTimeout)
@@ -172,10 +177,10 @@ func findPositionAndLagForTablet(ctx context.Context, tablet *topodatapb.Tablet,
sqlErr, isSQLErr := sqlerror.NewSQLErrorFromError(err).(*sqlerror.SQLError)
if isSQLErr && sqlErr != nil && sqlErr.Number() == sqlerror.ERNotReplica {
logger.Warningf("no replication statue from %v, using empty gtid set", topoproto.TabletAliasString(tablet.Alias))
- return replication.Position{}, 0, nil
+ return replication.Position{}, 0, false, nil
}
logger.Warningf("failed to get replication status from %v, ignoring tablet: %v", topoproto.TabletAliasString(tablet.Alias), err)
- return replication.Position{}, 0, err
+ return replication.Position{}, 0, false, err
}
// Use the relay log position if available, otherwise use the executed GTID set (binary log position).
@@ -186,10 +191,10 @@ func findPositionAndLagForTablet(ctx context.Context, tablet *topodatapb.Tablet,
pos, err := replication.DecodePosition(positionString)
if err != nil {
logger.Warningf("cannot decode replica position %v for tablet %v, ignoring tablet: %v", positionString, topoproto.TabletAliasString(tablet.Alias), err)
- return replication.Position{}, 0, err
+ return replication.Position{}, 0, status.BackupRunning, err
}
- return pos, time.Second * time.Duration(status.ReplicationLagSeconds), nil
+ return pos, time.Second * time.Duration(status.ReplicationLagSeconds), status.BackupRunning, nil
}
// FindCurrentPrimary returns the current primary tablet of a shard, if any. The
diff --git a/go/vt/vtctl/reparentutil/util_test.go b/go/vt/vtctl/reparentutil/util_test.go
index f4e9092fc3f..ac44da8175a 100644
--- a/go/vt/vtctl/reparentutil/util_test.go
+++ b/go/vt/vtctl/reparentutil/util_test.go
@@ -139,6 +139,112 @@ func TestElectNewPrimary(t *testing.T) {
},
errContains: nil,
},
+ {
+ name: "Two good replicas, but one of them is taking a backup so we pick the other one",
+ tmc: &chooseNewPrimaryTestTMClient{
+ // both zone1-101 and zone1-102 are equivalent from a replicaiton PoV, but zone1-102 is taking a backup
+ replicationStatuses: map[string]*replicationdatapb.Status{
+ "zone1-0000000101": {
+ Position: "MySQL56/3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5",
+ BackupRunning: true,
+ },
+ "zone1-0000000102": {
+ Position: "MySQL56/3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5",
+ BackupRunning: false,
+ },
+ },
+ },
+ tolerableReplLag: 50 * time.Second,
+ shardInfo: topo.NewShardInfo("testkeyspace", "-", &topodatapb.Shard{
+ PrimaryAlias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 100,
+ },
+ }, nil),
+ tabletMap: map[string]*topo.TabletInfo{
+ "primary": {
+ Tablet: &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 100,
+ },
+ Type: topodatapb.TabletType_PRIMARY,
+ },
+ },
+ "replica1": {
+ Tablet: &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 101,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ "replica2": {
+ Tablet: &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 102,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ },
+ avoidPrimaryAlias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 0,
+ },
+ expected: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 102,
+ },
+ errContains: nil,
+ },
+ {
+ name: "Only one replica, but it's taking a backup. We don't elect it.",
+ tmc: &chooseNewPrimaryTestTMClient{
+ // both zone1-101 and zone1-102 are equivalent from a replicaiton PoV, but zone1-102 is taking a backup
+ replicationStatuses: map[string]*replicationdatapb.Status{
+ "zone1-0000000101": {
+ Position: "MySQL56/3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5",
+ BackupRunning: true,
+ },
+ },
+ },
+ tolerableReplLag: 50 * time.Second,
+ shardInfo: topo.NewShardInfo("testkeyspace", "-", &topodatapb.Shard{
+ PrimaryAlias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 100,
+ },
+ }, nil),
+ tabletMap: map[string]*topo.TabletInfo{
+ "primary": {
+ Tablet: &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 100,
+ },
+ Type: topodatapb.TabletType_PRIMARY,
+ },
+ },
+ "replica1": {
+ Tablet: &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 101,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ },
+ avoidPrimaryAlias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 0,
+ },
+ expected: nil,
+ errContains: []string{"zone1-0000000101 is taking a backup"},
+ },
{
name: "new primary alias provided - no tolerable replication lag",
tolerableReplLag: 0,
@@ -414,6 +520,67 @@ func TestElectNewPrimary(t *testing.T) {
},
errContains: nil,
},
+ {
+ name: "Two replicas, first one with too much lag, another one taking a backup - none is a good candidate",
+ tmc: &chooseNewPrimaryTestTMClient{
+ // zone1-101 is behind zone1-102
+ replicationStatuses: map[string]*replicationdatapb.Status{
+ "zone1-0000000101": {
+ Position: "MySQL56/3E11FA47-71CA-11E1-9E33-C80AA9429562:1",
+ ReplicationLagSeconds: 55,
+ },
+ "zone1-0000000102": {
+ Position: "MySQL56/3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5",
+ BackupRunning: true,
+ },
+ },
+ },
+ tolerableReplLag: 50 * time.Second,
+ shardInfo: topo.NewShardInfo("testkeyspace", "-", &topodatapb.Shard{
+ PrimaryAlias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 100,
+ },
+ }, nil),
+ tabletMap: map[string]*topo.TabletInfo{
+ "primary": {
+ Tablet: &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 100,
+ },
+ Type: topodatapb.TabletType_PRIMARY,
+ },
+ },
+ "replica1": {
+ Tablet: &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 101,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ "replica2": {
+ Tablet: &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 102,
+ },
+ Type: topodatapb.TabletType_REPLICA,
+ },
+ },
+ },
+ avoidPrimaryAlias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 0,
+ },
+ expected: nil,
+ errContains: []string{
+ "zone1-0000000101 has 55s replication lag which is more than the tolerable amount",
+ "zone1-0000000102 is taking a backup",
+ },
+ },
{
name: "found a replica - more advanced relay log position",
tmc: &chooseNewPrimaryTestTMClient{
@@ -881,12 +1048,13 @@ func TestFindPositionForTablet(t *testing.T) {
ctx := context.Background()
logger := logutil.NewMemoryLogger()
tests := []struct {
- name string
- tmc *testutil.TabletManagerClient
- tablet *topodatapb.Tablet
- expectedPosition string
- expectedLag time.Duration
- expectedErr string
+ name string
+ tmc *testutil.TabletManagerClient
+ tablet *topodatapb.Tablet
+ expectedPosition string
+ expectedLag time.Duration
+ expectedErr string
+ expectedTakingBackup bool
}{
{
name: "executed gtid set",
@@ -911,6 +1079,31 @@ func TestFindPositionForTablet(t *testing.T) {
},
expectedLag: 201 * time.Second,
expectedPosition: "MySQL56/3e11fa47-71ca-11e1-9e33-c80aa9429562:1-5",
+ }, {
+ name: "Host is taking a backup",
+ tmc: &testutil.TabletManagerClient{
+ ReplicationStatusResults: map[string]struct {
+ Position *replicationdatapb.Status
+ Error error
+ }{
+ "zone1-0000000100": {
+ Position: &replicationdatapb.Status{
+ Position: "MySQL56/3e11fa47-71ca-11e1-9e33-c80aa9429562:1-5",
+ ReplicationLagSeconds: 201,
+ },
+ },
+ },
+ TabletsBackupState: map[string]bool{"zone1-0000000100": true},
+ },
+ tablet: &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 100,
+ },
+ },
+ expectedLag: 201 * time.Second,
+ expectedTakingBackup: true,
+ expectedPosition: "MySQL56/3e11fa47-71ca-11e1-9e33-c80aa9429562:1-5",
}, {
name: "no replication status",
tmc: &testutil.TabletManagerClient{
@@ -981,7 +1174,7 @@ func TestFindPositionForTablet(t *testing.T) {
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
- pos, lag, err := findPositionAndLagForTablet(ctx, test.tablet, logger, test.tmc, 10*time.Second)
+ pos, lag, takingBackup, err := findTabletPositionLagBackupStatus(ctx, test.tablet, logger, test.tmc, 10*time.Second)
if test.expectedErr != "" {
require.EqualError(t, err, test.expectedErr)
return
@@ -990,6 +1183,7 @@ func TestFindPositionForTablet(t *testing.T) {
posString := replication.EncodePosition(pos)
require.Equal(t, test.expectedPosition, posString)
require.Equal(t, test.expectedLag, lag)
+ require.Equal(t, test.expectedTakingBackup, takingBackup)
})
}
}
diff --git a/go/vt/vtctl/workflow/framework_test.go b/go/vt/vtctl/workflow/framework_test.go
index 991d2d7231d..a2c1b2ef8e3 100644
--- a/go/vt/vtctl/workflow/framework_test.go
+++ b/go/vt/vtctl/workflow/framework_test.go
@@ -20,6 +20,7 @@ import (
"context"
"fmt"
"os"
+ "reflect"
"regexp"
"slices"
"strings"
@@ -38,6 +39,7 @@ import (
"vitess.io/vitess/go/vt/mysqlctl/tmutils"
"vitess.io/vitess/go/vt/topo"
"vitess.io/vitess/go/vt/topo/memorytopo"
+ "vitess.io/vitess/go/vt/topo/topoproto"
"vitess.io/vitess/go/vt/topotools"
"vitess.io/vitess/go/vt/vtenv"
"vitess.io/vitess/go/vt/vterrors"
@@ -268,7 +270,9 @@ type testTMClient struct {
mu sync.Mutex
vrQueries map[int][]*queryResult
createVReplicationWorkflowRequests map[uint32]*createVReplicationWorkflowRequestResponse
- readVReplicationWorkflowRequests map[uint32]*tabletmanagerdatapb.ReadVReplicationWorkflowRequest
+ readVReplicationWorkflowRequests map[uint32]*readVReplicationWorkflowRequestResponse
+ updateVReplicationWorklowsRequests map[uint32]*tabletmanagerdatapb.UpdateVReplicationWorkflowsRequest
+ applySchemaRequests map[uint32]*applySchemaRequestResponse
primaryPositions map[uint32]string
vdiffRequests map[uint32]*vdiffRequestResponse
refreshStateErrors map[uint32]error
@@ -290,7 +294,9 @@ func newTestTMClient(env *testEnv) *testTMClient {
schema: make(map[string]*tabletmanagerdatapb.SchemaDefinition),
vrQueries: make(map[int][]*queryResult),
createVReplicationWorkflowRequests: make(map[uint32]*createVReplicationWorkflowRequestResponse),
- readVReplicationWorkflowRequests: make(map[uint32]*tabletmanagerdatapb.ReadVReplicationWorkflowRequest),
+ readVReplicationWorkflowRequests: make(map[uint32]*readVReplicationWorkflowRequestResponse),
+ updateVReplicationWorklowsRequests: make(map[uint32]*tabletmanagerdatapb.UpdateVReplicationWorkflowsRequest),
+ applySchemaRequests: make(map[uint32]*applySchemaRequestResponse),
readVReplicationWorkflowsResponses: make(map[string][]*tabletmanagerdatapb.ReadVReplicationWorkflowsResponse),
primaryPositions: make(map[uint32]string),
vdiffRequests: make(map[uint32]*vdiffRequestResponse),
@@ -305,7 +311,8 @@ func (tmc *testTMClient) CreateVReplicationWorkflow(ctx context.Context, tablet
if expect := tmc.createVReplicationWorkflowRequests[tablet.Alias.Uid]; expect != nil {
if expect.req != nil && !proto.Equal(expect.req, req) {
- return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected CreateVReplicationWorkflow request: got %+v, want %+v", req, expect)
+ return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected CreateVReplicationWorkflow request on tablet %s: got %+v, want %+v",
+ topoproto.TabletAliasString(tablet.Alias), req, expect)
}
if expect.res != nil {
return expect.res, expect.err
@@ -323,8 +330,12 @@ func (tmc *testTMClient) ReadVReplicationWorkflow(ctx context.Context, tablet *t
tmc.mu.Lock()
defer tmc.mu.Unlock()
if expect := tmc.readVReplicationWorkflowRequests[tablet.Alias.Uid]; expect != nil {
- if !proto.Equal(expect, req) {
- return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected ReadVReplicationWorkflow request: got %+v, want %+v", req, expect)
+ if !proto.Equal(expect.req, req) {
+ return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected ReadVReplicationWorkflow request on tablet %s: got %+v, want %+v",
+ topoproto.TabletAliasString(tablet.Alias), req, expect)
+ }
+ if expect.res != nil {
+ return expect.res, expect.err
}
}
workflowType := binlogdatapb.VReplicationWorkflowType_MoveTables
@@ -368,6 +379,10 @@ func (tmc *testTMClient) ReadVReplicationWorkflow(ctx context.Context, tablet *t
return res, nil
}
+func (tmc *testTMClient) DeleteTableData(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.DeleteTableDataRequest) (response *tabletmanagerdatapb.DeleteTableDataResponse, err error) {
+ return &tabletmanagerdatapb.DeleteTableDataResponse{}, nil
+}
+
func (tmc *testTMClient) DeleteVReplicationWorkflow(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.DeleteVReplicationWorkflowRequest) (response *tabletmanagerdatapb.DeleteVReplicationWorkflowResponse, err error) {
return &tabletmanagerdatapb.DeleteVReplicationWorkflowResponse{
Result: &querypb.QueryResult{
@@ -437,6 +452,22 @@ func (tmc *testTMClient) expectCreateVReplicationWorkflowRequestOnTargetTablets(
}
}
+func (tmc *testTMClient) expectReadVReplicationWorkflowRequest(tabletID uint32, req *readVReplicationWorkflowRequestResponse) {
+ tmc.mu.Lock()
+ defer tmc.mu.Unlock()
+
+ tmc.readVReplicationWorkflowRequests[tabletID] = req
+}
+
+func (tmc *testTMClient) expectReadVReplicationWorkflowRequestOnTargetTablets(req *readVReplicationWorkflowRequestResponse) {
+ tmc.mu.Lock()
+ defer tmc.mu.Unlock()
+
+ for _, tablet := range tmc.env.tablets[tmc.env.targetKeyspace.KeyspaceName] {
+ tmc.readVReplicationWorkflowRequests[tablet.Alias.Uid] = req
+ }
+}
+
func (tmc *testTMClient) VReplicationExec(ctx context.Context, tablet *topodatapb.Tablet, query string) (*querypb.QueryResult, error) {
tmc.mu.Lock()
defer tmc.mu.Unlock()
@@ -467,8 +498,35 @@ func (tmc *testTMClient) ExecuteFetchAsAllPrivs(ctx context.Context, tablet *top
return nil, nil
}
+func (tmc *testTMClient) ExecuteFetchAsApp(ctx context.Context, tablet *topodatapb.Tablet, usePool bool, req *tabletmanagerdatapb.ExecuteFetchAsAppRequest) (*querypb.QueryResult, error) {
+ // Reuse VReplicationExec.
+ return tmc.VReplicationExec(ctx, tablet, string(req.Query))
+}
+
+func (tmc *testTMClient) expectApplySchemaRequest(tabletID uint32, req *applySchemaRequestResponse) {
+ tmc.mu.Lock()
+ defer tmc.mu.Unlock()
+
+ if tmc.applySchemaRequests == nil {
+ tmc.applySchemaRequests = make(map[uint32]*applySchemaRequestResponse)
+ }
+
+ tmc.applySchemaRequests[tabletID] = req
+}
+
// Note: ONLY breaks up change.SQL into individual statements and executes it. Does NOT fully implement ApplySchema.
func (tmc *testTMClient) ApplySchema(ctx context.Context, tablet *topodatapb.Tablet, change *tmutils.SchemaChange) (*tabletmanagerdatapb.SchemaChangeResult, error) {
+ tmc.mu.Lock()
+ defer tmc.mu.Unlock()
+
+ if expect, ok := tmc.applySchemaRequests[tablet.Alias.Uid]; ok {
+ if !reflect.DeepEqual(change, expect.change) {
+ return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected ApplySchema request on tablet %s: got %+v, want %+v",
+ topoproto.TabletAliasString(tablet.Alias), change, expect.change)
+ }
+ return expect.res, expect.err
+ }
+
stmts := strings.Split(change.SQL, ";")
for _, stmt := range stmts {
@@ -497,6 +555,18 @@ type createVReplicationWorkflowRequestResponse struct {
err error
}
+type readVReplicationWorkflowRequestResponse struct {
+ req *tabletmanagerdatapb.ReadVReplicationWorkflowRequest
+ res *tabletmanagerdatapb.ReadVReplicationWorkflowResponse
+ err error
+}
+
+type applySchemaRequestResponse struct {
+ change *tmutils.SchemaChange
+ res *tabletmanagerdatapb.SchemaChangeResult
+ err error
+}
+
func (tmc *testTMClient) expectVDiffRequest(tablet *topodatapb.Tablet, vrr *vdiffRequestResponse) {
tmc.mu.Lock()
defer tmc.mu.Unlock()
@@ -513,14 +583,15 @@ func (tmc *testTMClient) VDiff(ctx context.Context, tablet *topodatapb.Tablet, r
if vrr, ok := tmc.vdiffRequests[tablet.Alias.Uid]; ok {
if !proto.Equal(vrr.req, req) {
- return nil, fmt.Errorf("unexpected VDiff request on tablet: %+v; got %+v, want %+v",
- tablet, req, vrr.req)
+ return nil, fmt.Errorf("unexpected VDiff request on tablet %s; got %+v, want %+v",
+ topoproto.TabletAliasString(tablet.Alias), req, vrr.req)
}
delete(tmc.vdiffRequests, tablet.Alias.Uid)
return vrr.res, vrr.err
}
if tmc.strict {
- return nil, fmt.Errorf("unexpected VDiff request on tablet %+v: %+v", tablet, req)
+ return nil, fmt.Errorf("unexpected VDiff request on tablet %s: %+v",
+ topoproto.TabletAliasString(tablet.Alias), req)
}
return &tabletmanagerdatapb.VDiffResponse{
@@ -553,6 +624,10 @@ func (tmc *testTMClient) HasVReplicationWorkflows(ctx context.Context, tablet *t
}, nil
}
+func (tmc *testTMClient) ResetSequences(ctx context.Context, tablet *topodatapb.Tablet, tables []string) error {
+ return nil
+}
+
func (tmc *testTMClient) ReadVReplicationWorkflows(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.ReadVReplicationWorkflowsRequest) (*tabletmanagerdatapb.ReadVReplicationWorkflowsResponse, error) {
tmc.mu.Lock()
defer tmc.mu.Unlock()
@@ -613,6 +688,19 @@ func (tmc *testTMClient) UpdateVReplicationWorkflow(ctx context.Context, tablet
}, nil
}
+func (tmc *testTMClient) UpdateVReplicationWorkflows(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.UpdateVReplicationWorkflowsRequest) (*tabletmanagerdatapb.UpdateVReplicationWorkflowsResponse, error) {
+ tmc.mu.Lock()
+ defer tmc.mu.Unlock()
+ if expect := tmc.updateVReplicationWorklowsRequests[tablet.Alias.Uid]; expect != nil {
+ if !proto.Equal(expect, req) {
+ return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected ReadVReplicationWorkflow request on tablet %s: got %+v, want %+v",
+ topoproto.TabletAliasString(tablet.Alias), req, expect)
+ }
+ }
+ delete(tmc.updateVReplicationWorklowsRequests, tablet.Alias.Uid)
+ return nil, nil
+}
+
func (tmc *testTMClient) ValidateVReplicationPermissions(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.ValidateVReplicationPermissionsRequest) (*tabletmanagerdatapb.ValidateVReplicationPermissionsResponse, error) {
return &tabletmanagerdatapb.ValidateVReplicationPermissionsResponse{
User: "vt_filtered",
@@ -672,6 +760,12 @@ func (tmc *testTMClient) AddVReplicationWorkflowsResponse(key string, resp *tabl
tmc.readVReplicationWorkflowsResponses[key] = append(tmc.readVReplicationWorkflowsResponses[key], resp)
}
+func (tmc *testTMClient) AddUpdateVReplicationRequests(tabletUID uint32, req *tabletmanagerdatapb.UpdateVReplicationWorkflowsRequest) {
+ tmc.mu.Lock()
+ defer tmc.mu.Unlock()
+ tmc.updateVReplicationWorklowsRequests[tabletUID] = req
+}
+
func (tmc *testTMClient) getVReplicationWorkflowsResponse(key string) *tabletmanagerdatapb.ReadVReplicationWorkflowsResponse {
if len(tmc.readVReplicationWorkflowsResponses) == 0 {
return nil
diff --git a/go/vt/vtctl/workflow/materializer.go b/go/vt/vtctl/workflow/materializer.go
index 9b8251257a8..c65a00bf614 100644
--- a/go/vt/vtctl/workflow/materializer.go
+++ b/go/vt/vtctl/workflow/materializer.go
@@ -24,10 +24,13 @@ import (
"sync"
"time"
+ "golang.org/x/exp/maps"
+ "golang.org/x/sync/errgroup"
+
"vitess.io/vitess/go/ptr"
+ "vitess.io/vitess/go/sqlescape"
"vitess.io/vitess/go/sqltypes"
"vitess.io/vitess/go/textutil"
- "vitess.io/vitess/go/vt/concurrency"
"vitess.io/vitess/go/vt/key"
"vitess.io/vitess/go/vt/log"
"vitess.io/vitess/go/vt/mysqlctl/tmutils"
@@ -45,12 +48,17 @@ import (
tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata"
vschemapb "vitess.io/vitess/go/vt/proto/vschema"
vtctldatapb "vitess.io/vitess/go/vt/proto/vtctldata"
+ vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc"
)
const (
createDDLAsCopy = "copy"
createDDLAsCopyDropConstraint = "copy:drop_constraint"
createDDLAsCopyDropForeignKeys = "copy:drop_foreign_keys"
+ // For automatically created sequence tables, use a standard format
+ // of tableName_seq.
+ autoSequenceTableFormat = "%s_seq"
+ getNonEmptyTableQuery = "select 1 from %s limit 1"
)
type materializer struct {
@@ -135,7 +143,7 @@ func (mz *materializer) createWorkflowStreams(req *tabletmanagerdatapb.CreateVRe
return err
}
- return mz.forAllTargets(func(target *topo.ShardInfo) error {
+ return forAllShards(mz.targetShards, func(target *topo.ShardInfo) error {
targetPrimary, err := mz.ts.GetTablet(mz.ctx, target.PrimaryAlias)
if err != nil {
return vterrors.Wrapf(err, "GetTablet(%v) failed", target.PrimaryAlias)
@@ -274,13 +282,29 @@ func (mz *materializer) deploySchema() error {
// to remove them.
// We do, however, allow the user to override this behavior and retain them.
removeAutoInc := false
+ updatedVSchema := false
+ var targetVSchema *vschemapb.Keyspace
if mz.workflowType == binlogdatapb.VReplicationWorkflowType_MoveTables &&
(mz.targetVSchema != nil && mz.targetVSchema.Keyspace != nil && mz.targetVSchema.Keyspace.Sharded) &&
- (mz.ms.GetWorkflowOptions() != nil && mz.ms.GetWorkflowOptions().StripShardedAutoIncrement) {
+ (mz.ms.GetWorkflowOptions() != nil && mz.ms.GetWorkflowOptions().ShardedAutoIncrementHandling != vtctldatapb.ShardedAutoIncrementHandling_LEAVE) {
removeAutoInc = true
+ var err error
+ targetVSchema, err = mz.ts.GetVSchema(mz.ctx, mz.ms.TargetKeyspace)
+ if err != nil {
+ return err
+ }
}
- return forAllShards(mz.targetShards, func(target *topo.ShardInfo) error {
+ // Check if any table being moved is already non-empty in the target keyspace.
+ // Skip this check for multi-tenant migrations.
+ if !mz.IsMultiTenantMigration() {
+ err := mz.validateEmptyTables()
+ if err != nil {
+ return vterrors.Wrap(err, "failed to validate that all target tables are empty")
+ }
+ }
+
+ err := forAllShards(mz.targetShards, func(target *topo.ShardInfo) error {
allTables := []string{"/.*/"}
hasTargetTable := map[string]bool{}
@@ -362,7 +386,43 @@ func (mz *materializer) deploySchema() error {
}
if removeAutoInc {
- ddl, err = stripAutoIncrement(ddl, mz.env.Parser())
+ var replaceFunc func(columnName string) error
+ if mz.ms.GetWorkflowOptions().ShardedAutoIncrementHandling == vtctldatapb.ShardedAutoIncrementHandling_REPLACE {
+ replaceFunc = func(columnName string) error {
+ mu.Lock()
+ defer mu.Unlock()
+ // At this point we've already confirmed that the table exists in the target
+ // vschema.
+ table := targetVSchema.Tables[ts.TargetTable]
+ // Don't override or redo anything that already exists.
+ if table != nil && table.AutoIncrement == nil {
+ tableName, err := sqlescape.UnescapeID(ts.TargetTable)
+ if err != nil {
+ return err
+ }
+ seqTableName, err := sqlescape.EnsureEscaped(fmt.Sprintf(autoSequenceTableFormat, tableName))
+ if err != nil {
+ return err
+ }
+ if mz.ms.GetWorkflowOptions().GlobalKeyspace != "" {
+ seqKeyspace, err := sqlescape.EnsureEscaped(mz.ms.WorkflowOptions.GlobalKeyspace)
+ if err != nil {
+ return err
+ }
+ seqTableName = fmt.Sprintf("%s.%s", seqKeyspace, seqTableName)
+ }
+ // Create a Vitess AutoIncrement definition -- which uses a sequence -- to
+ // replace the MySQL auto_increment definition that we removed.
+ table.AutoIncrement = &vschemapb.AutoIncrement{
+ Column: columnName,
+ Sequence: seqTableName,
+ }
+ updatedVSchema = true
+ }
+ return nil
+ }
+ }
+ ddl, err = stripAutoIncrement(ddl, mz.env.Parser(), replaceFunc)
if err != nil {
return err
}
@@ -407,6 +467,15 @@ func (mz *materializer) deploySchema() error {
return nil
})
+ if err != nil {
+ return err
+ }
+
+ if updatedVSchema {
+ return mz.ts.SaveVSchema(mz.ctx, mz.ms.TargetKeyspace, targetVSchema)
+ }
+
+ return nil
}
func (mz *materializer) buildMaterializer() error {
@@ -504,6 +573,66 @@ func (mz *materializer) buildMaterializer() error {
return nil
}
+// validateEmptyTables checks if all tables are empty across all target shards.
+// It queries each shard's primary tablet and if any non-empty table is found,
+// returns an error containing a list of non-empty tables.
+func (mz *materializer) validateEmptyTables() error {
+ var mu sync.Mutex
+ isNonEmptyTable := map[string]bool{}
+
+ err := forAllShards(mz.targetShards, func(shard *topo.ShardInfo) error {
+ primary := shard.PrimaryAlias
+ if primary == nil {
+ return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "no primary tablet found for shard %s/%s", shard.Keyspace(), shard.ShardName())
+ }
+
+ ti, err := mz.ts.GetTablet(mz.ctx, primary)
+ if err != nil {
+ return err
+ }
+
+ eg, groupCtx := errgroup.WithContext(mz.ctx)
+ eg.SetLimit(20)
+
+ for _, ts := range mz.ms.TableSettings {
+ eg.Go(func() error {
+ table, err := sqlescape.EnsureEscaped(ts.TargetTable)
+ if err != nil {
+ return err
+ }
+ query := fmt.Sprintf(getNonEmptyTableQuery, table)
+ res, err := mz.tmc.ExecuteFetchAsAllPrivs(groupCtx, ti.Tablet, &tabletmanagerdatapb.ExecuteFetchAsAllPrivsRequest{
+ Query: []byte(query),
+ MaxRows: 1,
+ })
+ // Ignore table not found error
+ if err != nil && !IsTableDidNotExistError(err) {
+ return err
+ }
+ if res != nil && len(res.Rows) > 0 {
+ mu.Lock()
+ isNonEmptyTable[ts.TargetTable] = true
+ mu.Unlock()
+ }
+ return nil
+ })
+ }
+ if err = eg.Wait(); err != nil {
+ return err
+ }
+ return nil
+ })
+ if err != nil {
+ return err
+ }
+
+ nonEmptyTables := maps.Keys(isNonEmptyTable)
+ if len(nonEmptyTables) > 0 {
+ return vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "non-empty tables found in target keyspace(%s): %s", mz.ms.TargetKeyspace, strings.Join(nonEmptyTables, ", "))
+ }
+ return nil
+}
+
func (mz *materializer) startStreams(ctx context.Context) error {
return forAllShards(mz.targetShards, func(target *topo.ShardInfo) error {
targetPrimary, err := mz.ts.GetTablet(ctx, target.PrimaryAlias)
@@ -523,29 +652,12 @@ func (mz *materializer) startStreams(ctx context.Context) error {
})
}
-func (mz *materializer) forAllTargets(f func(*topo.ShardInfo) error) error {
- var wg sync.WaitGroup
- allErrors := &concurrency.AllErrorRecorder{}
- for _, target := range mz.targetShards {
- wg.Add(1)
- go func(target *topo.ShardInfo) {
- defer wg.Done()
-
- if err := f(target); err != nil {
- allErrors.RecordError(err)
- }
- }(target)
- }
- wg.Wait()
- return allErrors.AggrError(vterrors.Aggregate)
-}
-
// checkTZConversion is a light-weight consistency check to validate that, if a source time zone is specified to MoveTables,
// that the current primary has the time zone loaded in order to run the convert_tz() function used by VReplication to do the
// datetime conversions. We only check the current primaries on each shard and note here that it is possible a new primary
// gets elected: in this case user will either see errors during vreplication or vdiff will report mismatches.
func (mz *materializer) checkTZConversion(ctx context.Context, tz string) error {
- err := mz.forAllTargets(func(target *topo.ShardInfo) error {
+ err := forAllShards(mz.targetShards, func(target *topo.ShardInfo) error {
targetPrimary, err := mz.ts.GetTablet(ctx, target.PrimaryAlias)
if err != nil {
return vterrors.Wrapf(err, "GetTablet(%v) failed", target.PrimaryAlias)
diff --git a/go/vt/vtctl/workflow/materializer_env_test.go b/go/vt/vtctl/workflow/materializer_env_test.go
index 8b407dbcb0c..fb5064137cd 100644
--- a/go/vt/vtctl/workflow/materializer_env_test.go
+++ b/go/vt/vtctl/workflow/materializer_env_test.go
@@ -25,6 +25,7 @@ import (
"testing"
"time"
+ "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"google.golang.org/protobuf/proto"
@@ -36,6 +37,7 @@ import (
"vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/topo"
"vitess.io/vitess/go/vt/topo/memorytopo"
+ "vitess.io/vitess/go/vt/topo/topoproto"
"vitess.io/vitess/go/vt/topotools"
"vitess.io/vitess/go/vt/vtenv"
"vitess.io/vitess/go/vt/vterrors"
@@ -92,18 +94,18 @@ func newTestMaterializerEnv(t *testing.T, ctx context.Context, ms *vtctldatapb.M
logger := logutil.NewConsoleLogger()
require.NoError(t, topoServ.RebuildSrvVSchema(ctx, []string{"cell"}))
- tabletID := 100
+ tabletID := startingSourceTabletUID
sourceShardsMap := make(map[string]any)
for _, shard := range sourceShards {
sourceShardsMap[shard] = nil
require.NoError(t, topoServ.CreateShard(ctx, ms.SourceKeyspace, shard))
_ = env.addTablet(t, tabletID, env.ms.SourceKeyspace, shard, topodatapb.TabletType_PRIMARY)
- tabletID += 10
+ tabletID += tabletUIDStep
}
require.NoError(t, topotools.RebuildKeyspace(ctx, logger, topoServ, ms.SourceKeyspace, []string{"cell"}, false))
- tabletID = 200
+ tabletID = startingTargetTabletUID
for _, shard := range targetShards {
if ms.SourceKeyspace == ms.TargetKeyspace {
if _, ok := sourceShardsMap[shard]; ok {
@@ -112,14 +114,14 @@ func newTestMaterializerEnv(t *testing.T, ctx context.Context, ms *vtctldatapb.M
}
require.NoError(t, topoServ.CreateShard(ctx, ms.TargetKeyspace, shard))
_ = env.addTablet(t, tabletID, env.ms.TargetKeyspace, shard, topodatapb.TabletType_PRIMARY)
- tabletID += 10
+ tabletID += tabletUIDStep
}
for _, ts := range ms.TableSettings {
tableName := ts.TargetTable
table, err := venv.Parser().TableFromStatement(ts.SourceExpression)
if err == nil {
- tableName = table.Name.String()
+ tableName = sqlparser.String(table.Name)
}
var (
cols []string
@@ -223,6 +225,7 @@ type testMaterializerTMClient struct {
mu sync.Mutex
vrQueries map[int][]*queryResult
+ fetchAsAllPrivsQueries map[int]map[string]*queryResult
createVReplicationWorkflowRequests map[uint32]*createVReplicationWorkflowRequestResponse
// Used to confirm the number of times WorkflowDelete was called.
@@ -230,6 +233,9 @@ type testMaterializerTMClient struct {
// Used to override the response to ReadVReplicationWorkflow.
readVReplicationWorkflow readVReplicationWorkflowFunc
+
+ // Responses to GetSchema RPCs for individual tablets.
+ getSchemaResponses map[uint32]*tabletmanagerdatapb.SchemaDefinition
}
func newTestMaterializerTMClient(keyspace string, sourceShards []string, tableSettings []*vtctldatapb.TableMaterializeSettings) *testMaterializerTMClient {
@@ -239,7 +245,9 @@ func newTestMaterializerTMClient(keyspace string, sourceShards []string, tableSe
sourceShards: sourceShards,
tableSettings: tableSettings,
vrQueries: make(map[int][]*queryResult),
+ fetchAsAllPrivsQueries: make(map[int]map[string]*queryResult),
createVReplicationWorkflowRequests: make(map[uint32]*createVReplicationWorkflowRequestResponse),
+ getSchemaResponses: make(map[uint32]*tabletmanagerdatapb.SchemaDefinition),
}
}
@@ -248,7 +256,8 @@ func (tmc *testMaterializerTMClient) CreateVReplicationWorkflow(ctx context.Cont
defer tmc.mu.Unlock()
if expect := tmc.createVReplicationWorkflowRequests[tablet.Alias.Uid]; expect != nil {
if expect.req != nil && !proto.Equal(expect.req, request) {
- return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected CreateVReplicationWorkflow request: got %+v, want %+v", request, expect)
+ return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected CreateVReplicationWorkflow request on tablet %s: got %+v, want %+v",
+ topoproto.TabletAliasString(tablet.Alias), request, expect)
}
if expect.res != nil {
return expect.res, expect.err
@@ -314,10 +323,24 @@ func (tmc *testMaterializerTMClient) DeleteVReplicationWorkflow(ctx context.Cont
}, nil
}
+func (tmc *testMaterializerTMClient) SetGetSchemaResponse(tabletUID int, res *tabletmanagerdatapb.SchemaDefinition) {
+ tmc.mu.Lock()
+ defer tmc.mu.Unlock()
+
+ if tmc.getSchemaResponses == nil {
+ tmc.getSchemaResponses = make(map[uint32]*tabletmanagerdatapb.SchemaDefinition)
+ }
+ tmc.getSchemaResponses[uint32(tabletUID)] = res
+}
+
func (tmc *testMaterializerTMClient) GetSchema(ctx context.Context, tablet *topodatapb.Tablet, request *tabletmanagerdatapb.GetSchemaRequest) (*tabletmanagerdatapb.SchemaDefinition, error) {
tmc.mu.Lock()
defer tmc.mu.Unlock()
+ if tmc.getSchemaResponses != nil && tmc.getSchemaResponses[tablet.Alias.Uid] != nil {
+ return tmc.getSchemaResponses[tablet.Alias.Uid], nil
+ }
+
schemaDefn := &tabletmanagerdatapb.SchemaDefinition{}
for _, table := range request.Tables {
if table == "/.*/" {
@@ -350,6 +373,20 @@ func (tmc *testMaterializerTMClient) expectVRQuery(tabletID int, query string, r
})
}
+func (tmc *testMaterializerTMClient) expectFetchAsAllPrivsQuery(tabletID int, query string, result *sqltypes.Result) {
+ tmc.mu.Lock()
+ defer tmc.mu.Unlock()
+
+ if tmc.fetchAsAllPrivsQueries[tabletID] == nil {
+ tmc.fetchAsAllPrivsQueries[tabletID] = make(map[string]*queryResult)
+ }
+
+ tmc.fetchAsAllPrivsQueries[tabletID][query] = &queryResult{
+ query: query,
+ result: sqltypes.ResultToProto3(result),
+ }
+}
+
func (tmc *testMaterializerTMClient) expectCreateVReplicationWorkflowRequest(tabletID uint32, req *createVReplicationWorkflowRequestResponse) {
tmc.mu.Lock()
defer tmc.mu.Unlock()
@@ -400,7 +437,16 @@ func (tmc *testMaterializerTMClient) ExecuteFetchAsDba(ctx context.Context, tabl
}
func (tmc *testMaterializerTMClient) ExecuteFetchAsAllPrivs(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.ExecuteFetchAsAllPrivsRequest) (*querypb.QueryResult, error) {
- return nil, nil
+ tmc.mu.Lock()
+ defer tmc.mu.Unlock()
+
+ if resultsForTablet, ok := tmc.fetchAsAllPrivsQueries[int(tablet.Alias.Uid)]; ok {
+ if result, ok := resultsForTablet[string(req.Query)]; ok {
+ return result.result, result.err
+ }
+ }
+
+ return nil, fmt.Errorf("%w: no ExecuteFetchAsAllPrivs result set for tablet %d", assert.AnError, int(tablet.Alias.Uid))
}
// Note: ONLY breaks up change.SQL into individual statements and executes it. Does NOT fully implement ApplySchema.
diff --git a/go/vt/vtctl/workflow/materializer_test.go b/go/vt/vtctl/workflow/materializer_test.go
index 8d3335041a3..a583a101186 100644
--- a/go/vt/vtctl/workflow/materializer_test.go
+++ b/go/vt/vtctl/workflow/materializer_test.go
@@ -25,6 +25,7 @@ import (
"testing"
"time"
+ "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"golang.org/x/exp/maps"
"google.golang.org/protobuf/proto"
@@ -32,6 +33,7 @@ import (
"vitess.io/vitess/go/sqltypes"
"vitess.io/vitess/go/test/utils"
"vitess.io/vitess/go/vt/sqlparser"
+ "vitess.io/vitess/go/vt/topo"
"vitess.io/vitess/go/vt/topo/memorytopo"
"vitess.io/vitess/go/vt/vtenv"
"vitess.io/vitess/go/vt/vtgate/vindexes"
@@ -51,6 +53,7 @@ const (
mzGetCopyState = "select distinct table_name from _vt.copy_state cs, _vt.vreplication vr where vr.id = cs.vrepl_id and vr.id = 1"
mzGetLatestCopyState = "select vrepl_id, table_name, lastpk from _vt.copy_state where vrepl_id in (1) and id in (select max(id) from _vt.copy_state where vrepl_id in (1) group by vrepl_id, table_name)"
insertPrefix = `/insert into _vt.vreplication\(workflow, source, pos, max_tps, max_replication_lag, cell, tablet_types, time_updated, transaction_timestamp, state, db_name, workflow_type, workflow_sub_type, defer_secondary_keys, options\) values `
+ getNonEmptyTable = "select 1 from `t1` limit 1"
)
var (
@@ -286,7 +289,7 @@ func TestStripAutoIncrement(t *testing.T) {
}
for _, tc := range tcs {
- strippedDDL, err := stripAutoIncrement(tc.ddl, parser)
+ strippedDDL, err := stripAutoIncrement(tc.ddl, parser, nil)
require.Equal(t, tc.expectErr, (err != nil), "unexpected error result", "expected error %t, got: %v", tc.expectErr, err)
require.Equal(t, tc.want, strippedDDL, fmt.Sprintf("stripped DDL %q does not match our expected result: %q", strippedDDL, tc.want))
}
@@ -520,6 +523,7 @@ func TestMigrateVSchema(t *testing.T) {
defer env.close()
env.tmc.expectVRQuery(100, mzCheckJournal, &sqltypes.Result{})
+ env.tmc.expectFetchAsAllPrivsQuery(200, getNonEmptyTable, &sqltypes.Result{})
env.tmc.expectVRQuery(200, mzGetCopyState, &sqltypes.Result{})
env.tmc.expectVRQuery(200, mzGetLatestCopyState, &sqltypes.Result{})
@@ -578,6 +582,7 @@ func TestMoveTablesDDLFlag(t *testing.T) {
// a circular dependency.
// The TabletManager portion is tested in rpc_vreplication_test.go.
env.tmc.expectVRQuery(100, mzCheckJournal, &sqltypes.Result{})
+ env.tmc.expectFetchAsAllPrivsQuery(200, getNonEmptyTable, &sqltypes.Result{})
env.tmc.expectVRQuery(200, mzGetCopyState, &sqltypes.Result{})
env.tmc.expectVRQuery(200, mzGetLatestCopyState, &sqltypes.Result{})
@@ -601,7 +606,340 @@ func TestMoveTablesDDLFlag(t *testing.T) {
}
}
-// TestMoveTablesNoRoutingRules confirms that MoveTables does not create routing rules if --no-routing-rules is specified.
+// TestShardedAutoIncHandling tests the optional behaviors available when moving
+// tables to a sharded keyspace and the tables being copied contain MySQL
+// auto_increment clauses. The optional behaviors are:
+// 1. LEAVE the tables' MySQL auto_increment clauses alone
+// 2. REMOVE the tables' MySQL auto_increment clauses
+// 3. REPLACE the table's MySQL auto_increment clauses with Vitess sequences
+func TestShardedAutoIncHandling(t *testing.T) {
+ tableName := "`t-1`"
+ tableDDL := fmt.Sprintf("create table %s (id int not null auto_increment primary key, c1 varchar(10))", tableName)
+ validateEmptyTableQuery := fmt.Sprintf("select 1 from %s limit 1", tableName)
+ ms := &vtctldatapb.MaterializeSettings{
+ Workflow: "workflow",
+ SourceKeyspace: "source-ks",
+ TargetKeyspace: "targetks",
+ TableSettings: []*vtctldatapb.TableMaterializeSettings{{
+ TargetTable: tableName,
+ CreateDdl: tableDDL,
+ SourceExpression: fmt.Sprintf("select * from %s", tableName),
+ }},
+ WorkflowOptions: &vtctldatapb.WorkflowOptions{},
+ }
+
+ type testcase struct {
+ name string
+ value vtctldatapb.ShardedAutoIncrementHandling
+ globalKeyspace string
+ targetShards []string
+ targetVSchema *vschemapb.Keyspace
+ wantTargetVSchema *vschemapb.Keyspace
+ expectQueries []string
+ expectAllPrivsQueries []string
+ expectErr string
+ }
+ testcases := []testcase{
+ {
+ name: "global-keyspace does not exist",
+ globalKeyspace: "foo",
+ expectErr: "global-keyspace foo does not exist",
+ },
+ {
+ name: "global keyspace is sharded",
+ globalKeyspace: ms.TargetKeyspace,
+ targetShards: []string{"-80", "80-"},
+ targetVSchema: &vschemapb.Keyspace{
+ Sharded: true,
+ Tables: map[string]*vschemapb.Table{
+ tableName: {
+ ColumnVindexes: []*vschemapb.ColumnVindex{
+ {
+ Name: "xxhash",
+ Column: "id",
+ },
+ },
+ },
+ },
+ Vindexes: map[string]*vschemapb.Vindex{
+ "xxhash": {
+ Type: "xxhash",
+ },
+ },
+ },
+ expectErr: fmt.Sprintf("global-keyspace %s is sharded and thus cannot be used for global resources",
+ ms.TargetKeyspace),
+ },
+ {
+ name: "leave",
+ globalKeyspace: ms.SourceKeyspace,
+ targetShards: []string{"-80", "80-"},
+ targetVSchema: &vschemapb.Keyspace{
+ Sharded: true,
+ Tables: map[string]*vschemapb.Table{
+ tableName: {
+ ColumnVindexes: []*vschemapb.ColumnVindex{
+ {
+ Name: "xxhash",
+ Column: "id",
+ },
+ },
+ },
+ },
+ Vindexes: map[string]*vschemapb.Vindex{
+ "xxhash": {
+ Type: "xxhash",
+ },
+ },
+ },
+ value: vtctldatapb.ShardedAutoIncrementHandling_LEAVE,
+ wantTargetVSchema: &vschemapb.Keyspace{
+ Sharded: true,
+ Tables: map[string]*vschemapb.Table{
+ tableName: {
+ ColumnVindexes: []*vschemapb.ColumnVindex{
+ {
+ Name: "xxhash",
+ Column: "id",
+ },
+ },
+ },
+ },
+ Vindexes: map[string]*vschemapb.Vindex{
+ "xxhash": {
+ Type: "xxhash",
+ },
+ },
+ },
+ expectQueries: []string{
+ tableDDL, // Unchanged
+ },
+ expectAllPrivsQueries: []string{
+ validateEmptyTableQuery,
+ },
+ },
+ {
+ name: "remove",
+ globalKeyspace: ms.SourceKeyspace,
+ targetShards: []string{"-80", "80-"},
+ targetVSchema: &vschemapb.Keyspace{
+ Sharded: true,
+ Tables: map[string]*vschemapb.Table{
+ tableName: {
+ ColumnVindexes: []*vschemapb.ColumnVindex{
+ {
+ Name: "xxhash",
+ Column: "id",
+ },
+ },
+ },
+ },
+ Vindexes: map[string]*vschemapb.Vindex{
+ "xxhash": {
+ Type: "xxhash",
+ },
+ },
+ },
+ value: vtctldatapb.ShardedAutoIncrementHandling_REMOVE,
+ wantTargetVSchema: &vschemapb.Keyspace{
+ Sharded: true,
+ Tables: map[string]*vschemapb.Table{
+ tableName: {
+ ColumnVindexes: []*vschemapb.ColumnVindex{
+ {
+ Name: "xxhash",
+ Column: "id",
+ },
+ },
+ },
+ },
+ Vindexes: map[string]*vschemapb.Vindex{
+ "xxhash": {
+ Type: "xxhash",
+ },
+ },
+ },
+ expectQueries: []string{ // auto_increment clause removed
+ fmt.Sprintf(`create table %s (
+ id int not null primary key,
+ c1 varchar(10)
+)`, tableName),
+ },
+ expectAllPrivsQueries: []string{
+ validateEmptyTableQuery,
+ },
+ },
+ {
+ name: "replace, but vschema AutoIncrement already in place",
+ globalKeyspace: ms.SourceKeyspace,
+ targetShards: []string{"-80", "80-"},
+ targetVSchema: &vschemapb.Keyspace{
+ Sharded: true,
+ Tables: map[string]*vschemapb.Table{
+ tableName: {
+ ColumnVindexes: []*vschemapb.ColumnVindex{
+ {
+ Name: "xxhash",
+ Column: "id",
+ },
+ },
+ AutoIncrement: &vschemapb.AutoIncrement{ // AutoIncrement definition exists
+ Column: "id",
+ Sequence: fmt.Sprintf("%s_non_default_seq_name", tableName),
+ },
+ },
+ },
+ Vindexes: map[string]*vschemapb.Vindex{
+ "xxhash": {
+ Type: "xxhash",
+ },
+ },
+ },
+ value: vtctldatapb.ShardedAutoIncrementHandling_REPLACE,
+ wantTargetVSchema: &vschemapb.Keyspace{
+ Sharded: true,
+ Tables: map[string]*vschemapb.Table{
+ tableName: {
+ ColumnVindexes: []*vschemapb.ColumnVindex{
+ {
+ Name: "xxhash",
+ Column: "id",
+ },
+ },
+ AutoIncrement: &vschemapb.AutoIncrement{ // AutoIncrement definition left alone
+ Column: "id",
+ Sequence: fmt.Sprintf("%s_non_default_seq_name", tableName),
+ },
+ },
+ },
+ Vindexes: map[string]*vschemapb.Vindex{
+ "xxhash": {
+ Type: "xxhash",
+ },
+ },
+ },
+ expectQueries: []string{ // auto_increment clause removed
+ fmt.Sprintf(`create table %s (
+ id int not null primary key,
+ c1 varchar(10)
+)`, tableName),
+ },
+ expectAllPrivsQueries: []string{
+ validateEmptyTableQuery,
+ },
+ },
+ {
+ name: "replace",
+ globalKeyspace: ms.SourceKeyspace,
+ targetShards: []string{"-80", "80-"},
+ targetVSchema: &vschemapb.Keyspace{
+ Sharded: true,
+ Tables: map[string]*vschemapb.Table{
+ tableName: {
+ ColumnVindexes: []*vschemapb.ColumnVindex{
+ {
+ Name: "xxhash",
+ Column: "id",
+ },
+ },
+ },
+ },
+ Vindexes: map[string]*vschemapb.Vindex{
+ "xxhash": {
+ Type: "xxhash",
+ },
+ },
+ },
+ value: vtctldatapb.ShardedAutoIncrementHandling_REPLACE,
+ wantTargetVSchema: &vschemapb.Keyspace{
+ Sharded: true,
+ Tables: map[string]*vschemapb.Table{
+ tableName: {
+ ColumnVindexes: []*vschemapb.ColumnVindex{
+ {
+ Name: "xxhash",
+ Column: "id",
+ },
+ },
+ AutoIncrement: &vschemapb.AutoIncrement{ // AutoIncrement definition added
+ Column: "id",
+ Sequence: fmt.Sprintf("`%s`.`%s`", ms.SourceKeyspace, fmt.Sprintf(autoSequenceTableFormat, strings.ReplaceAll(tableName, "`", ""))),
+ },
+ },
+ },
+ Vindexes: map[string]*vschemapb.Vindex{
+ "xxhash": {
+ Type: "xxhash",
+ },
+ },
+ },
+ expectQueries: []string{ // auto_increment clause removed
+ fmt.Sprintf(`create table %s (
+ id int not null primary key,
+ c1 varchar(10)
+)`, tableName),
+ },
+ expectAllPrivsQueries: []string{
+ validateEmptyTableQuery,
+ },
+ },
+ }
+
+ for _, tc := range testcases {
+ t.Run(tc.name, func(t *testing.T) {
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+ if tc.targetShards == nil {
+ tc.targetShards = []string{"0"}
+ }
+ env := newTestMaterializerEnv(t, ctx, ms, []string{"0"}, tc.targetShards)
+ defer env.close()
+
+ env.tmc.expectVRQuery(100, mzCheckJournal, &sqltypes.Result{})
+ for i := range tc.targetShards {
+ uid := startingTargetTabletUID + (i * tabletUIDStep)
+ for _, query := range tc.expectQueries {
+ env.tmc.expectVRQuery(uid, query, &sqltypes.Result{})
+ }
+ for _, query := range tc.expectAllPrivsQueries {
+ env.tmc.expectFetchAsAllPrivsQuery(uid, query, &sqltypes.Result{})
+ }
+ env.tmc.expectVRQuery(uid, mzGetCopyState, &sqltypes.Result{})
+ env.tmc.expectVRQuery(uid, mzGetLatestCopyState, &sqltypes.Result{})
+ env.tmc.SetGetSchemaResponse(uid, &tabletmanagerdatapb.SchemaDefinition{}) // So that the schema is copied from the source
+ }
+
+ if tc.targetVSchema != nil {
+ err := env.ws.ts.SaveVSchema(ctx, ms.TargetKeyspace, tc.targetVSchema)
+ require.NoError(t, err)
+ }
+
+ _, err := env.ws.MoveTablesCreate(ctx, &vtctldatapb.MoveTablesCreateRequest{
+ Workflow: ms.Workflow,
+ SourceKeyspace: ms.SourceKeyspace,
+ TargetKeyspace: ms.TargetKeyspace,
+ IncludeTables: []string{tableName},
+ WorkflowOptions: &vtctldatapb.WorkflowOptions{
+ ShardedAutoIncrementHandling: tc.value,
+ GlobalKeyspace: tc.globalKeyspace,
+ },
+ })
+ if tc.expectErr != "" {
+ require.EqualError(t, err, tc.expectErr)
+ } else {
+ require.NoError(t, err)
+ if tc.wantTargetVSchema != nil {
+ targetVSchema, err := env.ws.ts.GetVSchema(ctx, ms.TargetKeyspace)
+ require.NoError(t, err)
+ require.True(t, proto.Equal(targetVSchema, tc.wantTargetVSchema), "got: %v, want: %v", targetVSchema, tc.wantTargetVSchema)
+ }
+ }
+ })
+ }
+}
+
+// TestMoveTablesNoRoutingRules confirms that MoveTables does not create routing rules if
+// --no-routing-rules is specified.
func TestMoveTablesNoRoutingRules(t *testing.T) {
ms := &vtctldatapb.MaterializeSettings{
Workflow: "workflow",
@@ -627,6 +965,7 @@ func TestMoveTablesNoRoutingRules(t *testing.T) {
// a circular dependency.
// The TabletManager portion is tested in rpc_vreplication_test.go.
env.tmc.expectVRQuery(100, mzCheckJournal, &sqltypes.Result{})
+ env.tmc.expectFetchAsAllPrivsQuery(200, getNonEmptyTable, &sqltypes.Result{})
env.tmc.expectVRQuery(200, mzGetCopyState, &sqltypes.Result{})
env.tmc.expectVRQuery(200, mzGetLatestCopyState, &sqltypes.Result{})
@@ -745,6 +1084,7 @@ func TestCreateLookupVindexFull(t *testing.T) {
}
env.tmc.expectVRQuery(100, mzCheckJournal, &sqltypes.Result{})
+ env.tmc.expectFetchAsAllPrivsQuery(200, "select 1 from `lookup` limit 1", &sqltypes.Result{})
env.tmc.expectVRQuery(200, "/CREATE TABLE `lookup`", &sqltypes.Result{})
env.tmc.expectVRQuery(200, mzGetCopyState, &sqltypes.Result{})
env.tmc.expectVRQuery(200, mzGetLatestCopyState, &sqltypes.Result{})
@@ -2184,12 +2524,13 @@ func TestCreateLookupVindexFailures(t *testing.T) {
require.NoError(t, err)
testcases := []struct {
- description string
- input *vschemapb.Keyspace
- createRequest *createVReplicationWorkflowRequestResponse
- vrepExecQueries []string
- schemaAdditions []*tabletmanagerdatapb.TableDefinition
- err string
+ description string
+ input *vschemapb.Keyspace
+ createRequest *createVReplicationWorkflowRequestResponse
+ vrepExecQueries []string
+ fetchAsAllPrivsQueries []string
+ schemaAdditions []*tabletmanagerdatapb.TableDefinition
+ err string
}{
{
description: "dup vindex",
@@ -2247,7 +2588,7 @@ func TestCreateLookupVindexFailures(t *testing.T) {
err: "unique vindex 'from' should have only one column",
},
{
- description: "non-unique lookup should have more than one column",
+ description: "non-unique lookup can have only one column",
input: &vschemapb.Keyspace{
Vindexes: map[string]*vschemapb.Vindex{
"v": {
@@ -2260,7 +2601,7 @@ func TestCreateLookupVindexFailures(t *testing.T) {
},
},
},
- err: "non-unique vindex 'from' should have more than one column",
+ err: "",
},
{
description: "vindex not found",
@@ -2461,7 +2802,12 @@ func TestCreateLookupVindexFailures(t *testing.T) {
},
},
},
- vrepExecQueries: []string{"CREATE TABLE `t1_lkp` (\n`c1` INT,\n `keyspace_id` varbinary(128),\n PRIMARY KEY (`c1`)\n)"},
+ vrepExecQueries: []string{
+ "CREATE TABLE `t1_lkp` (\n`c1` INT,\n `keyspace_id` varbinary(128),\n PRIMARY KEY (`c1`)\n)",
+ },
+ fetchAsAllPrivsQueries: []string{
+ "select 1 from `t1_lkp` limit 1",
+ },
createRequest: &createVReplicationWorkflowRequestResponse{
req: nil, // We don't care about defining it in this case
res: &tabletmanagerdatapb.CreateVReplicationWorkflowResponse{},
@@ -2494,6 +2840,9 @@ func TestCreateLookupVindexFailures(t *testing.T) {
for _, vrq := range tcase.vrepExecQueries {
env.tmc.expectVRQuery(int(tablet.Alias.Uid), vrq, &sqltypes.Result{})
}
+ for _, q := range tcase.fetchAsAllPrivsQueries {
+ env.tmc.expectFetchAsAllPrivsQuery(int(tablet.Alias.Uid), q, &sqltypes.Result{})
+ }
if tcase.createRequest != nil {
env.tmc.expectCreateVReplicationWorkflowRequest(tablet.Alias.Uid, tcase.createRequest)
}
@@ -2780,6 +3129,7 @@ func TestKeyRangesEqualOptimization(t *testing.T) {
if tablet.Keyspace != targetKs || tablet.Type != topodatapb.TabletType_PRIMARY {
continue
}
+ env.tmc.expectFetchAsAllPrivsQuery(int(tablet.Alias.Uid), getNonEmptyTable, &sqltypes.Result{})
// If we are doing a partial MoveTables, we will only perform the workflow
// stream creation / INSERT statment on the shard(s) we're migrating.
if len(tc.moveTablesReq.SourceShards) > 0 && !slices.Contains(tc.moveTablesReq.SourceShards, tablet.Shard) {
@@ -2815,3 +3165,121 @@ func TestKeyRangesEqualOptimization(t *testing.T) {
})
}
}
+
+func TestValidateEmptyTables(t *testing.T) {
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+ ts := memorytopo.NewServer(ctx, "zone1")
+ defer ts.Close()
+
+ ks := "test_keyspace"
+ shard1 := "-40"
+ shard2 := "40-80"
+ shard3 := "80-"
+ err := ts.CreateKeyspace(ctx, ks, &topodatapb.Keyspace{})
+ require.NoError(t, err)
+
+ err = ts.CreateShard(ctx, ks, shard1)
+ require.NoError(t, err)
+ err = ts.CreateShard(ctx, ks, shard2)
+ require.NoError(t, err)
+ err = ts.CreateShard(ctx, ks, shard3)
+ require.NoError(t, err)
+
+ tablet1 := &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 100,
+ },
+ Keyspace: ks,
+ Shard: shard1,
+ }
+ tablet2 := &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 200,
+ },
+ Keyspace: ks,
+ Shard: shard2,
+ }
+ tablet3 := &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 300,
+ },
+ Keyspace: ks,
+ Shard: shard3,
+ }
+ err = ts.CreateTablet(ctx, tablet1)
+ require.NoError(t, err)
+ err = ts.CreateTablet(ctx, tablet2)
+ require.NoError(t, err)
+ err = ts.CreateTablet(ctx, tablet3)
+ require.NoError(t, err)
+
+ s1, err := ts.UpdateShardFields(ctx, ks, shard1, func(si *topo.ShardInfo) error {
+ si.Shard.PrimaryAlias = tablet1.Alias
+ return nil
+ })
+ require.NoError(t, err)
+ s2, err := ts.UpdateShardFields(ctx, ks, shard2, func(si *topo.ShardInfo) error {
+ si.Shard.PrimaryAlias = tablet2.Alias
+ return nil
+ })
+ require.NoError(t, err)
+ s3, err := ts.UpdateShardFields(ctx, ks, shard3, func(si *topo.ShardInfo) error {
+ si.Shard.PrimaryAlias = tablet3.Alias
+ return nil
+ })
+ require.NoError(t, err)
+
+ tableSettings := []*vtctldatapb.TableMaterializeSettings{
+ {
+ TargetTable: "table1",
+ },
+ {
+ TargetTable: "table2",
+ },
+ {
+ TargetTable: "table3",
+ },
+ }
+
+ tmc := newTestMaterializerTMClient(ks, []string{shard1, shard2, shard3}, tableSettings)
+
+ table1Query := "select 1 from `table1` limit 1"
+ table2Query := "select 1 from `table2` limit 1"
+ table3Query := "select 1 from `table3` limit 1"
+ nonEmptyTableResult := &sqltypes.Result{Rows: []sqltypes.Row{{sqltypes.NewInt64(1)}}}
+
+ tmc.expectFetchAsAllPrivsQuery(int(tablet1.Alias.Uid), table1Query, &sqltypes.Result{})
+ tmc.expectFetchAsAllPrivsQuery(int(tablet2.Alias.Uid), table1Query, &sqltypes.Result{})
+ tmc.expectFetchAsAllPrivsQuery(int(tablet3.Alias.Uid), table1Query, nonEmptyTableResult)
+ tmc.expectFetchAsAllPrivsQuery(int(tablet1.Alias.Uid), table2Query, &sqltypes.Result{})
+ tmc.expectFetchAsAllPrivsQuery(int(tablet2.Alias.Uid), table2Query, &sqltypes.Result{})
+ tmc.expectFetchAsAllPrivsQuery(int(tablet3.Alias.Uid), table2Query, &sqltypes.Result{})
+ tmc.expectFetchAsAllPrivsQuery(int(tablet1.Alias.Uid), table3Query, nonEmptyTableResult)
+ tmc.expectFetchAsAllPrivsQuery(int(tablet2.Alias.Uid), table3Query, nonEmptyTableResult)
+ tmc.expectFetchAsAllPrivsQuery(int(tablet3.Alias.Uid), table3Query, nonEmptyTableResult)
+
+ ms := &vtctldatapb.MaterializeSettings{
+ TargetKeyspace: ks,
+ TableSettings: tableSettings,
+ }
+
+ mz := &materializer{
+ ctx: ctx,
+ ts: ts,
+ sourceTs: ts,
+ tmc: tmc,
+ ms: ms,
+ targetShards: []*topo.ShardInfo{s1, s2, s3},
+ }
+
+ err = mz.validateEmptyTables()
+
+ assert.ErrorContains(t, err, "table1")
+ assert.NotContains(t, err.Error(), "table2")
+ // Check if the error message doesn't include duplicate tables
+ assert.Equal(t, strings.Count(err.Error(), "table3"), 1)
+}
diff --git a/go/vt/vtctl/workflow/resharder.go b/go/vt/vtctl/workflow/resharder.go
index 57c860bdfaf..e3f7380af69 100644
--- a/go/vt/vtctl/workflow/resharder.go
+++ b/go/vt/vtctl/workflow/resharder.go
@@ -26,7 +26,6 @@ import (
"time"
"vitess.io/vitess/go/ptr"
- "vitess.io/vitess/go/vt/concurrency"
"vitess.io/vitess/go/vt/discovery"
"vitess.io/vitess/go/vt/key"
"vitess.io/vitess/go/vt/proto/vtctldata"
@@ -146,7 +145,7 @@ func (s *Server) buildResharder(ctx context.Context, req *vtctldata.ReshardCreat
// VReplication workflow streams as that is an invalid starting
// state for the non-serving shards involved in a Reshard.
func (rs *resharder) validateTargets(ctx context.Context) error {
- err := rs.forAll(rs.targetShards, func(target *topo.ShardInfo) error {
+ err := forAllShards(rs.targetShards, func(target *topo.ShardInfo) error {
targetPrimary := rs.targetPrimaries[target.ShardName()]
res, err := rs.s.tmc.HasVReplicationWorkflows(ctx, targetPrimary.Tablet, &tabletmanagerdatapb.HasVReplicationWorkflowsRequest{})
if err != nil {
@@ -162,7 +161,7 @@ func (rs *resharder) validateTargets(ctx context.Context) error {
func (rs *resharder) readRefStreams(ctx context.Context) error {
var mu sync.Mutex
- err := rs.forAll(rs.sourceShards, func(source *topo.ShardInfo) error {
+ err := forAllShards(rs.sourceShards, func(source *topo.ShardInfo) error {
sourcePrimary := rs.sourcePrimaries[source.ShardName()]
req := &tabletmanagerdatapb.ReadVReplicationWorkflowsRequest{
@@ -268,7 +267,7 @@ func (rs *resharder) identifyRuleType(rule *binlogdatapb.Rule) (StreamType, erro
func (rs *resharder) copySchema(ctx context.Context) error {
oneSource := rs.sourceShards[0].PrimaryAlias
- err := rs.forAll(rs.targetShards, func(target *topo.ShardInfo) error {
+ err := forAllShards(rs.targetShards, func(target *topo.ShardInfo) error {
return rs.s.CopySchemaShard(ctx, oneSource, []string{"/.*"}, nil, false, rs.keyspace, target.ShardName(), 1*time.Second, false)
})
return err
@@ -287,7 +286,7 @@ func (rs *resharder) createStreams(ctx context.Context) error {
}
}
- err := rs.forAll(rs.targetShards, func(target *topo.ShardInfo) error {
+ err := forAllShards(rs.targetShards, func(target *topo.ShardInfo) error {
targetPrimary := rs.targetPrimaries[target.ShardName()]
ig := vreplication.NewInsertGenerator(binlogdatapb.VReplicationWorkflowState_Stopped, targetPrimary.DbName())
@@ -339,7 +338,7 @@ func (rs *resharder) createStreams(ctx context.Context) error {
}
func (rs *resharder) startStreams(ctx context.Context) error {
- err := rs.forAll(rs.targetShards, func(target *topo.ShardInfo) error {
+ err := forAllShards(rs.targetShards, func(target *topo.ShardInfo) error {
targetPrimary := rs.targetPrimaries[target.ShardName()]
// This is the rare case where we truly want to update every stream/record
// because we've already confirmed that there were no existing workflows
@@ -357,20 +356,3 @@ func (rs *resharder) startStreams(ctx context.Context) error {
})
return err
}
-
-func (rs *resharder) forAll(shards []*topo.ShardInfo, f func(*topo.ShardInfo) error) error {
- var wg sync.WaitGroup
- allErrors := &concurrency.AllErrorRecorder{}
- for _, shard := range shards {
- wg.Add(1)
- go func(shard *topo.ShardInfo) {
- defer wg.Done()
-
- if err := f(shard); err != nil {
- allErrors.RecordError(err)
- }
- }(shard)
- }
- wg.Wait()
- return allErrors.AggrError(vterrors.Aggregate)
-}
diff --git a/go/vt/vtctl/workflow/resharder_test.go b/go/vt/vtctl/workflow/resharder_test.go
index 6353f36db9f..6fe1afb0c70 100644
--- a/go/vt/vtctl/workflow/resharder_test.go
+++ b/go/vt/vtctl/workflow/resharder_test.go
@@ -22,14 +22,20 @@ import (
"testing"
"time"
+ "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
+ "golang.org/x/exp/maps"
+ "vitess.io/vitess/go/ptr"
"vitess.io/vitess/go/sqltypes"
"vitess.io/vitess/go/vt/topo"
"vitess.io/vitess/go/vt/topo/topoproto"
+ "vitess.io/vitess/go/vt/vtgate/vindexes"
+ binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata"
tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata"
topodatapb "vitess.io/vitess/go/vt/proto/topodata"
+ vschemapb "vitess.io/vitess/go/vt/proto/vschema"
vtctldatapb "vitess.io/vitess/go/vt/proto/vtctldata"
)
@@ -65,6 +71,8 @@ func TestReshardCreate(t *testing.T) {
sourceKeyspace, targetKeyspace *testKeyspace
preFunc func(env *testEnv)
want *vtctldatapb.WorkflowStatusResponse
+ updateVReplicationRequest *tabletmanagerdatapb.UpdateVReplicationWorkflowsRequest
+ autoStart bool
wantErr string
}{
{
@@ -77,6 +85,11 @@ func TestReshardCreate(t *testing.T) {
KeyspaceName: targetKeyspaceName,
ShardNames: []string{"-80", "80-"},
},
+ autoStart: true,
+ updateVReplicationRequest: &tabletmanagerdatapb.UpdateVReplicationWorkflowsRequest{
+ AllWorkflows: true,
+ State: ptr.Of(binlogdatapb.VReplicationWorkflowState_Running),
+ },
want: &vtctldatapb.WorkflowStatusResponse{
ShardStreams: map[string]*vtctldatapb.WorkflowStatusResponse_ShardStreams{
"targetks/-80": {
@@ -137,6 +150,7 @@ func TestReshardCreate(t *testing.T) {
SourceShards: tc.sourceKeyspace.ShardNames,
TargetShards: tc.targetKeyspace.ShardNames,
Cells: []string{env.cell},
+ AutoStart: tc.autoStart,
}
for i := range tc.sourceKeyspace.ShardNames {
@@ -172,6 +186,9 @@ func TestReshardCreate(t *testing.T) {
"select vrepl_id, table_name, lastpk from _vt.copy_state where vrepl_id in (1) and id in (select max(id) from _vt.copy_state where vrepl_id in (1) group by vrepl_id, table_name)",
&sqltypes.Result{},
)
+ if tc.updateVReplicationRequest != nil {
+ env.tmc.AddUpdateVReplicationRequests(uint32(tabletUID), tc.updateVReplicationRequest)
+ }
}
if tc.preFunc != nil {
@@ -187,6 +204,300 @@ func TestReshardCreate(t *testing.T) {
if tc.want != nil {
require.Equal(t, tc.want, res)
}
+
+ // Expect updateVReplicationWorklowsRequests to be empty,
+ // if AutoStart is enabled. This is because we delete the specific
+ // key from the map in the testTMC, once updateVReplicationWorklows()
+ // with the expected request is called.
+ if tc.autoStart {
+ assert.Len(t, env.tmc.updateVReplicationWorklowsRequests, 0)
+ }
+ })
+ }
+}
+
+func TestReadRefStreams(t *testing.T) {
+ ctx := context.Background()
+
+ sourceKeyspace := &testKeyspace{
+ KeyspaceName: "sourceKeyspace",
+ ShardNames: []string{"-"},
+ }
+ targetKeyspace := &testKeyspace{
+ KeyspaceName: "targetKeyspace",
+ ShardNames: []string{"-"},
+ }
+
+ env := newTestEnv(t, ctx, defaultCellName, sourceKeyspace, targetKeyspace)
+ defer env.close()
+
+ s1, err := env.ts.UpdateShardFields(ctx, targetKeyspace.KeyspaceName, "-", func(si *topo.ShardInfo) error {
+ return nil
+ })
+ require.NoError(t, err)
+
+ sourceTablet, ok := env.tablets[sourceKeyspace.KeyspaceName][100]
+ require.True(t, ok)
+
+ env.tmc.schema = map[string]*tabletmanagerdatapb.SchemaDefinition{
+ "t1": {},
+ }
+
+ rules := make([]*binlogdatapb.Rule, len(env.tmc.schema))
+ for i, table := range maps.Keys(env.tmc.schema) {
+ rules[i] = &binlogdatapb.Rule{
+ Match: table,
+ Filter: fmt.Sprintf("select * from %s", table),
+ }
+ }
+
+ refKey := fmt.Sprintf("wf:%s:-", sourceKeyspace.KeyspaceName)
+
+ testCases := []struct {
+ name string
+ addVReplicationWorkflowsResponse *tabletmanagerdatapb.ReadVReplicationWorkflowsResponse
+ preRefStreams map[string]*refStream
+ wantRefStreamKeys []string
+ wantErr bool
+ errContains string
+ }{
+ {
+ name: "error for unnamed workflow",
+ addVReplicationWorkflowsResponse: &tabletmanagerdatapb.ReadVReplicationWorkflowsResponse{
+ Workflows: []*tabletmanagerdatapb.ReadVReplicationWorkflowResponse{
+ {
+ Workflow: "",
+ WorkflowType: binlogdatapb.VReplicationWorkflowType_Reshard,
+ },
+ },
+ },
+ wantErr: true,
+ },
+ {
+ name: "populate ref streams",
+ addVReplicationWorkflowsResponse: &tabletmanagerdatapb.ReadVReplicationWorkflowsResponse{
+ Workflows: []*tabletmanagerdatapb.ReadVReplicationWorkflowResponse{
+ {
+ Workflow: "wf",
+ WorkflowType: binlogdatapb.VReplicationWorkflowType_Reshard,
+ Streams: []*tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream{
+ {
+
+ Bls: &binlogdatapb.BinlogSource{
+ Keyspace: sourceKeyspace.KeyspaceName,
+ Shard: "-",
+ Tables: maps.Keys(env.tmc.schema),
+ Filter: &binlogdatapb.Filter{
+ Rules: rules,
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ wantRefStreamKeys: []string{refKey},
+ },
+ {
+ name: "mismatched streams with empty map",
+ preRefStreams: map[string]*refStream{},
+ addVReplicationWorkflowsResponse: &tabletmanagerdatapb.ReadVReplicationWorkflowsResponse{
+ Workflows: []*tabletmanagerdatapb.ReadVReplicationWorkflowResponse{
+ {
+ Workflow: "wf",
+ WorkflowType: binlogdatapb.VReplicationWorkflowType_Reshard,
+ Streams: []*tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream{
+ {
+
+ Bls: &binlogdatapb.BinlogSource{
+ Keyspace: sourceKeyspace.KeyspaceName,
+ Shard: "-",
+ Tables: maps.Keys(env.tmc.schema),
+ Filter: &binlogdatapb.Filter{
+ Rules: rules,
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ wantErr: true,
+ errContains: "mismatch",
+ },
+ {
+ name: "mismatched streams",
+ preRefStreams: map[string]*refStream{
+ refKey: nil,
+ "nonexisting": nil,
+ },
+ addVReplicationWorkflowsResponse: &tabletmanagerdatapb.ReadVReplicationWorkflowsResponse{
+ Workflows: []*tabletmanagerdatapb.ReadVReplicationWorkflowResponse{
+ {
+ Workflow: "wf",
+ WorkflowType: binlogdatapb.VReplicationWorkflowType_Reshard,
+ Streams: []*tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream{
+ {
+
+ Bls: &binlogdatapb.BinlogSource{
+ Keyspace: sourceKeyspace.KeyspaceName,
+ Shard: "-",
+ Tables: maps.Keys(env.tmc.schema),
+ Filter: &binlogdatapb.Filter{
+ Rules: rules,
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ wantErr: true,
+ errContains: "mismatch",
+ },
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ rs := &resharder{
+ s: env.ws,
+ keyspace: targetKeyspace.KeyspaceName,
+ sourceShards: []*topo.ShardInfo{s1},
+ sourcePrimaries: map[string]*topo.TabletInfo{
+ "-": {
+ Tablet: sourceTablet,
+ },
+ },
+ workflow: "wf",
+ vschema: &vschemapb.Keyspace{
+ Tables: map[string]*vschemapb.Table{
+ "t1": {
+ Type: vindexes.TypeReference,
+ },
+ },
+ },
+ refStreams: tc.preRefStreams,
+ }
+
+ workflowKey := env.tmc.GetWorkflowKey(sourceKeyspace.KeyspaceName, "-")
+
+ env.tmc.AddVReplicationWorkflowsResponse(workflowKey, tc.addVReplicationWorkflowsResponse)
+
+ err := rs.readRefStreams(ctx)
+ if !tc.wantErr {
+ assert.NoError(t, err)
+ for _, rk := range tc.wantRefStreamKeys {
+ assert.Contains(t, rs.refStreams, rk)
+ }
+ return
+ }
+
+ assert.Error(t, err)
+ assert.ErrorContains(t, err, tc.errContains)
+ })
+ }
+}
+
+func TestBlsIsReference(t *testing.T) {
+ testCases := []struct {
+ name string
+ bls *binlogdatapb.BinlogSource
+ tables map[string]*vschemapb.Table
+ expected bool
+ wantErr bool
+ errContains string
+ }{
+ {
+ name: "all references",
+ bls: &binlogdatapb.BinlogSource{
+ Filter: &binlogdatapb.Filter{
+ Rules: []*binlogdatapb.Rule{
+ {Match: "ref_table1"},
+ {Match: "ref_table2"},
+ },
+ },
+ },
+ tables: map[string]*vschemapb.Table{
+ "ref_table1": {Type: vindexes.TypeReference},
+ "ref_table2": {Type: vindexes.TypeReference},
+ },
+ expected: true,
+ },
+ {
+ name: "all sharded",
+ bls: &binlogdatapb.BinlogSource{
+ Filter: &binlogdatapb.Filter{
+ Rules: []*binlogdatapb.Rule{
+ {Match: "sharded_table1"},
+ {Match: "sharded_table2"},
+ },
+ },
+ },
+ tables: map[string]*vschemapb.Table{
+ "sharded_table1": {Type: vindexes.TypeTable},
+ "sharded_table2": {Type: vindexes.TypeTable},
+ },
+ expected: false,
+ },
+ {
+ name: "mixed reference and sharded tables",
+ bls: &binlogdatapb.BinlogSource{
+ Filter: &binlogdatapb.Filter{
+ Rules: []*binlogdatapb.Rule{
+ {Match: "ref_table"},
+ {Match: "sharded_table"},
+ },
+ },
+ },
+ tables: map[string]*vschemapb.Table{
+ "ref_table": {Type: vindexes.TypeReference},
+ "sharded_table": {Type: vindexes.TypeTable},
+ },
+ wantErr: true,
+ },
+ {
+ name: "rule table not found in vschema",
+ bls: &binlogdatapb.BinlogSource{
+ Filter: &binlogdatapb.Filter{
+ Rules: []*binlogdatapb.Rule{
+ {Match: "unknown_table"},
+ },
+ },
+ },
+ tables: map[string]*vschemapb.Table{},
+ wantErr: true,
+ errContains: "unknown_table",
+ },
+ {
+ name: "internal operation table ignored",
+ bls: &binlogdatapb.BinlogSource{
+ Filter: &binlogdatapb.Filter{
+ Rules: []*binlogdatapb.Rule{
+ {Match: "_vt_hld_6ace8bcef73211ea87e9f875a4d24e90_20200915120410_"},
+ },
+ },
+ },
+ tables: map[string]*vschemapb.Table{},
+ expected: false,
+ },
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ rs := &resharder{
+ vschema: &vschemapb.Keyspace{
+ Tables: tc.tables,
+ },
+ }
+
+ result, err := rs.blsIsReference(tc.bls)
+
+ if tc.wantErr {
+ assert.ErrorContains(t, err, tc.errContains)
+ } else {
+ assert.NoError(t, err)
+ assert.Equal(t, tc.expected, result)
+ }
})
}
}
diff --git a/go/vt/vtctl/workflow/server.go b/go/vt/vtctl/workflow/server.go
index b83973341e0..baea602b7a4 100644
--- a/go/vt/vtctl/workflow/server.go
+++ b/go/vt/vtctl/workflow/server.go
@@ -18,7 +18,6 @@ package workflow
import (
"context"
- "encoding/json"
"errors"
"fmt"
"math"
@@ -29,6 +28,7 @@ import (
"text/template"
"time"
+ "github.com/google/uuid"
"golang.org/x/exp/maps"
"golang.org/x/sync/errgroup"
"golang.org/x/sync/semaphore"
@@ -39,11 +39,10 @@ import (
"vitess.io/vitess/go/constants/sidecar"
"vitess.io/vitess/go/protoutil"
- "vitess.io/vitess/go/sets"
+ "vitess.io/vitess/go/ptr"
"vitess.io/vitess/go/sqlescape"
"vitess.io/vitess/go/sqltypes"
"vitess.io/vitess/go/trace"
- "vitess.io/vitess/go/vt/binlog/binlogplayer"
"vitess.io/vitess/go/vt/concurrency"
"vitess.io/vitess/go/vt/discovery"
"vitess.io/vitess/go/vt/key"
@@ -56,7 +55,6 @@ import (
"vitess.io/vitess/go/vt/topo/topoproto"
"vitess.io/vitess/go/vt/topotools"
"vitess.io/vitess/go/vt/vtctl/schematools"
- "vitess.io/vitess/go/vt/vtctl/workflow/common"
"vitess.io/vitess/go/vt/vtctl/workflow/vexec"
"vitess.io/vitess/go/vt/vtenv"
"vitess.io/vitess/go/vt/vterrors"
@@ -146,9 +144,9 @@ var (
// ErrMultipleTargetKeyspaces occurs when a workflow somehow has multiple
// target keyspaces across different shard primaries. This should be
// impossible.
- ErrMultipleTargetKeyspaces = errors.New("multiple target keyspaces for a single workflow")
- ErrWorkflowNotFullySwitched = errors.New("cannot complete workflow because you have not yet switched all read and write traffic")
- ErrWorkflowPartiallySwitched = errors.New("cannot cancel workflow because you have already switched some or all read and write traffic")
+ ErrMultipleTargetKeyspaces = errors.New("multiple target keyspaces for a single workflow")
+ ErrWorkflowCompleteNotFullySwitched = errors.New("cannot complete workflow because you have not yet switched all read and write traffic")
+ ErrWorkflowDeleteWritesSwitched = errors.New("cannot delete workflow because you have already switched write traffic")
)
// Server provides an API to work with Vitess workflows, like vreplication
@@ -404,546 +402,28 @@ func (s *Server) GetWorkflows(ctx context.Context, req *vtctldatapb.GetWorkflows
span.Annotate("include_logs", req.IncludeLogs)
span.Annotate("shards", req.Shards)
- readReq := &tabletmanagerdatapb.ReadVReplicationWorkflowsRequest{}
- if req.Workflow != "" {
- readReq.IncludeWorkflows = []string{req.Workflow}
+ w := &workflowFetcher{
+ ts: s.ts,
+ tmc: s.tmc,
+ parser: s.SQLParser(),
+ logger: s.Logger(),
}
- if req.ActiveOnly {
- readReq.ExcludeStates = []binlogdatapb.VReplicationWorkflowState{binlogdatapb.VReplicationWorkflowState_Stopped}
- }
-
- // Guards access to the maps used throughout.
- m := sync.Mutex{}
- shards, err := common.GetShards(ctx, s.ts, req.Keyspace, req.Shards)
+ workflowsByShard, err := w.fetchWorkflowsByShard(ctx, req)
if err != nil {
return nil, err
}
- results := make(map[*topo.TabletInfo]*tabletmanagerdatapb.ReadVReplicationWorkflowsResponse, len(shards))
- readWorkflowsEg, readWorkflowsCtx := errgroup.WithContext(ctx)
- for _, shard := range shards {
- readWorkflowsEg.Go(func() error {
- si, err := s.ts.GetShard(readWorkflowsCtx, req.Keyspace, shard)
- if err != nil {
- return err
- }
- if si.PrimaryAlias == nil {
- return fmt.Errorf("%w %s/%s", vexec.ErrNoShardPrimary, req.Keyspace, shard)
- }
- primary, err := s.ts.GetTablet(readWorkflowsCtx, si.PrimaryAlias)
- if err != nil {
- return err
- }
- if primary == nil {
- return fmt.Errorf("%w %s/%s: tablet %v not found", vexec.ErrNoShardPrimary, req.Keyspace, shard, topoproto.TabletAliasString(si.PrimaryAlias))
- }
- // Clone the request so that we can set the correct DB name for tablet.
- req := readReq.CloneVT()
- wres, err := s.tmc.ReadVReplicationWorkflows(readWorkflowsCtx, primary.Tablet, req)
- if err != nil {
- return err
- }
- m.Lock()
- defer m.Unlock()
- results[primary] = wres
- return nil
- })
- }
- if readWorkflowsEg.Wait() != nil {
- return nil, err
- }
- copyStatesByShardStreamId := make(map[string][]*vtctldatapb.Workflow_Stream_CopyState, len(results))
-
- fetchCopyStates := func(ctx context.Context, tablet *topo.TabletInfo, streamIds []int32) error {
- span, ctx := trace.NewSpan(ctx, "workflow.Server.fetchCopyStates")
- defer span.Finish()
-
- span.Annotate("keyspace", req.Keyspace)
- span.Annotate("shard", tablet.Shard)
- span.Annotate("tablet_alias", tablet.AliasString())
-
- copyStates, err := s.getWorkflowCopyStates(ctx, tablet, streamIds)
- if err != nil {
- return err
- }
-
- m.Lock()
- defer m.Unlock()
-
- for _, copyState := range copyStates {
- shardStreamId := fmt.Sprintf("%s/%d", tablet.Shard, copyState.StreamId)
- copyStatesByShardStreamId[shardStreamId] = append(
- copyStatesByShardStreamId[shardStreamId],
- copyState,
- )
- }
-
- return nil
- }
-
- fetchCopyStatesEg, fetchCopyStatesCtx := errgroup.WithContext(ctx)
- for tablet, result := range results {
- tablet := tablet // loop closure
-
- streamIds := make([]int32, 0, len(result.Workflows))
- for _, wf := range result.Workflows {
- for _, stream := range wf.Streams {
- streamIds = append(streamIds, stream.Id)
- }
- }
-
- if len(streamIds) == 0 {
- continue
- }
-
- fetchCopyStatesEg.Go(func() error {
- return fetchCopyStates(fetchCopyStatesCtx, tablet, streamIds)
- })
- }
-
- if err := fetchCopyStatesEg.Wait(); err != nil {
+ copyStatesByShardStreamId, err := w.fetchCopyStatesByShardStream(ctx, workflowsByShard)
+ if err != nil {
return nil, err
}
- workflowsMap := make(map[string]*vtctldatapb.Workflow, len(results))
- sourceKeyspaceByWorkflow := make(map[string]string, len(results))
- sourceShardsByWorkflow := make(map[string]sets.Set[string], len(results))
- targetKeyspaceByWorkflow := make(map[string]string, len(results))
- targetShardsByWorkflow := make(map[string]sets.Set[string], len(results))
- maxVReplicationLagByWorkflow := make(map[string]float64, len(results))
- maxVReplicationTransactionLagByWorkflow := make(map[string]float64, len(results))
-
- // We guarantee the following invariants when this function is called for a
- // given workflow:
- // - workflow.Name != "" (more precisely, ".Name is set 'properly'")
- // - workflowsMap[workflow.Name] == workflow
- // - sourceShardsByWorkflow[workflow.Name] != nil
- // - targetShardsByWorkflow[workflow.Name] != nil
- // - workflow.ShardStatuses != nil
- scanWorkflow := func(ctx context.Context, workflow *vtctldatapb.Workflow, res *tabletmanagerdatapb.ReadVReplicationWorkflowResponse, tablet *topo.TabletInfo) error {
- // This is not called concurrently, but we still protect the maps to ensure
- // that we're concurrency-safe in the face of future changes (e.g. where other
- // things are running concurrently with this which also access these maps).
- m.Lock()
- defer m.Unlock()
- for _, rstream := range res.Streams {
- // The value in the pos column can be compressed and thus not
- // have a valid GTID consisting of valid UTF-8 characters so we
- // have to decode it so that it's properly decompressed first
- // when needed.
- pos := rstream.Pos
- if pos != "" {
- mpos, err := binlogplayer.DecodePosition(pos)
- if err != nil {
- return err
- }
- pos = mpos.String()
- }
-
- cells := strings.Split(res.Cells, ",")
- for i := range cells {
- cells[i] = strings.TrimSpace(cells[i])
- }
- options := res.Options
- if options != "" {
- if err := json.Unmarshal([]byte(options), &workflow.Options); err != nil {
- return err
- }
- }
- stream := &vtctldatapb.Workflow_Stream{
- Id: int64(rstream.Id),
- Shard: tablet.Shard,
- Tablet: tablet.Alias,
- BinlogSource: rstream.Bls,
- Position: pos,
- StopPosition: rstream.StopPos,
- State: rstream.State.String(),
- DbName: tablet.DbName(),
- TabletTypes: res.TabletTypes,
- TabletSelectionPreference: res.TabletSelectionPreference,
- Cells: cells,
- TransactionTimestamp: rstream.TransactionTimestamp,
- TimeUpdated: rstream.TimeUpdated,
- Message: rstream.Message,
- Tags: strings.Split(res.Tags, ","),
- RowsCopied: rstream.RowsCopied,
- ThrottlerStatus: &vtctldatapb.Workflow_Stream_ThrottlerStatus{
- ComponentThrottled: rstream.ComponentThrottled,
- TimeThrottled: rstream.TimeThrottled,
- },
- }
-
- // Merge in copy states, which we've already fetched.
- shardStreamId := fmt.Sprintf("%s/%d", tablet.Shard, stream.Id)
- if copyState, ok := copyStatesByShardStreamId[shardStreamId]; ok {
- stream.CopyStates = copyState
- }
-
- if rstream.TimeUpdated == nil {
- rstream.TimeUpdated = &vttimepb.Time{}
- }
-
- switch {
- case strings.Contains(strings.ToLower(stream.Message), "error"):
- stream.State = binlogdatapb.VReplicationWorkflowState_Error.String()
- case stream.State == binlogdatapb.VReplicationWorkflowState_Running.String() && len(stream.CopyStates) > 0:
- stream.State = binlogdatapb.VReplicationWorkflowState_Copying.String()
- case stream.State == binlogdatapb.VReplicationWorkflowState_Running.String() && int64(time.Now().Second())-rstream.TimeUpdated.Seconds > 10:
- stream.State = binlogdatapb.VReplicationWorkflowState_Lagging.String()
- }
-
- shardStreamKey := fmt.Sprintf("%s/%s", tablet.Shard, tablet.AliasString())
- shardStream, ok := workflow.ShardStreams[shardStreamKey]
- if !ok {
- ctx, cancel := context.WithTimeout(ctx, topo.RemoteOperationTimeout)
- defer cancel()
-
- si, err := s.ts.GetShard(ctx, req.Keyspace, tablet.Shard)
- if err != nil {
- return err
- }
-
- shardStream = &vtctldatapb.Workflow_ShardStream{
- Streams: nil,
- TabletControls: si.TabletControls,
- IsPrimaryServing: si.IsPrimaryServing,
- }
-
- workflow.ShardStreams[shardStreamKey] = shardStream
- }
-
- shardStream.Streams = append(shardStream.Streams, stream)
- sourceShardsByWorkflow[workflow.Name].Insert(stream.BinlogSource.Shard)
- targetShardsByWorkflow[workflow.Name].Insert(tablet.Shard)
-
- if ks, ok := sourceKeyspaceByWorkflow[workflow.Name]; ok && ks != stream.BinlogSource.Keyspace {
- return vterrors.Wrapf(ErrMultipleSourceKeyspaces, "workflow = %v, ks1 = %v, ks2 = %v", workflow.Name, ks, stream.BinlogSource.Keyspace)
- }
-
- sourceKeyspaceByWorkflow[workflow.Name] = stream.BinlogSource.Keyspace
-
- if ks, ok := targetKeyspaceByWorkflow[workflow.Name]; ok && ks != tablet.Keyspace {
- return vterrors.Wrapf(ErrMultipleTargetKeyspaces, "workflow = %v, ks1 = %v, ks2 = %v", workflow.Name, ks, tablet.Keyspace)
- }
-
- targetKeyspaceByWorkflow[workflow.Name] = tablet.Keyspace
-
- if stream.TimeUpdated == nil {
- stream.TimeUpdated = &vttimepb.Time{}
- }
- timeUpdated := time.Unix(stream.TimeUpdated.Seconds, 0)
- vreplicationLag := time.Since(timeUpdated)
-
- // MaxVReplicationLag represents the time since we last processed any event
- // in the workflow.
- if currentMaxLag, ok := maxVReplicationLagByWorkflow[workflow.Name]; ok {
- if vreplicationLag.Seconds() > currentMaxLag {
- maxVReplicationLagByWorkflow[workflow.Name] = vreplicationLag.Seconds()
- }
- } else {
- maxVReplicationLagByWorkflow[workflow.Name] = vreplicationLag.Seconds()
- }
-
- workflow.WorkflowType = res.WorkflowType.String()
- workflow.WorkflowSubType = res.WorkflowSubType.String()
- workflow.DeferSecondaryKeys = res.DeferSecondaryKeys
-
- // MaxVReplicationTransactionLag estimates the actual statement processing lag
- // between the source and the target. If we are still processing source events it
- // is the difference b/w current time and the timestamp of the last event. If
- // heartbeats are more recent than the last event, then the lag is the time since
- // the last heartbeat as there can be an actual event immediately after the
- // heartbeat, but which has not yet been processed on the target.
- // We don't allow switching during the copy phase, so in that case we just return
- // a large lag. All timestamps are in seconds since epoch.
- if _, ok := maxVReplicationTransactionLagByWorkflow[workflow.Name]; !ok {
- maxVReplicationTransactionLagByWorkflow[workflow.Name] = 0
- }
- if rstream.TransactionTimestamp == nil {
- rstream.TransactionTimestamp = &vttimepb.Time{}
- }
- lastTransactionTime := rstream.TransactionTimestamp.Seconds
- if rstream.TimeHeartbeat == nil {
- rstream.TimeHeartbeat = &vttimepb.Time{}
- }
- lastHeartbeatTime := rstream.TimeHeartbeat.Seconds
- if stream.State == binlogdatapb.VReplicationWorkflowState_Copying.String() {
- maxVReplicationTransactionLagByWorkflow[workflow.Name] = math.MaxInt64
- } else {
- if lastTransactionTime == 0 /* no new events after copy */ ||
- lastHeartbeatTime > lastTransactionTime /* no recent transactions, so all caught up */ {
-
- lastTransactionTime = lastHeartbeatTime
- }
- now := time.Now().Unix() /* seconds since epoch */
- transactionReplicationLag := float64(now - lastTransactionTime)
- if transactionReplicationLag > maxVReplicationTransactionLagByWorkflow[workflow.Name] {
- maxVReplicationTransactionLagByWorkflow[workflow.Name] = transactionReplicationLag
- }
- }
- }
-
- return nil
- }
-
- for tablet, result := range results {
- // In the old implementation, we knew we had at most one (0 <= N <= 1)
- // workflow for each shard primary we queried. There might be multiple
- // rows (streams) comprising that workflow, so we would aggregate the
- // rows for a given primary into a single value ("the workflow",
- // ReplicationStatusResult in the old types).
- //
- // In this version, we have many (N >= 0) workflows for each shard
- // primary we queried, so we need to determine if each row corresponds
- // to a workflow we're already aggregating, or if it's a workflow we
- // haven't seen yet for that shard primary. We use the workflow name to
- // dedupe for this.
- for _, wfres := range result.Workflows {
- workflowName := wfres.Workflow
- workflow, ok := workflowsMap[workflowName]
- if !ok {
- workflow = &vtctldatapb.Workflow{
- Name: workflowName,
- ShardStreams: map[string]*vtctldatapb.Workflow_ShardStream{},
- }
-
- workflowsMap[workflowName] = workflow
- sourceShardsByWorkflow[workflowName] = sets.New[string]()
- targetShardsByWorkflow[workflowName] = sets.New[string]()
- }
-
- if err := scanWorkflow(ctx, workflow, wfres, tablet); err != nil {
- return nil, err
- }
- }
- }
-
- var (
- fetchLogsWG sync.WaitGroup
- vrepLogQuery = strings.TrimSpace(`
-SELECT
- id,
- vrepl_id,
- type,
- state,
- message,
- created_at,
- updated_at,
- count
-FROM
- _vt.vreplication_log
-WHERE vrepl_id IN %a
-ORDER BY
- vrepl_id ASC,
- id ASC
-`)
- )
-
- fetchStreamLogs := func(ctx context.Context, workflow *vtctldatapb.Workflow) {
- span, ctx := trace.NewSpan(ctx, "workflow.Server.fetchStreamLogs")
- defer span.Finish()
-
- span.Annotate("keyspace", req.Keyspace)
- span.Annotate("workflow", workflow.Name)
-
- vreplIDs := make([]int64, 0, len(workflow.ShardStreams))
- for _, shardStream := range maps.Values(workflow.ShardStreams) {
- for _, stream := range shardStream.Streams {
- vreplIDs = append(vreplIDs, stream.Id)
- }
- }
- idsBV, err := sqltypes.BuildBindVariable(vreplIDs)
- if err != nil {
- return
- }
-
- query, err := sqlparser.ParseAndBind(vrepLogQuery, idsBV)
- if err != nil {
- return
- }
-
- vx := vexec.NewVExec(req.Keyspace, workflow.Name, s.ts, s.tmc, s.SQLParser())
- results, err := vx.QueryContext(ctx, query)
- if err != nil {
- // Note that we do not return here. If there are any query results
- // in the map (i.e. some tablets returned successfully), we will
- // still try to read log rows from them on a best-effort basis. But,
- // we will also pre-emptively record the top-level fetch error on
- // every stream in every shard in the workflow. Further processing
- // below may override the error message for certain streams.
- for _, streams := range workflow.ShardStreams {
- for _, stream := range streams.Streams {
- stream.LogFetchError = err.Error()
- }
- }
- }
-
- for target, p3qr := range results {
- qr := sqltypes.Proto3ToResult(p3qr)
- shardStreamKey := fmt.Sprintf("%s/%s", target.Shard, target.AliasString())
-
- ss, ok := workflow.ShardStreams[shardStreamKey]
- if !ok || ss == nil {
- continue
- }
-
- streams := ss.Streams
- streamIdx := 0
- markErrors := func(err error) {
- if streamIdx >= len(streams) {
- return
- }
-
- streams[streamIdx].LogFetchError = err.Error()
- }
-
- for _, row := range qr.Rows {
- id, err := row[0].ToCastInt64()
- if err != nil {
- markErrors(err)
- continue
- }
-
- streamID, err := row[1].ToCastInt64()
- if err != nil {
- markErrors(err)
- continue
- }
-
- typ := row[2].ToString()
- state := row[3].ToString()
- message := row[4].ToString()
-
- createdAt, err := time.Parse("2006-01-02 15:04:05", row[5].ToString())
- if err != nil {
- markErrors(err)
- continue
- }
-
- updatedAt, err := time.Parse("2006-01-02 15:04:05", row[6].ToString())
- if err != nil {
- markErrors(err)
- continue
- }
-
- count, err := row[7].ToCastInt64()
- if err != nil {
- markErrors(err)
- continue
- }
-
- streamLog := &vtctldatapb.Workflow_Stream_Log{
- Id: id,
- StreamId: streamID,
- Type: typ,
- State: state,
- CreatedAt: &vttimepb.Time{
- Seconds: createdAt.Unix(),
- },
- UpdatedAt: &vttimepb.Time{
- Seconds: updatedAt.Unix(),
- },
- Message: message,
- Count: count,
- }
-
- // Earlier, in the main loop where we called scanWorkflow for
- // each _vt.vreplication row, we also sorted each ShardStreams
- // slice by ascending id, and our _vt.vreplication_log query
- // ordered by (stream_id ASC, id ASC), so we can walk the
- // streams in index order in O(n) amortized over all the rows
- // for this tablet.
- for streamIdx < len(streams) {
- stream := streams[streamIdx]
- if stream.Id < streamLog.StreamId {
- streamIdx++
- continue
- }
-
- if stream.Id > streamLog.StreamId {
- s.Logger().Warningf("Found stream log for nonexistent stream: %+v", streamLog)
- // This can happen on manual/failed workflow cleanup so keep going.
- continue
- }
-
- // stream.Id == streamLog.StreamId
- stream.Logs = append(stream.Logs, streamLog)
- break
- }
- }
- }
- }
-
- workflows := make([]*vtctldatapb.Workflow, 0, len(workflowsMap))
-
- for name, workflow := range workflowsMap {
- sourceShards, ok := sourceShardsByWorkflow[name]
- if !ok {
- return nil, vterrors.Wrapf(ErrInvalidWorkflow, "%s has no source shards", name)
- }
-
- sourceKeyspace, ok := sourceKeyspaceByWorkflow[name]
- if !ok {
- return nil, vterrors.Wrapf(ErrInvalidWorkflow, "%s has no source keyspace", name)
- }
-
- targetShards, ok := targetShardsByWorkflow[name]
- if !ok {
- return nil, vterrors.Wrapf(ErrInvalidWorkflow, "%s has no target shards", name)
- }
-
- targetKeyspace, ok := targetKeyspaceByWorkflow[name]
- if !ok {
- return nil, vterrors.Wrapf(ErrInvalidWorkflow, "%s has no target keyspace", name)
- }
-
- maxVReplicationLag, ok := maxVReplicationLagByWorkflow[name]
- if !ok {
- return nil, vterrors.Wrapf(ErrInvalidWorkflow, "%s has no tracked vreplication lag", name)
- }
-
- maxVReplicationTransactionLag, ok := maxVReplicationTransactionLagByWorkflow[name]
- if !ok {
- return nil, vterrors.Wrapf(ErrInvalidWorkflow, "%s has no tracked vreplication transaction lag", name)
- }
-
- workflow.Source = &vtctldatapb.Workflow_ReplicationLocation{
- Keyspace: sourceKeyspace,
- Shards: sets.List(sourceShards),
- }
-
- workflow.Target = &vtctldatapb.Workflow_ReplicationLocation{
- Keyspace: targetKeyspace,
- Shards: sets.List(targetShards),
- }
-
- workflow.MaxVReplicationLag = int64(maxVReplicationLag)
- workflow.MaxVReplicationTransactionLag = int64(maxVReplicationTransactionLag)
-
- // Sort shard streams by stream_id ASC, to support an optimization
- // in fetchStreamLogs below.
- for _, shardStreams := range workflow.ShardStreams {
- sort.Slice(shardStreams.Streams, func(i, j int) bool {
- return shardStreams.Streams[i].Id < shardStreams.Streams[j].Id
- })
- }
-
- workflows = append(workflows, workflow)
-
- if req.IncludeLogs {
- // Fetch logs for all streams associated with this workflow in the background.
- fetchLogsWG.Add(1)
- go func(ctx context.Context, workflow *vtctldatapb.Workflow) {
- defer fetchLogsWG.Done()
- fetchStreamLogs(ctx, workflow)
- }(ctx, workflow)
- }
+ workflows, err := w.buildWorkflows(ctx, workflowsByShard, copyStatesByShardStreamId, req)
+ if err != nil {
+ return nil, err
}
- // Wait for all the log fetchers to finish.
- fetchLogsWG.Wait()
-
return &vtctldatapb.GetWorkflowsResponse{
Workflows: workflows,
}, nil
@@ -1078,51 +558,6 @@ func (s *Server) getWorkflowState(ctx context.Context, targetKeyspace, workflowN
return ts, state, nil
}
-func (s *Server) getWorkflowCopyStates(ctx context.Context, tablet *topo.TabletInfo, streamIds []int32) ([]*vtctldatapb.Workflow_Stream_CopyState, error) {
- span, ctx := trace.NewSpan(ctx, "workflow.Server.getWorkflowCopyStates")
- defer span.Finish()
-
- span.Annotate("keyspace", tablet.Keyspace)
- span.Annotate("shard", tablet.Shard)
- span.Annotate("tablet_alias", tablet.AliasString())
- span.Annotate("stream_ids", fmt.Sprintf("%#v", streamIds))
-
- idsBV, err := sqltypes.BuildBindVariable(streamIds)
- if err != nil {
- return nil, err
- }
- query, err := sqlparser.ParseAndBind("select vrepl_id, table_name, lastpk from _vt.copy_state where vrepl_id in %a and id in (select max(id) from _vt.copy_state where vrepl_id in %a group by vrepl_id, table_name)",
- idsBV, idsBV)
- if err != nil {
- return nil, err
- }
- qr, err := s.tmc.VReplicationExec(ctx, tablet.Tablet, query)
- if err != nil {
- return nil, err
- }
-
- result := sqltypes.Proto3ToResult(qr)
- if result == nil {
- return nil, nil
- }
-
- copyStates := make([]*vtctldatapb.Workflow_Stream_CopyState, len(result.Rows))
- for i, row := range result.Rows {
- streamId, err := row[0].ToInt64()
- if err != nil {
- return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "failed to cast vrepl_id to int64: %v", err)
- }
- // These string fields are technically varbinary, but this is close enough.
- copyStates[i] = &vtctldatapb.Workflow_Stream_CopyState{
- StreamId: streamId,
- Table: row[1].ToString(),
- LastPk: row[2].ToString(),
- }
- }
-
- return copyStates, nil
-}
-
// LookupVindexCreate creates the lookup vindex in the specified
// keyspace and creates a VReplication workflow to backfill that
// vindex from the keyspace to the target/lookup table specified.
@@ -1196,25 +631,7 @@ func (s *Server) LookupVindexExternalize(ctx context.Context, req *vtctldatapb.L
return nil, err
}
- // Create a parallelizer function.
- forAllTargets := func(f func(*topo.ShardInfo) error) error {
- var wg sync.WaitGroup
- allErrors := &concurrency.AllErrorRecorder{}
- for _, targetShard := range targetShards {
- wg.Add(1)
- go func(targetShard *topo.ShardInfo) {
- defer wg.Done()
-
- if err := f(targetShard); err != nil {
- allErrors.RecordError(err)
- }
- }(targetShard)
- }
- wg.Wait()
- return allErrors.AggrError(vterrors.Aggregate)
- }
-
- err = forAllTargets(func(targetShard *topo.ShardInfo) error {
+ err = forAllShards(targetShards, func(targetShard *topo.ShardInfo) error {
targetPrimary, err := s.ts.GetTablet(ctx, targetShard.PrimaryAlias)
if err != nil {
return err
@@ -1358,6 +775,21 @@ func (s *Server) moveTablesCreate(ctx context.Context, req *vtctldatapb.MoveTabl
sourceTopo = s.ts
)
+ if req.GetWorkflowOptions() != nil && req.WorkflowOptions.GlobalKeyspace != "" {
+ // Confirm that the keyspace exists and it is unsharded.
+ gvs, err := s.ts.GetVSchema(ctx, req.WorkflowOptions.GlobalKeyspace)
+ if err != nil {
+ if topo.IsErrType(err, topo.NoNode) {
+ return nil, vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "global-keyspace %s does not exist", req.WorkflowOptions.GlobalKeyspace)
+ }
+ return nil, vterrors.Wrapf(err, "failed to validate global-keyspace")
+ }
+ if gvs.Sharded {
+ return nil, vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "global-keyspace %s is sharded and thus cannot be used for global resources",
+ req.WorkflowOptions.GlobalKeyspace)
+ }
+ }
+
// When the source is an external cluster mounted using the Mount command.
if req.ExternalClusterName != "" {
externalTopo, err = s.ts.OpenExternalVitessClusterServer(ctx, req.ExternalClusterName)
@@ -1395,7 +827,7 @@ func (s *Server) moveTablesCreate(ctx context.Context, req *vtctldatapb.MoveTabl
return nil, err
}
if len(tables) > 0 {
- err = s.validateSourceTablesExist(ctx, sourceKeyspace, ksTables, tables)
+ err = validateSourceTablesExist(ctx, sourceKeyspace, ksTables, tables)
if err != nil {
return nil, err
}
@@ -1407,7 +839,7 @@ func (s *Server) moveTablesCreate(ctx context.Context, req *vtctldatapb.MoveTabl
}
}
if len(req.ExcludeTables) > 0 {
- err = s.validateSourceTablesExist(ctx, sourceKeyspace, ksTables, req.ExcludeTables)
+ err = validateSourceTablesExist(ctx, sourceKeyspace, ksTables, req.ExcludeTables)
if err != nil {
return nil, err
}
@@ -1425,12 +857,15 @@ func (s *Server) moveTablesCreate(ctx context.Context, req *vtctldatapb.MoveTabl
s.Logger().Infof("Found tables to move: %s", strings.Join(tables, ","))
if !vschema.Sharded {
- // Save the original in case we need to restore it for a late failure
- // in the defer().
+ // Save the original in case we need to restore it for a late failure in
+ // the defer().
origVSchema = vschema.CloneVT()
if err := s.addTablesToVSchema(ctx, sourceKeyspace, vschema, tables, externalTopo == nil); err != nil {
return nil, err
}
+ if err := s.ts.SaveVSchema(ctx, targetKeyspace, vschema); err != nil {
+ return nil, err
+ }
}
ms := &vtctldatapb.MaterializeSettings{
Workflow: req.Workflow,
@@ -1504,7 +939,7 @@ func (s *Server) moveTablesCreate(ctx context.Context, req *vtctldatapb.MoveTabl
ctx, workflowUnlock, lockErr := s.ts.LockName(ctx, lockName, "MoveTablesCreate")
if lockErr != nil {
ts.Logger().Errorf("Locking the workflow %s failed: %v", lockName, lockErr)
- return nil, lockErr
+ return nil, vterrors.Wrapf(lockErr, "failed to lock the %s workflow", lockName)
}
defer workflowUnlock(&err)
ctx, targetUnlock, lockErr := sw.lockKeyspace(ctx, ts.TargetKeyspaceName(), "MoveTablesCreate")
@@ -1541,14 +976,9 @@ func (s *Server) moveTablesCreate(ctx context.Context, req *vtctldatapb.MoveTabl
if err := s.setupInitialRoutingRules(ctx, req, mz, tables); err != nil {
return nil, err
}
-
- // We added to the vschema.
- if err := s.ts.SaveVSchema(ctx, targetKeyspace, vschema); err != nil {
- return nil, err
- }
}
if isStandardMoveTables() { // Non-standard ones do not use shard scoped mechanisms
- if err := s.setupInitialDeniedTables(ctx, ts); err != nil {
+ if err := setupInitialDeniedTables(ctx, ts); err != nil {
return nil, vterrors.Wrapf(err, "failed to put initial denied tables entries in place on the target shards")
}
}
@@ -1603,7 +1033,7 @@ func (s *Server) moveTablesCreate(ctx context.Context, req *vtctldatapb.MoveTabl
})
}
-func (s *Server) validateRoutingRuleFlags(req *vtctldatapb.MoveTablesCreateRequest, mz *materializer) error {
+func validateRoutingRuleFlags(req *vtctldatapb.MoveTablesCreateRequest, mz *materializer) error {
if mz.IsMultiTenantMigration() {
switch {
case req.NoRoutingRules:
@@ -1615,7 +1045,7 @@ func (s *Server) validateRoutingRuleFlags(req *vtctldatapb.MoveTablesCreateReque
return nil
}
-func (s *Server) setupInitialDeniedTables(ctx context.Context, ts *trafficSwitcher) error {
+func setupInitialDeniedTables(ctx context.Context, ts *trafficSwitcher) error {
if ts.MigrationType() != binlogdatapb.MigrationType_TABLES {
return nil
}
@@ -1633,7 +1063,7 @@ func (s *Server) setupInitialDeniedTables(ctx context.Context, ts *trafficSwitch
}
func (s *Server) setupInitialRoutingRules(ctx context.Context, req *vtctldatapb.MoveTablesCreateRequest, mz *materializer, tables []string) error {
- if err := s.validateRoutingRuleFlags(req, mz); err != nil {
+ if err := validateRoutingRuleFlags(req, mz); err != nil {
return err
}
@@ -1706,6 +1136,15 @@ func (s *Server) MoveTablesComplete(ctx context.Context, req *vtctldatapb.MoveTa
return nil, err
}
+ // Lock the workflow while we complete it.
+ lockName := fmt.Sprintf("%s/%s", ts.TargetKeyspaceName(), ts.WorkflowName())
+ ctx, workflowUnlock, lockErr := s.ts.LockName(ctx, lockName, "MoveTablesComplete")
+ if lockErr != nil {
+ ts.Logger().Errorf("Locking the workflow %s failed: %v", lockName, lockErr)
+ return nil, vterrors.Wrapf(lockErr, "failed to lock the %s workflow", lockName)
+ }
+ defer workflowUnlock(&err)
+
var summary string
if req.DryRun {
summary = fmt.Sprintf("Complete dry run results for workflow %s.%s at %v", req.TargetKeyspace, req.Workflow, time.Now().UTC().Format(time.RFC822))
@@ -1730,7 +1169,7 @@ func (s *Server) MoveTablesComplete(ctx context.Context, req *vtctldatapb.MoveTa
}
if !state.WritesSwitched || len(state.ReplicaCellsNotSwitched) > 0 || len(state.RdonlyCellsNotSwitched) > 0 {
- return nil, ErrWorkflowNotFullySwitched
+ return nil, ErrWorkflowCompleteNotFullySwitched
}
var renameTable TableRemovalType
if req.RenameTables {
@@ -1824,8 +1263,21 @@ func (s *Server) VDiffCreate(ctx context.Context, req *vtctldatapb.VDiffCreateRe
span.Annotate("auto_start", req.GetAutoStart())
}
+ var err error
+ req.Uuid = strings.TrimSpace(req.Uuid)
+ if req.Uuid == "" { // Generate a UUID
+ req.Uuid = uuid.New().String()
+ } else { // Validate UUID if provided
+ if err = uuid.Validate(req.Uuid); err != nil {
+ return nil, vterrors.Wrapf(err, "invalid UUID provided: %s", req.Uuid)
+ }
+ }
+
tabletTypesStr := discovery.BuildTabletTypesString(req.TabletTypes, req.TabletSelectionPreference)
+ if req.Limit == 0 { // This would produce no useful results
+ req.Limit = math.MaxInt64
+ }
// This is a pointer so there's no ZeroValue in the message
// and an older v18 client will not provide it.
if req.MaxDiffDuration == nil {
@@ -1835,7 +1287,10 @@ func (s *Server) VDiffCreate(ctx context.Context, req *vtctldatapb.VDiffCreateRe
// client should always provide them, but we check anyway to
// be safe.
if req.FilteredReplicationWaitTime == nil {
- req.FilteredReplicationWaitTime = &vttimepb.Duration{}
+ // A value of 0 is not valid as the vdiff will never succeed.
+ req.FilteredReplicationWaitTime = &vttimepb.Duration{
+ Seconds: int64(DefaultTimeout.Seconds()),
+ }
}
if req.WaitUpdateInterval == nil {
req.WaitUpdateInterval = &vttimepb.Duration{}
@@ -2089,11 +1544,22 @@ func (s *Server) WorkflowDelete(ctx context.Context, req *vtctldatapb.WorkflowDe
}
if ts.workflowType != binlogdatapb.VReplicationWorkflowType_CreateLookupIndex {
- // Return an error if the workflow traffic is partially switched.
- if state.WritesSwitched || len(state.ReplicaCellsSwitched) > 0 || len(state.RdonlyCellsSwitched) > 0 {
- return nil, ErrWorkflowPartiallySwitched
+ // Return an error if the write workflow traffic is switched.
+ if state.WritesSwitched {
+ return nil, ErrWorkflowDeleteWritesSwitched
}
+ // If only reads have been switched, then we can delete the
+ // workflow and its related artifacts.
+ }
+
+ // Lock the workflow for deletion.
+ lockName := fmt.Sprintf("%s/%s", ts.TargetKeyspaceName(), ts.WorkflowName())
+ ctx, workflowUnlock, lockErr := s.ts.LockName(ctx, lockName, "WorkflowDelete")
+ if lockErr != nil {
+ ts.Logger().Errorf("Locking the workflow %s failed: %v", lockName, lockErr)
+ return nil, vterrors.Wrapf(lockErr, "failed to lock the %s workflow", lockName)
}
+ defer workflowUnlock(&err)
if state.WorkflowType == TypeMigrate {
_, err := s.finalizeMigrateWorkflow(ctx, ts, "", true, req.GetKeepData(), req.GetKeepRoutingRules(), false)
@@ -2115,20 +1581,29 @@ func (s *Server) WorkflowDelete(ctx context.Context, req *vtctldatapb.WorkflowDe
s.optimizeCopyStateTable(tablet.Tablet)
return res.Result, err
}
- delCtx, delCancel := context.WithTimeout(ctx, topo.RemoteOperationTimeout*2)
- defer delCancel()
- res, err := vx.CallbackContext(delCtx, callback)
- if err != nil {
- return nil, err
- }
- if len(res) == 0 {
- return nil, vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "the %s workflow does not exist in the %s keyspace", req.Workflow, req.Keyspace)
+ // Multi-tenant migrations delete only that tenant's records from the target tables
+ // in batches and we may not be able to complete that work before the timeout. We
+ // delete the workflow only after the cleanup work completes successfully so the
+ // workflow can be canceled multiple times if needed in order to fully cleanup
+ // all of the tenant's data that we had copied.
+ if ts.IsMultiTenantMigration() {
+ if ts.workflowType != binlogdatapb.VReplicationWorkflowType_MoveTables { // Should never happen
+ return nil, vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "unsupported workflow type %q for multi-tenant migration",
+ ts.workflowType)
+ }
+ // We need to delete the rows that the target tables would have for the tenant.
+ if !req.GetKeepData() {
+ if err := s.deleteTenantData(ctx, ts, req.DeleteBatchSize); err != nil {
+ return nil, vterrors.Wrapf(err, "failed to fully delete all migrated data for tenant %s, please retry the operation",
+ ts.options.TenantId)
+ }
+ }
}
// Cleanup related data and artifacts. There are none for a LookupVindex workflow.
if ts.workflowType != binlogdatapb.VReplicationWorkflowType_CreateLookupIndex {
- if _, err := s.DropTargets(delCtx, ts, req.GetKeepData(), req.GetKeepRoutingRules(), false); err != nil {
+ if _, err := s.dropTargets(ctx, ts, req.GetKeepData(), req.GetKeepRoutingRules(), false); err != nil {
if topo.IsErrType(err, topo.NoNode) {
return nil, vterrors.Wrapf(err, "%s keyspace does not exist", req.GetKeyspace())
}
@@ -2136,6 +1611,15 @@ func (s *Server) WorkflowDelete(ctx context.Context, req *vtctldatapb.WorkflowDe
}
}
+ // Now that we've succesfully cleaned up everything else, we can finally delete
+ // the workflow.
+ delCtx, delCancel := context.WithTimeout(ctx, topo.RemoteOperationTimeout*2)
+ defer delCancel()
+ res, err := vx.CallbackContext(delCtx, callback)
+ if err != nil {
+ return nil, err
+ }
+
response := &vtctldatapb.WorkflowDeleteResponse{}
response.Summary = fmt.Sprintf("Successfully cancelled the %s workflow in the %s keyspace", req.Workflow, req.Keyspace)
details := make([]*vtctldatapb.WorkflowDeleteResponse_TabletInfo, 0, len(res))
@@ -2438,32 +1922,6 @@ func (s *Server) WorkflowUpdate(ctx context.Context, req *vtctldatapb.WorkflowUp
return response, nil
}
-// validateSourceTablesExist validates that tables provided are present
-// in the source keyspace.
-func (s *Server) validateSourceTablesExist(ctx context.Context, sourceKeyspace string, ksTables, tables []string) error {
- var missingTables []string
- for _, table := range tables {
- if schema.IsInternalOperationTableName(table) {
- continue
- }
- found := false
-
- for _, ksTable := range ksTables {
- if table == ksTable {
- found = true
- break
- }
- }
- if !found {
- missingTables = append(missingTables, table)
- }
- }
- if len(missingTables) > 0 {
- return vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "table(s) not found in source keyspace %s: %s", sourceKeyspace, strings.Join(missingTables, ","))
- }
- return nil
-}
-
// addTablesToVSchema adds tables to an (unsharded) vschema if they are not already defined.
// If copyVSchema is true then we copy over the vschema table definitions from the source,
// otherwise we create empty ones.
@@ -2502,7 +1960,7 @@ func (s *Server) addTablesToVSchema(ctx context.Context, sourceKeyspace string,
func (s *Server) collectTargetStreams(ctx context.Context, mz *materializer) ([]string, error) {
var shardTablets []string
var mu sync.Mutex
- err := mz.forAllTargets(func(target *topo.ShardInfo) error {
+ err := forAllShards(mz.targetShards, func(target *topo.ShardInfo) error {
var err error
targetPrimary, err := s.ts.GetTablet(ctx, target.PrimaryAlias)
if err != nil {
@@ -2528,30 +1986,13 @@ func (s *Server) collectTargetStreams(ctx context.Context, mz *materializer) ([]
}
func (s *Server) checkIfPreviousJournalExists(ctx context.Context, mz *materializer, migrationID int64) (bool, []string, error) {
- forAllSources := func(f func(*topo.ShardInfo) error) error {
- var wg sync.WaitGroup
- allErrors := &concurrency.AllErrorRecorder{}
- for _, sourceShard := range mz.sourceShards {
- wg.Add(1)
- go func(sourceShard *topo.ShardInfo) {
- defer wg.Done()
-
- if err := f(sourceShard); err != nil {
- allErrors.RecordError(err)
- }
- }(sourceShard)
- }
- wg.Wait()
- return allErrors.AggrError(vterrors.Aggregate)
- }
-
var (
mu sync.Mutex
exists bool
tablets []string
)
- err := forAllSources(func(si *topo.ShardInfo) error {
+ err := forAllShards(mz.sourceShards, func(si *topo.ShardInfo) error {
tablet, err := s.ts.GetTablet(ctx, si.PrimaryAlias)
if err != nil {
return err
@@ -2638,9 +2079,9 @@ func (s *Server) optimizeCopyStateTable(tablet *topodatapb.Tablet) {
}()
}
-// DropTargets cleans up target tables, shards and denied tables if a MoveTables/Reshard
-// is cancelled.
-func (s *Server) DropTargets(ctx context.Context, ts *trafficSwitcher, keepData, keepRoutingRules, dryRun bool) (*[]string, error) {
+// dropTargets cleans up target tables, shards and denied tables if a MoveTables/Reshard
+// is canceled.
+func (s *Server) dropTargets(ctx context.Context, ts *trafficSwitcher, keepData, keepRoutingRules, dryRun bool) (*[]string, error) {
var err error
ts.keepRoutingRules = keepRoutingRules
var sw iswitcher
@@ -2650,32 +2091,50 @@ func (s *Server) DropTargets(ctx context.Context, ts *trafficSwitcher, keepData,
sw = &switcher{s: s, ts: ts}
}
- // Lock the workflow along with its source and target keyspaces.
- lockName := fmt.Sprintf("%s/%s", ts.TargetKeyspaceName(), ts.WorkflowName())
- ctx, workflowUnlock, lockErr := s.ts.LockName(ctx, lockName, "DropTargets")
- if lockErr != nil {
- return defaultErrorHandler(ts.Logger(), fmt.Sprintf("failed to lock the %s workflow", lockName), lockErr)
- }
- defer workflowUnlock(&err)
+ // Lock the source and target keyspaces.
ctx, sourceUnlock, lockErr := sw.lockKeyspace(ctx, ts.SourceKeyspaceName(), "DropTargets")
if lockErr != nil {
- return defaultErrorHandler(ts.Logger(), fmt.Sprintf("failed to lock the %s keyspace", ts.SourceKeyspaceName()), lockErr)
+ return defaultErrorHandler(ts.Logger(), fmt.Sprintf("failed to lock the %s keyspace", ts.SourceKeyspaceName()),
+ lockErr)
}
defer sourceUnlock(&err)
if ts.TargetKeyspaceName() != ts.SourceKeyspaceName() {
lockCtx, targetUnlock, lockErr := sw.lockKeyspace(ctx, ts.TargetKeyspaceName(), "DropTargets")
if lockErr != nil {
- return defaultErrorHandler(ts.Logger(), fmt.Sprintf("failed to lock the %s keyspace", ts.TargetKeyspaceName()), lockErr)
+ return defaultErrorHandler(ts.Logger(), fmt.Sprintf("failed to lock the %s keyspace", ts.TargetKeyspaceName()),
+ lockErr)
}
defer targetUnlock(&err)
ctx = lockCtx
}
+ // Stop the workflow before we delete the artifacts so that it doesn't try and
+ // continue doing work, and producing errors, as we delete the related artifacts.
+ if err = ts.ForAllTargets(func(target *MigrationTarget) error {
+ primary := target.GetPrimary()
+ if primary == nil {
+ return vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "no primary tablet found for target shard %s/%s",
+ ts.targetKeyspace, target.GetShard())
+ }
+ _, err := ts.ws.tmc.UpdateVReplicationWorkflow(ctx, primary.Tablet, &tabletmanagerdatapb.UpdateVReplicationWorkflowRequest{
+ Workflow: ts.workflow,
+ State: ptr.Of(binlogdatapb.VReplicationWorkflowState_Stopped),
+ })
+ if err != nil {
+ return vterrors.Wrapf(err, "failed to stop workflow %s on shard %s/%s", ts.workflow, primary.Keyspace, primary.Shard)
+ }
+ return nil
+ }); err != nil {
+ return nil, err
+ }
+
if !keepData {
switch ts.MigrationType() {
case binlogdatapb.MigrationType_TABLES:
- if err := sw.removeTargetTables(ctx); err != nil {
- return nil, err
+ if !ts.IsMultiTenantMigration() {
+ if err := sw.removeTargetTables(ctx); err != nil {
+ return nil, err
+ }
}
if err := sw.dropSourceDeniedTables(ctx); err != nil {
return nil, err
@@ -2698,6 +2157,56 @@ func (s *Server) DropTargets(ctx context.Context, ts *trafficSwitcher, keepData,
return sw.logs(), nil
}
+// deleteTenantData attempts to delete all of the tenant's data that was migrated
+// in the workflow that we are canceling or deleting. This work can take some
+// time so if the context ends then the user will need to retry.
+func (s *Server) deleteTenantData(ctx context.Context, ts *trafficSwitcher, batchSize int64) error {
+ if ts.workflowType != binlogdatapb.VReplicationWorkflowType_MoveTables {
+ return vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "unsupported workflow type %q for multi-tenant migration",
+ ts.workflowType)
+ }
+ if ts.options == nil || strings.TrimSpace(ts.options.TenantId) == "" {
+ return vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "missing tenant ID in the workflow options")
+ }
+ if len(ts.tables) == 0 { // Nothing to delete
+ return nil
+ }
+
+ tenantPredicate, err := ts.buildTenantPredicate(ctx)
+ if err != nil {
+ return vterrors.Wrap(err, "failed to build delete filter")
+ }
+ deleteFilter := sqlparser.String(&sqlparser.Where{Expr: *tenantPredicate})
+
+ tableFilters := make(map[string]string, len(ts.tables))
+ for _, table := range ts.tables {
+ tableFilters[table] = deleteFilter
+ }
+
+ return ts.ForAllTargets(func(target *MigrationTarget) error {
+ primary := target.GetPrimary()
+ if primary == nil {
+ return vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "no primary tablet found for target shard %s/%s",
+ ts.targetKeyspace, target.GetShard())
+ }
+ // Let's be sure that the workflow is stopped so that it's not generating more data.
+ _, err := ts.ws.tmc.UpdateVReplicationWorkflow(ctx, primary.Tablet, &tabletmanagerdatapb.UpdateVReplicationWorkflowRequest{
+ Workflow: ts.workflow,
+ State: ptr.Of(binlogdatapb.VReplicationWorkflowState_Stopped),
+ })
+ if err != nil {
+ return vterrors.Wrapf(err, "failed to stop workflow %s on shard %s/%s", ts.workflow, primary.Keyspace, primary.Shard)
+ }
+ s.Logger().Infof("Deleting tenant %s data that was migrated in mulit-tenant workflow %s",
+ ts.workflow, ts.options.TenantId)
+ _, err = ts.ws.tmc.DeleteTableData(ctx, primary.Tablet, &tabletmanagerdatapb.DeleteTableDataRequest{
+ TableFilters: tableFilters,
+ BatchSize: batchSize,
+ })
+ return err
+ })
+}
+
func (s *Server) buildTrafficSwitcher(ctx context.Context, targetKeyspace, workflowName string) (*trafficSwitcher, error) {
tgtInfo, err := BuildTargets(ctx, s.ts, s.tmc, targetKeyspace, workflowName)
if err != nil {
@@ -2745,6 +2254,10 @@ func (s *Server) buildTrafficSwitcher(ctx context.Context, targetKeyspace, workf
return nil, vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "source keyspaces are mismatched across streams: %v vs %v", ts.sourceKeyspace, bls.Keyspace)
}
+ if bls.Filter == nil || bls.Filter.Rules == nil {
+ return nil, vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "missing filters for %s/%s", bls.Keyspace, bls.Shard)
+ }
+
if ts.tables == nil {
for _, rule := range bls.Filter.Rules {
ts.tables = append(ts.tables, rule.Match)
@@ -2846,13 +2359,7 @@ func (s *Server) dropSources(ctx context.Context, ts *trafficSwitcher, removalTy
sw = &switcher{ts: ts, s: s}
}
- // Lock the workflow and its source and target keyspaces.
- lockName := fmt.Sprintf("%s/%s", ts.TargetKeyspaceName(), ts.WorkflowName())
- ctx, workflowUnlock, lockErr := s.ts.LockName(ctx, lockName, "DropSources")
- if lockErr != nil {
- return defaultErrorHandler(ts.Logger(), fmt.Sprintf("failed to lock the %s workflow", lockName), lockErr)
- }
- defer workflowUnlock(&err)
+ // Lock the source and target keyspaces.
ctx, sourceUnlock, lockErr := sw.lockKeyspace(ctx, ts.SourceKeyspaceName(), "DropSources")
if lockErr != nil {
return defaultErrorHandler(ts.Logger(), fmt.Sprintf("failed to lock the %s keyspace", ts.SourceKeyspaceName()), lockErr)
@@ -3087,13 +2594,7 @@ func (s *Server) finalizeMigrateWorkflow(ctx context.Context, ts *trafficSwitche
sw = &switcher{s: s, ts: ts}
}
- // Lock the workflow and its target keyspace.
- lockName := fmt.Sprintf("%s/%s", ts.TargetKeyspaceName(), ts.WorkflowName())
- ctx, workflowUnlock, lockErr := s.ts.LockName(ctx, lockName, "completeMigrateWorkflow")
- if lockErr != nil {
- return defaultErrorHandler(ts.Logger(), fmt.Sprintf("failed to lock the %s workflow", lockName), lockErr)
- }
- defer workflowUnlock(&err)
+ // Lock the target keyspace.
ctx, targetUnlock, lockErr := sw.lockKeyspace(ctx, ts.TargetKeyspaceName(), "completeMigrateWorkflow")
if lockErr != nil {
return defaultErrorHandler(ts.Logger(), fmt.Sprintf("failed to lock the %s keyspace", ts.TargetKeyspaceName()), lockErr)
@@ -3130,12 +2631,13 @@ func (s *Server) WorkflowSwitchTraffic(ctx context.Context, req *vtctldatapb.Wor
span.Annotate("tablet-types", req.TabletTypes)
span.Annotate("direction", req.Direction)
span.Annotate("enable-reverse-replication", req.EnableReverseReplication)
+ span.Annotate("shards", req.Shards)
span.Annotate("force", req.Force)
var (
- dryRunResults []string
- rdDryRunResults, wrDryRunResults *[]string
- hasReplica, hasRdonly, hasPrimary bool
+ dryRunResults []string
+ rdDryRunResults, wrDryRunResults *[]string
+ switchReplica, switchRdonly, switchPrimary bool
)
timeout, set, err := protoutil.DurationFromProto(req.GetTimeout())
if err != nil {
@@ -3151,15 +2653,6 @@ func (s *Server) WorkflowSwitchTraffic(ctx context.Context, req *vtctldatapb.Wor
if timeout.Seconds() < 1 {
return nil, vterrors.Wrap(err, "timeout must be at least 1 second")
}
- ts, startState, err := s.getWorkflowState(ctx, req.Keyspace, req.Workflow)
- if err != nil {
- return nil, err
- }
-
- if startState.WorkflowType == TypeMigrate {
- return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid action for Migrate workflow: SwitchTraffic")
- }
-
maxReplicationLagAllowed, set, err := protoutil.DurationFromProto(req.MaxReplicationLagAllowed)
if err != nil {
err = vterrors.Wrapf(err, "unable to parse MaxReplicationLagAllowed into a valid duration")
@@ -3169,37 +2662,83 @@ func (s *Server) WorkflowSwitchTraffic(ctx context.Context, req *vtctldatapb.Wor
maxReplicationLagAllowed = DefaultTimeout
}
direction := TrafficSwitchDirection(req.Direction)
- if direction == DirectionBackward {
- ts, startState, err = s.getWorkflowState(ctx, startState.SourceKeyspace, ts.reverseWorkflow)
+ switchReplica, switchRdonly, switchPrimary, err = parseTabletTypes(req.TabletTypes)
+ if err != nil {
+ return nil, err
+ }
+ ts, startState, err := s.getWorkflowState(ctx, req.Keyspace, req.Workflow)
+ if err != nil {
+ return nil, err
+ }
+
+ if startState.WorkflowType == TypeMigrate {
+ return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid action for Migrate workflow: SwitchTraffic")
+ }
+
+ if ts.IsMultiTenantMigration() {
+ // Multi-tenant migrations use keyspace routing rules, so we need to update the state
+ // using them.
+ err = updateKeyspaceRoutingState(ctx, ts.TopoServer(), ts.sourceKeyspace, ts.targetKeyspace, startState)
if err != nil {
- return nil, err
+ return nil, vterrors.Wrap(err, "failed to update multi-tenant workflow state using keyspace routing rules")
}
+ }
+
+ // We need this to know when there isn't a (non-FROZEN) reverse workflow to use.
+ onlySwitchingReads := !startState.WritesSwitched && !switchPrimary
+
+ // We need this for idempotency and to avoid unnecessary work and resulting risk.
+ writesAlreadySwitched := (direction == DirectionForward && startState.WritesSwitched) ||
+ (direction == DirectionBackward && !startState.WritesSwitched)
+
+ if direction == DirectionBackward && !onlySwitchingReads {
if ts.IsMultiTenantMigration() {
- // In a multi-tenant migration, multiple migrations would be writing to the same table, so we can't stop writes like
- // we do with MoveTables, using denied tables, since it would block all other migrations as well as traffic for
- // tenants which have already been migrated.
- return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "cannot reverse traffic for multi-tenant migrations")
+ // In a multi-tenant migration, multiple migrations would be writing to the same
+ // table, so we can't stop writes like we do with MoveTables, using denied tables,
+ // since it would block all other migrations as well as traffic for tenants which
+ // have already been migrated.
+ return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "cannot reverse write traffic for multi-tenant migrations")
+ }
+ // This means that the main workflow is FROZEN and the reverse workflow
+ // exists. So we update the starting state so that we're using the reverse
+ // workflow and we can move forward with a normal traffic switch forward
+ // operation, from the reverse workflow's perspective.
+ ts, startState, err = s.getWorkflowState(ctx, ts.sourceKeyspace, ts.reverseWorkflow)
+ if err != nil {
+ return nil, err
}
+ direction = DirectionForward
+ }
+
+ // Lock the workflow for the traffic switching work.
+ lockName := fmt.Sprintf("%s/%s", ts.TargetKeyspaceName(), ts.WorkflowName())
+ ctx, workflowUnlock, lockErr := s.ts.LockName(ctx, lockName, "WorkflowSwitchTraffic")
+ if lockErr != nil {
+ ts.Logger().Errorf("Locking the workflow %s failed: %v", lockName, lockErr)
+ return nil, vterrors.Wrapf(lockErr, "failed to lock the %s workflow", lockName)
}
+ defer workflowUnlock(&err)
ts.force = req.GetForce()
- reason, err := s.canSwitch(ctx, ts, startState, direction, int64(maxReplicationLagAllowed.Seconds()), req.GetShards())
- if err != nil {
- return nil, err
- }
- if reason != "" {
- return nil, vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "cannot switch traffic for workflow %s at this time: %s",
- startState.Workflow, reason)
- }
- hasReplica, hasRdonly, hasPrimary, err = parseTabletTypes(req.TabletTypes)
- if err != nil {
- return nil, err
+ if writesAlreadySwitched {
+ s.Logger().Infof("Writes already switched no need to check lag for the %s.%s workflow",
+ ts.targetKeyspace, ts.workflow)
+ } else {
+ reason, err := s.canSwitch(ctx, ts, int64(maxReplicationLagAllowed.Seconds()), req.GetShards())
+ if err != nil {
+ return nil, err
+ }
+ if reason != "" {
+ return nil, vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "cannot switch traffic for workflow %s at this time: %s",
+ startState.Workflow, reason)
+ }
}
- if hasReplica || hasRdonly {
+
+ if switchReplica || switchRdonly {
// If we're going to switch writes immediately after then we don't need to
// rebuild the SrvVSchema here as we will do it after switching writes.
- if rdDryRunResults, err = s.switchReads(ctx, req, ts, startState, !hasPrimary /* rebuildSrvVSchema */, direction); err != nil {
+ if rdDryRunResults, err = s.switchReads(ctx, req, ts, startState, !switchPrimary /* rebuildSrvVSchema */, direction); err != nil {
return nil, err
}
s.Logger().Infof("Switch Reads done for workflow %s.%s", req.Keyspace, req.Workflow)
@@ -3207,7 +2746,8 @@ func (s *Server) WorkflowSwitchTraffic(ctx context.Context, req *vtctldatapb.Wor
if rdDryRunResults != nil {
dryRunResults = append(dryRunResults, *rdDryRunResults...)
}
- if hasPrimary {
+
+ if switchPrimary {
if _, wrDryRunResults, err = s.switchWrites(ctx, req, ts, timeout, false); err != nil {
return nil, err
}
@@ -3220,8 +2760,10 @@ func (s *Server) WorkflowSwitchTraffic(ctx context.Context, req *vtctldatapb.Wor
if req.DryRun && len(dryRunResults) == 0 {
dryRunResults = append(dryRunResults, "No changes required")
}
+
cmd := "SwitchTraffic"
- if direction == DirectionBackward {
+ // We must check the original direction requested.
+ if TrafficSwitchDirection(req.Direction) == DirectionBackward {
cmd = "ReverseTraffic"
}
s.Logger().Infof("%s done for workflow %s.%s", cmd, req.Keyspace, req.Workflow)
@@ -3233,17 +2775,20 @@ func (s *Server) WorkflowSwitchTraffic(ctx context.Context, req *vtctldatapb.Wor
} else {
s.Logger().Infof("%s done for workflow %s.%s", cmd, req.Keyspace, req.Workflow)
resp.Summary = fmt.Sprintf("%s was successful for workflow %s.%s", cmd, req.Keyspace, req.Workflow)
- // Reload the state after the SwitchTraffic operation
- // and return that as a string.
- keyspace := req.Keyspace
- workflow := req.Workflow
- if direction == DirectionBackward {
- keyspace = startState.SourceKeyspace
- workflow = ts.reverseWorkflow
- }
+ // Reload the state after the SwitchTraffic operation and return that
+ // as a string.
resp.StartState = startState.String()
s.Logger().Infof("Before reloading workflow state after switching traffic: %+v\n", resp.StartState)
- _, currentState, err := s.getWorkflowState(ctx, keyspace, workflow)
+ _, currentState, err := s.getWorkflowState(ctx, ts.targetKeyspace, ts.workflow)
+ if ts.IsMultiTenantMigration() {
+ // Multi-tenant migrations use keyspace routing rules, so we need to update the state
+ // using them.
+ sourceKs, targetKs := ts.sourceKeyspace, ts.targetKeyspace
+ if TrafficSwitchDirection(req.Direction) == DirectionBackward {
+ sourceKs, targetKs = targetKs, sourceKs
+ }
+ err = updateKeyspaceRoutingState(ctx, ts.TopoServer(), sourceKs, targetKs, currentState)
+ }
if err != nil {
resp.CurrentState = fmt.Sprintf("Error reloading workflow state after switching traffic: %v", err)
} else {
@@ -3251,6 +2796,7 @@ func (s *Server) WorkflowSwitchTraffic(ctx context.Context, req *vtctldatapb.Wor
}
s.Logger().Infof("%s done for workflow %s.%s, returning response %v", cmd, req.Keyspace, req.Workflow, resp)
}
+
return resp, nil
}
@@ -3294,11 +2840,7 @@ func (s *Server) switchReads(ctx context.Context, req *vtctldatapb.WorkflowSwitc
// shard level traffic switching is all or nothing
trafficSwitchingIsAllOrNothing = true
case ts.MigrationType() == binlogdatapb.MigrationType_TABLES && ts.IsMultiTenantMigration():
- if direction == DirectionBackward {
- return defaultErrorHandler(ts.Logger(), "invalid request", vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT,
- "requesting reversal of read traffic for multi-tenant migrations is not supported"))
- }
- // For multi-tenant migrations, we only support switching traffic to all cells at once
+ // For multi-tenant migrations, we only support switching traffic to all cells at once.
allCells, err := ts.TopoServer().GetCellInfoNames(ctx)
if err != nil {
return nil, err
@@ -3322,7 +2864,7 @@ func (s *Server) switchReads(ctx context.Context, req *vtctldatapb.WorkflowSwitc
}
if direction == DirectionBackward && switchRdonly && len(state.RdonlyCellsSwitched) == 0 {
return defaultErrorHandler(ts.Logger(), "invalid request", vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION,
- "requesting reversal of SwitchReads for RDONLYs but RDONLY reads have not been switched"))
+ "requesting reversal of read traffic for RDONLYs but RDONLY reads have not been switched"))
}
}
@@ -3472,14 +3014,6 @@ func (s *Server) switchWrites(ctx context.Context, req *vtctldatapb.WorkflowSwit
}
}
- // Lock the workflow and its source and target keyspaces.
- lockName := fmt.Sprintf("%s/%s", ts.TargetKeyspaceName(), ts.WorkflowName())
- ctx, workflowUnlock, lockErr := s.ts.LockName(ctx, lockName, "SwitchWrites")
- if lockErr != nil {
- return handleError(fmt.Sprintf("failed to lock the %s workflow", lockName), lockErr)
- }
- defer workflowUnlock(&err)
-
// We need to hold the keyspace locks longer than waitTimeout*X -- where X
// is the number of sub-steps where the waitTimeout value is used: stopping
// existing streams, waiting for replication to catch up, and initializing
@@ -3696,14 +3230,8 @@ func (s *Server) switchWrites(ctx context.Context, req *vtctldatapb.WorkflowSwit
return ts.id, sw.logs(), nil
}
-func (s *Server) canSwitch(ctx context.Context, ts *trafficSwitcher, state *State, direction TrafficSwitchDirection,
- maxAllowedReplLagSecs int64, shards []string) (reason string, err error) {
- if direction == DirectionForward && state.WritesSwitched ||
- direction == DirectionBackward && !state.WritesSwitched {
- s.Logger().Infof("writes already switched no need to check lag")
- return "", nil
- }
- wf, err := s.GetWorkflow(ctx, state.TargetKeyspace, state.Workflow, false, shards)
+func (s *Server) canSwitch(ctx context.Context, ts *trafficSwitcher, maxAllowedReplLagSecs int64, shards []string) (reason string, err error) {
+ wf, err := s.GetWorkflow(ctx, ts.targetKeyspace, ts.workflow, false, shards)
if err != nil {
return "", err
}
@@ -3931,10 +3459,6 @@ func (s *Server) prepareCreateLookup(ctx context.Context, workflow, keyspace str
if len(vindexFromCols) != 1 {
return nil, nil, nil, nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unique vindex 'from' should have only one column")
}
- } else {
- if len(vindexFromCols) < 2 {
- return nil, nil, nil, nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "non-unique vindex 'from' should have more than one column")
- }
}
vindexToCol = vindex.Params["to"]
// Make the vindex write_only. If one exists already in the vschema,
diff --git a/go/vt/vtctl/workflow/server_test.go b/go/vt/vtctl/workflow/server_test.go
index 5d35b205ed3..26d722f1de0 100644
--- a/go/vt/vtctl/workflow/server_test.go
+++ b/go/vt/vtctl/workflow/server_test.go
@@ -36,7 +36,6 @@ import (
"vitess.io/vitess/go/test/utils"
"vitess.io/vitess/go/vt/logutil"
"vitess.io/vitess/go/vt/topo"
- "vitess.io/vitess/go/vt/topo/memorytopo"
"vitess.io/vitess/go/vt/topo/topoproto"
"vitess.io/vitess/go/vt/topotools"
"vitess.io/vitess/go/vt/vtenv"
@@ -47,9 +46,23 @@ import (
querypb "vitess.io/vitess/go/vt/proto/query"
tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata"
topodatapb "vitess.io/vitess/go/vt/proto/topodata"
+ vschemapb "vitess.io/vitess/go/vt/proto/vschema"
vtctldatapb "vitess.io/vitess/go/vt/proto/vtctldata"
)
+var (
+ allTabletTypes = []topodatapb.TabletType{
+ topodatapb.TabletType_PRIMARY,
+ topodatapb.TabletType_REPLICA,
+ topodatapb.TabletType_RDONLY,
+ }
+
+ roTabletTypes = []topodatapb.TabletType{
+ topodatapb.TabletType_REPLICA,
+ topodatapb.TabletType_RDONLY,
+ }
+)
+
type fakeTMC struct {
tmclient.TabletManagerClient
vrepQueriesByTablet map[string]map[string]*querypb.QueryResult
@@ -182,9 +195,17 @@ func TestCheckReshardingJournalExistsOnTablet(t *testing.T) {
// to ensure that it behaves as expected given a specific request.
func TestVDiffCreate(t *testing.T) {
ctx := context.Background()
- ts := memorytopo.NewServer(ctx, "cell")
- tmc := &fakeTMC{}
- s := NewServer(vtenv.NewTestEnv(), ts, tmc)
+ workflowName := "wf1"
+ sourceKeyspace := &testKeyspace{
+ KeyspaceName: "source",
+ ShardNames: []string{"0"},
+ }
+ targetKeyspace := &testKeyspace{
+ KeyspaceName: "target",
+ ShardNames: []string{"-80", "80-"},
+ }
+ env := newTestEnv(t, ctx, defaultCellName, sourceKeyspace, targetKeyspace)
+ defer env.close()
tests := []struct {
name string
@@ -197,17 +218,32 @@ func TestVDiffCreate(t *testing.T) {
// We did not provide any keyspace or shard.
wantErr: "FindAllShardsInKeyspace() invalid keyspace name: UnescapeID err: invalid input identifier ''",
},
+ {
+ name: "generated UUID",
+ req: &vtctldatapb.VDiffCreateRequest{
+ TargetKeyspace: targetKeyspace.KeyspaceName,
+ Workflow: workflowName,
+ },
+ },
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- got, err := s.VDiffCreate(ctx, tt.req)
+ if tt.wantErr == "" {
+ env.tmc.expectVRQueryResultOnKeyspaceTablets(targetKeyspace.KeyspaceName, &queryResult{
+ query: "select vrepl_id, table_name, lastpk from _vt.copy_state where vrepl_id in (1) and id in (select max(id) from _vt.copy_state where vrepl_id in (1) group by vrepl_id, table_name)",
+ result: &querypb.QueryResult{},
+ })
+ }
+ got, err := env.ws.VDiffCreate(ctx, tt.req)
if tt.wantErr != "" {
require.EqualError(t, err, tt.wantErr)
return
}
require.NoError(t, err)
require.NotNil(t, got)
- require.NotEmpty(t, got.UUID)
+ // Ensure that we always use a valid UUID.
+ err = uuid.Validate(got.UUID)
+ require.NoError(t, err)
})
}
}
@@ -702,22 +738,385 @@ func TestWorkflowDelete(t *testing.T) {
},
},
},
- }
-
- testcases := []struct {
- name string
- sourceKeyspace, targetKeyspace *testKeyspace
- preFunc func(t *testing.T, env *testEnv)
- req *vtctldatapb.WorkflowDeleteRequest
- expectedSourceQueries []*queryResult
- expectedTargetQueries []*queryResult
- want *vtctldatapb.WorkflowDeleteResponse
- wantErr string
- postFunc func(t *testing.T, env *testEnv)
- expectedLogs []string
- }{
+ }
+
+ testcases := []struct {
+ name string
+ sourceKeyspace, targetKeyspace *testKeyspace
+ preFunc func(t *testing.T, env *testEnv)
+ req *vtctldatapb.WorkflowDeleteRequest
+ expectedSourceQueries []*queryResult
+ expectedTargetQueries []*queryResult
+ readVReplicationWorkflowRequest *readVReplicationWorkflowRequestResponse
+ want *vtctldatapb.WorkflowDeleteResponse
+ wantErr string
+ postFunc func(t *testing.T, env *testEnv)
+ expectedLogs []string
+ }{
+ {
+ name: "delete workflow",
+ sourceKeyspace: &testKeyspace{
+ KeyspaceName: sourceKeyspaceName,
+ ShardNames: []string{"0"},
+ },
+ targetKeyspace: &testKeyspace{
+ KeyspaceName: targetKeyspaceName,
+ ShardNames: []string{"-80", "80-"},
+ },
+ req: &vtctldatapb.WorkflowDeleteRequest{
+ Keyspace: targetKeyspaceName,
+ Workflow: workflowName,
+ },
+ expectedSourceQueries: []*queryResult{
+ {
+ query: fmt.Sprintf("delete from _vt.vreplication where db_name = 'vt_%s' and workflow = '%s'",
+ sourceKeyspaceName, ReverseWorkflowName(workflowName)),
+ result: &querypb.QueryResult{},
+ },
+ },
+ expectedTargetQueries: []*queryResult{
+ {
+ query: fmt.Sprintf("drop table `vt_%s`.`%s`", targetKeyspaceName, table1Name),
+ result: &querypb.QueryResult{},
+ },
+ {
+ query: fmt.Sprintf("drop table `vt_%s`.`%s`", targetKeyspaceName, table2Name),
+ result: &querypb.QueryResult{},
+ },
+ {
+ query: fmt.Sprintf("drop table `vt_%s`.`%s`", targetKeyspaceName, table3Name),
+ result: &querypb.QueryResult{},
+ },
+ },
+ want: &vtctldatapb.WorkflowDeleteResponse{
+ Summary: fmt.Sprintf("Successfully cancelled the %s workflow in the %s keyspace",
+ workflowName, targetKeyspaceName),
+ Details: []*vtctldatapb.WorkflowDeleteResponse_TabletInfo{
+ {
+ Tablet: &topodatapb.TabletAlias{Cell: defaultCellName, Uid: startingTargetTabletUID},
+ Deleted: true,
+ },
+ {
+ Tablet: &topodatapb.TabletAlias{Cell: defaultCellName, Uid: startingTargetTabletUID + tabletUIDStep},
+ Deleted: true,
+ },
+ },
+ },
+ },
+ {
+ name: "delete workflow with only reads switched",
+ sourceKeyspace: &testKeyspace{
+ KeyspaceName: sourceKeyspaceName,
+ ShardNames: []string{"0"},
+ },
+ targetKeyspace: &testKeyspace{
+ KeyspaceName: targetKeyspaceName,
+ ShardNames: []string{"-80", "80-"},
+ },
+ req: &vtctldatapb.WorkflowDeleteRequest{
+ Keyspace: targetKeyspaceName,
+ Workflow: workflowName,
+ },
+ expectedSourceQueries: []*queryResult{
+ {
+ query: fmt.Sprintf("delete from _vt.vreplication where db_name = 'vt_%s' and workflow = '%s'",
+ sourceKeyspaceName, ReverseWorkflowName(workflowName)),
+ result: &querypb.QueryResult{},
+ },
+ },
+ expectedTargetQueries: []*queryResult{
+ {
+ query: fmt.Sprintf("drop table `vt_%s`.`%s`", targetKeyspaceName, table1Name),
+ result: &querypb.QueryResult{},
+ },
+ {
+ query: fmt.Sprintf("drop table `vt_%s`.`%s`", targetKeyspaceName, table2Name),
+ result: &querypb.QueryResult{},
+ },
+ {
+ query: fmt.Sprintf("drop table `vt_%s`.`%s`", targetKeyspaceName, table3Name),
+ result: &querypb.QueryResult{},
+ },
+ },
+ preFunc: func(t *testing.T, env *testEnv) {
+ // Setup the routing rules as they would be after having previously done SwitchTraffic
+ // for replica and rdonly tablets.
+ env.updateTableRoutingRules(t, ctx, roTabletTypes, []string{table1Name, table2Name, table3Name},
+ sourceKeyspaceName, targetKeyspaceName, targetKeyspaceName)
+ },
+ want: &vtctldatapb.WorkflowDeleteResponse{
+ Summary: fmt.Sprintf("Successfully cancelled the %s workflow in the %s keyspace",
+ workflowName, targetKeyspaceName),
+ Details: []*vtctldatapb.WorkflowDeleteResponse_TabletInfo{
+ {
+ Tablet: &topodatapb.TabletAlias{Cell: defaultCellName, Uid: startingTargetTabletUID},
+ Deleted: true,
+ },
+ {
+ Tablet: &topodatapb.TabletAlias{Cell: defaultCellName, Uid: startingTargetTabletUID + tabletUIDStep},
+ Deleted: true,
+ },
+ },
+ },
+ },
+ {
+ name: "delete workflow with writes switched",
+ sourceKeyspace: &testKeyspace{
+ KeyspaceName: sourceKeyspaceName,
+ ShardNames: []string{"0"},
+ },
+ targetKeyspace: &testKeyspace{
+ KeyspaceName: targetKeyspaceName,
+ ShardNames: []string{"-80", "80-"},
+ },
+ req: &vtctldatapb.WorkflowDeleteRequest{
+ Keyspace: targetKeyspaceName,
+ Workflow: workflowName,
+ },
+ preFunc: func(t *testing.T, env *testEnv) {
+ // Setup the routing rules as they would be after having previously
+ // done SwitchTraffic with for all tablet types.
+ env.updateTableRoutingRules(t, ctx, allTabletTypes, []string{table1Name, table2Name, table3Name},
+ sourceKeyspaceName, targetKeyspaceName, targetKeyspaceName)
+ },
+ wantErr: ErrWorkflowDeleteWritesSwitched.Error(),
+ postFunc: func(t *testing.T, env *testEnv) {
+ // Clear out the routing rules we put in place.
+ err := env.ts.SaveRoutingRules(ctx, &vschemapb.RoutingRules{})
+ require.NoError(t, err)
+ },
+ },
+ {
+ name: "missing table",
+ sourceKeyspace: &testKeyspace{
+ KeyspaceName: sourceKeyspaceName,
+ ShardNames: []string{"0"},
+ },
+ targetKeyspace: &testKeyspace{
+ KeyspaceName: targetKeyspaceName,
+ ShardNames: []string{"-80", "80-"},
+ },
+ req: &vtctldatapb.WorkflowDeleteRequest{
+ Keyspace: targetKeyspaceName,
+ Workflow: workflowName,
+ },
+ expectedSourceQueries: []*queryResult{
+ {
+ query: fmt.Sprintf("delete from _vt.vreplication where db_name = 'vt_%s' and workflow = '%s'",
+ sourceKeyspaceName, ReverseWorkflowName(workflowName)),
+ result: &querypb.QueryResult{},
+ },
+ },
+ expectedTargetQueries: []*queryResult{
+ {
+ query: fmt.Sprintf("drop table `vt_%s`.`%s`", targetKeyspaceName, table1Name),
+ result: &querypb.QueryResult{},
+ },
+ {
+ query: fmt.Sprintf("drop table `vt_%s`.`%s`", targetKeyspaceName, table2Name),
+ result: &querypb.QueryResult{},
+ // We don't care that the cell and tablet info is off in the error message, only that
+ // it contains the expected SQL error we'd encounter when attempting to drop a table
+ // that doesn't exist. That will then cause this error to be non-fatal and the workflow
+ // delete work will continue.
+ err: fmt.Errorf("rpc error: code = Unknown desc = TabletManager.ExecuteFetchAsDba on cell-01: rpc error: code = Unknown desc = Unknown table 'vt_%s.%s' (errno 1051) (sqlstate 42S02) during query: drop table `vt_%s`.`%s`",
+ targetKeyspaceName, table2Name, targetKeyspaceName, table2Name),
+ },
+ {
+ query: fmt.Sprintf("drop table `vt_%s`.`%s`", targetKeyspaceName, table3Name),
+ result: &querypb.QueryResult{},
+ },
+ },
+ expectedLogs: []string{ // Confirm that the custom logger is working as expected
+ fmt.Sprintf("Table `%s` did not exist when attempting to remove it", table2Name),
+ },
+ want: &vtctldatapb.WorkflowDeleteResponse{
+ Summary: fmt.Sprintf("Successfully cancelled the %s workflow in the %s keyspace",
+ workflowName, targetKeyspaceName),
+ Details: []*vtctldatapb.WorkflowDeleteResponse_TabletInfo{
+ {
+ Tablet: &topodatapb.TabletAlias{Cell: defaultCellName, Uid: startingTargetTabletUID},
+ Deleted: true,
+ },
+ {
+ Tablet: &topodatapb.TabletAlias{Cell: defaultCellName, Uid: startingTargetTabletUID + tabletUIDStep},
+ Deleted: true,
+ },
+ },
+ },
+ },
+ {
+ name: "multi-tenant workflow",
+ sourceKeyspace: &testKeyspace{
+ KeyspaceName: sourceKeyspaceName,
+ ShardNames: []string{"0"},
+ },
+ targetKeyspace: &testKeyspace{
+ KeyspaceName: targetKeyspaceName,
+ ShardNames: []string{"-80", "80-"},
+ },
+ req: &vtctldatapb.WorkflowDeleteRequest{
+ Keyspace: targetKeyspaceName,
+ Workflow: workflowName,
+ },
+ expectedSourceQueries: []*queryResult{
+ {
+ query: fmt.Sprintf("delete from _vt.vreplication where db_name = 'vt_%s' and workflow = '%s'",
+ sourceKeyspaceName, ReverseWorkflowName(workflowName)),
+ result: &querypb.QueryResult{},
+ },
+ },
+ readVReplicationWorkflowRequest: &readVReplicationWorkflowRequestResponse{
+ req: &tabletmanagerdatapb.ReadVReplicationWorkflowRequest{
+ Workflow: workflowName,
+ },
+ res: &tabletmanagerdatapb.ReadVReplicationWorkflowResponse{
+ Workflow: workflowName,
+ WorkflowType: binlogdatapb.VReplicationWorkflowType_MoveTables,
+ Options: `{"tenant_id": "1"}`,
+ Streams: []*tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream{
+ {
+ Id: 1,
+ Bls: &binlogdatapb.BinlogSource{
+ Keyspace: sourceKeyspaceName,
+ Shard: "0",
+ Filter: &binlogdatapb.Filter{
+ Rules: []*binlogdatapb.Rule{
+ {
+ Match: "t1",
+ Filter: "select * from t1 where tenant_id = 1",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ preFunc: func(t *testing.T, env *testEnv) {
+ err := env.ts.SaveVSchema(ctx, targetKeyspaceName, &vschemapb.Keyspace{
+ Sharded: true,
+ MultiTenantSpec: &vschemapb.MultiTenantSpec{
+ TenantIdColumnName: "tenant_id",
+ TenantIdColumnType: sqltypes.Int64,
+ },
+ })
+ require.NoError(t, err)
+ },
+ want: &vtctldatapb.WorkflowDeleteResponse{
+ Summary: fmt.Sprintf("Successfully cancelled the %s workflow in the %s keyspace",
+ workflowName, targetKeyspaceName),
+ Details: []*vtctldatapb.WorkflowDeleteResponse_TabletInfo{
+ {
+ Tablet: &topodatapb.TabletAlias{Cell: defaultCellName, Uid: startingTargetTabletUID},
+ Deleted: true,
+ },
+ {
+ Tablet: &topodatapb.TabletAlias{Cell: defaultCellName, Uid: startingTargetTabletUID + tabletUIDStep},
+ Deleted: true,
+ },
+ },
+ },
+ },
+ {
+ name: "multi-tenant workflow with keep-data",
+ sourceKeyspace: &testKeyspace{
+ KeyspaceName: sourceKeyspaceName,
+ ShardNames: []string{"0"},
+ },
+ targetKeyspace: &testKeyspace{
+ KeyspaceName: targetKeyspaceName,
+ ShardNames: []string{"-80", "80-"},
+ },
+ req: &vtctldatapb.WorkflowDeleteRequest{
+ Keyspace: targetKeyspaceName,
+ Workflow: workflowName,
+ KeepData: true,
+ },
+ expectedSourceQueries: []*queryResult{
+ {
+ query: fmt.Sprintf("delete from _vt.vreplication where db_name = 'vt_%s' and workflow = '%s'",
+ sourceKeyspaceName, ReverseWorkflowName(workflowName)),
+ result: &querypb.QueryResult{},
+ },
+ },
+ want: &vtctldatapb.WorkflowDeleteResponse{
+ Summary: fmt.Sprintf("Successfully cancelled the %s workflow in the %s keyspace",
+ workflowName, targetKeyspaceName),
+ Details: []*vtctldatapb.WorkflowDeleteResponse_TabletInfo{
+ {
+ Tablet: &topodatapb.TabletAlias{Cell: defaultCellName, Uid: startingTargetTabletUID},
+ Deleted: true,
+ },
+ {
+ Tablet: &topodatapb.TabletAlias{Cell: defaultCellName, Uid: startingTargetTabletUID + tabletUIDStep},
+ Deleted: true,
+ },
+ },
+ },
+ },
+ {
+ name: "multi-tenant reshard",
+ sourceKeyspace: &testKeyspace{
+ KeyspaceName: sourceKeyspaceName,
+ ShardNames: []string{"0"},
+ },
+ targetKeyspace: &testKeyspace{
+ KeyspaceName: targetKeyspaceName,
+ ShardNames: []string{"-80", "80-"},
+ },
+ req: &vtctldatapb.WorkflowDeleteRequest{
+ Keyspace: targetKeyspaceName,
+ Workflow: workflowName,
+ },
+ expectedSourceQueries: []*queryResult{
+ {
+ query: fmt.Sprintf("delete from _vt.vreplication where db_name = 'vt_%s' and workflow = '%s'",
+ sourceKeyspaceName, ReverseWorkflowName(workflowName)),
+ result: &querypb.QueryResult{},
+ },
+ },
+ readVReplicationWorkflowRequest: &readVReplicationWorkflowRequestResponse{
+ req: &tabletmanagerdatapb.ReadVReplicationWorkflowRequest{
+ Workflow: workflowName,
+ },
+ res: &tabletmanagerdatapb.ReadVReplicationWorkflowResponse{
+ Workflow: workflowName,
+ WorkflowType: binlogdatapb.VReplicationWorkflowType_Reshard,
+ Options: `{"tenant_id": "1"}`,
+ Streams: []*tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream{
+ {
+ Id: 1,
+ Bls: &binlogdatapb.BinlogSource{
+ Keyspace: sourceKeyspaceName,
+ Shard: "0",
+ Filter: &binlogdatapb.Filter{
+ Rules: []*binlogdatapb.Rule{
+ {
+ Match: "t1",
+ Filter: "select * from t1 where tenant_id = 1",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ preFunc: func(t *testing.T, env *testEnv) {
+ err := env.ts.SaveVSchema(ctx, targetKeyspaceName, &vschemapb.Keyspace{
+ Sharded: true,
+ MultiTenantSpec: &vschemapb.MultiTenantSpec{
+ TenantIdColumnName: "tenant_id",
+ TenantIdColumnType: sqltypes.Int64,
+ },
+ })
+ require.NoError(t, err)
+ },
+ wantErr: "unsupported workflow type \"Reshard\" for multi-tenant migration",
+ },
{
- name: "missing table",
+ name: "multi-tenant workflow without predicate",
sourceKeyspace: &testKeyspace{
KeyspaceName: sourceKeyspaceName,
ShardNames: []string{"0"},
@@ -737,43 +1136,94 @@ func TestWorkflowDelete(t *testing.T) {
result: &querypb.QueryResult{},
},
},
- expectedTargetQueries: []*queryResult{
- {
- query: fmt.Sprintf("drop table `vt_%s`.`%s`", targetKeyspaceName, table1Name),
- result: &querypb.QueryResult{},
+ readVReplicationWorkflowRequest: &readVReplicationWorkflowRequestResponse{
+ req: &tabletmanagerdatapb.ReadVReplicationWorkflowRequest{
+ Workflow: workflowName,
},
- {
- query: fmt.Sprintf("drop table `vt_%s`.`%s`", targetKeyspaceName, table2Name),
- result: &querypb.QueryResult{},
- // We don't care that the cell and tablet info is off in the error message, only that
- // it contains the expected SQL error we'd encounter when attempting to drop a table
- // that doesn't exist. That will then cause this error to be non-fatal and the workflow
- // delete work will continue.
- err: fmt.Errorf("rpc error: code = Unknown desc = TabletManager.ExecuteFetchAsDba on cell-01: rpc error: code = Unknown desc = Unknown table 'vt_%s.%s' (errno 1051) (sqlstate 42S02) during query: drop table `vt_%s`.`%s`",
- targetKeyspaceName, table2Name, targetKeyspaceName, table2Name),
+ res: &tabletmanagerdatapb.ReadVReplicationWorkflowResponse{
+ Workflow: workflowName,
+ WorkflowType: binlogdatapb.VReplicationWorkflowType_Reshard,
+ Options: `{"tenant_id": "1"}`,
+ Streams: []*tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream{
+ {
+ Id: 1,
+ Bls: &binlogdatapb.BinlogSource{
+ Keyspace: sourceKeyspaceName,
+ Shard: "0",
+ Filter: &binlogdatapb.Filter{
+ Rules: []*binlogdatapb.Rule{
+ {
+ Match: "t1",
+ Filter: "select * from t1 where tenant_id = 1",
+ },
+ },
+ },
+ },
+ },
+ },
},
+ },
+ preFunc: func(t *testing.T, env *testEnv) {
+ err := env.ts.SaveVSchema(ctx, targetKeyspaceName, &vschemapb.Keyspace{
+ Sharded: true,
+ MultiTenantSpec: &vschemapb.MultiTenantSpec{
+ TenantIdColumnName: "tenant_id",
+ TenantIdColumnType: sqltypes.Int64,
+ },
+ })
+ require.NoError(t, err)
+ },
+ wantErr: "unsupported workflow type \"Reshard\" for multi-tenant migration",
+ },
+ {
+ name: "multi-tenant workflow without multi-tenant-spec in vschema",
+ sourceKeyspace: &testKeyspace{
+ KeyspaceName: sourceKeyspaceName,
+ ShardNames: []string{"0"},
+ },
+ targetKeyspace: &testKeyspace{
+ KeyspaceName: targetKeyspaceName,
+ ShardNames: []string{"-80", "80-"},
+ },
+ req: &vtctldatapb.WorkflowDeleteRequest{
+ Keyspace: targetKeyspaceName,
+ Workflow: workflowName,
+ },
+ expectedSourceQueries: []*queryResult{
{
- query: fmt.Sprintf("drop table `vt_%s`.`%s`", targetKeyspaceName, table3Name),
+ query: fmt.Sprintf("delete from _vt.vreplication where db_name = 'vt_%s' and workflow = '%s'",
+ sourceKeyspaceName, ReverseWorkflowName(workflowName)),
result: &querypb.QueryResult{},
},
},
- expectedLogs: []string{ // Confirm that the custom logger is working as expected
- fmt.Sprintf("Table `%s` did not exist when attempting to remove it", table2Name),
- },
- want: &vtctldatapb.WorkflowDeleteResponse{
- Summary: fmt.Sprintf("Successfully cancelled the %s workflow in the %s keyspace",
- workflowName, targetKeyspaceName),
- Details: []*vtctldatapb.WorkflowDeleteResponse_TabletInfo{
- {
- Tablet: &topodatapb.TabletAlias{Cell: defaultCellName, Uid: startingTargetTabletUID},
- Deleted: true,
- },
- {
- Tablet: &topodatapb.TabletAlias{Cell: defaultCellName, Uid: startingTargetTabletUID + tabletUIDStep},
- Deleted: true,
+ readVReplicationWorkflowRequest: &readVReplicationWorkflowRequestResponse{
+ req: &tabletmanagerdatapb.ReadVReplicationWorkflowRequest{
+ Workflow: workflowName,
+ },
+ res: &tabletmanagerdatapb.ReadVReplicationWorkflowResponse{
+ Workflow: workflowName,
+ WorkflowType: binlogdatapb.VReplicationWorkflowType_MoveTables,
+ Options: `{"tenant_id": "1"}`,
+ Streams: []*tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream{
+ {
+ Id: 1,
+ Bls: &binlogdatapb.BinlogSource{
+ Keyspace: sourceKeyspaceName,
+ Shard: "0",
+ Filter: &binlogdatapb.Filter{
+ Rules: []*binlogdatapb.Rule{
+ {
+ Match: "t1",
+ Filter: "select * from t1 where tenant_id = 1",
+ },
+ },
+ },
+ },
+ },
},
},
},
+ wantErr: "failed to fully delete all migrated data for tenant 1, please retry the operation: failed to build delete filter: target keyspace not defined, or it does not have multi-tenant spec",
},
{
name: "missing denied table entries",
@@ -899,6 +1349,13 @@ func TestWorkflowDelete(t *testing.T) {
env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.targetKeyspace.KeyspaceName, eq)
}
}
+ if tc.readVReplicationWorkflowRequest != nil {
+ targetTablets := env.tablets[tc.targetKeyspace.KeyspaceName]
+ require.NotNil(t, targetTablets)
+ for _, tablet := range targetTablets {
+ env.tmc.expectReadVReplicationWorkflowRequest(tablet.Alias.Uid, tc.readVReplicationWorkflowRequest)
+ }
+ }
if tc.preFunc != nil {
tc.preFunc(t, env)
}
@@ -926,12 +1383,7 @@ func TestWorkflowDelete(t *testing.T) {
}
}
logs := memlogger.String()
- // Confirm that the custom logger was passed on to the trafficSwitcher
- // if we didn't expect/want an error as otherwise we may not have made
- // it into the trafficSwitcher.
- if tc.wantErr == "" {
- require.Contains(t, logs, "traffic_switcher.go")
- }
+ // Confirm that the custom logger was passed on to the trafficSwitcher.
for _, expectedLog := range tc.expectedLogs {
require.Contains(t, logs, expectedLog)
}
@@ -949,12 +1401,6 @@ func TestMoveTablesTrafficSwitching(t *testing.T) {
targetKeyspaceName := "targetks"
vrID := 1
- tabletTypes := []topodatapb.TabletType{
- topodatapb.TabletType_PRIMARY,
- topodatapb.TabletType_REPLICA,
- topodatapb.TabletType_RDONLY,
- }
-
schema := map[string]*tabletmanagerdatapb.SchemaDefinition{
tableName: {
TableDefinitions: []*tabletmanagerdatapb.TableDefinition{
@@ -1026,6 +1472,7 @@ func TestMoveTablesTrafficSwitching(t *testing.T) {
name string
sourceKeyspace, targetKeyspace *testKeyspace
req *vtctldatapb.WorkflowSwitchTrafficRequest
+ multiTenant bool
preFunc func(env *testEnv)
want *vtctldatapb.WorkflowSwitchTrafficResponse
wantErr bool
@@ -1044,7 +1491,7 @@ func TestMoveTablesTrafficSwitching(t *testing.T) {
Keyspace: targetKeyspaceName,
Workflow: workflowName,
Direction: int32(DirectionForward),
- TabletTypes: tabletTypes,
+ TabletTypes: allTabletTypes,
},
want: &vtctldatapb.WorkflowSwitchTrafficResponse{
Summary: fmt.Sprintf("SwitchTraffic was successful for workflow %s.%s", targetKeyspaceName, workflowName),
@@ -1066,7 +1513,7 @@ func TestMoveTablesTrafficSwitching(t *testing.T) {
Keyspace: targetKeyspaceName,
Workflow: workflowName,
Direction: int32(DirectionBackward),
- TabletTypes: tabletTypes,
+ TabletTypes: allTabletTypes,
},
want: &vtctldatapb.WorkflowSwitchTrafficResponse{
Summary: fmt.Sprintf("ReverseTraffic was successful for workflow %s.%s", targetKeyspaceName, workflowName),
@@ -1074,6 +1521,70 @@ func TestMoveTablesTrafficSwitching(t *testing.T) {
CurrentState: "Reads Not Switched. Writes Not Switched",
},
},
+ {
+ name: "backward for read-only tablets",
+ sourceKeyspace: &testKeyspace{
+ KeyspaceName: sourceKeyspaceName,
+ ShardNames: []string{"0"},
+ },
+ targetKeyspace: &testKeyspace{
+ KeyspaceName: targetKeyspaceName,
+ ShardNames: []string{"-80", "80-"},
+ },
+ req: &vtctldatapb.WorkflowSwitchTrafficRequest{
+ Keyspace: targetKeyspaceName,
+ Workflow: workflowName,
+ Direction: int32(DirectionBackward),
+ TabletTypes: roTabletTypes,
+ },
+ want: &vtctldatapb.WorkflowSwitchTrafficResponse{
+ Summary: fmt.Sprintf("ReverseTraffic was successful for workflow %s.%s", targetKeyspaceName, workflowName),
+ StartState: "All Reads Switched. Writes Not Switched",
+ CurrentState: "Reads Not Switched. Writes Not Switched",
+ },
+ },
+ {
+ name: "backward for multi-tenant workflow and read-only tablets",
+ sourceKeyspace: &testKeyspace{
+ KeyspaceName: sourceKeyspaceName,
+ ShardNames: []string{"0"},
+ },
+ targetKeyspace: &testKeyspace{
+ KeyspaceName: targetKeyspaceName,
+ ShardNames: []string{"-80", "80-"},
+ },
+ req: &vtctldatapb.WorkflowSwitchTrafficRequest{
+ Keyspace: targetKeyspaceName,
+ Workflow: workflowName,
+ Direction: int32(DirectionBackward),
+ TabletTypes: roTabletTypes,
+ },
+ multiTenant: true,
+ want: &vtctldatapb.WorkflowSwitchTrafficResponse{
+ Summary: fmt.Sprintf("ReverseTraffic was successful for workflow %s.%s", targetKeyspaceName, workflowName),
+ StartState: "All Reads Switched. Writes Not Switched",
+ CurrentState: "Reads Not Switched. Writes Not Switched",
+ },
+ },
+ {
+ name: "backward for multi-tenant workflow for all tablet types",
+ sourceKeyspace: &testKeyspace{
+ KeyspaceName: sourceKeyspaceName,
+ ShardNames: []string{"0"},
+ },
+ targetKeyspace: &testKeyspace{
+ KeyspaceName: targetKeyspaceName,
+ ShardNames: []string{"-80", "80-"},
+ },
+ multiTenant: true,
+ req: &vtctldatapb.WorkflowSwitchTrafficRequest{
+ Keyspace: targetKeyspaceName,
+ Workflow: workflowName,
+ Direction: int32(DirectionBackward),
+ TabletTypes: allTabletTypes,
+ },
+ wantErr: true,
+ },
{
name: "forward with tablet refresh error",
sourceKeyspace: &testKeyspace{
@@ -1088,7 +1599,7 @@ func TestMoveTablesTrafficSwitching(t *testing.T) {
Keyspace: targetKeyspaceName,
Workflow: workflowName,
Direction: int32(DirectionForward),
- TabletTypes: tabletTypes,
+ TabletTypes: allTabletTypes,
},
preFunc: func(env *testEnv) {
env.tmc.SetRefreshStateError(env.tablets[sourceKeyspaceName][startingSourceTabletUID], errors.New("tablet refresh error"))
@@ -1110,7 +1621,7 @@ func TestMoveTablesTrafficSwitching(t *testing.T) {
Keyspace: targetKeyspaceName,
Workflow: workflowName,
Direction: int32(DirectionForward),
- TabletTypes: tabletTypes,
+ TabletTypes: allTabletTypes,
Force: true,
},
preFunc: func(env *testEnv) {
@@ -1124,6 +1635,7 @@ func TestMoveTablesTrafficSwitching(t *testing.T) {
},
},
}
+
for _, tc := range testcases {
t.Run(tc.name, func(t *testing.T) {
require.NotNil(t, tc.sourceKeyspace)
@@ -1132,6 +1644,7 @@ func TestMoveTablesTrafficSwitching(t *testing.T) {
env := newTestEnv(t, ctx, defaultCellName, tc.sourceKeyspace, tc.targetKeyspace)
defer env.close()
env.tmc.schema = schema
+
if tc.req.Direction == int32(DirectionForward) {
env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.targetKeyspace.KeyspaceName, copyTableQR)
env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.targetKeyspace.KeyspaceName, cutoverQR)
@@ -1150,26 +1663,70 @@ func TestMoveTablesTrafficSwitching(t *testing.T) {
} else {
env.tmc.reverse.Store(true)
// Setup the routing rules as they would be after having previously done SwitchTraffic.
- env.updateTableRoutingRules(t, ctx, tabletTypes, []string{tableName},
+ env.updateTableRoutingRules(t, ctx, tc.req.TabletTypes, []string{tableName},
tc.sourceKeyspace.KeyspaceName, tc.targetKeyspace.KeyspaceName, tc.targetKeyspace.KeyspaceName)
- env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.sourceKeyspace.KeyspaceName, copyTableQR)
- for i := 0; i < len(tc.targetKeyspace.ShardNames); i++ { // Per stream
- env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.sourceKeyspace.KeyspaceName, cutoverQR)
- }
- for i := 0; i < len(tc.targetKeyspace.ShardNames); i++ { // Per stream
- env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.targetKeyspace.KeyspaceName, journalQR)
- }
- for i := 0; i < len(tc.targetKeyspace.ShardNames); i++ { // Per stream
- env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.targetKeyspace.KeyspaceName, lockTableQR)
+ if !slices.Contains(tc.req.TabletTypes, topodatapb.TabletType_PRIMARY) {
+ for i := 0; i < len(tc.targetKeyspace.ShardNames); i++ { // Per stream
+ env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.sourceKeyspace.KeyspaceName, journalQR)
+ }
+ } else {
+ env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.sourceKeyspace.KeyspaceName, copyTableQR)
+ for i := 0; i < len(tc.targetKeyspace.ShardNames); i++ { // Per stream
+ env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.targetKeyspace.KeyspaceName, journalQR)
+ }
+ for i := 0; i < len(tc.targetKeyspace.ShardNames); i++ { // Per stream
+ env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.targetKeyspace.KeyspaceName, lockTableQR)
+ }
+ for i := 0; i < len(tc.targetKeyspace.ShardNames); i++ { // Per stream
+ env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.sourceKeyspace.KeyspaceName, cutoverQR)
+ env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.targetKeyspace.KeyspaceName, deleteWFQR)
+ env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.targetKeyspace.KeyspaceName, createWFQR)
+ env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.targetKeyspace.KeyspaceName, createJournalQR)
+ }
+ env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.sourceKeyspace.KeyspaceName, freezeReverseWFQR)
}
- env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.targetKeyspace.KeyspaceName, deleteWFQR)
- env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.targetKeyspace.KeyspaceName, createWFQR)
- env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.targetKeyspace.KeyspaceName, createJournalQR)
- env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.sourceKeyspace.KeyspaceName, freezeReverseWFQR)
}
+
if tc.preFunc != nil {
tc.preFunc(env)
}
+
+ if tc.multiTenant {
+ rwr := &readVReplicationWorkflowRequestResponse{
+ req: &tabletmanagerdatapb.ReadVReplicationWorkflowRequest{
+ Workflow: workflowName,
+ },
+ res: &tabletmanagerdatapb.ReadVReplicationWorkflowResponse{
+ Options: `{"tenant_id": "1"}`, // This is all we need for it to be considered a multi-tenant workflow
+ Streams: []*tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream{
+ {
+ Id: 1,
+ Bls: &binlogdatapb.BinlogSource{
+ Keyspace: sourceKeyspaceName,
+ Shard: "0",
+ Filter: &binlogdatapb.Filter{
+ Rules: []*binlogdatapb.Rule{
+ {
+ Match: "t1",
+ Filter: "select * from t1",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ }
+ env.tmc.expectReadVReplicationWorkflowRequestOnTargetTablets(rwr)
+ // Multi-tenant workflows also use keyspace routing rules. So we set those
+ // up as if we've already switched the traffic.
+ if tc.req.Direction == int32(DirectionBackward) {
+ err := changeKeyspaceRouting(ctx, env.ts, tc.req.TabletTypes, tc.sourceKeyspace.KeyspaceName,
+ tc.targetKeyspace.KeyspaceName, "SwitchTraffic")
+ require.NoError(t, err)
+ }
+ }
+
got, err := env.ws.WorkflowSwitchTraffic(ctx, tc.req)
if tc.wantErr {
require.Error(t, err)
@@ -1178,32 +1735,77 @@ func TestMoveTablesTrafficSwitching(t *testing.T) {
require.NoError(t, err)
require.Equal(t, tc.want.String(), got.String(), "Server.WorkflowSwitchTraffic() = %v, want %v", got, tc.want)
- // Confirm that we have the expected routing rules.
- rr, err := env.ts.GetRoutingRules(ctx)
- require.NoError(t, err)
- to := fmt.Sprintf("%s.%s", tc.targetKeyspace.KeyspaceName, tableName)
- if tc.req.Direction == int32(DirectionBackward) {
- to = fmt.Sprintf("%s.%s", tc.sourceKeyspace.KeyspaceName, tableName)
- }
- for _, rr := range rr.Rules {
- for _, tt := range rr.ToTables {
- require.Equal(t, to, tt)
+ if tc.multiTenant { // Confirm the keyspace routing rules
+ gotKrrs, err := env.ts.GetKeyspaceRoutingRules(ctx)
+ require.NoError(t, err)
+ sort.Slice(gotKrrs.Rules, func(i, j int) bool {
+ return gotKrrs.Rules[i].FromKeyspace < gotKrrs.Rules[j].FromKeyspace
+ })
+ expectedKrrs := &vschemapb.KeyspaceRoutingRules{}
+ for _, tabletType := range tc.req.TabletTypes {
+ suffix := ""
+ if tabletType != topodatapb.TabletType_PRIMARY {
+ suffix = fmt.Sprintf("@%s", strings.ToLower(tabletType.String()))
+ }
+ toKs, fromKs := tc.sourceKeyspace.KeyspaceName, tc.targetKeyspace.KeyspaceName
+ if tc.req.Direction == int32(DirectionBackward) {
+ fromKs, toKs = toKs, fromKs
+ }
+ expectedKrrs.Rules = append(expectedKrrs.Rules, &vschemapb.KeyspaceRoutingRule{
+ FromKeyspace: fromKs + suffix,
+ ToKeyspace: toKs,
+ })
+ }
+ sort.Slice(expectedKrrs.Rules, func(i, j int) bool {
+ return expectedKrrs.Rules[i].FromKeyspace < expectedKrrs.Rules[j].FromKeyspace
+ })
+ require.Equal(t, expectedKrrs.String(), gotKrrs.String())
+ } else { // Confirm the [table] routing rules
+ rr, err := env.ts.GetRoutingRules(ctx)
+ require.NoError(t, err)
+ for _, rr := range rr.Rules {
+ _, rrTabletType, found := strings.Cut(rr.FromTable, "@")
+ if !found { // No @ is primary
+ rrTabletType = topodatapb.TabletType_PRIMARY.String()
+ }
+ tabletType, err := topoproto.ParseTabletType(rrTabletType)
+ require.NoError(t, err)
+
+ var to string
+ if slices.Contains(tc.req.TabletTypes, tabletType) {
+ to = fmt.Sprintf("%s.%s", tc.targetKeyspace.KeyspaceName, tableName)
+ if tc.req.Direction == int32(DirectionBackward) {
+ to = fmt.Sprintf("%s.%s", tc.sourceKeyspace.KeyspaceName, tableName)
+ }
+ } else {
+ to = fmt.Sprintf("%s.%s", tc.sourceKeyspace.KeyspaceName, tableName)
+ if tc.req.Direction == int32(DirectionBackward) {
+ to = fmt.Sprintf("%s.%s", tc.targetKeyspace.KeyspaceName, tableName)
+ }
+ }
+ for _, tt := range rr.ToTables {
+ require.Equal(t, to, tt, "Additional info: tablet type: %s, rr.FromTable: %s, rr.ToTables: %v, to string: %s",
+ tabletType.String(), rr.FromTable, rr.ToTables, to)
+ }
}
}
+
// Confirm that we have the expected denied tables entries.
- for _, keyspace := range []*testKeyspace{tc.sourceKeyspace, tc.targetKeyspace} {
- for _, shardName := range keyspace.ShardNames {
- si, err := env.ts.GetShard(ctx, keyspace.KeyspaceName, shardName)
- require.NoError(t, err)
- switch {
- case keyspace == tc.sourceKeyspace && tc.req.Direction == int32(DirectionForward):
- require.True(t, hasDeniedTableEntry(si))
- case keyspace == tc.sourceKeyspace && tc.req.Direction == int32(DirectionBackward):
- require.False(t, hasDeniedTableEntry(si))
- case keyspace == tc.targetKeyspace && tc.req.Direction == int32(DirectionForward):
- require.False(t, hasDeniedTableEntry(si))
- case keyspace == tc.targetKeyspace && tc.req.Direction == int32(DirectionBackward):
- require.True(t, hasDeniedTableEntry(si))
+ if slices.Contains(tc.req.TabletTypes, topodatapb.TabletType_PRIMARY) {
+ for _, keyspace := range []*testKeyspace{tc.sourceKeyspace, tc.targetKeyspace} {
+ for _, shardName := range keyspace.ShardNames {
+ si, err := env.ts.GetShard(ctx, keyspace.KeyspaceName, shardName)
+ require.NoError(t, err)
+ switch {
+ case keyspace == tc.sourceKeyspace && tc.req.Direction == int32(DirectionForward):
+ require.True(t, hasDeniedTableEntry(si))
+ case keyspace == tc.sourceKeyspace && tc.req.Direction == int32(DirectionBackward):
+ require.False(t, hasDeniedTableEntry(si))
+ case keyspace == tc.targetKeyspace && tc.req.Direction == int32(DirectionForward):
+ require.False(t, hasDeniedTableEntry(si))
+ case keyspace == tc.targetKeyspace && tc.req.Direction == int32(DirectionBackward):
+ require.True(t, hasDeniedTableEntry(si))
+ }
}
}
}
@@ -1224,11 +1826,6 @@ func TestMoveTablesTrafficSwitchingDryRun(t *testing.T) {
sourceKeyspaceName := "sourceks"
targetKeyspaceName := "targetks"
vrID := 1
- tabletTypes := []topodatapb.TabletType{
- topodatapb.TabletType_PRIMARY,
- topodatapb.TabletType_REPLICA,
- topodatapb.TabletType_RDONLY,
- }
schema := map[string]*tabletmanagerdatapb.SchemaDefinition{
table1Name: {
TableDefinitions: []*tabletmanagerdatapb.TableDefinition{
@@ -1281,7 +1878,7 @@ func TestMoveTablesTrafficSwitchingDryRun(t *testing.T) {
Keyspace: targetKeyspaceName,
Workflow: workflowName,
Direction: int32(DirectionForward),
- TabletTypes: tabletTypes,
+ TabletTypes: allTabletTypes,
DryRun: true,
},
want: []string{
@@ -1322,13 +1919,13 @@ func TestMoveTablesTrafficSwitchingDryRun(t *testing.T) {
Keyspace: targetKeyspaceName,
Workflow: workflowName,
Direction: int32(DirectionBackward),
- TabletTypes: tabletTypes,
+ TabletTypes: allTabletTypes,
DryRun: true,
},
want: []string{
fmt.Sprintf("Lock keyspace %s", targetKeyspaceName),
fmt.Sprintf("Mirroring 0.00 percent of traffic from keyspace %s to keyspace %s for tablet types [REPLICA,RDONLY]", targetKeyspaceName, sourceKeyspaceName),
- fmt.Sprintf("Switch reads for tables [%s] to keyspace %s for tablet types [REPLICA,RDONLY]", tablesStr, targetKeyspaceName),
+ fmt.Sprintf("Switch reads for tables [%s] to keyspace %s for tablet types [REPLICA,RDONLY]", tablesStr, sourceKeyspaceName),
fmt.Sprintf("Routing rules for tables [%s] will be updated", tablesStr),
fmt.Sprintf("Unlock keyspace %s", targetKeyspaceName),
fmt.Sprintf("Lock keyspace %s", targetKeyspaceName),
@@ -1349,6 +1946,32 @@ func TestMoveTablesTrafficSwitchingDryRun(t *testing.T) {
fmt.Sprintf("Unlock keyspace %s", targetKeyspaceName),
},
},
+ {
+ name: "backward for read-only tablets",
+ sourceKeyspace: &testKeyspace{
+ KeyspaceName: sourceKeyspaceName,
+ ShardNames: []string{"-80", "80-"},
+ },
+ targetKeyspace: &testKeyspace{
+ KeyspaceName: targetKeyspaceName,
+ ShardNames: []string{"-80", "80-"},
+ },
+ req: &vtctldatapb.WorkflowSwitchTrafficRequest{
+ Keyspace: targetKeyspaceName,
+ Workflow: workflowName,
+ Direction: int32(DirectionBackward),
+ TabletTypes: roTabletTypes,
+ DryRun: true,
+ },
+ want: []string{
+ fmt.Sprintf("Lock keyspace %s", sourceKeyspaceName),
+ fmt.Sprintf("Mirroring 0.00 percent of traffic from keyspace %s to keyspace %s for tablet types [REPLICA,RDONLY]", sourceKeyspaceName, targetKeyspaceName),
+ fmt.Sprintf("Switch reads for tables [%s] to keyspace %s for tablet types [REPLICA,RDONLY]", tablesStr, sourceKeyspaceName),
+ fmt.Sprintf("Routing rules for tables [%s] will be updated", tablesStr),
+ fmt.Sprintf("Serving VSchema will be rebuilt for the %s keyspace", sourceKeyspaceName),
+ fmt.Sprintf("Unlock keyspace %s", sourceKeyspaceName),
+ },
+ },
}
for _, tc := range testcases {
t.Run(tc.name, func(t *testing.T) {
@@ -1369,14 +1992,20 @@ func TestMoveTablesTrafficSwitchingDryRun(t *testing.T) {
} else {
env.tmc.reverse.Store(true)
// Setup the routing rules as they would be after having previously done SwitchTraffic.
- env.updateTableRoutingRules(t, ctx, tabletTypes, tables,
+ env.updateTableRoutingRules(t, ctx, tc.req.TabletTypes, tables,
tc.sourceKeyspace.KeyspaceName, tc.targetKeyspace.KeyspaceName, tc.targetKeyspace.KeyspaceName)
- env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.sourceKeyspace.KeyspaceName, copyTableQR)
- for i := 0; i < len(tc.targetKeyspace.ShardNames); i++ { // Per stream
- env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.targetKeyspace.KeyspaceName, journalQR)
- }
- for i := 0; i < len(tc.targetKeyspace.ShardNames); i++ { // Per stream
- env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.targetKeyspace.KeyspaceName, lockTableQR)
+ if !slices.Contains(tc.req.TabletTypes, topodatapb.TabletType_PRIMARY) {
+ for i := 0; i < len(tc.sourceKeyspace.ShardNames); i++ { // Per stream
+ env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.sourceKeyspace.KeyspaceName, journalQR)
+ }
+ } else {
+ env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.sourceKeyspace.KeyspaceName, copyTableQR)
+ for i := 0; i < len(tc.sourceKeyspace.ShardNames); i++ { // Per stream
+ env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.targetKeyspace.KeyspaceName, journalQR)
+ }
+ for i := 0; i < len(tc.sourceKeyspace.ShardNames); i++ { // Per stream
+ env.tmc.expectVRQueryResultOnKeyspaceTablets(tc.targetKeyspace.KeyspaceName, lockTableQR)
+ }
}
}
got, err := env.ws.WorkflowSwitchTraffic(ctx, tc.req)
@@ -1811,3 +2440,122 @@ func createReadVReplicationWorkflowFunc(t *testing.T, workflowType binlogdatapb.
}, nil
}
}
+
+// Test checks that we don't include logs from non-existent streams in the result.
+// Ensures that we just skip the logs from non-existent streams and include the rest.
+func TestGetWorkflowsStreamLogs(t *testing.T) {
+ ctx := context.Background()
+
+ sourceKeyspace := "source_keyspace"
+ targetKeyspace := "target_keyspace"
+ workflow := "test_workflow"
+
+ sourceShards := []string{"-"}
+ targetShards := []string{"-"}
+
+ te := newTestMaterializerEnv(t, ctx, &vtctldatapb.MaterializeSettings{
+ SourceKeyspace: sourceKeyspace,
+ TargetKeyspace: targetKeyspace,
+ Workflow: workflow,
+ TableSettings: []*vtctldatapb.TableMaterializeSettings{
+ {
+ TargetTable: "table1",
+ SourceExpression: fmt.Sprintf("select * from %s", "table1"),
+ },
+ {
+ TargetTable: "table2",
+ SourceExpression: fmt.Sprintf("select * from %s", "table2"),
+ },
+ },
+ }, sourceShards, targetShards)
+
+ logResult := sqltypes.MakeTestResult(
+ sqltypes.MakeTestFields("id|vrepl_id|type|state|message|created_at|updated_at|count", "int64|int64|varchar|varchar|varchar|varchar|varchar|int64"),
+ "1|0|State Change|Running|test message for non-existent 1|2006-01-02 15:04:05|2006-01-02 15:04:05|1",
+ "2|0|State Change|Stopped|test message for non-existent 2|2006-01-02 15:04:06|2006-01-02 15:04:06|1",
+ "3|1|State Change|Running|log message|2006-01-02 15:04:07|2006-01-02 15:04:07|1",
+ )
+
+ te.tmc.expectVRQuery(200, "select vrepl_id, table_name, lastpk from _vt.copy_state where vrepl_id in (1) and id in (select max(id) from _vt.copy_state where vrepl_id in (1) group by vrepl_id, table_name)", &sqltypes.Result{})
+ te.tmc.expectVRQuery(200, "select id from _vt.vreplication where db_name = 'vt_target_keyspace' and workflow = 'test_workflow'", &sqltypes.Result{})
+ te.tmc.expectVRQuery(200, "select id, vrepl_id, type, state, message, created_at, updated_at, `count` from _vt.vreplication_log where vrepl_id in (1) order by vrepl_id asc, id asc", logResult)
+
+ res, err := te.ws.GetWorkflows(ctx, &vtctldatapb.GetWorkflowsRequest{
+ Keyspace: targetKeyspace,
+ Workflow: workflow,
+ IncludeLogs: true,
+ })
+ require.NoError(t, err)
+
+ assert.Len(t, res.Workflows, 1)
+ assert.NotNil(t, res.Workflows[0].ShardStreams["-/cell-0000000200"])
+ assert.Len(t, res.Workflows[0].ShardStreams["-/cell-0000000200"].Streams, 1)
+
+ gotLogs := res.Workflows[0].ShardStreams["-/cell-0000000200"].Streams[0].Logs
+
+ // The non-existent stream logs shouldn't be part of the result
+ assert.Len(t, gotLogs, 1)
+ assert.Equal(t, gotLogs[0].Message, "log message")
+ assert.Equal(t, gotLogs[0].State, "Running")
+ assert.Equal(t, gotLogs[0].Id, int64(3))
+}
+
+func TestWorkflowStatus(t *testing.T) {
+ ctx := context.Background()
+
+ sourceKeyspace := "source_keyspace"
+ targetKeyspace := "target_keyspace"
+ workflow := "test_workflow"
+
+ sourceShards := []string{"-"}
+ targetShards := []string{"-"}
+
+ te := newTestMaterializerEnv(t, ctx, &vtctldatapb.MaterializeSettings{
+ SourceKeyspace: sourceKeyspace,
+ TargetKeyspace: targetKeyspace,
+ Workflow: workflow,
+ TableSettings: []*vtctldatapb.TableMaterializeSettings{
+ {
+ TargetTable: "table1",
+ SourceExpression: fmt.Sprintf("select * from %s", "table1"),
+ },
+ {
+ TargetTable: "table2",
+ SourceExpression: fmt.Sprintf("select * from %s", "table2"),
+ },
+ },
+ }, sourceShards, targetShards)
+
+ tablesResult := sqltypes.MakeTestResult(sqltypes.MakeTestFields("table_name", "varchar"), "table1", "table2")
+ te.tmc.expectVRQuery(200, "select distinct table_name from _vt.copy_state cs, _vt.vreplication vr where vr.id = cs.vrepl_id and vr.id = 1", tablesResult)
+
+ tablesTargetCopyResult := sqltypes.MakeTestResult(sqltypes.MakeTestFields("table_name|table_rows|data_length", "varchar|int64|int64"), "table1|50|500", "table2|100|250")
+ te.tmc.expectVRQuery(200, "select table_name, table_rows, data_length from information_schema.tables where table_schema = 'vt_target_keyspace' and table_name in ('table1','table2')", tablesTargetCopyResult)
+
+ tablesSourceCopyResult := sqltypes.MakeTestResult(sqltypes.MakeTestFields("table_name|table_rows|data_length", "varchar|int64|int64"), "table1|100|1000", "table2|200|500")
+ te.tmc.expectVRQuery(100, "select table_name, table_rows, data_length from information_schema.tables where table_schema = 'vt_source_keyspace' and table_name in ('table1','table2')", tablesSourceCopyResult)
+
+ te.tmc.expectVRQuery(200, "select vrepl_id, table_name, lastpk from _vt.copy_state where vrepl_id in (1) and id in (select max(id) from _vt.copy_state where vrepl_id in (1) group by vrepl_id, table_name)", &sqltypes.Result{})
+
+ res, err := te.ws.WorkflowStatus(ctx, &vtctldatapb.WorkflowStatusRequest{
+ Keyspace: targetKeyspace,
+ Workflow: workflow,
+ Shards: targetShards,
+ })
+
+ assert.NoError(t, err)
+
+ require.NotNil(t, res.TableCopyState)
+
+ stateTable1 := res.TableCopyState["table1"]
+ stateTable2 := res.TableCopyState["table2"]
+ require.NotNil(t, stateTable1)
+ require.NotNil(t, stateTable2)
+
+ assert.Equal(t, int64(100), stateTable1.RowsTotal)
+ assert.Equal(t, int64(200), stateTable2.RowsTotal)
+ assert.Equal(t, int64(50), stateTable1.RowsCopied)
+ assert.Equal(t, int64(100), stateTable2.RowsCopied)
+ assert.Equal(t, float32(50), stateTable1.RowsPercentage)
+ assert.Equal(t, float32(50), stateTable2.RowsPercentage)
+}
diff --git a/go/vt/vtctl/workflow/switcher_dry_run_test.go b/go/vt/vtctl/workflow/switcher_dry_run_test.go
new file mode 100644
index 00000000000..ff0bc709fd4
--- /dev/null
+++ b/go/vt/vtctl/workflow/switcher_dry_run_test.go
@@ -0,0 +1,390 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package workflow
+
+import (
+ "context"
+ "fmt"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+
+ binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata"
+ tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata"
+ topodatapb "vitess.io/vitess/go/vt/proto/topodata"
+)
+
+func newTrafficSwitcherEnv(t *testing.T, tables []string, sourceKeyspaceName string, sourceShards []string, targetKeyspaceName string, targetShards []string, workflowName string) (*testEnv, *trafficSwitcher) {
+ ctx := context.Background()
+ schema := map[string]*tabletmanagerdatapb.SchemaDefinition{}
+ for _, tableName := range tables {
+ schema[tableName] = &tabletmanagerdatapb.SchemaDefinition{
+ TableDefinitions: []*tabletmanagerdatapb.TableDefinition{
+ {
+ Name: tableName,
+ Schema: fmt.Sprintf("CREATE TABLE %s (id BIGINT, name VARCHAR(64), PRIMARY KEY (id))", tableName),
+ },
+ },
+ }
+ }
+
+ sourceKeyspace := &testKeyspace{
+ KeyspaceName: sourceKeyspaceName,
+ ShardNames: sourceShards,
+ }
+ targetKeyspace := &testKeyspace{
+ KeyspaceName: targetKeyspaceName,
+ ShardNames: targetShards,
+ }
+
+ env := newTestEnv(t, ctx, defaultCellName, sourceKeyspace, targetKeyspace)
+ env.tmc.schema = schema
+
+ ts, _, err := env.ws.getWorkflowState(ctx, targetKeyspaceName, workflowName)
+ require.NoError(t, err)
+ return env, ts
+}
+
+func TestDropTargetVReplicationStreams(t *testing.T) {
+ ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
+ defer cancel()
+
+ env, ts := newTrafficSwitcherEnv(t, []string{"t1"}, "sourceks", []string{"0"}, "targetks", []string{"-80", "80-"}, "wf1")
+ defer env.close()
+
+ drLog := NewLogRecorder()
+ dr := switcherDryRun{
+ ts: ts,
+ drLog: drLog,
+ }
+
+ err := dr.dropTargetVReplicationStreams(ctx)
+ require.NoError(t, err)
+ require.Len(t, drLog.logs, 1)
+ log := drLog.logs[0]
+
+ // Make sure both the target streams are included in the logs
+ assert.Contains(t, log, "-80")
+ assert.Contains(t, log, "80-")
+}
+
+func TestStartReverseVReplication(t *testing.T) {
+ ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
+ defer cancel()
+
+ env, ts := newTrafficSwitcherEnv(t, []string{"t1"}, "sourceks", []string{"-80", "80-"}, "targetks", []string{"0"}, "wf1")
+ defer env.close()
+
+ drLog := NewLogRecorder()
+ dr := switcherDryRun{
+ ts: ts,
+ drLog: drLog,
+ }
+
+ err := dr.startReverseVReplication(ctx)
+ require.NoError(t, err)
+ require.Len(t, drLog.logs, 1)
+ log := drLog.logs[0]
+
+ // Make sure both the source tablets are included in the logs
+ assert.Contains(t, log, "tablet:100")
+ assert.Contains(t, log, "tablet:110")
+}
+
+func TestRemoveSourceTables(t *testing.T) {
+ ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
+ defer cancel()
+
+ env, ts := newTrafficSwitcherEnv(t, []string{"t1"}, "sourceks", []string{"-80", "80-"}, "targetks", []string{"0"}, "wf1")
+ defer env.close()
+
+ drLog := NewLogRecorder()
+ dr := switcherDryRun{
+ ts: ts,
+ drLog: drLog,
+ }
+
+ err := dr.removeSourceTables(ctx, RenameTable)
+ require.NoError(t, err)
+ require.Len(t, drLog.logs, 1)
+ log := drLog.logs[0]
+
+ assert.Contains(t, log, "Renaming")
+ // Make sure both the source tablets are included in the logs
+ assert.Contains(t, log, "tablet:100")
+ assert.Contains(t, log, "tablet:110")
+
+ err = dr.removeSourceTables(ctx, DropTable)
+ require.NoError(t, err)
+ require.Len(t, drLog.logs, 2)
+ log = drLog.logs[1]
+
+ assert.Contains(t, log, "Dropping")
+ // Make sure both the source tablets are included in the logs
+ assert.Contains(t, log, "tablet:100")
+ assert.Contains(t, log, "tablet:110")
+}
+
+func TestDropShards(t *testing.T) {
+ ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
+ defer cancel()
+
+ env, ts := newTrafficSwitcherEnv(t, []string{"t1"}, "sourceks", []string{"-80", "80-"}, "targetks", []string{"0"}, "wf1")
+ defer env.close()
+
+ drLog := NewLogRecorder()
+ dr := switcherDryRun{
+ ts: ts,
+ drLog: drLog,
+ }
+
+ err := dr.dropSourceShards(ctx)
+ require.NoError(t, err)
+ require.Len(t, drLog.logs, 1)
+ log := drLog.logs[0]
+
+ // Make sure both the source shards are included in the logs
+ assert.Contains(t, log, "[-80]")
+ assert.Contains(t, log, "[80-]")
+
+ err = dr.dropTargetShards(ctx)
+ require.NoError(t, err)
+ require.Len(t, drLog.logs, 2)
+ log = drLog.logs[1]
+ assert.Contains(t, log, "[0]")
+}
+
+func TestDropSourceReverseVReplicationStreams(t *testing.T) {
+ ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
+ defer cancel()
+
+ env, ts := newTrafficSwitcherEnv(t, []string{"t1"}, "sourceks", []string{"-80", "80-"}, "targetks", []string{"0"}, "wf1")
+ defer env.close()
+
+ drLog := NewLogRecorder()
+ dr := switcherDryRun{
+ ts: ts,
+ drLog: drLog,
+ }
+
+ err := dr.dropSourceReverseVReplicationStreams(ctx)
+ require.NoError(t, err)
+ require.Len(t, drLog.logs, 1)
+ log := drLog.logs[0]
+
+ // Make sure both the source streams are included in the logs
+ assert.Contains(t, log, "-80")
+ assert.Contains(t, log, "80-")
+ assert.Contains(t, log, "wf1_reverse")
+}
+
+func TestDropSourceDeniedTables(t *testing.T) {
+ ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
+ defer cancel()
+
+ env, ts := newTrafficSwitcherEnv(t, []string{"t1", "t2"}, "sourceks", []string{"-80", "80-"}, "targetks", []string{"0"}, "wf1")
+ defer env.close()
+
+ drLog := NewLogRecorder()
+ dr := switcherDryRun{
+ ts: ts,
+ drLog: drLog,
+ }
+
+ err := dr.dropSourceDeniedTables(ctx)
+ require.NoError(t, err)
+ require.Len(t, drLog.logs, 1)
+ log := drLog.logs[0]
+
+ // Make sure both the source streams are included in the logs
+ assert.Contains(t, log, "-80")
+ assert.Contains(t, log, "80-")
+ // Make sure both the tables are included in the logs
+ assert.Contains(t, log, "t1")
+ assert.Contains(t, log, "t2")
+}
+
+func TestDropTargetDeniedTables(t *testing.T) {
+ ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
+ defer cancel()
+
+ env, ts := newTrafficSwitcherEnv(t, []string{"t1", "t2"}, "sourceks", []string{"0"}, "targetks", []string{"-80", "80-"}, "wf1")
+ defer env.close()
+
+ drLog := NewLogRecorder()
+ dr := switcherDryRun{
+ ts: ts,
+ drLog: drLog,
+ }
+
+ err := dr.dropTargetDeniedTables(ctx)
+ require.NoError(t, err)
+ require.Len(t, drLog.logs, 1)
+ log := drLog.logs[0]
+
+ // Make sure both the target streams are included in the logs
+ assert.Contains(t, log, "-80")
+ assert.Contains(t, log, "80-")
+ // Make sure both the tables are included in the logs
+ assert.Contains(t, log, "t1")
+ assert.Contains(t, log, "t2")
+}
+
+func TestRemoveTargetTables(t *testing.T) {
+ ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
+ defer cancel()
+
+ env, ts := newTrafficSwitcherEnv(t, []string{"t1", "t2"}, "sourceks", []string{"0"}, "targetks", []string{"-80", "80-"}, "wf1")
+ defer env.close()
+
+ drLog := NewLogRecorder()
+ dr := switcherDryRun{
+ ts: ts,
+ drLog: drLog,
+ }
+
+ err := dr.removeTargetTables(ctx)
+ require.NoError(t, err)
+ require.Len(t, drLog.logs, 1)
+ log := drLog.logs[0]
+
+ assert.Contains(t, log, "targetks")
+ // Make sure both the target streams are included in the logs
+ assert.Contains(t, log, "-80")
+ assert.Contains(t, log, "80-")
+ // Make sure both the tables are included in the logs
+ assert.Contains(t, log, "t1")
+ assert.Contains(t, log, "t2")
+}
+
+func TestSwitchKeyspaceReads(t *testing.T) {
+ ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
+ defer cancel()
+
+ sourceKeyspaceName := "sourceks"
+ targetKeyspaceName := "targetks"
+
+ env, ts := newTrafficSwitcherEnv(t, []string{"t1", "t2"}, sourceKeyspaceName, []string{"0"}, targetKeyspaceName, []string{"-80", "80-"}, "wf1")
+ defer env.close()
+
+ drLog := NewLogRecorder()
+ dr := switcherDryRun{
+ ts: ts,
+ drLog: drLog,
+ }
+
+ err := dr.switchKeyspaceReads(ctx, []topodatapb.TabletType{topodatapb.TabletType_PRIMARY, topodatapb.TabletType_RDONLY})
+ require.NoError(t, err)
+ require.Len(t, drLog.logs, 1)
+ log := drLog.logs[0]
+ assert.Contains(t, log, fmt.Sprintf("keyspace %s to keyspace %s", sourceKeyspaceName, targetKeyspaceName))
+ assert.Contains(t, log, "PRIMARY")
+ assert.Contains(t, log, "RDONLY")
+}
+
+func TestSwitchShardReads(t *testing.T) {
+ ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
+ defer cancel()
+
+ sourceKeyspaceName := "sourceks"
+ targetKeyspaceName := "targetks"
+
+ env, ts := newTrafficSwitcherEnv(t, []string{"t1", "t2"}, sourceKeyspaceName, []string{"0"}, targetKeyspaceName, []string{"-80", "80-"}, "wf1")
+ defer env.close()
+
+ drLog := NewLogRecorder()
+ dr := switcherDryRun{
+ ts: ts,
+ drLog: drLog,
+ }
+
+ err := dr.switchShardReads(ctx, nil, []topodatapb.TabletType{topodatapb.TabletType_PRIMARY, topodatapb.TabletType_RDONLY}, DirectionForward)
+ require.NoError(t, err)
+ require.Len(t, drLog.logs, 1)
+ log := drLog.logs[0]
+ assert.Contains(t, log, fmt.Sprintf("keyspace %s to keyspace %s", sourceKeyspaceName, targetKeyspaceName))
+ assert.Contains(t, log, "-80")
+ assert.Contains(t, log, "80-")
+ assert.Contains(t, log, "[0]")
+
+ err = dr.switchShardReads(ctx, nil, []topodatapb.TabletType{topodatapb.TabletType_PRIMARY, topodatapb.TabletType_RDONLY}, DirectionBackward)
+ require.NoError(t, err)
+ require.Len(t, drLog.logs, 2)
+ log = drLog.logs[1]
+ // Ensure the reverse direction is logged.
+ assert.Contains(t, log, fmt.Sprintf("keyspace %s to keyspace %s", targetKeyspaceName, sourceKeyspaceName))
+ assert.Contains(t, log, "-80")
+ assert.Contains(t, log, "80-")
+ assert.Contains(t, log, "[0]")
+}
+
+func TestChangeRouting(t *testing.T) {
+ ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
+ defer cancel()
+
+ sourceKeyspaceName := "sourceks"
+ targetKeyspaceName := "targetks"
+
+ env, ts := newTrafficSwitcherEnv(t, []string{"t1", "t2"}, sourceKeyspaceName, []string{"0"}, targetKeyspaceName, []string{"-80", "80-"}, "wf1")
+ defer env.close()
+
+ drLog := NewLogRecorder()
+ dr := switcherDryRun{
+ ts: ts,
+ drLog: drLog,
+ }
+
+ ts.migrationType = binlogdatapb.MigrationType_TABLES
+ err := dr.changeRouting(ctx)
+ require.NoError(t, err)
+ assert.Len(t, drLog.logs, 2)
+ assert.Contains(t, drLog.logs[0], fmt.Sprintf("keyspace %s to keyspace %s", sourceKeyspaceName, targetKeyspaceName))
+ assert.Contains(t, drLog.logs[1], "t1")
+ assert.Contains(t, drLog.logs[1], "t2")
+
+ ts.migrationType = binlogdatapb.MigrationType_SHARDS
+ err = dr.changeRouting(ctx)
+ require.NoError(t, err)
+ assert.Len(t, drLog.logs, 5)
+ assert.Contains(t, drLog.logs[3], "false")
+ assert.Contains(t, drLog.logs[3], "shard:0")
+ assert.Contains(t, drLog.logs[4], "true")
+ assert.Contains(t, drLog.logs[4], "shard:-80")
+ assert.Contains(t, drLog.logs[4], "shard:80-")
+}
+
+func TestDRInitializeTargetSequences(t *testing.T) {
+ ctx := context.Background()
+ drLog := NewLogRecorder()
+ dr := &switcherDryRun{
+ drLog: drLog,
+ }
+
+ tables := map[string]*sequenceMetadata{
+ "t1": nil,
+ "t2": nil,
+ "t3": nil,
+ }
+ err := dr.initializeTargetSequences(ctx, tables)
+ require.NoError(t, err)
+ assert.Len(t, drLog.logs, 1)
+ assert.Contains(t, drLog.logs[0], "t1")
+ assert.Contains(t, drLog.logs[0], "t2")
+ assert.Contains(t, drLog.logs[0], "t3")
+}
diff --git a/go/vt/vtctl/workflow/traffic_switcher.go b/go/vt/vtctl/workflow/traffic_switcher.go
index 65dcecb9623..4fc34992b0f 100644
--- a/go/vt/vtctl/workflow/traffic_switcher.go
+++ b/go/vt/vtctl/workflow/traffic_switcher.go
@@ -30,6 +30,7 @@ import (
"golang.org/x/sync/errgroup"
"vitess.io/vitess/go/json2"
+ "vitess.io/vitess/go/mysql/sqlerror"
"vitess.io/vitess/go/sqlescape"
"vitess.io/vitess/go/sqltypes"
"vitess.io/vitess/go/vt/binlog/binlogplayer"
@@ -37,6 +38,7 @@ import (
"vitess.io/vitess/go/vt/key"
"vitess.io/vitess/go/vt/log"
"vitess.io/vitess/go/vt/logutil"
+ "vitess.io/vitess/go/vt/mysqlctl/tmutils"
"vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/topo"
"vitess.io/vitess/go/vt/topo/topoproto"
@@ -75,9 +77,10 @@ const (
// Use pt-osc's naming convention, this format also ensures vstreamer ignores such tables.
renameTableTemplate = "_%.59s_old" // limit table name to 64 characters
- sqlDeleteWorkflow = "delete from _vt.vreplication where db_name = %s and workflow = %s"
- sqlGetMaxSequenceVal = "select max(%a) as maxval from %a.%a"
- sqlInitSequenceTable = "insert into %a.%a (id, next_id, cache) values (0, %d, 1000) on duplicate key update next_id = if(next_id < %d, %d, next_id)"
+ sqlDeleteWorkflow = "delete from _vt.vreplication where db_name = %s and workflow = %s"
+ sqlGetMaxSequenceVal = "select max(%a) as maxval from %a.%a"
+ sqlInitSequenceTable = "insert into %a.%a (id, next_id, cache) values (0, %d, 1000) on duplicate key update next_id = if(next_id < %d, %d, next_id)"
+ sqlCreateSequenceTable = "create table if not exists %a (id int, next_id bigint, cache bigint, primary key(id)) comment 'vitess_sequence'"
)
// accessType specifies the type of access for a shard (allow/disallow writes).
@@ -222,7 +225,7 @@ type trafficSwitcher struct {
logger logutil.Logger
migrationType binlogdatapb.MigrationType
- isPartialMigration bool
+ isPartialMigration bool // Is this on a subset of shards
workflow string
// Should we continue if we encounter some potentially non-fatal errors such
@@ -292,7 +295,7 @@ func (ts *trafficSwitcher) ForAllSources(f func(source *MigrationSource) error)
return allErrors.AggrError(vterrors.Aggregate)
}
-func (ts *trafficSwitcher) ForAllTargets(f func(source *MigrationTarget) error) error {
+func (ts *trafficSwitcher) ForAllTargets(f func(target *MigrationTarget) error) error {
var wg sync.WaitGroup
allErrors := &concurrency.AllErrorRecorder{}
for _, target := range ts.targets {
@@ -604,9 +607,17 @@ func (ts *trafficSwitcher) dropSourceShards(ctx context.Context) error {
}
func (ts *trafficSwitcher) switchShardReads(ctx context.Context, cells []string, servedTypes []topodatapb.TabletType, direction TrafficSwitchDirection) error {
+ ts.Logger().Infof("switchShardReads: workflow: %s, direction: %s, cells: %v, tablet types: %v",
+ ts.workflow, direction.String(), cells, servedTypes)
+
+ var fromShards, toShards []*topo.ShardInfo
+ if direction == DirectionForward {
+ fromShards, toShards = ts.SourceShards(), ts.TargetShards()
+ } else {
+ fromShards, toShards = ts.TargetShards(), ts.SourceShards()
+ }
+
cellsStr := strings.Join(cells, ",")
- ts.Logger().Infof("switchShardReads: cells: %s, tablet types: %+v, direction %d", cellsStr, servedTypes, direction)
- fromShards, toShards := ts.SourceShards(), ts.TargetShards()
if err := ts.TopoServer().ValidateSrvKeyspace(ctx, ts.TargetKeyspaceName(), cellsStr); err != nil {
err2 := vterrors.Wrapf(err, "Before switching shard reads, found SrvKeyspace for %s is corrupt in cell %s",
ts.TargetKeyspaceName(), cellsStr)
@@ -635,7 +646,9 @@ func (ts *trafficSwitcher) switchShardReads(ctx context.Context, cells []string,
}
func (ts *trafficSwitcher) switchTableReads(ctx context.Context, cells []string, servedTypes []topodatapb.TabletType, rebuildSrvVSchema bool, direction TrafficSwitchDirection) error {
- ts.Logger().Infof("switchTableReads: cells: %s, tablet types: %+v, direction: %s", strings.Join(cells, ","), servedTypes, direction)
+ ts.Logger().Infof("switchTableReads: workflow: %s, direction: %s, cells: %v, tablet types: %v",
+ ts.workflow, direction.String(), cells, servedTypes)
+
rules, err := topotools.GetRoutingRules(ctx, ts.TopoServer())
if err != nil {
return err
@@ -649,13 +662,19 @@ func (ts *trafficSwitcher) switchTableReads(ctx context.Context, cells []string,
if servedType != topodatapb.TabletType_REPLICA && servedType != topodatapb.TabletType_RDONLY {
return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid tablet type specified when switching reads: %v", servedType)
}
-
tt := strings.ToLower(servedType.String())
for _, table := range ts.Tables() {
- toTarget := []string{ts.TargetKeyspaceName() + "." + table}
- rules[table+"@"+tt] = toTarget
- rules[ts.TargetKeyspaceName()+"."+table+"@"+tt] = toTarget
- rules[ts.SourceKeyspaceName()+"."+table+"@"+tt] = toTarget
+ if direction == DirectionForward {
+ toTarget := []string{ts.TargetKeyspaceName() + "." + table}
+ rules[table+"@"+tt] = toTarget
+ rules[ts.TargetKeyspaceName()+"."+table+"@"+tt] = toTarget
+ rules[ts.SourceKeyspaceName()+"."+table+"@"+tt] = toTarget
+ } else {
+ toSource := []string{ts.SourceKeyspaceName() + "." + table}
+ rules[table+"@"+tt] = toSource
+ rules[ts.TargetKeyspaceName()+"."+table+"@"+tt] = toSource
+ rules[ts.SourceKeyspaceName()+"."+table+"@"+tt] = toSource
+ }
}
}
if err := topotools.SaveRoutingRules(ctx, ts.TopoServer(), rules); err != nil {
@@ -971,15 +990,7 @@ func (ts *trafficSwitcher) createReverseVReplication(ctx context.Context) error
func (ts *trafficSwitcher) addTenantFilter(ctx context.Context, filter string) (string, error) {
parser := ts.ws.env.Parser()
- vschema, err := ts.TopoServer().GetVSchema(ctx, ts.targetKeyspace)
- if err != nil {
- return "", err
- }
- targetVSchema, err := vindexes.BuildKeyspaceSchema(vschema, ts.targetKeyspace, parser)
- if err != nil {
- return "", err
- }
- tenantClause, err := getTenantClause(ts.options, targetVSchema, parser)
+ tenantClause, err := ts.buildTenantPredicate(ctx)
if err != nil {
return "", err
}
@@ -996,6 +1007,23 @@ func (ts *trafficSwitcher) addTenantFilter(ctx context.Context, filter string) (
return filter, nil
}
+func (ts *trafficSwitcher) buildTenantPredicate(ctx context.Context) (*sqlparser.Expr, error) {
+ parser := ts.ws.env.Parser()
+ vschema, err := ts.TopoServer().GetVSchema(ctx, ts.targetKeyspace)
+ if err != nil {
+ return nil, err
+ }
+ targetVSchema, err := vindexes.BuildKeyspaceSchema(vschema, ts.targetKeyspace, parser)
+ if err != nil {
+ return nil, err
+ }
+ tenantPredicate, err := getTenantClause(ts.options, targetVSchema, parser)
+ if err != nil {
+ return nil, err
+ }
+ return tenantPredicate, nil
+}
+
func (ts *trafficSwitcher) waitForCatchup(ctx context.Context, filteredReplicationWaitTime time.Duration) error {
ctx, cancel := context.WithTimeout(ctx, filteredReplicationWaitTime)
defer cancel()
@@ -1107,30 +1135,45 @@ func (ts *trafficSwitcher) switchDeniedTables(ctx context.Context) error {
return nil
}
+// cancelMigration attempts to revert all changes made during the migration so that we can get back to the
+// state when traffic switching (or reversing) was initiated.
func (ts *trafficSwitcher) cancelMigration(ctx context.Context, sm *StreamMigrator) {
var err error
+
+ if ctx.Err() != nil {
+ // Even though we create a new context later on we still record any context error:
+ // for forensics in case of failures.
+ ts.Logger().Infof("In Cancel migration: original context invalid: %s", ctx.Err())
+ }
+
+ // We create a new context while canceling the migration, so that we are independent of the original
+ // context being cancelled prior to or during the cancel operation.
+ cmTimeout := 60 * time.Second
+ cmCtx, cmCancel := context.WithTimeout(context.Background(), cmTimeout)
+ defer cmCancel()
+
if ts.MigrationType() == binlogdatapb.MigrationType_TABLES {
- err = ts.switchDeniedTables(ctx)
+ err = ts.switchDeniedTables(cmCtx)
} else {
- err = ts.changeShardsAccess(ctx, ts.SourceKeyspaceName(), ts.SourceShards(), allowWrites)
+ err = ts.changeShardsAccess(cmCtx, ts.SourceKeyspaceName(), ts.SourceShards(), allowWrites)
}
if err != nil {
- ts.Logger().Errorf("Cancel migration failed: %v", err)
+ ts.Logger().Errorf("Cancel migration failed: could not revert denied tables / shard access: %v", err)
}
- sm.CancelStreamMigrations(ctx)
+ sm.CancelStreamMigrations(cmCtx)
err = ts.ForAllTargets(func(target *MigrationTarget) error {
query := fmt.Sprintf("update _vt.vreplication set state='Running', message='' where db_name=%s and workflow=%s",
encodeString(target.GetPrimary().DbName()), encodeString(ts.WorkflowName()))
- _, err := ts.TabletManagerClient().VReplicationExec(ctx, target.GetPrimary().Tablet, query)
+ _, err := ts.TabletManagerClient().VReplicationExec(cmCtx, target.GetPrimary().Tablet, query)
return err
})
if err != nil {
ts.Logger().Errorf("Cancel migration failed: could not restart vreplication: %v", err)
}
- err = ts.deleteReverseVReplication(ctx)
+ err = ts.deleteReverseVReplication(cmCtx)
if err != nil {
ts.Logger().Errorf("Cancel migration failed: could not delete reverse vreplication streams: %v", err)
}
@@ -1416,7 +1459,7 @@ func (ts *trafficSwitcher) getTargetSequenceMetadata(ctx context.Context) (map[s
// be in another unsharded keyspace.
smMu := sync.Mutex{}
tableCount := len(sequencesByBackingTable)
- tablesFound := 0 // Used to short circuit the search
+ tablesFound := make(map[string]struct{}) // Used to short circuit the search
// Define the function used to search each keyspace.
searchKeyspace := func(sctx context.Context, done chan struct{}, keyspace string) error {
kvs, kerr := ts.TopoServer().GetVSchema(sctx, keyspace)
@@ -1447,13 +1490,13 @@ func (ts *trafficSwitcher) getTargetSequenceMetadata(ctx context.Context) (map[s
sm := sequencesByBackingTable[unescapedTableName]
if tableDef != nil && tableDef.Type == vindexes.TypeSequence &&
sm != nil && unescapedTableName == sm.backingTableName {
- tablesFound++ // This is also protected by the mutex
+ tablesFound[tableName] = struct{}{} // This is also protected by the mutex
sm.backingTableKeyspace = keyspace
// Set the default keyspace name. We will later check to
// see if the tablet we send requests to is using a dbname
// override and use that if it is.
sm.backingTableDBName = "vt_" + keyspace
- if tablesFound == tableCount { // Short circuit the search
+ if len(tablesFound) == tableCount { // Short circuit the search
select {
case <-done: // It's already been closed
return true
@@ -1490,13 +1533,90 @@ func (ts *trafficSwitcher) getTargetSequenceMetadata(ctx context.Context) (map[s
return nil, err
}
- if tablesFound != tableCount {
- return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "failed to locate all of the backing sequence tables being used: %s",
- strings.Join(maps.Keys(sequencesByBackingTable), ","))
+ if len(tablesFound) != tableCount {
+ // Try and create the missing backing sequence tables if we can.
+ if err := ts.createMissingSequenceTables(ctx, sequencesByBackingTable, tablesFound); err != nil {
+ return nil, err
+ }
}
+
return sequencesByBackingTable, nil
}
+// createMissingSequenceTables will create the backing sequence tables for those that
+// could not be found in any current keyspace.
+func (ts trafficSwitcher) createMissingSequenceTables(ctx context.Context, sequencesByBackingTable map[string]*sequenceMetadata, tablesFound map[string]struct{}) error {
+ globalKeyspace := ts.options.GetGlobalKeyspace()
+ if globalKeyspace == "" {
+ return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "failed to locate all of the backing sequence tables being used and no global-keyspace was provided to auto create them in: %s",
+ strings.Join(maps.Keys(sequencesByBackingTable), ","))
+ }
+ shards, err := ts.ws.ts.GetShardNames(ctx, globalKeyspace)
+ if err != nil {
+ return err
+ }
+ if len(shards) != 1 {
+ return vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "global-keyspace %s is not unsharded", globalKeyspace)
+ }
+ globalVSchema, err := ts.ws.ts.GetVSchema(ctx, globalKeyspace)
+ if err != nil {
+ return err
+ }
+ updatedGlobalVSchema := false
+ for tableName, sequenceMetadata := range sequencesByBackingTable {
+ if _, ok := tablesFound[tableName]; !ok {
+ // Create the backing table.
+ shard, err := ts.ws.ts.GetShard(ctx, globalKeyspace, shards[0])
+ if err != nil {
+ return err
+ }
+ if shard.PrimaryAlias == nil {
+ return vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "global-keyspace %s does not currently have a primary tablet",
+ globalKeyspace)
+ }
+ primary, err := ts.ws.ts.GetTablet(ctx, shard.PrimaryAlias)
+ if err != nil {
+ return err
+ }
+ escapedTableName, err := sqlescape.EnsureEscaped(tableName)
+ if err != nil {
+ return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "invalid table name %s: %v",
+ tableName, err)
+ }
+ stmt := sqlparser.BuildParsedQuery(sqlCreateSequenceTable, escapedTableName)
+ _, err = ts.ws.tmc.ApplySchema(ctx, primary.Tablet, &tmutils.SchemaChange{
+ SQL: stmt.Query,
+ Force: false,
+ AllowReplication: true,
+ SQLMode: vreplication.SQLMode,
+ DisableForeignKeyChecks: true,
+ })
+ if err != nil {
+ return vterrors.Wrapf(err, "failed to create sequence backing table %s in global-keyspace %s",
+ tableName, globalKeyspace)
+ }
+ if bt := globalVSchema.Tables[sequenceMetadata.backingTableName]; bt == nil {
+ if globalVSchema.Tables == nil {
+ globalVSchema.Tables = make(map[string]*vschemapb.Table)
+ }
+ globalVSchema.Tables[tableName] = &vschemapb.Table{
+ Type: vindexes.TypeSequence,
+ }
+ updatedGlobalVSchema = true
+ sequenceMetadata.backingTableDBName = "vt_" + globalKeyspace // This will be overridden later if needed
+ sequenceMetadata.backingTableKeyspace = globalKeyspace
+ }
+ }
+ }
+ if updatedGlobalVSchema {
+ err = ts.ws.ts.SaveVSchema(ctx, globalKeyspace, globalVSchema)
+ if err != nil {
+ return vterrors.Wrapf(err, "failed to update vschema in the global-keyspace %s", globalKeyspace)
+ }
+ }
+ return nil
+}
+
// findSequenceUsageInKeyspace searches the keyspace's vschema for usage
// of sequences. It returns a map of sequence metadata keyed by the backing
// sequence table name -- if any usage is found -- along with a boolean to
@@ -1600,12 +1720,16 @@ func (ts *trafficSwitcher) findSequenceUsageInKeyspace(vschema *vschemapb.Keyspa
// initializeTargetSequences initializes the backing sequence tables
// using a map keyed by the backing sequence table name.
//
-// The backing tables must have already been created. This function will
-// then ensure that the next value is set to a value greater than any
-// currently stored in the using table on the target keyspace. If the
-// backing table is updated to a new higher value then it will also tell
-// the primary tablet serving the sequence to refresh/reset its cache to
-// be sure that it does not provide a value that is less than the current max.
+// The backing tables must have already been created, unless a default
+// global keyspace exists for the trafficSwitcher -- in which case we
+// will create the backing table there if needed.
+
+// This function will then ensure that the next value is set to a value
+// greater than any currently stored in the using table on the target
+// keyspace. If the backing table is updated to a new higher value then
+// it will also tell the primary tablet serving the sequence to
+// refresh/reset its cache to be sure that it does not provide a value
+// that is less than the current max.
func (ts *trafficSwitcher) initializeTargetSequences(ctx context.Context, sequencesByBackingTable map[string]*sequenceMetadata) error {
initSequenceTable := func(ictx context.Context, sequenceMetadata *sequenceMetadata) error {
// Now we need to run this query on the target shards in order
@@ -1717,13 +1841,37 @@ func (ts *trafficSwitcher) initializeTargetSequences(ctx context.Context, sequen
)
// Now execute this on the primary tablet of the unsharded keyspace
// housing the backing table.
+ initialize:
qr, ierr := ts.ws.tmc.ExecuteFetchAsApp(ictx, sequenceTablet.Tablet, true, &tabletmanagerdatapb.ExecuteFetchAsAppRequest{
Query: []byte(query.Query),
MaxRows: 1,
})
if ierr != nil {
- return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "failed to initialize the backing sequence table %s.%s: %v",
+ vterr := vterrors.Errorf(vtrpcpb.Code_INTERNAL, "failed to initialize the backing sequence table %s.%s: %v",
sequenceMetadata.backingTableDBName, sequenceMetadata.backingTableName, ierr)
+ // If the sequence table doesn't exist, let's try and create it, otherwise
+ // return the error.
+ if sqlErr, ok := sqlerror.NewSQLErrorFromError(ierr).(*sqlerror.SQLError); !ok ||
+ (sqlErr.Num != sqlerror.ERNoSuchTable && sqlErr.Num != sqlerror.ERBadTable) {
+ return vterr
+ }
+ stmt := sqlparser.BuildParsedQuery(sqlCreateSequenceTable, backingTable)
+ _, ierr = ts.ws.tmc.ApplySchema(ctx, sequenceTablet.Tablet, &tmutils.SchemaChange{
+ SQL: stmt.Query,
+ Force: false,
+ AllowReplication: true,
+ SQLMode: vreplication.SQLMode,
+ DisableForeignKeyChecks: true,
+ })
+ if ierr != nil {
+ return vterrors.Wrapf(vterr, "could not create missing sequence table: %v", err)
+ }
+ select {
+ case <-ctx.Done():
+ return vterrors.Wrapf(vterr, "could not create missing sequence table: %v", ctx.Err())
+ default:
+ goto initialize
+ }
}
// If we actually updated the backing sequence table, then we need
// to tell the primary tablet managing the sequence to refresh/reset
diff --git a/go/vt/vtctl/workflow/traffic_switcher_test.go b/go/vt/vtctl/workflow/traffic_switcher_test.go
index 4b3d17036c1..b06c95b6c16 100644
--- a/go/vt/vtctl/workflow/traffic_switcher_test.go
+++ b/go/vt/vtctl/workflow/traffic_switcher_test.go
@@ -27,11 +27,18 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
+ "vitess.io/vitess/go/sqlescape"
+ "vitess.io/vitess/go/sqltypes"
+ "vitess.io/vitess/go/vt/mysqlctl/tmutils"
"vitess.io/vitess/go/vt/proto/vschema"
+ "vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/topo"
"vitess.io/vitess/go/vt/vtgate/vindexes"
+ "vitess.io/vitess/go/vt/vttablet/tabletmanager/vreplication"
tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata"
+ topodatapb "vitess.io/vitess/go/vt/proto/topodata"
+ vtctldatapb "vitess.io/vitess/go/vt/proto/vtctldata"
)
type testTrafficSwitcher struct {
@@ -73,6 +80,7 @@ func TestGetTargetSequenceMetadata(t *testing.T) {
cell := "cell1"
workflow := "wf1"
table := "`t1`"
+ tableDDL := "create table t1 (id int not null auto_increment primary key, c1 varchar(10))"
table2 := "t2"
unescapedTable := "t1"
sourceKeyspace := &testKeyspace{
@@ -91,12 +99,25 @@ func TestGetTargetSequenceMetadata(t *testing.T) {
env := newTestEnv(t, ctx, cell, sourceKeyspace, targetKeyspace)
defer env.close()
+ env.tmc.schema = map[string]*tabletmanagerdatapb.SchemaDefinition{
+ unescapedTable: {
+ TableDefinitions: []*tabletmanagerdatapb.TableDefinition{
+ {
+ Name: unescapedTable,
+ Schema: tableDDL,
+ },
+ },
+ },
+ }
+
type testCase struct {
- name string
- sourceVSchema *vschema.Keyspace
- targetVSchema *vschema.Keyspace
- want map[string]*sequenceMetadata
- err string
+ name string
+ sourceVSchema *vschema.Keyspace
+ targetVSchema *vschema.Keyspace
+ options *vtctldatapb.WorkflowOptions
+ want map[string]*sequenceMetadata
+ expectSourceApplySchemaRequestResponse *applySchemaRequestResponse
+ err string
}
tests := []testCase{
{
@@ -152,6 +173,66 @@ func TestGetTargetSequenceMetadata(t *testing.T) {
},
},
},
+ {
+ name: "auto_increment replaced with sequence",
+ sourceVSchema: &vschema.Keyspace{
+ Vindexes: vindexes,
+ Tables: map[string]*vschema.Table{}, // Sequence table will be created
+ },
+ options: &vtctldatapb.WorkflowOptions{
+ ShardedAutoIncrementHandling: vtctldatapb.ShardedAutoIncrementHandling_REPLACE,
+ GlobalKeyspace: sourceKeyspace.KeyspaceName,
+ },
+ expectSourceApplySchemaRequestResponse: &applySchemaRequestResponse{
+ change: &tmutils.SchemaChange{
+ SQL: sqlparser.BuildParsedQuery(sqlCreateSequenceTable,
+ sqlescape.EscapeID(fmt.Sprintf(autoSequenceTableFormat, unescapedTable))).Query,
+ Force: false,
+ AllowReplication: true,
+ SQLMode: vreplication.SQLMode,
+ DisableForeignKeyChecks: true,
+ },
+ res: &tabletmanagerdatapb.SchemaChangeResult{},
+ },
+ targetVSchema: &vschema.Keyspace{
+ Vindexes: vindexes,
+ Tables: map[string]*vschema.Table{
+ table: {
+ ColumnVindexes: []*vschema.ColumnVindex{
+ {
+ Name: "xxhash",
+ Column: "`my-col`",
+ },
+ },
+ AutoIncrement: &vschema.AutoIncrement{
+ Column: "my-col",
+ Sequence: fmt.Sprintf(autoSequenceTableFormat, unescapedTable),
+ },
+ },
+ },
+ },
+ want: map[string]*sequenceMetadata{
+ fmt.Sprintf(autoSequenceTableFormat, unescapedTable): {
+ backingTableName: fmt.Sprintf(autoSequenceTableFormat, unescapedTable),
+ backingTableKeyspace: "source-ks",
+ backingTableDBName: "vt_source-ks",
+ usingTableName: unescapedTable,
+ usingTableDBName: "vt_targetks",
+ usingTableDefinition: &vschema.Table{
+ ColumnVindexes: []*vschema.ColumnVindex{
+ {
+ Column: "my-col",
+ Name: "xxhash",
+ },
+ },
+ AutoIncrement: &vschema.AutoIncrement{
+ Column: "my-col",
+ Sequence: fmt.Sprintf(autoSequenceTableFormat, unescapedTable),
+ },
+ },
+ },
+ },
+ },
{
name: "sequences with backticks",
sourceVSchema: &vschema.Keyspace{
@@ -468,6 +549,9 @@ func TestGetTargetSequenceMetadata(t *testing.T) {
Tablet: tablet,
},
}
+ if tc.expectSourceApplySchemaRequestResponse != nil {
+ env.tmc.expectApplySchemaRequest(tablet.Alias.Uid, tc.expectSourceApplySchemaRequestResponse)
+ }
}
for i, shard := range targetKeyspace.ShardNames {
tablet := env.tablets[targetKeyspace.KeyspaceName][startingTargetTabletUID+(i*tabletUIDStep)]
@@ -486,6 +570,7 @@ func TestGetTargetSequenceMetadata(t *testing.T) {
targetKeyspace: targetKeyspace.KeyspaceName,
sources: sources,
targets: targets,
+ options: tc.options,
}
got, err := ts.getTargetSequenceMetadata(ctx)
if tc.err != "" {
@@ -566,3 +651,255 @@ func TestTrafficSwitchPositionHandling(t *testing.T) {
})
require.NoError(t, err)
}
+
+func TestInitializeTargetSequences(t *testing.T) {
+ ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
+ defer cancel()
+
+ workflowName := "wf1"
+ tableName := "t1"
+ sourceKeyspaceName := "sourceks"
+ targetKeyspaceName := "targetks"
+
+ schema := map[string]*tabletmanagerdatapb.SchemaDefinition{
+ tableName: {
+ TableDefinitions: []*tabletmanagerdatapb.TableDefinition{
+ {
+ Name: tableName,
+ Schema: fmt.Sprintf("CREATE TABLE %s (id BIGINT, name VARCHAR(64), PRIMARY KEY (id))", tableName),
+ },
+ },
+ },
+ }
+
+ sourceKeyspace := &testKeyspace{
+ KeyspaceName: sourceKeyspaceName,
+ ShardNames: []string{"0"},
+ }
+ targetKeyspace := &testKeyspace{
+ KeyspaceName: targetKeyspaceName,
+ ShardNames: []string{"0"},
+ }
+
+ env := newTestEnv(t, ctx, defaultCellName, sourceKeyspace, targetKeyspace)
+ defer env.close()
+ env.tmc.schema = schema
+
+ ts, _, err := env.ws.getWorkflowState(ctx, targetKeyspaceName, workflowName)
+ require.NoError(t, err)
+ sw := &switcher{ts: ts, s: env.ws}
+
+ sequencesByBackingTable := map[string]*sequenceMetadata{
+ "my-seq1": {
+ backingTableName: "my-seq1",
+ backingTableKeyspace: sourceKeyspaceName,
+ backingTableDBName: fmt.Sprintf("vt_%s", sourceKeyspaceName),
+ usingTableName: tableName,
+ usingTableDBName: "vt_targetks",
+ usingTableDefinition: &vschema.Table{
+ AutoIncrement: &vschema.AutoIncrement{
+ Column: "my-col",
+ Sequence: fmt.Sprintf("%s.my-seq1", sourceKeyspace.KeyspaceName),
+ },
+ },
+ },
+ }
+
+ env.tmc.expectVRQuery(200, "/select max.*", sqltypes.MakeTestResult(sqltypes.MakeTestFields("maxval", "int64"), "34"))
+ // Expect the insert query to be executed with 35 as a params, since we provide a maxID of 34 in the last query
+ env.tmc.expectVRQuery(100, "/insert into.*35.*", &sqltypes.Result{RowsAffected: 1})
+
+ err = sw.initializeTargetSequences(ctx, sequencesByBackingTable)
+ assert.NoError(t, err)
+
+ // Expect the queries to be cleared
+ assert.Empty(t, env.tmc.vrQueries[100])
+ assert.Empty(t, env.tmc.vrQueries[200])
+}
+
+func TestAddTenantFilter(t *testing.T) {
+ ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
+ defer cancel()
+
+ workflowName := "wf1"
+ tableName := "t1"
+ sourceKeyspaceName := "sourceks"
+ targetKeyspaceName := "targetks"
+
+ sourceKeyspace := &testKeyspace{
+ KeyspaceName: sourceKeyspaceName,
+ ShardNames: []string{"0"},
+ }
+ targetKeyspace := &testKeyspace{
+ KeyspaceName: targetKeyspaceName,
+ ShardNames: []string{"0"},
+ }
+
+ schema := map[string]*tabletmanagerdatapb.SchemaDefinition{
+ tableName: {
+ TableDefinitions: []*tabletmanagerdatapb.TableDefinition{
+ {
+ Name: tableName,
+ Schema: fmt.Sprintf("CREATE TABLE %s (id BIGINT, name VARCHAR(64), PRIMARY KEY (id))", tableName),
+ },
+ },
+ },
+ }
+
+ env := newTestEnv(t, ctx, defaultCellName, sourceKeyspace, targetKeyspace)
+ defer env.close()
+ env.tmc.schema = schema
+
+ err := env.ts.SaveVSchema(ctx, targetKeyspaceName, &vschema.Keyspace{
+ MultiTenantSpec: &vschema.MultiTenantSpec{
+ TenantIdColumnName: "tenant_id",
+ TenantIdColumnType: sqltypes.Int64,
+ },
+ })
+ require.NoError(t, err)
+
+ ts, _, err := env.ws.getWorkflowState(ctx, targetKeyspaceName, workflowName)
+ require.NoError(t, err)
+
+ ts.options.TenantId = "123"
+
+ filter, err := ts.addTenantFilter(ctx, fmt.Sprintf("select * from %s where id < 5", tableName))
+ assert.NoError(t, err)
+ assert.Equal(t, "select * from t1 where tenant_id = 123 and id < 5", filter)
+}
+
+func TestChangeShardRouting(t *testing.T) {
+ ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
+ defer cancel()
+
+ workflowName := "wf1"
+ tableName := "t1"
+ sourceKeyspaceName := "sourceks"
+ targetKeyspaceName := "targetks"
+
+ sourceKeyspace := &testKeyspace{
+ KeyspaceName: sourceKeyspaceName,
+ ShardNames: []string{"0"},
+ }
+ targetKeyspace := &testKeyspace{
+ KeyspaceName: targetKeyspaceName,
+ ShardNames: []string{"0"},
+ }
+
+ schema := map[string]*tabletmanagerdatapb.SchemaDefinition{
+ tableName: {
+ TableDefinitions: []*tabletmanagerdatapb.TableDefinition{
+ {
+ Name: tableName,
+ Schema: fmt.Sprintf("CREATE TABLE %s (id BIGINT, name VARCHAR(64), PRIMARY KEY (id))", tableName),
+ },
+ },
+ },
+ }
+
+ env := newTestEnv(t, ctx, defaultCellName, sourceKeyspace, targetKeyspace)
+ defer env.close()
+ env.tmc.schema = schema
+
+ ts, _, err := env.ws.getWorkflowState(ctx, targetKeyspaceName, workflowName)
+ require.NoError(t, err)
+
+ err = env.ws.ts.UpdateSrvKeyspace(ctx, "cell", targetKeyspaceName, &topodatapb.SrvKeyspace{
+ Partitions: []*topodatapb.SrvKeyspace_KeyspacePartition{
+ {
+ ShardReferences: []*topodatapb.ShardReference{
+ {
+ Name: "0",
+ },
+ },
+ },
+ },
+ })
+ require.NoError(t, err)
+
+ err = env.ws.ts.UpdateSrvKeyspace(ctx, "cell", sourceKeyspaceName, &topodatapb.SrvKeyspace{
+ Partitions: []*topodatapb.SrvKeyspace_KeyspacePartition{
+ {
+ ShardReferences: []*topodatapb.ShardReference{
+ {
+ Name: "0",
+ },
+ },
+ },
+ },
+ })
+ require.NoError(t, err)
+
+ ctx, _, err = env.ws.ts.LockShard(ctx, targetKeyspaceName, "0", "targetks0")
+ require.NoError(t, err)
+
+ ctx, _, err = env.ws.ts.LockKeyspace(ctx, targetKeyspaceName, "targetks0")
+ require.NoError(t, err)
+
+ err = ts.changeShardRouting(ctx)
+ assert.NoError(t, err)
+
+ sourceShardInfo, err := env.ws.ts.GetShard(ctx, sourceKeyspaceName, "0")
+ assert.NoError(t, err)
+ assert.False(t, sourceShardInfo.IsPrimaryServing, "source shard shouldn't have it's primary serving after changeShardRouting() is called.")
+
+ targetShardInfo, err := env.ws.ts.GetShard(ctx, targetKeyspaceName, "0")
+ assert.NoError(t, err)
+ assert.True(t, targetShardInfo.IsPrimaryServing, "target shard should have it's primary serving after changeShardRouting() is called.")
+}
+
+func TestAddParticipatingTablesToKeyspace(t *testing.T) {
+ ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
+ defer cancel()
+
+ workflowName := "wf1"
+ tableName := "t1"
+ sourceKeyspaceName := "sourceks"
+ targetKeyspaceName := "targetks"
+
+ sourceKeyspace := &testKeyspace{
+ KeyspaceName: sourceKeyspaceName,
+ ShardNames: []string{"0"},
+ }
+ targetKeyspace := &testKeyspace{
+ KeyspaceName: targetKeyspaceName,
+ ShardNames: []string{"0"},
+ }
+
+ schema := map[string]*tabletmanagerdatapb.SchemaDefinition{
+ tableName: {
+ TableDefinitions: []*tabletmanagerdatapb.TableDefinition{
+ {
+ Name: tableName,
+ Schema: fmt.Sprintf("CREATE TABLE %s (id BIGINT, name VARCHAR(64), PRIMARY KEY (id))", tableName),
+ },
+ },
+ },
+ }
+
+ env := newTestEnv(t, ctx, defaultCellName, sourceKeyspace, targetKeyspace)
+ defer env.close()
+ env.tmc.schema = schema
+
+ ts, _, err := env.ws.getWorkflowState(ctx, targetKeyspaceName, workflowName)
+ require.NoError(t, err)
+
+ err = ts.addParticipatingTablesToKeyspace(ctx, sourceKeyspaceName, "")
+ assert.NoError(t, err)
+
+ vs, err := env.ts.GetVSchema(ctx, sourceKeyspaceName)
+ assert.NoError(t, err)
+ assert.NotNil(t, vs.Tables["t1"])
+ assert.Empty(t, vs.Tables["t1"])
+
+ specs := `{"t1":{"column_vindexes":[{"column":"col1","name":"v1"}, {"column":"col2","name":"v2"}]},"t2":{"column_vindexes":[{"column":"col2","name":"v2"}]}}`
+ err = ts.addParticipatingTablesToKeyspace(ctx, sourceKeyspaceName, specs)
+ assert.NoError(t, err)
+
+ vs, err = env.ts.GetVSchema(ctx, sourceKeyspaceName)
+ assert.NoError(t, err)
+ require.NotNil(t, vs.Tables["t1"])
+ require.NotNil(t, vs.Tables["t2"])
+ assert.Len(t, vs.Tables["t1"].ColumnVindexes, 2)
+ assert.Len(t, vs.Tables["t2"].ColumnVindexes, 1)
+}
diff --git a/go/vt/vtctl/workflow/utils.go b/go/vt/vtctl/workflow/utils.go
index 9de8904cf7e..65fa49fde86 100644
--- a/go/vt/vtctl/workflow/utils.go
+++ b/go/vt/vtctl/workflow/utils.go
@@ -123,7 +123,8 @@ func validateNewWorkflow(ctx context.Context, ts *topo.Server, tmc tmclient.Tabl
}
for _, wf := range res.Workflows {
if wf.Workflow == workflow {
- allErrors.RecordError(fmt.Errorf("workflow %s already exists in keyspace %s on tablet %v", workflow, keyspace, primary.Alias))
+ allErrors.RecordError(fmt.Errorf("workflow %s already exists in keyspace %s on tablet %s",
+ workflow, keyspace, topoproto.TabletAliasString(primary.Alias)))
return
}
}
@@ -217,21 +218,34 @@ func stripTableForeignKeys(ddl string, parser *sqlparser.Parser) (string, error)
return newDDL, nil
}
-func stripAutoIncrement(ddl string, parser *sqlparser.Parser) (string, error) {
+// stripAutoIncrement will strip any MySQL auto_increment clause in the given
+// table definition. If an optional replace function is specified then that
+// callback will be used to e.g. replace the MySQL clause with a Vitess
+// VSchema AutoIncrement definition.
+func stripAutoIncrement(ddl string, parser *sqlparser.Parser, replace func(columnName string) error) (string, error) {
newDDL, err := parser.ParseStrictDDL(ddl)
if err != nil {
return "", err
}
- _ = sqlparser.Walk(func(node sqlparser.SQLNode) (kontinue bool, err error) {
+ err = sqlparser.Walk(func(node sqlparser.SQLNode) (kontinue bool, err error) {
switch node := node.(type) {
case *sqlparser.ColumnDefinition:
if node.Type.Options.Autoincrement {
node.Type.Options.Autoincrement = false
+ if replace != nil {
+ if err := replace(sqlparser.String(node.Name)); err != nil {
+ return false, vterrors.Wrapf(err, "failed to replace auto_increment column %q in %q", sqlparser.String(node.Name), ddl)
+ }
+
+ }
}
}
return true, nil
}, newDDL)
+ if err != nil {
+ return "", err
+ }
return sqlparser.String(newDDL), nil
}
@@ -902,7 +916,7 @@ func validateTenantId(dataType querypb.Type, value string) error {
}
func updateKeyspaceRoutingState(ctx context.Context, ts *topo.Server, sourceKeyspace, targetKeyspace string, state *State) error {
- // For multi-tenant migrations, we only support switching traffic to all cells at once
+ // For multi-tenant migrations, we only support switching traffic to all cells at once.
cells, err := ts.GetCellInfoNames(ctx)
if err != nil {
return err
@@ -1011,3 +1025,29 @@ func applyTargetShards(ts *trafficSwitcher, targetShards []string) error {
}
return nil
}
+
+// validateSourceTablesExist validates that tables provided are present
+// in the source keyspace.
+func validateSourceTablesExist(ctx context.Context, sourceKeyspace string, ksTables, tables []string) error {
+ var missingTables []string
+ for _, table := range tables {
+ if schema.IsInternalOperationTableName(table) {
+ continue
+ }
+ found := false
+
+ for _, ksTable := range ksTables {
+ if table == ksTable {
+ found = true
+ break
+ }
+ }
+ if !found {
+ missingTables = append(missingTables, table)
+ }
+ }
+ if len(missingTables) > 0 {
+ return vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "table(s) not found in source keyspace %s: %s", sourceKeyspace, strings.Join(missingTables, ","))
+ }
+ return nil
+}
diff --git a/go/vt/vtctl/workflow/utils_test.go b/go/vt/vtctl/workflow/utils_test.go
index b315e1aa991..8458cf60995 100644
--- a/go/vt/vtctl/workflow/utils_test.go
+++ b/go/vt/vtctl/workflow/utils_test.go
@@ -11,16 +11,18 @@ import (
"testing"
"time"
+ "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
clientv3 "go.etcd.io/etcd/client/v3"
"vitess.io/vitess/go/testfiles"
"vitess.io/vitess/go/vt/log"
- "vitess.io/vitess/go/vt/proto/vtctldata"
"vitess.io/vitess/go/vt/topo"
"vitess.io/vitess/go/vt/topo/etcd2topo"
"vitess.io/vitess/go/vt/topo/memorytopo"
"vitess.io/vitess/go/vt/topotools"
+
+ "vitess.io/vitess/go/vt/proto/vtctldata"
)
// TestCreateDefaultShardRoutingRules confirms that the default shard routing rules are created correctly for sharded
@@ -243,3 +245,39 @@ func startEtcd(t *testing.T) string {
return clientAddr
}
+
+func TestValidateSourceTablesExist(t *testing.T) {
+ ctx := context.Background()
+ ks := "source_keyspace"
+ ksTables := []string{"table1", "table2"}
+
+ testCases := []struct {
+ name string
+ tables []string
+ errContains string
+ }{
+ {
+ name: "no error",
+ tables: []string{"table2"},
+ },
+ {
+ name: "ignore internal table",
+ tables: []string{"_vt_hld_6ace8bcef73211ea87e9f875a4d24e90_20200915120410_", "table1", "table2"},
+ },
+ {
+ name: "table not found error",
+ tables: []string{"table3", "table1", "table2"},
+ errContains: "table3",
+ },
+ }
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ err := validateSourceTablesExist(ctx, ks, ksTables, tc.tables)
+ if tc.errContains != "" {
+ assert.ErrorContains(t, err, tc.errContains)
+ } else {
+ assert.NoError(t, err)
+ }
+ })
+ }
+}
diff --git a/go/vt/vtctl/workflow/workflow_state_test.go b/go/vt/vtctl/workflow/workflow_state_test.go
index d64b6b36a86..96f63f8ab31 100644
--- a/go/vt/vtctl/workflow/workflow_state_test.go
+++ b/go/vt/vtctl/workflow/workflow_state_test.go
@@ -82,8 +82,10 @@ func setupMoveTables(t *testing.T, ctx context.Context) *testEnv {
for _, resp := range workflowResponses {
te.tmc.AddVReplicationWorkflowsResponse(workflowKey, resp)
}
- te.tmc.readVReplicationWorkflowRequests[200] = &tabletmanagerdata.ReadVReplicationWorkflowRequest{
- Workflow: "wf1",
+ te.tmc.readVReplicationWorkflowRequests[200] = &readVReplicationWorkflowRequestResponse{
+ req: &tabletmanagerdata.ReadVReplicationWorkflowRequest{
+ Workflow: "wf1",
+ },
}
te.updateTableRoutingRules(t, ctx, nil, []string{"t1"},
"source", te.targetKeyspace.KeyspaceName, "source")
diff --git a/go/vt/vtctl/workflow/workflows.go b/go/vt/vtctl/workflow/workflows.go
new file mode 100644
index 00000000000..da0ee5dfec7
--- /dev/null
+++ b/go/vt/vtctl/workflow/workflows.go
@@ -0,0 +1,672 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+This file provides functions for fetching and retrieving information about VReplication workflows
+
+At the moment it is used by the `GetWorkflows` function in `server.go and includes functionality to
+get the following:
+- Fetch workflows by shard
+- Fetch copy states by shard stream
+- Build workflows with metadata
+- Fetch stream logs
+*/
+
+package workflow
+
+import (
+ "context"
+ "encoding/json"
+ "fmt"
+ "math"
+ "sort"
+ "strings"
+ "sync"
+ "time"
+
+ "golang.org/x/exp/maps"
+ "golang.org/x/sync/errgroup"
+
+ "vitess.io/vitess/go/sets"
+ "vitess.io/vitess/go/sqltypes"
+ "vitess.io/vitess/go/trace"
+ "vitess.io/vitess/go/vt/binlog/binlogplayer"
+ "vitess.io/vitess/go/vt/logutil"
+ "vitess.io/vitess/go/vt/sqlparser"
+ "vitess.io/vitess/go/vt/topo"
+ "vitess.io/vitess/go/vt/topo/topoproto"
+ "vitess.io/vitess/go/vt/vtctl/workflow/common"
+ "vitess.io/vitess/go/vt/vtctl/workflow/vexec"
+ "vitess.io/vitess/go/vt/vterrors"
+ "vitess.io/vitess/go/vt/vttablet/tmclient"
+
+ binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata"
+ tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata"
+ vtctldatapb "vitess.io/vitess/go/vt/proto/vtctldata"
+ vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc"
+ vttimepb "vitess.io/vitess/go/vt/proto/vttime"
+)
+
+// workflowFetcher is responsible for fetching and retrieving information
+// about VReplication workflows.
+type workflowFetcher struct {
+ ts *topo.Server
+ tmc tmclient.TabletManagerClient
+
+ logger logutil.Logger
+ parser *sqlparser.Parser
+}
+
+type workflowMetadata struct {
+ sourceKeyspace string
+ sourceShards sets.Set[string]
+ targetKeyspace string
+ targetShards sets.Set[string]
+ maxVReplicationLag float64
+ maxVReplicationTransactionLag float64
+}
+
+var vrepLogQuery = strings.TrimSpace(`
+SELECT
+ id,
+ vrepl_id,
+ type,
+ state,
+ message,
+ created_at,
+ updated_at,
+ count
+FROM
+ _vt.vreplication_log
+WHERE vrepl_id IN %a
+ORDER BY
+ vrepl_id ASC,
+ id ASC
+`)
+
+func (wf *workflowFetcher) fetchWorkflowsByShard(
+ ctx context.Context,
+ req *vtctldatapb.GetWorkflowsRequest,
+) (map[*topo.TabletInfo]*tabletmanagerdatapb.ReadVReplicationWorkflowsResponse, error) {
+ readReq := &tabletmanagerdatapb.ReadVReplicationWorkflowsRequest{}
+ if req.Workflow != "" {
+ readReq.IncludeWorkflows = []string{req.Workflow}
+ }
+ if req.ActiveOnly {
+ readReq.ExcludeStates = []binlogdatapb.VReplicationWorkflowState{binlogdatapb.VReplicationWorkflowState_Stopped}
+ }
+
+ m := sync.Mutex{}
+
+ shards, err := common.GetShards(ctx, wf.ts, req.Keyspace, req.Shards)
+ if err != nil {
+ return nil, err
+ }
+
+ results := make(map[*topo.TabletInfo]*tabletmanagerdatapb.ReadVReplicationWorkflowsResponse, len(shards))
+
+ err = wf.forAllShards(ctx, req.Keyspace, shards, func(ctx context.Context, si *topo.ShardInfo) error {
+ primary, err := wf.ts.GetTablet(ctx, si.PrimaryAlias)
+ if err != nil {
+ return err
+ }
+ if primary == nil {
+ return fmt.Errorf("%w %s/%s: tablet %v not found", vexec.ErrNoShardPrimary, req.Keyspace, si.ShardName(), topoproto.TabletAliasString(si.PrimaryAlias))
+ }
+ // Clone the request so that we can set the correct DB name for tablet.
+ req := readReq.CloneVT()
+ wres, err := wf.tmc.ReadVReplicationWorkflows(ctx, primary.Tablet, req)
+ if err != nil {
+ return err
+ }
+ m.Lock()
+ defer m.Unlock()
+ results[primary] = wres
+ return nil
+ })
+ if err != nil {
+ return nil, err
+ }
+
+ return results, nil
+}
+
+func (wf *workflowFetcher) fetchCopyStatesByShardStream(
+ ctx context.Context,
+ workflowsByShard map[*topo.TabletInfo]*tabletmanagerdatapb.ReadVReplicationWorkflowsResponse,
+) (map[string][]*vtctldatapb.Workflow_Stream_CopyState, error) {
+ m := sync.Mutex{}
+
+ copyStatesByShardStreamId := make(map[string][]*vtctldatapb.Workflow_Stream_CopyState, len(workflowsByShard))
+
+ fetchCopyStates := func(ctx context.Context, tablet *topo.TabletInfo, streamIds []int32) error {
+ span, ctx := trace.NewSpan(ctx, "workflowFetcher.workflow.fetchCopyStates")
+ defer span.Finish()
+
+ span.Annotate("shard", tablet.Shard)
+ span.Annotate("tablet_alias", tablet.AliasString())
+
+ copyStates, err := wf.getWorkflowCopyStates(ctx, tablet, streamIds)
+ if err != nil {
+ return err
+ }
+
+ m.Lock()
+ defer m.Unlock()
+
+ for _, copyState := range copyStates {
+ shardStreamId := fmt.Sprintf("%s/%d", tablet.Shard, copyState.StreamId)
+ copyStatesByShardStreamId[shardStreamId] = append(
+ copyStatesByShardStreamId[shardStreamId],
+ copyState,
+ )
+ }
+
+ return nil
+ }
+
+ fetchCopyStatesEg, fetchCopyStatesCtx := errgroup.WithContext(ctx)
+ for tablet, result := range workflowsByShard {
+ streamIds := make([]int32, 0, len(result.Workflows))
+ for _, wf := range result.Workflows {
+ for _, stream := range wf.Streams {
+ streamIds = append(streamIds, stream.Id)
+ }
+ }
+
+ if len(streamIds) == 0 {
+ continue
+ }
+
+ fetchCopyStatesEg.Go(func() error {
+ return fetchCopyStates(fetchCopyStatesCtx, tablet, streamIds)
+ })
+ }
+ if err := fetchCopyStatesEg.Wait(); err != nil {
+ return nil, err
+ }
+
+ return copyStatesByShardStreamId, nil
+}
+
+func (wf *workflowFetcher) getWorkflowCopyStates(ctx context.Context, tablet *topo.TabletInfo, streamIds []int32) ([]*vtctldatapb.Workflow_Stream_CopyState, error) {
+ span, ctx := trace.NewSpan(ctx, "workflowFetcher.workflow.getWorkflowCopyStates")
+ defer span.Finish()
+
+ span.Annotate("keyspace", tablet.Keyspace)
+ span.Annotate("shard", tablet.Shard)
+ span.Annotate("tablet_alias", tablet.AliasString())
+ span.Annotate("stream_ids", fmt.Sprintf("%#v", streamIds))
+
+ idsBV, err := sqltypes.BuildBindVariable(streamIds)
+ if err != nil {
+ return nil, err
+ }
+ query, err := sqlparser.ParseAndBind("select vrepl_id, table_name, lastpk from _vt.copy_state where vrepl_id in %a and id in (select max(id) from _vt.copy_state where vrepl_id in %a group by vrepl_id, table_name)",
+ idsBV, idsBV)
+ if err != nil {
+ return nil, err
+ }
+ qr, err := wf.tmc.VReplicationExec(ctx, tablet.Tablet, query)
+ if err != nil {
+ return nil, err
+ }
+
+ result := sqltypes.Proto3ToResult(qr)
+ if result == nil {
+ return nil, nil
+ }
+
+ copyStates := make([]*vtctldatapb.Workflow_Stream_CopyState, len(result.Rows))
+ for i, row := range result.Named().Rows {
+ streamId, err := row["vrepl_id"].ToInt64()
+ if err != nil {
+ return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "failed to cast vrepl_id to int64: %v", err)
+ }
+ // These string fields are technically varbinary, but this is close enough.
+ copyStates[i] = &vtctldatapb.Workflow_Stream_CopyState{
+ StreamId: streamId,
+ Table: row["table_name"].ToString(),
+ LastPk: row["lastpk"].ToString(),
+ }
+ }
+
+ return copyStates, nil
+}
+
+func (wf *workflowFetcher) buildWorkflows(
+ ctx context.Context,
+ results map[*topo.TabletInfo]*tabletmanagerdatapb.ReadVReplicationWorkflowsResponse,
+ copyStatesByShardStreamId map[string][]*vtctldatapb.Workflow_Stream_CopyState,
+ req *vtctldatapb.GetWorkflowsRequest,
+) ([]*vtctldatapb.Workflow, error) {
+ workflowsMap := make(map[string]*vtctldatapb.Workflow, len(results))
+ workflowMetadataMap := make(map[string]*workflowMetadata, len(results))
+
+ for tablet, result := range results {
+ // In the old implementation, we knew we had at most one (0 <= N <= 1)
+ // workflow for each shard primary we queried. There might be multiple
+ // rows (streams) comprising that workflow, so we would aggregate the
+ // rows for a given primary into a single value ("the workflow",
+ // ReplicationStatusResult in the old types).
+ //
+ // In this version, we have many (N >= 0) workflows for each shard
+ // primary we queried, so we need to determine if each row corresponds
+ // to a workflow we're already aggregating, or if it's a workflow we
+ // haven't seen yet for that shard primary. We use the workflow name to
+ // dedupe for this.
+ for _, wfres := range result.Workflows {
+ workflowName := wfres.Workflow
+ workflow, ok := workflowsMap[workflowName]
+ if !ok {
+ workflow = &vtctldatapb.Workflow{
+ Name: workflowName,
+ ShardStreams: map[string]*vtctldatapb.Workflow_ShardStream{},
+ }
+
+ workflowsMap[workflowName] = workflow
+ workflowMetadataMap[workflowName] = &workflowMetadata{
+ sourceShards: sets.New[string](),
+ targetShards: sets.New[string](),
+ }
+ }
+
+ metadata := workflowMetadataMap[workflowName]
+ err := wf.scanWorkflow(ctx, workflow, wfres, tablet, metadata, copyStatesByShardStreamId, req.Keyspace)
+ if err != nil {
+ return nil, err
+ }
+ }
+ }
+
+ for name, workflow := range workflowsMap {
+ meta := workflowMetadataMap[name]
+ updateWorkflowWithMetadata(workflow, meta)
+
+ // Sort shard streams by stream_id ASC, to support an optimization
+ // in fetchStreamLogs below.
+ for _, shardStreams := range workflow.ShardStreams {
+ sort.Slice(shardStreams.Streams, func(i, j int) bool {
+ return shardStreams.Streams[i].Id < shardStreams.Streams[j].Id
+ })
+ }
+ }
+
+ if req.IncludeLogs {
+ var fetchLogsWG sync.WaitGroup
+
+ for _, workflow := range workflowsMap {
+ // Fetch logs for all streams associated with this workflow in the background.
+ fetchLogsWG.Add(1)
+ go func(ctx context.Context, workflow *vtctldatapb.Workflow) {
+ defer fetchLogsWG.Done()
+ wf.fetchStreamLogs(ctx, req.Keyspace, workflow)
+ }(ctx, workflow)
+ }
+
+ // Wait for all the log fetchers to finish.
+ fetchLogsWG.Wait()
+ }
+
+ return maps.Values(workflowsMap), nil
+}
+
+func (wf *workflowFetcher) scanWorkflow(
+ ctx context.Context,
+ workflow *vtctldatapb.Workflow,
+ res *tabletmanagerdatapb.ReadVReplicationWorkflowResponse,
+ tablet *topo.TabletInfo,
+ meta *workflowMetadata,
+ copyStatesByShardStreamId map[string][]*vtctldatapb.Workflow_Stream_CopyState,
+ keyspace string,
+) error {
+ shardStreamKey := fmt.Sprintf("%s/%s", tablet.Shard, tablet.AliasString())
+ shardStream, ok := workflow.ShardStreams[shardStreamKey]
+ if !ok {
+ ctx, cancel := context.WithTimeout(ctx, topo.RemoteOperationTimeout)
+ defer cancel()
+
+ si, err := wf.ts.GetShard(ctx, keyspace, tablet.Shard)
+ if err != nil {
+ return err
+ }
+
+ shardStream = &vtctldatapb.Workflow_ShardStream{
+ Streams: nil,
+ TabletControls: si.TabletControls,
+ IsPrimaryServing: si.IsPrimaryServing,
+ }
+
+ workflow.ShardStreams[shardStreamKey] = shardStream
+ }
+
+ for _, rstream := range res.Streams {
+ // The value in the pos column can be compressed and thus not
+ // have a valid GTID consisting of valid UTF-8 characters so we
+ // have to decode it so that it's properly decompressed first
+ // when needed.
+ pos := rstream.Pos
+ if pos != "" {
+ mpos, err := binlogplayer.DecodePosition(pos)
+ if err != nil {
+ return err
+ }
+ pos = mpos.String()
+ }
+
+ cells := strings.Split(res.Cells, ",")
+ for i := range cells {
+ cells[i] = strings.TrimSpace(cells[i])
+ }
+ options := res.Options
+ if options != "" {
+ if err := json.Unmarshal([]byte(options), &workflow.Options); err != nil {
+ return err
+ }
+ }
+
+ stream := &vtctldatapb.Workflow_Stream{
+ Id: int64(rstream.Id),
+ Shard: tablet.Shard,
+ Tablet: tablet.Alias,
+ BinlogSource: rstream.Bls,
+ Position: pos,
+ StopPosition: rstream.StopPos,
+ State: rstream.State.String(),
+ DbName: tablet.DbName(),
+ TabletTypes: res.TabletTypes,
+ TabletSelectionPreference: res.TabletSelectionPreference,
+ Cells: cells,
+ TransactionTimestamp: rstream.TransactionTimestamp,
+ TimeUpdated: rstream.TimeUpdated,
+ Message: rstream.Message,
+ Tags: strings.Split(res.Tags, ","),
+ RowsCopied: rstream.RowsCopied,
+ ThrottlerStatus: &vtctldatapb.Workflow_Stream_ThrottlerStatus{
+ ComponentThrottled: rstream.ComponentThrottled,
+ TimeThrottled: rstream.TimeThrottled,
+ },
+ }
+
+ // Merge in copy states, which we've already fetched.
+ shardStreamId := fmt.Sprintf("%s/%d", tablet.Shard, stream.Id)
+ if copyStates, ok := copyStatesByShardStreamId[shardStreamId]; ok {
+ stream.CopyStates = copyStates
+ }
+
+ if rstream.TimeUpdated == nil {
+ rstream.TimeUpdated = &vttimepb.Time{}
+ }
+
+ stream.State = getStreamState(stream, rstream)
+
+ shardStream.Streams = append(shardStream.Streams, stream)
+
+ meta.sourceShards.Insert(stream.BinlogSource.Shard)
+ meta.targetShards.Insert(tablet.Shard)
+
+ if meta.sourceKeyspace != "" && meta.sourceKeyspace != stream.BinlogSource.Keyspace {
+ return vterrors.Wrapf(ErrMultipleSourceKeyspaces, "workflow = %v, ks1 = %v, ks2 = %v", workflow.Name, meta.sourceKeyspace, stream.BinlogSource.Keyspace)
+ }
+
+ meta.sourceKeyspace = stream.BinlogSource.Keyspace
+
+ if meta.targetKeyspace != "" && meta.targetKeyspace != tablet.Keyspace {
+ return vterrors.Wrapf(ErrMultipleTargetKeyspaces, "workflow = %v, ks1 = %v, ks2 = %v", workflow.Name, meta.targetKeyspace, tablet.Keyspace)
+ }
+
+ meta.targetKeyspace = tablet.Keyspace
+
+ if stream.TimeUpdated == nil {
+ stream.TimeUpdated = &vttimepb.Time{}
+ }
+ timeUpdated := time.Unix(stream.TimeUpdated.Seconds, 0)
+ vreplicationLag := time.Since(timeUpdated)
+
+ // MaxVReplicationLag represents the time since we last processed any event
+ // in the workflow.
+ if vreplicationLag.Seconds() > meta.maxVReplicationLag {
+ meta.maxVReplicationLag = vreplicationLag.Seconds()
+ }
+
+ workflow.WorkflowType = res.WorkflowType.String()
+ workflow.WorkflowSubType = res.WorkflowSubType.String()
+ workflow.DeferSecondaryKeys = res.DeferSecondaryKeys
+
+ // MaxVReplicationTransactionLag estimates the actual statement processing lag
+ // between the source and the target. If we are still processing source events it
+ // is the difference b/w current time and the timestamp of the last event. If
+ // heartbeats are more recent than the last event, then the lag is the time since
+ // the last heartbeat as there can be an actual event immediately after the
+ // heartbeat, but which has not yet been processed on the target.
+ // We don't allow switching during the copy phase, so in that case we just return
+ // a large lag. All timestamps are in seconds since epoch.
+ if rstream.TransactionTimestamp == nil {
+ rstream.TransactionTimestamp = &vttimepb.Time{}
+ }
+ lastTransactionTime := rstream.TransactionTimestamp.Seconds
+ if rstream.TimeHeartbeat == nil {
+ rstream.TimeHeartbeat = &vttimepb.Time{}
+ }
+ lastHeartbeatTime := rstream.TimeHeartbeat.Seconds
+ if stream.State == binlogdatapb.VReplicationWorkflowState_Copying.String() {
+ meta.maxVReplicationTransactionLag = math.MaxInt64
+ } else {
+ if lastTransactionTime == 0 /* no new events after copy */ ||
+ lastHeartbeatTime > lastTransactionTime /* no recent transactions, so all caught up */ {
+
+ lastTransactionTime = lastHeartbeatTime
+ }
+ now := time.Now().Unix() /* seconds since epoch */
+ transactionReplicationLag := float64(now - lastTransactionTime)
+ if transactionReplicationLag > meta.maxVReplicationTransactionLag {
+ meta.maxVReplicationTransactionLag = transactionReplicationLag
+ }
+ }
+ }
+
+ return nil
+}
+
+func updateWorkflowWithMetadata(workflow *vtctldatapb.Workflow, meta *workflowMetadata) {
+ workflow.Source = &vtctldatapb.Workflow_ReplicationLocation{
+ Keyspace: meta.sourceKeyspace,
+ Shards: sets.List(meta.sourceShards),
+ }
+
+ workflow.Target = &vtctldatapb.Workflow_ReplicationLocation{
+ Keyspace: meta.targetKeyspace,
+ Shards: sets.List(meta.targetShards),
+ }
+
+ workflow.MaxVReplicationLag = int64(meta.maxVReplicationLag)
+ workflow.MaxVReplicationTransactionLag = int64(meta.maxVReplicationTransactionLag)
+}
+
+func (wf *workflowFetcher) fetchStreamLogs(ctx context.Context, keyspace string, workflow *vtctldatapb.Workflow) {
+ span, ctx := trace.NewSpan(ctx, "workflowFetcher.workflow.fetchStreamLogs")
+ defer span.Finish()
+
+ span.Annotate("keyspace", keyspace)
+ span.Annotate("workflow", workflow.Name)
+
+ vreplIDs := make([]int64, 0, len(workflow.ShardStreams))
+ for _, shardStream := range maps.Values(workflow.ShardStreams) {
+ for _, stream := range shardStream.Streams {
+ vreplIDs = append(vreplIDs, stream.Id)
+ }
+ }
+ idsBV, err := sqltypes.BuildBindVariable(vreplIDs)
+ if err != nil {
+ return
+ }
+
+ query, err := sqlparser.ParseAndBind(vrepLogQuery, idsBV)
+ if err != nil {
+ return
+ }
+
+ vx := vexec.NewVExec(keyspace, workflow.Name, wf.ts, wf.tmc, wf.parser)
+ results, err := vx.QueryContext(ctx, query)
+ if err != nil {
+ // Note that we do not return here. If there are any query results
+ // in the map (i.e. some tablets returned successfully), we will
+ // still try to read log rows from them on a best-effort basis. But,
+ // we will also pre-emptively record the top-level fetch error on
+ // every stream in every shard in the workflow. Further processing
+ // below may override the error message for certain streams.
+ for _, streams := range workflow.ShardStreams {
+ for _, stream := range streams.Streams {
+ stream.LogFetchError = err.Error()
+ }
+ }
+ }
+
+ for target, p3qr := range results {
+ qr := sqltypes.Proto3ToResult(p3qr)
+ shardStreamKey := fmt.Sprintf("%s/%s", target.Shard, target.AliasString())
+
+ ss, ok := workflow.ShardStreams[shardStreamKey]
+ if !ok || ss == nil {
+ continue
+ }
+
+ streams := ss.Streams
+ streamIdx := 0
+ markErrors := func(err error) {
+ if streamIdx >= len(streams) {
+ return
+ }
+
+ streams[streamIdx].LogFetchError = err.Error()
+ }
+
+ for _, row := range qr.Named().Rows {
+ id, err := row["id"].ToCastInt64()
+ if err != nil {
+ markErrors(err)
+ continue
+ }
+
+ streamID, err := row["vrepl_id"].ToCastInt64()
+ if err != nil {
+ markErrors(err)
+ continue
+ }
+
+ typ := row["type"].ToString()
+ state := row["state"].ToString()
+ message := row["message"].ToString()
+
+ createdAt, err := time.Parse("2006-01-02 15:04:05", row["created_at"].ToString())
+ if err != nil {
+ markErrors(err)
+ continue
+ }
+
+ updatedAt, err := time.Parse("2006-01-02 15:04:05", row["updated_at"].ToString())
+ if err != nil {
+ markErrors(err)
+ continue
+ }
+
+ count, err := row["count"].ToCastInt64()
+ if err != nil {
+ markErrors(err)
+ continue
+ }
+
+ streamLog := &vtctldatapb.Workflow_Stream_Log{
+ Id: id,
+ StreamId: streamID,
+ Type: typ,
+ State: state,
+ CreatedAt: &vttimepb.Time{
+ Seconds: createdAt.Unix(),
+ },
+ UpdatedAt: &vttimepb.Time{
+ Seconds: updatedAt.Unix(),
+ },
+ Message: message,
+ Count: count,
+ }
+
+ // Earlier, in buildWorkflows, we sorted each ShardStreams
+ // slice by ascending id, and our _vt.vreplication_log query
+ // ordered by (stream_id ASC, id ASC), so we can walk the
+ // streams in index order in O(n) amortized over all the rows
+ // for this tablet.
+ for streamIdx < len(streams) {
+ stream := streams[streamIdx]
+ if stream.Id < streamLog.StreamId {
+ streamIdx++
+ continue
+ }
+
+ if stream.Id > streamLog.StreamId {
+ wf.logger.Warningf("Found stream log for nonexistent stream: %+v", streamLog)
+ // This can happen on manual/failed workflow cleanup so move to the next log.
+ break
+ }
+
+ // stream.Id == streamLog.StreamId
+ stream.Logs = append(stream.Logs, streamLog)
+ break
+ }
+ }
+ }
+}
+
+func (wf *workflowFetcher) forAllShards(
+ ctx context.Context,
+ keyspace string,
+ shards []string,
+ f func(ctx context.Context, shard *topo.ShardInfo) error,
+) error {
+ eg, egCtx := errgroup.WithContext(ctx)
+ for _, shard := range shards {
+ eg.Go(func() error {
+ si, err := wf.ts.GetShard(ctx, keyspace, shard)
+ if err != nil {
+ return err
+ }
+ if si.PrimaryAlias == nil {
+ return fmt.Errorf("%w %s/%s", vexec.ErrNoShardPrimary, keyspace, shard)
+ }
+
+ if err := f(egCtx, si); err != nil {
+ return err
+ }
+ return nil
+ })
+ }
+ if err := eg.Wait(); err != nil {
+ return err
+ }
+ return nil
+}
+
+func getStreamState(stream *vtctldatapb.Workflow_Stream, rstream *tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream) string {
+ switch {
+ case strings.Contains(strings.ToLower(stream.Message), "error"):
+ return binlogdatapb.VReplicationWorkflowState_Error.String()
+ case stream.State == binlogdatapb.VReplicationWorkflowState_Running.String() && len(stream.CopyStates) > 0:
+ return binlogdatapb.VReplicationWorkflowState_Copying.String()
+ case stream.State == binlogdatapb.VReplicationWorkflowState_Running.String() && int64(time.Now().Second())-rstream.TimeUpdated.Seconds > 10:
+ return binlogdatapb.VReplicationWorkflowState_Lagging.String()
+ }
+ return rstream.State.String()
+}
diff --git a/go/vt/vtctl/workflow/workflows_test.go b/go/vt/vtctl/workflow/workflows_test.go
new file mode 100644
index 00000000000..2015c8d1b7c
--- /dev/null
+++ b/go/vt/vtctl/workflow/workflows_test.go
@@ -0,0 +1,260 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package workflow
+
+import (
+ "context"
+ "fmt"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+
+ "vitess.io/vitess/go/sqltypes"
+ "vitess.io/vitess/go/vt/proto/binlogdata"
+ "vitess.io/vitess/go/vt/proto/vttime"
+ "vitess.io/vitess/go/vt/topo"
+
+ tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata"
+ topodatapb "vitess.io/vitess/go/vt/proto/topodata"
+ vtctldatapb "vitess.io/vitess/go/vt/proto/vtctldata"
+)
+
+func TestGetStreamState(t *testing.T) {
+ testCases := []struct {
+ name string
+ stream *vtctldatapb.Workflow_Stream
+ rstream *tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream
+ want string
+ }{
+ {
+ name: "error state",
+ stream: &vtctldatapb.Workflow_Stream{
+ Message: "test error",
+ },
+ want: "Error",
+ },
+ {
+ name: "copying state",
+ stream: &vtctldatapb.Workflow_Stream{
+ State: "Running",
+ CopyStates: []*vtctldatapb.Workflow_Stream_CopyState{
+ {
+ Table: "table1",
+ },
+ },
+ },
+ want: "Copying",
+ },
+ {
+ name: "lagging state",
+ stream: &vtctldatapb.Workflow_Stream{
+ State: "Running",
+ },
+ rstream: &tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream{
+ TimeUpdated: &vttime.Time{
+ Seconds: int64(time.Now().Second()) - 11,
+ },
+ },
+ want: "Lagging",
+ },
+ {
+ name: "non-running and error free",
+ stream: &vtctldatapb.Workflow_Stream{
+ State: "Stopped",
+ },
+ rstream: &tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream{
+ State: binlogdata.VReplicationWorkflowState_Stopped,
+ },
+ want: "Stopped",
+ },
+ }
+
+ for _, tt := range testCases {
+ t.Run(tt.name, func(t *testing.T) {
+ state := getStreamState(tt.stream, tt.rstream)
+ assert.Equal(t, tt.want, state)
+ })
+ }
+}
+
+func TestGetWorkflowCopyStates(t *testing.T) {
+ ctx := context.Background()
+
+ sourceShards := []string{"-"}
+ targetShards := []string{"-"}
+
+ te := newTestMaterializerEnv(t, ctx, &vtctldatapb.MaterializeSettings{
+ SourceKeyspace: "source_keyspace",
+ TargetKeyspace: "target_keyspace",
+ Workflow: "test_workflow",
+ TableSettings: []*vtctldatapb.TableMaterializeSettings{
+ {
+ TargetTable: "table1",
+ SourceExpression: fmt.Sprintf("select * from %s", "table1"),
+ },
+ {
+ TargetTable: "table2",
+ SourceExpression: fmt.Sprintf("select * from %s", "table2"),
+ },
+ },
+ }, sourceShards, targetShards)
+
+ wf := workflowFetcher{
+ ts: te.ws.ts,
+ tmc: te.tmc,
+ }
+
+ tablet := &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 100,
+ },
+ }
+
+ query := "select vrepl_id, table_name, lastpk from _vt.copy_state where vrepl_id in (1) and id in (select max(id) from _vt.copy_state where vrepl_id in (1) group by vrepl_id, table_name)"
+ te.tmc.expectVRQuery(100, query, sqltypes.MakeTestResult(
+ sqltypes.MakeTestFields("vrepl_id|table_name|lastpk", "int64|varchar|varchar"),
+ "1|table1|2", "1|table2|1",
+ ))
+
+ copyStates, err := wf.getWorkflowCopyStates(ctx, &topo.TabletInfo{
+ Tablet: tablet,
+ }, []int32{1})
+ assert.NoError(t, err)
+ assert.Len(t, copyStates, 2)
+
+ state1 := &vtctldatapb.Workflow_Stream_CopyState{
+ Table: "table1",
+ LastPk: "2",
+ StreamId: 1,
+ }
+ state2 := &vtctldatapb.Workflow_Stream_CopyState{
+ Table: "table2",
+ LastPk: "1",
+ StreamId: 1,
+ }
+ assert.Contains(t, copyStates, state1)
+ assert.Contains(t, copyStates, state2)
+}
+
+func TestFetchCopyStatesByShardStream(t *testing.T) {
+ ctx := context.Background()
+
+ sourceShards := []string{"-"}
+ targetShards := []string{"-"}
+
+ te := newTestMaterializerEnv(t, ctx, &vtctldatapb.MaterializeSettings{
+ SourceKeyspace: "source_keyspace",
+ TargetKeyspace: "target_keyspace",
+ Workflow: "test_workflow",
+ TableSettings: []*vtctldatapb.TableMaterializeSettings{
+ {
+ TargetTable: "table1",
+ SourceExpression: fmt.Sprintf("select * from %s", "table1"),
+ },
+ {
+ TargetTable: "table2",
+ SourceExpression: fmt.Sprintf("select * from %s", "table2"),
+ },
+ },
+ }, sourceShards, targetShards)
+
+ wf := workflowFetcher{
+ ts: te.ws.ts,
+ tmc: te.tmc,
+ }
+
+ tablet := &topodatapb.Tablet{
+ Shard: "-80",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 100,
+ },
+ }
+ tablet2 := &topodatapb.Tablet{
+ Shard: "80-",
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone1",
+ Uid: 101,
+ },
+ }
+
+ query := "select vrepl_id, table_name, lastpk from _vt.copy_state where vrepl_id in (1, 2) and id in (select max(id) from _vt.copy_state where vrepl_id in (1, 2) group by vrepl_id, table_name)"
+ te.tmc.expectVRQuery(100, query, sqltypes.MakeTestResult(
+ sqltypes.MakeTestFields("vrepl_id|table_name|lastpk", "int64|varchar|varchar"),
+ "1|table1|2", "2|table2|1", "2|table1|1",
+ ))
+
+ te.tmc.expectVRQuery(101, query, sqltypes.MakeTestResult(
+ sqltypes.MakeTestFields("vrepl_id|table_name|lastpk", "int64|varchar|varchar"),
+ "1|table1|2", "1|table2|1",
+ ))
+
+ ti := &topo.TabletInfo{
+ Tablet: tablet,
+ }
+ ti2 := &topo.TabletInfo{
+ Tablet: tablet2,
+ }
+
+ readVReplicationResponse := map[*topo.TabletInfo]*tabletmanagerdatapb.ReadVReplicationWorkflowsResponse{
+ ti: {
+ Workflows: []*tabletmanagerdatapb.ReadVReplicationWorkflowResponse{
+ {
+ Streams: []*tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream{
+ {
+ Id: 1,
+ }, {
+ Id: 2,
+ },
+ },
+ },
+ },
+ },
+ ti2: {
+ Workflows: []*tabletmanagerdatapb.ReadVReplicationWorkflowResponse{
+ {
+ Streams: []*tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream{
+ {
+ Id: 1,
+ }, {
+ Id: 2,
+ },
+ },
+ },
+ },
+ },
+ }
+ copyStatesByStreamId, err := wf.fetchCopyStatesByShardStream(ctx, readVReplicationResponse)
+ assert.NoError(t, err)
+
+ copyStates1 := copyStatesByStreamId["-80/1"]
+ copyStates2 := copyStatesByStreamId["-80/2"]
+ copyStates3 := copyStatesByStreamId["80-/1"]
+
+ require.NotNil(t, copyStates1)
+ require.NotNil(t, copyStates2)
+ require.NotNil(t, copyStates3)
+
+ assert.Len(t, copyStates1, 1)
+ assert.Len(t, copyStates2, 2)
+ assert.Len(t, copyStates3, 2)
+
+ assert.Nil(t, copyStatesByStreamId["80-/2"])
+}
diff --git a/go/vt/vtenv/vtenv.go b/go/vt/vtenv/vtenv.go
index 1371affff52..6218c96c715 100644
--- a/go/vt/vtenv/vtenv.go
+++ b/go/vt/vtenv/vtenv.go
@@ -67,6 +67,12 @@ func NewTestEnv() *Environment {
}
}
+func NewLegacyTestEnv() *Environment {
+ env := NewTestEnv()
+ env.mysqlVersion = config.LegacyMySQLVersion
+ return env
+}
+
func (e *Environment) CollationEnv() *collations.Environment {
return e.collationEnv
}
diff --git a/go/vt/vtexplain/vtexplain_vtgate.go b/go/vt/vtexplain/vtexplain_vtgate.go
index d511e2d2ea0..f9ae8be3820 100644
--- a/go/vt/vtexplain/vtexplain_vtgate.go
+++ b/go/vt/vtexplain/vtexplain_vtgate.go
@@ -38,6 +38,7 @@ import (
"vitess.io/vitess/go/vt/vterrors"
"vitess.io/vitess/go/vt/vtgate"
"vitess.io/vitess/go/vt/vtgate/engine"
+ econtext "vitess.io/vitess/go/vt/vtgate/executorcontext"
"vitess.io/vitess/go/vt/vtgate/logstats"
"vitess.io/vitess/go/vt/vtgate/vindexes"
"vitess.io/vitess/go/vt/vttablet/queryservice"
@@ -235,7 +236,7 @@ func (vte *VTExplain) vtgateExecute(sql string) ([]*engine.Plan, map[string]*Tab
// This will ensure that the commit/rollback order is predictable.
vte.sortShardSession()
- _, err := vte.vtgateExecutor.Execute(context.Background(), nil, "VtexplainExecute", vtgate.NewSafeSession(vte.vtgateSession), sql, nil)
+ _, err := vte.vtgateExecutor.Execute(context.Background(), nil, "VtexplainExecute", econtext.NewSafeSession(vte.vtgateSession), sql, nil)
if err != nil {
for _, tc := range vte.explainTopo.TabletConns {
tc.tabletQueries = nil
diff --git a/go/vt/vtexplain/vtexplain_vttablet.go b/go/vt/vtexplain/vtexplain_vttablet.go
index ed977e7bcb0..65cd1a96181 100644
--- a/go/vt/vtexplain/vtexplain_vttablet.go
+++ b/go/vt/vtexplain/vtexplain_vttablet.go
@@ -22,6 +22,7 @@ import (
"reflect"
"strings"
"sync"
+ "time"
"vitess.io/vitess/go/stats"
"vitess.io/vitess/go/vt/sidecardb"
@@ -113,8 +114,7 @@ func (vte *VTExplain) newTablet(ctx context.Context, env *vtenv.Environment, opt
config := tabletenv.NewCurrentConfig()
config.TrackSchemaVersions = false
if opts.ExecutionMode == ModeTwoPC {
- config.TwoPCAbandonAge = 1.0
- config.TwoPCEnable = true
+ config.TwoPCAbandonAge = 1 * time.Second
}
config.EnableOnlineDDL = false
config.EnableTableGC = false
@@ -232,7 +232,7 @@ func (t *explainTablet) CreateTransaction(ctx context.Context, target *querypb.T
}
// StartCommit is part of the QueryService interface.
-func (t *explainTablet) StartCommit(ctx context.Context, target *querypb.Target, transactionID int64, dtid string) (err error) {
+func (t *explainTablet) StartCommit(ctx context.Context, target *querypb.Target, transactionID int64, dtid string) (state querypb.StartCommitState, err error) {
t.mu.Lock()
t.currentTime = t.vte.batchTime.Wait()
t.mu.Unlock()
@@ -430,6 +430,7 @@ func newTabletEnvironment(ddls []sqlparser.DDLStatement, opts *Options, collatio
showTableRows := make([][]sqltypes.Value, 0, len(ddls))
showTableWithSizesRows := make([][]sqltypes.Value, 0, len(ddls))
+ innodbTableSizesRows := make([][]sqltypes.Value, 0, len(ddls))
for _, ddl := range ddls {
table := ddl.GetTable().Name.String()
@@ -455,9 +456,9 @@ func newTabletEnvironment(ddls []sqlparser.DDLStatement, opts *Options, collatio
Fields: mysql.BaseShowTablesWithSizesFields,
Rows: showTableWithSizesRows,
})
- tEnv.addResult(mysql.TablesWithSize80, &sqltypes.Result{
- Fields: mysql.BaseShowTablesWithSizesFields,
- Rows: showTableWithSizesRows,
+ tEnv.addResult(mysql.InnoDBTableSizes, &sqltypes.Result{
+ Fields: mysql.BaseInnoDBTableSizesFields,
+ Rows: innodbTableSizesRows,
})
indexRows := make([][]sqltypes.Value, 0, 4)
diff --git a/go/vt/vtgate/autocommit_test.go b/go/vt/vtgate/autocommit_test.go
index 1ba99c01ef2..2e65cefbabe 100644
--- a/go/vt/vtgate/autocommit_test.go
+++ b/go/vt/vtgate/autocommit_test.go
@@ -23,10 +23,10 @@ import (
"github.com/stretchr/testify/require"
"vitess.io/vitess/go/sqltypes"
-
querypb "vitess.io/vitess/go/vt/proto/query"
vtgatepb "vitess.io/vitess/go/vt/proto/vtgate"
vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc"
+ econtext "vitess.io/vitess/go/vt/vtgate/executorcontext"
)
// This file contains tests for all the autocommit code paths
@@ -382,7 +382,7 @@ func TestAutocommitTransactionStarted(t *testing.T) {
// single shard query - no savepoint needed
sql := "update `user` set a = 2 where id = 1"
- _, err := executor.Execute(context.Background(), nil, "TestExecute", NewSafeSession(session), sql, map[string]*querypb.BindVariable{})
+ _, err := executor.Execute(context.Background(), nil, "TestExecute", econtext.NewSafeSession(session), sql, map[string]*querypb.BindVariable{})
require.NoError(t, err)
require.Len(t, sbc1.Queries, 1)
require.Equal(t, sql, sbc1.Queries[0].Sql)
@@ -394,7 +394,7 @@ func TestAutocommitTransactionStarted(t *testing.T) {
// multi shard query - savepoint needed
sql = "update `user` set a = 2 where id in (1, 4)"
expectedSql := "update `user` set a = 2 where id in ::__vals"
- _, err = executor.Execute(context.Background(), nil, "TestExecute", NewSafeSession(session), sql, map[string]*querypb.BindVariable{})
+ _, err = executor.Execute(context.Background(), nil, "TestExecute", econtext.NewSafeSession(session), sql, map[string]*querypb.BindVariable{})
require.NoError(t, err)
require.Len(t, sbc1.Queries, 2)
require.Contains(t, sbc1.Queries[0].Sql, "savepoint")
@@ -413,7 +413,7 @@ func TestAutocommitDirectTarget(t *testing.T) {
}
sql := "insert into `simple`(val) values ('val')"
- _, err := executor.Execute(context.Background(), nil, "TestExecute", NewSafeSession(session), sql, map[string]*querypb.BindVariable{})
+ _, err := executor.Execute(context.Background(), nil, "TestExecute", econtext.NewSafeSession(session), sql, map[string]*querypb.BindVariable{})
require.NoError(t, err)
assertQueries(t, sbclookup, []*querypb.BoundQuery{{
@@ -434,7 +434,7 @@ func TestAutocommitDirectRangeTarget(t *testing.T) {
}
sql := "delete from sharded_user_msgs limit 1000"
- _, err := executor.Execute(context.Background(), nil, "TestExecute", NewSafeSession(session), sql, map[string]*querypb.BindVariable{})
+ _, err := executor.Execute(context.Background(), nil, "TestExecute", econtext.NewSafeSession(session), sql, map[string]*querypb.BindVariable{})
require.NoError(t, err)
assertQueries(t, sbc1, []*querypb.BoundQuery{{
@@ -451,5 +451,5 @@ func autocommitExec(executor *Executor, sql string) (*sqltypes.Result, error) {
TransactionMode: vtgatepb.TransactionMode_MULTI,
}
- return executor.Execute(context.Background(), nil, "TestExecute", NewSafeSession(session), sql, map[string]*querypb.BindVariable{})
+ return executor.Execute(context.Background(), nil, "TestExecute", econtext.NewSafeSession(session), sql, map[string]*querypb.BindVariable{})
}
diff --git a/go/vt/vtgate/buffer/buffer.go b/go/vt/vtgate/buffer/buffer.go
index 260fb272544..eb937a6361c 100644
--- a/go/vt/vtgate/buffer/buffer.go
+++ b/go/vt/vtgate/buffer/buffer.go
@@ -94,6 +94,18 @@ func CausedByFailover(err error) bool {
return isFailover
}
+// isErrorDueToReparenting is a stronger check than CausedByFailover, meant to return
+// if the failure is caused because of a reparent.
+func isErrorDueToReparenting(err error) bool {
+ if vterrors.Code(err) != vtrpcpb.Code_CLUSTER_EVENT {
+ return false
+ }
+ if strings.Contains(err.Error(), ClusterEventReshardingInProgress) {
+ return false
+ }
+ return true
+}
+
// for debugging purposes
func getReason(err error) string {
for _, ce := range ClusterEvents {
@@ -175,7 +187,7 @@ func (b *Buffer) GetConfig() *Config {
// It returns an error if buffering failed (e.g. buffer full).
// If it does not return an error, it may return a RetryDoneFunc which must be
// called after the request was retried.
-func (b *Buffer) WaitForFailoverEnd(ctx context.Context, keyspace, shard string, err error) (RetryDoneFunc, error) {
+func (b *Buffer) WaitForFailoverEnd(ctx context.Context, keyspace, shard string, kev *discovery.KeyspaceEventWatcher, err error) (RetryDoneFunc, error) {
// If an err is given, it must be related to a failover.
// We never buffer requests with other errors.
if err != nil && !CausedByFailover(err) {
@@ -192,10 +204,11 @@ func (b *Buffer) WaitForFailoverEnd(ctx context.Context, keyspace, shard string,
requestsSkipped.Add([]string{keyspace, shard, skippedDisabled}, 1)
return nil, nil
}
- return sb.waitForFailoverEnd(ctx, keyspace, shard, err)
+ return sb.waitForFailoverEnd(ctx, keyspace, shard, kev, err)
}
func (b *Buffer) HandleKeyspaceEvent(ksevent *discovery.KeyspaceEvent) {
+ log.Infof("Keyspace Event received for keyspace %v", ksevent.Keyspace)
for _, shard := range ksevent.Shards {
sb := b.getOrCreateBuffer(shard.Target.Keyspace, shard.Target.Shard)
if sb != nil {
diff --git a/go/vt/vtgate/buffer/buffer_helper_test.go b/go/vt/vtgate/buffer/buffer_helper_test.go
index 2deb460fc39..1276f0cd751 100644
--- a/go/vt/vtgate/buffer/buffer_helper_test.go
+++ b/go/vt/vtgate/buffer/buffer_helper_test.go
@@ -50,7 +50,7 @@ func issueRequestAndBlockRetry(ctx context.Context, t *testing.T, b *Buffer, err
bufferingStopped := make(chan error)
go func() {
- retryDone, err := b.WaitForFailoverEnd(ctx, keyspace, shard, failoverErr)
+ retryDone, err := b.WaitForFailoverEnd(ctx, keyspace, shard, nil, failoverErr)
if err != nil {
bufferingStopped <- err
}
diff --git a/go/vt/vtgate/buffer/buffer_test.go b/go/vt/vtgate/buffer/buffer_test.go
index c730a8336d1..fc326ce0ce5 100644
--- a/go/vt/vtgate/buffer/buffer_test.go
+++ b/go/vt/vtgate/buffer/buffer_test.go
@@ -72,6 +72,32 @@ var (
}
)
+func TestIsErrorDueToReparenting(t *testing.T) {
+ testcases := []struct {
+ err error
+ want bool
+ }{
+ {
+ err: vterrors.Errorf(vtrpcpb.Code_CLUSTER_EVENT, ClusterEventReshardingInProgress),
+ want: false,
+ },
+ {
+ err: vterrors.Errorf(vtrpcpb.Code_CLUSTER_EVENT, ClusterEventReparentInProgress),
+ want: true,
+ },
+ {
+ err: vterrors.Errorf(vtrpcpb.Code_CLUSTER_EVENT, "The MySQL server is running with the --super-read-only option"),
+ want: true,
+ },
+ }
+ for _, tt := range testcases {
+ t.Run(tt.err.Error(), func(t *testing.T) {
+ got := isErrorDueToReparenting(tt.err)
+ assert.Equal(t, tt.want, got)
+ })
+ }
+}
+
func TestBuffering(t *testing.T) {
testAllImplementations(t, func(t *testing.T, fail failover) {
testBuffering1WithOptions(t, fail, 1)
@@ -120,7 +146,7 @@ func testBuffering1WithOptions(t *testing.T, fail failover, concurrency int) {
}
// Subsequent requests with errors not related to the failover are not buffered.
- if retryDone, err := b.WaitForFailoverEnd(context.Background(), keyspace, shard, nonFailoverErr); err != nil || retryDone != nil {
+ if retryDone, err := b.WaitForFailoverEnd(context.Background(), keyspace, shard, nil, nonFailoverErr); err != nil || retryDone != nil {
t.Fatalf("requests with non-failover errors must never be buffered. err: %v retryDone: %v", err, retryDone)
}
@@ -168,7 +194,7 @@ func testBuffering1WithOptions(t *testing.T, fail failover, concurrency int) {
}
// Second failover: Buffering is skipped because last failover is too recent.
- if retryDone, err := b.WaitForFailoverEnd(context.Background(), keyspace, shard, failoverErr); err != nil || retryDone != nil {
+ if retryDone, err := b.WaitForFailoverEnd(context.Background(), keyspace, shard, nil, failoverErr); err != nil || retryDone != nil {
t.Fatalf("subsequent failovers must be skipped due to -buffer_min_time_between_failovers setting. err: %v retryDone: %v", err, retryDone)
}
if got, want := requestsSkipped.Counts()[statsKeyJoinedLastFailoverTooRecent], int64(1); got != want {
@@ -226,7 +252,7 @@ func testDryRun1(t *testing.T, fail failover) {
b := New(cfg)
// Request does not get buffered.
- if retryDone, err := b.WaitForFailoverEnd(context.Background(), keyspace, shard, failoverErr); err != nil || retryDone != nil {
+ if retryDone, err := b.WaitForFailoverEnd(context.Background(), keyspace, shard, nil, failoverErr); err != nil || retryDone != nil {
t.Fatalf("requests must not be buffered during dry-run. err: %v retryDone: %v", err, retryDone)
}
// But the internal state changes though.
@@ -272,10 +298,10 @@ func testPassthrough1(t *testing.T, fail failover) {
b := New(cfg)
- if retryDone, err := b.WaitForFailoverEnd(context.Background(), keyspace, shard, nil); err != nil || retryDone != nil {
+ if retryDone, err := b.WaitForFailoverEnd(context.Background(), keyspace, shard, nil, nil); err != nil || retryDone != nil {
t.Fatalf("requests with no error must never be buffered. err: %v retryDone: %v", err, retryDone)
}
- if retryDone, err := b.WaitForFailoverEnd(context.Background(), keyspace, shard, nonFailoverErr); err != nil || retryDone != nil {
+ if retryDone, err := b.WaitForFailoverEnd(context.Background(), keyspace, shard, nil, nonFailoverErr); err != nil || retryDone != nil {
t.Fatalf("requests with non-failover errors must never be buffered. err: %v retryDone: %v", err, retryDone)
}
@@ -311,7 +337,7 @@ func testLastReparentTooRecentBufferingSkipped1(t *testing.T, fail failover) {
now = now.Add(1 * time.Second)
fail(b, newPrimary, keyspace, shard, now)
- if retryDone, err := b.WaitForFailoverEnd(context.Background(), keyspace, shard, failoverErr); err != nil || retryDone != nil {
+ if retryDone, err := b.WaitForFailoverEnd(context.Background(), keyspace, shard, nil, failoverErr); err != nil || retryDone != nil {
t.Fatalf("requests where the failover end was recently detected before the start must not be buffered. err: %v retryDone: %v", err, retryDone)
}
if err := waitForPoolSlots(b, cfg.Size); err != nil {
@@ -408,10 +434,10 @@ func testPassthroughDuringDrain1(t *testing.T, fail failover) {
}
// Requests during the drain will be passed through and not buffered.
- if retryDone, err := b.WaitForFailoverEnd(context.Background(), keyspace, shard, nil); err != nil || retryDone != nil {
+ if retryDone, err := b.WaitForFailoverEnd(context.Background(), keyspace, shard, nil, nil); err != nil || retryDone != nil {
t.Fatalf("requests with no error must not be buffered during a drain. err: %v retryDone: %v", err, retryDone)
}
- if retryDone, err := b.WaitForFailoverEnd(context.Background(), keyspace, shard, failoverErr); err != nil || retryDone != nil {
+ if retryDone, err := b.WaitForFailoverEnd(context.Background(), keyspace, shard, nil, failoverErr); err != nil || retryDone != nil {
t.Fatalf("requests with failover errors must not be buffered during a drain. err: %v retryDone: %v", err, retryDone)
}
@@ -443,7 +469,7 @@ func testPassthroughIgnoredKeyspaceOrShard1(t *testing.T, fail failover) {
b := New(cfg)
ignoredKeyspace := "ignored_ks"
- if retryDone, err := b.WaitForFailoverEnd(context.Background(), ignoredKeyspace, shard, failoverErr); err != nil || retryDone != nil {
+ if retryDone, err := b.WaitForFailoverEnd(context.Background(), ignoredKeyspace, shard, nil, failoverErr); err != nil || retryDone != nil {
t.Fatalf("requests for ignored keyspaces must not be buffered. err: %v retryDone: %v", err, retryDone)
}
statsKeyJoined := strings.Join([]string{ignoredKeyspace, shard, skippedDisabled}, ".")
@@ -452,7 +478,7 @@ func testPassthroughIgnoredKeyspaceOrShard1(t *testing.T, fail failover) {
}
ignoredShard := "ff-"
- if retryDone, err := b.WaitForFailoverEnd(context.Background(), keyspace, ignoredShard, failoverErr); err != nil || retryDone != nil {
+ if retryDone, err := b.WaitForFailoverEnd(context.Background(), keyspace, ignoredShard, nil, failoverErr); err != nil || retryDone != nil {
t.Fatalf("requests for ignored shards must not be buffered. err: %v retryDone: %v", err, retryDone)
}
if err := waitForPoolSlots(b, cfg.Size); err != nil {
@@ -634,7 +660,7 @@ func testEvictionNotPossible1(t *testing.T, fail failover) {
// Newer requests of the second failover cannot evict anything because
// they have no entries buffered.
- retryDone, bufferErr := b.WaitForFailoverEnd(context.Background(), keyspace, shard2, failoverErr)
+ retryDone, bufferErr := b.WaitForFailoverEnd(context.Background(), keyspace, shard2, nil, failoverErr)
if bufferErr == nil || retryDone != nil {
t.Fatalf("buffer should have returned an error because it's full: err: %v retryDone: %v", bufferErr, retryDone)
}
diff --git a/go/vt/vtgate/buffer/shard_buffer.go b/go/vt/vtgate/buffer/shard_buffer.go
index b0764c2ad91..66c6ee702e6 100644
--- a/go/vt/vtgate/buffer/shard_buffer.go
+++ b/go/vt/vtgate/buffer/shard_buffer.go
@@ -137,7 +137,7 @@ func (sb *shardBuffer) disabled() bool {
return sb.mode == bufferModeDisabled
}
-func (sb *shardBuffer) waitForFailoverEnd(ctx context.Context, keyspace, shard string, err error) (RetryDoneFunc, error) {
+func (sb *shardBuffer) waitForFailoverEnd(ctx context.Context, keyspace, shard string, kev *discovery.KeyspaceEventWatcher, err error) (RetryDoneFunc, error) {
// We assume if err != nil then it's always caused by a failover.
// Other errors must be filtered at higher layers.
failoverDetected := err != nil
@@ -211,7 +211,11 @@ func (sb *shardBuffer) waitForFailoverEnd(ctx context.Context, keyspace, shard s
return nil, nil
}
- sb.startBufferingLocked(err)
+ // Try to start buffering. If we're unsuccessful, then we exit early.
+ if !sb.startBufferingLocked(ctx, kev, err) {
+ sb.mu.Unlock()
+ return nil, nil
+ }
}
if sb.mode == bufferModeDryRun {
@@ -255,7 +259,16 @@ func (sb *shardBuffer) shouldBufferLocked(failoverDetected bool) bool {
panic("BUG: All possible states must be covered by the switch expression above.")
}
-func (sb *shardBuffer) startBufferingLocked(err error) {
+func (sb *shardBuffer) startBufferingLocked(ctx context.Context, kev *discovery.KeyspaceEventWatcher, err error) bool {
+ if kev != nil {
+ if !kev.MarkShardNotServing(ctx, sb.keyspace, sb.shard, isErrorDueToReparenting(err)) {
+ // We failed to mark the shard as not serving. Do not buffer the request.
+ // This can happen if the keyspace has been deleted or if the keyspace even watcher
+ // hasn't yet seen the shard. Keyspace event watcher might not stop buffering for this
+ // request at all until it times out. It's better to not buffer this request.
+ return false
+ }
+ }
// Reset monitoring data from previous failover.
lastRequestsInFlightMax.Set(sb.statsKey, 0)
lastRequestsDryRunMax.Set(sb.statsKey, 0)
@@ -273,7 +286,7 @@ func (sb *shardBuffer) startBufferingLocked(err error) {
msg = "Dry-run: Would have started buffering"
}
starts.Add(sb.statsKey, 1)
- log.Infof("%v for shard: %s (window: %v, size: %v, max failover duration: %v) (A failover was detected by this seen error: %v.)",
+ log.V(2).Infof("%v for shard: %s (window: %v, size: %v, max failover duration: %v) (A failover was detected by this seen error: %v.)",
msg,
topoproto.KeyspaceShardString(sb.keyspace, sb.shard),
sb.buf.config.Window,
@@ -281,6 +294,7 @@ func (sb *shardBuffer) startBufferingLocked(err error) {
sb.buf.config.MaxFailoverDuration,
errorsanitizer.NormalizeError(err.Error()),
)
+ return true
}
// logErrorIfStateNotLocked logs an error if the current state is not "state".
@@ -474,7 +488,7 @@ func (sb *shardBuffer) recordKeyspaceEvent(alias *topodatapb.TabletAlias, stillS
sb.mu.Lock()
defer sb.mu.Unlock()
- log.Infof("disruption in shard %s/%s resolved (serving: %v), movetable state %#v",
+ log.V(2).Infof("disruption in shard %s/%s resolved (serving: %v), movetable state %#v",
sb.keyspace, sb.shard, stillServing, keyspaceEvent.MoveTablesState)
if !topoproto.TabletAliasEqual(alias, sb.currentPrimary) {
@@ -548,7 +562,7 @@ func (sb *shardBuffer) stopBufferingLocked(reason stopReason, details string) {
if sb.mode == bufferModeDryRun {
msg = "Dry-run: Would have stopped buffering"
}
- log.Infof("%v for shard: %s after: %.1f seconds due to: %v. Draining %d buffered requests now.",
+ log.V(2).Infof("%v for shard: %s after: %.1f seconds due to: %v. Draining %d buffered requests now.",
msg, topoproto.KeyspaceShardString(sb.keyspace, sb.shard), d.Seconds(), details, len(q))
var clientEntryError error
@@ -608,7 +622,7 @@ func (sb *shardBuffer) drain(q []*entry, err error) {
wg.Wait()
d := sb.timeNow().Sub(start)
- log.Infof("Draining finished for shard: %s Took: %v for: %d requests.", topoproto.KeyspaceShardString(sb.keyspace, sb.shard), d, len(q))
+ log.V(2).Infof("Draining finished for shard: %s Took: %v for: %d requests.", topoproto.KeyspaceShardString(sb.keyspace, sb.shard), d, len(q))
requestsDrained.Add(sb.statsKey, int64(len(q)))
// Draining is done. Change state from "draining" to "idle".
diff --git a/go/vt/vtgate/buffer/variables_test.go b/go/vt/vtgate/buffer/variables_test.go
index a0640bde9e4..30d2426c639 100644
--- a/go/vt/vtgate/buffer/variables_test.go
+++ b/go/vt/vtgate/buffer/variables_test.go
@@ -51,7 +51,7 @@ func TestVariablesAreInitialized(t *testing.T) {
// Create a new buffer and make a call which will create the shardBuffer object.
// After that, the variables should be initialized for that shard.
b := New(NewDefaultConfig())
- _, err := b.WaitForFailoverEnd(context.Background(), "init_test", "0", nil /* err */)
+ _, err := b.WaitForFailoverEnd(context.Background(), "init_test", "0", nil, nil)
if err != nil {
t.Fatalf("buffer should just passthrough and not return an error: %v", err)
}
diff --git a/go/vt/vtgate/debugenv.go b/go/vt/vtgate/debugenv.go
index 4fa989c69a3..7213353432d 100644
--- a/go/vt/vtgate/debugenv.go
+++ b/go/vt/vtgate/debugenv.go
@@ -22,9 +22,10 @@ import (
"html"
"net/http"
"strconv"
- "text/template"
"time"
+ "github.com/google/safehtml/template"
+
"vitess.io/vitess/go/acl"
"vitess.io/vitess/go/vt/discovery"
"vitess.io/vitess/go/vt/log"
diff --git a/go/vt/vtgate/dynamicconfig/config.go b/go/vt/vtgate/dynamicconfig/config.go
new file mode 100644
index 00000000000..5bb1d991eae
--- /dev/null
+++ b/go/vt/vtgate/dynamicconfig/config.go
@@ -0,0 +1,6 @@
+package dynamicconfig
+
+type DDL interface {
+ OnlineEnabled() bool
+ DirectEnabled() bool
+}
diff --git a/go/vt/vtgate/engine/cached_size.go b/go/vt/vtgate/engine/cached_size.go
index 4c0d1009bd1..c764a6aab08 100644
--- a/go/vt/vtgate/engine/cached_size.go
+++ b/go/vt/vtgate/engine/cached_size.go
@@ -131,7 +131,7 @@ func (cached *DDL) CachedSize(alloc bool) int64 {
}
size := int64(0)
if alloc {
- size += int64(64)
+ size += int64(80)
}
// field Keyspace *vitess.io/vitess/go/vt/vtgate/vindexes.Keyspace
size += cached.Keyspace.CachedSize(true)
@@ -145,6 +145,10 @@ func (cached *DDL) CachedSize(alloc bool) int64 {
size += cached.NormalDDL.CachedSize(true)
// field OnlineDDL *vitess.io/vitess/go/vt/vtgate/engine.OnlineDDL
size += cached.OnlineDDL.CachedSize(true)
+ // field Config vitess.io/vitess/go/vt/vtgate/dynamicconfig.DDL
+ if cc, ok := cached.Config.(cachedObject); ok {
+ size += cc.CachedSize(true)
+ }
return size
}
func (cached *DML) CachedSize(alloc bool) int64 {
diff --git a/go/vt/vtgate/engine/ddl.go b/go/vt/vtgate/engine/ddl.go
index cfdaa5866dc..d7e17eb4f4f 100644
--- a/go/vt/vtgate/engine/ddl.go
+++ b/go/vt/vtgate/engine/ddl.go
@@ -25,6 +25,7 @@ import (
"vitess.io/vitess/go/vt/schema"
"vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/vterrors"
+ "vitess.io/vitess/go/vt/vtgate/dynamicconfig"
"vitess.io/vitess/go/vt/vtgate/vindexes"
)
@@ -42,8 +43,7 @@ type DDL struct {
NormalDDL *Send
OnlineDDL *OnlineDDL
- DirectDDLEnabled bool
- OnlineDDLEnabled bool
+ Config dynamicconfig.DDL
CreateTempTable bool
}
@@ -107,12 +107,12 @@ func (ddl *DDL) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[st
switch {
case ddl.isOnlineSchemaDDL():
- if !ddl.OnlineDDLEnabled {
+ if !ddl.Config.OnlineEnabled() {
return nil, schema.ErrOnlineDDLDisabled
}
return vcursor.ExecutePrimitive(ctx, ddl.OnlineDDL, bindVars, wantfields)
default: // non online-ddl
- if !ddl.DirectDDLEnabled {
+ if !ddl.Config.DirectEnabled() {
return nil, schema.ErrDirectDDLDisabled
}
return vcursor.ExecutePrimitive(ctx, ddl.NormalDDL, bindVars, wantfields)
diff --git a/go/vt/vtgate/engine/ddl_test.go b/go/vt/vtgate/engine/ddl_test.go
index 3f7ccb75f70..1d52089bf39 100644
--- a/go/vt/vtgate/engine/ddl_test.go
+++ b/go/vt/vtgate/engine/ddl_test.go
@@ -27,13 +27,23 @@ import (
"vitess.io/vitess/go/vt/vtgate/vindexes"
)
+type ddlConfig struct{}
+
+func (ddlConfig) DirectEnabled() bool {
+ return true
+}
+
+func (ddlConfig) OnlineEnabled() bool {
+ return true
+}
+
func TestDDL(t *testing.T) {
ddl := &DDL{
DDL: &sqlparser.CreateTable{
Table: sqlparser.NewTableName("a"),
},
- DirectDDLEnabled: true,
- OnlineDDL: &OnlineDDL{},
+ Config: ddlConfig{},
+ OnlineDDL: &OnlineDDL{},
NormalDDL: &Send{
Keyspace: &vindexes.Keyspace{
Name: "ks",
diff --git a/go/vt/vtgate/engine/fake_vcursor_test.go b/go/vt/vtgate/engine/fake_vcursor_test.go
index f0b11b7a3ac..9ba4fdc6a6b 100644
--- a/go/vt/vtgate/engine/fake_vcursor_test.go
+++ b/go/vt/vtgate/engine/fake_vcursor_test.go
@@ -445,9 +445,10 @@ type loggingVCursor struct {
parser *sqlparser.Parser
- handleMirrorClonesFn func(context.Context) VCursor
+ onMirrorClonesFn func(context.Context) VCursor
onExecuteMultiShardFn func(context.Context, Primitive, []*srvtopo.ResolvedShard, []*querypb.BoundQuery, bool, bool)
onStreamExecuteMultiFn func(context.Context, Primitive, string, []*srvtopo.ResolvedShard, []map[string]*querypb.BindVariable, bool, bool, func(*sqltypes.Result) error)
+ onRecordMirrorStatsFn func(time.Duration, time.Duration, error)
}
func (f *loggingVCursor) HasCreatedTempTable() {
@@ -564,8 +565,8 @@ func (f *loggingVCursor) CloneForReplicaWarming(ctx context.Context) VCursor {
}
func (f *loggingVCursor) CloneForMirroring(ctx context.Context) VCursor {
- if f.handleMirrorClonesFn != nil {
- return f.handleMirrorClonesFn(ctx)
+ if f.onMirrorClonesFn != nil {
+ return f.onMirrorClonesFn(ctx)
}
panic("no mirror clones available")
}
@@ -886,6 +887,12 @@ func (t *loggingVCursor) SQLParser() *sqlparser.Parser {
return t.parser
}
+func (t *loggingVCursor) RecordMirrorStats(sourceExecTime, targetExecTime time.Duration, targetErr error) {
+ if t.onRecordMirrorStatsFn != nil {
+ t.onRecordMirrorStatsFn(sourceExecTime, targetExecTime, targetErr)
+ }
+}
+
func (t *noopVCursor) VExplainLogging() {}
func (t *noopVCursor) DisableLogging() {}
func (t *noopVCursor) GetVExplainLogs() []ExecuteEntry {
@@ -896,6 +903,10 @@ func (t *noopVCursor) GetLogs() ([]ExecuteEntry, error) {
return nil, nil
}
+// RecordMirrorStats implements VCursor.
+func (t *noopVCursor) RecordMirrorStats(sourceExecTime, targetExecTime time.Duration, targetErr error) {
+}
+
func expectResult(t *testing.T, result, want *sqltypes.Result) {
t.Helper()
fieldsResult := fmt.Sprintf("%v", result.Fields)
diff --git a/go/vt/vtgate/engine/mirror.go b/go/vt/vtgate/engine/mirror.go
index 89e70ebd695..6396e4b33ec 100644
--- a/go/vt/vtgate/engine/mirror.go
+++ b/go/vt/vtgate/engine/mirror.go
@@ -23,8 +23,12 @@ import (
"vitess.io/vitess/go/sqltypes"
querypb "vitess.io/vitess/go/vt/proto/query"
+ "vitess.io/vitess/go/vt/proto/vtrpc"
+ "vitess.io/vitess/go/vt/vterrors"
)
+var errMirrorTargetQueryTookTooLong = vterrors.Errorf(vtrpc.Code_ABORTED, "Mirror target query took too long")
+
type (
// percentBasedMirror represents the instructions to execute an
// authoritative primitive and, based on whether a die-roll exceeds a
@@ -34,6 +38,11 @@ type (
primitive Primitive
target Primitive
}
+
+ mirrorResult struct {
+ execTime time.Duration
+ err error
+ }
)
const (
@@ -74,26 +83,44 @@ func (m *percentBasedMirror) TryExecute(ctx context.Context, vcursor VCursor, bi
return vcursor.ExecutePrimitive(ctx, m.primitive, bindVars, wantfields)
}
- mirrorCh := make(chan any)
- mirrorCtx, mirrorCtxCancel := context.WithTimeout(ctx, maxMirrorTargetLag)
+ mirrorCh := make(chan mirrorResult, 1)
+ mirrorCtx, mirrorCtxCancel := context.WithCancel(ctx)
defer mirrorCtxCancel()
go func() {
- defer close(mirrorCh)
mirrorVCursor := vcursor.CloneForMirroring(mirrorCtx)
- // TODO(maxeng) handle error.
- _, _ = mirrorVCursor.ExecutePrimitive(mirrorCtx, m.target, bindVars, wantfields)
+ targetStartTime := time.Now()
+ _, targetErr := mirrorVCursor.ExecutePrimitive(mirrorCtx, m.target, bindVars, wantfields)
+ mirrorCh <- mirrorResult{
+ execTime: time.Since(targetStartTime),
+ err: targetErr,
+ }
}()
+ var (
+ sourceExecTime, targetExecTime time.Duration
+ targetErr error
+ )
+
+ sourceStartTime := time.Now()
r, err := vcursor.ExecutePrimitive(ctx, m.primitive, bindVars, wantfields)
+ sourceExecTime = time.Since(sourceStartTime)
+ // Cancel the mirror context if it continues executing too long.
select {
- case <-mirrorCh:
- // Mirroring completed within the allowed time.
- case <-mirrorCtx.Done():
- // Mirroring took too long and was canceled.
+ case r := <-mirrorCh:
+ // Mirror target finished on time.
+ targetExecTime = r.execTime
+ targetErr = r.err
+ case <-time.After(maxMirrorTargetLag):
+ // Mirror target took too long.
+ mirrorCtxCancel()
+ targetExecTime = sourceExecTime + maxMirrorTargetLag
+ targetErr = errMirrorTargetQueryTookTooLong
}
+ vcursor.RecordMirrorStats(sourceExecTime, targetExecTime, targetErr)
+
return r, err
}
@@ -102,30 +129,46 @@ func (m *percentBasedMirror) TryStreamExecute(ctx context.Context, vcursor VCurs
return vcursor.StreamExecutePrimitive(ctx, m.primitive, bindVars, wantfields, callback)
}
- mirrorCh := make(chan any)
- mirrorCtx, mirrorCtxCancel := context.WithTimeout(ctx, maxMirrorTargetLag)
+ mirrorCh := make(chan mirrorResult, 1)
+ mirrorCtx, mirrorCtxCancel := context.WithCancel(ctx)
defer mirrorCtxCancel()
go func() {
- defer close(mirrorCh)
mirrorVCursor := vcursor.CloneForMirroring(mirrorCtx)
- // TODO(maxeng) handle error.
- _ = mirrorVCursor.StreamExecutePrimitive(
- mirrorCtx, m.target, bindVars, wantfields, func(_ *sqltypes.Result,
- ) error {
- return nil
- })
+ mirrorStartTime := time.Now()
+ targetErr := mirrorVCursor.StreamExecutePrimitive(mirrorCtx, m.target, bindVars, wantfields, func(_ *sqltypes.Result) error {
+ return nil
+ })
+ mirrorCh <- mirrorResult{
+ execTime: time.Since(mirrorStartTime),
+ err: targetErr,
+ }
}()
+ var (
+ sourceExecTime, targetExecTime time.Duration
+ targetErr error
+ )
+
+ sourceStartTime := time.Now()
err := vcursor.StreamExecutePrimitive(ctx, m.primitive, bindVars, wantfields, callback)
+ sourceExecTime = time.Since(sourceStartTime)
+ // Cancel the mirror context if it continues executing too long.
select {
- case <-mirrorCh:
- // Mirroring completed within the allowed time.
- case <-mirrorCtx.Done():
- // Mirroring took too long and was canceled.
+ case r := <-mirrorCh:
+ // Mirror target finished on time.
+ targetExecTime = r.execTime
+ targetErr = r.err
+ case <-time.After(maxMirrorTargetLag):
+ // Mirror target took too long.
+ mirrorCtxCancel()
+ targetExecTime = sourceExecTime + maxMirrorTargetLag
+ targetErr = errMirrorTargetQueryTookTooLong
}
+ vcursor.RecordMirrorStats(sourceExecTime, targetExecTime, targetErr)
+
return err
}
diff --git a/go/vt/vtgate/engine/mirror_test.go b/go/vt/vtgate/engine/mirror_test.go
index b9e442df32d..753b1a26429 100644
--- a/go/vt/vtgate/engine/mirror_test.go
+++ b/go/vt/vtgate/engine/mirror_test.go
@@ -20,6 +20,7 @@ import (
"context"
"fmt"
"sync"
+ "sync/atomic"
"testing"
"time"
@@ -76,6 +77,10 @@ func TestMirror(t *testing.T) {
},
}
+ sourceExecTime := atomic.Pointer[time.Duration]{}
+ targetExecTime := atomic.Pointer[time.Duration]{}
+ targetErr := atomic.Pointer[error]{}
+
vc := &loggingVCursor{
shards: []string{"0"},
ksShardMap: map[string][]string{
@@ -90,15 +95,23 @@ func TestMirror(t *testing.T) {
"hello",
),
},
- handleMirrorClonesFn: func(ctx context.Context) VCursor {
+ onMirrorClonesFn: func(ctx context.Context) VCursor {
return mirrorVC
},
+ onRecordMirrorStatsFn: func(sourceTime time.Duration, targetTime time.Duration, err error) {
+ sourceExecTime.Store(&sourceTime)
+ targetExecTime.Store(&targetTime)
+ targetErr.Store(&err)
+ },
}
t.Run("TryExecute success", func(t *testing.T) {
defer func() {
vc.Rewind()
mirrorVC.Rewind()
+ sourceExecTime.Store(nil)
+ targetExecTime.Store(nil)
+ targetErr.Store(nil)
}()
want := vc.results[0]
@@ -114,6 +127,8 @@ func TestMirror(t *testing.T) {
`ResolveDestinations ks2 [type:INT64 value:"1"] Destinations:DestinationKeyspaceID(d46405367612b4b7)`,
"ExecuteMultiShard ks2.-20: select f.bar from foo f where f.id = 1 {} false false",
})
+ require.NotNil(t, targetExecTime.Load())
+ require.Nil(t, *targetErr.Load())
})
t.Run("TryExecute return primitive error", func(t *testing.T) {
@@ -124,6 +139,9 @@ func TestMirror(t *testing.T) {
vc.results = results
vc.resultErr = nil
mirrorVC.Rewind()
+ sourceExecTime.Store(nil)
+ targetExecTime.Store(nil)
+ targetErr.Store(nil)
}()
vc.results = nil
@@ -143,6 +161,8 @@ func TestMirror(t *testing.T) {
`ResolveDestinations ks2 [type:INT64 value:"1"] Destinations:DestinationKeyspaceID(d46405367612b4b7)`,
"ExecuteMultiShard ks2.-20: select f.bar from foo f where f.id = 1 {} false false",
})
+ require.NotNil(t, targetExecTime.Load())
+ require.Nil(t, *targetErr.Load())
})
t.Run("TryExecute ignore mirror target error", func(t *testing.T) {
@@ -153,6 +173,9 @@ func TestMirror(t *testing.T) {
mirrorVC.Rewind()
mirrorVC.results = results
mirrorVC.resultErr = nil
+ sourceExecTime.Store(nil)
+ targetExecTime.Store(nil)
+ targetErr.Store(nil)
}()
mirrorVC.results = nil
@@ -171,6 +194,63 @@ func TestMirror(t *testing.T) {
`ResolveDestinations ks2 [type:INT64 value:"1"] Destinations:DestinationKeyspaceID(d46405367612b4b7)`,
"ExecuteMultiShard ks2.-20: select f.bar from foo f where f.id = 1 {} false false",
})
+
+ require.NotNil(t, targetExecTime.Load())
+ mirrorErr := targetErr.Load()
+ require.ErrorContains(t, *mirrorErr, "ignore me")
+ })
+
+ t.Run("TryExecute fast mirror target", func(t *testing.T) {
+ defer func() {
+ vc.Rewind()
+ vc.onExecuteMultiShardFn = nil
+ mirrorVC.Rewind()
+ mirrorVC.onExecuteMultiShardFn = nil
+ sourceExecTime.Store(nil)
+ targetExecTime.Store(nil)
+ targetErr.Store(nil)
+ }()
+
+ primitiveLatency := 10 * time.Millisecond
+ vc.onExecuteMultiShardFn = func(ctx context.Context, _ Primitive, _ []*srvtopo.ResolvedShard, _ []*querypb.BoundQuery, _ bool, _ bool) {
+ time.Sleep(primitiveLatency)
+ select {
+ case <-ctx.Done():
+ require.Fail(t, "primitive context done")
+ default:
+ }
+ }
+
+ var wg sync.WaitGroup
+ defer wg.Wait()
+ mirrorVC.onExecuteMultiShardFn = func(ctx context.Context, _ Primitive, _ []*srvtopo.ResolvedShard, _ []*querypb.BoundQuery, _ bool, _ bool) {
+ wg.Add(1)
+ defer wg.Done()
+ time.Sleep(primitiveLatency / 2)
+ select {
+ case <-ctx.Done():
+ require.Fail(t, "mirror target context done")
+ default:
+ }
+ }
+
+ want := vc.results[0]
+ res, err := mirror.TryExecute(context.Background(), vc, map[string]*querypb.BindVariable{}, true)
+ require.Equal(t, res, want)
+ require.NoError(t, err)
+
+ vc.ExpectLog(t, []string{
+ "ResolveDestinations ks1 [] Destinations:DestinationAllShards()",
+ "ExecuteMultiShard ks1.0: select f.bar from foo f where f.id = 1 {} false false",
+ })
+ mirrorVC.ExpectLog(t, []string{
+ `ResolveDestinations ks2 [type:INT64 value:"1"] Destinations:DestinationKeyspaceID(d46405367612b4b7)`,
+ "ExecuteMultiShard ks2.-20: select f.bar from foo f where f.id = 1 {} false false",
+ })
+
+ wg.Wait()
+
+ require.Greater(t, *sourceExecTime.Load(), *targetExecTime.Load())
})
t.Run("TryExecute slow mirror target", func(t *testing.T) {
@@ -179,9 +259,12 @@ func TestMirror(t *testing.T) {
vc.onExecuteMultiShardFn = nil
mirrorVC.Rewind()
mirrorVC.onExecuteMultiShardFn = nil
+ sourceExecTime.Store(nil)
+ targetExecTime.Store(nil)
+ targetErr.Store(nil)
}()
- primitiveLatency := maxMirrorTargetLag * 2
+ primitiveLatency := 10 * time.Millisecond
vc.onExecuteMultiShardFn = func(ctx context.Context, _ Primitive, _ []*srvtopo.ResolvedShard, _ []*querypb.BoundQuery, _ bool, _ bool) {
time.Sleep(primitiveLatency)
select {
@@ -193,12 +276,14 @@ func TestMirror(t *testing.T) {
var wg sync.WaitGroup
defer wg.Wait()
- wg.Add(1)
mirrorVC.onExecuteMultiShardFn = func(ctx context.Context, _ Primitive, _ []*srvtopo.ResolvedShard, _ []*querypb.BoundQuery, _ bool, _ bool) {
+ wg.Add(1)
defer wg.Done()
- time.Sleep(primitiveLatency + (2 * maxMirrorTargetLag))
+ time.Sleep(primitiveLatency + maxMirrorTargetLag + (5 * time.Millisecond))
select {
case <-ctx.Done():
+ require.NotNil(t, ctx.Err())
+ require.ErrorContains(t, ctx.Err(), "context canceled")
default:
require.Fail(t, "mirror target context not done")
}
@@ -217,12 +302,20 @@ func TestMirror(t *testing.T) {
`ResolveDestinations ks2 [type:INT64 value:"1"] Destinations:DestinationKeyspaceID(d46405367612b4b7)`,
"ExecuteMultiShard ks2.-20: select f.bar from foo f where f.id = 1 {} false false",
})
+
+ wg.Wait()
+
+ require.Greater(t, *targetExecTime.Load(), *sourceExecTime.Load())
+ require.ErrorContains(t, *targetErr.Load(), "Mirror target query took too long")
})
t.Run("TryStreamExecute success", func(t *testing.T) {
defer func() {
vc.Rewind()
mirrorVC.Rewind()
+ sourceExecTime.Store(nil)
+ targetExecTime.Store(nil)
+ targetErr.Store(nil)
}()
want := vc.results[0]
@@ -246,6 +339,9 @@ func TestMirror(t *testing.T) {
`ResolveDestinations ks2 [type:INT64 value:"1"] Destinations:DestinationKeyspaceID(d46405367612b4b7)`,
"StreamExecuteMulti select f.bar from foo f where f.id = 1 ks2.-20: {} ",
})
+
+ require.NotNil(t, targetExecTime.Load())
+ require.Nil(t, *targetErr.Load())
})
t.Run("TryStreamExecute return primitive error", func(t *testing.T) {
@@ -256,6 +352,9 @@ func TestMirror(t *testing.T) {
vc.results = results
vc.resultErr = nil
mirrorVC.Rewind()
+ sourceExecTime.Store(nil)
+ targetExecTime.Store(nil)
+ targetErr.Store(nil)
}()
vc.results = nil
@@ -282,6 +381,9 @@ func TestMirror(t *testing.T) {
`ResolveDestinations ks2 [type:INT64 value:"1"] Destinations:DestinationKeyspaceID(d46405367612b4b7)`,
"StreamExecuteMulti select f.bar from foo f where f.id = 1 ks2.-20: {} ",
})
+
+ require.NotNil(t, targetExecTime.Load())
+ require.Nil(t, *targetErr.Load())
})
t.Run("TryStreamExecute ignore mirror target error", func(t *testing.T) {
@@ -292,6 +394,9 @@ func TestMirror(t *testing.T) {
mirrorVC.Rewind()
mirrorVC.results = results
mirrorVC.resultErr = nil
+ sourceExecTime.Store(nil)
+ targetExecTime.Store(nil)
+ targetErr.Store(nil)
}()
mirrorVC.results = nil
@@ -318,6 +423,68 @@ func TestMirror(t *testing.T) {
`ResolveDestinations ks2 [type:INT64 value:"1"] Destinations:DestinationKeyspaceID(d46405367612b4b7)`,
"StreamExecuteMulti select f.bar from foo f where f.id = 1 ks2.-20: {} ",
})
+
+ require.NotNil(t, targetExecTime.Load())
+ require.ErrorContains(t, *targetErr.Load(), "ignore me")
+ })
+
+ t.Run("TryStreamExecute fast mirror target", func(t *testing.T) {
+ defer func() {
+ vc.Rewind()
+ vc.onStreamExecuteMultiFn = nil
+ mirrorVC.Rewind()
+ mirrorVC.onStreamExecuteMultiFn = nil
+ sourceExecTime.Store(nil)
+ targetExecTime.Store(nil)
+ targetErr.Store(nil)
+ }()
+
+ primitiveLatency := 10 * time.Millisecond
+ vc.onStreamExecuteMultiFn = func(ctx context.Context, _ Primitive, _ string, _ []*srvtopo.ResolvedShard, _ []map[string]*querypb.BindVariable, _ bool, _ bool, _ func(*sqltypes.Result) error) {
+ time.Sleep(primitiveLatency)
+ select {
+ case <-ctx.Done():
+ require.Fail(t, "primitive context done")
+ default:
+ }
+ }
+
+ var wg sync.WaitGroup
+ defer wg.Wait()
+ mirrorVC.onStreamExecuteMultiFn = func(ctx context.Context, _ Primitive, _ string, _ []*srvtopo.ResolvedShard, _ []map[string]*querypb.BindVariable, _ bool, _ bool, _ func(*sqltypes.Result) error) {
+ wg.Add(1)
+ defer wg.Done()
+ time.Sleep(primitiveLatency / 2)
+ select {
+ case <-ctx.Done():
+ require.Fail(t, "mirror target context done")
+ default:
+ }
+ }
+
+ want := vc.results[0]
+ err := mirror.TryStreamExecute(
+ context.Background(),
+ vc,
+ map[string]*querypb.BindVariable{},
+ true,
+ func(result *sqltypes.Result) error {
+ require.Equal(t, want, result)
+ return nil
+ },
+ )
+ require.NoError(t, err)
+
+ vc.ExpectLog(t, []string{
+ "ResolveDestinations ks1 [] Destinations:DestinationAllShards()",
+ "StreamExecuteMulti select f.bar from foo f where f.id = 1 ks1.0: {} ",
+ })
+ mirrorVC.ExpectLog(t, []string{
+ `ResolveDestinations ks2 [type:INT64 value:"1"] Destinations:DestinationKeyspaceID(d46405367612b4b7)`,
+ "StreamExecuteMulti select f.bar from foo f where f.id = 1 ks2.-20: {} ",
+ })
+
+ require.Greater(t, *sourceExecTime.Load(), *targetExecTime.Load())
})
t.Run("TryStreamExecute slow mirror target", func(t *testing.T) {
@@ -326,9 +493,12 @@ func TestMirror(t *testing.T) {
vc.onStreamExecuteMultiFn = nil
mirrorVC.Rewind()
mirrorVC.onStreamExecuteMultiFn = nil
+ sourceExecTime.Store(nil)
+ targetExecTime.Store(nil)
+ targetErr.Store(nil)
}()
- primitiveLatency := maxMirrorTargetLag * 2
+ primitiveLatency := 10 * time.Millisecond
vc.onStreamExecuteMultiFn = func(ctx context.Context, _ Primitive, _ string, _ []*srvtopo.ResolvedShard, _ []map[string]*querypb.BindVariable, _ bool, _ bool, _ func(*sqltypes.Result) error) {
time.Sleep(primitiveLatency)
select {
@@ -340,10 +510,10 @@ func TestMirror(t *testing.T) {
var wg sync.WaitGroup
defer wg.Wait()
- wg.Add(1)
mirrorVC.onStreamExecuteMultiFn = func(ctx context.Context, _ Primitive, _ string, _ []*srvtopo.ResolvedShard, _ []map[string]*querypb.BindVariable, _ bool, _ bool, _ func(*sqltypes.Result) error) {
+ wg.Add(1)
defer wg.Done()
- time.Sleep(primitiveLatency + (2 * maxMirrorTargetLag))
+ time.Sleep(primitiveLatency + maxMirrorTargetLag + (5 * time.Millisecond))
select {
case <-ctx.Done():
default:
@@ -372,5 +542,8 @@ func TestMirror(t *testing.T) {
`ResolveDestinations ks2 [type:INT64 value:"1"] Destinations:DestinationKeyspaceID(d46405367612b4b7)`,
"StreamExecuteMulti select f.bar from foo f where f.id = 1 ks2.-20: {} ",
})
+
+ require.Greater(t, *targetExecTime.Load(), *sourceExecTime.Load())
+ require.ErrorContains(t, *targetErr.Load(), "Mirror target query took too long")
})
}
diff --git a/go/vt/vtgate/engine/plan_description.go b/go/vt/vtgate/engine/plan_description.go
index dfcad4e5e6b..e8e763c1ee1 100644
--- a/go/vt/vtgate/engine/plan_description.go
+++ b/go/vt/vtgate/engine/plan_description.go
@@ -126,6 +126,133 @@ func (pd PrimitiveDescription) MarshalJSON() ([]byte, error) {
return buf.Bytes(), nil
}
+// PrimitiveDescriptionFromString creates primitive description out of a data string.
+func PrimitiveDescriptionFromString(data string) (pd PrimitiveDescription, err error) {
+ resultMap := make(map[string]any)
+ err = json.Unmarshal([]byte(data), &resultMap)
+ if err != nil {
+ return PrimitiveDescription{}, err
+ }
+ return PrimitiveDescriptionFromMap(resultMap)
+}
+
+// PrimitiveDescriptionFromMap populates the fields of a PrimitiveDescription from a map representation.
+func PrimitiveDescriptionFromMap(data map[string]any) (pd PrimitiveDescription, err error) {
+ if opType, isPresent := data["OperatorType"]; isPresent {
+ pd.OperatorType = opType.(string)
+ }
+ if variant, isPresent := data["Variant"]; isPresent {
+ pd.Variant = variant.(string)
+ }
+ if ksMap, isPresent := data["Keyspace"]; isPresent {
+ ksMap := ksMap.(map[string]any)
+ pd.Keyspace = &vindexes.Keyspace{
+ Name: ksMap["Name"].(string),
+ Sharded: ksMap["Sharded"].(bool),
+ }
+ }
+ if ttt, isPresent := data["TargetTabletType"]; isPresent {
+ pd.TargetTabletType = topodatapb.TabletType(ttt.(int))
+ }
+ if other, isPresent := data["Other"]; isPresent {
+ pd.Other = other.(map[string]any)
+ }
+ if inpName, isPresent := data["InputName"]; isPresent {
+ pd.InputName = inpName.(string)
+ }
+ if avgRows, isPresent := data["AvgNumberOfRows"]; isPresent {
+ pd.RowsReceived = RowsReceived{
+ int(avgRows.(float64)),
+ }
+ }
+ if sq, isPresent := data["ShardsQueried"]; isPresent {
+ sq := int(sq.(float64))
+ pd.ShardsQueried = (*ShardsQueried)(&sq)
+ }
+ if inputs, isPresent := data["Inputs"]; isPresent {
+ inputs := inputs.([]any)
+ for _, input := range inputs {
+ inputMap := input.(map[string]any)
+ inp, err := PrimitiveDescriptionFromMap(inputMap)
+ if err != nil {
+ return PrimitiveDescription{}, err
+ }
+ pd.Inputs = append(pd.Inputs, inp)
+ }
+ }
+ return pd, nil
+}
+
+// WalkPrimitiveDescription walks the primitive description.
+func WalkPrimitiveDescription(pd PrimitiveDescription, f func(PrimitiveDescription)) {
+ f(pd)
+ for _, child := range pd.Inputs {
+ WalkPrimitiveDescription(child, f)
+ }
+}
+
+func (pd PrimitiveDescription) Equals(other PrimitiveDescription) string {
+ if pd.Variant != other.Variant {
+ return fmt.Sprintf("Variant: %v != %v", pd.Variant, other.Variant)
+ }
+
+ if pd.OperatorType != other.OperatorType {
+ return fmt.Sprintf("OperatorType: %v != %v", pd.OperatorType, other.OperatorType)
+ }
+
+ // TODO (harshit): enable this to compare keyspace as well
+ // switch {
+ // case pd.Keyspace == nil && other.Keyspace == nil:
+ // // do nothing
+ // case pd.Keyspace != nil && other.Keyspace != nil:
+ // if pd.Keyspace.Name != other.Keyspace.Name {
+ // return fmt.Sprintf("Keyspace.Name: %v != %v", pd.Keyspace.Name, other.Keyspace.Name)
+ // }
+ // default:
+ // return "Keyspace is nil in one of the descriptions"
+ // }
+
+ switch {
+ case pd.TargetDestination == nil && other.TargetDestination == nil:
+ // do nothing
+ case pd.TargetDestination != nil && other.TargetDestination != nil:
+ if pd.TargetDestination.String() != other.TargetDestination.String() {
+ return fmt.Sprintf("TargetDestination: %v != %v", pd.TargetDestination, other.TargetDestination)
+ }
+ default:
+ return "TargetDestination is nil in one of the descriptions"
+ }
+
+ if pd.TargetTabletType != other.TargetTabletType {
+ return fmt.Sprintf("TargetTabletType: %v != %v", pd.TargetTabletType, other.TargetTabletType)
+ }
+
+ switch {
+ case pd.Other == nil && other.Other == nil:
+ // do nothing
+ case pd.Other != nil && other.Other != nil:
+ if len(pd.Other) != len(other.Other) {
+ return fmt.Sprintf("Other length did not match: %v != %v", pd.Other, other.Other)
+ }
+ for ky, val := range pd.Other {
+ if other.Other[ky] != val {
+ return fmt.Sprintf("Other[%v]: %v != %v", ky, val, other.Other[ky])
+ }
+ }
+ default:
+ return "Other is nil in one of the descriptions"
+ }
+ if len(pd.Inputs) != len(other.Inputs) {
+ return fmt.Sprintf("Inputs length did not match: %v != %v", len(pd.Inputs), len(other.Inputs))
+ }
+ for idx, input := range pd.Inputs {
+ if diff := input.Equals(other.Inputs[idx]); diff != "" {
+ return diff
+ }
+ }
+ return ""
+}
+
func average(nums []int) float64 {
total := 0
for _, num := range nums {
diff --git a/go/vt/vtgate/engine/primitive.go b/go/vt/vtgate/engine/primitive.go
index 76d0a28e516..4f3a388d04f 100644
--- a/go/vt/vtgate/engine/primitive.go
+++ b/go/vt/vtgate/engine/primitive.go
@@ -144,6 +144,9 @@ type (
// StartPrimitiveTrace starts a trace for the given primitive,
// and returns a function to get the trace logs after the primitive execution.
StartPrimitiveTrace() func() Stats
+
+ // RecordMirrorStats is used to record stats about a mirror query.
+ RecordMirrorStats(time.Duration, time.Duration, error)
}
// SessionActions gives primitives ability to interact with the session state
diff --git a/go/vt/vtgate/engine/route.go b/go/vt/vtgate/engine/route.go
index 6c3ae572c8c..59682dd91fe 100644
--- a/go/vt/vtgate/engine/route.go
+++ b/go/vt/vtgate/engine/route.go
@@ -130,11 +130,12 @@ func (route *Route) GetTableName() string {
// TryExecute performs a non-streaming exec.
func (route *Route) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) {
- qr, err := route.executeInternal(ctx, vcursor, bindVars, wantfields)
+ rss, bvs, err := route.findRoute(ctx, vcursor, bindVars)
if err != nil {
return nil, err
}
- return qr.Truncate(route.TruncateColumnCount), nil
+
+ return route.executeShards(ctx, vcursor, bindVars, wantfields, rss, bvs)
}
type cxtKey int
@@ -143,20 +144,6 @@ const (
IgnoreReserveTxn cxtKey = iota
)
-func (route *Route) executeInternal(
- ctx context.Context,
- vcursor VCursor,
- bindVars map[string]*querypb.BindVariable,
- wantfields bool,
-) (*sqltypes.Result, error) {
- rss, bvs, err := route.findRoute(ctx, vcursor, bindVars)
- if err != nil {
- return nil, err
- }
-
- return route.executeShards(ctx, vcursor, bindVars, wantfields, rss, bvs)
-}
-
func (route *Route) executeShards(
ctx context.Context,
vcursor VCursor,
@@ -212,11 +199,15 @@ func (route *Route) executeShards(
}
}
- if len(route.OrderBy) == 0 {
- return result, nil
+ if len(route.OrderBy) != 0 {
+ var err error
+ result, err = route.sort(result)
+ if err != nil {
+ return nil, err
+ }
}
- return route.sort(result)
+ return result.Truncate(route.TruncateColumnCount), nil
}
func filterOutNilErrors(errs []error) []error {
@@ -373,10 +364,8 @@ func (route *Route) sort(in *sqltypes.Result) (*sqltypes.Result, error) {
// the contents of any row.
out := in.ShallowCopy()
- if err := route.OrderBy.SortResult(out); err != nil {
- return nil, err
- }
- return out.Truncate(route.TruncateColumnCount), nil
+ err := route.OrderBy.SortResult(out)
+ return out, err
}
func (route *Route) description() PrimitiveDescription {
diff --git a/go/vt/vtgate/engine/vindex_lookup.go b/go/vt/vtgate/engine/vindex_lookup.go
index 8bf8755c40e..2e0e2857498 100644
--- a/go/vt/vtgate/engine/vindex_lookup.go
+++ b/go/vt/vtgate/engine/vindex_lookup.go
@@ -252,7 +252,7 @@ func (vr *VindexLookup) generateIds(ctx context.Context, vcursor VCursor, bindVa
switch vr.Opcode {
case Equal, EqualUnique:
return []sqltypes.Value{value.Value(vcursor.ConnCollation())}, nil
- case IN:
+ case IN, MultiEqual:
return value.TupleValues(), nil
}
return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "opcode %s not supported for VindexLookup", vr.Opcode.String())
diff --git a/go/vt/vtgate/engine/vindex_lookup_test.go b/go/vt/vtgate/engine/vindex_lookup_test.go
new file mode 100644
index 00000000000..d734bf12080
--- /dev/null
+++ b/go/vt/vtgate/engine/vindex_lookup_test.go
@@ -0,0 +1,135 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package engine
+
+import (
+ "context"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+
+ "vitess.io/vitess/go/sqltypes"
+ querypb "vitess.io/vitess/go/vt/proto/query"
+ "vitess.io/vitess/go/vt/vtgate/evalengine"
+ "vitess.io/vitess/go/vt/vtgate/vindexes"
+)
+
+var (
+ vindex, _ = vindexes.CreateVindex("lookup_unique", "", map[string]string{
+ "table": "lkp",
+ "from": "from",
+ "to": "toc",
+ "write_only": "true",
+ })
+ ks = &vindexes.Keyspace{Name: "ks", Sharded: true}
+)
+
+func TestVindexLookup(t *testing.T) {
+ planableVindex, ok := vindex.(vindexes.LookupPlanable)
+ require.True(t, ok, "not a lookup vindex")
+ _, args := planableVindex.Query()
+
+ fp := &fakePrimitive{
+ results: []*sqltypes.Result{
+ sqltypes.MakeTestResult(
+ sqltypes.MakeTestFields("id|keyspace_id", "int64|varbinary"),
+ "1|\x10"),
+ },
+ }
+ route := NewRoute(ByDestination, ks, "dummy_select", "dummy_select_field")
+ vdxLookup := &VindexLookup{
+ Opcode: EqualUnique,
+ Keyspace: ks,
+ Vindex: planableVindex,
+ Arguments: args,
+ Values: []evalengine.Expr{evalengine.NewLiteralInt(1)},
+ Lookup: fp,
+ SendTo: route,
+ }
+
+ vc := &loggingVCursor{results: []*sqltypes.Result{defaultSelectResult}}
+
+ result, err := vdxLookup.TryExecute(context.Background(), vc, map[string]*querypb.BindVariable{}, false)
+ require.NoError(t, err)
+ fp.ExpectLog(t, []string{`Execute from: type:TUPLE values:{type:INT64 value:"1"} false`})
+ vc.ExpectLog(t, []string{
+ `ResolveDestinations ks [type:INT64 value:"1"] Destinations:DestinationKeyspaceID(10)`,
+ `ExecuteMultiShard ks.-20: dummy_select {} false false`,
+ })
+ expectResult(t, result, defaultSelectResult)
+
+ fp.rewind()
+ vc.Rewind()
+ result, err = wrapStreamExecute(vdxLookup, vc, map[string]*querypb.BindVariable{}, false)
+ require.NoError(t, err)
+ vc.ExpectLog(t, []string{
+ `ResolveDestinations ks [type:INT64 value:"1"] Destinations:DestinationKeyspaceID(10)`,
+ `StreamExecuteMulti dummy_select ks.-20: {} `,
+ })
+ expectResult(t, result, defaultSelectResult)
+}
+
+func TestVindexLookupTruncate(t *testing.T) {
+ planableVindex, ok := vindex.(vindexes.LookupPlanable)
+ require.True(t, ok, "not a lookup vindex")
+ _, args := planableVindex.Query()
+
+ fp := &fakePrimitive{
+ results: []*sqltypes.Result{
+ sqltypes.MakeTestResult(
+ sqltypes.MakeTestFields("id|keyspace_id", "int64|varbinary"),
+ "1|\x10"),
+ },
+ }
+ route := NewRoute(ByDestination, ks, "dummy_select", "dummy_select_field")
+ route.TruncateColumnCount = 1
+ vdxLookup := &VindexLookup{
+ Opcode: EqualUnique,
+ Keyspace: ks,
+ Vindex: planableVindex,
+ Arguments: args,
+ Values: []evalengine.Expr{evalengine.NewLiteralInt(1)},
+ Lookup: fp,
+ SendTo: route,
+ }
+
+ vc := &loggingVCursor{results: []*sqltypes.Result{
+ sqltypes.MakeTestResult(sqltypes.MakeTestFields("name|morecol", "varchar|int64"),
+ "foo|1", "bar|2", "baz|3"),
+ }}
+
+ wantRes := sqltypes.MakeTestResult(sqltypes.MakeTestFields("name", "varchar"),
+ "foo", "bar", "baz")
+ result, err := vdxLookup.TryExecute(context.Background(), vc, map[string]*querypb.BindVariable{}, false)
+ require.NoError(t, err)
+ fp.ExpectLog(t, []string{`Execute from: type:TUPLE values:{type:INT64 value:"1"} false`})
+ vc.ExpectLog(t, []string{
+ `ResolveDestinations ks [type:INT64 value:"1"] Destinations:DestinationKeyspaceID(10)`,
+ `ExecuteMultiShard ks.-20: dummy_select {} false false`,
+ })
+ expectResult(t, result, wantRes)
+
+ fp.rewind()
+ vc.Rewind()
+ result, err = wrapStreamExecute(vdxLookup, vc, map[string]*querypb.BindVariable{}, false)
+ require.NoError(t, err)
+ vc.ExpectLog(t, []string{
+ `ResolveDestinations ks [type:INT64 value:"1"] Destinations:DestinationKeyspaceID(10)`,
+ `StreamExecuteMulti dummy_select ks.-20: {} `,
+ })
+ expectResult(t, result, wantRes)
+}
diff --git a/go/vt/vtgate/evalengine/compiler_test.go b/go/vt/vtgate/evalengine/compiler_test.go
index 04eb72ad4f2..cb9b99e7776 100644
--- a/go/vt/vtgate/evalengine/compiler_test.go
+++ b/go/vt/vtgate/evalengine/compiler_test.go
@@ -24,6 +24,8 @@ import (
"testing"
"time"
+ "github.com/stretchr/testify/assert"
+
"github.com/olekukonko/tablewriter"
"github.com/stretchr/testify/require"
@@ -94,7 +96,18 @@ func (s *Tracker) String() string {
return s.buf.String()
}
+func TestOneCase(t *testing.T) {
+ query := ``
+ if query == "" {
+ t.Skip("no query to test")
+ }
+ venv := vtenv.NewTestEnv()
+ env := evalengine.EmptyExpressionEnv(venv)
+ testCompilerCase(t, query, venv, nil, env)
+}
+
func TestCompilerReference(t *testing.T) {
+ // This test runs a lot of queries and compares the results of the evalengine in eval mode to the results of the compiler.
now := time.Now()
evalengine.SystemTime = func() time.Time { return now }
defer func() { evalengine.SystemTime = time.Now }()
@@ -108,52 +121,11 @@ func TestCompilerReference(t *testing.T) {
tc.Run(func(query string, row []sqltypes.Value) {
env.Row = row
-
- stmt, err := venv.Parser().ParseExpr(query)
- if err != nil {
- // no need to test un-parseable queries
- return
- }
-
- fields := evalengine.FieldResolver(tc.Schema)
- cfg := &evalengine.Config{
- ResolveColumn: fields.Column,
- ResolveType: fields.Type,
- Collation: collations.CollationUtf8mb4ID,
- Environment: venv,
- NoConstantFolding: true,
- }
-
- converted, err := evalengine.Translate(stmt, cfg)
- if err != nil {
- return
- }
-
- expected, evalErr := env.EvaluateAST(converted)
total++
-
- res, vmErr := env.Evaluate(converted)
- if vmErr != nil {
- switch {
- case evalErr == nil:
- t.Errorf("failed evaluation from compiler:\nSQL: %s\nError: %s", query, vmErr)
- case evalErr.Error() != vmErr.Error():
- t.Errorf("error mismatch:\nSQL: %s\nError eval: %s\nError comp: %s", query, evalErr, vmErr)
- default:
- supported++
- }
- return
+ testCompilerCase(t, query, venv, tc.Schema, env)
+ if !t.Failed() {
+ supported++
}
-
- eval := expected.String()
- comp := res.String()
-
- if eval != comp {
- t.Errorf("bad evaluation from compiler:\nSQL: %s\nEval: %s\nComp: %s", query, eval, comp)
- return
- }
-
- supported++
})
track.Add(tc.Name(), supported, total)
@@ -163,6 +135,51 @@ func TestCompilerReference(t *testing.T) {
t.Logf("\n%s", track.String())
}
+func testCompilerCase(t *testing.T, query string, venv *vtenv.Environment, schema []*querypb.Field, env *evalengine.ExpressionEnv) {
+ stmt, err := venv.Parser().ParseExpr(query)
+ if err != nil {
+ // no need to test un-parseable queries
+ return
+ }
+
+ fields := evalengine.FieldResolver(schema)
+ cfg := &evalengine.Config{
+ ResolveColumn: fields.Column,
+ ResolveType: fields.Type,
+ Collation: collations.CollationUtf8mb4ID,
+ Environment: venv,
+ NoConstantFolding: true,
+ }
+
+ converted, err := evalengine.Translate(stmt, cfg)
+ if err != nil {
+ return
+ }
+
+ var expected evalengine.EvalResult
+ var evalErr error
+ assert.NotPanics(t, func() {
+ expected, evalErr = env.EvaluateAST(converted)
+ })
+ var res evalengine.EvalResult
+ var vmErr error
+ assert.NotPanics(t, func() {
+ res, vmErr = env.Evaluate(converted)
+ })
+ switch {
+ case vmErr == nil && evalErr == nil:
+ eval := expected.String()
+ comp := res.String()
+ assert.Equalf(t, eval, comp, "bad evaluation from compiler:\nSQL: %s\nEval: %s\nComp: %s", query, eval, comp)
+ case vmErr == nil:
+ t.Errorf("failed evaluation from evalengine:\nSQL: %s\nError: %s", query, evalErr)
+ case evalErr == nil:
+ t.Errorf("failed evaluation from compiler:\nSQL: %s\nError: %s", query, vmErr)
+ case evalErr.Error() != vmErr.Error():
+ t.Errorf("error mismatch:\nSQL: %s\nError eval: %s\nError comp: %s", query, evalErr, vmErr)
+ }
+}
+
func TestCompilerSingle(t *testing.T) {
var testCases = []struct {
expression string
diff --git a/go/vt/vtgate/evalengine/eval_result.go b/go/vt/vtgate/evalengine/eval_result.go
index d9916af03be..5c1973d8eb1 100644
--- a/go/vt/vtgate/evalengine/eval_result.go
+++ b/go/vt/vtgate/evalengine/eval_result.go
@@ -62,6 +62,7 @@ func (er EvalResult) String() string {
// TupleValues allows for retrieval of the value we expose for public consumption
func (er EvalResult) TupleValues() []sqltypes.Value {
+ // TODO: Make this collation-aware
switch v := er.v.(type) {
case *evalTuple:
result := make([]sqltypes.Value, 0, len(v.t))
diff --git a/go/vt/vtgate/evalengine/expr.go b/go/vt/vtgate/evalengine/expr.go
index 44026f97e69..b90390e1ba8 100644
--- a/go/vt/vtgate/evalengine/expr.go
+++ b/go/vt/vtgate/evalengine/expr.go
@@ -56,7 +56,7 @@ func (expr *BinaryExpr) arguments(env *ExpressionEnv) (eval, eval, error) {
}
right, err := expr.Right.eval(env)
if err != nil {
- return nil, nil, err
+ return left, nil, err
}
return left, right, nil
}
diff --git a/go/vt/vtgate/evalengine/expr_compare.go b/go/vt/vtgate/evalengine/expr_compare.go
index ce1e16af787..6e6c888ecf6 100644
--- a/go/vt/vtgate/evalengine/expr_compare.go
+++ b/go/vt/vtgate/evalengine/expr_compare.go
@@ -592,13 +592,18 @@ func (l *LikeExpr) matchWildcard(left, right []byte, coll collations.ID) bool {
}
fullColl := colldata.Lookup(coll)
wc := fullColl.Wildcard(right, 0, 0, 0)
- return wc.Match(left)
+ return wc.Match(left) == !l.Negate
}
func (l *LikeExpr) eval(env *ExpressionEnv) (eval, error) {
- left, right, err := l.arguments(env)
- if left == nil || right == nil || err != nil {
- return nil, err
+ left, err := l.Left.eval(env)
+ if err != nil || left == nil {
+ return left, err
+ }
+
+ right, err := l.Right.eval(env)
+ if err != nil || right == nil {
+ return right, err
}
var col collations.TypedCollation
@@ -607,18 +612,9 @@ func (l *LikeExpr) eval(env *ExpressionEnv) (eval, error) {
return nil, err
}
- var matched bool
- switch {
- case typeIsTextual(left.SQLType()) && typeIsTextual(right.SQLType()):
- matched = l.matchWildcard(left.(*evalBytes).bytes, right.(*evalBytes).bytes, col.Collation)
- case typeIsTextual(right.SQLType()):
- matched = l.matchWildcard(left.ToRawBytes(), right.(*evalBytes).bytes, col.Collation)
- case typeIsTextual(left.SQLType()):
- matched = l.matchWildcard(left.(*evalBytes).bytes, right.ToRawBytes(), col.Collation)
- default:
- matched = l.matchWildcard(left.ToRawBytes(), right.ToRawBytes(), collations.CollationBinaryID)
- }
- return newEvalBool(matched == !l.Negate), nil
+ matched := l.matchWildcard(left.ToRawBytes(), right.ToRawBytes(), col.Collation)
+
+ return newEvalBool(matched), nil
}
func (expr *LikeExpr) compile(c *compiler) (ctype, error) {
@@ -627,12 +623,14 @@ func (expr *LikeExpr) compile(c *compiler) (ctype, error) {
return ctype{}, err
}
+ skip1 := c.compileNullCheck1(lt)
+
rt, err := expr.Right.compile(c)
if err != nil {
return ctype{}, err
}
- skip := c.compileNullCheck2(lt, rt)
+ skip2 := c.compileNullCheck1(rt)
if !lt.isTextual() {
c.asm.Convert_xc(2, sqltypes.VarChar, c.collation, nil)
@@ -684,6 +682,6 @@ func (expr *LikeExpr) compile(c *compiler) (ctype, error) {
})
}
- c.asm.jumpDestination(skip)
+ c.asm.jumpDestination(skip1, skip2)
return ctype{Type: sqltypes.Int64, Col: collationNumeric, Flag: flagIsBoolean | flagNullable}, nil
}
diff --git a/go/vt/vtgate/evalengine/fn_string.go b/go/vt/vtgate/evalengine/fn_string.go
index 6d83d36412d..1cca7a94c8d 100644
--- a/go/vt/vtgate/evalengine/fn_string.go
+++ b/go/vt/vtgate/evalengine/fn_string.go
@@ -1685,24 +1685,17 @@ func (call *builtinLocate) compile(c *compiler) (ctype, error) {
return ctype{}, err
}
+ skip1 := c.compileNullCheck1(substr)
str, err := call.Arguments[1].compile(c)
if err != nil {
return ctype{}, err
}
- skip1 := c.compileNullCheck2(substr, str)
- var skip2 *jump
- if len(call.Arguments) > 2 {
- l, err := call.Arguments[2].compile(c)
- if err != nil {
- return ctype{}, err
- }
- skip2 = c.compileNullCheck2(str, l)
- _ = c.compileToInt64(l, 1)
- }
+ skip2 := c.compileNullCheck1(str)
+ var skip3 *jump
if !str.isTextual() {
- c.asm.Convert_xce(len(call.Arguments)-1, sqltypes.VarChar, c.collation)
+ c.asm.Convert_xce(1, sqltypes.VarChar, c.collation)
str.Col = collations.TypedCollation{
Collation: c.collation,
Coercibility: collations.CoerceCoercible,
@@ -1713,7 +1706,7 @@ func (call *builtinLocate) compile(c *compiler) (ctype, error) {
fromCharset := colldata.Lookup(substr.Col.Collation).Charset()
toCharset := colldata.Lookup(str.Col.Collation).Charset()
if !substr.isTextual() || (fromCharset != toCharset && !toCharset.IsSuperset(fromCharset)) {
- c.asm.Convert_xce(len(call.Arguments), sqltypes.VarChar, str.Col.Collation)
+ c.asm.Convert_xce(2, sqltypes.VarChar, str.Col.Collation)
substr.Col = collations.TypedCollation{
Collation: str.Col.Collation,
Coercibility: collations.CoerceCoercible,
@@ -1721,6 +1714,15 @@ func (call *builtinLocate) compile(c *compiler) (ctype, error) {
}
}
+ if len(call.Arguments) > 2 {
+ l, err := call.Arguments[2].compile(c)
+ if err != nil {
+ return ctype{}, err
+ }
+ skip3 = c.compileNullCheck1(l)
+ _ = c.compileToInt64(l, 1)
+ }
+
var coll colldata.Collation
if typeIsTextual(substr.Type) && typeIsTextual(str.Type) {
coll = colldata.Lookup(str.Col.Collation)
@@ -1734,7 +1736,7 @@ func (call *builtinLocate) compile(c *compiler) (ctype, error) {
c.asm.Locate2(coll)
}
- c.asm.jumpDestination(skip1, skip2)
+ c.asm.jumpDestination(skip1, skip2, skip3)
return ctype{Type: sqltypes.Int64, Col: collationNumeric, Flag: flagNullable}, nil
}
diff --git a/go/vt/vtgate/evalengine/testcases/cases.go b/go/vt/vtgate/evalengine/testcases/cases.go
index ed1c5ed1f76..ff6c0c0f311 100644
--- a/go/vt/vtgate/evalengine/testcases/cases.go
+++ b/go/vt/vtgate/evalengine/testcases/cases.go
@@ -1097,24 +1097,26 @@ func CollationOperations(yield Query) {
}
func LikeComparison(yield Query) {
- var left = []string{
+ var left = append(inputConversions,
`'foobar'`, `'FOOBAR'`,
`'1234'`, `1234`,
`_utf8mb4 'foobar' COLLATE utf8mb4_0900_as_cs`,
- `_utf8mb4 'FOOBAR' COLLATE utf8mb4_0900_as_cs`,
- }
- var right = append([]string{
+ `_utf8mb4 'FOOBAR' COLLATE utf8mb4_0900_as_cs`)
+
+ var right = append(left,
+ `NULL`, `1`, `0`,
`'foo%'`, `'FOO%'`, `'foo_ar'`, `'FOO_AR'`,
`'12%'`, `'12_4'`,
`_utf8mb4 'foo%' COLLATE utf8mb4_0900_as_cs`,
`_utf8mb4 'FOO%' COLLATE utf8mb4_0900_as_cs`,
`_utf8mb4 'foo_ar' COLLATE utf8mb4_0900_as_cs`,
- `_utf8mb4 'FOO_AR' COLLATE utf8mb4_0900_as_cs`,
- }, left...)
+ `_utf8mb4 'FOO_AR' COLLATE utf8mb4_0900_as_cs`)
for _, lhs := range left {
for _, rhs := range right {
- yield(fmt.Sprintf("%s LIKE %s", lhs, rhs), nil)
+ for _, op := range []string{"LIKE", "NOT LIKE"} {
+ yield(fmt.Sprintf("%s %s %s", lhs, op, rhs), nil)
+ }
}
}
}
diff --git a/go/vt/vtgate/evalengine/translate.go b/go/vt/vtgate/evalengine/translate.go
index 99e1508cc04..e93d338952c 100644
--- a/go/vt/vtgate/evalengine/translate.go
+++ b/go/vt/vtgate/evalengine/translate.go
@@ -309,10 +309,6 @@ func (ast *astCompiler) translateBinaryExpr(binary *sqlparser.BinaryExpr) (IR, e
return &BitwiseExpr{BinaryExpr: binaryExpr, Op: &opBitShl{}}, nil
case sqlparser.ShiftRightOp:
return &BitwiseExpr{BinaryExpr: binaryExpr, Op: &opBitShr{}}, nil
- case sqlparser.JSONExtractOp:
- return builtinJSONExtractRewrite(left, right)
- case sqlparser.JSONUnquoteExtractOp:
- return builtinJSONExtractUnquoteRewrite(left, right)
default:
return nil, translateExprNotSupported(binary)
}
diff --git a/go/vt/vtgate/evalengine/translate_test.go b/go/vt/vtgate/evalengine/translate_test.go
index 3702230e22e..2bebae548e1 100644
--- a/go/vt/vtgate/evalengine/translate_test.go
+++ b/go/vt/vtgate/evalengine/translate_test.go
@@ -89,8 +89,8 @@ func TestTranslateSimplification(t *testing.T) {
{"coalesce(NULL, 2, NULL, 4)", ok("coalesce(null, 2, null, 4)"), ok("2")},
{"coalesce(NULL, NULL)", ok("coalesce(null, null)"), ok("null")},
{"coalesce(NULL)", ok("coalesce(null)"), ok("null")},
- {"weight_string('foobar')", ok(`weight_string('foobar')`), ok("'\x1c\xe5\x1d\xdd\x1d\xdd\x1c`\x1cG\x1e3'")},
- {"weight_string('foobar' as char(12))", ok(`weight_string('foobar' as char(12))`), ok("'\x1c\xe5\x1d\xdd\x1d\xdd\x1c`\x1cG\x1e3'")},
+ {"weight_string('foobar')", ok(`weight_string('foobar')`), ok("_binary'\x1c\xe5\x1d\xdd\x1d\xdd\x1c`\x1cG\x1e3'")},
+ {"weight_string('foobar' as char(12))", ok(`weight_string('foobar' as char(12))`), ok("_binary'\x1c\xe5\x1d\xdd\x1d\xdd\x1c`\x1cG\x1e3'")},
{"case when 1 = 1 then 2 else 3 end", ok("case when 1 = 1 then 2 else 3"), ok("2")},
{"case when null then 2 when 12 = 4 then 'ohnoes' else 42 end", ok(`case when null then 2 when 12 = 4 then 'ohnoes' else 42`), ok(`'42'`)},
{"convert('a', char(2) character set utf8mb4)", ok(`convert('a', CHAR(2) character set utf8mb4_0900_ai_ci)`), ok(`'a'`)},
diff --git a/go/vt/vtgate/executor.go b/go/vt/vtgate/executor.go
index 5dc388f1a3d..0bb47361f55 100644
--- a/go/vt/vtgate/executor.go
+++ b/go/vt/vtgate/executor.go
@@ -30,6 +30,8 @@ import (
"github.com/spf13/pflag"
+ vschemapb "vitess.io/vitess/go/vt/proto/vschema"
+
"vitess.io/vitess/go/acl"
"vitess.io/vitess/go/cache/theine"
"vitess.io/vitess/go/mysql/capabilities"
@@ -57,6 +59,7 @@ import (
"vitess.io/vitess/go/vt/vterrors"
"vitess.io/vitess/go/vt/vtgate/engine"
"vitess.io/vitess/go/vt/vtgate/evalengine"
+ econtext "vitess.io/vitess/go/vt/vtgate/executorcontext"
"vitess.io/vitess/go/vt/vtgate/logstats"
"vitess.io/vitess/go/vt/vtgate/planbuilder"
"vitess.io/vitess/go/vt/vtgate/planbuilder/plancontext"
@@ -67,7 +70,6 @@ import (
)
var (
- errNoKeyspace = vterrors.VT09005()
defaultTabletType = topodatapb.TabletType_PRIMARY
// TODO: @rafael - These two counters should be deprecated in favor of the ByTable ones in v17+. They are kept for now for backwards compatibility.
@@ -77,6 +79,11 @@ var (
queriesProcessedByTable = stats.NewCountersWithMultiLabels("QueriesProcessedByTable", "Queries processed at vtgate by plan type, keyspace and table", []string{"Plan", "Keyspace", "Table"})
queriesRoutedByTable = stats.NewCountersWithMultiLabels("QueriesRoutedByTable", "Queries routed from vtgate to vttablet by plan type, keyspace and table", []string{"Plan", "Keyspace", "Table"})
+ // commitMode records the timing of the commit phase of a transaction.
+ // It also tracks between different transaction mode i.e. Single, Multi and TwoPC
+ commitMode = stats.NewTimings("CommitModeTimings", "Commit Mode Time", "mode")
+ commitUnresolved = stats.NewCounter("CommitUnresolved", "Atomic Commit failed to conclude after commit decision is made")
+
exceedMemoryRowsLogger = logutil.NewThrottledLogger("ExceedMemoryRows", 1*time.Minute)
errorTransform errorTransformer = nullErrorTransformer{}
@@ -106,7 +113,6 @@ type Executor struct {
resolver *Resolver
scatterConn *ScatterConn
txConn *TxConn
- pv plancontext.PlannerVersion
mu sync.Mutex
vschema *vindexes.VSchema
@@ -116,8 +122,7 @@ type Executor struct {
plans *PlanCache
epoch atomic.Uint32
- normalize bool
- warnShardedOnly bool
+ normalize bool
vm *VSchemaManager
schemaTracker SchemaInfo
@@ -130,6 +135,8 @@ type Executor struct {
warmingReadsPercent int
warmingReadsChannel chan bool
+
+ vConfig econtext.VCursorConfig
}
var executorOnce sync.Once
@@ -170,17 +177,16 @@ func NewExecutor(
scatterConn: resolver.scatterConn,
txConn: resolver.scatterConn.txConn,
normalize: normalize,
- warnShardedOnly: warnOnShardedOnly,
streamSize: streamSize,
schemaTracker: schemaTracker,
allowScatter: !noScatter,
- pv: pv,
plans: plans,
warmingReadsPercent: warmingReadsPercent,
warmingReadsChannel: make(chan bool, warmingReadsConcurrency),
}
+ // setting the vcursor config.
+ e.initVConfig(warnOnShardedOnly, pv)
- vschemaacl.Init()
// we subscribe to update from the VSchemaManager
e.vm = &VSchemaManager{
subscriber: e.SaveVSchema,
@@ -218,7 +224,7 @@ func NewExecutor(
}
// Execute executes a non-streaming query.
-func (e *Executor) Execute(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, method string, safeSession *SafeSession, sql string, bindVars map[string]*querypb.BindVariable) (result *sqltypes.Result, err error) {
+func (e *Executor) Execute(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, method string, safeSession *econtext.SafeSession, sql string, bindVars map[string]*querypb.BindVariable) (result *sqltypes.Result, err error) {
span, ctx := trace.NewSpan(ctx, "executor.Execute")
span.Annotate("method", method)
trace.AnnotateSQL(span, sqlparser.Preview(sql))
@@ -281,7 +287,7 @@ func (e *Executor) StreamExecute(
ctx context.Context,
mysqlCtx vtgateservice.MySQLConnection,
method string,
- safeSession *SafeSession,
+ safeSession *econtext.SafeSession,
sql string,
bindVars map[string]*querypb.BindVariable,
callback func(*sqltypes.Result) error,
@@ -295,7 +301,7 @@ func (e *Executor) StreamExecute(
srr := &streaminResultReceiver{callback: callback}
var err error
- resultHandler := func(ctx context.Context, plan *engine.Plan, vc *vcursorImpl, bindVars map[string]*querypb.BindVariable, execStart time.Time) error {
+ resultHandler := func(ctx context.Context, plan *engine.Plan, vc *econtext.VCursorImpl, bindVars map[string]*querypb.BindVariable, execStart time.Time) error {
var seenResults atomic.Bool
var resultMu sync.Mutex
result := &sqltypes.Result{}
@@ -363,7 +369,7 @@ func (e *Executor) StreamExecute(
logStats.TablesUsed = plan.TablesUsed
logStats.TabletType = vc.TabletType().String()
logStats.ExecuteTime = time.Since(execStart)
- logStats.ActiveKeyspace = vc.keyspace
+ logStats.ActiveKeyspace = vc.GetKeyspace()
e.updateQueryCounts(plan.Instructions.RouteType(), plan.Instructions.GetKeyspaceName(), plan.Instructions.GetTableName(), int64(logStats.ShardQueries))
@@ -406,12 +412,12 @@ func canReturnRows(stmtType sqlparser.StatementType) bool {
}
}
-func saveSessionStats(safeSession *SafeSession, stmtType sqlparser.StatementType, rowsAffected, insertID uint64, rowsReturned int, err error) {
+func saveSessionStats(safeSession *econtext.SafeSession, stmtType sqlparser.StatementType, rowsAffected, insertID uint64, rowsReturned int, err error) {
safeSession.RowCount = -1
if err != nil {
return
}
- if !safeSession.foundRowsHandled {
+ if !safeSession.IsFoundRowsHandled() {
safeSession.FoundRows = uint64(rowsReturned)
}
if insertID > 0 {
@@ -425,11 +431,11 @@ func saveSessionStats(safeSession *SafeSession, stmtType sqlparser.StatementType
}
}
-func (e *Executor) execute(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, safeSession *SafeSession, sql string, bindVars map[string]*querypb.BindVariable, logStats *logstats.LogStats) (sqlparser.StatementType, *sqltypes.Result, error) {
+func (e *Executor) execute(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, safeSession *econtext.SafeSession, sql string, bindVars map[string]*querypb.BindVariable, logStats *logstats.LogStats) (sqlparser.StatementType, *sqltypes.Result, error) {
var err error
var qr *sqltypes.Result
var stmtType sqlparser.StatementType
- err = e.newExecute(ctx, mysqlCtx, safeSession, sql, bindVars, logStats, func(ctx context.Context, plan *engine.Plan, vc *vcursorImpl, bindVars map[string]*querypb.BindVariable, time time.Time) error {
+ err = e.newExecute(ctx, mysqlCtx, safeSession, sql, bindVars, logStats, func(ctx context.Context, plan *engine.Plan, vc *econtext.VCursorImpl, bindVars map[string]*querypb.BindVariable, time time.Time) error {
stmtType = plan.Type
qr, err = e.executePlan(ctx, safeSession, plan, vc, bindVars, logStats, time)
return err
@@ -443,7 +449,7 @@ func (e *Executor) execute(ctx context.Context, mysqlCtx vtgateservice.MySQLConn
}
// addNeededBindVars adds bind vars that are needed by the plan
-func (e *Executor) addNeededBindVars(vcursor *vcursorImpl, bindVarNeeds *sqlparser.BindVarNeeds, bindVars map[string]*querypb.BindVariable, session *SafeSession) error {
+func (e *Executor) addNeededBindVars(vcursor *econtext.VCursorImpl, bindVarNeeds *sqlparser.BindVarNeeds, bindVars map[string]*querypb.BindVariable, session *econtext.SafeSession) error {
for _, funcName := range bindVarNeeds.NeedFunctionResult {
switch funcName {
case sqlparser.DBVarName:
@@ -536,7 +542,7 @@ func (e *Executor) addNeededBindVars(vcursor *vcursorImpl, bindVarNeeds *sqlpars
}
evalExpr, err := evalengine.Translate(expr, &evalengine.Config{
- Collation: vcursor.collation,
+ Collation: vcursor.ConnCollation(),
Environment: e.env,
SQLMode: evalengine.ParseSQLMode(vcursor.SQLMode()),
})
@@ -547,7 +553,7 @@ func (e *Executor) addNeededBindVars(vcursor *vcursorImpl, bindVarNeeds *sqlpars
if err != nil {
return err
}
- bindVars[key] = sqltypes.ValueBindVariable(evaluated.Value(vcursor.collation))
+ bindVars[key] = sqltypes.ValueBindVariable(evaluated.Value(vcursor.ConnCollation()))
}
}
}
@@ -567,21 +573,21 @@ func (e *Executor) addNeededBindVars(vcursor *vcursorImpl, bindVarNeeds *sqlpars
return nil
}
-func ifOptionsExist(session *SafeSession, f func(*querypb.ExecuteOptions)) {
+func ifOptionsExist(session *econtext.SafeSession, f func(*querypb.ExecuteOptions)) {
options := session.GetOptions()
if options != nil {
f(options)
}
}
-func ifReadAfterWriteExist(session *SafeSession, f func(*vtgatepb.ReadAfterWrite)) {
+func ifReadAfterWriteExist(session *econtext.SafeSession, f func(*vtgatepb.ReadAfterWrite)) {
raw := session.ReadAfterWrite
if raw != nil {
f(raw)
}
}
-func (e *Executor) handleBegin(ctx context.Context, safeSession *SafeSession, logStats *logstats.LogStats, stmt sqlparser.Statement) (*sqltypes.Result, error) {
+func (e *Executor) handleBegin(ctx context.Context, safeSession *econtext.SafeSession, logStats *logstats.LogStats, stmt sqlparser.Statement) (*sqltypes.Result, error) {
execStart := time.Now()
logStats.PlanTime = execStart.Sub(logStats.StartTime)
@@ -594,7 +600,7 @@ func (e *Executor) handleBegin(ctx context.Context, safeSession *SafeSession, lo
return &sqltypes.Result{}, err
}
-func (e *Executor) handleCommit(ctx context.Context, safeSession *SafeSession, logStats *logstats.LogStats) (*sqltypes.Result, error) {
+func (e *Executor) handleCommit(ctx context.Context, safeSession *econtext.SafeSession, logStats *logstats.LogStats) (*sqltypes.Result, error) {
execStart := time.Now()
logStats.PlanTime = execStart.Sub(logStats.StartTime)
logStats.ShardQueries = uint64(len(safeSession.ShardSessions))
@@ -606,11 +612,11 @@ func (e *Executor) handleCommit(ctx context.Context, safeSession *SafeSession, l
}
// Commit commits the existing transactions
-func (e *Executor) Commit(ctx context.Context, safeSession *SafeSession) error {
+func (e *Executor) Commit(ctx context.Context, safeSession *econtext.SafeSession) error {
return e.txConn.Commit(ctx, safeSession)
}
-func (e *Executor) handleRollback(ctx context.Context, safeSession *SafeSession, logStats *logstats.LogStats) (*sqltypes.Result, error) {
+func (e *Executor) handleRollback(ctx context.Context, safeSession *econtext.SafeSession, logStats *logstats.LogStats) (*sqltypes.Result, error) {
execStart := time.Now()
logStats.PlanTime = execStart.Sub(logStats.StartTime)
logStats.ShardQueries = uint64(len(safeSession.ShardSessions))
@@ -620,7 +626,7 @@ func (e *Executor) handleRollback(ctx context.Context, safeSession *SafeSession,
return &sqltypes.Result{}, err
}
-func (e *Executor) handleSavepoint(ctx context.Context, safeSession *SafeSession, sql string, planType string, logStats *logstats.LogStats, nonTxResponse func(query string) (*sqltypes.Result, error), ignoreMaxMemoryRows bool) (*sqltypes.Result, error) {
+func (e *Executor) handleSavepoint(ctx context.Context, safeSession *econtext.SafeSession, sql string, planType string, logStats *logstats.LogStats, nonTxResponse func(query string) (*sqltypes.Result, error), ignoreMaxMemoryRows bool) (*sqltypes.Result, error) {
execStart := time.Now()
logStats.PlanTime = execStart.Sub(logStats.StartTime)
logStats.ShardQueries = uint64(len(safeSession.ShardSessions))
@@ -632,7 +638,7 @@ func (e *Executor) handleSavepoint(ctx context.Context, safeSession *SafeSession
// If no transaction exists on any of the shard sessions,
// then savepoint does not need to be executed, it will be only stored in the session
// and later will be executed when a transaction is started.
- if !safeSession.isTxOpen() {
+ if !safeSession.IsTxOpen() {
if safeSession.InTransaction() {
// Storing, as this needs to be executed just after starting transaction on the shard.
safeSession.StoreSavepoint(sql)
@@ -640,7 +646,7 @@ func (e *Executor) handleSavepoint(ctx context.Context, safeSession *SafeSession
}
return nonTxResponse(sql)
}
- orig := safeSession.commitOrder
+ orig := safeSession.GetCommitOrder()
qr, err := e.executeSPInAllSessions(ctx, safeSession, sql, ignoreMaxMemoryRows)
safeSession.SetCommitOrder(orig)
if err != nil {
@@ -652,7 +658,7 @@ func (e *Executor) handleSavepoint(ctx context.Context, safeSession *SafeSession
// executeSPInAllSessions function executes the savepoint query in all open shard sessions (pre, normal and post)
// which has non-zero transaction id (i.e. an open transaction on the shard connection).
-func (e *Executor) executeSPInAllSessions(ctx context.Context, safeSession *SafeSession, sql string, ignoreMaxMemoryRows bool) (*sqltypes.Result, error) {
+func (e *Executor) executeSPInAllSessions(ctx context.Context, safeSession *econtext.SafeSession, sql string, ignoreMaxMemoryRows bool) (*sqltypes.Result, error) {
var qr *sqltypes.Result
var errs []error
for _, co := range []vtgatepb.CommitOrder{vtgatepb.CommitOrder_PRE, vtgatepb.CommitOrder_NORMAL, vtgatepb.CommitOrder_POST} {
@@ -660,7 +666,7 @@ func (e *Executor) executeSPInAllSessions(ctx context.Context, safeSession *Safe
var rss []*srvtopo.ResolvedShard
var queries []*querypb.BoundQuery
- for _, shardSession := range safeSession.getSessions() {
+ for _, shardSession := range safeSession.GetSessions() {
// This will avoid executing savepoint on reserved connections
// which has no open transaction.
if shardSession.TransactionId == 0 {
@@ -713,11 +719,11 @@ func (e *Executor) handleKill(ctx context.Context, mysqlCtx vtgateservice.MySQLC
// CloseSession releases the current connection, which rollbacks open transactions and closes reserved connections.
// It is called then the MySQL servers closes the connection to its client.
-func (e *Executor) CloseSession(ctx context.Context, safeSession *SafeSession) error {
+func (e *Executor) CloseSession(ctx context.Context, safeSession *econtext.SafeSession) error {
return e.txConn.ReleaseAll(ctx, safeSession)
}
-func (e *Executor) setVitessMetadata(ctx context.Context, name, value string) error {
+func (e *Executor) SetVitessMetadata(ctx context.Context, name, value string) error {
// TODO(kalfonso): move to its own acl check and consolidate into an acl component that can handle multiple operations (vschema, metadata)
user := callerid.ImmediateCallerIDFromContext(ctx)
allowed := vschemaacl.Authorized(user)
@@ -736,7 +742,7 @@ func (e *Executor) setVitessMetadata(ctx context.Context, name, value string) er
return ts.UpsertMetadata(ctx, name, value)
}
-func (e *Executor) showVitessMetadata(ctx context.Context, filter *sqlparser.ShowFilter) (*sqltypes.Result, error) {
+func (e *Executor) ShowVitessMetadata(ctx context.Context, filter *sqlparser.ShowFilter) (*sqltypes.Result, error) {
ts, err := e.serv.GetTopoServer()
if err != nil {
return nil, err
@@ -769,7 +775,7 @@ func (e *Executor) showVitessMetadata(ctx context.Context, filter *sqlparser.Sho
type tabletFilter func(tablet *topodatapb.Tablet, servingState string, primaryTermStartTime int64) bool
-func (e *Executor) showShards(ctx context.Context, filter *sqlparser.ShowFilter, destTabletType topodatapb.TabletType) (*sqltypes.Result, error) {
+func (e *Executor) ShowShards(ctx context.Context, filter *sqlparser.ShowFilter, destTabletType topodatapb.TabletType) (*sqltypes.Result, error) {
showVitessShardsFilters := func(filter *sqlparser.ShowFilter) ([]func(string) bool, []func(string, *topodatapb.ShardReference) bool) {
keyspaceFilters := []func(string) bool{}
shardFilters := []func(string, *topodatapb.ShardReference) bool{}
@@ -853,7 +859,7 @@ func (e *Executor) showShards(ctx context.Context, filter *sqlparser.ShowFilter,
}, nil
}
-func (e *Executor) showTablets(filter *sqlparser.ShowFilter) (*sqltypes.Result, error) {
+func (e *Executor) ShowTablets(filter *sqlparser.ShowFilter) (*sqltypes.Result, error) {
getTabletFilters := func(filter *sqlparser.ShowFilter) []tabletFilter {
var filters []tabletFilter
@@ -926,7 +932,7 @@ func (e *Executor) showTablets(filter *sqlparser.ShowFilter) (*sqltypes.Result,
}, nil
}
-func (e *Executor) showVitessReplicationStatus(ctx context.Context, filter *sqlparser.ShowFilter) (*sqltypes.Result, error) {
+func (e *Executor) ShowVitessReplicationStatus(ctx context.Context, filter *sqlparser.ShowFilter) (*sqltypes.Result, error) {
ctx, cancel := context.WithTimeout(ctx, healthCheckTimeout)
defer cancel()
rows := [][]sqltypes.Value{}
@@ -1073,26 +1079,14 @@ func (e *Executor) SaveVSchema(vschema *vindexes.VSchema, stats *VSchemaStats) {
// ParseDestinationTarget parses destination target string and sets default keyspace if possible.
func (e *Executor) ParseDestinationTarget(targetString string) (string, topodatapb.TabletType, key.Destination, error) {
- destKeyspace, destTabletType, dest, err := topoproto.ParseDestination(targetString, defaultTabletType)
- // Set default keyspace
- if destKeyspace == "" && len(e.VSchema().Keyspaces) == 1 {
- for k := range e.VSchema().Keyspaces {
- destKeyspace = k
- }
- }
- return destKeyspace, destTabletType, dest, err
-}
-
-type iQueryOption interface {
- cachePlan() bool
- getSelectLimit() int
+ return econtext.ParseDestinationTarget(targetString, defaultTabletType, e.VSchema())
}
// getPlan computes the plan for the given query. If one is in
// the cache, it reuses it.
func (e *Executor) getPlan(
ctx context.Context,
- vcursor *vcursorImpl,
+ vcursor *econtext.VCursorImpl,
query string,
stmt sqlparser.Statement,
comments sqlparser.MarginComments,
@@ -1130,10 +1124,10 @@ func (e *Executor) getPlan(
reservedVars,
bindVars,
parameterize,
- vcursor.keyspace,
- vcursor.safeSession.getSelectLimit(),
+ vcursor.GetKeyspace(),
+ vcursor.SafeSession.GetSelectLimit(),
setVarComment,
- vcursor.safeSession.SystemVariables,
+ vcursor.GetSystemVariablesCopy(),
vcursor.GetForeignKeyChecksState(),
vcursor,
)
@@ -1152,9 +1146,9 @@ func (e *Executor) getPlan(
return e.cacheAndBuildStatement(ctx, vcursor, query, stmt, reservedVars, bindVarNeeds, logStats)
}
-func (e *Executor) hashPlan(ctx context.Context, vcursor *vcursorImpl, query string) PlanCacheKey {
+func (e *Executor) hashPlan(ctx context.Context, vcursor *econtext.VCursorImpl, query string) PlanCacheKey {
hasher := vthash.New256()
- vcursor.keyForPlan(ctx, query, hasher)
+ vcursor.KeyForPlan(ctx, query, hasher)
var planKey PlanCacheKey
hasher.Sum(planKey[:0])
@@ -1163,19 +1157,22 @@ func (e *Executor) hashPlan(ctx context.Context, vcursor *vcursorImpl, query str
func (e *Executor) buildStatement(
ctx context.Context,
- vcursor *vcursorImpl,
+ vcursor *econtext.VCursorImpl,
query string,
stmt sqlparser.Statement,
reservedVars *sqlparser.ReservedVars,
bindVarNeeds *sqlparser.BindVarNeeds,
) (*engine.Plan, error) {
- plan, err := planbuilder.BuildFromStmt(ctx, query, stmt, reservedVars, vcursor, bindVarNeeds, enableOnlineDDL, enableDirectDDL)
+ cfg := &dynamicViperConfig{
+ onlineDDL: enableOnlineDDL,
+ directDDL: enableDirectDDL,
+ }
+ plan, err := planbuilder.BuildFromStmt(ctx, query, stmt, reservedVars, vcursor, bindVarNeeds, cfg)
if err != nil {
return nil, err
}
- plan.Warnings = vcursor.warnings
- vcursor.warnings = nil
+ plan.Warnings = vcursor.GetAndEmptyWarnings()
err = e.checkThatPlanIsValid(stmt, plan)
return plan, err
@@ -1183,14 +1180,14 @@ func (e *Executor) buildStatement(
func (e *Executor) cacheAndBuildStatement(
ctx context.Context,
- vcursor *vcursorImpl,
+ vcursor *econtext.VCursorImpl,
query string,
stmt sqlparser.Statement,
reservedVars *sqlparser.ReservedVars,
bindVarNeeds *sqlparser.BindVarNeeds,
logStats *logstats.LogStats,
) (*engine.Plan, error) {
- planCachable := sqlparser.CachePlan(stmt) && vcursor.safeSession.cachePlan()
+ planCachable := sqlparser.CachePlan(stmt) && vcursor.CachePlan()
if planCachable {
planKey := e.hashPlan(ctx, vcursor, query)
@@ -1208,7 +1205,7 @@ func (e *Executor) canNormalizeStatement(stmt sqlparser.Statement, setVarComment
return sqlparser.CanNormalize(stmt) || setVarComment != ""
}
-func prepareSetVarComment(vcursor *vcursorImpl, stmt sqlparser.Statement) (string, error) {
+func prepareSetVarComment(vcursor *econtext.VCursorImpl, stmt sqlparser.Statement) (string, error) {
if vcursor == nil || vcursor.Session().InReservedConn() {
return "", nil
}
@@ -1349,7 +1346,7 @@ func isValidPayloadSize(query string) bool {
}
// Prepare executes a prepare statements.
-func (e *Executor) Prepare(ctx context.Context, method string, safeSession *SafeSession, sql string, bindVars map[string]*querypb.BindVariable) (fld []*querypb.Field, err error) {
+func (e *Executor) Prepare(ctx context.Context, method string, safeSession *econtext.SafeSession, sql string, bindVars map[string]*querypb.BindVariable) (fld []*querypb.Field, err error) {
logStats := logstats.NewLogStats(ctx, method, sql, safeSession.GetSessionUUID(), bindVars)
fld, err = e.prepare(ctx, safeSession, sql, bindVars, logStats)
logStats.Error = err
@@ -1368,7 +1365,7 @@ func (e *Executor) Prepare(ctx context.Context, method string, safeSession *Safe
return fld, err
}
-func (e *Executor) prepare(ctx context.Context, safeSession *SafeSession, sql string, bindVars map[string]*querypb.BindVariable, logStats *logstats.LogStats) ([]*querypb.Field, error) {
+func (e *Executor) prepare(ctx context.Context, safeSession *econtext.SafeSession, sql string, bindVars map[string]*querypb.BindVariable, logStats *logstats.LogStats) ([]*querypb.Field, error) {
// Start an implicit transaction if necessary.
if !safeSession.Autocommit && !safeSession.InTransaction() {
if err := e.txConn.Begin(ctx, safeSession, nil); err != nil {
@@ -1404,9 +1401,41 @@ func (e *Executor) prepare(ctx context.Context, safeSession *SafeSession, sql st
return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "[BUG] unrecognized prepare statement: %s", sql)
}
-func (e *Executor) handlePrepare(ctx context.Context, safeSession *SafeSession, sql string, bindVars map[string]*querypb.BindVariable, logStats *logstats.LogStats) ([]*querypb.Field, error) {
+func (e *Executor) initVConfig(warnOnShardedOnly bool, pv plancontext.PlannerVersion) {
+ connCollation := collations.Unknown
+ if gw, isTabletGw := e.resolver.resolver.GetGateway().(*TabletGateway); isTabletGw {
+ connCollation = gw.DefaultConnCollation()
+ }
+ if connCollation == collations.Unknown {
+ connCollation = e.env.CollationEnv().DefaultConnectionCharset()
+ }
+
+ e.vConfig = econtext.VCursorConfig{
+ Collation: connCollation,
+ DefaultTabletType: defaultTabletType,
+ PlannerVersion: pv,
+
+ QueryTimeout: queryTimeout,
+ MaxMemoryRows: maxMemoryRows,
+
+ SetVarEnabled: sysVarSetEnabled,
+ EnableViews: enableViews,
+ ForeignKeyMode: fkMode(foreignKeyMode),
+ EnableShardRouting: enableShardRouting,
+ WarnShardedOnly: warnOnShardedOnly,
+
+ DBDDLPlugin: dbDDLPlugin,
+
+ WarmingReadsPercent: e.warmingReadsPercent,
+ WarmingReadsTimeout: warmingReadsQueryTimeout,
+ WarmingReadsChannel: e.warmingReadsChannel,
+ }
+}
+
+func (e *Executor) handlePrepare(ctx context.Context, safeSession *econtext.SafeSession, sql string, bindVars map[string]*querypb.BindVariable, logStats *logstats.LogStats) ([]*querypb.Field, error) {
query, comments := sqlparser.SplitMarginComments(sql)
- vcursor, _ := newVCursorImpl(safeSession, comments, e, logStats, e.vm, e.VSchema(), e.resolver.resolver, e.serv, e.warnShardedOnly, e.pv)
+
+ vcursor, _ := econtext.NewVCursorImpl(safeSession, comments, e, logStats, e.vm, e.VSchema(), e.resolver.resolver, e.serv, nullResultsObserver{}, e.vConfig)
stmt, reservedVars, err := parseAndValidateQuery(query, e.env.Parser())
if err != nil {
@@ -1455,17 +1484,17 @@ func parseAndValidateQuery(query string, parser *sqlparser.Parser) (sqlparser.St
}
// ExecuteMultiShard implements the IExecutor interface
-func (e *Executor) ExecuteMultiShard(ctx context.Context, primitive engine.Primitive, rss []*srvtopo.ResolvedShard, queries []*querypb.BoundQuery, session *SafeSession, autocommit bool, ignoreMaxMemoryRows bool, resultsObserver resultsObserver) (qr *sqltypes.Result, errs []error) {
+func (e *Executor) ExecuteMultiShard(ctx context.Context, primitive engine.Primitive, rss []*srvtopo.ResolvedShard, queries []*querypb.BoundQuery, session *econtext.SafeSession, autocommit bool, ignoreMaxMemoryRows bool, resultsObserver econtext.ResultsObserver) (qr *sqltypes.Result, errs []error) {
return e.scatterConn.ExecuteMultiShard(ctx, primitive, rss, queries, session, autocommit, ignoreMaxMemoryRows, resultsObserver)
}
// StreamExecuteMulti implements the IExecutor interface
-func (e *Executor) StreamExecuteMulti(ctx context.Context, primitive engine.Primitive, query string, rss []*srvtopo.ResolvedShard, vars []map[string]*querypb.BindVariable, session *SafeSession, autocommit bool, callback func(reply *sqltypes.Result) error, resultsObserver resultsObserver) []error {
+func (e *Executor) StreamExecuteMulti(ctx context.Context, primitive engine.Primitive, query string, rss []*srvtopo.ResolvedShard, vars []map[string]*querypb.BindVariable, session *econtext.SafeSession, autocommit bool, callback func(reply *sqltypes.Result) error, resultsObserver econtext.ResultsObserver) []error {
return e.scatterConn.StreamExecuteMulti(ctx, primitive, query, rss, vars, session, autocommit, callback, resultsObserver)
}
// ExecuteLock implements the IExecutor interface
-func (e *Executor) ExecuteLock(ctx context.Context, rs *srvtopo.ResolvedShard, query *querypb.BoundQuery, session *SafeSession, lockFuncType sqlparser.LockingFuncType) (*sqltypes.Result, error) {
+func (e *Executor) ExecuteLock(ctx context.Context, rs *srvtopo.ResolvedShard, query *querypb.BoundQuery, session *econtext.SafeSession, lockFuncType sqlparser.LockingFuncType) (*sqltypes.Result, error) {
return e.scatterConn.ExecuteLock(ctx, rs, query, session, lockFuncType)
}
@@ -1576,25 +1605,25 @@ func getTabletThrottlerStatus(tabletHostPort string) (string, error) {
}
// ReleaseLock implements the IExecutor interface
-func (e *Executor) ReleaseLock(ctx context.Context, session *SafeSession) error {
+func (e *Executor) ReleaseLock(ctx context.Context, session *econtext.SafeSession) error {
return e.txConn.ReleaseLock(ctx, session)
}
-// planPrepareStmt implements the IExecutor interface
-func (e *Executor) planPrepareStmt(ctx context.Context, vcursor *vcursorImpl, query string) (*engine.Plan, sqlparser.Statement, error) {
+// PlanPrepareStmt implements the IExecutor interface
+func (e *Executor) PlanPrepareStmt(ctx context.Context, vcursor *econtext.VCursorImpl, query string) (*engine.Plan, sqlparser.Statement, error) {
stmt, reservedVars, err := parseAndValidateQuery(query, e.env.Parser())
if err != nil {
return nil, nil, err
}
// creating this log stats to not interfere with the original log stats.
- lStats := logstats.NewLogStats(ctx, "prepare", query, vcursor.safeSession.SessionUUID, nil)
+ lStats := logstats.NewLogStats(ctx, "prepare", query, vcursor.Session().GetSessionUUID(), nil)
plan, err := e.getPlan(
ctx,
vcursor,
query,
sqlparser.Clone(stmt),
- vcursor.marginComments,
+ vcursor.GetMarginComments(),
map[string]*querypb.BindVariable{},
reservedVars, /* normalize */
false,
@@ -1616,7 +1645,7 @@ func (e *Executor) Close() {
e.plans.Close()
}
-func (e *Executor) environment() *vtenv.Environment {
+func (e *Executor) Environment() *vtenv.Environment {
return e.env
}
@@ -1628,6 +1657,10 @@ func (e *Executor) UnresolvedTransactions(ctx context.Context, targets []*queryp
return e.txConn.UnresolvedTransactions(ctx, targets)
}
+func (e *Executor) AddWarningCount(name string, count int64) {
+ warnings.Add(name, count)
+}
+
type (
errorTransformer interface {
TransformError(err error) error
@@ -1638,3 +1671,16 @@ type (
func (nullErrorTransformer) TransformError(err error) error {
return err
}
+
+func fkMode(foreignkey string) vschemapb.Keyspace_ForeignKeyMode {
+ switch foreignkey {
+ case "disallow":
+ return vschemapb.Keyspace_disallow
+ case "managed":
+ return vschemapb.Keyspace_managed
+ case "unmanaged":
+ return vschemapb.Keyspace_unmanaged
+
+ }
+ return vschemapb.Keyspace_unspecified
+}
diff --git a/go/vt/vtgate/executor_ddl_test.go b/go/vt/vtgate/executor_ddl_test.go
index 3274fd94475..bf117856e08 100644
--- a/go/vt/vtgate/executor_ddl_test.go
+++ b/go/vt/vtgate/executor_ddl_test.go
@@ -21,14 +21,15 @@ import (
"testing"
vtgatepb "vitess.io/vitess/go/vt/proto/vtgate"
+ econtext "vitess.io/vitess/go/vt/vtgate/executorcontext"
"github.com/stretchr/testify/require"
)
func TestDDLFlags(t *testing.T) {
defer func() {
- enableOnlineDDL = true
- enableDirectDDL = true
+ enableOnlineDDL.Set(true)
+ enableDirectDDL.Set(true)
}()
testcases := []struct {
enableDirectDDL bool
@@ -56,9 +57,9 @@ func TestDDLFlags(t *testing.T) {
for _, testcase := range testcases {
t.Run(fmt.Sprintf("%s-%v-%v", testcase.sql, testcase.enableDirectDDL, testcase.enableOnlineDDL), func(t *testing.T) {
executor, _, _, _, ctx := createExecutorEnv(t)
- session := NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded})
- enableDirectDDL = testcase.enableDirectDDL
- enableOnlineDDL = testcase.enableOnlineDDL
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded})
+ enableDirectDDL.Set(testcase.enableDirectDDL)
+ enableOnlineDDL.Set(testcase.enableOnlineDDL)
_, err := executor.Execute(ctx, nil, "TestDDLFlags", session, testcase.sql, nil)
if testcase.wantErr {
require.EqualError(t, err, testcase.err)
diff --git a/go/vt/vtgate/executor_dml_test.go b/go/vt/vtgate/executor_dml_test.go
index 3dce4e212ef..792e197f48d 100644
--- a/go/vt/vtgate/executor_dml_test.go
+++ b/go/vt/vtgate/executor_dml_test.go
@@ -25,6 +25,8 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
+ econtext "vitess.io/vitess/go/vt/vtgate/executorcontext"
+
"vitess.io/vitess/go/mysql/config"
"vitess.io/vitess/go/mysql/sqlerror"
"vitess.io/vitess/go/sqltypes"
@@ -135,7 +137,6 @@ func TestUpdateEqual(t *testing.T) {
func TestUpdateFromSubQuery(t *testing.T) {
executor, sbc1, sbc2, _, ctx := createExecutorEnv(t)
- executor.pv = querypb.ExecuteOptions_Gen4
logChan := executor.queryLogger.Subscribe("Test")
defer executor.queryLogger.Unsubscribe(logChan)
@@ -234,7 +235,7 @@ func TestUpdateInTransactionLookupDefaultReadLock(t *testing.T) {
)}
executor, sbc1, sbc2, sbcLookup, ctx := createCustomExecutorSetValues(t, executorVSchema, res)
- safeSession := NewSafeSession(&vtgatepb.Session{InTransaction: true})
+ safeSession := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true})
_, err := executorExecSession(ctx,
executor,
"update t2_lookup set lu_col = 5 where nv_lu_col = 2",
@@ -296,7 +297,7 @@ func TestUpdateInTransactionLookupExclusiveReadLock(t *testing.T) {
)}
executor, sbc1, sbc2, sbcLookup, ctx := createCustomExecutorSetValues(t, executorVSchema, res)
- safeSession := NewSafeSession(&vtgatepb.Session{InTransaction: true})
+ safeSession := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true})
_, err := executorExecSession(ctx,
executor,
"update t2_lookup set lu_col = 5 where erl_lu_col = 2",
@@ -358,7 +359,7 @@ func TestUpdateInTransactionLookupSharedReadLock(t *testing.T) {
)}
executor, sbc1, sbc2, sbcLookup, ctx := createCustomExecutorSetValues(t, executorVSchema, res)
- safeSession := NewSafeSession(&vtgatepb.Session{InTransaction: true})
+ safeSession := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true})
_, err := executorExecSession(ctx,
executor,
"update t2_lookup set lu_col = 5 where srl_lu_col = 2",
@@ -420,7 +421,7 @@ func TestUpdateInTransactionLookupNoReadLock(t *testing.T) {
)}
executor, sbc1, sbc2, sbcLookup, ctx := createCustomExecutorSetValues(t, executorVSchema, res)
- safeSession := NewSafeSession(&vtgatepb.Session{InTransaction: true})
+ safeSession := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true})
_, err := executorExecSession(ctx,
executor,
"update t2_lookup set lu_col = 5 where nrl_lu_col = 2",
@@ -2066,7 +2067,7 @@ func TestInsertPartialFail1(t *testing.T) {
context.Background(),
nil,
"TestExecute",
- NewSafeSession(&vtgatepb.Session{InTransaction: true}),
+ econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true}),
"insert into user(id, v, name) values (1, 2, 'myname')",
nil,
)
@@ -2082,7 +2083,7 @@ func TestInsertPartialFail2(t *testing.T) {
// Make the second DML fail, it should result in a rollback.
sbc1.MustFailExecute[sqlparser.StmtInsert] = 1
- safeSession := NewSafeSession(&vtgatepb.Session{InTransaction: true})
+ safeSession := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true})
_, err := executor.Execute(
context.Background(),
nil,
@@ -2656,7 +2657,7 @@ func TestReservedConnDML(t *testing.T) {
logChan := executor.queryLogger.Subscribe("TestReservedConnDML")
defer executor.queryLogger.Unsubscribe(logChan)
- session := NewAutocommitSession(&vtgatepb.Session{EnableSystemSettings: true})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{EnableSystemSettings: true})
_, err := executor.Execute(ctx, nil, "TestReservedConnDML", session, "use "+KsTestUnsharded, nil)
require.NoError(t, err)
@@ -2708,7 +2709,7 @@ func TestStreamingDML(t *testing.T) {
logChan := executor.queryLogger.Subscribe(method)
defer executor.queryLogger.Unsubscribe(logChan)
- session := NewAutocommitSession(&vtgatepb.Session{})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{})
tcases := []struct {
query string
@@ -2792,7 +2793,7 @@ func TestPartialVindexInsertQueryFailure(t *testing.T) {
logChan := executor.queryLogger.Subscribe("Test")
defer executor.queryLogger.Unsubscribe(logChan)
- session := NewAutocommitSession(&vtgatepb.Session{})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{})
require.True(t, session.GetAutocommit())
require.False(t, session.InTransaction())
@@ -2845,7 +2846,7 @@ func TestPartialVindexInsertQueryFailureAutoCommit(t *testing.T) {
logChan := executor.queryLogger.Subscribe("Test")
defer executor.queryLogger.Unsubscribe(logChan)
- session := NewAutocommitSession(&vtgatepb.Session{})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{})
require.True(t, session.GetAutocommit())
require.False(t, session.InTransaction())
@@ -2886,7 +2887,7 @@ func TestPartialVindexInsertQueryFailureAutoCommit(t *testing.T) {
func TestMultiInternalSavepoint(t *testing.T) {
executor, sbc1, sbc2, _, ctx := createExecutorEnv(t)
- session := NewAutocommitSession(&vtgatepb.Session{})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{})
_, err := executorExecSession(ctx, executor, "begin", nil, session.Session)
require.NoError(t, err)
@@ -2935,7 +2936,7 @@ func TestInsertSelectFromDual(t *testing.T) {
logChan := executor.queryLogger.Subscribe("TestInsertSelect")
defer executor.queryLogger.Unsubscribe(logChan)
- session := NewAutocommitSession(&vtgatepb.Session{})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{})
query := "insert into user(id, v, name) select 1, 2, 'myname' from dual"
wantQueries := []*querypb.BoundQuery{{
@@ -2990,7 +2991,7 @@ func TestInsertSelectFromTable(t *testing.T) {
logChan := executor.queryLogger.Subscribe("TestInsertSelect")
defer executor.queryLogger.Unsubscribe(logChan)
- session := NewAutocommitSession(&vtgatepb.Session{})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{})
query := "insert into user(id, name) select c1, c2 from music"
wantQueries := []*querypb.BoundQuery{{
@@ -3140,3 +3141,62 @@ func TestDeleteMultiTable(t *testing.T) {
// delete from `user` where (`user`.id) in ::dml_vals - 1 shard
testQueryLog(t, executor, logChan, "TestExecute", "DELETE", "delete `user` from `user` join music on `user`.col = music.col where music.user_id = 1", 18)
}
+
+// TestSessionRowsAffected test that rowsAffected is set correctly for each shard session.
+func TestSessionRowsAffected(t *testing.T) {
+ method := t.Name()
+ executor, _, sbc4060, _, ctx := createExecutorEnv(t)
+
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{})
+
+ // start the transaction
+ _, err := executor.Execute(ctx, nil, method, session, "begin", nil)
+ require.NoError(t, err)
+
+ // -20 - select query
+ _, err = executor.Execute(ctx, nil, method, session, "select * from user where id = 1", nil)
+ require.NoError(t, err)
+ require.Len(t, session.ShardSessions, 1)
+ require.False(t, session.ShardSessions[0].RowsAffected)
+
+ // -20 - update query (rows affected)
+ _, err = executor.Execute(ctx, nil, method, session, "update user set foo = 41 where id = 1", nil)
+ require.NoError(t, err)
+ require.True(t, session.ShardSessions[0].RowsAffected)
+
+ // e0- - select query
+ _, err = executor.Execute(ctx, nil, method, session, "select * from user where id = 7", nil)
+ require.NoError(t, err)
+ assert.Len(t, session.ShardSessions, 2)
+ require.False(t, session.ShardSessions[1].RowsAffected)
+
+ // c0-e0 - update query (rows affected)
+ _, err = executor.Execute(ctx, nil, method, session, "update user set foo = 42 where id = 5", nil)
+ require.NoError(t, err)
+ require.Len(t, session.ShardSessions, 3)
+ require.True(t, session.ShardSessions[2].RowsAffected)
+
+ // 40-60 - update query (no rows affected)
+ sbc4060.SetResults([]*sqltypes.Result{{RowsAffected: 0}})
+ _, err = executor.Execute(ctx, nil, method, session, "update user set foo = 42 where id = 3", nil)
+ require.NoError(t, err)
+ assert.Len(t, session.ShardSessions, 4)
+ require.False(t, session.ShardSessions[3].RowsAffected)
+
+ // 40-60 - select query
+ _, err = executor.Execute(ctx, nil, method, session, "select * from user where id = 3", nil)
+ require.NoError(t, err)
+ require.False(t, session.ShardSessions[3].RowsAffected)
+
+ // 40-60 - delete query (rows affected)
+ _, err = executor.Execute(ctx, nil, method, session, "delete from user where id = 3", nil)
+ require.NoError(t, err)
+ require.True(t, session.ShardSessions[0].RowsAffected)
+ require.False(t, session.ShardSessions[1].RowsAffected)
+ require.True(t, session.ShardSessions[2].RowsAffected)
+ require.True(t, session.ShardSessions[3].RowsAffected)
+
+ _, err = executor.Execute(ctx, nil, method, session, "commit", nil)
+ require.NoError(t, err)
+ require.Zero(t, session.ShardSessions)
+}
diff --git a/go/vt/vtgate/executor_framework_test.go b/go/vt/vtgate/executor_framework_test.go
index 332139c4a78..2ee3425209f 100644
--- a/go/vt/vtgate/executor_framework_test.go
+++ b/go/vt/vtgate/executor_framework_test.go
@@ -28,6 +28,8 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
+ econtext "vitess.io/vitess/go/vt/vtgate/executorcontext"
+
"vitess.io/vitess/go/cache/theine"
"vitess.io/vitess/go/constants/sidecar"
"vitess.io/vitess/go/sqltypes"
@@ -307,7 +309,7 @@ func executorExecSession(ctx context.Context, executor *Executor, sql string, bv
ctx,
nil,
"TestExecute",
- NewSafeSession(session),
+ econtext.NewSafeSession(session),
sql,
bv)
}
@@ -320,7 +322,7 @@ func executorPrepare(ctx context.Context, executor *Executor, session *vtgatepb.
return executor.Prepare(
ctx,
"TestExecute",
- NewSafeSession(session),
+ econtext.NewSafeSession(session),
sql,
bv)
}
@@ -331,7 +333,7 @@ func executorStream(ctx context.Context, executor *Executor, sql string) (qr *sq
ctx,
nil,
"TestExecuteStream",
- NewSafeSession(nil),
+ econtext.NewSafeSession(nil),
sql,
nil,
func(qr *sqltypes.Result) error {
diff --git a/go/vt/vtgate/executor_scatter_stats_test.go b/go/vt/vtgate/executor_scatter_stats_test.go
index 84dd2744e8b..b665f850a23 100644
--- a/go/vt/vtgate/executor_scatter_stats_test.go
+++ b/go/vt/vtgate/executor_scatter_stats_test.go
@@ -24,12 +24,13 @@ import (
"github.com/stretchr/testify/require"
vtgatepb "vitess.io/vitess/go/vt/proto/vtgate"
+ econtext "vitess.io/vitess/go/vt/vtgate/executorcontext"
)
func TestScatterStatsWithNoScatterQuery(t *testing.T) {
executor, _, _, _, ctx := createExecutorEnv(t)
- session := NewSafeSession(&vtgatepb.Session{TargetString: "@primary"})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@primary"})
_, err := executor.Execute(ctx, nil, "TestExecutorResultsExceeded", session, "select * from main1", nil)
require.NoError(t, err)
@@ -41,7 +42,7 @@ func TestScatterStatsWithNoScatterQuery(t *testing.T) {
func TestScatterStatsWithSingleScatterQuery(t *testing.T) {
executor, _, _, _, ctx := createExecutorEnv(t)
- session := NewSafeSession(&vtgatepb.Session{TargetString: "@primary"})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@primary"})
_, err := executor.Execute(ctx, nil, "TestExecutorResultsExceeded", session, "select * from user", nil)
require.NoError(t, err)
@@ -53,7 +54,7 @@ func TestScatterStatsWithSingleScatterQuery(t *testing.T) {
func TestScatterStatsHttpWriting(t *testing.T) {
executor, _, _, _, ctx := createExecutorEnv(t)
- session := NewSafeSession(&vtgatepb.Session{TargetString: "@primary"})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@primary"})
_, err := executor.Execute(ctx, nil, "TestExecutorResultsExceeded", session, "select * from user", nil)
require.NoError(t, err)
diff --git a/go/vt/vtgate/executor_select_test.go b/go/vt/vtgate/executor_select_test.go
index 2e95e438c22..86aafaefba4 100644
--- a/go/vt/vtgate/executor_select_test.go
+++ b/go/vt/vtgate/executor_select_test.go
@@ -30,6 +30,8 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
+ econtext "vitess.io/vitess/go/vt/vtgate/executorcontext"
+
_flag "vitess.io/vitess/go/internal/flag"
"vitess.io/vitess/go/mysql/collations"
"vitess.io/vitess/go/sqltypes"
@@ -59,7 +61,7 @@ func TestSelectNext(t *testing.T) {
}}
// Autocommit
- session := NewAutocommitSession(&vtgatepb.Session{})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{})
_, err := executor.Execute(context.Background(), nil, "TestSelectNext", session, query, bv)
require.NoError(t, err)
@@ -69,7 +71,7 @@ func TestSelectNext(t *testing.T) {
sbclookup.Queries = nil
// Txn
- session = NewAutocommitSession(&vtgatepb.Session{})
+ session = econtext.NewAutocommitSession(&vtgatepb.Session{})
session.Session.InTransaction = true
_, err = executor.Execute(context.Background(), nil, "TestSelectNext", session, query, bv)
require.NoError(t, err)
@@ -80,7 +82,7 @@ func TestSelectNext(t *testing.T) {
sbclookup.Queries = nil
// Reserve
- session = NewAutocommitSession(&vtgatepb.Session{})
+ session = econtext.NewAutocommitSession(&vtgatepb.Session{})
session.Session.InReservedConn = true
_, err = executor.Execute(context.Background(), nil, "TestSelectNext", session, query, bv)
require.NoError(t, err)
@@ -91,7 +93,7 @@ func TestSelectNext(t *testing.T) {
sbclookup.Queries = nil
// Reserve and Txn
- session = NewAutocommitSession(&vtgatepb.Session{})
+ session = econtext.NewAutocommitSession(&vtgatepb.Session{})
session.Session.InReservedConn = true
session.Session.InTransaction = true
_, err = executor.Execute(context.Background(), nil, "TestSelectNext", session, query, bv)
@@ -107,7 +109,7 @@ func TestSelectDBA(t *testing.T) {
query := "select * from INFORMATION_SCHEMA.foo"
_, err := executor.Execute(context.Background(), nil, "TestSelectDBA",
- NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}),
+ econtext.NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}),
query, map[string]*querypb.BindVariable{},
)
require.NoError(t, err)
@@ -117,7 +119,7 @@ func TestSelectDBA(t *testing.T) {
sbc1.Queries = nil
query = "SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES ist WHERE ist.table_schema = 'performance_schema' AND ist.table_name = 'foo'"
_, err = executor.Execute(context.Background(), nil, "TestSelectDBA",
- NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}),
+ econtext.NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}),
query, map[string]*querypb.BindVariable{},
)
require.NoError(t, err)
@@ -133,7 +135,7 @@ func TestSelectDBA(t *testing.T) {
sbc1.Queries = nil
query = "select 1 from information_schema.table_constraints where constraint_schema = 'vt_ks' and table_name = 'user'"
_, err = executor.Execute(context.Background(), nil, "TestSelectDBA",
- NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}),
+ econtext.NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}),
query, map[string]*querypb.BindVariable{},
)
require.NoError(t, err)
@@ -149,7 +151,7 @@ func TestSelectDBA(t *testing.T) {
sbc1.Queries = nil
query = "select 1 from information_schema.table_constraints where constraint_schema = 'vt_ks'"
_, err = executor.Execute(context.Background(), nil, "TestSelectDBA",
- NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}),
+ econtext.NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}),
query, map[string]*querypb.BindVariable{},
)
require.NoError(t, err)
@@ -167,7 +169,7 @@ func TestSystemVariablesMySQLBelow80(t *testing.T) {
executor.normalize = true
setVarEnabled = true
- session := NewAutocommitSession(&vtgatepb.Session{EnableSystemSettings: true, TargetString: "TestExecutor"})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{EnableSystemSettings: true, TargetString: "TestExecutor"})
sbc1.SetResults([]*sqltypes.Result{{
Fields: []*querypb.Field{
@@ -199,12 +201,8 @@ func TestSystemVariablesMySQLBelow80(t *testing.T) {
func TestSystemVariablesWithSetVarDisabled(t *testing.T) {
executor, sbc1, _, _, _ := createCustomExecutor(t, "{}", "8.0.0")
executor.normalize = true
-
- setVarEnabled = false
- defer func() {
- setVarEnabled = true
- }()
- session := NewAutocommitSession(&vtgatepb.Session{EnableSystemSettings: true, TargetString: "TestExecutor"})
+ executor.vConfig.SetVarEnabled = false
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{EnableSystemSettings: true, TargetString: "TestExecutor"})
sbc1.SetResults([]*sqltypes.Result{{
Fields: []*querypb.Field{
@@ -237,7 +235,7 @@ func TestSetSystemVariablesTx(t *testing.T) {
executor, sbc1, _, _, _ := createCustomExecutor(t, "{}", "8.0.1")
executor.normalize = true
- session := NewAutocommitSession(&vtgatepb.Session{EnableSystemSettings: true, TargetString: "TestExecutor"})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{EnableSystemSettings: true, TargetString: "TestExecutor"})
_, err := executor.Execute(context.Background(), nil, "TestBegin", session, "begin", map[string]*querypb.BindVariable{})
require.NoError(t, err)
@@ -283,7 +281,7 @@ func TestSetSystemVariables(t *testing.T) {
executor, _, _, lookup, _ := createExecutorEnv(t)
executor.normalize = true
- session := NewAutocommitSession(&vtgatepb.Session{EnableSystemSettings: true, TargetString: KsTestUnsharded, SystemVariables: map[string]string{}})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{EnableSystemSettings: true, TargetString: KsTestUnsharded, SystemVariables: map[string]string{}})
// Set @@sql_mode and execute a select statement. We should have SET_VAR in the select statement
@@ -394,7 +392,7 @@ func TestSetSystemVariablesWithReservedConnection(t *testing.T) {
executor, sbc1, _, _, _ := createExecutorEnv(t)
executor.normalize = true
- session := NewAutocommitSession(&vtgatepb.Session{EnableSystemSettings: true, SystemVariables: map[string]string{}})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{EnableSystemSettings: true, SystemVariables: map[string]string{}})
sbc1.SetResults([]*sqltypes.Result{{
Fields: []*querypb.Field{
@@ -437,7 +435,7 @@ func TestSelectVindexFunc(t *testing.T) {
executor, _, _, _, _ := createExecutorEnv(t)
query := "select * from hash_index where id = 1"
- session := NewAutocommitSession(&vtgatepb.Session{})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{})
_, err := executor.Execute(context.Background(), nil, "TestSelectVindexFunc", session, query, nil)
require.ErrorContains(t, err, "VT09005: no database selected")
@@ -450,7 +448,7 @@ func TestCreateTableValidTimestamp(t *testing.T) {
executor, sbc1, _, _, _ := createExecutorEnv(t)
executor.normalize = true
- session := NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor", SystemVariables: map[string]string{"sql_mode": "ALLOW_INVALID_DATES"}})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor", SystemVariables: map[string]string{"sql_mode": "ALLOW_INVALID_DATES"}})
query := "create table aa(t timestamp default 0)"
_, err := executor.Execute(context.Background(), nil, "TestSelect", session, query, map[string]*querypb.BindVariable{})
@@ -468,11 +466,10 @@ func TestCreateTableValidTimestamp(t *testing.T) {
func TestGen4SelectDBA(t *testing.T) {
executor, sbc1, _, _, _ := createExecutorEnv(t)
executor.normalize = true
- executor.pv = querypb.ExecuteOptions_Gen4
query := "select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS"
_, err := executor.Execute(context.Background(), nil, "TestSelectDBA",
- NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}),
+ econtext.NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}),
query, map[string]*querypb.BindVariable{},
)
require.NoError(t, err)
@@ -483,7 +480,7 @@ func TestGen4SelectDBA(t *testing.T) {
sbc1.Queries = nil
query = "SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES ist WHERE ist.table_schema = 'performance_schema' AND ist.table_name = 'foo'"
_, err = executor.Execute(context.Background(), nil, "TestSelectDBA",
- NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}),
+ econtext.NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}),
query, map[string]*querypb.BindVariable{},
)
require.NoError(t, err)
@@ -501,7 +498,7 @@ func TestGen4SelectDBA(t *testing.T) {
sbc1.Queries = nil
query = "select 1 from information_schema.table_constraints where constraint_schema = 'vt_ks' and table_name = 'user'"
_, err = executor.Execute(context.Background(), nil, "TestSelectDBA",
- NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}),
+ econtext.NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}),
query, map[string]*querypb.BindVariable{},
)
require.NoError(t, err)
@@ -519,7 +516,7 @@ func TestGen4SelectDBA(t *testing.T) {
sbc1.Queries = nil
query = "select 1 from information_schema.table_constraints where constraint_schema = 'vt_ks'"
- _, err = executor.Execute(context.Background(), nil, "TestSelectDBA", NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}), query, map[string]*querypb.BindVariable{})
+ _, err = executor.Execute(context.Background(), nil, "TestSelectDBA", econtext.NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}), query, map[string]*querypb.BindVariable{})
require.NoError(t, err)
wantQueries = []*querypb.BoundQuery{{
Sql: "select :vtg1 /* INT64 */ from information_schema.table_constraints where constraint_schema = :__vtschemaname /* VARCHAR */",
@@ -534,7 +531,7 @@ func TestGen4SelectDBA(t *testing.T) {
sbc1.Queries = nil
query = "select t.table_schema,t.table_name,c.column_name,c.column_type from tables t join columns c on c.table_schema = t.table_schema and c.table_name = t.table_name where t.table_schema = 'TestExecutor' and c.table_schema = 'TestExecutor' order by t.table_schema,t.table_name,c.column_name"
_, err = executor.Execute(context.Background(), nil, "TestSelectDBA",
- NewSafeSession(&vtgatepb.Session{TargetString: "information_schema"}),
+ econtext.NewSafeSession(&vtgatepb.Session{TargetString: "information_schema"}),
query, map[string]*querypb.BindVariable{},
)
require.NoError(t, err)
@@ -651,7 +648,7 @@ func TestStreamBuffering(t *testing.T) {
context.Background(),
nil,
"TestStreamBuffering",
- NewSafeSession(session),
+ econtext.NewSafeSession(session),
"select id from music_user_map where id = 1",
nil,
func(qr *sqltypes.Result) error {
@@ -723,7 +720,7 @@ func TestStreamLimitOffset(t *testing.T) {
context.Background(),
nil,
"TestStreamLimitOffset",
- NewSafeSession(session),
+ econtext.NewSafeSession(session),
"select id, textcol from user order by id limit 2 offset 2",
nil,
func(qr *sqltypes.Result) error {
@@ -1083,7 +1080,7 @@ func TestSelectDatabase(t *testing.T) {
newSession := &vtgatepb.Session{
TargetString: "@primary",
}
- session := NewSafeSession(newSession)
+ session := econtext.NewSafeSession(newSession)
session.TargetString = "TestExecutor@primary"
result, err := executor.Execute(
context.Background(),
@@ -1283,7 +1280,6 @@ func TestSelectEqual(t *testing.T) {
func TestSelectINFromOR(t *testing.T) {
executor, sbc1, _, _, ctx := createExecutorEnv(t)
- executor.pv = querypb.ExecuteOptions_Gen4
session := &vtgatepb.Session{
TargetString: "@primary",
@@ -2951,7 +2947,7 @@ func TestSubQueryAndQueryWithLimit(t *testing.T) {
sbc1.SetResults(result1)
sbc2.SetResults(result2)
- exec(executor, NewSafeSession(&vtgatepb.Session{
+ exec(executor, econtext.NewSafeSession(&vtgatepb.Session{
TargetString: "@primary",
}), "select id1, id2 from t1 where id1 >= ( select id1 from t1 order by id1 asc limit 1) limit 100")
require.Equal(t, 2, len(sbc1.Queries))
@@ -2966,6 +2962,67 @@ func TestSubQueryAndQueryWithLimit(t *testing.T) {
assert.Equal(t, `type:INT64 value:"100"`, sbc2.Queries[1].BindVariables["__upper_limit"].String())
}
+func TestSelectUsingMultiEqualOnLookupColumn(t *testing.T) {
+ executor, sbc1, sbc2, sbclookup, _ := createExecutorEnv(t)
+
+ // No results on shard `-20` (`sbc1`), but some lookup results on shard `40-60` (`sbc2`)
+ sbclookup.SetResults([]*sqltypes.Result{{
+ Fields: []*querypb.Field{
+ {Name: "lu_col", Type: sqltypes.Int32, Charset: collations.CollationBinaryID, Flags: uint32(querypb.MySqlFlag_NUM_FLAG)},
+ {Name: "keyspace_id", Type: sqltypes.VarBinary, Charset: collations.CollationBinaryID, Flags: uint32(querypb.MySqlFlag_BINARY_FLAG)},
+ },
+ Rows: [][]sqltypes.Value{{
+ sqltypes.NewInt32(2),
+ sqltypes.MakeTrusted(sqltypes.VarBinary, []byte("\x45")),
+ }},
+ }})
+
+ sbc1.SetResults([]*sqltypes.Result{{
+ Fields: []*querypb.Field{
+ {Name: "nv_lu_col", Type: sqltypes.Int32, Charset: collations.CollationBinaryID, Flags: uint32(querypb.MySqlFlag_NUM_FLAG)},
+ {Name: "other", Type: sqltypes.VarChar, Charset: collations.CollationUtf8mb4ID},
+ },
+ Rows: [][]sqltypes.Value{},
+ }})
+
+ sbc2.SetResults([]*sqltypes.Result{{
+ Fields: []*querypb.Field{
+ {Name: "nv_lu_col", Type: sqltypes.Int32, Charset: collations.CollationBinaryID, Flags: uint32(querypb.MySqlFlag_NUM_FLAG)},
+ {Name: "other", Type: sqltypes.VarChar, Charset: collations.CollationUtf8mb4ID},
+ },
+ Rows: [][]sqltypes.Value{{
+ sqltypes.NewInt32(2),
+ sqltypes.NewVarChar("baz"),
+ }},
+ }})
+
+ result, err := exec(executor, econtext.NewSafeSession(&vtgatepb.Session{
+ TargetString: KsTestSharded,
+ }), "select nv_lu_col, other from t2_lookup WHERE (nv_lu_col = 1 AND other = 'bar') OR (nv_lu_col = 2 AND other = 'baz') OR (nv_lu_col = 3 AND other = 'qux') OR (nv_lu_col = 4 AND other = 'brz') OR (nv_lu_col = 5 AND other = 'brz')")
+
+ require.NoError(t, err)
+
+ require.Len(t, sbc1.Queries, 0)
+ require.Len(t, sbc2.Queries, 1)
+
+ require.Equal(t, []*querypb.BoundQuery{{
+ Sql: "select nv_lu_col, other from t2_lookup where nv_lu_col = 1 and other = 'bar' or nv_lu_col = 2 and other = 'baz' or nv_lu_col = 3 and other = 'qux' or nv_lu_col = 4 and other = 'brz' or nv_lu_col = 5 and other = 'brz'",
+ BindVariables: map[string]*querypb.BindVariable{},
+ }}, sbc2.Queries)
+
+ wantResult := &sqltypes.Result{
+ Fields: []*querypb.Field{
+ {Name: "nv_lu_col", Type: sqltypes.Int32, Charset: collations.CollationBinaryID, Flags: uint32(querypb.MySqlFlag_NUM_FLAG)},
+ {Name: "other", Type: sqltypes.VarChar, Charset: collations.CollationUtf8mb4ID},
+ },
+ Rows: [][]sqltypes.Value{{
+ sqltypes.NewInt32(2),
+ sqltypes.NewVarChar("baz"),
+ }},
+ }
+ require.Equal(t, wantResult, result)
+}
+
func TestCrossShardSubqueryStream(t *testing.T) {
executor, sbc1, sbc2, _, ctx := createExecutorEnv(t)
result1 := []*sqltypes.Result{{
@@ -3136,7 +3193,7 @@ func TestSelectWithUnionAll(t *testing.T) {
func TestSelectLock(t *testing.T) {
executor, sbc1, _, _, _ := createExecutorEnv(t)
- session := NewSafeSession(nil)
+ session := econtext.NewSafeSession(nil)
session.Session.InTransaction = true
session.ShardSessions = []*vtgatepb.Session_ShardSession{{
Target: &querypb.Target{
@@ -3204,7 +3261,7 @@ func TestLockReserve(t *testing.T) {
"select release_lock('lock name') from dual",
}
- session := NewAutocommitSession(&vtgatepb.Session{})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{})
for _, sql := range tcases {
t.Run(sql, func(t *testing.T) {
@@ -3222,7 +3279,7 @@ func TestLockReserve(t *testing.T) {
func TestSelectFromInformationSchema(t *testing.T) {
executor, sbc1, _, _, _ := createExecutorEnv(t)
- session := NewSafeSession(nil)
+ session := econtext.NewSafeSession(nil)
// check failure when trying to query two keyspaces
_, err := exec(executor, session, "SELECT B.TABLE_NAME FROM INFORMATION_SCHEMA.TABLES AS A, INFORMATION_SCHEMA.COLUMNS AS B WHERE A.TABLE_SCHEMA = 'TestExecutor' AND A.TABLE_SCHEMA = 'TestXBadSharding'")
@@ -3349,8 +3406,8 @@ func TestSelectScatterFails(t *testing.T) {
func TestGen4SelectStraightJoin(t *testing.T) {
executor, sbc1, _, _, _ := createExecutorEnv(t)
executor.normalize = true
- executor.pv = querypb.ExecuteOptions_Gen4
- session := NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"})
+
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"})
query := "select u.id from user u straight_join user2 u2 on u.id = u2.id"
_, err := executor.Execute(context.Background(), nil,
"TestGen4SelectStraightJoin",
@@ -3371,9 +3428,8 @@ func TestGen4SelectStraightJoin(t *testing.T) {
func TestGen4MultiColumnVindexEqual(t *testing.T) {
executor, sbc1, sbc2, _, _ := createExecutorEnv(t)
executor.normalize = true
- executor.pv = querypb.ExecuteOptions_Gen4
- session := NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"})
query := "select * from user_region where cola = 1 and colb = 2"
_, err := executor.Execute(context.Background(), nil, "TestGen4MultiColumnVindex", session, query, map[string]*querypb.BindVariable{})
require.NoError(t, err)
@@ -3410,9 +3466,8 @@ func TestGen4MultiColumnVindexEqual(t *testing.T) {
func TestGen4MultiColumnVindexIn(t *testing.T) {
executor, sbc1, sbc2, _, _ := createExecutorEnv(t)
executor.normalize = true
- executor.pv = querypb.ExecuteOptions_Gen4
- session := NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"})
query := "select * from user_region where cola IN (1,17984) and colb IN (2,3,4)"
_, err := executor.Execute(context.Background(), nil, "TestGen4MultiColumnVindex", session, query, map[string]*querypb.BindVariable{})
require.NoError(t, err)
@@ -3449,9 +3504,8 @@ func TestGen4MultiColumnVindexIn(t *testing.T) {
func TestGen4MultiColMixedColComparision(t *testing.T) {
executor, sbc1, sbc2, _, _ := createExecutorEnv(t)
executor.normalize = true
- executor.pv = querypb.ExecuteOptions_Gen4
- session := NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"})
query := "select * from user_region where colb = 2 and cola IN (1,17984)"
_, err := executor.Execute(context.Background(), nil, "TestGen4MultiColMixedColComparision", session, query, map[string]*querypb.BindVariable{})
require.NoError(t, err)
@@ -3486,9 +3540,8 @@ func TestGen4MultiColMixedColComparision(t *testing.T) {
func TestGen4MultiColBestVindexSel(t *testing.T) {
executor, sbc1, sbc2, _, _ := createExecutorEnv(t)
executor.normalize = true
- executor.pv = querypb.ExecuteOptions_Gen4
- session := NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"})
query := "select * from user_region where colb = 2 and cola IN (1,17984) and cola = 1"
_, err := executor.Execute(context.Background(), nil, "TestGen4MultiColBestVindexSel", session, query, map[string]*querypb.BindVariable{})
require.NoError(t, err)
@@ -3532,9 +3585,8 @@ func TestGen4MultiColBestVindexSel(t *testing.T) {
func TestGen4MultiColMultiEqual(t *testing.T) {
executor, sbc1, sbc2, _, _ := createExecutorEnv(t)
executor.normalize = true
- executor.pv = querypb.ExecuteOptions_Gen4
- session := NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"})
query := "select * from user_region where (cola,colb) in ((17984,2),(17984,3))"
_, err := executor.Execute(context.Background(), nil, "TestGen4MultiColMultiEqual", session, query, map[string]*querypb.BindVariable{})
require.NoError(t, err)
@@ -3554,7 +3606,6 @@ func TestGen4MultiColMultiEqual(t *testing.T) {
func TestGen4SelectUnqualifiedReferenceTable(t *testing.T) {
executor, sbc1, sbc2, sbclookup, ctx := createExecutorEnv(t)
- executor.pv = querypb.ExecuteOptions_Gen4
query := "select * from zip_detail"
session := &vtgatepb.Session{
@@ -3575,7 +3626,6 @@ func TestGen4SelectUnqualifiedReferenceTable(t *testing.T) {
func TestGen4SelectQualifiedReferenceTable(t *testing.T) {
executor, sbc1, sbc2, sbclookup, ctx := createExecutorEnv(t)
- executor.pv = querypb.ExecuteOptions_Gen4
query := fmt.Sprintf("select * from %s.zip_detail", KsTestSharded)
session := &vtgatepb.Session{
@@ -3596,7 +3646,6 @@ func TestGen4SelectQualifiedReferenceTable(t *testing.T) {
func TestGen4JoinUnqualifiedReferenceTable(t *testing.T) {
executor, sbc1, sbc2, sbclookup, ctx := createExecutorEnv(t)
- executor.pv = querypb.ExecuteOptions_Gen4
query := "select * from user join zip_detail on user.zip_detail_id = zip_detail.id"
session := &vtgatepb.Session{
@@ -3633,7 +3682,6 @@ func TestGen4JoinUnqualifiedReferenceTable(t *testing.T) {
func TestGen4CrossShardJoinQualifiedReferenceTable(t *testing.T) {
executor, sbc1, sbc2, sbclookup, ctx := createExecutorEnv(t)
- executor.pv = querypb.ExecuteOptions_Gen4
query := "select user.id from user join TestUnsharded.zip_detail on user.zip_detail_id = TestUnsharded.zip_detail.id"
session := &vtgatepb.Session{
@@ -3690,7 +3738,6 @@ func TestRegionRange(t *testing.T) {
}
executor := createExecutor(ctx, serv, cell, resolver)
defer executor.Close()
- executor.pv = querypb.ExecuteOptions_Gen4
tcases := []struct {
regionID int
@@ -3708,7 +3755,7 @@ func TestRegionRange(t *testing.T) {
for _, tcase := range tcases {
t.Run(strconv.Itoa(tcase.regionID), func(t *testing.T) {
sql := fmt.Sprintf("select * from user_region where cola = %d", tcase.regionID)
- _, err := executor.Execute(context.Background(), nil, "TestRegionRange", NewAutocommitSession(&vtgatepb.Session{}), sql, nil)
+ _, err := executor.Execute(context.Background(), nil, "TestRegionRange", econtext.NewAutocommitSession(&vtgatepb.Session{}), sql, nil)
require.NoError(t, err)
count := 0
for _, sbc := range conns {
@@ -3740,7 +3787,6 @@ func TestMultiCol(t *testing.T) {
}
executor := createExecutor(ctx, serv, cell, resolver)
defer executor.Close()
- executor.pv = querypb.ExecuteOptions_Gen4
tcases := []struct {
cola, colb, colc int
@@ -3756,7 +3802,7 @@ func TestMultiCol(t *testing.T) {
shards: []string{"20a0-"},
}}
- session := NewAutocommitSession(&vtgatepb.Session{})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{})
for _, tcase := range tcases {
t.Run(fmt.Sprintf("%d_%d_%d", tcase.cola, tcase.colb, tcase.colc), func(t *testing.T) {
@@ -3821,7 +3867,6 @@ func TestMultiColPartial(t *testing.T) {
}
executor := createExecutor(ctx, serv, cell, resolver)
defer executor.Close()
- executor.pv = querypb.ExecuteOptions_Gen4
tcases := []struct {
where string
@@ -3846,7 +3891,7 @@ func TestMultiColPartial(t *testing.T) {
shards: []string{"20a0c0-"},
}}
- session := NewAutocommitSession(&vtgatepb.Session{})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{})
for _, tcase := range tcases {
t.Run(tcase.where, func(t *testing.T) {
@@ -3885,7 +3930,6 @@ func TestSelectAggregationNoData(t *testing.T) {
}
executor := createExecutor(ctx, serv, cell, resolver)
defer executor.Close()
- executor.pv = querypb.ExecuteOptions_Gen4
tcases := []struct {
sql string
@@ -3977,7 +4021,6 @@ func TestSelectAggregationData(t *testing.T) {
}
executor := createExecutor(ctx, serv, cell, resolver)
defer executor.Close()
- executor.pv = querypb.ExecuteOptions_Gen4
tcases := []struct {
sql string
@@ -4135,8 +4178,7 @@ func TestSelectAggregationRandom(t *testing.T) {
executor := createExecutor(ctx, serv, cell, resolver)
defer executor.Close()
- executor.pv = querypb.ExecuteOptions_Gen4
- session := NewAutocommitSession(&vtgatepb.Session{})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{})
rs, err := executor.Execute(context.Background(), nil, "TestSelectCFC", session, "select /*vt+ PLANNER=gen4 */ A.a, A.b, (A.a / A.b) as c from (select sum(a) as a, sum(b) as b from user) A", nil)
require.NoError(t, err)
@@ -4146,7 +4188,7 @@ func TestSelectAggregationRandom(t *testing.T) {
func TestSelectDateTypes(t *testing.T) {
executor, _, _, _, _ := createExecutorEnv(t)
executor.normalize = true
- session := NewAutocommitSession(&vtgatepb.Session{})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{})
qr, err := executor.Execute(context.Background(), nil, "TestSelectDateTypes", session, "select '2020-01-01' + interval month(date_sub(FROM_UNIXTIME(1234), interval 1 month))-1 month", nil)
require.NoError(t, err)
@@ -4157,7 +4199,7 @@ func TestSelectDateTypes(t *testing.T) {
func TestSelectHexAndBit(t *testing.T) {
executor, _, _, _, _ := createExecutorEnv(t)
executor.normalize = true
- session := NewAutocommitSession(&vtgatepb.Session{})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{})
qr, err := executor.Execute(context.Background(), nil, "TestSelectHexAndBit", session, "select 0b1001, b'1001', 0x9, x'09'", nil)
require.NoError(t, err)
@@ -4173,7 +4215,7 @@ func TestSelectHexAndBit(t *testing.T) {
func TestSelectCFC(t *testing.T) {
executor, _, _, _, _ := createExecutorEnv(t)
executor.normalize = true
- session := NewAutocommitSession(&vtgatepb.Session{})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{})
_, err := executor.Execute(context.Background(), nil, "TestSelectCFC", session, "select /*vt+ PLANNER=gen4 */ c2 from tbl_cfc where c1 like 'A%'", nil)
require.NoError(t, err)
@@ -4202,7 +4244,7 @@ func TestSelectView(t *testing.T) {
require.NoError(t, err)
executor.normalize = true
- session := NewAutocommitSession(&vtgatepb.Session{})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{})
_, err = executor.Execute(context.Background(), nil, "TestSelectView", session, "select * from user_details_view", nil)
require.NoError(t, err)
@@ -4243,7 +4285,7 @@ func TestWarmingReads(t *testing.T) {
executor, primary, replica := createExecutorEnvWithPrimaryReplicaConn(t, ctx, 100)
executor.normalize = true
- session := NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded})
// Since queries on the replica will run in a separate go-routine, we need synchronization for the Queries field in the sandboxconn.
replica.RequireQueriesLocking()
@@ -4307,6 +4349,7 @@ func TestWarmingReads(t *testing.T) {
// waitUntilQueryCount waits until the number of queries run on the tablet reach the specified count.
func waitUntilQueryCount(t *testing.T, tab *sandboxconn.SandboxConn, count int) {
+ t.Helper()
timeout := time.After(1 * time.Second)
for {
select {
@@ -4367,7 +4410,7 @@ func TestStreamJoinQuery(t *testing.T) {
func TestSysVarGlobalAndSession(t *testing.T) {
executor, sbc1, _, _, _ := createExecutorEnv(t)
executor.normalize = true
- session := NewAutocommitSession(&vtgatepb.Session{EnableSystemSettings: true, SystemVariables: map[string]string{}})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{EnableSystemSettings: true, SystemVariables: map[string]string{}})
sbc1.SetResults([]*sqltypes.Result{
sqltypes.MakeTestResult(sqltypes.MakeTestFields("innodb_lock_wait_timeout", "uint64"), "20"),
diff --git a/go/vt/vtgate/executor_set_test.go b/go/vt/vtgate/executor_set_test.go
index 12e8e272bd7..f8ed0b558c3 100644
--- a/go/vt/vtgate/executor_set_test.go
+++ b/go/vt/vtgate/executor_set_test.go
@@ -22,6 +22,7 @@ import (
"vitess.io/vitess/go/mysql/sqlerror"
querypb "vitess.io/vitess/go/vt/proto/query"
+ econtext "vitess.io/vitess/go/vt/vtgate/executorcontext"
"vitess.io/vitess/go/test/utils"
@@ -266,7 +267,7 @@ func TestExecutorSet(t *testing.T) {
}}
for i, tcase := range testcases {
t.Run(fmt.Sprintf("%d-%s", i, tcase.in), func(t *testing.T) {
- session := NewSafeSession(&vtgatepb.Session{Autocommit: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{Autocommit: true})
_, err := executorEnv.Execute(ctx, nil, "TestExecute", session, tcase.in, nil)
if tcase.err == "" {
require.NoError(t, err)
@@ -374,7 +375,7 @@ func TestExecutorSetOp(t *testing.T) {
}}
for _, tcase := range testcases {
t.Run(tcase.in, func(t *testing.T) {
- session := NewAutocommitSession(&vtgatepb.Session{
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{
TargetString: "@primary",
})
session.TargetString = KsTestUnsharded
@@ -392,7 +393,7 @@ func TestExecutorSetMetadata(t *testing.T) {
t.Run("Session 1", func(t *testing.T) {
executor, _, _, _, ctx := createExecutorEnv(t)
- session := NewSafeSession(&vtgatepb.Session{TargetString: "@primary", Autocommit: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@primary", Autocommit: true})
set := "set @@vitess_metadata.app_keyspace_v1= '1'"
_, err := executor.Execute(ctx, nil, "TestExecute", session, set, nil)
@@ -400,21 +401,21 @@ func TestExecutorSetMetadata(t *testing.T) {
})
t.Run("Session 2", func(t *testing.T) {
- vschemaacl.AuthorizedDDLUsers = "%"
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers("%"))
defer func() {
- vschemaacl.AuthorizedDDLUsers = ""
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers(""))
}()
executor, _, _, _, ctx := createExecutorEnv(t)
- session := NewSafeSession(&vtgatepb.Session{TargetString: "@primary", Autocommit: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@primary", Autocommit: true})
set := "set @@vitess_metadata.app_keyspace_v1= '1'"
_, err := executor.Execute(ctx, nil, "TestExecute", session, set, nil)
- assert.NoError(t, err, "%s error: %v", set, err)
+ require.NoError(t, err, "%s error: %v", set, err)
show := `show vitess_metadata variables like 'app\\_keyspace\\_v_'`
result, err := executor.Execute(ctx, nil, "TestExecute", session, show, nil)
- assert.NoError(t, err)
+ require.NoError(t, err)
want := "1"
got := result.Rows[0][1].ToString()
@@ -423,11 +424,11 @@ func TestExecutorSetMetadata(t *testing.T) {
// Update metadata
set = "set @@vitess_metadata.app_keyspace_v2='2'"
_, err = executor.Execute(ctx, nil, "TestExecute", session, set, nil)
- assert.NoError(t, err, "%s error: %v", set, err)
+ require.NoError(t, err, "%s error: %v", set, err)
show = `show vitess_metadata variables like 'app\\_keyspace\\_v%'`
gotqr, err := executor.Execute(ctx, nil, "TestExecute", session, show, nil)
- assert.NoError(t, err)
+ require.NoError(t, err)
wantqr := &sqltypes.Result{
Fields: buildVarCharFields("Key", "Value"),
@@ -469,7 +470,7 @@ func TestPlanExecutorSetUDV(t *testing.T) {
}}
for _, tcase := range testcases {
t.Run(tcase.in, func(t *testing.T) {
- session := NewSafeSession(&vtgatepb.Session{Autocommit: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{Autocommit: true})
_, err := executor.Execute(ctx, nil, "TestExecute", session, tcase.in, nil)
if err != nil {
require.EqualError(t, err, tcase.err)
@@ -515,7 +516,7 @@ func TestSetVar(t *testing.T) {
executor, _, _, sbc, ctx := createCustomExecutor(t, "{}", "8.0.0")
executor.normalize = true
- session := NewAutocommitSession(&vtgatepb.Session{EnableSystemSettings: true, TargetString: KsTestUnsharded})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{EnableSystemSettings: true, TargetString: KsTestUnsharded})
sbc.SetResults([]*sqltypes.Result{sqltypes.MakeTestResult(
sqltypes.MakeTestFields("orig|new", "varchar|varchar"),
@@ -554,7 +555,7 @@ func TestSetVarShowVariables(t *testing.T) {
executor, _, _, sbc, ctx := createCustomExecutor(t, "{}", "8.0.0")
executor.normalize = true
- session := NewAutocommitSession(&vtgatepb.Session{EnableSystemSettings: true, TargetString: KsTestUnsharded})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{EnableSystemSettings: true, TargetString: KsTestUnsharded})
sbc.SetResults([]*sqltypes.Result{
// select query result for checking any change in system settings
@@ -597,7 +598,7 @@ func TestExecutorSetAndSelect(t *testing.T) {
sysVar: "tx_isolation",
exp: `[[VARCHAR("READ-UNCOMMITTED")]]`, // this returns the value set in previous query.
}}
- session := NewAutocommitSession(&vtgatepb.Session{TargetString: KsTestUnsharded, EnableSystemSettings: true})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{TargetString: KsTestUnsharded, EnableSystemSettings: true})
for _, tcase := range testcases {
t.Run(fmt.Sprintf("%s-%s", tcase.sysVar, tcase.val), func(t *testing.T) {
sbc.ExecCount.Store(0) // reset the value
@@ -631,7 +632,7 @@ func TestExecutorSetAndSelect(t *testing.T) {
func TestExecutorTimeZone(t *testing.T) {
e, _, _, _, ctx := createExecutorEnv(t)
- session := NewAutocommitSession(&vtgatepb.Session{TargetString: KsTestUnsharded, EnableSystemSettings: true})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{TargetString: KsTestUnsharded, EnableSystemSettings: true})
session.SetSystemVariable("time_zone", "'+08:00'")
qr, err := e.Execute(ctx, nil, "TestExecutorSetAndSelect", session, "select now()", nil)
diff --git a/go/vt/vtgate/executor_stream_test.go b/go/vt/vtgate/executor_stream_test.go
index b8cfeaf3cd5..a8500dd59c4 100644
--- a/go/vt/vtgate/executor_stream_test.go
+++ b/go/vt/vtgate/executor_stream_test.go
@@ -31,6 +31,7 @@ import (
topodatapb "vitess.io/vitess/go/vt/proto/topodata"
vtgatepb "vitess.io/vitess/go/vt/proto/vtgate"
"vitess.io/vitess/go/vt/vtenv"
+ econtext "vitess.io/vitess/go/vt/vtgate/executorcontext"
"vitess.io/vitess/go/vt/vtgate/logstats"
_ "vitess.io/vitess/go/vt/vtgate/vindexes"
"vitess.io/vitess/go/vt/vttablet/sandboxconn"
@@ -102,7 +103,7 @@ func executorStreamMessages(executor *Executor, sql string) (qr *sqltypes.Result
ctx,
nil,
"TestExecuteStream",
- NewSafeSession(session),
+ econtext.NewSafeSession(session),
sql,
nil,
func(qr *sqltypes.Result) error {
diff --git a/go/vt/vtgate/executor_test.go b/go/vt/vtgate/executor_test.go
index 1cd58b31cc3..74bfb710582 100644
--- a/go/vt/vtgate/executor_test.go
+++ b/go/vt/vtgate/executor_test.go
@@ -36,12 +36,19 @@ import (
"github.com/stretchr/testify/require"
"google.golang.org/protobuf/proto"
+ econtext "vitess.io/vitess/go/vt/vtgate/executorcontext"
+
"vitess.io/vitess/go/mysql/collations"
"vitess.io/vitess/go/mysql/sqlerror"
"vitess.io/vitess/go/sqltypes"
"vitess.io/vitess/go/test/utils"
"vitess.io/vitess/go/vt/callerid"
"vitess.io/vitess/go/vt/discovery"
+ querypb "vitess.io/vitess/go/vt/proto/query"
+ topodatapb "vitess.io/vitess/go/vt/proto/topodata"
+ vschemapb "vitess.io/vitess/go/vt/proto/vschema"
+ vtgatepb "vitess.io/vitess/go/vt/proto/vtgate"
+ vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc"
"vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/topo"
"vitess.io/vitess/go/vt/vtgate/buffer"
@@ -50,12 +57,6 @@ import (
"vitess.io/vitess/go/vt/vtgate/vindexes"
"vitess.io/vitess/go/vt/vtgate/vschemaacl"
"vitess.io/vitess/go/vt/vtgate/vtgateservice"
-
- querypb "vitess.io/vitess/go/vt/proto/query"
- topodatapb "vitess.io/vitess/go/vt/proto/topodata"
- vschemapb "vitess.io/vitess/go/vt/proto/vschema"
- vtgatepb "vitess.io/vitess/go/vt/proto/vtgate"
- vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc"
)
func TestExecutorResultsExceeded(t *testing.T) {
@@ -65,7 +66,7 @@ func TestExecutorResultsExceeded(t *testing.T) {
warnMemoryRows = 3
defer func() { warnMemoryRows = save }()
- session := NewSafeSession(&vtgatepb.Session{TargetString: "@primary"})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@primary"})
initial := warnings.Counts()["ResultsExceeded"]
@@ -89,7 +90,7 @@ func TestExecutorMaxMemoryRowsExceeded(t *testing.T) {
maxMemoryRows = 3
defer func() { maxMemoryRows = save }()
- session := NewSafeSession(&vtgatepb.Session{TargetString: "@primary"})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@primary"})
result := sqltypes.MakeTestResult(sqltypes.MakeTestFields("col", "int64"), "1", "2", "3", "4")
fn := func(r *sqltypes.Result) error {
return nil
@@ -123,7 +124,7 @@ func TestExecutorMaxMemoryRowsExceeded(t *testing.T) {
func TestExecutorTransactionsNoAutoCommit(t *testing.T) {
executor, _, _, sbclookup, ctx := createExecutorEnv(t)
- session := NewSafeSession(&vtgatepb.Session{TargetString: "@primary", SessionUUID: "suuid"})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@primary", SessionUUID: "suuid"})
logChan := executor.queryLogger.Subscribe("Test")
defer executor.queryLogger.Unsubscribe(logChan)
@@ -189,7 +190,7 @@ func TestExecutorTransactionsNoAutoCommit(t *testing.T) {
}
// Prevent use of non-primary if in_transaction is on.
- session = NewSafeSession(&vtgatepb.Session{TargetString: "@primary", InTransaction: true})
+ session = econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@primary", InTransaction: true})
_, err = executor.Execute(ctx, nil, "TestExecute", session, "use @replica", nil)
require.EqualError(t, err, `can't execute the given command because you have an active transaction`)
}
@@ -206,7 +207,7 @@ func TestDirectTargetRewrites(t *testing.T) {
}
sql := "select database()"
- _, err := executor.Execute(ctx, nil, "TestExecute", NewSafeSession(session), sql, map[string]*querypb.BindVariable{})
+ _, err := executor.Execute(ctx, nil, "TestExecute", econtext.NewSafeSession(session), sql, map[string]*querypb.BindVariable{})
require.NoError(t, err)
assertQueries(t, sbclookup, []*querypb.BoundQuery{{
Sql: "select :__vtdbname as `database()` from dual",
@@ -217,7 +218,7 @@ func TestDirectTargetRewrites(t *testing.T) {
func TestExecutorTransactionsAutoCommit(t *testing.T) {
executor, _, _, sbclookup, ctx := createExecutorEnv(t)
- session := NewSafeSession(&vtgatepb.Session{TargetString: "@primary", Autocommit: true, SessionUUID: "suuid"})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@primary", Autocommit: true, SessionUUID: "suuid"})
logChan := executor.queryLogger.Subscribe("Test")
defer executor.queryLogger.Unsubscribe(logChan)
@@ -271,7 +272,7 @@ func TestExecutorTransactionsAutoCommitStreaming(t *testing.T) {
executor, _, _, sbclookup, ctx := createExecutorEnv(t)
oltpOptions := &querypb.ExecuteOptions{Workload: querypb.ExecuteOptions_OLTP}
- session := NewSafeSession(&vtgatepb.Session{
+ session := econtext.NewSafeSession(&vtgatepb.Session{
TargetString: "@primary",
Autocommit: true,
Options: oltpOptions,
@@ -334,13 +335,13 @@ func TestExecutorTransactionsAutoCommitStreaming(t *testing.T) {
}
func TestExecutorDeleteMetadata(t *testing.T) {
- vschemaacl.AuthorizedDDLUsers = "%"
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers("%"))
defer func() {
- vschemaacl.AuthorizedDDLUsers = ""
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers(""))
}()
executor, _, _, _, ctx := createExecutorEnv(t)
- session := NewSafeSession(&vtgatepb.Session{TargetString: "@primary", Autocommit: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@primary", Autocommit: true})
set := "set @@vitess_metadata.app_v1= '1'"
_, err := executor.Execute(ctx, nil, "TestExecute", session, set, nil)
@@ -368,7 +369,7 @@ func TestExecutorDeleteMetadata(t *testing.T) {
func TestExecutorAutocommit(t *testing.T) {
executor, _, _, sbclookup, ctx := createExecutorEnv(t)
- session := NewSafeSession(&vtgatepb.Session{TargetString: "@primary"})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@primary"})
logChan := executor.queryLogger.Subscribe("Test")
defer executor.queryLogger.Unsubscribe(logChan)
@@ -447,7 +448,7 @@ func TestExecutorAutocommit(t *testing.T) {
// transition autocommit from 0 to 1 in the middle of a transaction.
startCount = sbclookup.CommitCount.Load()
- session = NewSafeSession(&vtgatepb.Session{TargetString: "@primary"})
+ session = econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@primary"})
_, err = executor.Execute(ctx, nil, "TestExecute", session, "begin", nil)
require.NoError(t, err)
_, err = executor.Execute(ctx, nil, "TestExecute", session, "update main1 set id=1", nil)
@@ -469,7 +470,7 @@ func TestExecutorAutocommit(t *testing.T) {
func TestExecutorShowColumns(t *testing.T) {
executor, sbc1, sbc2, sbclookup, ctx := createExecutorEnv(t)
- session := NewSafeSession(&vtgatepb.Session{TargetString: ""})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: ""})
queries := []string{
"SHOW COLUMNS FROM `user` in `TestExecutor`",
@@ -521,7 +522,7 @@ func assertMatchesNoOrder(t *testing.T, expected, got string) {
func TestExecutorShow(t *testing.T) {
executor, _, _, sbclookup, ctx := createExecutorEnv(t)
- session := NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"})
for _, query := range []string{"show vitess_keyspaces", "show keyspaces"} {
qr, err := executor.Execute(ctx, nil, "TestExecute", session, query, nil)
@@ -546,7 +547,7 @@ func TestExecutorShow(t *testing.T) {
_, err = executor.Execute(ctx, nil, "TestExecute", session, "use @primary", nil)
require.NoError(t, err)
_, err = executor.Execute(ctx, nil, "TestExecute", session, "show tables", nil)
- assert.EqualError(t, err, errNoKeyspace.Error(), "'show tables' should fail without a keyspace")
+ assert.EqualError(t, err, econtext.ErrNoKeyspace.Error(), "'show tables' should fail without a keyspace")
assert.Empty(t, sbclookup.Queries, "sbclookup unexpectedly has queries already")
showResults := &sqltypes.Result{
@@ -921,7 +922,7 @@ func TestExecutorShow(t *testing.T) {
query = "show vschema vindexes on user"
_, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil)
- wantErr := errNoKeyspace.Error()
+ wantErr := econtext.ErrNoKeyspace.Error()
assert.EqualError(t, err, wantErr, query)
query = "show vschema vindexes on TestExecutor.garbage"
@@ -1025,7 +1026,7 @@ func TestExecutorShow(t *testing.T) {
utils.MustMatch(t, wantqr, qr, fmt.Sprintf("%s, with a bad keyspace", query))
query = "show vschema tables"
- session = NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded})
+ session = econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded})
qr, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil)
require.NoError(t, err)
wantqr = &sqltypes.Result{
@@ -1051,9 +1052,9 @@ func TestExecutorShow(t *testing.T) {
utils.MustMatch(t, wantqr, qr, query)
query = "show vschema tables"
- session = NewSafeSession(&vtgatepb.Session{})
+ session = econtext.NewSafeSession(&vtgatepb.Session{})
_, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil)
- want = errNoKeyspace.Error()
+ want = econtext.ErrNoKeyspace.Error()
assert.EqualError(t, err, want, query)
query = "show 10"
@@ -1062,7 +1063,7 @@ func TestExecutorShow(t *testing.T) {
assert.EqualError(t, err, want, query)
query = "show vschema tables"
- session = NewSafeSession(&vtgatepb.Session{TargetString: "no_such_keyspace"})
+ session = econtext.NewSafeSession(&vtgatepb.Session{TargetString: "no_such_keyspace"})
_, err = executor.Execute(ctx, nil, "TestExecute", session, query, nil)
want = "VT05003: unknown database 'no_such_keyspace' in vschema"
assert.EqualError(t, err, want, query)
@@ -1081,7 +1082,7 @@ func TestExecutorShow(t *testing.T) {
func TestExecutorShowTargeted(t *testing.T) {
executor, _, sbc2, _, ctx := createExecutorEnv(t)
- session := NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor/40-60"})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor/40-60"})
queries := []string{
"show databases",
@@ -1108,7 +1109,7 @@ func TestExecutorShowTargeted(t *testing.T) {
func TestExecutorShowFromSystemSchema(t *testing.T) {
executor, _, _, _, ctx := createExecutorEnv(t)
- session := NewSafeSession(&vtgatepb.Session{TargetString: "mysql"})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "mysql"})
_, err := executor.Execute(ctx, nil, "TestExecutorShowFromSystemSchema", session, "show tables", nil)
require.NoError(t, err)
@@ -1117,7 +1118,7 @@ func TestExecutorShowFromSystemSchema(t *testing.T) {
func TestExecutorUse(t *testing.T) {
executor, _, _, _, ctx := createExecutorEnv(t)
- session := NewSafeSession(&vtgatepb.Session{Autocommit: true, TargetString: "@primary"})
+ session := econtext.NewSafeSession(&vtgatepb.Session{Autocommit: true, TargetString: "@primary"})
stmts := []string{
"use TestExecutor",
@@ -1136,13 +1137,13 @@ func TestExecutorUse(t *testing.T) {
utils.MustMatch(t, wantSession, session.Session, "session does not match")
}
- _, err := executor.Execute(ctx, nil, "TestExecute", NewSafeSession(&vtgatepb.Session{}), "use 1", nil)
+ _, err := executor.Execute(ctx, nil, "TestExecute", econtext.NewSafeSession(&vtgatepb.Session{}), "use 1", nil)
wantErr := "syntax error at position 6 near '1'"
if err == nil || err.Error() != wantErr {
t.Errorf("got: %v, want %v", err, wantErr)
}
- _, err = executor.Execute(ctx, nil, "TestExecute", NewSafeSession(&vtgatepb.Session{}), "use UnexistentKeyspace", nil)
+ _, err = executor.Execute(ctx, nil, "TestExecute", econtext.NewSafeSession(&vtgatepb.Session{}), "use UnexistentKeyspace", nil)
require.EqualError(t, err, "VT05003: unknown database 'UnexistentKeyspace' in vschema")
}
@@ -1156,7 +1157,7 @@ func TestExecutorComment(t *testing.T) {
wantResult := &sqltypes.Result{}
for _, stmt := range stmts {
- gotResult, err := executor.Execute(ctx, nil, "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded}), stmt, nil)
+ gotResult, err := executor.Execute(ctx, nil, "TestExecute", econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded}), stmt, nil)
if err != nil {
t.Error(err)
}
@@ -1241,9 +1242,9 @@ func TestExecutorDDL(t *testing.T) {
sbc2.ExecCount.Store(0)
sbclookup.ExecCount.Store(0)
stmtType := "DDL"
- _, err := executor.Execute(ctx, nil, "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), stmt, nil)
+ _, err := executor.Execute(ctx, nil, "TestExecute", econtext.NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), stmt, nil)
if tc.hasNoKeyspaceErr {
- require.EqualError(t, err, errNoKeyspace.Error(), "expect query to fail: %q", stmt)
+ require.EqualError(t, err, econtext.ErrNoKeyspace.Error(), "expect query to fail: %q", stmt)
stmtType = "" // For error case, plan is not generated to query log will not contain any stmtType.
} else {
require.NoError(t, err, "did not expect error for query: %q", stmt)
@@ -1279,9 +1280,9 @@ func TestExecutorDDL(t *testing.T) {
sbc1.ExecCount.Store(0)
sbc2.ExecCount.Store(0)
sbclookup.ExecCount.Store(0)
- _, err := executor.Execute(ctx, nil, "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: ""}), stmt.input, nil)
+ _, err := executor.Execute(ctx, nil, "TestExecute", econtext.NewSafeSession(&vtgatepb.Session{TargetString: ""}), stmt.input, nil)
if stmt.hasErr {
- require.EqualError(t, err, errNoKeyspace.Error(), "expect query to fail")
+ require.EqualError(t, err, econtext.ErrNoKeyspace.Error(), "expect query to fail")
testQueryLog(t, executor, logChan, "TestExecute", "", stmt.input, 0)
} else {
require.NoError(t, err)
@@ -1298,13 +1299,13 @@ func TestExecutorDDLFk(t *testing.T) {
}
for _, stmt := range stmts {
- for _, fkMode := range []string{"allow", "disallow"} {
- t.Run(stmt+fkMode, func(t *testing.T) {
+ for _, mode := range []string{"allow", "disallow"} {
+ t.Run(stmt+mode, func(t *testing.T) {
executor, _, _, sbc, ctx := createExecutorEnv(t)
sbc.ExecCount.Store(0)
- foreignKeyMode = fkMode
- _, err := executor.Execute(ctx, nil, mName, NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded}), stmt, nil)
- if fkMode == "allow" {
+ executor.vConfig.ForeignKeyMode = fkMode(mode)
+ _, err := executor.Execute(ctx, nil, mName, econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded}), stmt, nil)
+ if mode == "allow" {
require.NoError(t, err)
require.EqualValues(t, 1, sbc.ExecCount.Load())
} else {
@@ -1317,13 +1318,13 @@ func TestExecutorDDLFk(t *testing.T) {
}
func TestExecutorAlterVSchemaKeyspace(t *testing.T) {
- vschemaacl.AuthorizedDDLUsers = "%"
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers("%"))
defer func() {
- vschemaacl.AuthorizedDDLUsers = ""
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers(""))
}()
executor, _, _, _, ctx := createExecutorEnv(t)
- session := NewSafeSession(&vtgatepb.Session{TargetString: "@primary", Autocommit: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@primary", Autocommit: true})
vschemaUpdates := make(chan *vschemapb.SrvVSchema, 2)
executor.serv.WatchSrvVSchema(ctx, executor.cell, func(vschema *vschemapb.SrvVSchema, err error) bool {
@@ -1346,9 +1347,9 @@ func TestExecutorAlterVSchemaKeyspace(t *testing.T) {
}
func TestExecutorCreateVindexDDL(t *testing.T) {
- vschemaacl.AuthorizedDDLUsers = "%"
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers("%"))
defer func() {
- vschemaacl.AuthorizedDDLUsers = ""
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers(""))
}()
executor, sbc1, sbc2, sbclookup, ctx := createExecutorEnv(t)
ks := "TestExecutor"
@@ -1365,7 +1366,7 @@ func TestExecutorCreateVindexDDL(t *testing.T) {
t.Fatalf("test_vindex should not exist in original vschema")
}
- session := NewSafeSession(&vtgatepb.Session{TargetString: ks})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: ks})
stmt := "alter vschema create vindex test_vindex using hash"
_, err := executor.Execute(ctx, nil, "TestExecute", session, stmt, nil)
require.NoError(t, err)
@@ -1389,7 +1390,7 @@ func TestExecutorCreateVindexDDL(t *testing.T) {
// Create a new vschema keyspace implicitly by creating a vindex with a different
// target in the session
// ksNew := "test_new_keyspace"
- session = NewSafeSession(&vtgatepb.Session{TargetString: ks})
+ session = econtext.NewSafeSession(&vtgatepb.Session{TargetString: ks})
stmt = "alter vschema create vindex test_vindex2 using hash"
_, err = executor.Execute(ctx, nil, "TestExecute", session, stmt, nil)
if err != nil {
@@ -1416,9 +1417,9 @@ func TestExecutorCreateVindexDDL(t *testing.T) {
}
func TestExecutorAddDropVschemaTableDDL(t *testing.T) {
- vschemaacl.AuthorizedDDLUsers = "%"
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers("%"))
defer func() {
- vschemaacl.AuthorizedDDLUsers = ""
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers(""))
}()
executor, sbc1, sbc2, sbclookup, ctx := createExecutorEnv(t)
ks := KsTestUnsharded
@@ -1440,7 +1441,7 @@ func TestExecutorAddDropVschemaTableDDL(t *testing.T) {
vschemaTables = append(vschemaTables, t)
}
- session := NewSafeSession(&vtgatepb.Session{TargetString: ks})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: ks})
stmt := "alter vschema add table test_table"
_, err := executor.Execute(ctx, nil, "TestExecute", session, stmt, nil)
require.NoError(t, err)
@@ -1452,7 +1453,7 @@ func TestExecutorAddDropVschemaTableDDL(t *testing.T) {
_ = waitForVschemaTables(t, ks, append([]string{"test_table", "test_table2"}, vschemaTables...), executor)
// Should fail adding a table on a sharded keyspace
- session = NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"})
+ session = econtext.NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"})
stmt = "alter vschema add table test_table"
_, err = executor.Execute(ctx, nil, "TestExecute", session, stmt, nil)
require.EqualError(t, err, "add vschema table: unsupported on sharded keyspace TestExecutor")
@@ -1471,7 +1472,7 @@ func TestExecutorVindexDDLACL(t *testing.T) {
executor, _, _, _, ctx := createExecutorEnv(t)
ks := "TestExecutor"
- session := NewSafeSession(&vtgatepb.Session{TargetString: ks})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: ks})
ctxRedUser := callerid.NewContext(ctx, &vtrpcpb.CallerID{}, &querypb.VTGateCallerID{Username: "redUser"})
ctxBlueUser := callerid.NewContext(ctx, &vtrpcpb.CallerID{}, &querypb.VTGateCallerID{Username: "blueUser"})
@@ -1485,8 +1486,7 @@ func TestExecutorVindexDDLACL(t *testing.T) {
require.EqualError(t, err, `User 'blueUser' is not authorized to perform vschema operations`)
// test when all users are enabled
- vschemaacl.AuthorizedDDLUsers = "%"
- vschemaacl.Init()
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers("%"))
_, err = executor.Execute(ctxRedUser, nil, "TestExecute", session, stmt, nil)
if err != nil {
t.Errorf("unexpected error '%v'", err)
@@ -1498,8 +1498,7 @@ func TestExecutorVindexDDLACL(t *testing.T) {
}
// test when only one user is enabled
- vschemaacl.AuthorizedDDLUsers = "orangeUser, blueUser, greenUser"
- vschemaacl.Init()
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers("orangeUser, blueUser, greenUser"))
_, err = executor.Execute(ctxRedUser, nil, "TestExecute", session, stmt, nil)
require.EqualError(t, err, `User 'redUser' is not authorized to perform vschema operations`)
@@ -1510,16 +1509,30 @@ func TestExecutorVindexDDLACL(t *testing.T) {
}
// restore the disallowed state
- vschemaacl.AuthorizedDDLUsers = ""
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers(""))
}
func TestExecutorUnrecognized(t *testing.T) {
executor, _, _, _, ctx := createExecutorEnv(t)
- _, err := executor.Execute(ctx, nil, "TestExecute", NewSafeSession(&vtgatepb.Session{}), "invalid statement", nil)
+ _, err := executor.Execute(ctx, nil, "TestExecute", econtext.NewSafeSession(&vtgatepb.Session{}), "invalid statement", nil)
require.Error(t, err, "unrecognized statement: invalid statement'")
}
+func TestExecutorDeniedErrorNoBuffer(t *testing.T) {
+ executor, sbc1, _, _, ctx := createExecutorEnv(t)
+ sbc1.EphemeralShardErr = errors.New("enforce denied tables")
+
+ vschemaWaitTimeout = 500 * time.Millisecond
+
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{TargetString: "@primary"})
+ startExec := time.Now()
+ _, err := executor.Execute(ctx, nil, "TestExecutorDeniedErrorNoBuffer", session, "select * from user", nil)
+ require.NoError(t, err, "enforce denied tables not buffered")
+ endExec := time.Now()
+ require.GreaterOrEqual(t, endExec.Sub(startExec).Milliseconds(), int64(500))
+}
+
// TestVSchemaStats makes sure the building and displaying of the
// VSchemaStats works.
func TestVSchemaStats(t *testing.T) {
@@ -1546,9 +1559,8 @@ var pv = querypb.ExecuteOptions_Gen4
func TestGetPlanUnnormalized(t *testing.T) {
r, _, _, _, ctx := createExecutorEnv(t)
-
- emptyvc, _ := newVCursorImpl(NewSafeSession(&vtgatepb.Session{TargetString: "@unknown"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, false, pv)
- unshardedvc, _ := newVCursorImpl(NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "@unknown"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, false, pv)
+ emptyvc, _ := econtext.NewVCursorImpl(econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@unknown"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, nullResultsObserver{}, econtext.VCursorConfig{})
+ unshardedvc, _ := econtext.NewVCursorImpl(econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "@unknown"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, nullResultsObserver{}, econtext.VCursorConfig{})
query1 := "select * from music_user_map where id = 1"
plan1, logStats1 := getPlanCached(t, ctx, r, emptyvc, query1, makeComments(" /* comment */"), map[string]*querypb.BindVariable{}, false)
@@ -1591,7 +1603,7 @@ func assertCacheSize(t *testing.T, c *PlanCache, expected int) {
}
}
-func assertCacheContains(t *testing.T, e *Executor, vc *vcursorImpl, sql string) *engine.Plan {
+func assertCacheContains(t *testing.T, e *Executor, vc *econtext.VCursorImpl, sql string) *engine.Plan {
t.Helper()
var plan *engine.Plan
@@ -1610,9 +1622,9 @@ func assertCacheContains(t *testing.T, e *Executor, vc *vcursorImpl, sql string)
return plan
}
-func getPlanCached(t *testing.T, ctx context.Context, e *Executor, vcursor *vcursorImpl, sql string, comments sqlparser.MarginComments, bindVars map[string]*querypb.BindVariable, skipQueryPlanCache bool) (*engine.Plan, *logstats.LogStats) {
+func getPlanCached(t *testing.T, ctx context.Context, e *Executor, vcursor *econtext.VCursorImpl, sql string, comments sqlparser.MarginComments, bindVars map[string]*querypb.BindVariable, skipQueryPlanCache bool) (*engine.Plan, *logstats.LogStats) {
logStats := logstats.NewLogStats(ctx, "Test", "", "", nil)
- vcursor.safeSession = &SafeSession{
+ vcursor.SafeSession = &econtext.SafeSession{
Session: &vtgatepb.Session{
Options: &querypb.ExecuteOptions{SkipQueryPlanCache: skipQueryPlanCache}},
}
@@ -1631,7 +1643,7 @@ func TestGetPlanCacheUnnormalized(t *testing.T) {
t.Run("Cache", func(t *testing.T) {
r, _, _, _, ctx := createExecutorEnv(t)
- emptyvc, _ := newVCursorImpl(NewSafeSession(&vtgatepb.Session{TargetString: "@unknown"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, false, pv)
+ emptyvc, _ := econtext.NewVCursorImpl(econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@unknown"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, nullResultsObserver{}, econtext.VCursorConfig{})
query1 := "select * from music_user_map where id = 1"
_, logStats1 := getPlanCached(t, ctx, r, emptyvc, query1, makeComments(" /* comment */"), map[string]*querypb.BindVariable{}, true)
@@ -1655,7 +1667,7 @@ func TestGetPlanCacheUnnormalized(t *testing.T) {
// Skip cache using directive
r, _, _, _, ctx := createExecutorEnv(t)
- unshardedvc, _ := newVCursorImpl(NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "@unknown"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, false, pv)
+ unshardedvc, _ := econtext.NewVCursorImpl(econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "@unknown"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, nullResultsObserver{}, r.vConfig)
query1 := "insert /*vt+ SKIP_QUERY_PLAN_CACHE=1 */ into user(id) values (1), (2)"
getPlanCached(t, ctx, r, unshardedvc, query1, makeComments(" /* comment */"), map[string]*querypb.BindVariable{}, false)
@@ -1666,12 +1678,12 @@ func TestGetPlanCacheUnnormalized(t *testing.T) {
assertCacheSize(t, r.plans, 1)
// the target string will be resolved and become part of the plan cache key, which adds a new entry
- ksIDVc1, _ := newVCursorImpl(NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "[deadbeef]"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, false, pv)
+ ksIDVc1, _ := econtext.NewVCursorImpl(econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "[deadbeef]"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, nullResultsObserver{}, r.vConfig)
getPlanCached(t, ctx, r, ksIDVc1, query1, makeComments(" /* comment */"), map[string]*querypb.BindVariable{}, false)
assertCacheSize(t, r.plans, 2)
// the target string will be resolved and become part of the plan cache key, as it's an unsharded ks, it will be the same entry as above
- ksIDVc2, _ := newVCursorImpl(NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "[beefdead]"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, false, pv)
+ ksIDVc2, _ := econtext.NewVCursorImpl(econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "[beefdead]"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, nullResultsObserver{}, r.vConfig)
getPlanCached(t, ctx, r, ksIDVc2, query1, makeComments(" /* comment */"), map[string]*querypb.BindVariable{}, false)
assertCacheSize(t, r.plans, 2)
})
@@ -1681,7 +1693,7 @@ func TestGetPlanCacheNormalized(t *testing.T) {
t.Run("Cache", func(t *testing.T) {
r, _, _, _, ctx := createExecutorEnv(t)
r.normalize = true
- emptyvc, _ := newVCursorImpl(NewSafeSession(&vtgatepb.Session{TargetString: "@unknown"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, false, pv)
+ emptyvc, _ := econtext.NewVCursorImpl(econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@unknown"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, nullResultsObserver{}, r.vConfig)
query1 := "select * from music_user_map where id = 1"
_, logStats1 := getPlanCached(t, ctx, r, emptyvc, query1, makeComments(" /* comment */"), map[string]*querypb.BindVariable{}, true /* skipQueryPlanCache */)
@@ -1698,7 +1710,7 @@ func TestGetPlanCacheNormalized(t *testing.T) {
// Skip cache using directive
r, _, _, _, ctx := createExecutorEnv(t)
r.normalize = true
- unshardedvc, _ := newVCursorImpl(NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "@unknown"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, false, pv)
+ unshardedvc, _ := econtext.NewVCursorImpl(econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "@unknown"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, nullResultsObserver{}, r.vConfig)
query1 := "insert /*vt+ SKIP_QUERY_PLAN_CACHE=1 */ into user(id) values (1), (2)"
getPlanCached(t, ctx, r, unshardedvc, query1, makeComments(" /* comment */"), map[string]*querypb.BindVariable{}, false)
@@ -1709,12 +1721,12 @@ func TestGetPlanCacheNormalized(t *testing.T) {
assertCacheSize(t, r.plans, 1)
// the target string will be resolved and become part of the plan cache key, which adds a new entry
- ksIDVc1, _ := newVCursorImpl(NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "[deadbeef]"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, false, pv)
+ ksIDVc1, _ := econtext.NewVCursorImpl(econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "[deadbeef]"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, nullResultsObserver{}, r.vConfig)
getPlanCached(t, ctx, r, ksIDVc1, query1, makeComments(" /* comment */"), map[string]*querypb.BindVariable{}, false)
assertCacheSize(t, r.plans, 2)
// the target string will be resolved and become part of the plan cache key, as it's an unsharded ks, it will be the same entry as above
- ksIDVc2, _ := newVCursorImpl(NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "[beefdead]"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, false, pv)
+ ksIDVc2, _ := econtext.NewVCursorImpl(econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "[beefdead]"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, nullResultsObserver{}, r.vConfig)
getPlanCached(t, ctx, r, ksIDVc2, query1, makeComments(" /* comment */"), map[string]*querypb.BindVariable{}, false)
assertCacheSize(t, r.plans, 2)
})
@@ -1724,8 +1736,8 @@ func TestGetPlanNormalized(t *testing.T) {
r, _, _, _, ctx := createExecutorEnv(t)
r.normalize = true
- emptyvc, _ := newVCursorImpl(NewSafeSession(&vtgatepb.Session{TargetString: "@unknown"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, false, pv)
- unshardedvc, _ := newVCursorImpl(NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "@unknown"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, false, pv)
+ emptyvc, _ := econtext.NewVCursorImpl(econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@unknown"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, nullResultsObserver{}, econtext.VCursorConfig{})
+ unshardedvc, _ := econtext.NewVCursorImpl(econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded + "@unknown"}), makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, nullResultsObserver{}, econtext.VCursorConfig{})
query1 := "select * from music_user_map where id = 1"
query2 := "select * from music_user_map where id = 2"
@@ -1772,7 +1784,7 @@ func TestGetPlanPriority(t *testing.T) {
{name: "empty priority", sql: "select * from music_user_map", expectedPriority: "", expectedError: nil},
}
- session := NewSafeSession(&vtgatepb.Session{TargetString: "@unknown", Options: &querypb.ExecuteOptions{}})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@unknown", Options: &querypb.ExecuteOptions{}})
for _, aTestCase := range testCases {
testCase := aTestCase
@@ -1782,7 +1794,7 @@ func TestGetPlanPriority(t *testing.T) {
r.normalize = true
logStats := logstats.NewLogStats(ctx, "Test", "", "", nil)
- vCursor, err := newVCursorImpl(session, makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, false, pv)
+ vCursor, err := econtext.NewVCursorImpl(session, makeComments(""), r, nil, r.vm, r.VSchema(), r.resolver.resolver, nil, nullResultsObserver{}, econtext.VCursorConfig{})
assert.NoError(t, err)
stmt, err := sqlparser.NewTestParser().Parse(testCase.sql)
@@ -1796,7 +1808,7 @@ func TestGetPlanPriority(t *testing.T) {
} else {
assert.NoError(t, err)
assert.Equal(t, testCase.expectedPriority, priorityFromStatement)
- assert.Equal(t, testCase.expectedPriority, vCursor.safeSession.Options.Priority)
+ assert.Equal(t, testCase.expectedPriority, vCursor.SafeSession.Options.Priority)
}
})
}
@@ -1953,7 +1965,7 @@ func TestExecutorMaxPayloadSizeExceeded(t *testing.T) {
executor, _, _, _, _ := createExecutorEnv(t)
- session := NewSafeSession(&vtgatepb.Session{TargetString: "@primary"})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@primary"})
warningCount := warnings.Counts()["WarnPayloadSizeExceeded"]
testMaxPayloadSizeExceeded := []string{
"select * from main1",
@@ -2001,7 +2013,7 @@ func TestOlapSelectDatabase(t *testing.T) {
cbInvoked = true
return nil
}
- err := executor.StreamExecute(context.Background(), nil, "TestExecute", NewSafeSession(session), sql, nil, cb)
+ err := executor.StreamExecute(context.Background(), nil, "TestExecute", econtext.NewSafeSession(session), sql, nil, cb)
assert.NoError(t, err)
assert.True(t, cbInvoked)
}
@@ -2009,7 +2021,7 @@ func TestOlapSelectDatabase(t *testing.T) {
func TestExecutorClearsWarnings(t *testing.T) {
executor, _, _, _, _ := createExecutorEnv(t)
- session := NewSafeSession(&vtgatepb.Session{
+ session := econtext.NewSafeSession(&vtgatepb.Session{
Warnings: []*querypb.QueryWarning{{Code: 234, Message: "oh noes"}},
})
_, err := executor.Execute(context.Background(), nil, "TestExecute", session, "select 42", nil)
@@ -2026,7 +2038,6 @@ func TestServingKeyspaces(t *testing.T) {
executor, sbc1, _, sbclookup, ctx := createExecutorEnv(t)
- executor.pv = querypb.ExecuteOptions_Gen4
gw, ok := executor.resolver.resolver.GetGateway().(*TabletGateway)
require.True(t, ok)
hc := gw.hc.(*discovery.FakeHealthCheck)
@@ -2045,7 +2056,7 @@ func TestServingKeyspaces(t *testing.T) {
})
require.ElementsMatch(t, []string{"TestExecutor", "TestUnsharded"}, gw.GetServingKeyspaces())
- result, err := executor.Execute(ctx, nil, "TestServingKeyspaces", NewSafeSession(&vtgatepb.Session{}), "select keyspace_name from dual", nil)
+ result, err := executor.Execute(ctx, nil, "TestServingKeyspaces", econtext.NewSafeSession(&vtgatepb.Session{}), "select keyspace_name from dual", nil)
require.NoError(t, err)
require.Equal(t, `[[VARCHAR("TestExecutor")]]`, fmt.Sprintf("%v", result.Rows))
@@ -2061,7 +2072,7 @@ func TestServingKeyspaces(t *testing.T) {
// Clear plan cache, to force re-planning of the query.
executor.ClearPlans()
require.ElementsMatch(t, []string{"TestUnsharded"}, gw.GetServingKeyspaces())
- result, err = executor.Execute(ctx, nil, "TestServingKeyspaces", NewSafeSession(&vtgatepb.Session{}), "select keyspace_name from dual", nil)
+ result, err = executor.Execute(ctx, nil, "TestServingKeyspaces", econtext.NewSafeSession(&vtgatepb.Session{}), "select keyspace_name from dual", nil)
require.NoError(t, err)
require.Equal(t, `[[VARCHAR("TestUnsharded")]]`, fmt.Sprintf("%v", result.Rows))
}
@@ -2137,9 +2148,9 @@ func TestExecutorOther(t *testing.T) {
sbc2.ExecCount.Store(0)
sbclookup.ExecCount.Store(0)
- _, err := executor.Execute(ctx, nil, "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), stmt, nil)
+ _, err := executor.Execute(ctx, nil, "TestExecute", econtext.NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), stmt, nil)
if tc.hasNoKeyspaceErr {
- assert.Error(t, err, errNoKeyspace)
+ assert.Error(t, err, econtext.ErrNoKeyspace.Error())
} else if tc.hasDestinationShardErr {
assert.Errorf(t, err, "Destination can only be a single shard for statement: %s", stmt)
} else {
@@ -2193,7 +2204,7 @@ func TestExecutorAnalyze(t *testing.T) {
sbc2.ExecCount.Store(0)
sbclookup.ExecCount.Store(0)
- _, err := executor.Execute(context.Background(), nil, "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), stmt, nil)
+ _, err := executor.Execute(context.Background(), nil, "TestExecute", econtext.NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), stmt, nil)
require.NoError(t, err)
utils.MustMatch(t, tc.wantCnts, cnts{
@@ -2257,7 +2268,7 @@ func TestExecutorExplainStmt(t *testing.T) {
sbc2.ExecCount.Store(0)
sbclookup.ExecCount.Store(0)
- _, err := executor.Execute(ctx, nil, "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), stmt, nil)
+ _, err := executor.Execute(ctx, nil, "TestExecute", econtext.NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), stmt, nil)
assert.NoError(t, err)
utils.MustMatch(t, tc.wantCnts, cnts{
@@ -2290,7 +2301,7 @@ func TestExecutorVExplain(t *testing.T) {
result, err = executorExec(ctx, executor, session, "vexplain plan select 42", bindVars)
require.NoError(t, err)
- expected := `[[VARCHAR("{\n\t\"OperatorType\": \"Projection\",\n\t\"Expressions\": [\n\t\t\"42 as 42\"\n\t],\n\t\"Inputs\": [\n\t\t{\n\t\t\t\"OperatorType\": \"SingleRow\"\n\t\t}\n\t]\n}")]]`
+ expected := `[[VARCHAR("{\n\t\"OperatorType\": \"Projection\",\n\t\"Expressions\": [\n\t\t\":vtg1 as :vtg1 /* INT64 */\"\n\t],\n\t\"Inputs\": [\n\t\t{\n\t\t\t\"OperatorType\": \"SingleRow\"\n\t\t}\n\t]\n}")]]`
require.Equal(t, expected, fmt.Sprintf("%v", result.Rows))
}
@@ -2347,9 +2358,9 @@ func TestExecutorOtherAdmin(t *testing.T) {
sbc2.ExecCount.Store(0)
sbclookup.ExecCount.Store(0)
- _, err := executor.Execute(context.Background(), nil, "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), stmt, nil)
+ _, err := executor.Execute(context.Background(), nil, "TestExecute", econtext.NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), stmt, nil)
if tc.hasNoKeyspaceErr {
- assert.Error(t, err, errNoKeyspace)
+ assert.Error(t, err, econtext.ErrNoKeyspace.Error())
} else if tc.hasDestinationShardErr {
assert.Errorf(t, err, "Destination can only be a single shard for statement: %s, got: DestinationExactKeyRange(-)", stmt)
} else {
@@ -2374,7 +2385,7 @@ func TestExecutorSavepointInTx(t *testing.T) {
logChan := executor.queryLogger.Subscribe("TestExecutorSavepoint")
defer executor.queryLogger.Unsubscribe(logChan)
- session := NewSafeSession(&vtgatepb.Session{Autocommit: false, TargetString: "@primary"})
+ session := econtext.NewSafeSession(&vtgatepb.Session{Autocommit: false, TargetString: "@primary"})
_, err := exec(executor, session, "savepoint a")
require.NoError(t, err)
_, err = exec(executor, session, "rollback to a")
@@ -2457,7 +2468,7 @@ func TestExecutorSavepointInTxWithReservedConn(t *testing.T) {
logChan := executor.queryLogger.Subscribe("TestExecutorSavepoint")
defer executor.queryLogger.Unsubscribe(logChan)
- session := NewSafeSession(&vtgatepb.Session{Autocommit: true, TargetString: "TestExecutor", EnableSystemSettings: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{Autocommit: true, TargetString: "TestExecutor", EnableSystemSettings: true})
sbc1.SetResults([]*sqltypes.Result{
sqltypes.MakeTestResult(sqltypes.MakeTestFields("orig|new", "varchar|varchar"), "a|"),
})
@@ -2524,7 +2535,7 @@ func TestExecutorSavepointWithoutTx(t *testing.T) {
logChan := executor.queryLogger.Subscribe("TestExecutorSavepoint")
defer executor.queryLogger.Unsubscribe(logChan)
- session := NewSafeSession(&vtgatepb.Session{Autocommit: true, TargetString: "@primary", InTransaction: false})
+ session := econtext.NewSafeSession(&vtgatepb.Session{Autocommit: true, TargetString: "@primary", InTransaction: false})
_, err := exec(executor, session, "savepoint a")
require.NoError(t, err)
_, err = exec(executor, session, "rollback to a")
@@ -2609,9 +2620,9 @@ func TestExecutorCallProc(t *testing.T) {
sbc2.ExecCount.Store(0)
sbcUnsharded.ExecCount.Store(0)
- _, err := executor.Execute(context.Background(), nil, "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), "CALL proc()", nil)
+ _, err := executor.Execute(context.Background(), nil, "TestExecute", econtext.NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), "CALL proc()", nil)
if tc.hasNoKeyspaceErr {
- assert.EqualError(t, err, errNoKeyspace.Error())
+ assert.EqualError(t, err, econtext.ErrNoKeyspace.Error())
} else if tc.unshardedOnlyErr {
require.EqualError(t, err, "CALL is not supported for sharded keyspace")
} else {
@@ -2631,9 +2642,9 @@ func TestExecutorTempTable(t *testing.T) {
executor, _, _, sbcUnsharded, ctx := createExecutorEnv(t)
initialWarningsCount := warnings.Counts()["WarnUnshardedOnly"]
- executor.warnShardedOnly = true
+ executor.vConfig.WarnShardedOnly = true
creatQuery := "create temporary table temp_t(id bigint primary key)"
- session := NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded})
_, err := executor.Execute(ctx, nil, "TestExecutorTempTable", session, creatQuery, nil)
require.NoError(t, err)
assert.EqualValues(t, 1, sbcUnsharded.ExecCount.Load())
@@ -2652,7 +2663,7 @@ func TestExecutorShowVitessMigrations(t *testing.T) {
executor, sbc1, sbc2, _, ctx := createExecutorEnv(t)
showQuery := "show vitess_migrations"
- session := NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"})
_, err := executor.Execute(ctx, nil, "", session, showQuery, nil)
require.NoError(t, err)
assert.Contains(t, sbc1.StringQueries(), "show vitess_migrations")
@@ -2663,7 +2674,7 @@ func TestExecutorDescHash(t *testing.T) {
executor, _, _, _, ctx := createExecutorEnv(t)
showQuery := "desc hash_index"
- session := NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"})
_, err := executor.Execute(ctx, nil, "", session, showQuery, nil)
require.NoError(t, err)
}
@@ -2671,7 +2682,7 @@ func TestExecutorDescHash(t *testing.T) {
func TestExecutorVExplainQueries(t *testing.T) {
executor, _, _, sbclookup, ctx := createExecutorEnv(t)
- session := NewAutocommitSession(&vtgatepb.Session{})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{})
sbclookup.SetResults([]*sqltypes.Result{
sqltypes.MakeTestResult(sqltypes.MakeTestFields("name|user_id", "varchar|int64"), "apa|1", "apa|2"),
@@ -2684,7 +2695,7 @@ func TestExecutorVExplainQueries(t *testing.T) {
// Test the streaming side as well
var results []sqltypes.Row
- session = NewAutocommitSession(&vtgatepb.Session{})
+ session = econtext.NewAutocommitSession(&vtgatepb.Session{})
err = executor.StreamExecute(ctx, nil, "TestExecutorVExplainQueries", session, "vexplain queries select * from user where name = 'apa'", nil, func(result *sqltypes.Result) error {
results = append(results, result.Rows...)
return nil
@@ -2697,7 +2708,7 @@ func TestExecutorVExplainQueries(t *testing.T) {
func TestExecutorStartTxnStmt(t *testing.T) {
executor, _, _, _, ctx := createExecutorEnv(t)
- session := NewAutocommitSession(&vtgatepb.Session{})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{})
tcases := []struct {
beginSQL string
@@ -2744,7 +2755,7 @@ func TestExecutorPrepareExecute(t *testing.T) {
executor, _, _, _, _ := createExecutorEnv(t)
executor.normalize = true
- session := NewAutocommitSession(&vtgatepb.Session{})
+ session := econtext.NewAutocommitSession(&vtgatepb.Session{})
// prepare statement.
_, err := executor.Execute(context.Background(), nil, "TestExecutorPrepareExecute", session, "prepare prep_user from 'select * from user where id = ?'", nil)
@@ -2780,14 +2791,13 @@ func TestExecutorPrepareExecute(t *testing.T) {
require.Error(t, err)
}
-// TestExecutorRejectTwoPC test all the unsupported cases for multi-shard atomic commit.
-func TestExecutorRejectTwoPC(t *testing.T) {
+// TestExecutorSettingsInTwoPC tests that settings are supported for multi-shard atomic commit.
+func TestExecutorSettingsInTwoPC(t *testing.T) {
executor, sbc1, sbc2, _, ctx := createExecutorEnv(t)
tcases := []struct {
- sqls []string
- testRes []*sqltypes.Result
-
- expErr string
+ sqls []string
+ testRes []*sqltypes.Result
+ expectedQueries [][]string
}{
{
sqls: []string{
@@ -2796,28 +2806,23 @@ func TestExecutorRejectTwoPC(t *testing.T) {
`insert into user_extra(user_id) values (2)`,
`insert into user_extra(user_id) values (3)`,
},
- expErr: "VT12001: unsupported: atomic distributed transaction commit with system settings",
- }, {
- sqls: []string{
- `update t1 set unq_col = 1 where id = 1`,
- `update t1 set unq_col = 1 where id = 3`,
- },
testRes: []*sqltypes.Result{
- sqltypes.MakeTestResult(sqltypes.MakeTestFields("id|unq_col|unchanged", "int64|int64|int64"),
- "1|2|0"),
- },
- expErr: "VT12001: unsupported: atomic distributed transaction commit with consistent lookup vindex",
- }, {
- sqls: []string{
- `savepoint x`,
- `insert into user_extra(user_id) values (1)`,
- `insert into user_extra(user_id) values (3)`,
+ sqltypes.MakeTestResult(sqltypes.MakeTestFields("id", "varchar"),
+ "+08:00"),
},
- testRes: []*sqltypes.Result{
- sqltypes.MakeTestResult(sqltypes.MakeTestFields("id|unq_col|unchanged", "int64|int64|int64"),
- "1|2|0"),
+ expectedQueries: [][]string{
+ {
+ "select '+08:00' from dual where @@time_zone != '+08:00'",
+ "set @@time_zone = '+08:00'",
+ "set @@time_zone = '+08:00'",
+ "insert into user_extra(user_id) values (1)",
+ "insert into user_extra(user_id) values (2)",
+ },
+ {
+ "set @@time_zone = '+08:00'",
+ "insert into user_extra(user_id) values (3)",
+ },
},
- expErr: "VT12001: unsupported: atomic distributed transaction commit with savepoint",
},
}
@@ -2827,25 +2832,32 @@ func TestExecutorRejectTwoPC(t *testing.T) {
sbc2.SetResults(tcase.testRes)
// create a new session
- session := NewSafeSession(&vtgatepb.Session{
+ session := econtext.NewSafeSession(&vtgatepb.Session{
TargetString: KsTestSharded,
TransactionMode: vtgatepb.TransactionMode_TWOPC,
EnableSystemSettings: true,
})
// start transaction
- _, err := executor.Execute(ctx, nil, "TestExecutorRejectTwoPC", session, "begin", nil)
+ _, err := executor.Execute(ctx, nil, "TestExecutorSettingsInTwoPC", session, "begin", nil)
require.NoError(t, err)
// execute queries
for _, sql := range tcase.sqls {
- _, err = executor.Execute(ctx, nil, "TestExecutorRejectTwoPC", session, sql, nil)
+ _, err = executor.Execute(ctx, nil, "TestExecutorSettingsInTwoPC", session, sql, nil)
require.NoError(t, err)
}
// commit 2pc
- _, err = executor.Execute(ctx, nil, "TestExecutorRejectTwoPC", session, "commit", nil)
- require.ErrorContains(t, err, tcase.expErr)
+ _, err = executor.Execute(ctx, nil, "TestExecutorSettingsInTwoPC", session, "commit", nil)
+ require.NoError(t, err)
+
+ queriesRecvd, err := sbc1.GetFinalQueries()
+ require.NoError(t, err)
+ assert.EqualValues(t, tcase.expectedQueries[0], queriesRecvd)
+ queriesRecvd, err = sbc2.GetFinalQueries()
+ require.NoError(t, err)
+ assert.EqualValues(t, tcase.expectedQueries[1], queriesRecvd)
})
}
}
@@ -2857,7 +2869,7 @@ func TestExecutorTruncateErrors(t *testing.T) {
truncateErrorLen = 32
defer func() { truncateErrorLen = save }()
- session := NewSafeSession(&vtgatepb.Session{})
+ session := econtext.NewSafeSession(&vtgatepb.Session{})
fn := func(r *sqltypes.Result) error {
return nil
}
@@ -2917,7 +2929,7 @@ func TestExecutorFlushStmt(t *testing.T) {
for _, tc := range tcs {
t.Run(tc.query+tc.targetStr, func(t *testing.T) {
- _, err := executor.Execute(context.Background(), nil, "TestExecutorFlushStmt", NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), tc.query, nil)
+ _, err := executor.Execute(context.Background(), nil, "TestExecutorFlushStmt", econtext.NewSafeSession(&vtgatepb.Session{TargetString: tc.targetStr}), tc.query, nil)
if tc.expectedErr == "" {
require.NoError(t, err)
} else {
@@ -2964,7 +2976,7 @@ func TestExecutorKillStmt(t *testing.T) {
allowKillStmt = !tc.disallow
t.Run("execute:"+tc.query+tc.errStr, func(t *testing.T) {
mysqlCtx := &fakeMysqlConnection{ErrMsg: tc.errStr}
- _, err := executor.Execute(context.Background(), mysqlCtx, "TestExecutorKillStmt", NewAutocommitSession(&vtgatepb.Session{}), tc.query, nil)
+ _, err := executor.Execute(context.Background(), mysqlCtx, "TestExecutorKillStmt", econtext.NewAutocommitSession(&vtgatepb.Session{}), tc.query, nil)
if tc.errStr != "" {
require.ErrorContains(t, err, tc.errStr)
} else {
@@ -2974,7 +2986,7 @@ func TestExecutorKillStmt(t *testing.T) {
})
t.Run("stream:"+tc.query+tc.errStr, func(t *testing.T) {
mysqlCtx := &fakeMysqlConnection{ErrMsg: tc.errStr}
- err := executor.StreamExecute(context.Background(), mysqlCtx, "TestExecutorKillStmt", NewAutocommitSession(&vtgatepb.Session{}), tc.query, nil, func(result *sqltypes.Result) error {
+ err := executor.StreamExecute(context.Background(), mysqlCtx, "TestExecutorKillStmt", econtext.NewAutocommitSession(&vtgatepb.Session{}), tc.query, nil, func(result *sqltypes.Result) error {
return nil
})
if tc.errStr != "" {
@@ -3010,7 +3022,7 @@ func (f *fakeMysqlConnection) KillConnection(ctx context.Context, connID uint32)
var _ vtgateservice.MySQLConnection = (*fakeMysqlConnection)(nil)
-func exec(executor *Executor, session *SafeSession, sql string) (*sqltypes.Result, error) {
+func exec(executor *Executor, session *econtext.SafeSession, sql string) (*sqltypes.Result, error) {
return executor.Execute(context.Background(), nil, "TestExecute", session, sql, nil)
}
diff --git a/go/vt/vtgate/executor_vexplain_test.go b/go/vt/vtgate/executor_vexplain_test.go
index a19c353ef5f..a9516492f1b 100644
--- a/go/vt/vtgate/executor_vexplain_test.go
+++ b/go/vt/vtgate/executor_vexplain_test.go
@@ -18,11 +18,16 @@ package vtgate
import (
"context"
+ "encoding/json"
"fmt"
+ "os"
+ "path/filepath"
"testing"
"github.com/stretchr/testify/assert"
+ econtext "vitess.io/vitess/go/vt/vtgate/executorcontext"
+
"github.com/stretchr/testify/require"
"vitess.io/vitess/go/sqltypes"
@@ -115,129 +120,53 @@ func TestSimpleVexplainTrace(t *testing.T) {
}
func TestVExplainKeys(t *testing.T) {
- tests := []struct {
- query string
- expectedRowString string
- }{
- {
- query: "select count(*), col2 from music group by col2",
- expectedRowString: `{
- "groupingColumns": [
- "music.col2"
- ],
- "statementType": "SELECT"
-}`,
- }, {
- query: "select * from user u join user_extra ue on u.id = ue.user_id where u.col1 > 100 and ue.noLimit = 'foo'",
- expectedRowString: `{
- "joinColumns": [
- "user.id",
- "user_extra.user_id"
- ],
- "filterColumns": [
- "user.col1",
- "user_extra.noLimit"
- ],
- "statementType": "SELECT"
-}`,
- }, {
- // same as above, but written differently
- query: "select * from user_extra ue, user u where ue.noLimit = 'foo' and u.col1 > 100 and ue.user_id = u.id",
- expectedRowString: `{
- "joinColumns": [
- "user.id",
- "user_extra.user_id"
- ],
- "filterColumns": [
- "user.col1",
- "user_extra.noLimit"
- ],
- "statementType": "SELECT"
-}`,
- },
- {
- query: "select u.foo, ue.bar, count(*) from user u join user_extra ue on u.id = ue.user_id where u.name = 'John Doe' group by 1, 2",
- expectedRowString: `{
- "groupingColumns": [
- "user.foo",
- "user_extra.bar"
- ],
- "joinColumns": [
- "user.id",
- "user_extra.user_id"
- ],
- "filterColumns": [
- "user.name"
- ],
- "statementType": "SELECT"
-}`,
- },
- {
- query: "select * from (select * from user) as derived where derived.amount > 1000",
- expectedRowString: `{
- "statementType": "SELECT"
-}`,
- },
- {
- query: "select name, sum(amount) from user group by name",
- expectedRowString: `{
- "groupingColumns": [
- "user.name"
- ],
- "statementType": "SELECT"
-}`,
- },
- {
- query: "select name from user where age > 30",
- expectedRowString: `{
- "filterColumns": [
- "user.age"
- ],
- "statementType": "SELECT"
-}`,
- },
- {
- query: "select * from user where name = 'apa' union select * from user_extra where name = 'monkey'",
- expectedRowString: `{
- "filterColumns": [
- "user.name",
- "user_extra.name"
- ],
- "statementType": "SELECT"
-}`,
- },
- {
- query: "update user set name = 'Jane Doe' where id = 1",
- expectedRowString: `{
- "filterColumns": [
- "user.id"
- ],
- "statementType": "UPDATE"
-}`,
- },
- {
- query: "delete from user where order_date < '2023-01-01'",
- expectedRowString: `{
- "filterColumns": [
- "user.order_date"
- ],
- "statementType": "DELETE"
-}`,
- },
+ type testCase struct {
+ Query string `json:"query"`
+ Expected json.RawMessage `json:"expected"`
}
+ var tests []testCase
+ data, err := os.ReadFile("testdata/executor_vexplain.json")
+ require.NoError(t, err)
+
+ err = json.Unmarshal(data, &tests)
+ require.NoError(t, err)
+
+ var updatedTests []testCase
+
for _, tt := range tests {
- t.Run(tt.query, func(t *testing.T) {
+ t.Run(tt.Query, func(t *testing.T) {
executor, _, _, _, _ := createExecutorEnv(t)
- session := NewSafeSession(&vtgatepb.Session{TargetString: "@primary"})
- gotResult, err := executor.Execute(context.Background(), nil, "Execute", session, "vexplain keys "+tt.query, nil)
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@primary"})
+ gotResult, err := executor.Execute(context.Background(), nil, "Execute", session, "vexplain keys "+tt.Query, nil)
require.NoError(t, err)
gotRowString := gotResult.Rows[0][0].ToString()
- assert.Equal(t, tt.expectedRowString, gotRowString)
+ assert.JSONEq(t, string(tt.Expected), gotRowString)
+
+ updatedTests = append(updatedTests, testCase{
+ Query: tt.Query,
+ Expected: json.RawMessage(gotRowString),
+ })
+
if t.Failed() {
- fmt.Println(gotRowString)
+ fmt.Println("Test failed for query:", tt.Query)
+ fmt.Println("Got result:", gotRowString)
}
})
}
+
+ // If anything failed, write the updated test cases to a temp file
+ if t.Failed() {
+ tempFilePath := filepath.Join(os.TempDir(), "updated_vexplain_keys_tests.json")
+ fmt.Println("Writing updated tests to:", tempFilePath)
+
+ updatedTestsData, err := json.MarshalIndent(updatedTests, "", "\t")
+ require.NoError(t, err)
+
+ err = os.WriteFile(tempFilePath, updatedTestsData, 0644)
+ require.NoError(t, err)
+
+ fmt.Println("Updated tests written to:", tempFilePath)
+ }
}
diff --git a/go/vt/vtgate/executor_vschema_ddl_test.go b/go/vt/vtgate/executor_vschema_ddl_test.go
index 1c912ed0d62..1acc1ba2362 100644
--- a/go/vt/vtgate/executor_vschema_ddl_test.go
+++ b/go/vt/vtgate/executor_vschema_ddl_test.go
@@ -25,6 +25,8 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
+ econtext "vitess.io/vitess/go/vt/vtgate/executorcontext"
+
"vitess.io/vitess/go/sqltypes"
"vitess.io/vitess/go/test/utils"
"vitess.io/vitess/go/vt/callerid"
@@ -133,12 +135,12 @@ func waitForColVindexes(t *testing.T, ks, table string, names []string, executor
}
func TestPlanExecutorAlterVSchemaKeyspace(t *testing.T) {
- vschemaacl.AuthorizedDDLUsers = "%"
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers("%"))
defer func() {
- vschemaacl.AuthorizedDDLUsers = ""
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers(""))
}()
executor, _, _, _, ctx := createExecutorEnv(t)
- session := NewSafeSession(&vtgatepb.Session{TargetString: "@primary", Autocommit: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: "@primary", Autocommit: true})
vschemaUpdates := make(chan *vschemapb.SrvVSchema, 2)
executor.serv.WatchSrvVSchema(ctx, "aa", func(vschema *vschemapb.SrvVSchema, err error) bool {
@@ -161,9 +163,9 @@ func TestPlanExecutorAlterVSchemaKeyspace(t *testing.T) {
}
func TestPlanExecutorCreateVindexDDL(t *testing.T) {
- vschemaacl.AuthorizedDDLUsers = "%"
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers("%"))
defer func() {
- vschemaacl.AuthorizedDDLUsers = ""
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers(""))
}()
executor, _, _, _, ctx := createExecutorEnv(t)
ks := "TestExecutor"
@@ -180,7 +182,7 @@ func TestPlanExecutorCreateVindexDDL(t *testing.T) {
t.Fatalf("test_vindex should not exist in original vschema")
}
- session := NewSafeSession(&vtgatepb.Session{TargetString: ks})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: ks})
stmt := "alter vschema create vindex test_vindex using hash"
_, err := executor.Execute(ctx, nil, "TestExecute", session, stmt, nil)
require.NoError(t, err)
@@ -203,9 +205,9 @@ func TestPlanExecutorCreateVindexDDL(t *testing.T) {
}
func TestPlanExecutorDropVindexDDL(t *testing.T) {
- vschemaacl.AuthorizedDDLUsers = "%"
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers("%"))
defer func() {
- vschemaacl.AuthorizedDDLUsers = ""
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers(""))
}()
executor, _, _, _, ctx := createExecutorEnv(t)
ks := "TestExecutor"
@@ -222,7 +224,7 @@ func TestPlanExecutorDropVindexDDL(t *testing.T) {
t.Fatalf("test_vindex should not exist in original vschema")
}
- session := NewSafeSession(&vtgatepb.Session{TargetString: ks})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: ks})
stmt := "alter vschema drop vindex test_vindex"
_, err := executor.Execute(ctx, nil, "TestExecute", session, stmt, nil)
wantErr := "vindex test_vindex does not exists in keyspace TestExecutor"
@@ -272,9 +274,9 @@ func TestPlanExecutorDropVindexDDL(t *testing.T) {
}
func TestPlanExecutorAddDropVschemaTableDDL(t *testing.T) {
- vschemaacl.AuthorizedDDLUsers = "%"
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers("%"))
defer func() {
- vschemaacl.AuthorizedDDLUsers = ""
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers(""))
}()
executor, sbc1, sbc2, sbclookup, ctx := createExecutorEnv(t)
ks := KsTestUnsharded
@@ -296,7 +298,7 @@ func TestPlanExecutorAddDropVschemaTableDDL(t *testing.T) {
vschemaTables = append(vschemaTables, t)
}
- session := NewSafeSession(&vtgatepb.Session{TargetString: ks})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: ks})
stmt := "alter vschema add table test_table"
_, err := executor.Execute(ctx, nil, "TestExecute", session, stmt, nil)
require.NoError(t, err)
@@ -308,7 +310,7 @@ func TestPlanExecutorAddDropVschemaTableDDL(t *testing.T) {
_ = waitForVschemaTables(t, ks, append([]string{"test_table", "test_table2"}, vschemaTables...), executor)
// Should fail adding a table on a sharded keyspace
- session = NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"})
+ session = econtext.NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"})
stmt = "alter vschema add table test_table"
_, err = executor.Execute(ctx, nil, "TestExecute", session, stmt, nil)
wantErr := "add vschema table: unsupported on sharded keyspace TestExecutor"
@@ -329,9 +331,9 @@ func TestPlanExecutorAddDropVschemaTableDDL(t *testing.T) {
}
func TestExecutorAddSequenceDDL(t *testing.T) {
- vschemaacl.AuthorizedDDLUsers = "%"
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers("%"))
defer func() {
- vschemaacl.AuthorizedDDLUsers = ""
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers(""))
}()
executor, _, _, _, ctx := createExecutorEnv(t)
ks := KsTestUnsharded
@@ -343,7 +345,7 @@ func TestExecutorAddSequenceDDL(t *testing.T) {
vschemaTables = append(vschemaTables, t)
}
- session := NewSafeSession(&vtgatepb.Session{TargetString: ks})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: ks})
stmt := "alter vschema add sequence test_seq"
_, err := executor.Execute(ctx, nil, "TestExecute", session, stmt, nil)
require.NoError(t, err)
@@ -357,7 +359,7 @@ func TestExecutorAddSequenceDDL(t *testing.T) {
// Should fail adding a table on a sharded keyspace
ksSharded := "TestExecutor"
- session = NewSafeSession(&vtgatepb.Session{TargetString: ksSharded})
+ session = econtext.NewSafeSession(&vtgatepb.Session{TargetString: ksSharded})
stmt = "alter vschema add sequence sequence_table"
_, err = executor.Execute(ctx, nil, "TestExecute", session, stmt, nil)
@@ -389,9 +391,9 @@ func TestExecutorAddSequenceDDL(t *testing.T) {
}
func TestExecutorDropSequenceDDL(t *testing.T) {
- vschemaacl.AuthorizedDDLUsers = "%"
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers("%"))
defer func() {
- vschemaacl.AuthorizedDDLUsers = ""
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers(""))
}()
executor, _, _, _, ctx := createExecutorEnv(t)
ks := KsTestUnsharded
@@ -403,7 +405,7 @@ func TestExecutorDropSequenceDDL(t *testing.T) {
t.Fatalf("test_seq should not exist in original vschema")
}
- session := NewSafeSession(&vtgatepb.Session{TargetString: ks})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: ks})
// add test sequence
stmt := "alter vschema add sequence test_seq"
@@ -428,7 +430,7 @@ func TestExecutorDropSequenceDDL(t *testing.T) {
}
// Should fail dropping a non-existing test sequence
- session = NewSafeSession(&vtgatepb.Session{TargetString: ks})
+ session = econtext.NewSafeSession(&vtgatepb.Session{TargetString: ks})
stmt = "alter vschema drop sequence test_seq"
_, err = executor.Execute(ctx, nil, "TestExecute", session, stmt, nil)
@@ -440,14 +442,14 @@ func TestExecutorDropSequenceDDL(t *testing.T) {
}
func TestExecutorDropAutoIncDDL(t *testing.T) {
- vschemaacl.AuthorizedDDLUsers = "%"
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers("%"))
defer func() {
- vschemaacl.AuthorizedDDLUsers = ""
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers(""))
}()
executor, _, _, _, ctx := createExecutorEnv(t)
ks := KsTestUnsharded
- session := NewSafeSession(&vtgatepb.Session{TargetString: ks})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: ks})
stmt := "alter vschema add table test_table"
_, err := executor.Execute(ctx, nil, "TestExecute", session, stmt, nil)
@@ -482,13 +484,13 @@ func TestExecutorDropAutoIncDDL(t *testing.T) {
}
func TestExecutorAddDropVindexDDL(t *testing.T) {
- vschemaacl.AuthorizedDDLUsers = "%"
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers("%"))
defer func() {
- vschemaacl.AuthorizedDDLUsers = ""
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers(""))
}()
executor, sbc1, sbc2, sbclookup, ctx := createExecutorEnv(t)
ks := "TestExecutor"
- session := NewSafeSession(&vtgatepb.Session{TargetString: ks})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: ks})
vschemaUpdates := make(chan *vschemapb.SrvVSchema, 4)
executor.serv.WatchSrvVSchema(ctx, "aa", func(vschema *vschemapb.SrvVSchema, err error) bool {
vschemaUpdates <- vschema
@@ -706,7 +708,7 @@ func TestExecutorAddDropVindexDDL(t *testing.T) {
require.EqualError(t, err, "table TestExecutor.nonexistent not defined in vschema")
stmt = "alter vschema on nonexistent drop vindex test_lookup"
- _, err = executor.Execute(ctx, nil, "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: "InvalidKeyspace"}), stmt, nil)
+ _, err = executor.Execute(ctx, nil, "TestExecute", econtext.NewSafeSession(&vtgatepb.Session{TargetString: "InvalidKeyspace"}), stmt, nil)
require.EqualError(t, err, "VT05003: unknown database 'InvalidKeyspace' in vschema")
stmt = "alter vschema on nowhere.nohow drop vindex test_lookup"
@@ -731,7 +733,7 @@ func TestPlanExecutorVindexDDLACL(t *testing.T) {
// t.Skip("not yet planned")
executor, _, _, _, ctx := createExecutorEnv(t)
ks := "TestExecutor"
- session := NewSafeSession(&vtgatepb.Session{TargetString: ks})
+ session := econtext.NewSafeSession(&vtgatepb.Session{TargetString: ks})
ctxRedUser := callerid.NewContext(ctx, &vtrpcpb.CallerID{}, &querypb.VTGateCallerID{Username: "redUser"})
ctxBlueUser := callerid.NewContext(ctx, &vtrpcpb.CallerID{}, &querypb.VTGateCallerID{Username: "blueUser"})
@@ -745,8 +747,7 @@ func TestPlanExecutorVindexDDLACL(t *testing.T) {
require.EqualError(t, err, `User 'blueUser' is not authorized to perform vschema operations`)
// test when all users are enabled
- vschemaacl.AuthorizedDDLUsers = "%"
- vschemaacl.Init()
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers("%"))
_, err = executor.Execute(ctxRedUser, nil, "TestExecute", session, stmt, nil)
if err != nil {
t.Errorf("unexpected error '%v'", err)
@@ -758,8 +759,7 @@ func TestPlanExecutorVindexDDLACL(t *testing.T) {
}
// test when only one user is enabled
- vschemaacl.AuthorizedDDLUsers = "orangeUser, blueUser, greenUser"
- vschemaacl.Init()
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers("orangeUser, blueUser, greenUser"))
_, err = executor.Execute(ctxRedUser, nil, "TestExecute", session, stmt, nil)
require.EqualError(t, err, `User 'redUser' is not authorized to perform vschema operations`)
@@ -770,5 +770,5 @@ func TestPlanExecutorVindexDDLACL(t *testing.T) {
}
// restore the disallowed state
- vschemaacl.AuthorizedDDLUsers = ""
+ vschemaacl.AuthorizedDDLUsers.Set(vschemaacl.NewAuthorizedDDLUsers(""))
}
diff --git a/go/vt/vtgate/executor_vstream_test.go b/go/vt/vtgate/executor_vstream_test.go
index 5466e9e8f3f..22fb7ee1034 100644
--- a/go/vt/vtgate/executor_vstream_test.go
+++ b/go/vt/vtgate/executor_vstream_test.go
@@ -21,6 +21,7 @@ import (
"time"
"vitess.io/vitess/go/vt/vtgate/engine"
+ econtext "vitess.io/vitess/go/vt/vtgate/executorcontext"
querypb "vitess.io/vitess/go/vt/proto/query"
@@ -76,7 +77,7 @@ func TestVStreamSQLUnsharded(t *testing.T) {
results := make(chan *sqltypes.Result, 20)
go func() {
- err := executor.StreamExecute(ctx, nil, "TestExecuteStream", NewAutocommitSession(&vtgatepb.Session{TargetString: KsTestUnsharded}), sql, nil, func(qr *sqltypes.Result) error {
+ err := executor.StreamExecute(ctx, nil, "TestExecuteStream", econtext.NewAutocommitSession(&vtgatepb.Session{TargetString: KsTestUnsharded}), sql, nil, func(qr *sqltypes.Result) error {
results <- qr
return nil
})
diff --git a/go/vt/vtgate/executorcontext/faketopo.go b/go/vt/vtgate/executorcontext/faketopo.go
new file mode 100644
index 00000000000..f61119dce15
--- /dev/null
+++ b/go/vt/vtgate/executorcontext/faketopo.go
@@ -0,0 +1,68 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package executorcontext
+
+import (
+ "context"
+ "encoding/hex"
+
+ topodatapb "vitess.io/vitess/go/vt/proto/topodata"
+ vschemapb "vitess.io/vitess/go/vt/proto/vschema"
+ "vitess.io/vitess/go/vt/topo"
+)
+
+type FakeTopoServer struct{}
+
+// GetTopoServer returns the full topo.Server instance.
+func (f *FakeTopoServer) GetTopoServer() (*topo.Server, error) {
+ return nil, nil
+}
+
+// GetSrvKeyspaceNames returns the list of keyspaces served in
+// the provided cell.
+func (f *FakeTopoServer) GetSrvKeyspaceNames(ctx context.Context, cell string, staleOK bool) ([]string, error) {
+ return []string{"ks1"}, nil
+}
+
+// GetSrvKeyspace returns the SrvKeyspace for a cell/keyspace.
+func (f *FakeTopoServer) GetSrvKeyspace(ctx context.Context, cell, keyspace string) (*topodatapb.SrvKeyspace, error) {
+ zeroHexBytes, _ := hex.DecodeString("")
+ eightyHexBytes, _ := hex.DecodeString("80")
+ ks := &topodatapb.SrvKeyspace{
+ Partitions: []*topodatapb.SrvKeyspace_KeyspacePartition{
+ {
+ ServedType: topodatapb.TabletType_PRIMARY,
+ ShardReferences: []*topodatapb.ShardReference{
+ {Name: "-80", KeyRange: &topodatapb.KeyRange{Start: zeroHexBytes, End: eightyHexBytes}},
+ {Name: "80-", KeyRange: &topodatapb.KeyRange{Start: eightyHexBytes, End: zeroHexBytes}},
+ },
+ },
+ },
+ }
+ return ks, nil
+}
+
+func (f *FakeTopoServer) WatchSrvKeyspace(ctx context.Context, cell, keyspace string, callback func(*topodatapb.SrvKeyspace, error) bool) {
+ ks, err := f.GetSrvKeyspace(ctx, cell, keyspace)
+ callback(ks, err)
+}
+
+// WatchSrvVSchema starts watching the SrvVSchema object for
+// the provided cell. It will call the callback when
+// a new value or an error occurs.
+func (f *FakeTopoServer) WatchSrvVSchema(ctx context.Context, cell string, callback func(*vschemapb.SrvVSchema, error) bool) {
+}
diff --git a/go/vt/vtgate/safe_session.go b/go/vt/vtgate/executorcontext/safe_session.go
similarity index 78%
rename from go/vt/vtgate/safe_session.go
rename to go/vt/vtgate/executorcontext/safe_session.go
index 1d57c63ef35..c77bba76ff8 100644
--- a/go/vt/vtgate/safe_session.go
+++ b/go/vt/vtgate/executorcontext/safe_session.go
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-package vtgate
+package executorcontext
import (
"fmt"
@@ -23,22 +23,19 @@ import (
"sync"
"time"
- "vitess.io/vitess/go/sqltypes"
-
"google.golang.org/protobuf/proto"
"vitess.io/vitess/go/mysql/datetime"
-
+ "vitess.io/vitess/go/sqltypes"
+ querypb "vitess.io/vitess/go/vt/proto/query"
+ topodatapb "vitess.io/vitess/go/vt/proto/topodata"
+ vtgatepb "vitess.io/vitess/go/vt/proto/vtgate"
+ vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc"
"vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/srvtopo"
"vitess.io/vitess/go/vt/sysvars"
"vitess.io/vitess/go/vt/vterrors"
"vitess.io/vitess/go/vt/vtgate/engine"
-
- querypb "vitess.io/vitess/go/vt/proto/query"
- topodatapb "vitess.io/vitess/go/vt/proto/topodata"
- vtgatepb "vitess.io/vitess/go/vt/proto/vtgate"
- vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc"
)
type (
@@ -58,7 +55,7 @@ type (
rollbackOnPartialExec string
savepointName string
- // this is a signal that found_rows has already been handles by the primitives,
+ // this is a signal that found_rows has already been handled by the primitives,
// and doesn't have to be updated by the executor
foundRowsHandled bool
@@ -66,12 +63,12 @@ type (
// as the query that started a new transaction on the shard belong to a vindex.
queryFromVindex bool
- logging *executeLogger
+ logging *ExecuteLogger
*vtgatepb.Session
}
- executeLogger struct {
+ ExecuteLogger struct {
mu sync.Mutex
entries []engine.ExecuteEntry
lastID int
@@ -127,6 +124,8 @@ const (
savepointRollback
)
+const TxRollback = "Rollback Transaction"
+
// NewSafeSession returns a new SafeSession based on the Session
func NewSafeSession(sessn *vtgatepb.Session) *SafeSession {
if sessn == nil {
@@ -205,6 +204,50 @@ func (session *SafeSession) resetCommonLocked() {
}
}
+// NewAutocommitSession returns a SafeSession based on the original
+// session, but with autocommit enabled.
+func (session *SafeSession) NewAutocommitSession() *SafeSession {
+ ss := NewAutocommitSession(session.Session)
+ ss.logging = session.logging
+ return ss
+}
+
+// IsFoundRowsHandled returns the foundRowsHandled.
+func (session *SafeSession) IsFoundRowsHandled() bool {
+ session.mu.Lock()
+ defer session.mu.Unlock()
+ return session.foundRowsHandled
+}
+
+// SetFoundRows set the found rows value.
+func (session *SafeSession) SetFoundRows(value uint64) {
+ session.mu.Lock()
+ defer session.mu.Unlock()
+ session.FoundRows = value
+ session.foundRowsHandled = true
+}
+
+// GetRollbackOnPartialExec returns the rollbackOnPartialExec value.
+func (session *SafeSession) GetRollbackOnPartialExec() string {
+ session.mu.Lock()
+ defer session.mu.Unlock()
+ return session.rollbackOnPartialExec
+}
+
+// SetQueryFromVindex set the queryFromVindex value.
+func (session *SafeSession) SetQueryFromVindex(value bool) {
+ session.mu.Lock()
+ defer session.mu.Unlock()
+ session.queryFromVindex = value
+}
+
+// GetQueryFromVindex returns the queryFromVindex value.
+func (session *SafeSession) GetQueryFromVindex() bool {
+ session.mu.Lock()
+ defer session.mu.Unlock()
+ return session.queryFromVindex
+}
+
// SetQueryTimeout sets the query timeout
func (session *SafeSession) SetQueryTimeout(queryTimeout int64) {
session.mu.Lock()
@@ -312,7 +355,7 @@ func (session *SafeSession) SetRollbackCommand() {
if session.savepointState == savepointSet {
session.rollbackOnPartialExec = fmt.Sprintf("rollback to %s", session.savepointName)
} else {
- session.rollbackOnPartialExec = txRollback
+ session.rollbackOnPartialExec = TxRollback
}
session.savepointState = savepointRollbackSet
}
@@ -340,6 +383,18 @@ func (session *SafeSession) SetCommitOrder(co vtgatepb.CommitOrder) {
session.commitOrder = co
}
+// GetCommitOrder returns the commit order.
+func (session *SafeSession) GetCommitOrder() vtgatepb.CommitOrder {
+ session.mu.Lock()
+ defer session.mu.Unlock()
+ return session.commitOrder
+}
+
+// GetLogger returns executor logger.
+func (session *SafeSession) GetLogger() *ExecuteLogger {
+ return session.logging
+}
+
// InTransaction returns true if we are in a transaction
func (session *SafeSession) InTransaction() bool {
session.mu.Lock()
@@ -347,73 +402,88 @@ func (session *SafeSession) InTransaction() bool {
return session.Session.InTransaction
}
-// FindAndChangeSessionIfInSingleTxMode returns the transactionId and tabletAlias, if any, for a session
-// modifies the shard session in a specific case for single mode transaction.
-func (session *SafeSession) FindAndChangeSessionIfInSingleTxMode(keyspace, shard string, tabletType topodatapb.TabletType, txMode vtgatepb.TransactionMode) (int64, int64, *topodatapb.TabletAlias, error) {
+// FindAndChangeSessionIfInSingleTxMode retrieves the ShardSession matching the given keyspace, shard, and tablet type.
+// It performs additional checks and may modify the ShardSession in specific cases for single-mode transactions.
+//
+// Key behavior:
+// 1. Retrieves the appropriate list of sessions (PreSessions, PostSessions, or default ShardSessions) based on the commit order.
+// 2. Identifies a matching session by keyspace, shard, and tablet type.
+// 3. If the session meets specific conditions (e.g., non-vindex-only, single transaction mode), it updates the session state:
+// - Converts a vindex-only session to a standard session if required by the transaction type.
+// - If a multi-shard transaction is detected in Single mode, marks the session for rollback and returns an error.
+//
+// Parameters:
+// - keyspace: The keyspace of the target shard.
+// - shard: The shard name of the target.
+// - tabletType: The type of the tablet for the shard session.
+// - txMode: The transaction mode (e.g., Single, Multi).
+//
+// Returns:
+// - The matching ShardSession, if found and valid for the operation.
+// - An error if a Single-mode transaction attempts to span multiple shards.
+func (session *SafeSession) FindAndChangeSessionIfInSingleTxMode(keyspace, shard string, tabletType topodatapb.TabletType, txMode vtgatepb.TransactionMode) (*vtgatepb.Session_ShardSession, error) {
session.mu.Lock()
defer session.mu.Unlock()
- sessions := session.ShardSessions
+
+ shardSession := session.findSessionLocked(keyspace, shard, tabletType)
+
+ if shardSession == nil {
+ return nil, nil
+ }
+
+ if !shardSession.VindexOnly {
+ return shardSession, nil
+ }
+
+ if err := session.singleModeErrorOnCrossShard(txMode, 0); err != nil {
+ return nil, err
+ }
+
+ // the shard session is now used by non-vindex query as well,
+ // so it is not an exclusive vindex only shard session anymore.
+ shardSession.VindexOnly = false
+ return shardSession, nil
+}
+
+func (session *SafeSession) findSessionLocked(keyspace, shard string, tabletType topodatapb.TabletType) *vtgatepb.Session_ShardSession {
+ // Select the appropriate session list based on the commit order.
+ var sessions []*vtgatepb.Session_ShardSession
switch session.commitOrder {
case vtgatepb.CommitOrder_PRE:
sessions = session.PreSessions
case vtgatepb.CommitOrder_POST:
sessions = session.PostSessions
+ default:
+ sessions = session.ShardSessions
}
+
+ // Find and return the matching shard session.
for _, shardSession := range sessions {
- if keyspace == shardSession.Target.Keyspace && tabletType == shardSession.Target.TabletType && shard == shardSession.Target.Shard {
- if txMode != vtgatepb.TransactionMode_SINGLE || !shardSession.VindexOnly || session.queryFromVindex {
- return shardSession.TransactionId, shardSession.ReservedId, shardSession.TabletAlias, nil
- }
- count := actualNoOfShardSession(session.ShardSessions)
- // If the count of shard session which are non vindex only is greater than 0, then it is a
- if count > 0 {
- session.mustRollback = true
- return 0, 0, nil, vterrors.Errorf(vtrpcpb.Code_ABORTED, "multi-db transaction attempted: %v", session.ShardSessions)
- }
- // the shard session is now used by non-vindex query as well,
- // so it is not an exclusive vindex only shard session anymore.
- shardSession.VindexOnly = false
- return shardSession.TransactionId, shardSession.ReservedId, shardSession.TabletAlias, nil
+ if shardSession.Target.Keyspace == keyspace &&
+ shardSession.Target.Shard == shard &&
+ shardSession.Target.TabletType == tabletType {
+ return shardSession
}
}
- return 0, 0, nil, nil
-}
-
-func addOrUpdate(shardSession *vtgatepb.Session_ShardSession, sessions []*vtgatepb.Session_ShardSession) ([]*vtgatepb.Session_ShardSession, error) {
- appendSession := true
- for i, sess := range sessions {
- targetedAtSameTablet := sess.Target.Keyspace == shardSession.Target.Keyspace &&
- sess.Target.TabletType == shardSession.Target.TabletType &&
- sess.Target.Shard == shardSession.Target.Shard
- if targetedAtSameTablet {
- if !proto.Equal(sess.TabletAlias, shardSession.TabletAlias) {
- errorDetails := fmt.Sprintf("got non-matching aliases (%v vs %v) for the same target (keyspace: %v, tabletType: %v, shard: %v)",
- sess.TabletAlias, shardSession.TabletAlias,
- sess.Target.Keyspace, sess.Target.TabletType, sess.Target.Shard)
- return nil, vterrors.New(vtrpcpb.Code_FAILED_PRECONDITION, errorDetails)
- }
- // replace the old info with the new one
- sessions[i] = shardSession
- appendSession = false
- break
- }
- }
- if appendSession {
- sessions = append(sessions, shardSession)
- }
+ return nil
+}
- return sessions, nil
+type ShardActionInfo interface {
+ TransactionID() int64
+ ReservedID() int64
+ RowsAffected() bool
+ Alias() *topodatapb.TabletAlias
}
// AppendOrUpdate adds a new ShardSession, or updates an existing one if one already exists for the given shard session
-func (session *SafeSession) AppendOrUpdate(shardSession *vtgatepb.Session_ShardSession, txMode vtgatepb.TransactionMode) error {
+func (session *SafeSession) AppendOrUpdate(target *querypb.Target, info ShardActionInfo, existingSession *vtgatepb.Session_ShardSession, txMode vtgatepb.TransactionMode) error {
session.mu.Lock()
defer session.mu.Unlock()
// additional check of transaction id is required
// as now in autocommit mode there can be session due to reserved connection
// that needs to be stored as shard session.
- if session.autocommitState == autocommitted && shardSession.TransactionId != 0 {
+ if session.autocommitState == autocommitted && info.TransactionID() != 0 {
// Should be unreachable
return vterrors.VT13001("unexpected 'autocommitted' state in transaction")
}
@@ -423,45 +493,62 @@ func (session *SafeSession) AppendOrUpdate(shardSession *vtgatepb.Session_ShardS
}
session.autocommitState = notAutocommittable
- // Always append, in order for rollback to succeed.
- switch session.commitOrder {
- case vtgatepb.CommitOrder_NORMAL:
- if session.queryFromVindex {
- shardSession.VindexOnly = true
+ if existingSession != nil {
+ existingSession.TransactionId = info.TransactionID()
+ existingSession.ReservedId = info.ReservedID()
+ if !existingSession.RowsAffected {
+ existingSession.RowsAffected = info.RowsAffected()
}
- newSessions, err := addOrUpdate(shardSession, session.ShardSessions)
- if err != nil {
+ if existingSession.VindexOnly {
+ existingSession.VindexOnly = session.queryFromVindex
+ }
+ if err := session.singleModeErrorOnCrossShard(txMode, 1); err != nil {
return err
}
- session.ShardSessions = newSessions
+ return nil
+ }
+ newSession := &vtgatepb.Session_ShardSession{
+ Target: target,
+ TabletAlias: info.Alias(),
+ TransactionId: info.TransactionID(),
+ ReservedId: info.ReservedID(),
+ RowsAffected: info.RowsAffected(),
+ VindexOnly: session.queryFromVindex,
+ }
- if session.queryFromVindex {
- break
- }
- // isSingle is enforced only for normal commit order operations.
- if session.isSingleDB(txMode) && len(session.ShardSessions) > 1 {
- count := actualNoOfShardSession(session.ShardSessions)
- if count <= 1 {
- break
- }
- session.mustRollback = true
- return vterrors.Errorf(vtrpcpb.Code_ABORTED, "multi-db transaction attempted: %v", session.ShardSessions)
- }
- case vtgatepb.CommitOrder_PRE:
- newSessions, err := addOrUpdate(shardSession, session.PreSessions)
- if err != nil {
+ // Always append, in order for rollback to succeed.
+ switch session.commitOrder {
+ case vtgatepb.CommitOrder_NORMAL:
+ session.ShardSessions = append(session.ShardSessions, newSession)
+ if err := session.singleModeErrorOnCrossShard(txMode, 1); err != nil {
return err
}
- session.PreSessions = newSessions
+ case vtgatepb.CommitOrder_PRE:
+ session.PreSessions = append(session.PreSessions, newSession)
case vtgatepb.CommitOrder_POST:
- newSessions, err := addOrUpdate(shardSession, session.PostSessions)
- if err != nil {
- return err
- }
- session.PostSessions = newSessions
+ session.PostSessions = append(session.PostSessions, newSession)
default:
// Should be unreachable
- return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "[BUG] SafeSession.AppendOrUpdate: unexpected commitOrder")
+ return vterrors.VT13001(fmt.Sprintf("unexpected commitOrder to append shard session: %v", session.commitOrder))
+ }
+
+ return nil
+}
+
+// singleModeErrorOnCrossShard checks if a transaction violates the Single mode constraint by spanning multiple shards.
+func (session *SafeSession) singleModeErrorOnCrossShard(txMode vtgatepb.TransactionMode, exceedsCrossShard int) error {
+ // Skip the check if:
+ // 1. The query comes from a lookup vindex.
+ // 2. The transaction mode is not Single.
+ // 3. The transaction is not in the normal shard session.
+ if session.queryFromVindex || session.commitOrder != vtgatepb.CommitOrder_NORMAL || !session.isSingleDB(txMode) {
+ return nil
+ }
+
+ // If the transaction spans multiple shards, abort it.
+ if actualNoOfShardSession(session.ShardSessions) > exceedsCrossShard {
+ session.mustRollback = true // Mark the session for rollback.
+ return vterrors.Errorf(vtrpcpb.Code_ABORTED, "multi-db transaction attempted: %v", session.ShardSessions)
}
return nil
@@ -678,12 +765,11 @@ func (session *SafeSession) UpdateLockHeartbeat() {
session.LastLockHeartbeat = time.Now().Unix()
}
-// TriggerLockHeartBeat returns if it time to trigger next lock heartbeat
-func (session *SafeSession) TriggerLockHeartBeat() bool {
+// GetLockHeartbeat returns last time the lock heartbeat was sent.
+func (session *SafeSession) GetLockHeartbeat() int64 {
session.mu.Lock()
defer session.mu.Unlock()
- now := time.Now().Unix()
- return now-session.LastLockHeartbeat >= int64(lockHeartbeatTime.Seconds())
+ return session.LastLockHeartbeat
}
// InLockSession returns whether locking is used on this session.
@@ -836,9 +922,7 @@ func (session *SafeSession) GetOrCreateOptions() *querypb.ExecuteOptions {
return session.Session.Options
}
-var _ iQueryOption = (*SafeSession)(nil)
-
-func (session *SafeSession) cachePlan() bool {
+func (session *SafeSession) CachePlan() bool {
if session == nil || session.Options == nil {
return true
}
@@ -849,7 +933,7 @@ func (session *SafeSession) cachePlan() bool {
return !(session.Options.SkipQueryPlanCache || session.Options.HasCreatedTempTables)
}
-func (session *SafeSession) getSelectLimit() int {
+func (session *SafeSession) GetSelectLimit() int {
if session == nil || session.Options == nil {
return -1
}
@@ -860,16 +944,16 @@ func (session *SafeSession) getSelectLimit() int {
return int(session.Options.SqlSelectLimit)
}
-// isTxOpen returns true if there is open connection to any of the shard.
-func (session *SafeSession) isTxOpen() bool {
+// IsTxOpen returns true if there is open connection to any of the shard.
+func (session *SafeSession) IsTxOpen() bool {
session.mu.Lock()
defer session.mu.Unlock()
return len(session.ShardSessions) > 0 || len(session.PreSessions) > 0 || len(session.PostSessions) > 0
}
-// getSessions returns the shard session for the current commit order.
-func (session *SafeSession) getSessions() []*vtgatepb.Session_ShardSession {
+// GetSessions returns the shard session for the current commit order.
+func (session *SafeSession) GetSessions() []*vtgatepb.Session_ShardSession {
session.mu.Lock()
defer session.mu.Unlock()
@@ -956,7 +1040,7 @@ func (session *SafeSession) EnableLogging(parser *sqlparser.Parser) {
session.mu.Lock()
defer session.mu.Unlock()
- session.logging = &executeLogger{
+ session.logging = &ExecuteLogger{
parser: parser,
}
}
@@ -994,7 +1078,15 @@ func (session *SafeSession) GetPrepareData(name string) *vtgatepb.PrepareData {
return session.PrepareStatement[name]
}
-func (l *executeLogger) log(primitive engine.Primitive, target *querypb.Target, gateway srvtopo.Gateway, query string, begin bool, bv map[string]*querypb.BindVariable) {
+func (session *SafeSession) Log(primitive engine.Primitive, target *querypb.Target, gateway srvtopo.Gateway, query string, begin bool, bv map[string]*querypb.BindVariable) {
+ session.logging.Log(primitive, target, gateway, query, begin, bv)
+}
+
+func (session *SafeSession) GetLogs() []engine.ExecuteEntry {
+ return session.logging.GetLogs()
+}
+
+func (l *ExecuteLogger) Log(primitive engine.Primitive, target *querypb.Target, gateway srvtopo.Gateway, query string, begin bool, bv map[string]*querypb.BindVariable) {
if l == nil {
return
}
@@ -1033,7 +1125,10 @@ func (l *executeLogger) log(primitive engine.Primitive, target *querypb.Target,
})
}
-func (l *executeLogger) GetLogs() []engine.ExecuteEntry {
+func (l *ExecuteLogger) GetLogs() []engine.ExecuteEntry {
+ if l == nil {
+ return nil
+ }
l.mu.Lock()
defer l.mu.Unlock()
result := make([]engine.ExecuteEntry, len(l.entries))
diff --git a/go/vt/vtgate/executorcontext/safe_session_test.go b/go/vt/vtgate/executorcontext/safe_session_test.go
new file mode 100644
index 00000000000..14ea2ad9dac
--- /dev/null
+++ b/go/vt/vtgate/executorcontext/safe_session_test.go
@@ -0,0 +1,201 @@
+/*
+Copyright 2020 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package executorcontext
+
+import (
+ "reflect"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+
+ querypb "vitess.io/vitess/go/vt/proto/query"
+ topodatapb "vitess.io/vitess/go/vt/proto/topodata"
+ vtgatepb "vitess.io/vitess/go/vt/proto/vtgate"
+)
+
+type fakeInfo struct {
+ transactionID int64
+ alias *topodatapb.TabletAlias
+}
+
+func (s *fakeInfo) TransactionID() int64 {
+ return s.transactionID
+}
+
+func (s *fakeInfo) ReservedID() int64 {
+ return 0
+}
+
+func (s *fakeInfo) RowsAffected() bool {
+ return false
+}
+
+func (s *fakeInfo) Alias() *topodatapb.TabletAlias {
+ return s.alias
+}
+
+func info(txId, uid int) ShardActionInfo {
+ return &fakeInfo{transactionID: int64(txId), alias: &topodatapb.TabletAlias{Cell: "cell", Uid: uint32(uid)}}
+}
+
+// TestFailToMultiShardWhenSetToSingleDb tests that single db transactions fails on going multi shard.
+func TestFailToMultiShardWhenSetToSingleDb(t *testing.T) {
+ session := NewSafeSession(&vtgatepb.Session{
+ InTransaction: true, TransactionMode: vtgatepb.TransactionMode_SINGLE,
+ })
+
+ err := session.AppendOrUpdate(
+ &querypb.Target{Keyspace: "keyspace", Shard: "0"},
+ info(1, 0),
+ nil,
+ vtgatepb.TransactionMode_SINGLE)
+ require.NoError(t, err)
+ err = session.AppendOrUpdate(
+ &querypb.Target{Keyspace: "keyspace", Shard: "1"},
+ info(1, 1),
+ nil,
+ vtgatepb.TransactionMode_SINGLE)
+ require.Error(t, err)
+}
+
+// TestSingleDbUpdateToMultiShard tests that a single db transaction cannot be updated to multi shard.
+func TestSingleDbUpdateToMultiShard(t *testing.T) {
+ session := NewSafeSession(&vtgatepb.Session{
+ InTransaction: true, TransactionMode: vtgatepb.TransactionMode_SINGLE,
+ })
+
+ // shard session s0 due to a vindex query
+ session.queryFromVindex = true
+ err := session.AppendOrUpdate(
+ &querypb.Target{Keyspace: "keyspace", Shard: "0"},
+ info(1, 0),
+ nil,
+ vtgatepb.TransactionMode_SINGLE)
+ require.NoError(t, err)
+ session.queryFromVindex = false
+
+ // shard session s1
+ err = session.AppendOrUpdate(
+ &querypb.Target{Keyspace: "keyspace", Shard: "1"},
+ info(1, 1),
+ nil,
+ vtgatepb.TransactionMode_SINGLE)
+ require.NoError(t, err)
+
+ // shard session s0 with normal query
+ err = session.AppendOrUpdate(
+ &querypb.Target{Keyspace: "keyspace", Shard: "0"},
+ info(1, 1),
+ session.ShardSessions[0],
+ vtgatepb.TransactionMode_SINGLE)
+ require.Error(t, err)
+}
+
+// TestSingleDbPreFailOnFind tests that finding a shard session fails
+// if already shard session exists on another shard and the query is not from vindex.
+func TestSingleDbPreFailOnFind(t *testing.T) {
+ session := NewSafeSession(&vtgatepb.Session{
+ InTransaction: true, TransactionMode: vtgatepb.TransactionMode_SINGLE,
+ })
+
+ // shard session s0 due to a vindex query
+ session.queryFromVindex = true
+ err := session.AppendOrUpdate(
+ &querypb.Target{Keyspace: "keyspace", Shard: "0"},
+ info(1, 0),
+ nil,
+ vtgatepb.TransactionMode_SINGLE)
+ require.NoError(t, err)
+ session.queryFromVindex = false
+
+ // shard session s1
+ err = session.AppendOrUpdate(
+ &querypb.Target{Keyspace: "keyspace", Shard: "1"},
+ info(1, 1),
+ nil,
+ vtgatepb.TransactionMode_SINGLE)
+ require.NoError(t, err)
+
+ // shard session s1 for normal query again - should not fail as already part of the session.
+ ss, err := session.FindAndChangeSessionIfInSingleTxMode(
+ "keyspace",
+ "1",
+ topodatapb.TabletType_UNKNOWN,
+ vtgatepb.TransactionMode_SINGLE)
+ require.NoError(t, err)
+ require.NotNil(t, ss)
+ require.False(t, ss.VindexOnly)
+ require.EqualValues(t, 1, ss.TabletAlias.Uid)
+
+ // shard session s0 for normal query
+ _, err = session.FindAndChangeSessionIfInSingleTxMode(
+ "keyspace",
+ "0",
+ topodatapb.TabletType_UNKNOWN,
+ vtgatepb.TransactionMode_SINGLE)
+ require.Error(t, err)
+}
+
+func TestPrequeries(t *testing.T) {
+ session := NewSafeSession(&vtgatepb.Session{
+ SystemVariables: map[string]string{
+ "s1": "'apa'",
+ "s2": "42",
+ },
+ })
+
+ want := []string{"set s1 = 'apa', s2 = 42"}
+ preQueries := session.SetPreQueries()
+
+ if !reflect.DeepEqual(want, preQueries) {
+ t.Errorf("got %v but wanted %v", preQueries, want)
+ }
+}
+
+func TestTimeZone(t *testing.T) {
+ testCases := []struct {
+ tz string
+ want string
+ }{
+ {
+ tz: "'Europe/Amsterdam'",
+ want: "Europe/Amsterdam",
+ },
+ {
+ tz: "'+02:00'",
+ want: "UTC+02:00",
+ },
+ {
+ tz: "foo",
+ want: (*time.Location)(nil).String(),
+ },
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc.tz, func(t *testing.T) {
+ session := NewSafeSession(&vtgatepb.Session{
+ SystemVariables: map[string]string{
+ "time_zone": tc.tz,
+ },
+ })
+
+ assert.Equal(t, tc.want, session.TimeZone().String())
+ })
+ }
+}
diff --git a/go/vt/vtgate/vcursor_impl.go b/go/vt/vtgate/executorcontext/vcursor_impl.go
similarity index 65%
rename from go/vt/vtgate/vcursor_impl.go
rename to go/vt/vtgate/executorcontext/vcursor_impl.go
index 4f616f77fc8..c1f341b38cf 100644
--- a/go/vt/vtgate/vcursor_impl.go
+++ b/go/vt/vtgate/executorcontext/vcursor_impl.go
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-package vtgate
+package executorcontext
import (
"context"
@@ -26,10 +26,12 @@ import (
"time"
"github.com/google/uuid"
+ "golang.org/x/exp/maps"
"vitess.io/vitess/go/mysql/collations"
"vitess.io/vitess/go/mysql/config"
"vitess.io/vitess/go/mysql/sqlerror"
+ "vitess.io/vitess/go/protoutil"
"vitess.io/vitess/go/sqltypes"
"vitess.io/vitess/go/vt/callerid"
"vitess.io/vitess/go/vt/discovery"
@@ -59,38 +61,62 @@ import (
)
var (
- _ engine.VCursor = (*vcursorImpl)(nil)
- _ plancontext.VSchema = (*vcursorImpl)(nil)
- _ iExecute = (*Executor)(nil)
- _ vindexes.VCursor = (*vcursorImpl)(nil)
+ _ engine.VCursor = (*VCursorImpl)(nil)
+ _ plancontext.VSchema = (*VCursorImpl)(nil)
+ _ vindexes.VCursor = (*VCursorImpl)(nil)
)
+var ErrNoKeyspace = vterrors.VT09005()
+
type (
+ ResultsObserver interface {
+ Observe(*sqltypes.Result)
+ }
+
+ VCursorConfig struct {
+ Collation collations.ID
+
+ MaxMemoryRows int
+ EnableShardRouting bool
+ DefaultTabletType topodatapb.TabletType
+ QueryTimeout int
+ DBDDLPlugin string
+ ForeignKeyMode vschemapb.Keyspace_ForeignKeyMode
+ SetVarEnabled bool
+ EnableViews bool
+ WarnShardedOnly bool
+ PlannerVersion plancontext.PlannerVersion
+
+ WarmingReadsPercent int
+ WarmingReadsTimeout time.Duration
+ WarmingReadsChannel chan bool
+ }
+
// vcursor_impl needs these facilities to be able to be able to execute queries for vindexes
iExecute interface {
Execute(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, method string, session *SafeSession, s string, vars map[string]*querypb.BindVariable) (*sqltypes.Result, error)
- ExecuteMultiShard(ctx context.Context, primitive engine.Primitive, rss []*srvtopo.ResolvedShard, queries []*querypb.BoundQuery, session *SafeSession, autocommit bool, ignoreMaxMemoryRows bool, resultsObserver resultsObserver) (qr *sqltypes.Result, errs []error)
- StreamExecuteMulti(ctx context.Context, primitive engine.Primitive, query string, rss []*srvtopo.ResolvedShard, vars []map[string]*querypb.BindVariable, session *SafeSession, autocommit bool, callback func(reply *sqltypes.Result) error, observer resultsObserver) []error
+ ExecuteMultiShard(ctx context.Context, primitive engine.Primitive, rss []*srvtopo.ResolvedShard, queries []*querypb.BoundQuery, session *SafeSession, autocommit bool, ignoreMaxMemoryRows bool, resultsObserver ResultsObserver) (qr *sqltypes.Result, errs []error)
+ StreamExecuteMulti(ctx context.Context, primitive engine.Primitive, query string, rss []*srvtopo.ResolvedShard, vars []map[string]*querypb.BindVariable, session *SafeSession, autocommit bool, callback func(reply *sqltypes.Result) error, observer ResultsObserver) []error
ExecuteLock(ctx context.Context, rs *srvtopo.ResolvedShard, query *querypb.BoundQuery, session *SafeSession, lockFuncType sqlparser.LockingFuncType) (*sqltypes.Result, error)
Commit(ctx context.Context, safeSession *SafeSession) error
ExecuteMessageStream(ctx context.Context, rss []*srvtopo.ResolvedShard, name string, callback func(*sqltypes.Result) error) error
ExecuteVStream(ctx context.Context, rss []*srvtopo.ResolvedShard, filter *binlogdatapb.Filter, gtid string, callback func(evs []*binlogdatapb.VEvent) error) error
ReleaseLock(ctx context.Context, session *SafeSession) error
- showVitessReplicationStatus(ctx context.Context, filter *sqlparser.ShowFilter) (*sqltypes.Result, error)
- showShards(ctx context.Context, filter *sqlparser.ShowFilter, destTabletType topodatapb.TabletType) (*sqltypes.Result, error)
- showTablets(filter *sqlparser.ShowFilter) (*sqltypes.Result, error)
- showVitessMetadata(ctx context.Context, filter *sqlparser.ShowFilter) (*sqltypes.Result, error)
- setVitessMetadata(ctx context.Context, name, value string) error
+ ShowVitessReplicationStatus(ctx context.Context, filter *sqlparser.ShowFilter) (*sqltypes.Result, error)
+ ShowShards(ctx context.Context, filter *sqlparser.ShowFilter, destTabletType topodatapb.TabletType) (*sqltypes.Result, error)
+ ShowTablets(filter *sqlparser.ShowFilter) (*sqltypes.Result, error)
+ ShowVitessMetadata(ctx context.Context, filter *sqlparser.ShowFilter) (*sqltypes.Result, error)
+ SetVitessMetadata(ctx context.Context, name, value string) error
// TODO: remove when resolver is gone
- ParseDestinationTarget(targetString string) (string, topodatapb.TabletType, key.Destination, error)
VSchema() *vindexes.VSchema
- planPrepareStmt(ctx context.Context, vcursor *vcursorImpl, query string) (*engine.Plan, sqlparser.Statement, error)
+ PlanPrepareStmt(ctx context.Context, vcursor *VCursorImpl, query string) (*engine.Plan, sqlparser.Statement, error)
- environment() *vtenv.Environment
+ Environment() *vtenv.Environment
ReadTransaction(ctx context.Context, transactionID string) (*querypb.TransactionMetadata, error)
UnresolvedTransactions(ctx context.Context, targets []*querypb.Target) ([]*querypb.TransactionMetadata, error)
+ AddWarningCount(name string, value int64)
}
// VSchemaOperator is an interface to Vschema Operations
@@ -99,10 +125,11 @@ type (
UpdateVSchema(ctx context.Context, ksName string, vschema *vschemapb.SrvVSchema) error
}
- // vcursorImpl implements the VCursor functionality used by dependent
+ // VCursorImpl implements the VCursor functionality used by dependent
// packages to call back into VTGate.
- vcursorImpl struct {
- safeSession *SafeSession
+ VCursorImpl struct {
+ config VCursorConfig
+ SafeSession *SafeSession
keyspace string
tabletType topodatapb.TabletType
destination key.Destination
@@ -111,7 +138,6 @@ type (
resolver *srvtopo.Resolver
topoServer *topo.Server
logStats *logstats.LogStats
- collation collations.ID
// fkChecksState stores the state of foreign key checks variable.
// This state is meant to be the final fk checks state after consulting the
@@ -122,16 +148,11 @@ type (
vschema *vindexes.VSchema
vm VSchemaOperator
semTable *semantics.SemTable
- warnShardedOnly bool // when using sharded only features, a warning will be warnings field
queryTimeout time.Duration
warnings []*querypb.QueryWarning // any warnings that are accumulated during the planning phase are stored here
- pv plancontext.PlannerVersion
- warmingReadsPercent int
- warmingReadsChannel chan bool
-
- resultsObserver resultsObserver
+ observer ResultsObserver
// this is a map of the number of rows that every primitive has returned
// if this field is nil, it means that we are not logging operator traffic
@@ -140,23 +161,23 @@ type (
}
)
-// newVcursorImpl creates a vcursorImpl. Before creating this object, you have to separate out any marginComments that came with
+// NewVCursorImpl creates a VCursorImpl. Before creating this object, you have to separate out any marginComments that came with
// the query and supply it here. Trailing comments are typically sent by the application for various reasons,
// including as identifying markers. So, they have to be added back to all queries that are executed
// on behalf of the original query.
-func newVCursorImpl(
+func NewVCursorImpl(
safeSession *SafeSession,
marginComments sqlparser.MarginComments,
- executor *Executor,
+ executor iExecute,
logStats *logstats.LogStats,
vm VSchemaOperator,
vschema *vindexes.VSchema,
resolver *srvtopo.Resolver,
serv srvtopo.Server,
- warnShardedOnly bool,
- pv plancontext.PlannerVersion,
-) (*vcursorImpl, error) {
- keyspace, tabletType, destination, err := parseDestinationTarget(safeSession.TargetString, vschema)
+ observer ResultsObserver,
+ cfg VCursorConfig,
+) (*VCursorImpl, error) {
+ keyspace, tabletType, destination, err := ParseDestinationTarget(safeSession.TargetString, cfg.DefaultTabletType, vschema)
if err != nil {
return nil, err
}
@@ -171,107 +192,175 @@ func newVCursorImpl(
}
}
- // we only support collations for the new TabletGateway implementation
- var connCollation collations.ID
- if executor != nil {
- if gw, isTabletGw := executor.resolver.resolver.GetGateway().(*TabletGateway); isTabletGw {
- connCollation = gw.DefaultConnCollation()
- }
- }
- if connCollation == collations.Unknown {
- connCollation = executor.env.CollationEnv().DefaultConnectionCharset()
- }
-
- warmingReadsPct := 0
- var warmingReadsChan chan bool
- if executor != nil {
- warmingReadsPct = executor.warmingReadsPercent
- warmingReadsChan = executor.warmingReadsChannel
- }
- return &vcursorImpl{
- safeSession: safeSession,
- keyspace: keyspace,
- tabletType: tabletType,
- destination: destination,
- marginComments: marginComments,
- executor: executor,
- logStats: logStats,
- collation: connCollation,
- resolver: resolver,
- vschema: vschema,
- vm: vm,
- topoServer: ts,
- warnShardedOnly: warnShardedOnly,
- pv: pv,
- warmingReadsPercent: warmingReadsPct,
- warmingReadsChannel: warmingReadsChan,
- resultsObserver: nullResultsObserver{},
+ return &VCursorImpl{
+ config: cfg,
+ SafeSession: safeSession,
+ keyspace: keyspace,
+ tabletType: tabletType,
+ destination: destination,
+ marginComments: marginComments,
+ executor: executor,
+ logStats: logStats,
+ resolver: resolver,
+ vschema: vschema,
+ vm: vm,
+ topoServer: ts,
+
+ observer: observer,
}, nil
}
+func (vc *VCursorImpl) CloneForMirroring(ctx context.Context) engine.VCursor {
+ callerId := callerid.EffectiveCallerIDFromContext(ctx)
+ immediateCallerId := callerid.ImmediateCallerIDFromContext(ctx)
+
+ clonedCtx := callerid.NewContext(ctx, callerId, immediateCallerId)
+
+ v := &VCursorImpl{
+ config: vc.config,
+ SafeSession: NewAutocommitSession(vc.SafeSession.Session),
+ keyspace: vc.keyspace,
+ tabletType: vc.tabletType,
+ destination: vc.destination,
+ marginComments: vc.marginComments,
+ executor: vc.executor,
+ resolver: vc.resolver,
+ topoServer: vc.topoServer,
+ logStats: &logstats.LogStats{Ctx: clonedCtx},
+ ignoreMaxMemoryRows: vc.ignoreMaxMemoryRows,
+ vschema: vc.vschema,
+ vm: vc.vm,
+ semTable: vc.semTable,
+ warnings: vc.warnings,
+ observer: vc.observer,
+ }
+
+ v.marginComments.Trailing += "/* mirror query */"
+
+ return v
+}
+
+func (vc *VCursorImpl) CloneForReplicaWarming(ctx context.Context) engine.VCursor {
+ callerId := callerid.EffectiveCallerIDFromContext(ctx)
+ immediateCallerId := callerid.ImmediateCallerIDFromContext(ctx)
+
+ timedCtx, _ := context.WithTimeout(context.Background(), vc.config.WarmingReadsTimeout) // nolint
+ clonedCtx := callerid.NewContext(timedCtx, callerId, immediateCallerId)
+
+ v := &VCursorImpl{
+ config: vc.config,
+ SafeSession: NewAutocommitSession(vc.SafeSession.Session),
+ keyspace: vc.keyspace,
+ tabletType: topodatapb.TabletType_REPLICA,
+ destination: vc.destination,
+ marginComments: vc.marginComments,
+ executor: vc.executor,
+ resolver: vc.resolver,
+ topoServer: vc.topoServer,
+ logStats: &logstats.LogStats{Ctx: clonedCtx},
+
+ ignoreMaxMemoryRows: vc.ignoreMaxMemoryRows,
+ vschema: vc.vschema,
+ vm: vc.vm,
+ semTable: vc.semTable,
+ warnings: vc.warnings,
+ observer: vc.observer,
+ }
+
+ v.marginComments.Trailing += "/* warming read */"
+
+ return v
+}
+
+func (vc *VCursorImpl) cloneWithAutocommitSession() *VCursorImpl {
+ safeSession := vc.SafeSession.NewAutocommitSession()
+ return &VCursorImpl{
+ config: vc.config,
+ SafeSession: safeSession,
+ keyspace: vc.keyspace,
+ tabletType: vc.tabletType,
+ destination: vc.destination,
+ marginComments: vc.marginComments,
+ executor: vc.executor,
+ logStats: vc.logStats,
+ resolver: vc.resolver,
+ vschema: vc.vschema,
+ vm: vc.vm,
+ topoServer: vc.topoServer,
+ observer: vc.observer,
+ }
+}
+
// HasSystemVariables returns whether the session has set system variables or not
-func (vc *vcursorImpl) HasSystemVariables() bool {
- return vc.safeSession.HasSystemVariables()
+func (vc *VCursorImpl) HasSystemVariables() bool {
+ return vc.SafeSession.HasSystemVariables()
}
// GetSystemVariables takes a visitor function that will save each system variables of the session
-func (vc *vcursorImpl) GetSystemVariables(f func(k string, v string)) {
- vc.safeSession.GetSystemVariables(f)
+func (vc *VCursorImpl) GetSystemVariables(f func(k string, v string)) {
+ vc.SafeSession.GetSystemVariables(f)
+}
+
+// GetSystemVariablesCopy returns a copy of the system variables of the session. Changes to the original map will not affect the session.
+func (vc *VCursorImpl) GetSystemVariablesCopy() map[string]string {
+ vc.SafeSession.mu.Lock()
+ defer vc.SafeSession.mu.Unlock()
+ return maps.Clone(vc.SafeSession.SystemVariables)
}
// ConnCollation returns the collation of this session
-func (vc *vcursorImpl) ConnCollation() collations.ID {
- return vc.collation
+func (vc *VCursorImpl) ConnCollation() collations.ID {
+ return vc.config.Collation
}
// Environment returns the vtenv associated with this session
-func (vc *vcursorImpl) Environment() *vtenv.Environment {
- return vc.executor.environment()
+func (vc *VCursorImpl) Environment() *vtenv.Environment {
+ return vc.executor.Environment()
}
-func (vc *vcursorImpl) TimeZone() *time.Location {
- return vc.safeSession.TimeZone()
+func (vc *VCursorImpl) TimeZone() *time.Location {
+ return vc.SafeSession.TimeZone()
}
-func (vc *vcursorImpl) SQLMode() string {
+func (vc *VCursorImpl) SQLMode() string {
// TODO: Implement return the current sql_mode.
// This is currently hardcoded to the default in MySQL 8.0.
return config.DefaultSQLMode
}
// MaxMemoryRows returns the maxMemoryRows flag value.
-func (vc *vcursorImpl) MaxMemoryRows() int {
- return maxMemoryRows
+func (vc *VCursorImpl) MaxMemoryRows() int {
+ return vc.config.MaxMemoryRows
}
// ExceedsMaxMemoryRows returns a boolean indicating whether the maxMemoryRows value has been exceeded.
// Returns false if the max memory rows override directive is set to true.
-func (vc *vcursorImpl) ExceedsMaxMemoryRows(numRows int) bool {
- return !vc.ignoreMaxMemoryRows && numRows > maxMemoryRows
+func (vc *VCursorImpl) ExceedsMaxMemoryRows(numRows int) bool {
+ return !vc.ignoreMaxMemoryRows && numRows > vc.config.MaxMemoryRows
}
// SetIgnoreMaxMemoryRows sets the ignoreMaxMemoryRows value.
-func (vc *vcursorImpl) SetIgnoreMaxMemoryRows(ignoreMaxMemoryRows bool) {
+func (vc *VCursorImpl) SetIgnoreMaxMemoryRows(ignoreMaxMemoryRows bool) {
vc.ignoreMaxMemoryRows = ignoreMaxMemoryRows
}
// RecordWarning stores the given warning in the current session
-func (vc *vcursorImpl) RecordWarning(warning *querypb.QueryWarning) {
- vc.safeSession.RecordWarning(warning)
+func (vc *VCursorImpl) RecordWarning(warning *querypb.QueryWarning) {
+ vc.SafeSession.RecordWarning(warning)
}
// IsShardRoutingEnabled implements the VCursor interface.
-func (vc *vcursorImpl) IsShardRoutingEnabled() bool {
- return enableShardRouting
+func (vc *VCursorImpl) IsShardRoutingEnabled() bool {
+ return vc.config.EnableShardRouting
}
-func (vc *vcursorImpl) ReadTransaction(ctx context.Context, transactionID string) (*querypb.TransactionMetadata, error) {
+func (vc *VCursorImpl) ReadTransaction(ctx context.Context, transactionID string) (*querypb.TransactionMetadata, error) {
return vc.executor.ReadTransaction(ctx, transactionID)
}
// UnresolvedTransactions gets the unresolved transactions for the given keyspace. If the keyspace is not given,
// then we use the default keyspace.
-func (vc *vcursorImpl) UnresolvedTransactions(ctx context.Context, keyspace string) ([]*querypb.TransactionMetadata, error) {
+func (vc *VCursorImpl) UnresolvedTransactions(ctx context.Context, keyspace string) ([]*querypb.TransactionMetadata, error) {
if keyspace == "" {
keyspace = vc.GetKeyspace()
}
@@ -286,7 +375,7 @@ func (vc *vcursorImpl) UnresolvedTransactions(ctx context.Context, keyspace stri
return vc.executor.UnresolvedTransactions(ctx, targets)
}
-func (vc *vcursorImpl) StartPrimitiveTrace() func() engine.Stats {
+func (vc *VCursorImpl) StartPrimitiveTrace() func() engine.Stats {
vc.interOpStats = make(map[engine.Primitive]engine.RowsReceived)
vc.shardsStats = make(map[engine.Primitive]engine.ShardsQueried)
return func() engine.Stats {
@@ -299,8 +388,8 @@ func (vc *vcursorImpl) StartPrimitiveTrace() func() engine.Stats {
// FindTable finds the specified table. If the keyspace what specified in the input, it gets used as qualifier.
// Otherwise, the keyspace from the request is used, if one was provided.
-func (vc *vcursorImpl) FindTable(name sqlparser.TableName) (*vindexes.Table, string, topodatapb.TabletType, key.Destination, error) {
- destKeyspace, destTabletType, dest, err := vc.executor.ParseDestinationTarget(name.Qualifier.String())
+func (vc *VCursorImpl) FindTable(name sqlparser.TableName) (*vindexes.Table, string, topodatapb.TabletType, key.Destination, error) {
+ destKeyspace, destTabletType, dest, err := vc.ParseDestinationTarget(name.Qualifier.String())
if err != nil {
return nil, "", destTabletType, nil, err
}
@@ -314,8 +403,8 @@ func (vc *vcursorImpl) FindTable(name sqlparser.TableName) (*vindexes.Table, str
return table, destKeyspace, destTabletType, dest, err
}
-func (vc *vcursorImpl) FindView(name sqlparser.TableName) sqlparser.SelectStatement {
- ks, _, _, err := vc.executor.ParseDestinationTarget(name.Qualifier.String())
+func (vc *VCursorImpl) FindView(name sqlparser.TableName) sqlparser.SelectStatement {
+ ks, _, _, err := vc.ParseDestinationTarget(name.Qualifier.String())
if err != nil {
return nil
}
@@ -325,8 +414,8 @@ func (vc *vcursorImpl) FindView(name sqlparser.TableName) sqlparser.SelectStatem
return vc.vschema.FindView(ks, name.Name.String())
}
-func (vc *vcursorImpl) FindRoutedTable(name sqlparser.TableName) (*vindexes.Table, error) {
- destKeyspace, destTabletType, _, err := vc.executor.ParseDestinationTarget(name.Qualifier.String())
+func (vc *VCursorImpl) FindRoutedTable(name sqlparser.TableName) (*vindexes.Table, error) {
+ destKeyspace, destTabletType, _, err := vc.ParseDestinationTarget(name.Qualifier.String())
if err != nil {
return nil, err
}
@@ -343,14 +432,14 @@ func (vc *vcursorImpl) FindRoutedTable(name sqlparser.TableName) (*vindexes.Tabl
}
// FindTableOrVindex finds the specified table or vindex.
-func (vc *vcursorImpl) FindTableOrVindex(name sqlparser.TableName) (*vindexes.Table, vindexes.Vindex, string, topodatapb.TabletType, key.Destination, error) {
+func (vc *VCursorImpl) FindTableOrVindex(name sqlparser.TableName) (*vindexes.Table, vindexes.Vindex, string, topodatapb.TabletType, key.Destination, error) {
if name.Qualifier.IsEmpty() && name.Name.String() == "dual" {
// The magical MySQL dual table should only be resolved
// when it is not qualified by a database name.
return vc.getDualTable()
}
- destKeyspace, destTabletType, dest, err := vc.executor.ParseDestinationTarget(name.Qualifier.String())
+ destKeyspace, destTabletType, dest, err := ParseDestinationTarget(name.Qualifier.String(), vc.tabletType, vc.vschema)
if err != nil {
return nil, nil, "", destTabletType, nil, err
}
@@ -364,7 +453,23 @@ func (vc *vcursorImpl) FindTableOrVindex(name sqlparser.TableName) (*vindexes.Ta
return table, vindex, destKeyspace, destTabletType, dest, nil
}
-func (vc *vcursorImpl) getDualTable() (*vindexes.Table, vindexes.Vindex, string, topodatapb.TabletType, key.Destination, error) {
+func (vc *VCursorImpl) ParseDestinationTarget(targetString string) (string, topodatapb.TabletType, key.Destination, error) {
+ return ParseDestinationTarget(targetString, vc.tabletType, vc.vschema)
+}
+
+// ParseDestinationTarget parses destination target string and provides a keyspace if possible.
+func ParseDestinationTarget(targetString string, tablet topodatapb.TabletType, vschema *vindexes.VSchema) (string, topodatapb.TabletType, key.Destination, error) {
+ destKeyspace, destTabletType, dest, err := topoprotopb.ParseDestination(targetString, tablet)
+ // If the keyspace is not specified, and there is only one keyspace in the VSchema, use that.
+ if destKeyspace == "" && len(vschema.Keyspaces) == 1 {
+ for k := range vschema.Keyspaces {
+ destKeyspace = k
+ }
+ }
+ return destKeyspace, destTabletType, dest, err
+}
+
+func (vc *VCursorImpl) getDualTable() (*vindexes.Table, vindexes.Vindex, string, topodatapb.TabletType, key.Destination, error) {
ksName := vc.getActualKeyspace()
var ks *vindexes.Keyspace
if ksName == "" {
@@ -381,7 +486,7 @@ func (vc *vcursorImpl) getDualTable() (*vindexes.Table, vindexes.Vindex, string,
return tbl, nil, ksName, topodatapb.TabletType_PRIMARY, nil, nil
}
-func (vc *vcursorImpl) getActualKeyspace() string {
+func (vc *VCursorImpl) getActualKeyspace() string {
if !sqlparser.SystemSchema(vc.keyspace) {
return vc.keyspace
}
@@ -392,12 +497,12 @@ func (vc *vcursorImpl) getActualKeyspace() string {
return ks.Name
}
-// DefaultKeyspace returns the default keyspace of the current request
+// SelectedKeyspace returns the selected keyspace of the current request
// if there is one. If the keyspace specified in the target cannot be
// identified, it returns an error.
-func (vc *vcursorImpl) DefaultKeyspace() (*vindexes.Keyspace, error) {
+func (vc *VCursorImpl) SelectedKeyspace() (*vindexes.Keyspace, error) {
if ignoreKeyspace(vc.keyspace) {
- return nil, errNoKeyspace
+ return nil, ErrNoKeyspace
}
ks, ok := vc.vschema.Keyspaces[vc.keyspace]
if !ok {
@@ -408,12 +513,12 @@ func (vc *vcursorImpl) DefaultKeyspace() (*vindexes.Keyspace, error) {
var errNoDbAvailable = vterrors.NewErrorf(vtrpcpb.Code_FAILED_PRECONDITION, vterrors.NoDB, "no database available")
-func (vc *vcursorImpl) AnyKeyspace() (*vindexes.Keyspace, error) {
- keyspace, err := vc.DefaultKeyspace()
+func (vc *VCursorImpl) AnyKeyspace() (*vindexes.Keyspace, error) {
+ keyspace, err := vc.SelectedKeyspace()
if err == nil {
return keyspace, nil
}
- if err != errNoKeyspace {
+ if err != ErrNoKeyspace {
return nil, err
}
@@ -434,7 +539,7 @@ func (vc *vcursorImpl) AnyKeyspace() (*vindexes.Keyspace, error) {
}
// getSortedServingKeyspaces gets the sorted serving keyspaces
-func (vc *vcursorImpl) getSortedServingKeyspaces() []*vindexes.Keyspace {
+func (vc *VCursorImpl) getSortedServingKeyspaces() []*vindexes.Keyspace {
var keyspaces []*vindexes.Keyspace
if vc.resolver != nil && vc.resolver.GetGateway() != nil {
@@ -458,7 +563,7 @@ func (vc *vcursorImpl) getSortedServingKeyspaces() []*vindexes.Keyspace {
return keyspaces
}
-func (vc *vcursorImpl) FirstSortedKeyspace() (*vindexes.Keyspace, error) {
+func (vc *VCursorImpl) FirstSortedKeyspace() (*vindexes.Keyspace, error) {
if len(vc.vschema.Keyspaces) == 0 {
return nil, errNoDbAvailable
}
@@ -468,17 +573,17 @@ func (vc *vcursorImpl) FirstSortedKeyspace() (*vindexes.Keyspace, error) {
}
// SysVarSetEnabled implements the ContextVSchema interface
-func (vc *vcursorImpl) SysVarSetEnabled() bool {
+func (vc *VCursorImpl) SysVarSetEnabled() bool {
return vc.GetSessionEnableSystemSettings()
}
// KeyspaceExists provides whether the keyspace exists or not.
-func (vc *vcursorImpl) KeyspaceExists(ks string) bool {
+func (vc *VCursorImpl) KeyspaceExists(ks string) bool {
return vc.vschema.Keyspaces[ks] != nil
}
// AllKeyspace implements the ContextVSchema interface
-func (vc *vcursorImpl) AllKeyspace() ([]*vindexes.Keyspace, error) {
+func (vc *VCursorImpl) AllKeyspace() ([]*vindexes.Keyspace, error) {
if len(vc.vschema.Keyspaces) == 0 {
return nil, errNoDbAvailable
}
@@ -490,7 +595,7 @@ func (vc *vcursorImpl) AllKeyspace() ([]*vindexes.Keyspace, error) {
}
// FindKeyspace implements the VSchema interface
-func (vc *vcursorImpl) FindKeyspace(keyspace string) (*vindexes.Keyspace, error) {
+func (vc *VCursorImpl) FindKeyspace(keyspace string) (*vindexes.Keyspace, error) {
if len(vc.vschema.Keyspaces) == 0 {
return nil, errNoDbAvailable
}
@@ -503,28 +608,28 @@ func (vc *vcursorImpl) FindKeyspace(keyspace string) (*vindexes.Keyspace, error)
}
// Planner implements the ContextVSchema interface
-func (vc *vcursorImpl) Planner() plancontext.PlannerVersion {
- if vc.safeSession.Options != nil &&
- vc.safeSession.Options.PlannerVersion != querypb.ExecuteOptions_DEFAULT_PLANNER {
- return vc.safeSession.Options.PlannerVersion
+func (vc *VCursorImpl) Planner() plancontext.PlannerVersion {
+ if vc.SafeSession.Options != nil &&
+ vc.SafeSession.Options.PlannerVersion != querypb.ExecuteOptions_DEFAULT_PLANNER {
+ return vc.SafeSession.Options.PlannerVersion
}
- return vc.pv
+ return vc.config.PlannerVersion
}
// GetSemTable implements the ContextVSchema interface
-func (vc *vcursorImpl) GetSemTable() *semantics.SemTable {
+func (vc *VCursorImpl) GetSemTable() *semantics.SemTable {
return vc.semTable
}
// TargetString returns the current TargetString of the session.
-func (vc *vcursorImpl) TargetString() string {
- return vc.safeSession.TargetString
+func (vc *VCursorImpl) TargetString() string {
+ return vc.SafeSession.TargetString
}
// MaxBufferingRetries is to represent max retries on buffering.
const MaxBufferingRetries = 3
-func (vc *vcursorImpl) ExecutePrimitive(ctx context.Context, primitive engine.Primitive, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) {
+func (vc *VCursorImpl) ExecutePrimitive(ctx context.Context, primitive engine.Primitive, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) {
for try := 0; try < MaxBufferingRetries; try++ {
res, err := primitive.TryExecute(ctx, vc, bindVars, wantfields)
if err != nil && vterrors.RootCause(err) == buffer.ShardMissingError {
@@ -536,7 +641,7 @@ func (vc *vcursorImpl) ExecutePrimitive(ctx context.Context, primitive engine.Pr
return nil, vterrors.New(vtrpcpb.Code_UNAVAILABLE, "upstream shards are not available")
}
-func (vc *vcursorImpl) logOpTraffic(primitive engine.Primitive, res *sqltypes.Result) {
+func (vc *VCursorImpl) logOpTraffic(primitive engine.Primitive, res *sqltypes.Result) {
if vc.interOpStats != nil {
rows := vc.interOpStats[primitive]
if res == nil {
@@ -548,14 +653,14 @@ func (vc *vcursorImpl) logOpTraffic(primitive engine.Primitive, res *sqltypes.Re
}
}
-func (vc *vcursorImpl) logShardsQueried(primitive engine.Primitive, shardsNb int) {
+func (vc *VCursorImpl) logShardsQueried(primitive engine.Primitive, shardsNb int) {
if vc.shardsStats != nil {
vc.shardsStats[primitive] += engine.ShardsQueried(shardsNb)
}
}
-func (vc *vcursorImpl) ExecutePrimitiveStandalone(ctx context.Context, primitive engine.Primitive, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) {
- // clone the vcursorImpl with a new session.
+func (vc *VCursorImpl) ExecutePrimitiveStandalone(ctx context.Context, primitive engine.Primitive, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) {
+ // clone the VCursorImpl with a new session.
newVC := vc.cloneWithAutocommitSession()
for try := 0; try < MaxBufferingRetries; try++ {
res, err := primitive.TryExecute(ctx, newVC, bindVars, wantfields)
@@ -568,7 +673,7 @@ func (vc *vcursorImpl) ExecutePrimitiveStandalone(ctx context.Context, primitive
return nil, vterrors.New(vtrpcpb.Code_UNAVAILABLE, "upstream shards are not available")
}
-func (vc *vcursorImpl) wrapCallback(callback func(*sqltypes.Result) error, primitive engine.Primitive) func(*sqltypes.Result) error {
+func (vc *VCursorImpl) wrapCallback(callback func(*sqltypes.Result) error, primitive engine.Primitive) func(*sqltypes.Result) error {
if vc.interOpStats == nil {
return callback
}
@@ -579,7 +684,7 @@ func (vc *vcursorImpl) wrapCallback(callback func(*sqltypes.Result) error, primi
}
}
-func (vc *vcursorImpl) StreamExecutePrimitive(ctx context.Context, primitive engine.Primitive, bindVars map[string]*querypb.BindVariable, wantfields bool, callback func(*sqltypes.Result) error) error {
+func (vc *VCursorImpl) StreamExecutePrimitive(ctx context.Context, primitive engine.Primitive, bindVars map[string]*querypb.BindVariable, wantfields bool, callback func(*sqltypes.Result) error) error {
callback = vc.wrapCallback(callback, primitive)
for try := 0; try < MaxBufferingRetries; try++ {
@@ -592,10 +697,10 @@ func (vc *vcursorImpl) StreamExecutePrimitive(ctx context.Context, primitive eng
return vterrors.New(vtrpcpb.Code_UNAVAILABLE, "upstream shards are not available")
}
-func (vc *vcursorImpl) StreamExecutePrimitiveStandalone(ctx context.Context, primitive engine.Primitive, bindVars map[string]*querypb.BindVariable, wantfields bool, callback func(result *sqltypes.Result) error) error {
+func (vc *VCursorImpl) StreamExecutePrimitiveStandalone(ctx context.Context, primitive engine.Primitive, bindVars map[string]*querypb.BindVariable, wantfields bool, callback func(result *sqltypes.Result) error) error {
callback = vc.wrapCallback(callback, primitive)
- // clone the vcursorImpl with a new session.
+ // clone the VCursorImpl with a new session.
newVC := vc.cloneWithAutocommitSession()
for try := 0; try < MaxBufferingRetries; try++ {
err := primitive.TryStreamExecute(ctx, newVC, bindVars, wantfields, callback)
@@ -608,12 +713,11 @@ func (vc *vcursorImpl) StreamExecutePrimitiveStandalone(ctx context.Context, pri
}
// Execute is part of the engine.VCursor interface.
-func (vc *vcursorImpl) Execute(ctx context.Context, method string, query string, bindVars map[string]*querypb.BindVariable, rollbackOnError bool, co vtgatepb.CommitOrder) (*sqltypes.Result, error) {
- session := vc.safeSession
+func (vc *VCursorImpl) Execute(ctx context.Context, method string, query string, bindVars map[string]*querypb.BindVariable, rollbackOnError bool, co vtgatepb.CommitOrder) (*sqltypes.Result, error) {
+ session := vc.SafeSession
if co == vtgatepb.CommitOrder_AUTOCOMMIT {
// For autocommit, we have to create an independent session.
- session = NewAutocommitSession(vc.safeSession.Session)
- session.logging = vc.safeSession.logging
+ session = vc.SafeSession.NewAutocommitSession()
rollbackOnError = false
} else {
session.SetCommitOrder(co)
@@ -634,24 +738,22 @@ func (vc *vcursorImpl) Execute(ctx context.Context, method string, query string,
// markSavepoint opens an internal savepoint before executing the original query.
// This happens only when rollback is allowed and no other savepoint was executed
// and the query is executed in an explicit transaction (i.e. started by the client).
-func (vc *vcursorImpl) markSavepoint(ctx context.Context, needsRollbackOnParialExec bool, bindVars map[string]*querypb.BindVariable) error {
- if !needsRollbackOnParialExec || !vc.safeSession.CanAddSavepoint() {
+func (vc *VCursorImpl) markSavepoint(ctx context.Context, needsRollbackOnParialExec bool, bindVars map[string]*querypb.BindVariable) error {
+ if !needsRollbackOnParialExec || !vc.SafeSession.CanAddSavepoint() {
return nil
}
uID := fmt.Sprintf("_vt%s", strings.ReplaceAll(uuid.NewString(), "-", "_"))
spQuery := fmt.Sprintf("%ssavepoint %s%s", vc.marginComments.Leading, uID, vc.marginComments.Trailing)
- _, err := vc.executor.Execute(ctx, nil, "MarkSavepoint", vc.safeSession, spQuery, bindVars)
+ _, err := vc.executor.Execute(ctx, nil, "MarkSavepoint", vc.SafeSession, spQuery, bindVars)
if err != nil {
return err
}
- vc.safeSession.SetSavepoint(uID)
+ vc.SafeSession.SetSavepoint(uID)
return nil
}
-const txRollback = "Rollback Transaction"
-
// ExecuteMultiShard is part of the engine.VCursor interface.
-func (vc *vcursorImpl) ExecuteMultiShard(ctx context.Context, primitive engine.Primitive, rss []*srvtopo.ResolvedShard, queries []*querypb.BoundQuery, rollbackOnError, canAutocommit bool) (*sqltypes.Result, []error) {
+func (vc *VCursorImpl) ExecuteMultiShard(ctx context.Context, primitive engine.Primitive, rss []*srvtopo.ResolvedShard, queries []*querypb.BoundQuery, rollbackOnError, canAutocommit bool) (*sqltypes.Result, []error) {
noOfShards := len(rss)
atomic.AddUint64(&vc.logStats.ShardQueries, uint64(noOfShards))
err := vc.markSavepoint(ctx, rollbackOnError && (noOfShards > 1), map[string]*querypb.BindVariable{})
@@ -659,14 +761,14 @@ func (vc *vcursorImpl) ExecuteMultiShard(ctx context.Context, primitive engine.P
return nil, []error{err}
}
- qr, errs := vc.executor.ExecuteMultiShard(ctx, primitive, rss, commentedShardQueries(queries, vc.marginComments), vc.safeSession, canAutocommit, vc.ignoreMaxMemoryRows, vc.resultsObserver)
+ qr, errs := vc.executor.ExecuteMultiShard(ctx, primitive, rss, commentedShardQueries(queries, vc.marginComments), vc.SafeSession, canAutocommit, vc.ignoreMaxMemoryRows, vc.observer)
vc.setRollbackOnPartialExecIfRequired(len(errs) != len(rss), rollbackOnError)
vc.logShardsQueried(primitive, len(rss))
return qr, errs
}
// StreamExecuteMulti is the streaming version of ExecuteMultiShard.
-func (vc *vcursorImpl) StreamExecuteMulti(ctx context.Context, primitive engine.Primitive, query string, rss []*srvtopo.ResolvedShard, bindVars []map[string]*querypb.BindVariable, rollbackOnError bool, autocommit bool, callback func(reply *sqltypes.Result) error) []error {
+func (vc *VCursorImpl) StreamExecuteMulti(ctx context.Context, primitive engine.Primitive, query string, rss []*srvtopo.ResolvedShard, bindVars []map[string]*querypb.BindVariable, rollbackOnError bool, autocommit bool, callback func(reply *sqltypes.Result) error) []error {
callback = vc.wrapCallback(callback, primitive)
noOfShards := len(rss)
@@ -676,20 +778,20 @@ func (vc *vcursorImpl) StreamExecuteMulti(ctx context.Context, primitive engine.
return []error{err}
}
- errs := vc.executor.StreamExecuteMulti(ctx, primitive, vc.marginComments.Leading+query+vc.marginComments.Trailing, rss, bindVars, vc.safeSession, autocommit, callback, vc.resultsObserver)
+ errs := vc.executor.StreamExecuteMulti(ctx, primitive, vc.marginComments.Leading+query+vc.marginComments.Trailing, rss, bindVars, vc.SafeSession, autocommit, callback, vc.observer)
vc.setRollbackOnPartialExecIfRequired(len(errs) != len(rss), rollbackOnError)
return errs
}
// ExecuteLock is for executing advisory lock statements.
-func (vc *vcursorImpl) ExecuteLock(ctx context.Context, rs *srvtopo.ResolvedShard, query *querypb.BoundQuery, lockFuncType sqlparser.LockingFuncType) (*sqltypes.Result, error) {
+func (vc *VCursorImpl) ExecuteLock(ctx context.Context, rs *srvtopo.ResolvedShard, query *querypb.BoundQuery, lockFuncType sqlparser.LockingFuncType) (*sqltypes.Result, error) {
query.Sql = vc.marginComments.Leading + query.Sql + vc.marginComments.Trailing
- return vc.executor.ExecuteLock(ctx, rs, query, vc.safeSession, lockFuncType)
+ return vc.executor.ExecuteLock(ctx, rs, query, vc.SafeSession, lockFuncType)
}
// ExecuteStandalone is part of the engine.VCursor interface.
-func (vc *vcursorImpl) ExecuteStandalone(ctx context.Context, primitive engine.Primitive, query string, bindVars map[string]*querypb.BindVariable, rs *srvtopo.ResolvedShard) (*sqltypes.Result, error) {
+func (vc *VCursorImpl) ExecuteStandalone(ctx context.Context, primitive engine.Primitive, query string, bindVars map[string]*querypb.BindVariable, rs *srvtopo.ResolvedShard) (*sqltypes.Result, error) {
rss := []*srvtopo.ResolvedShard{rs}
bqs := []*querypb.BoundQuery{
{
@@ -699,13 +801,13 @@ func (vc *vcursorImpl) ExecuteStandalone(ctx context.Context, primitive engine.P
}
// The autocommit flag is always set to false because we currently don't
// execute DMLs through ExecuteStandalone.
- qr, errs := vc.executor.ExecuteMultiShard(ctx, primitive, rss, bqs, NewAutocommitSession(vc.safeSession.Session), false /* autocommit */, vc.ignoreMaxMemoryRows, vc.resultsObserver)
+ qr, errs := vc.executor.ExecuteMultiShard(ctx, primitive, rss, bqs, NewAutocommitSession(vc.SafeSession.Session), false /* autocommit */, vc.ignoreMaxMemoryRows, vc.observer)
vc.logShardsQueried(primitive, len(rss))
return qr, vterrors.Aggregate(errs)
}
// ExecuteKeyspaceID is part of the engine.VCursor interface.
-func (vc *vcursorImpl) ExecuteKeyspaceID(ctx context.Context, keyspace string, ksid []byte, query string, bindVars map[string]*querypb.BindVariable, rollbackOnError, autocommit bool) (*sqltypes.Result, error) {
+func (vc *VCursorImpl) ExecuteKeyspaceID(ctx context.Context, keyspace string, ksid []byte, query string, bindVars map[string]*querypb.BindVariable, rollbackOnError, autocommit bool) (*sqltypes.Result, error) {
atomic.AddUint64(&vc.logStats.ShardQueries, 1)
rss, _, err := vc.ResolveDestinations(ctx, keyspace, nil, []key.Destination{key.DestinationKeyspaceID(ksid)})
if err != nil {
@@ -722,17 +824,17 @@ func (vc *vcursorImpl) ExecuteKeyspaceID(ctx context.Context, keyspace string, k
// This creates a transaction but that transaction is for locking purpose only and should not cause multi-db transaction error.
// This fields helps in to ignore multi-db transaction error when it states `queryFromVindex`.
if !rollbackOnError {
- vc.safeSession.queryFromVindex = true
+ vc.SafeSession.SetQueryFromVindex(true)
defer func() {
- vc.safeSession.queryFromVindex = false
+ vc.SafeSession.SetQueryFromVindex(false)
}()
}
qr, errs := vc.ExecuteMultiShard(ctx, nil, rss, queries, rollbackOnError, autocommit)
return qr, vterrors.Aggregate(errs)
}
-func (vc *vcursorImpl) InTransactionAndIsDML() bool {
- if !vc.safeSession.InTransaction() {
+func (vc *VCursorImpl) InTransactionAndIsDML() bool {
+ if !vc.SafeSession.InTransaction() {
return false
}
switch vc.logStats.StmtType {
@@ -742,7 +844,7 @@ func (vc *vcursorImpl) InTransactionAndIsDML() bool {
return false
}
-func (vc *vcursorImpl) LookupRowLockShardSession() vtgatepb.CommitOrder {
+func (vc *VCursorImpl) LookupRowLockShardSession() vtgatepb.CommitOrder {
switch vc.logStats.StmtType {
case "DELETE", "UPDATE":
return vtgatepb.CommitOrder_POST
@@ -751,23 +853,23 @@ func (vc *vcursorImpl) LookupRowLockShardSession() vtgatepb.CommitOrder {
}
// AutocommitApproval is part of the engine.VCursor interface.
-func (vc *vcursorImpl) AutocommitApproval() bool {
- return vc.safeSession.AutocommitApproval()
+func (vc *VCursorImpl) AutocommitApproval() bool {
+ return vc.SafeSession.AutocommitApproval()
}
// setRollbackOnPartialExecIfRequired sets the value on SafeSession.rollbackOnPartialExec
// when the query gets successfully executed on at least one shard,
// there does not exist any old savepoint for which rollback is already set
// and rollback on error is allowed.
-func (vc *vcursorImpl) setRollbackOnPartialExecIfRequired(atleastOneSuccess bool, rollbackOnError bool) {
- if atleastOneSuccess && rollbackOnError && !vc.safeSession.IsRollbackSet() {
- vc.safeSession.SetRollbackCommand()
+func (vc *VCursorImpl) setRollbackOnPartialExecIfRequired(atleastOneSuccess bool, rollbackOnError bool) {
+ if atleastOneSuccess && rollbackOnError && !vc.SafeSession.IsRollbackSet() {
+ vc.SafeSession.SetRollbackCommand()
}
}
// fixupPartiallyMovedShards checks if any of the shards in the route has a ShardRoutingRule (true when a keyspace
// is in the middle of being moved to another keyspace using MoveTables moving a subset of shards at a time
-func (vc *vcursorImpl) fixupPartiallyMovedShards(rss []*srvtopo.ResolvedShard) ([]*srvtopo.ResolvedShard, error) {
+func (vc *VCursorImpl) fixupPartiallyMovedShards(rss []*srvtopo.ResolvedShard) ([]*srvtopo.ResolvedShard, error) {
if vc.vschema.ShardRoutingRules == nil {
return rss, nil
}
@@ -784,12 +886,12 @@ func (vc *vcursorImpl) fixupPartiallyMovedShards(rss []*srvtopo.ResolvedShard) (
return rss, nil
}
-func (vc *vcursorImpl) ResolveDestinations(ctx context.Context, keyspace string, ids []*querypb.Value, destinations []key.Destination) ([]*srvtopo.ResolvedShard, [][]*querypb.Value, error) {
+func (vc *VCursorImpl) ResolveDestinations(ctx context.Context, keyspace string, ids []*querypb.Value, destinations []key.Destination) ([]*srvtopo.ResolvedShard, [][]*querypb.Value, error) {
rss, values, err := vc.resolver.ResolveDestinations(ctx, keyspace, vc.tabletType, ids, destinations)
if err != nil {
return nil, nil, err
}
- if enableShardRouting {
+ if vc.config.EnableShardRouting {
rss, err = vc.fixupPartiallyMovedShards(rss)
if err != nil {
return nil, nil, err
@@ -798,12 +900,12 @@ func (vc *vcursorImpl) ResolveDestinations(ctx context.Context, keyspace string,
return rss, values, err
}
-func (vc *vcursorImpl) ResolveDestinationsMultiCol(ctx context.Context, keyspace string, ids [][]sqltypes.Value, destinations []key.Destination) ([]*srvtopo.ResolvedShard, [][][]sqltypes.Value, error) {
+func (vc *VCursorImpl) ResolveDestinationsMultiCol(ctx context.Context, keyspace string, ids [][]sqltypes.Value, destinations []key.Destination) ([]*srvtopo.ResolvedShard, [][][]sqltypes.Value, error) {
rss, values, err := vc.resolver.ResolveDestinationsMultiCol(ctx, keyspace, vc.tabletType, ids, destinations)
if err != nil {
return nil, nil, err
}
- if enableShardRouting {
+ if vc.config.EnableShardRouting {
rss, err = vc.fixupPartiallyMovedShards(rss)
if err != nil {
return nil, nil, err
@@ -812,12 +914,12 @@ func (vc *vcursorImpl) ResolveDestinationsMultiCol(ctx context.Context, keyspace
return rss, values, err
}
-func (vc *vcursorImpl) Session() engine.SessionActions {
+func (vc *VCursorImpl) Session() engine.SessionActions {
return vc
}
-func (vc *vcursorImpl) SetTarget(target string) error {
- keyspace, tabletType, _, err := topoprotopb.ParseDestination(target, defaultTabletType)
+func (vc *VCursorImpl) SetTarget(target string) error {
+ keyspace, tabletType, _, err := topoprotopb.ParseDestination(target, vc.config.DefaultTabletType)
if err != nil {
return err
}
@@ -825,10 +927,12 @@ func (vc *vcursorImpl) SetTarget(target string) error {
return vterrors.VT05003(keyspace)
}
- if vc.safeSession.InTransaction() && tabletType != topodatapb.TabletType_PRIMARY {
+ if vc.SafeSession.InTransaction() && tabletType != topodatapb.TabletType_PRIMARY {
return vterrors.NewErrorf(vtrpcpb.Code_INVALID_ARGUMENT, vterrors.LockOrActiveTransaction, "can't execute the given command because you have an active transaction")
}
- vc.safeSession.SetTargetString(target)
+ vc.SafeSession.SetTargetString(target)
+ vc.keyspace = keyspace
+ vc.tabletType = tabletType
return nil
}
@@ -836,30 +940,30 @@ func ignoreKeyspace(keyspace string) bool {
return keyspace == "" || sqlparser.SystemSchema(keyspace)
}
-func (vc *vcursorImpl) SetUDV(key string, value any) error {
+func (vc *VCursorImpl) SetUDV(key string, value any) error {
bindValue, err := sqltypes.BuildBindVariable(value)
if err != nil {
return err
}
- vc.safeSession.SetUserDefinedVariable(key, bindValue)
+ vc.SafeSession.SetUserDefinedVariable(key, bindValue)
return nil
}
-func (vc *vcursorImpl) SetSysVar(name string, expr string) {
- vc.safeSession.SetSystemVariable(name, expr)
+func (vc *VCursorImpl) SetSysVar(name string, expr string) {
+ vc.SafeSession.SetSystemVariable(name, expr)
}
// NeedsReservedConn implements the SessionActions interface
-func (vc *vcursorImpl) NeedsReservedConn() {
- vc.safeSession.SetReservedConn(true)
+func (vc *VCursorImpl) NeedsReservedConn() {
+ vc.SafeSession.SetReservedConn(true)
}
-func (vc *vcursorImpl) InReservedConn() bool {
- return vc.safeSession.InReservedConn()
+func (vc *VCursorImpl) InReservedConn() bool {
+ return vc.SafeSession.InReservedConn()
}
-func (vc *vcursorImpl) ShardSession() []*srvtopo.ResolvedShard {
- ss := vc.safeSession.GetShardSessions()
+func (vc *VCursorImpl) ShardSession() []*srvtopo.ResolvedShard {
+ ss := vc.SafeSession.GetShardSessions()
if len(ss) == 0 {
return nil
}
@@ -874,12 +978,12 @@ func (vc *vcursorImpl) ShardSession() []*srvtopo.ResolvedShard {
}
// Destination implements the ContextVSchema interface
-func (vc *vcursorImpl) Destination() key.Destination {
+func (vc *VCursorImpl) Destination() key.Destination {
return vc.destination
}
// TabletType implements the ContextVSchema interface
-func (vc *vcursorImpl) TabletType() topodatapb.TabletType {
+func (vc *VCursorImpl) TabletType() topodatapb.TabletType {
return vc.tabletType
}
@@ -898,13 +1002,13 @@ func commentedShardQueries(shardQueries []*querypb.BoundQuery, marginComments sq
}
// TargetDestination implements the ContextVSchema interface
-func (vc *vcursorImpl) TargetDestination(qualifier string) (key.Destination, *vindexes.Keyspace, topodatapb.TabletType, error) {
+func (vc *VCursorImpl) TargetDestination(qualifier string) (key.Destination, *vindexes.Keyspace, topodatapb.TabletType, error) {
keyspaceName := vc.getActualKeyspace()
if vc.destination == nil && qualifier != "" {
keyspaceName = qualifier
}
if keyspaceName == "" {
- return nil, nil, 0, errNoKeyspace
+ return nil, nil, 0, ErrNoKeyspace
}
keyspace := vc.vschema.Keyspaces[keyspaceName]
if keyspace == nil {
@@ -914,63 +1018,63 @@ func (vc *vcursorImpl) TargetDestination(qualifier string) (key.Destination, *vi
}
// SetAutocommit implements the SessionActions interface
-func (vc *vcursorImpl) SetAutocommit(ctx context.Context, autocommit bool) error {
- if autocommit && vc.safeSession.InTransaction() {
- if err := vc.executor.Commit(ctx, vc.safeSession); err != nil {
+func (vc *VCursorImpl) SetAutocommit(ctx context.Context, autocommit bool) error {
+ if autocommit && vc.SafeSession.InTransaction() {
+ if err := vc.executor.Commit(ctx, vc.SafeSession); err != nil {
return err
}
}
- vc.safeSession.Autocommit = autocommit
+ vc.SafeSession.Autocommit = autocommit
return nil
}
// SetQueryTimeout implements the SessionActions interface
-func (vc *vcursorImpl) SetQueryTimeout(maxExecutionTime int64) {
- vc.safeSession.QueryTimeout = maxExecutionTime
+func (vc *VCursorImpl) SetQueryTimeout(maxExecutionTime int64) {
+ vc.SafeSession.QueryTimeout = maxExecutionTime
}
// SetClientFoundRows implements the SessionActions interface
-func (vc *vcursorImpl) SetClientFoundRows(_ context.Context, clientFoundRows bool) error {
- vc.safeSession.GetOrCreateOptions().ClientFoundRows = clientFoundRows
+func (vc *VCursorImpl) SetClientFoundRows(_ context.Context, clientFoundRows bool) error {
+ vc.SafeSession.GetOrCreateOptions().ClientFoundRows = clientFoundRows
return nil
}
// SetSkipQueryPlanCache implements the SessionActions interface
-func (vc *vcursorImpl) SetSkipQueryPlanCache(_ context.Context, skipQueryPlanCache bool) error {
- vc.safeSession.GetOrCreateOptions().SkipQueryPlanCache = skipQueryPlanCache
+func (vc *VCursorImpl) SetSkipQueryPlanCache(_ context.Context, skipQueryPlanCache bool) error {
+ vc.SafeSession.GetOrCreateOptions().SkipQueryPlanCache = skipQueryPlanCache
return nil
}
// SetSQLSelectLimit implements the SessionActions interface
-func (vc *vcursorImpl) SetSQLSelectLimit(limit int64) error {
- vc.safeSession.GetOrCreateOptions().SqlSelectLimit = limit
+func (vc *VCursorImpl) SetSQLSelectLimit(limit int64) error {
+ vc.SafeSession.GetOrCreateOptions().SqlSelectLimit = limit
return nil
}
// SetTransactionMode implements the SessionActions interface
-func (vc *vcursorImpl) SetTransactionMode(mode vtgatepb.TransactionMode) {
- vc.safeSession.TransactionMode = mode
+func (vc *VCursorImpl) SetTransactionMode(mode vtgatepb.TransactionMode) {
+ vc.SafeSession.TransactionMode = mode
}
// SetWorkload implements the SessionActions interface
-func (vc *vcursorImpl) SetWorkload(workload querypb.ExecuteOptions_Workload) {
- vc.safeSession.GetOrCreateOptions().Workload = workload
+func (vc *VCursorImpl) SetWorkload(workload querypb.ExecuteOptions_Workload) {
+ vc.SafeSession.GetOrCreateOptions().Workload = workload
}
// SetPlannerVersion implements the SessionActions interface
-func (vc *vcursorImpl) SetPlannerVersion(v plancontext.PlannerVersion) {
- vc.safeSession.GetOrCreateOptions().PlannerVersion = v
+func (vc *VCursorImpl) SetPlannerVersion(v plancontext.PlannerVersion) {
+ vc.SafeSession.GetOrCreateOptions().PlannerVersion = v
}
-func (vc *vcursorImpl) SetPriority(priority string) {
+func (vc *VCursorImpl) SetPriority(priority string) {
if priority != "" {
- vc.safeSession.GetOrCreateOptions().Priority = priority
- } else if vc.safeSession.Options != nil && vc.safeSession.Options.Priority != "" {
- vc.safeSession.Options.Priority = ""
+ vc.SafeSession.GetOrCreateOptions().Priority = priority
+ } else if vc.SafeSession.Options != nil && vc.SafeSession.Options.Priority != "" {
+ vc.SafeSession.Options.Priority = ""
}
}
-func (vc *vcursorImpl) SetExecQueryTimeout(timeout *int) {
+func (vc *VCursorImpl) SetExecQueryTimeout(timeout *int) {
// Determine the effective timeout: use passed timeout if non-nil, otherwise use session's query timeout if available
var execTimeout *int
if timeout != nil {
@@ -981,153 +1085,152 @@ func (vc *vcursorImpl) SetExecQueryTimeout(timeout *int) {
// If no effective timeout and no session options, return early
if execTimeout == nil {
- if vc.safeSession.GetOptions() == nil {
+ if vc.SafeSession.GetOptions() == nil {
return
}
- vc.safeSession.GetOrCreateOptions().Timeout = nil
+ vc.SafeSession.GetOrCreateOptions().Timeout = nil
return
}
vc.queryTimeout = time.Duration(*execTimeout) * time.Millisecond
// Set the authoritative timeout using the determined execTimeout
- vc.safeSession.GetOrCreateOptions().Timeout = &querypb.ExecuteOptions_AuthoritativeTimeout{
+ vc.SafeSession.GetOrCreateOptions().Timeout = &querypb.ExecuteOptions_AuthoritativeTimeout{
AuthoritativeTimeout: int64(*execTimeout),
}
}
// getQueryTimeout returns timeout based on the priority
// session setting > global default specified by a flag.
-func (vc *vcursorImpl) getQueryTimeout() int {
- sessionQueryTimeout := int(vc.safeSession.GetQueryTimeout())
+func (vc *VCursorImpl) getQueryTimeout() int {
+ sessionQueryTimeout := int(vc.SafeSession.GetQueryTimeout())
if sessionQueryTimeout != 0 {
return sessionQueryTimeout
}
- return queryTimeout
+ return vc.config.QueryTimeout
}
// SetConsolidator implements the SessionActions interface
-func (vc *vcursorImpl) SetConsolidator(consolidator querypb.ExecuteOptions_Consolidator) {
+func (vc *VCursorImpl) SetConsolidator(consolidator querypb.ExecuteOptions_Consolidator) {
// Avoid creating session Options when they do not yet exist and the
// consolidator is unspecified.
- if consolidator == querypb.ExecuteOptions_CONSOLIDATOR_UNSPECIFIED && vc.safeSession.GetOptions() == nil {
+ if consolidator == querypb.ExecuteOptions_CONSOLIDATOR_UNSPECIFIED && vc.SafeSession.GetOptions() == nil {
return
}
- vc.safeSession.GetOrCreateOptions().Consolidator = consolidator
+ vc.SafeSession.GetOrCreateOptions().Consolidator = consolidator
}
-func (vc *vcursorImpl) SetWorkloadName(workloadName string) {
+func (vc *VCursorImpl) SetWorkloadName(workloadName string) {
if workloadName != "" {
- vc.safeSession.GetOrCreateOptions().WorkloadName = workloadName
+ vc.SafeSession.GetOrCreateOptions().WorkloadName = workloadName
}
}
// SetFoundRows implements the SessionActions interface
-func (vc *vcursorImpl) SetFoundRows(foundRows uint64) {
- vc.safeSession.FoundRows = foundRows
- vc.safeSession.foundRowsHandled = true
+func (vc *VCursorImpl) SetFoundRows(foundRows uint64) {
+ vc.SafeSession.SetFoundRows(foundRows)
}
// SetDDLStrategy implements the SessionActions interface
-func (vc *vcursorImpl) SetDDLStrategy(strategy string) {
- vc.safeSession.SetDDLStrategy(strategy)
+func (vc *VCursorImpl) SetDDLStrategy(strategy string) {
+ vc.SafeSession.SetDDLStrategy(strategy)
}
// GetDDLStrategy implements the SessionActions interface
-func (vc *vcursorImpl) GetDDLStrategy() string {
- return vc.safeSession.GetDDLStrategy()
+func (vc *VCursorImpl) GetDDLStrategy() string {
+ return vc.SafeSession.GetDDLStrategy()
}
// SetMigrationContext implements the SessionActions interface
-func (vc *vcursorImpl) SetMigrationContext(migrationContext string) {
- vc.safeSession.SetMigrationContext(migrationContext)
+func (vc *VCursorImpl) SetMigrationContext(migrationContext string) {
+ vc.SafeSession.SetMigrationContext(migrationContext)
}
// GetMigrationContext implements the SessionActions interface
-func (vc *vcursorImpl) GetMigrationContext() string {
- return vc.safeSession.GetMigrationContext()
+func (vc *VCursorImpl) GetMigrationContext() string {
+ return vc.SafeSession.GetMigrationContext()
}
// GetSessionUUID implements the SessionActions interface
-func (vc *vcursorImpl) GetSessionUUID() string {
- return vc.safeSession.GetSessionUUID()
+func (vc *VCursorImpl) GetSessionUUID() string {
+ return vc.SafeSession.GetSessionUUID()
}
// SetSessionEnableSystemSettings implements the SessionActions interface
-func (vc *vcursorImpl) SetSessionEnableSystemSettings(_ context.Context, allow bool) error {
- vc.safeSession.SetSessionEnableSystemSettings(allow)
+func (vc *VCursorImpl) SetSessionEnableSystemSettings(_ context.Context, allow bool) error {
+ vc.SafeSession.SetSessionEnableSystemSettings(allow)
return nil
}
// GetSessionEnableSystemSettings implements the SessionActions interface
-func (vc *vcursorImpl) GetSessionEnableSystemSettings() bool {
- return vc.safeSession.GetSessionEnableSystemSettings()
+func (vc *VCursorImpl) GetSessionEnableSystemSettings() bool {
+ return vc.SafeSession.GetSessionEnableSystemSettings()
}
// SetReadAfterWriteGTID implements the SessionActions interface
-func (vc *vcursorImpl) SetReadAfterWriteGTID(vtgtid string) {
- vc.safeSession.SetReadAfterWriteGTID(vtgtid)
+func (vc *VCursorImpl) SetReadAfterWriteGTID(vtgtid string) {
+ vc.SafeSession.SetReadAfterWriteGTID(vtgtid)
}
// SetReadAfterWriteTimeout implements the SessionActions interface
-func (vc *vcursorImpl) SetReadAfterWriteTimeout(timeout float64) {
- vc.safeSession.SetReadAfterWriteTimeout(timeout)
+func (vc *VCursorImpl) SetReadAfterWriteTimeout(timeout float64) {
+ vc.SafeSession.SetReadAfterWriteTimeout(timeout)
}
// SetSessionTrackGTIDs implements the SessionActions interface
-func (vc *vcursorImpl) SetSessionTrackGTIDs(enable bool) {
- vc.safeSession.SetSessionTrackGtids(enable)
+func (vc *VCursorImpl) SetSessionTrackGTIDs(enable bool) {
+ vc.SafeSession.SetSessionTrackGtids(enable)
}
// HasCreatedTempTable implements the SessionActions interface
-func (vc *vcursorImpl) HasCreatedTempTable() {
- vc.safeSession.GetOrCreateOptions().HasCreatedTempTables = true
+func (vc *VCursorImpl) HasCreatedTempTable() {
+ vc.SafeSession.GetOrCreateOptions().HasCreatedTempTables = true
}
// GetWarnings implements the SessionActions interface
-func (vc *vcursorImpl) GetWarnings() []*querypb.QueryWarning {
- return vc.safeSession.GetWarnings()
+func (vc *VCursorImpl) GetWarnings() []*querypb.QueryWarning {
+ return vc.SafeSession.GetWarnings()
}
// AnyAdvisoryLockTaken implements the SessionActions interface
-func (vc *vcursorImpl) AnyAdvisoryLockTaken() bool {
- return vc.safeSession.HasAdvisoryLock()
+func (vc *VCursorImpl) AnyAdvisoryLockTaken() bool {
+ return vc.SafeSession.HasAdvisoryLock()
}
// AddAdvisoryLock implements the SessionActions interface
-func (vc *vcursorImpl) AddAdvisoryLock(name string) {
- vc.safeSession.AddAdvisoryLock(name)
+func (vc *VCursorImpl) AddAdvisoryLock(name string) {
+ vc.SafeSession.AddAdvisoryLock(name)
}
// RemoveAdvisoryLock implements the SessionActions interface
-func (vc *vcursorImpl) RemoveAdvisoryLock(name string) {
- vc.safeSession.RemoveAdvisoryLock(name)
+func (vc *VCursorImpl) RemoveAdvisoryLock(name string) {
+ vc.SafeSession.RemoveAdvisoryLock(name)
}
-func (vc *vcursorImpl) SetCommitOrder(co vtgatepb.CommitOrder) {
- vc.safeSession.SetCommitOrder(co)
+func (vc *VCursorImpl) SetCommitOrder(co vtgatepb.CommitOrder) {
+ vc.SafeSession.SetCommitOrder(co)
}
-func (vc *vcursorImpl) InTransaction() bool {
- return vc.safeSession.InTransaction()
+func (vc *VCursorImpl) InTransaction() bool {
+ return vc.SafeSession.InTransaction()
}
-func (vc *vcursorImpl) Commit(ctx context.Context) error {
- return vc.executor.Commit(ctx, vc.safeSession)
+func (vc *VCursorImpl) Commit(ctx context.Context) error {
+ return vc.executor.Commit(ctx, vc.SafeSession)
}
// GetDBDDLPluginName implements the VCursor interface
-func (vc *vcursorImpl) GetDBDDLPluginName() string {
- return dbDDLPlugin
+func (vc *VCursorImpl) GetDBDDLPluginName() string {
+ return vc.config.DBDDLPlugin
}
// KeyspaceAvailable implements the VCursor interface
-func (vc *vcursorImpl) KeyspaceAvailable(ks string) bool {
+func (vc *VCursorImpl) KeyspaceAvailable(ks string) bool {
_, exists := vc.executor.VSchema().Keyspaces[ks]
return exists
}
// ErrorIfShardedF implements the VCursor interface
-func (vc *vcursorImpl) ErrorIfShardedF(ks *vindexes.Keyspace, warn, errFormat string, params ...any) error {
+func (vc *VCursorImpl) ErrorIfShardedF(ks *vindexes.Keyspace, warn, errFormat string, params ...any) error {
if ks.Sharded {
return vterrors.Errorf(vtrpcpb.Code_UNIMPLEMENTED, errFormat, params...)
}
@@ -1136,19 +1239,25 @@ func (vc *vcursorImpl) ErrorIfShardedF(ks *vindexes.Keyspace, warn, errFormat st
return nil
}
+func (vc *VCursorImpl) GetAndEmptyWarnings() []*querypb.QueryWarning {
+ w := vc.warnings
+ vc.warnings = nil
+ return w
+}
+
// WarnUnshardedOnly implements the VCursor interface
-func (vc *vcursorImpl) WarnUnshardedOnly(format string, params ...any) {
- if vc.warnShardedOnly {
+func (vc *VCursorImpl) WarnUnshardedOnly(format string, params ...any) {
+ if vc.config.WarnShardedOnly {
vc.warnings = append(vc.warnings, &querypb.QueryWarning{
Code: uint32(sqlerror.ERNotSupportedYet),
Message: fmt.Sprintf(format, params...),
})
- warnings.Add("WarnUnshardedOnly", 1)
+ vc.executor.AddWarningCount("WarnUnshardedOnly", 1)
}
}
// PlannerWarning implements the VCursor interface
-func (vc *vcursorImpl) PlannerWarning(message string) {
+func (vc *VCursorImpl) PlannerWarning(message string) {
if message == "" {
return
}
@@ -1159,8 +1268,8 @@ func (vc *vcursorImpl) PlannerWarning(message string) {
}
// ForeignKeyMode implements the VCursor interface
-func (vc *vcursorImpl) ForeignKeyMode(keyspace string) (vschemapb.Keyspace_ForeignKeyMode, error) {
- if strings.ToLower(foreignKeyMode) == "disallow" {
+func (vc *VCursorImpl) ForeignKeyMode(keyspace string) (vschemapb.Keyspace_ForeignKeyMode, error) {
+ if vc.config.ForeignKeyMode == vschemapb.Keyspace_disallow {
return vschemapb.Keyspace_disallow, nil
}
ks := vc.vschema.Keyspaces[keyspace]
@@ -1170,7 +1279,7 @@ func (vc *vcursorImpl) ForeignKeyMode(keyspace string) (vschemapb.Keyspace_Forei
return ks.ForeignKeyMode, nil
}
-func (vc *vcursorImpl) KeyspaceError(keyspace string) error {
+func (vc *VCursorImpl) KeyspaceError(keyspace string) error {
ks := vc.vschema.Keyspaces[keyspace]
if ks == nil {
return vterrors.VT14004(keyspace)
@@ -1178,14 +1287,14 @@ func (vc *vcursorImpl) KeyspaceError(keyspace string) error {
return ks.Error
}
-func (vc *vcursorImpl) GetAggregateUDFs() []string {
+func (vc *VCursorImpl) GetAggregateUDFs() []string {
return vc.vschema.GetAggregateUDFs()
}
// FindMirrorRule finds the mirror rule for the requested table name and
// VSchema tablet type.
-func (vc *vcursorImpl) FindMirrorRule(name sqlparser.TableName) (*vindexes.MirrorRule, error) {
- destKeyspace, destTabletType, _, err := vc.executor.ParseDestinationTarget(name.Qualifier.String())
+func (vc *VCursorImpl) FindMirrorRule(name sqlparser.TableName) (*vindexes.MirrorRule, error) {
+ destKeyspace, destTabletType, _, err := vc.ParseDestinationTarget(name.Qualifier.String())
if err != nil {
return nil, err
}
@@ -1199,23 +1308,11 @@ func (vc *vcursorImpl) FindMirrorRule(name sqlparser.TableName) (*vindexes.Mirro
return mirrorRule, err
}
-// ParseDestinationTarget parses destination target string and sets default keyspace if possible.
-func parseDestinationTarget(targetString string, vschema *vindexes.VSchema) (string, topodatapb.TabletType, key.Destination, error) {
- destKeyspace, destTabletType, dest, err := topoprotopb.ParseDestination(targetString, defaultTabletType)
- // Set default keyspace
- if destKeyspace == "" && len(vschema.Keyspaces) == 1 {
- for k := range vschema.Keyspaces {
- destKeyspace = k
- }
- }
- return destKeyspace, destTabletType, dest, err
-}
-
-func (vc *vcursorImpl) keyForPlan(ctx context.Context, query string, buf io.StringWriter) {
+func (vc *VCursorImpl) KeyForPlan(ctx context.Context, query string, buf io.StringWriter) {
_, _ = buf.WriteString(vc.keyspace)
_, _ = buf.WriteString(vindexes.TabletTypeSuffix[vc.tabletType])
_, _ = buf.WriteString("+Collate:")
- _, _ = buf.WriteString(vc.Environment().CollationEnv().LookupName(vc.collation))
+ _, _ = buf.WriteString(vc.Environment().CollationEnv().LookupName(vc.config.Collation))
if vc.destination != nil {
switch vc.destination.(type) {
@@ -1245,11 +1342,11 @@ func (vc *vcursorImpl) keyForPlan(ctx context.Context, query string, buf io.Stri
_, _ = buf.WriteString(query)
}
-func (vc *vcursorImpl) GetKeyspace() string {
+func (vc *VCursorImpl) GetKeyspace() string {
return vc.keyspace
}
-func (vc *vcursorImpl) ExecuteVSchema(ctx context.Context, keyspace string, vschemaDDL *sqlparser.AlterVschema) error {
+func (vc *VCursorImpl) ExecuteVSchema(ctx context.Context, keyspace string, vschemaDDL *sqlparser.AlterVschema) error {
srvVschema := vc.vm.GetCurrentSrvVschema()
if srvVschema == nil {
return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "vschema not loaded")
@@ -1270,7 +1367,7 @@ func (vc *vcursorImpl) ExecuteVSchema(ctx context.Context, keyspace string, vsch
ksName = keyspace
}
if ksName == "" {
- return errNoKeyspace
+ return ErrNoKeyspace
}
ks := srvVschema.Keyspaces[ksName]
@@ -1284,43 +1381,43 @@ func (vc *vcursorImpl) ExecuteVSchema(ctx context.Context, keyspace string, vsch
return vc.vm.UpdateVSchema(ctx, ksName, srvVschema)
}
-func (vc *vcursorImpl) MessageStream(ctx context.Context, rss []*srvtopo.ResolvedShard, tableName string, callback func(*sqltypes.Result) error) error {
+func (vc *VCursorImpl) MessageStream(ctx context.Context, rss []*srvtopo.ResolvedShard, tableName string, callback func(*sqltypes.Result) error) error {
atomic.AddUint64(&vc.logStats.ShardQueries, uint64(len(rss)))
return vc.executor.ExecuteMessageStream(ctx, rss, tableName, callback)
}
-func (vc *vcursorImpl) VStream(ctx context.Context, rss []*srvtopo.ResolvedShard, filter *binlogdatapb.Filter, gtid string, callback func(evs []*binlogdatapb.VEvent) error) error {
+func (vc *VCursorImpl) VStream(ctx context.Context, rss []*srvtopo.ResolvedShard, filter *binlogdatapb.Filter, gtid string, callback func(evs []*binlogdatapb.VEvent) error) error {
return vc.executor.ExecuteVStream(ctx, rss, filter, gtid, callback)
}
-func (vc *vcursorImpl) ShowExec(ctx context.Context, command sqlparser.ShowCommandType, filter *sqlparser.ShowFilter) (*sqltypes.Result, error) {
+func (vc *VCursorImpl) ShowExec(ctx context.Context, command sqlparser.ShowCommandType, filter *sqlparser.ShowFilter) (*sqltypes.Result, error) {
switch command {
case sqlparser.VitessReplicationStatus:
- return vc.executor.showVitessReplicationStatus(ctx, filter)
+ return vc.executor.ShowVitessReplicationStatus(ctx, filter)
case sqlparser.VitessShards:
- return vc.executor.showShards(ctx, filter, vc.tabletType)
+ return vc.executor.ShowShards(ctx, filter, vc.tabletType)
case sqlparser.VitessTablets:
- return vc.executor.showTablets(filter)
+ return vc.executor.ShowTablets(filter)
case sqlparser.VitessVariables:
- return vc.executor.showVitessMetadata(ctx, filter)
+ return vc.executor.ShowVitessMetadata(ctx, filter)
default:
return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "bug: unexpected show command: %v", command)
}
}
-func (vc *vcursorImpl) GetVSchema() *vindexes.VSchema {
+func (vc *VCursorImpl) GetVSchema() *vindexes.VSchema {
return vc.vschema
}
-func (vc *vcursorImpl) GetSrvVschema() *vschemapb.SrvVSchema {
+func (vc *VCursorImpl) GetSrvVschema() *vschemapb.SrvVSchema {
return vc.vm.GetCurrentSrvVschema()
}
-func (vc *vcursorImpl) SetExec(ctx context.Context, name string, value string) error {
- return vc.executor.setVitessMetadata(ctx, name, value)
+func (vc *VCursorImpl) SetExec(ctx context.Context, name string, value string) error {
+ return vc.executor.SetVitessMetadata(ctx, name, value)
}
-func (vc *vcursorImpl) ThrottleApp(ctx context.Context, throttledAppRule *topodatapb.ThrottledAppRule) (err error) {
+func (vc *VCursorImpl) ThrottleApp(ctx context.Context, throttledAppRule *topodatapb.ThrottledAppRule) (err error) {
if throttledAppRule == nil {
return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "ThrottleApp: nil rule")
}
@@ -1343,14 +1440,12 @@ func (vc *vcursorImpl) ThrottleApp(ctx context.Context, throttledAppRule *topoda
throttlerConfig.ThrottledApps = make(map[string]*topodatapb.ThrottledAppRule)
}
if req.ThrottledApp != nil && req.ThrottledApp.Name != "" {
- // TODO(shlomi) in v22: replace the following line with the commented out block
- throttlerConfig.ThrottledApps[req.ThrottledApp.Name] = req.ThrottledApp
- // timeNow := time.Now()
- // if protoutil.TimeFromProto(req.ThrottledApp.ExpiresAt).After(timeNow) {
- // throttlerConfig.ThrottledApps[req.ThrottledApp.Name] = req.ThrottledApp
- // } else {
- // delete(throttlerConfig.ThrottledApps, req.ThrottledApp.Name)
- // }
+ timeNow := time.Now()
+ if protoutil.TimeFromProto(req.ThrottledApp.ExpiresAt).After(timeNow) {
+ throttlerConfig.ThrottledApps[req.ThrottledApp.Name] = req.ThrottledApp
+ } else {
+ delete(throttlerConfig.ThrottledApps, req.ThrottledApp.Name)
+ }
}
return throttlerConfig
}
@@ -1378,147 +1473,60 @@ func (vc *vcursorImpl) ThrottleApp(ctx context.Context, throttledAppRule *topoda
return err
}
-func (vc *vcursorImpl) CanUseSetVar() bool {
- return vc.Environment().Parser().IsMySQL80AndAbove() && setVarEnabled
-}
-
-func (vc *vcursorImpl) ReleaseLock(ctx context.Context) error {
- return vc.executor.ReleaseLock(ctx, vc.safeSession)
+func (vc *VCursorImpl) CanUseSetVar() bool {
+ return vc.Environment().Parser().IsMySQL80AndAbove() && vc.config.SetVarEnabled
}
-func (vc *vcursorImpl) cloneWithAutocommitSession() *vcursorImpl {
- safeSession := NewAutocommitSession(vc.safeSession.Session)
- safeSession.logging = vc.safeSession.logging
- return &vcursorImpl{
- safeSession: safeSession,
- keyspace: vc.keyspace,
- tabletType: vc.tabletType,
- destination: vc.destination,
- marginComments: vc.marginComments,
- executor: vc.executor,
- logStats: vc.logStats,
- collation: vc.collation,
- resolver: vc.resolver,
- vschema: vc.vschema,
- vm: vc.vm,
- topoServer: vc.topoServer,
- warnShardedOnly: vc.warnShardedOnly,
- pv: vc.pv,
- resultsObserver: vc.resultsObserver,
- }
+func (vc *VCursorImpl) ReleaseLock(ctx context.Context) error {
+ return vc.executor.ReleaseLock(ctx, vc.SafeSession)
}
-func (vc *vcursorImpl) VExplainLogging() {
- vc.safeSession.EnableLogging(vc.Environment().Parser())
+func (vc *VCursorImpl) VExplainLogging() {
+ vc.SafeSession.EnableLogging(vc.Environment().Parser())
}
-func (vc *vcursorImpl) GetVExplainLogs() []engine.ExecuteEntry {
- return vc.safeSession.logging.GetLogs()
+func (vc *VCursorImpl) GetVExplainLogs() []engine.ExecuteEntry {
+ return vc.SafeSession.GetLogs()
}
-func (vc *vcursorImpl) FindRoutedShard(keyspace, shard string) (keyspaceName string, err error) {
+func (vc *VCursorImpl) FindRoutedShard(keyspace, shard string) (keyspaceName string, err error) {
return vc.vschema.FindRoutedShard(keyspace, shard)
}
-func (vc *vcursorImpl) IsViewsEnabled() bool {
- return enableViews
+func (vc *VCursorImpl) IsViewsEnabled() bool {
+ return vc.config.EnableViews
}
-func (vc *vcursorImpl) GetUDV(name string) *querypb.BindVariable {
- return vc.safeSession.GetUDV(name)
+func (vc *VCursorImpl) GetUDV(name string) *querypb.BindVariable {
+ return vc.SafeSession.GetUDV(name)
}
-func (vc *vcursorImpl) PlanPrepareStatement(ctx context.Context, query string) (*engine.Plan, sqlparser.Statement, error) {
- return vc.executor.planPrepareStmt(ctx, vc, query)
+func (vc *VCursorImpl) PlanPrepareStatement(ctx context.Context, query string) (*engine.Plan, sqlparser.Statement, error) {
+ return vc.executor.PlanPrepareStmt(ctx, vc, query)
}
-func (vc *vcursorImpl) ClearPrepareData(name string) {
- delete(vc.safeSession.PrepareStatement, name)
+func (vc *VCursorImpl) ClearPrepareData(name string) {
+ delete(vc.SafeSession.PrepareStatement, name)
}
-func (vc *vcursorImpl) StorePrepareData(stmtName string, prepareData *vtgatepb.PrepareData) {
- vc.safeSession.StorePrepareData(stmtName, prepareData)
+func (vc *VCursorImpl) StorePrepareData(stmtName string, prepareData *vtgatepb.PrepareData) {
+ vc.SafeSession.StorePrepareData(stmtName, prepareData)
}
-func (vc *vcursorImpl) GetPrepareData(stmtName string) *vtgatepb.PrepareData {
- return vc.safeSession.GetPrepareData(stmtName)
+func (vc *VCursorImpl) GetPrepareData(stmtName string) *vtgatepb.PrepareData {
+ return vc.SafeSession.GetPrepareData(stmtName)
}
-func (vc *vcursorImpl) GetWarmingReadsPercent() int {
- return vc.warmingReadsPercent
+func (vc *VCursorImpl) GetWarmingReadsPercent() int {
+ return vc.config.WarmingReadsPercent
}
-func (vc *vcursorImpl) GetWarmingReadsChannel() chan bool {
- return vc.warmingReadsChannel
-}
-
-func (vc *vcursorImpl) CloneForReplicaWarming(ctx context.Context) engine.VCursor {
- callerId := callerid.EffectiveCallerIDFromContext(ctx)
- immediateCallerId := callerid.ImmediateCallerIDFromContext(ctx)
-
- timedCtx, _ := context.WithTimeout(context.Background(), warmingReadsQueryTimeout) // nolint
- clonedCtx := callerid.NewContext(timedCtx, callerId, immediateCallerId)
-
- v := &vcursorImpl{
- safeSession: NewAutocommitSession(vc.safeSession.Session),
- keyspace: vc.keyspace,
- tabletType: topodatapb.TabletType_REPLICA,
- destination: vc.destination,
- marginComments: vc.marginComments,
- executor: vc.executor,
- resolver: vc.resolver,
- topoServer: vc.topoServer,
- logStats: &logstats.LogStats{Ctx: clonedCtx},
- collation: vc.collation,
- ignoreMaxMemoryRows: vc.ignoreMaxMemoryRows,
- vschema: vc.vschema,
- vm: vc.vm,
- semTable: vc.semTable,
- warnShardedOnly: vc.warnShardedOnly,
- warnings: vc.warnings,
- pv: vc.pv,
- resultsObserver: nullResultsObserver{},
- }
-
- v.marginComments.Trailing += "/* warming read */"
-
- return v
-}
-
-func (vc *vcursorImpl) CloneForMirroring(ctx context.Context) engine.VCursor {
- callerId := callerid.EffectiveCallerIDFromContext(ctx)
- immediateCallerId := callerid.ImmediateCallerIDFromContext(ctx)
-
- clonedCtx := callerid.NewContext(ctx, callerId, immediateCallerId)
-
- v := &vcursorImpl{
- safeSession: NewAutocommitSession(vc.safeSession.Session),
- keyspace: vc.keyspace,
- tabletType: vc.tabletType,
- destination: vc.destination,
- marginComments: vc.marginComments,
- executor: vc.executor,
- resolver: vc.resolver,
- topoServer: vc.topoServer,
- logStats: &logstats.LogStats{Ctx: clonedCtx},
- collation: vc.collation,
- ignoreMaxMemoryRows: vc.ignoreMaxMemoryRows,
- vschema: vc.vschema,
- vm: vc.vm,
- semTable: vc.semTable,
- warnShardedOnly: vc.warnShardedOnly,
- warnings: vc.warnings,
- pv: vc.pv,
- resultsObserver: nullResultsObserver{},
- }
-
- v.marginComments.Trailing += "/* mirror query */"
-
- return v
+func (vc *VCursorImpl) GetWarmingReadsChannel() chan bool {
+ return vc.config.WarmingReadsChannel
}
// UpdateForeignKeyChecksState updates the foreign key checks state of the vcursor.
-func (vc *vcursorImpl) UpdateForeignKeyChecksState(fkStateFromQuery *bool) {
+func (vc *VCursorImpl) UpdateForeignKeyChecksState(fkStateFromQuery *bool) {
// Initialize the state to unspecified.
vc.fkChecksState = nil
// If the query has a SET_VAR optimizer hint that explicitly sets the foreign key checks state,
@@ -1528,10 +1536,36 @@ func (vc *vcursorImpl) UpdateForeignKeyChecksState(fkStateFromQuery *bool) {
return
}
// If the query doesn't have anything, then we consult the session state.
- vc.fkChecksState = vc.safeSession.ForeignKeyChecks()
+ vc.fkChecksState = vc.SafeSession.ForeignKeyChecks()
}
// GetForeignKeyChecksState gets the stored foreign key checks state in the vcursor.
-func (vc *vcursorImpl) GetForeignKeyChecksState() *bool {
+func (vc *VCursorImpl) GetForeignKeyChecksState() *bool {
return vc.fkChecksState
}
+
+// RecordMirrorStats is used to record stats about a mirror query.
+func (vc *VCursorImpl) RecordMirrorStats(sourceExecTime, targetExecTime time.Duration, targetErr error) {
+ vc.logStats.MirrorSourceExecuteTime = sourceExecTime
+ vc.logStats.MirrorTargetExecuteTime = targetExecTime
+ vc.logStats.MirrorTargetError = targetErr
+}
+
+func (vc *VCursorImpl) GetMarginComments() sqlparser.MarginComments {
+ return vc.marginComments
+}
+
+func (vc *VCursorImpl) CachePlan() bool {
+ return vc.SafeSession.CachePlan()
+}
+
+func (vc *VCursorImpl) GetContextWithTimeOut(ctx context.Context) (context.Context, context.CancelFunc) {
+ if vc.queryTimeout == 0 {
+ return ctx, func() {}
+ }
+ return context.WithTimeout(ctx, vc.queryTimeout)
+}
+
+func (vc *VCursorImpl) IgnoreMaxMemoryRows() bool {
+ return vc.ignoreMaxMemoryRows
+}
diff --git a/go/vt/vtgate/vcursor_impl_test.go b/go/vt/vtgate/executorcontext/vcursor_impl_test.go
similarity index 54%
rename from go/vt/vtgate/vcursor_impl_test.go
rename to go/vt/vtgate/executorcontext/vcursor_impl_test.go
index 5d2dc2cb44a..16d2c03bf1c 100644
--- a/go/vt/vtgate/vcursor_impl_test.go
+++ b/go/vt/vtgate/executorcontext/vcursor_impl_test.go
@@ -1,8 +1,24 @@
-package vtgate
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package executorcontext
import (
"context"
- "encoding/hex"
+ "errors"
"fmt"
"strconv"
"strings"
@@ -11,10 +27,17 @@ import (
"github.com/stretchr/testify/require"
+ "vitess.io/vitess/go/mysql/collations"
+ "vitess.io/vitess/go/sqltypes"
+ binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata"
+ "vitess.io/vitess/go/vt/vtenv"
+ "vitess.io/vitess/go/vt/vtgate/engine"
+ "vitess.io/vitess/go/vt/vtgate/vtgateservice"
+
"vitess.io/vitess/go/vt/key"
"vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/srvtopo"
- "vitess.io/vitess/go/vt/topo"
+ "vitess.io/vitess/go/vt/vtgate/logstats"
"vitess.io/vitess/go/vt/vtgate/vindexes"
querypb "vitess.io/vitess/go/vt/proto/query"
@@ -37,50 +60,6 @@ func (f fakeVSchemaOperator) UpdateVSchema(ctx context.Context, ksName string, v
panic("implement me")
}
-type fakeTopoServer struct {
-}
-
-// GetTopoServer returns the full topo.Server instance.
-func (f *fakeTopoServer) GetTopoServer() (*topo.Server, error) {
- return nil, nil
-}
-
-// GetSrvKeyspaceNames returns the list of keyspaces served in
-// the provided cell.
-func (f *fakeTopoServer) GetSrvKeyspaceNames(ctx context.Context, cell string, staleOK bool) ([]string, error) {
- return []string{"ks1"}, nil
-}
-
-// GetSrvKeyspace returns the SrvKeyspace for a cell/keyspace.
-func (f *fakeTopoServer) GetSrvKeyspace(ctx context.Context, cell, keyspace string) (*topodatapb.SrvKeyspace, error) {
- zeroHexBytes, _ := hex.DecodeString("")
- eightyHexBytes, _ := hex.DecodeString("80")
- ks := &topodatapb.SrvKeyspace{
- Partitions: []*topodatapb.SrvKeyspace_KeyspacePartition{
- {
- ServedType: topodatapb.TabletType_PRIMARY,
- ShardReferences: []*topodatapb.ShardReference{
- {Name: "-80", KeyRange: &topodatapb.KeyRange{Start: zeroHexBytes, End: eightyHexBytes}},
- {Name: "80-", KeyRange: &topodatapb.KeyRange{Start: eightyHexBytes, End: zeroHexBytes}},
- },
- },
- },
- }
- return ks, nil
-}
-
-func (f *fakeTopoServer) WatchSrvKeyspace(ctx context.Context, cell, keyspace string, callback func(*topodatapb.SrvKeyspace, error) bool) {
- ks, err := f.GetSrvKeyspace(ctx, cell, keyspace)
- callback(ks, err)
-}
-
-// WatchSrvVSchema starts watching the SrvVSchema object for
-// the provided cell. It will call the callback when
-// a new value or an error occurs.
-func (f *fakeTopoServer) WatchSrvVSchema(ctx context.Context, cell string, callback func(*vschemapb.SrvVSchema, error) bool) {
-
-}
-
func TestDestinationKeyspace(t *testing.T) {
ks1 := &vindexes.Keyspace{
Name: "ks1",
@@ -106,12 +85,14 @@ func TestDestinationKeyspace(t *testing.T) {
Keyspaces: map[string]*vindexes.KeyspaceSchema{
ks1.Name: ks1Schema,
ks2.Name: ks2Schema,
- }}
+ },
+ }
vschemaWith1KS := &vindexes.VSchema{
Keyspaces: map[string]*vindexes.KeyspaceSchema{
ks1.Name: ks1Schema,
- }}
+ },
+ }
type testCase struct {
vschema *vindexes.VSchema
@@ -182,13 +163,17 @@ func TestDestinationKeyspace(t *testing.T) {
}, {
vschema: vschemaWith2KS,
targetString: "",
- expectedError: errNoKeyspace.Error(),
+ expectedError: ErrNoKeyspace.Error(),
}}
- r, _, _, _, _ := createExecutorEnv(t)
for i, tc := range tests {
t.Run(strconv.Itoa(i)+tc.targetString, func(t *testing.T) {
- impl, _ := newVCursorImpl(NewSafeSession(&vtgatepb.Session{TargetString: tc.targetString}), sqlparser.MarginComments{}, r, nil, &fakeVSchemaOperator{vschema: tc.vschema}, tc.vschema, nil, nil, false, querypb.ExecuteOptions_Gen4)
+ session := NewSafeSession(&vtgatepb.Session{TargetString: tc.targetString})
+ impl, _ := NewVCursorImpl(session, sqlparser.MarginComments{}, nil, nil,
+ &fakeVSchemaOperator{vschema: tc.vschema}, tc.vschema, nil, nil,
+ fakeObserver{}, VCursorConfig{
+ DefaultTabletType: topodatapb.TabletType_PRIMARY,
+ })
impl.vschema = tc.vschema
dest, keyspace, tabletType, err := impl.TargetDestination(tc.qualifier)
if tc.expectedError == "" {
@@ -203,20 +188,24 @@ func TestDestinationKeyspace(t *testing.T) {
}
}
-var ks1 = &vindexes.Keyspace{Name: "ks1"}
-var ks1Schema = &vindexes.KeyspaceSchema{Keyspace: ks1}
-var ks2 = &vindexes.Keyspace{Name: "ks2"}
-var ks2Schema = &vindexes.KeyspaceSchema{Keyspace: ks2}
-var vschemaWith1KS = &vindexes.VSchema{
- Keyspaces: map[string]*vindexes.KeyspaceSchema{
- ks1.Name: ks1Schema,
- },
-}
+var (
+ ks1 = &vindexes.Keyspace{Name: "ks1"}
+ ks1Schema = &vindexes.KeyspaceSchema{Keyspace: ks1}
+ ks2 = &vindexes.Keyspace{Name: "ks2"}
+ ks2Schema = &vindexes.KeyspaceSchema{Keyspace: ks2}
+ vschemaWith1KS = &vindexes.VSchema{
+ Keyspaces: map[string]*vindexes.KeyspaceSchema{
+ ks1.Name: ks1Schema,
+ },
+ }
+)
+
var vschemaWith2KS = &vindexes.VSchema{
Keyspaces: map[string]*vindexes.KeyspaceSchema{
ks1.Name: ks1Schema,
ks2.Name: ks2Schema,
- }}
+ },
+}
func TestSetTarget(t *testing.T) {
type testCase struct {
@@ -244,15 +233,15 @@ func TestSetTarget(t *testing.T) {
expectedError: "can't execute the given command because you have an active transaction",
}}
- r, _, _, _, _ := createExecutorEnv(t)
for i, tc := range tests {
t.Run(fmt.Sprintf("%d#%s", i, tc.targetString), func(t *testing.T) {
- vc, _ := newVCursorImpl(NewSafeSession(&vtgatepb.Session{InTransaction: true}), sqlparser.MarginComments{}, r, nil, &fakeVSchemaOperator{vschema: tc.vschema}, tc.vschema, nil, nil, false, querypb.ExecuteOptions_Gen4)
+ cfg := VCursorConfig{DefaultTabletType: topodatapb.TabletType_PRIMARY}
+ vc, _ := NewVCursorImpl(NewSafeSession(&vtgatepb.Session{InTransaction: true}), sqlparser.MarginComments{}, nil, nil, &fakeVSchemaOperator{vschema: tc.vschema}, tc.vschema, nil, nil, fakeObserver{}, cfg)
vc.vschema = tc.vschema
err := vc.SetTarget(tc.targetString)
if tc.expectedError == "" {
require.NoError(t, err)
- require.Equal(t, vc.safeSession.TargetString, tc.targetString)
+ require.Equal(t, vc.SafeSession.TargetString, tc.targetString)
} else {
require.EqualError(t, err, tc.expectedError)
}
@@ -293,17 +282,20 @@ func TestKeyForPlan(t *testing.T) {
expectedPlanPrefixKey: "ks1@replica+Collate:utf8mb4_0900_ai_ci+Query:SELECT 1",
}}
- r, _, _, _, _ := createExecutorEnv(t)
for i, tc := range tests {
t.Run(fmt.Sprintf("%d#%s", i, tc.targetString), func(t *testing.T) {
ss := NewSafeSession(&vtgatepb.Session{InTransaction: false})
ss.SetTargetString(tc.targetString)
- vc, err := newVCursorImpl(ss, sqlparser.MarginComments{}, r, nil, &fakeVSchemaOperator{vschema: tc.vschema}, tc.vschema, srvtopo.NewResolver(&fakeTopoServer{}, nil, ""), nil, false, querypb.ExecuteOptions_Gen4)
+ cfg := VCursorConfig{
+ Collation: collations.CollationUtf8mb4ID,
+ DefaultTabletType: topodatapb.TabletType_PRIMARY,
+ }
+ vc, err := NewVCursorImpl(ss, sqlparser.MarginComments{}, &fakeExecutor{}, nil, &fakeVSchemaOperator{vschema: tc.vschema}, tc.vschema, srvtopo.NewResolver(&FakeTopoServer{}, nil, ""), nil, fakeObserver{}, cfg)
require.NoError(t, err)
vc.vschema = tc.vschema
var buf strings.Builder
- vc.keyForPlan(context.Background(), "SELECT 1", &buf)
+ vc.KeyForPlan(context.Background(), "SELECT 1", &buf)
require.Equal(t, tc.expectedPlanPrefixKey, buf.String())
})
}
@@ -318,10 +310,10 @@ func TestFirstSortedKeyspace(t *testing.T) {
ks1Schema.Keyspace.Name: ks1Schema,
ks2Schema.Keyspace.Name: ks2Schema,
ks3Schema.Keyspace.Name: ks3Schema,
- }}
+ },
+ }
- r, _, _, _, _ := createExecutorEnv(t)
- vc, err := newVCursorImpl(NewSafeSession(nil), sqlparser.MarginComments{}, r, nil, &fakeVSchemaOperator{vschema: vschemaWith2KS}, vschemaWith2KS, srvtopo.NewResolver(&fakeTopoServer{}, nil, ""), nil, false, querypb.ExecuteOptions_Gen4)
+ vc, err := NewVCursorImpl(NewSafeSession(nil), sqlparser.MarginComments{}, nil, nil, &fakeVSchemaOperator{vschema: vschemaWith2KS}, vschemaWith2KS, srvtopo.NewResolver(&FakeTopoServer{}, nil, ""), nil, fakeObserver{}, VCursorConfig{})
require.NoError(t, err)
ks, err := vc.FirstSortedKeyspace()
require.NoError(t, err)
@@ -331,13 +323,13 @@ func TestFirstSortedKeyspace(t *testing.T) {
// TestSetExecQueryTimeout tests the SetExecQueryTimeout method.
// Validates the timeout value is set based on override rule.
func TestSetExecQueryTimeout(t *testing.T) {
- executor, _, _, _, _ := createExecutorEnv(t)
safeSession := NewSafeSession(nil)
- vc, err := newVCursorImpl(safeSession, sqlparser.MarginComments{}, executor, nil, nil, &vindexes.VSchema{}, nil, nil, false, querypb.ExecuteOptions_Gen4)
+ vc, err := NewVCursorImpl(safeSession, sqlparser.MarginComments{}, nil, nil, nil, &vindexes.VSchema{}, nil, nil, fakeObserver{}, VCursorConfig{
+ // flag timeout
+ QueryTimeout: 20,
+ })
require.NoError(t, err)
- // flag timeout
- queryTimeout = 20
vc.SetExecQueryTimeout(nil)
require.Equal(t, 20*time.Millisecond, vc.queryTimeout)
require.NotNil(t, safeSession.Options.Timeout)
@@ -364,11 +356,138 @@ func TestSetExecQueryTimeout(t *testing.T) {
require.NotNil(t, safeSession.Options.Timeout)
require.EqualValues(t, 0, safeSession.Options.GetAuthoritativeTimeout())
- // reset
- queryTimeout = 0
+ // reset flag timeout
+ vc.config.QueryTimeout = 0
safeSession.SetQueryTimeout(0)
vc.SetExecQueryTimeout(nil)
require.Equal(t, 0*time.Millisecond, vc.queryTimeout)
// this should be reset.
require.Nil(t, safeSession.Options.Timeout)
}
+
+func TestRecordMirrorStats(t *testing.T) {
+ safeSession := NewSafeSession(nil)
+ logStats := logstats.NewLogStats(context.Background(), t.Name(), "select 1", "", nil)
+ vc, err := NewVCursorImpl(safeSession, sqlparser.MarginComments{}, nil, logStats, nil, &vindexes.VSchema{}, nil, nil, fakeObserver{}, VCursorConfig{})
+ require.NoError(t, err)
+
+ require.Zero(t, logStats.MirrorSourceExecuteTime)
+ require.Zero(t, logStats.MirrorTargetExecuteTime)
+ require.Nil(t, logStats.MirrorTargetError)
+
+ vc.RecordMirrorStats(10*time.Millisecond, 20*time.Millisecond, errors.New("test error"))
+
+ require.Equal(t, 10*time.Millisecond, logStats.MirrorSourceExecuteTime)
+ require.Equal(t, 20*time.Millisecond, logStats.MirrorTargetExecuteTime)
+ require.ErrorContains(t, logStats.MirrorTargetError, "test error")
+}
+
+type fakeExecutor struct{}
+
+func (f fakeExecutor) Execute(ctx context.Context, mysqlCtx vtgateservice.MySQLConnection, method string, session *SafeSession, s string, vars map[string]*querypb.BindVariable) (*sqltypes.Result, error) {
+ // TODO implement me
+ panic("implement me")
+}
+
+func (f fakeExecutor) ExecuteMultiShard(ctx context.Context, primitive engine.Primitive, rss []*srvtopo.ResolvedShard, queries []*querypb.BoundQuery, session *SafeSession, autocommit bool, ignoreMaxMemoryRows bool, resultsObserver ResultsObserver) (qr *sqltypes.Result, errs []error) {
+ // TODO implement me
+ panic("implement me")
+}
+
+func (f fakeExecutor) StreamExecuteMulti(ctx context.Context, primitive engine.Primitive, query string, rss []*srvtopo.ResolvedShard, vars []map[string]*querypb.BindVariable, session *SafeSession, autocommit bool, callback func(reply *sqltypes.Result) error, observer ResultsObserver) []error {
+ // TODO implement me
+ panic("implement me")
+}
+
+func (f fakeExecutor) ExecuteLock(ctx context.Context, rs *srvtopo.ResolvedShard, query *querypb.BoundQuery, session *SafeSession, lockFuncType sqlparser.LockingFuncType) (*sqltypes.Result, error) {
+ // TODO implement me
+ panic("implement me")
+}
+
+func (f fakeExecutor) Commit(ctx context.Context, safeSession *SafeSession) error {
+ // TODO implement me
+ panic("implement me")
+}
+
+func (f fakeExecutor) ExecuteMessageStream(ctx context.Context, rss []*srvtopo.ResolvedShard, name string, callback func(*sqltypes.Result) error) error {
+ // TODO implement me
+ panic("implement me")
+}
+
+func (f fakeExecutor) ExecuteVStream(ctx context.Context, rss []*srvtopo.ResolvedShard, filter *binlogdatapb.Filter, gtid string, callback func(evs []*binlogdatapb.VEvent) error) error {
+ // TODO implement me
+ panic("implement me")
+}
+
+func (f fakeExecutor) ReleaseLock(ctx context.Context, session *SafeSession) error {
+ // TODO implement me
+ panic("implement me")
+}
+
+func (f fakeExecutor) ShowVitessReplicationStatus(ctx context.Context, filter *sqlparser.ShowFilter) (*sqltypes.Result, error) {
+ // TODO implement me
+ panic("implement me")
+}
+
+func (f fakeExecutor) ShowShards(ctx context.Context, filter *sqlparser.ShowFilter, destTabletType topodatapb.TabletType) (*sqltypes.Result, error) {
+ // TODO implement me
+ panic("implement me")
+}
+
+func (f fakeExecutor) ShowTablets(filter *sqlparser.ShowFilter) (*sqltypes.Result, error) {
+ // TODO implement me
+ panic("implement me")
+}
+
+func (f fakeExecutor) ShowVitessMetadata(ctx context.Context, filter *sqlparser.ShowFilter) (*sqltypes.Result, error) {
+ // TODO implement me
+ panic("implement me")
+}
+
+func (f fakeExecutor) SetVitessMetadata(ctx context.Context, name, value string) error {
+ // TODO implement me
+ panic("implement me")
+}
+
+func (f fakeExecutor) ParseDestinationTarget(targetString string) (string, topodatapb.TabletType, key.Destination, error) {
+ // TODO implement me
+ panic("implement me")
+}
+
+func (f fakeExecutor) VSchema() *vindexes.VSchema {
+ // TODO implement me
+ panic("implement me")
+}
+
+func (f fakeExecutor) PlanPrepareStmt(ctx context.Context, vcursor *VCursorImpl, query string) (*engine.Plan, sqlparser.Statement, error) {
+ // TODO implement me
+ panic("implement me")
+}
+
+func (f fakeExecutor) Environment() *vtenv.Environment {
+ return vtenv.NewTestEnv()
+}
+
+func (f fakeExecutor) ReadTransaction(ctx context.Context, transactionID string) (*querypb.TransactionMetadata, error) {
+ // TODO implement me
+ panic("implement me")
+}
+
+func (f fakeExecutor) UnresolvedTransactions(ctx context.Context, targets []*querypb.Target) ([]*querypb.TransactionMetadata, error) {
+ // TODO implement me
+ panic("implement me")
+}
+
+func (f fakeExecutor) AddWarningCount(name string, value int64) {
+ // TODO implement me
+ panic("implement me")
+}
+
+var _ iExecute = (*fakeExecutor)(nil)
+
+type fakeObserver struct{}
+
+func (f fakeObserver) Observe(*sqltypes.Result) {
+}
+
+var _ ResultsObserver = (*fakeObserver)(nil)
diff --git a/go/vt/vtgate/legacy_scatter_conn_test.go b/go/vt/vtgate/legacy_scatter_conn_test.go
index 4512fc0724e..0d49e7b7bd9 100644
--- a/go/vt/vtgate/legacy_scatter_conn_test.go
+++ b/go/vt/vtgate/legacy_scatter_conn_test.go
@@ -26,6 +26,8 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
+ econtext "vitess.io/vitess/go/vt/vtgate/executorcontext"
+
"vitess.io/vitess/go/mysql/collations"
"vitess.io/vitess/go/sqltypes"
@@ -99,7 +101,7 @@ func TestLegacyExecuteFailOnAutocommit(t *testing.T) {
},
Autocommit: false,
}
- _, errs := sc.ExecuteMultiShard(ctx, nil, rss, queries, NewSafeSession(session), true /*autocommit*/, false, nullResultsObserver{})
+ _, errs := sc.ExecuteMultiShard(ctx, nil, rss, queries, econtext.NewSafeSession(session), true /*autocommit*/, false, nullResultsObserver{})
err := vterrors.Aggregate(errs)
require.Error(t, err)
require.Contains(t, err.Error(), "in autocommit mode, transactionID should be zero but was: 123")
@@ -123,7 +125,7 @@ func TestScatterConnExecuteMulti(t *testing.T) {
}
}
- qr, errs := sc.ExecuteMultiShard(ctx, nil, rss, queries, NewSafeSession(nil), false /*autocommit*/, false, nullResultsObserver{})
+ qr, errs := sc.ExecuteMultiShard(ctx, nil, rss, queries, econtext.NewSafeSession(nil), false /*autocommit*/, false, nullResultsObserver{})
return qr, vterrors.Aggregate(errs)
})
}
@@ -138,7 +140,7 @@ func TestScatterConnStreamExecuteMulti(t *testing.T) {
bvs := make([]map[string]*querypb.BindVariable, len(rss))
qr := new(sqltypes.Result)
var mu sync.Mutex
- errors := sc.StreamExecuteMulti(ctx, nil, "query", rss, bvs, NewSafeSession(&vtgatepb.Session{InTransaction: true}), true /* autocommit */, func(r *sqltypes.Result) error {
+ errors := sc.StreamExecuteMulti(ctx, nil, "query", rss, bvs, econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true}), true /* autocommit */, func(r *sqltypes.Result) error {
mu.Lock()
defer mu.Unlock()
qr.AppendResult(r)
@@ -280,7 +282,7 @@ func TestMaxMemoryRows(t *testing.T) {
[]key.Destination{key.DestinationShard("0"), key.DestinationShard("1")})
require.NoError(t, err)
- session := NewSafeSession(&vtgatepb.Session{InTransaction: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true})
queries := []*querypb.BoundQuery{{
Sql: "query1",
BindVariables: map[string]*querypb.BindVariable{},
@@ -328,7 +330,7 @@ func TestLegaceHealthCheckFailsOnReservedConnections(t *testing.T) {
res := srvtopo.NewResolver(newSandboxForCells(ctx, []string{"aa"}), sc.gateway, "aa")
- session := NewSafeSession(&vtgatepb.Session{InTransaction: false, InReservedConn: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: false, InReservedConn: true})
destinations := []key.Destination{key.DestinationShard("0")}
rss, _, err := res.ResolveDestinations(ctx, keyspace, topodatapb.TabletType_REPLICA, nil, destinations)
require.NoError(t, err)
@@ -346,12 +348,12 @@ func TestLegaceHealthCheckFailsOnReservedConnections(t *testing.T) {
require.Error(t, vterrors.Aggregate(errs))
}
-func executeOnShards(t *testing.T, ctx context.Context, res *srvtopo.Resolver, keyspace string, sc *ScatterConn, session *SafeSession, destinations []key.Destination) {
+func executeOnShards(t *testing.T, ctx context.Context, res *srvtopo.Resolver, keyspace string, sc *ScatterConn, session *econtext.SafeSession, destinations []key.Destination) {
t.Helper()
require.Empty(t, executeOnShardsReturnsErr(t, ctx, res, keyspace, sc, session, destinations))
}
-func executeOnShardsReturnsErr(t *testing.T, ctx context.Context, res *srvtopo.Resolver, keyspace string, sc *ScatterConn, session *SafeSession, destinations []key.Destination) error {
+func executeOnShardsReturnsErr(t *testing.T, ctx context.Context, res *srvtopo.Resolver, keyspace string, sc *ScatterConn, session *econtext.SafeSession, destinations []key.Destination) error {
t.Helper()
rss, _, err := res.ResolveDestinations(ctx, keyspace, topodatapb.TabletType_REPLICA, nil, destinations)
require.NoError(t, err)
@@ -374,7 +376,7 @@ type recordingResultsObserver struct {
recorded []*sqltypes.Result
}
-func (o *recordingResultsObserver) observe(result *sqltypes.Result) {
+func (o *recordingResultsObserver) Observe(result *sqltypes.Result) {
mu.Lock()
o.recorded = append(o.recorded, result)
mu.Unlock()
@@ -429,7 +431,7 @@ func TestMultiExecs(t *testing.T) {
observer := recordingResultsObserver{}
- session := NewSafeSession(&vtgatepb.Session{})
+ session := econtext.NewSafeSession(&vtgatepb.Session{})
_, err := sc.ExecuteMultiShard(ctx, nil, rss, queries, session, false, false, &observer)
require.NoError(t, vterrors.Aggregate(err))
if len(sbc0.Queries) == 0 || len(sbc1.Queries) == 0 {
@@ -511,7 +513,7 @@ func TestScatterConnSingleDB(t *testing.T) {
want := "multi-db transaction attempted"
// TransactionMode_SINGLE in session
- session := NewSafeSession(&vtgatepb.Session{InTransaction: true, TransactionMode: vtgatepb.TransactionMode_SINGLE})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true, TransactionMode: vtgatepb.TransactionMode_SINGLE})
queries := []*querypb.BoundQuery{{Sql: "query1"}}
_, errors := sc.ExecuteMultiShard(ctx, nil, rss0, queries, session, false, false, nullResultsObserver{})
require.Empty(t, errors)
@@ -521,7 +523,7 @@ func TestScatterConnSingleDB(t *testing.T) {
// TransactionMode_SINGLE in txconn
sc.txConn.mode = vtgatepb.TransactionMode_SINGLE
- session = NewSafeSession(&vtgatepb.Session{InTransaction: true})
+ session = econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true})
_, errors = sc.ExecuteMultiShard(ctx, nil, rss0, queries, session, false, false, nullResultsObserver{})
require.Empty(t, errors)
_, errors = sc.ExecuteMultiShard(ctx, nil, rss1, queries, session, false, false, nullResultsObserver{})
@@ -530,7 +532,7 @@ func TestScatterConnSingleDB(t *testing.T) {
// TransactionMode_MULTI in txconn. Should not fail.
sc.txConn.mode = vtgatepb.TransactionMode_MULTI
- session = NewSafeSession(&vtgatepb.Session{InTransaction: true})
+ session = econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true})
_, errors = sc.ExecuteMultiShard(ctx, nil, rss0, queries, session, false, false, nullResultsObserver{})
require.Empty(t, errors)
_, errors = sc.ExecuteMultiShard(ctx, nil, rss1, queries, session, false, false, nullResultsObserver{})
@@ -601,7 +603,7 @@ func TestReservePrequeries(t *testing.T) {
res := srvtopo.NewResolver(newSandboxForCells(ctx, []string{"aa"}), sc.gateway, "aa")
- session := NewSafeSession(&vtgatepb.Session{
+ session := econtext.NewSafeSession(&vtgatepb.Session{
InTransaction: false,
InReservedConn: true,
SystemVariables: map[string]string{
diff --git a/go/vt/vtgate/logstats/logstats.go b/go/vt/vtgate/logstats/logstats.go
index 8f8ba41e3cd..fdc0e69c8db 100644
--- a/go/vt/vtgate/logstats/logstats.go
+++ b/go/vt/vtgate/logstats/logstats.go
@@ -33,25 +33,28 @@ import (
// LogStats records the stats for a single vtgate query
type LogStats struct {
- Ctx context.Context
- Method string
- TabletType string
- StmtType string
- SQL string
- BindVariables map[string]*querypb.BindVariable
- StartTime time.Time
- EndTime time.Time
- ShardQueries uint64
- RowsAffected uint64
- RowsReturned uint64
- PlanTime time.Duration
- ExecuteTime time.Duration
- CommitTime time.Duration
- Error error
- TablesUsed []string
- SessionUUID string
- CachedPlan bool
- ActiveKeyspace string // ActiveKeyspace is the selected keyspace `use ks`
+ Ctx context.Context
+ Method string
+ TabletType string
+ StmtType string
+ SQL string
+ BindVariables map[string]*querypb.BindVariable
+ StartTime time.Time
+ EndTime time.Time
+ ShardQueries uint64
+ RowsAffected uint64
+ RowsReturned uint64
+ PlanTime time.Duration
+ ExecuteTime time.Duration
+ CommitTime time.Duration
+ Error error
+ TablesUsed []string
+ SessionUUID string
+ CachedPlan bool
+ ActiveKeyspace string // ActiveKeyspace is the selected keyspace `use ks`
+ MirrorSourceExecuteTime time.Duration
+ MirrorTargetExecuteTime time.Duration
+ MirrorTargetError error
}
// NewLogStats constructs a new LogStats with supplied Method and ctx
@@ -116,6 +119,14 @@ func (stats *LogStats) RemoteAddrUsername() (string, string) {
return ci.RemoteAddr(), ci.Username()
}
+// MirorTargetErrorStr returns the mirror target error string or ""
+func (stats *LogStats) MirrorTargetErrorStr() string {
+ if stats.MirrorTargetError != nil {
+ return stats.MirrorTargetError.Error()
+ }
+ return ""
+}
+
// Logf formats the log record to the given writer, either as
// tab-separated list of logged fields or as JSON.
func (stats *LogStats) Logf(w io.Writer, params url.Values) error {
@@ -177,6 +188,12 @@ func (stats *LogStats) Logf(w io.Writer, params url.Values) error {
log.Strings(stats.TablesUsed)
log.Key("ActiveKeyspace")
log.String(stats.ActiveKeyspace)
+ log.Key("MirrorSourceExecuteTime")
+ log.Duration(stats.MirrorSourceExecuteTime)
+ log.Key("MirrorTargetExecuteTime")
+ log.Duration(stats.MirrorTargetExecuteTime)
+ log.Key("MirrorTargetError")
+ log.String(stats.MirrorTargetErrorStr())
return log.Flush(w)
}
diff --git a/go/vt/vtgate/logstats/logstats_test.go b/go/vt/vtgate/logstats/logstats_test.go
index ae3c01e0f0b..872b34c6964 100644
--- a/go/vt/vtgate/logstats/logstats_test.go
+++ b/go/vt/vtgate/logstats/logstats_test.go
@@ -79,42 +79,42 @@ func TestLogStatsFormat(t *testing.T) {
{ // 0
redact: false,
format: "text",
- expected: "test\t\t\t''\t''\t2017-01-01 01:02:03.000000\t2017-01-01 01:02:04.000001\t1.000001\t0.000000\t0.000000\t0.000000\t\t\"sql1\"\t{\"intVal\": {\"type\": \"INT64\", \"value\": 1}}\t0\t0\t\"\"\t\"PRIMARY\"\t\"suuid\"\tfalse\t[\"ks1.tbl1\",\"ks2.tbl2\"]\t\"db\"\n",
+ expected: "test\t\t\t''\t''\t2017-01-01 01:02:03.000000\t2017-01-01 01:02:04.000001\t1.000001\t0.000000\t0.000000\t0.000000\t\t\"sql1\"\t{\"intVal\": {\"type\": \"INT64\", \"value\": 1}}\t0\t0\t\"\"\t\"PRIMARY\"\t\"suuid\"\tfalse\t[\"ks1.tbl1\",\"ks2.tbl2\"]\t\"db\"\t0.000000\t0.000000\t\"\"\n",
bindVars: intBindVar,
}, { // 1
redact: true,
format: "text",
- expected: "test\t\t\t''\t''\t2017-01-01 01:02:03.000000\t2017-01-01 01:02:04.000001\t1.000001\t0.000000\t0.000000\t0.000000\t\t\"sql1\"\t\"[REDACTED]\"\t0\t0\t\"\"\t\"PRIMARY\"\t\"suuid\"\tfalse\t[\"ks1.tbl1\",\"ks2.tbl2\"]\t\"db\"\n",
+ expected: "test\t\t\t''\t''\t2017-01-01 01:02:03.000000\t2017-01-01 01:02:04.000001\t1.000001\t0.000000\t0.000000\t0.000000\t\t\"sql1\"\t\"[REDACTED]\"\t0\t0\t\"\"\t\"PRIMARY\"\t\"suuid\"\tfalse\t[\"ks1.tbl1\",\"ks2.tbl2\"]\t\"db\"\t0.000000\t0.000000\t\"\"\n",
bindVars: intBindVar,
}, { // 2
redact: false,
format: "json",
- expected: "{\"ActiveKeyspace\":\"db\",\"BindVars\":{\"intVal\":{\"type\":\"INT64\",\"value\":1}},\"Cached Plan\":false,\"CommitTime\":0,\"Effective Caller\":\"\",\"End\":\"2017-01-01 01:02:04.000001\",\"Error\":\"\",\"ExecuteTime\":0,\"ImmediateCaller\":\"\",\"Method\":\"test\",\"PlanTime\":0,\"RemoteAddr\":\"\",\"RowsAffected\":0,\"SQL\":\"sql1\",\"SessionUUID\":\"suuid\",\"ShardQueries\":0,\"Start\":\"2017-01-01 01:02:03.000000\",\"StmtType\":\"\",\"TablesUsed\":[\"ks1.tbl1\",\"ks2.tbl2\"],\"TabletType\":\"PRIMARY\",\"TotalTime\":1.000001,\"Username\":\"\"}",
+ expected: "{\"ActiveKeyspace\":\"db\",\"BindVars\":{\"intVal\":{\"type\":\"INT64\",\"value\":1}},\"Cached Plan\":false,\"CommitTime\":0,\"Effective Caller\":\"\",\"End\":\"2017-01-01 01:02:04.000001\",\"Error\":\"\",\"ExecuteTime\":0,\"ImmediateCaller\":\"\",\"Method\":\"test\",\"MirrorSourceExecuteTime\":0,\"MirrorTargetError\":\"\",\"MirrorTargetExecuteTime\":0,\"PlanTime\":0,\"RemoteAddr\":\"\",\"RowsAffected\":0,\"SQL\":\"sql1\",\"SessionUUID\":\"suuid\",\"ShardQueries\":0,\"Start\":\"2017-01-01 01:02:03.000000\",\"StmtType\":\"\",\"TablesUsed\":[\"ks1.tbl1\",\"ks2.tbl2\"],\"TabletType\":\"PRIMARY\",\"TotalTime\":1.000001,\"Username\":\"\"}",
bindVars: intBindVar,
}, { // 3
redact: true,
format: "json",
- expected: "{\"ActiveKeyspace\":\"db\",\"BindVars\":\"[REDACTED]\",\"Cached Plan\":false,\"CommitTime\":0,\"Effective Caller\":\"\",\"End\":\"2017-01-01 01:02:04.000001\",\"Error\":\"\",\"ExecuteTime\":0,\"ImmediateCaller\":\"\",\"Method\":\"test\",\"PlanTime\":0,\"RemoteAddr\":\"\",\"RowsAffected\":0,\"SQL\":\"sql1\",\"SessionUUID\":\"suuid\",\"ShardQueries\":0,\"Start\":\"2017-01-01 01:02:03.000000\",\"StmtType\":\"\",\"TablesUsed\":[\"ks1.tbl1\",\"ks2.tbl2\"],\"TabletType\":\"PRIMARY\",\"TotalTime\":1.000001,\"Username\":\"\"}",
+ expected: "{\"ActiveKeyspace\":\"db\",\"BindVars\":\"[REDACTED]\",\"Cached Plan\":false,\"CommitTime\":0,\"Effective Caller\":\"\",\"End\":\"2017-01-01 01:02:04.000001\",\"Error\":\"\",\"ExecuteTime\":0,\"ImmediateCaller\":\"\",\"Method\":\"test\",\"MirrorSourceExecuteTime\":0,\"MirrorTargetError\":\"\",\"MirrorTargetExecuteTime\":0,\"PlanTime\":0,\"RemoteAddr\":\"\",\"RowsAffected\":0,\"SQL\":\"sql1\",\"SessionUUID\":\"suuid\",\"ShardQueries\":0,\"Start\":\"2017-01-01 01:02:03.000000\",\"StmtType\":\"\",\"TablesUsed\":[\"ks1.tbl1\",\"ks2.tbl2\"],\"TabletType\":\"PRIMARY\",\"TotalTime\":1.000001,\"Username\":\"\"}",
bindVars: intBindVar,
}, { // 4
redact: false,
format: "text",
- expected: "test\t\t\t''\t''\t2017-01-01 01:02:03.000000\t2017-01-01 01:02:04.000001\t1.000001\t0.000000\t0.000000\t0.000000\t\t\"sql1\"\t{\"strVal\": {\"type\": \"VARCHAR\", \"value\": \"abc\"}}\t0\t0\t\"\"\t\"PRIMARY\"\t\"suuid\"\tfalse\t[\"ks1.tbl1\",\"ks2.tbl2\"]\t\"db\"\n",
+ expected: "test\t\t\t''\t''\t2017-01-01 01:02:03.000000\t2017-01-01 01:02:04.000001\t1.000001\t0.000000\t0.000000\t0.000000\t\t\"sql1\"\t{\"strVal\": {\"type\": \"VARCHAR\", \"value\": \"abc\"}}\t0\t0\t\"\"\t\"PRIMARY\"\t\"suuid\"\tfalse\t[\"ks1.tbl1\",\"ks2.tbl2\"]\t\"db\"\t0.000000\t0.000000\t\"\"\n",
bindVars: stringBindVar,
}, { // 5
redact: true,
format: "text",
- expected: "test\t\t\t''\t''\t2017-01-01 01:02:03.000000\t2017-01-01 01:02:04.000001\t1.000001\t0.000000\t0.000000\t0.000000\t\t\"sql1\"\t\"[REDACTED]\"\t0\t0\t\"\"\t\"PRIMARY\"\t\"suuid\"\tfalse\t[\"ks1.tbl1\",\"ks2.tbl2\"]\t\"db\"\n",
+ expected: "test\t\t\t''\t''\t2017-01-01 01:02:03.000000\t2017-01-01 01:02:04.000001\t1.000001\t0.000000\t0.000000\t0.000000\t\t\"sql1\"\t\"[REDACTED]\"\t0\t0\t\"\"\t\"PRIMARY\"\t\"suuid\"\tfalse\t[\"ks1.tbl1\",\"ks2.tbl2\"]\t\"db\"\t0.000000\t0.000000\t\"\"\n",
bindVars: stringBindVar,
}, { // 6
redact: false,
format: "json",
- expected: "{\"ActiveKeyspace\":\"db\",\"BindVars\":{\"strVal\":{\"type\":\"VARCHAR\",\"value\":\"abc\"}},\"Cached Plan\":false,\"CommitTime\":0,\"Effective Caller\":\"\",\"End\":\"2017-01-01 01:02:04.000001\",\"Error\":\"\",\"ExecuteTime\":0,\"ImmediateCaller\":\"\",\"Method\":\"test\",\"PlanTime\":0,\"RemoteAddr\":\"\",\"RowsAffected\":0,\"SQL\":\"sql1\",\"SessionUUID\":\"suuid\",\"ShardQueries\":0,\"Start\":\"2017-01-01 01:02:03.000000\",\"StmtType\":\"\",\"TablesUsed\":[\"ks1.tbl1\",\"ks2.tbl2\"],\"TabletType\":\"PRIMARY\",\"TotalTime\":1.000001,\"Username\":\"\"}",
+ expected: "{\"ActiveKeyspace\":\"db\",\"BindVars\":{\"strVal\":{\"type\":\"VARCHAR\",\"value\":\"abc\"}},\"Cached Plan\":false,\"CommitTime\":0,\"Effective Caller\":\"\",\"End\":\"2017-01-01 01:02:04.000001\",\"Error\":\"\",\"ExecuteTime\":0,\"ImmediateCaller\":\"\",\"Method\":\"test\",\"MirrorSourceExecuteTime\":0,\"MirrorTargetError\":\"\",\"MirrorTargetExecuteTime\":0,\"PlanTime\":0,\"RemoteAddr\":\"\",\"RowsAffected\":0,\"SQL\":\"sql1\",\"SessionUUID\":\"suuid\",\"ShardQueries\":0,\"Start\":\"2017-01-01 01:02:03.000000\",\"StmtType\":\"\",\"TablesUsed\":[\"ks1.tbl1\",\"ks2.tbl2\"],\"TabletType\":\"PRIMARY\",\"TotalTime\":1.000001,\"Username\":\"\"}",
bindVars: stringBindVar,
}, { // 7
redact: true,
format: "json",
- expected: "{\"ActiveKeyspace\":\"db\",\"BindVars\":\"[REDACTED]\",\"Cached Plan\":false,\"CommitTime\":0,\"Effective Caller\":\"\",\"End\":\"2017-01-01 01:02:04.000001\",\"Error\":\"\",\"ExecuteTime\":0,\"ImmediateCaller\":\"\",\"Method\":\"test\",\"PlanTime\":0,\"RemoteAddr\":\"\",\"RowsAffected\":0,\"SQL\":\"sql1\",\"SessionUUID\":\"suuid\",\"ShardQueries\":0,\"Start\":\"2017-01-01 01:02:03.000000\",\"StmtType\":\"\",\"TablesUsed\":[\"ks1.tbl1\",\"ks2.tbl2\"],\"TabletType\":\"PRIMARY\",\"TotalTime\":1.000001,\"Username\":\"\"}",
+ expected: "{\"ActiveKeyspace\":\"db\",\"BindVars\":\"[REDACTED]\",\"Cached Plan\":false,\"CommitTime\":0,\"Effective Caller\":\"\",\"End\":\"2017-01-01 01:02:04.000001\",\"Error\":\"\",\"ExecuteTime\":0,\"ImmediateCaller\":\"\",\"Method\":\"test\",\"MirrorSourceExecuteTime\":0,\"MirrorTargetError\":\"\",\"MirrorTargetExecuteTime\":0,\"PlanTime\":0,\"RemoteAddr\":\"\",\"RowsAffected\":0,\"SQL\":\"sql1\",\"SessionUUID\":\"suuid\",\"ShardQueries\":0,\"Start\":\"2017-01-01 01:02:03.000000\",\"StmtType\":\"\",\"TablesUsed\":[\"ks1.tbl1\",\"ks2.tbl2\"],\"TabletType\":\"PRIMARY\",\"TotalTime\":1.000001,\"Username\":\"\"}",
bindVars: stringBindVar,
},
}
@@ -156,12 +156,12 @@ func TestLogStatsFilter(t *testing.T) {
params := map[string][]string{"full": {}}
got := testFormat(t, logStats, params)
- want := "test\t\t\t''\t''\t2017-01-01 01:02:03.000000\t2017-01-01 01:02:04.000001\t1.000001\t0.000000\t0.000000\t0.000000\t\t\"sql1 /* LOG_THIS_QUERY */\"\t{\"intVal\": {\"type\": \"INT64\", \"value\": 1}}\t0\t0\t\"\"\t\"\"\t\"\"\tfalse\t[]\t\"\"\n"
+ want := "test\t\t\t''\t''\t2017-01-01 01:02:03.000000\t2017-01-01 01:02:04.000001\t1.000001\t0.000000\t0.000000\t0.000000\t\t\"sql1 /* LOG_THIS_QUERY */\"\t{\"intVal\": {\"type\": \"INT64\", \"value\": 1}}\t0\t0\t\"\"\t\"\"\t\"\"\tfalse\t[]\t\"\"\t0.000000\t0.000000\t\"\"\n"
assert.Equal(t, want, got)
streamlog.SetQueryLogFilterTag("LOG_THIS_QUERY")
got = testFormat(t, logStats, params)
- want = "test\t\t\t''\t''\t2017-01-01 01:02:03.000000\t2017-01-01 01:02:04.000001\t1.000001\t0.000000\t0.000000\t0.000000\t\t\"sql1 /* LOG_THIS_QUERY */\"\t{\"intVal\": {\"type\": \"INT64\", \"value\": 1}}\t0\t0\t\"\"\t\"\"\t\"\"\tfalse\t[]\t\"\"\n"
+ want = "test\t\t\t''\t''\t2017-01-01 01:02:03.000000\t2017-01-01 01:02:04.000001\t1.000001\t0.000000\t0.000000\t0.000000\t\t\"sql1 /* LOG_THIS_QUERY */\"\t{\"intVal\": {\"type\": \"INT64\", \"value\": 1}}\t0\t0\t\"\"\t\"\"\t\"\"\tfalse\t[]\t\"\"\t0.000000\t0.000000\t\"\"\n"
assert.Equal(t, want, got)
streamlog.SetQueryLogFilterTag("NOT_THIS_QUERY")
@@ -179,12 +179,12 @@ func TestLogStatsRowThreshold(t *testing.T) {
params := map[string][]string{"full": {}}
got := testFormat(t, logStats, params)
- want := "test\t\t\t''\t''\t2017-01-01 01:02:03.000000\t2017-01-01 01:02:04.000001\t1.000001\t0.000000\t0.000000\t0.000000\t\t\"sql1 /* LOG_THIS_QUERY */\"\t{\"intVal\": {\"type\": \"INT64\", \"value\": 1}}\t0\t0\t\"\"\t\"\"\t\"\"\tfalse\t[]\t\"\"\n"
+ want := "test\t\t\t''\t''\t2017-01-01 01:02:03.000000\t2017-01-01 01:02:04.000001\t1.000001\t0.000000\t0.000000\t0.000000\t\t\"sql1 /* LOG_THIS_QUERY */\"\t{\"intVal\": {\"type\": \"INT64\", \"value\": 1}}\t0\t0\t\"\"\t\"\"\t\"\"\tfalse\t[]\t\"\"\t0.000000\t0.000000\t\"\"\n"
assert.Equal(t, want, got)
streamlog.SetQueryLogRowThreshold(0)
got = testFormat(t, logStats, params)
- want = "test\t\t\t''\t''\t2017-01-01 01:02:03.000000\t2017-01-01 01:02:04.000001\t1.000001\t0.000000\t0.000000\t0.000000\t\t\"sql1 /* LOG_THIS_QUERY */\"\t{\"intVal\": {\"type\": \"INT64\", \"value\": 1}}\t0\t0\t\"\"\t\"\"\t\"\"\tfalse\t[]\t\"\"\n"
+ want = "test\t\t\t''\t''\t2017-01-01 01:02:03.000000\t2017-01-01 01:02:04.000001\t1.000001\t0.000000\t0.000000\t0.000000\t\t\"sql1 /* LOG_THIS_QUERY */\"\t{\"intVal\": {\"type\": \"INT64\", \"value\": 1}}\t0\t0\t\"\"\t\"\"\t\"\"\tfalse\t[]\t\"\"\t0.000000\t0.000000\t\"\"\n"
assert.Equal(t, want, got)
streamlog.SetQueryLogRowThreshold(1)
got = testFormat(t, logStats, params)
@@ -215,6 +215,18 @@ func TestLogStatsErrorStr(t *testing.T) {
}
}
+func TestLogStatsMirrorTargetErrorStr(t *testing.T) {
+ logStats := NewLogStats(context.Background(), "test", "sql1", "", map[string]*querypb.BindVariable{})
+ if logStats.MirrorTargetErrorStr() != "" {
+ t.Fatalf("should not get error in stats, but got: %s", logStats.ErrorStr())
+ }
+ errStr := "unknown error"
+ logStats.MirrorTargetError = errors.New(errStr)
+ if !strings.Contains(logStats.MirrorTargetErrorStr(), errStr) {
+ t.Fatalf("expect string '%s' in error message, but got: %s", errStr, logStats.ErrorStr())
+ }
+}
+
func TestLogStatsRemoteAddrUsername(t *testing.T) {
logStats := NewLogStats(context.Background(), "test", "sql1", "", map[string]*querypb.BindVariable{})
addr, user := logStats.RemoteAddrUsername()
diff --git a/go/vt/vtgate/plan_execute.go b/go/vt/vtgate/plan_execute.go
index 34abe5a2aa3..db7923c09f0 100644
--- a/go/vt/vtgate/plan_execute.go
+++ b/go/vt/vtgate/plan_execute.go
@@ -29,13 +29,16 @@ import (
"vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/vterrors"
"vitess.io/vitess/go/vt/vtgate/engine"
+ econtext "vitess.io/vitess/go/vt/vtgate/executorcontext"
"vitess.io/vitess/go/vt/vtgate/logstats"
"vitess.io/vitess/go/vt/vtgate/vtgateservice"
)
-type planExec func(ctx context.Context, plan *engine.Plan, vc *vcursorImpl, bindVars map[string]*querypb.BindVariable, startTime time.Time) error
+type planExec func(ctx context.Context, plan *engine.Plan, vc *econtext.VCursorImpl, bindVars map[string]*querypb.BindVariable, startTime time.Time) error
type txResult func(sqlparser.StatementType, *sqltypes.Result) error
+var vschemaWaitTimeout = 30 * time.Second
+
func waitForNewerVSchema(ctx context.Context, e *Executor, lastVSchemaCreated time.Time, timeout time.Duration) bool {
pollingInterval := 10 * time.Millisecond
waitCtx, cancel := context.WithTimeout(ctx, timeout)
@@ -54,10 +57,12 @@ func waitForNewerVSchema(ctx context.Context, e *Executor, lastVSchemaCreated ti
}
}
+const MaxBufferingRetries = 3
+
func (e *Executor) newExecute(
ctx context.Context,
mysqlCtx vtgateservice.MySQLConnection,
- safeSession *SafeSession,
+ safeSession *econtext.SafeSession,
sql string,
bindVars map[string]*querypb.BindVariable,
logStats *logstats.LogStats,
@@ -104,14 +109,17 @@ func (e *Executor) newExecute(
// based on the buffering configuration. This way we should be able to perform the max retries
// within the given window of time for most queries and we should not end up waiting too long
// after the traffic switch fails or the buffer window has ended, retrying old queries.
- timeout := e.resolver.scatterConn.gateway.buffer.GetConfig().MaxFailoverDuration / (MaxBufferingRetries - 1)
+ timeout := vschemaWaitTimeout
+ if e.resolver.scatterConn.gateway.buffer != nil && e.resolver.scatterConn.gateway.buffer.GetConfig() != nil {
+ timeout = e.resolver.scatterConn.gateway.buffer.GetConfig().MaxFailoverDuration / (MaxBufferingRetries - 1)
+ }
if waitForNewerVSchema(ctx, e, lastVSchemaCreated, timeout) {
vs = e.VSchema()
lastVSchemaCreated = vs.GetCreated()
}
}
- vcursor, err := newVCursorImpl(safeSession, comments, e, logStats, e.vm, vs, e.resolver.resolver, e.serv, e.warnShardedOnly, e.pv)
+ vcursor, err := econtext.NewVCursorImpl(safeSession, comments, e, logStats, e.vm, vs, e.resolver.resolver, e.serv, nullResultsObserver{}, e.vConfig)
if err != nil {
return err
}
@@ -141,10 +149,8 @@ func (e *Executor) newExecute(
}
// set the overall query timeout if it is not already set
- if vcursor.queryTimeout > 0 && cancel == nil {
- ctx, cancel = context.WithTimeout(ctx, vcursor.queryTimeout)
- defer cancel()
- }
+ ctx, cancel = vcursor.GetContextWithTimeOut(ctx)
+ defer cancel()
result, err = e.handleTransactions(ctx, mysqlCtx, safeSession, plan, logStats, vcursor, stmt)
if err != nil {
@@ -220,10 +226,10 @@ func (e *Executor) newExecute(
func (e *Executor) handleTransactions(
ctx context.Context,
mysqlCtx vtgateservice.MySQLConnection,
- safeSession *SafeSession,
+ safeSession *econtext.SafeSession,
plan *engine.Plan,
logStats *logstats.LogStats,
- vcursor *vcursorImpl,
+ vcursor *econtext.VCursorImpl,
stmt sqlparser.Statement,
) (*sqltypes.Result, error) {
// We need to explicitly handle errors, and begin/commit/rollback, since these control transactions. Everything else
@@ -242,19 +248,19 @@ func (e *Executor) handleTransactions(
qr, err := e.handleSavepoint(ctx, safeSession, plan.Original, "Savepoint", logStats, func(_ string) (*sqltypes.Result, error) {
// Safely to ignore as there is no transaction.
return &sqltypes.Result{}, nil
- }, vcursor.ignoreMaxMemoryRows)
+ }, vcursor.IgnoreMaxMemoryRows())
return qr, err
case sqlparser.StmtSRollback:
qr, err := e.handleSavepoint(ctx, safeSession, plan.Original, "Rollback Savepoint", logStats, func(query string) (*sqltypes.Result, error) {
// Error as there is no transaction, so there is no savepoint that exists.
return nil, vterrors.NewErrorf(vtrpcpb.Code_NOT_FOUND, vterrors.SPDoesNotExist, "SAVEPOINT does not exist: %s", query)
- }, vcursor.ignoreMaxMemoryRows)
+ }, vcursor.IgnoreMaxMemoryRows())
return qr, err
case sqlparser.StmtRelease:
qr, err := e.handleSavepoint(ctx, safeSession, plan.Original, "Release Savepoint", logStats, func(query string) (*sqltypes.Result, error) {
// Error as there is no transaction, so there is no savepoint that exists.
return nil, vterrors.NewErrorf(vtrpcpb.Code_NOT_FOUND, vterrors.SPDoesNotExist, "SAVEPOINT does not exist: %s", query)
- }, vcursor.ignoreMaxMemoryRows)
+ }, vcursor.IgnoreMaxMemoryRows())
return qr, err
case sqlparser.StmtKill:
return e.handleKill(ctx, mysqlCtx, stmt, logStats)
@@ -262,7 +268,7 @@ func (e *Executor) handleTransactions(
return nil, nil
}
-func (e *Executor) startTxIfNecessary(ctx context.Context, safeSession *SafeSession) error {
+func (e *Executor) startTxIfNecessary(ctx context.Context, safeSession *econtext.SafeSession) error {
if !safeSession.Autocommit && !safeSession.InTransaction() {
if err := e.txConn.Begin(ctx, safeSession, nil); err != nil {
return err
@@ -271,7 +277,7 @@ func (e *Executor) startTxIfNecessary(ctx context.Context, safeSession *SafeSess
return nil
}
-func (e *Executor) insideTransaction(ctx context.Context, safeSession *SafeSession, logStats *logstats.LogStats, execPlan func() error) error {
+func (e *Executor) insideTransaction(ctx context.Context, safeSession *econtext.SafeSession, logStats *logstats.LogStats, execPlan func() error) error {
mustCommit := false
if safeSession.Autocommit && !safeSession.InTransaction() {
mustCommit = true
@@ -315,9 +321,9 @@ func (e *Executor) insideTransaction(ctx context.Context, safeSession *SafeSessi
func (e *Executor) executePlan(
ctx context.Context,
- safeSession *SafeSession,
+ safeSession *econtext.SafeSession,
plan *engine.Plan,
- vcursor *vcursorImpl,
+ vcursor *econtext.VCursorImpl,
bindVars map[string]*querypb.BindVariable,
logStats *logstats.LogStats,
execStart time.Time,
@@ -337,7 +343,7 @@ func (e *Executor) executePlan(
}
// rollbackExecIfNeeded rollbacks the partial execution if earlier it was detected that it needs partial query execution to be rolled back.
-func (e *Executor) rollbackExecIfNeeded(ctx context.Context, safeSession *SafeSession, bindVars map[string]*querypb.BindVariable, logStats *logstats.LogStats, err error) error {
+func (e *Executor) rollbackExecIfNeeded(ctx context.Context, safeSession *econtext.SafeSession, bindVars map[string]*querypb.BindVariable, logStats *logstats.LogStats, err error) error {
if safeSession.InTransaction() && safeSession.IsRollbackSet() {
rErr := e.rollbackPartialExec(ctx, safeSession, bindVars, logStats)
return vterrors.Wrap(err, rErr.Error())
@@ -348,7 +354,7 @@ func (e *Executor) rollbackExecIfNeeded(ctx context.Context, safeSession *SafeSe
// rollbackPartialExec rollbacks to the savepoint or rollbacks transaction based on the value set on SafeSession.rollbackOnPartialExec.
// Once, it is used the variable is reset.
// If it fails to rollback to the previous savepoint then, the transaction is forced to be rolled back.
-func (e *Executor) rollbackPartialExec(ctx context.Context, safeSession *SafeSession, bindVars map[string]*querypb.BindVariable, logStats *logstats.LogStats) error {
+func (e *Executor) rollbackPartialExec(ctx context.Context, safeSession *econtext.SafeSession, bindVars map[string]*querypb.BindVariable, logStats *logstats.LogStats) error {
var err error
var errMsg strings.Builder
@@ -362,8 +368,8 @@ func (e *Executor) rollbackPartialExec(ctx context.Context, safeSession *SafeSes
}
// needs to rollback only once.
- rQuery := safeSession.rollbackOnPartialExec
- if rQuery != txRollback {
+ rQuery := safeSession.GetRollbackOnPartialExec()
+ if rQuery != econtext.TxRollback {
safeSession.SavepointRollback()
_, _, err = e.execute(ctx, nil, safeSession, rQuery, bindVars, logStats)
// If no error, the revert is successful with the savepoint. Notify the reason as error to the client.
@@ -383,9 +389,9 @@ func (e *Executor) rollbackPartialExec(ctx context.Context, safeSession *SafeSes
return vterrors.New(vtrpcpb.Code_ABORTED, errMsg.String())
}
-func (e *Executor) setLogStats(logStats *logstats.LogStats, plan *engine.Plan, vcursor *vcursorImpl, execStart time.Time, err error, qr *sqltypes.Result) {
+func (e *Executor) setLogStats(logStats *logstats.LogStats, plan *engine.Plan, vcursor *econtext.VCursorImpl, execStart time.Time, err error, qr *sqltypes.Result) {
logStats.StmtType = plan.Type.String()
- logStats.ActiveKeyspace = vcursor.keyspace
+ logStats.ActiveKeyspace = vcursor.GetKeyspace()
logStats.TablesUsed = plan.TablesUsed
logStats.TabletType = vcursor.TabletType().String()
errCount := e.logExecutionEnd(logStats, execStart, plan, err, qr)
diff --git a/go/vt/vtgate/planbuilder/builder.go b/go/vt/vtgate/planbuilder/builder.go
index 27b994b1730..ca4ccb7ac5a 100644
--- a/go/vt/vtgate/planbuilder/builder.go
+++ b/go/vt/vtgate/planbuilder/builder.go
@@ -28,6 +28,7 @@ import (
topodatapb "vitess.io/vitess/go/vt/proto/topodata"
"vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/vterrors"
+ "vitess.io/vitess/go/vt/vtgate/dynamicconfig"
"vitess.io/vitess/go/vt/vtgate/engine"
"vitess.io/vitess/go/vt/vtgate/planbuilder/plancontext"
"vitess.io/vitess/go/vt/vtgate/vindexes"
@@ -63,6 +64,16 @@ func singleTable(ks, tbl string) string {
return fmt.Sprintf("%s.%s", ks, tbl)
}
+type staticConfig struct{}
+
+func (staticConfig) OnlineEnabled() bool {
+ return true
+}
+
+func (staticConfig) DirectEnabled() bool {
+ return true
+}
+
// TestBuilder builds a plan for a query based on the specified vschema.
// This method is only used from tests
func TestBuilder(query string, vschema plancontext.VSchema, keyspace string) (*engine.Plan, error) {
@@ -92,12 +103,12 @@ func TestBuilder(query string, vschema plancontext.VSchema, keyspace string) (*e
}
reservedVars := sqlparser.NewReservedVars("vtg", reserved)
- return BuildFromStmt(context.Background(), query, result.AST, reservedVars, vschema, result.BindVarNeeds, true, true)
+ return BuildFromStmt(context.Background(), query, result.AST, reservedVars, vschema, result.BindVarNeeds, staticConfig{})
}
// BuildFromStmt builds a plan based on the AST provided.
-func BuildFromStmt(ctx context.Context, query string, stmt sqlparser.Statement, reservedVars *sqlparser.ReservedVars, vschema plancontext.VSchema, bindVarNeeds *sqlparser.BindVarNeeds, enableOnlineDDL, enableDirectDDL bool) (*engine.Plan, error) {
- planResult, err := createInstructionFor(ctx, query, stmt, reservedVars, vschema, enableOnlineDDL, enableDirectDDL)
+func BuildFromStmt(ctx context.Context, query string, stmt sqlparser.Statement, reservedVars *sqlparser.ReservedVars, vschema plancontext.VSchema, bindVarNeeds *sqlparser.BindVarNeeds, cfg dynamicconfig.DDL) (*engine.Plan, error) {
+ planResult, err := createInstructionFor(ctx, query, stmt, reservedVars, vschema, cfg)
if err != nil {
return nil, err
}
@@ -154,7 +165,7 @@ func buildRoutePlan(stmt sqlparser.Statement, reservedVars *sqlparser.ReservedVa
return f(stmt, reservedVars, vschema)
}
-func createInstructionFor(ctx context.Context, query string, stmt sqlparser.Statement, reservedVars *sqlparser.ReservedVars, vschema plancontext.VSchema, enableOnlineDDL, enableDirectDDL bool) (*planResult, error) {
+func createInstructionFor(ctx context.Context, query string, stmt sqlparser.Statement, reservedVars *sqlparser.ReservedVars, vschema plancontext.VSchema, cfg dynamicconfig.DDL) (*planResult, error) {
switch stmt := stmt.(type) {
case *sqlparser.Select, *sqlparser.Insert, *sqlparser.Update, *sqlparser.Delete:
configuredPlanner, err := getConfiguredPlanner(vschema, stmt, query)
@@ -169,13 +180,13 @@ func createInstructionFor(ctx context.Context, query string, stmt sqlparser.Stat
}
return buildRoutePlan(stmt, reservedVars, vschema, configuredPlanner)
case sqlparser.DDLStatement:
- return buildGeneralDDLPlan(ctx, query, stmt, reservedVars, vschema, enableOnlineDDL, enableDirectDDL)
+ return buildGeneralDDLPlan(ctx, query, stmt, reservedVars, vschema, cfg)
case *sqlparser.AlterMigration:
- return buildAlterMigrationPlan(query, stmt, vschema, enableOnlineDDL)
+ return buildAlterMigrationPlan(query, stmt, vschema, cfg)
case *sqlparser.RevertMigration:
- return buildRevertMigrationPlan(query, stmt, vschema, enableOnlineDDL)
+ return buildRevertMigrationPlan(query, stmt, vschema, cfg)
case *sqlparser.ShowMigrationLogs:
- return buildShowMigrationLogsPlan(query, vschema, enableOnlineDDL)
+ return buildShowMigrationLogsPlan(query, vschema, cfg)
case *sqlparser.ShowThrottledApps:
return buildShowThrottledAppsPlan(query, vschema)
case *sqlparser.ShowThrottlerStatus:
@@ -189,7 +200,7 @@ func createInstructionFor(ctx context.Context, query string, stmt sqlparser.Stat
case *sqlparser.ExplainStmt:
return buildRoutePlan(stmt, reservedVars, vschema, buildExplainStmtPlan)
case *sqlparser.VExplainStmt:
- return buildVExplainPlan(ctx, stmt, reservedVars, vschema, enableOnlineDDL, enableDirectDDL)
+ return buildVExplainPlan(ctx, stmt, reservedVars, vschema, cfg)
case *sqlparser.OtherAdmin:
return buildOtherReadAndAdmin(query, vschema)
case *sqlparser.Analyze:
@@ -275,7 +286,7 @@ func buildDBDDLPlan(stmt sqlparser.Statement, _ *sqlparser.ReservedVars, vschema
dbDDLstmt := stmt.(sqlparser.DBDDLStatement)
ksName := dbDDLstmt.GetDatabaseName()
if ksName == "" {
- ks, err := vschema.DefaultKeyspace()
+ ks, err := vschema.SelectedKeyspace()
if err != nil {
return nil, err
}
@@ -310,7 +321,7 @@ func buildDBDDLPlan(stmt sqlparser.Statement, _ *sqlparser.ReservedVars, vschema
}
func buildLoadPlan(query string, vschema plancontext.VSchema) (*planResult, error) {
- keyspace, err := vschema.DefaultKeyspace()
+ keyspace, err := vschema.SelectedKeyspace()
if err != nil {
return nil, err
}
@@ -355,7 +366,7 @@ func buildFlushOptions(stmt *sqlparser.Flush, vschema plancontext.VSchema) (*pla
return nil, vterrors.VT09012("FLUSH", vschema.TabletType().String())
}
- keyspace, err := vschema.DefaultKeyspace()
+ keyspace, err := vschema.SelectedKeyspace()
if err != nil {
return nil, err
}
diff --git a/go/vt/vtgate/planbuilder/bypass.go b/go/vt/vtgate/planbuilder/bypass.go
index 62cae9655b1..d3384d509c1 100644
--- a/go/vt/vtgate/planbuilder/bypass.go
+++ b/go/vt/vtgate/planbuilder/bypass.go
@@ -26,7 +26,7 @@ import (
)
func buildPlanForBypass(stmt sqlparser.Statement, _ *sqlparser.ReservedVars, vschema plancontext.VSchema) (*planResult, error) {
- keyspace, err := vschema.DefaultKeyspace()
+ keyspace, err := vschema.SelectedKeyspace()
if err != nil {
return nil, err
}
diff --git a/go/vt/vtgate/planbuilder/collations_test.go b/go/vt/vtgate/planbuilder/collations_test.go
index b393e186679..0595039e673 100644
--- a/go/vt/vtgate/planbuilder/collations_test.go
+++ b/go/vt/vtgate/planbuilder/collations_test.go
@@ -41,15 +41,13 @@ type collationTestCase struct {
}
func (tc *collationTestCase) run(t *testing.T) {
- vschemaWrapper := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(t, "vschemas/schema.json", false),
- SysVarEnabled: true,
- Version: Gen4,
- Env: vtenv.NewTestEnv(),
- }
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(t, "vschemas/schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(t, err)
- tc.addCollationsToSchema(vschemaWrapper)
- plan, err := TestBuilder(tc.query, vschemaWrapper, vschemaWrapper.CurrentDb())
+ tc.addCollationsToSchema(vw)
+ plan, err := TestBuilder(tc.query, vw, vw.CurrentDb())
require.NoError(t, err)
tc.check(t, tc.collations, plan.Instructions)
}
diff --git a/go/vt/vtgate/planbuilder/ddl.go b/go/vt/vtgate/planbuilder/ddl.go
index f4b8ab6976f..a0045cec060 100644
--- a/go/vt/vtgate/planbuilder/ddl.go
+++ b/go/vt/vtgate/planbuilder/ddl.go
@@ -9,6 +9,7 @@ import (
vschemapb "vitess.io/vitess/go/vt/proto/vschema"
"vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/vterrors"
+ "vitess.io/vitess/go/vt/vtgate/dynamicconfig"
"vitess.io/vitess/go/vt/vtgate/engine"
"vitess.io/vitess/go/vt/vtgate/planbuilder/plancontext"
"vitess.io/vitess/go/vt/vtgate/vindexes"
@@ -43,11 +44,11 @@ func (fk *fkContraint) FkWalk(node sqlparser.SQLNode) (kontinue bool, err error)
// a session context. It's only when we Execute() the primitive that we have that context.
// This is why we return a compound primitive (DDL) which contains fully populated primitives (Send & OnlineDDL),
// and which chooses which of the two to invoke at runtime.
-func buildGeneralDDLPlan(ctx context.Context, sql string, ddlStatement sqlparser.DDLStatement, reservedVars *sqlparser.ReservedVars, vschema plancontext.VSchema, enableOnlineDDL, enableDirectDDL bool) (*planResult, error) {
+func buildGeneralDDLPlan(ctx context.Context, sql string, ddlStatement sqlparser.DDLStatement, reservedVars *sqlparser.ReservedVars, vschema plancontext.VSchema, cfg dynamicconfig.DDL) (*planResult, error) {
if vschema.Destination() != nil {
return buildByPassPlan(sql, vschema, true)
}
- normalDDLPlan, onlineDDLPlan, err := buildDDLPlans(ctx, sql, ddlStatement, reservedVars, vschema, enableOnlineDDL, enableDirectDDL)
+ normalDDLPlan, onlineDDLPlan, err := buildDDLPlans(ctx, sql, ddlStatement, reservedVars, vschema, cfg)
if err != nil {
return nil, err
}
@@ -61,15 +62,12 @@ func buildGeneralDDLPlan(ctx context.Context, sql string, ddlStatement sqlparser
}
eddl := &engine.DDL{
- Keyspace: normalDDLPlan.Keyspace,
- SQL: normalDDLPlan.Query,
- DDL: ddlStatement,
- NormalDDL: normalDDLPlan,
- OnlineDDL: onlineDDLPlan,
-
- DirectDDLEnabled: enableDirectDDL,
- OnlineDDLEnabled: enableOnlineDDL,
-
+ Keyspace: normalDDLPlan.Keyspace,
+ SQL: normalDDLPlan.Query,
+ DDL: ddlStatement,
+ NormalDDL: normalDDLPlan,
+ OnlineDDL: onlineDDLPlan,
+ Config: cfg,
CreateTempTable: ddlStatement.IsTemporary(),
}
tc := &tableCollector{}
@@ -81,7 +79,7 @@ func buildGeneralDDLPlan(ctx context.Context, sql string, ddlStatement sqlparser
}
func buildByPassPlan(sql string, vschema plancontext.VSchema, isDDL bool) (*planResult, error) {
- keyspace, err := vschema.DefaultKeyspace()
+ keyspace, err := vschema.SelectedKeyspace()
if err != nil {
return nil, err
}
@@ -94,7 +92,7 @@ func buildByPassPlan(sql string, vschema plancontext.VSchema, isDDL bool) (*plan
return newPlanResult(send), nil
}
-func buildDDLPlans(ctx context.Context, sql string, ddlStatement sqlparser.DDLStatement, reservedVars *sqlparser.ReservedVars, vschema plancontext.VSchema, enableOnlineDDL, enableDirectDDL bool) (*engine.Send, *engine.OnlineDDL, error) {
+func buildDDLPlans(ctx context.Context, sql string, ddlStatement sqlparser.DDLStatement, reservedVars *sqlparser.ReservedVars, vschema plancontext.VSchema, cfg dynamicconfig.DDL) (*engine.Send, *engine.OnlineDDL, error) {
var destination key.Destination
var keyspace *vindexes.Keyspace
var err error
@@ -113,9 +111,9 @@ func buildDDLPlans(ctx context.Context, sql string, ddlStatement sqlparser.DDLSt
}
err = checkFKError(vschema, ddlStatement, keyspace)
case *sqlparser.CreateView:
- destination, keyspace, err = buildCreateViewCommon(ctx, vschema, reservedVars, enableOnlineDDL, enableDirectDDL, ddl.Select, ddl)
+ destination, keyspace, err = buildCreateViewCommon(ctx, vschema, reservedVars, cfg, ddl.Select, ddl)
case *sqlparser.AlterView:
- destination, keyspace, err = buildCreateViewCommon(ctx, vschema, reservedVars, enableOnlineDDL, enableDirectDDL, ddl.Select, ddl)
+ destination, keyspace, err = buildCreateViewCommon(ctx, vschema, reservedVars, cfg, ddl.Select, ddl)
case *sqlparser.DropView:
destination, keyspace, err = buildDropView(vschema, ddlStatement)
case *sqlparser.DropTable:
@@ -197,7 +195,7 @@ func buildCreateViewCommon(
ctx context.Context,
vschema plancontext.VSchema,
reservedVars *sqlparser.ReservedVars,
- enableOnlineDDL, enableDirectDDL bool,
+ cfg dynamicconfig.DDL,
ddlSelect sqlparser.SelectStatement,
ddl sqlparser.DDLStatement,
) (key.Destination, *vindexes.Keyspace, error) {
@@ -214,7 +212,7 @@ func buildCreateViewCommon(
expressions = append(expressions, sqlparser.Clone(p.SelectExprs))
return nil
})
- selectPlan, err := createInstructionFor(ctx, sqlparser.String(ddlSelect), ddlSelect, reservedVars, vschema, enableOnlineDDL, enableDirectDDL)
+ selectPlan, err := createInstructionFor(ctx, sqlparser.String(ddlSelect), ddlSelect, reservedVars, vschema, cfg)
if err != nil {
return nil, nil, err
}
diff --git a/go/vt/vtgate/planbuilder/migration.go b/go/vt/vtgate/planbuilder/migration.go
index 6fb73a9039d..e64b990aa6b 100644
--- a/go/vt/vtgate/planbuilder/migration.go
+++ b/go/vt/vtgate/planbuilder/migration.go
@@ -27,6 +27,7 @@ import (
"vitess.io/vitess/go/vt/schema"
"vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/vterrors"
+ "vitess.io/vitess/go/vt/vtgate/dynamicconfig"
"vitess.io/vitess/go/vt/vtgate/engine"
"vitess.io/vitess/go/vt/vtgate/planbuilder/plancontext"
"vitess.io/vitess/go/vt/vtgate/vindexes"
@@ -80,8 +81,8 @@ func buildAlterMigrationThrottleAppPlan(query string, alterMigration *sqlparser.
}), nil
}
-func buildAlterMigrationPlan(query string, alterMigration *sqlparser.AlterMigration, vschema plancontext.VSchema, enableOnlineDDL bool) (*planResult, error) {
- if !enableOnlineDDL {
+func buildAlterMigrationPlan(query string, alterMigration *sqlparser.AlterMigration, vschema plancontext.VSchema, cfg dynamicconfig.DDL) (*planResult, error) {
+ if !cfg.OnlineEnabled() {
return nil, schema.ErrOnlineDDLDisabled
}
@@ -118,8 +119,8 @@ func buildAlterMigrationPlan(query string, alterMigration *sqlparser.AlterMigrat
return newPlanResult(send), nil
}
-func buildRevertMigrationPlan(query string, stmt *sqlparser.RevertMigration, vschema plancontext.VSchema, enableOnlineDDL bool) (*planResult, error) {
- if !enableOnlineDDL {
+func buildRevertMigrationPlan(query string, stmt *sqlparser.RevertMigration, vschema plancontext.VSchema, cfg dynamicconfig.DDL) (*planResult, error) {
+ if !cfg.OnlineEnabled() {
return nil, schema.ErrOnlineDDLDisabled
}
dest, ks, tabletType, err := vschema.TargetDestination("")
@@ -147,8 +148,8 @@ func buildRevertMigrationPlan(query string, stmt *sqlparser.RevertMigration, vsc
return newPlanResult(emig), nil
}
-func buildShowMigrationLogsPlan(query string, vschema plancontext.VSchema, enableOnlineDDL bool) (*planResult, error) {
- if !enableOnlineDDL {
+func buildShowMigrationLogsPlan(query string, vschema plancontext.VSchema, cfg dynamicconfig.DDL) (*planResult, error) {
+ if !cfg.OnlineEnabled() {
return nil, schema.ErrOnlineDDLDisabled
}
dest, ks, tabletType, err := vschema.TargetDestination("")
diff --git a/go/vt/vtgate/planbuilder/operator_transformers.go b/go/vt/vtgate/planbuilder/operator_transformers.go
index a22719b4489..df14745e6b2 100644
--- a/go/vt/vtgate/planbuilder/operator_transformers.go
+++ b/go/vt/vtgate/planbuilder/operator_transformers.go
@@ -545,7 +545,7 @@ func routeToEngineRoute(ctx *plancontext.PlanningContext, op *operators.Route, h
}
func newRoutingParams(ctx *plancontext.PlanningContext, opCode engine.Opcode) *engine.RoutingParameters {
- ks, _ := ctx.VSchema.DefaultKeyspace()
+ ks, _ := ctx.VSchema.SelectedKeyspace()
if ks == nil {
// if we don't have a selected keyspace, any keyspace will do
// this is used by operators that do not set the keyspace
diff --git a/go/vt/vtgate/planbuilder/operators/SQL_builder.go b/go/vt/vtgate/planbuilder/operators/SQL_builder.go
index 20af2a698c3..fc91569981d 100644
--- a/go/vt/vtgate/planbuilder/operators/SQL_builder.go
+++ b/go/vt/vtgate/planbuilder/operators/SQL_builder.go
@@ -242,7 +242,7 @@ func (qb *queryBuilder) unionWith(other *queryBuilder, distinct bool) {
}
}
-func (qb *queryBuilder) recursiveCteWith(other *queryBuilder, name, alias string, distinct bool) {
+func (qb *queryBuilder) recursiveCteWith(other *queryBuilder, name, alias string, distinct bool, columns sqlparser.Columns) {
cteUnion := &sqlparser.Union{
Left: qb.stmt.(sqlparser.SelectStatement),
Right: other.stmt.(sqlparser.SelectStatement),
@@ -254,7 +254,7 @@ func (qb *queryBuilder) recursiveCteWith(other *queryBuilder, name, alias string
Recursive: true,
CTEs: []*sqlparser.CommonTableExpr{{
ID: sqlparser.NewIdentifierCS(name),
- Columns: nil,
+ Columns: columns,
Subquery: cteUnion,
}},
},
@@ -726,7 +726,7 @@ func buildRecursiveCTE(op *RecurseCTE, qb *queryBuilder) {
panic(err)
}
- qb.recursiveCteWith(qbR, op.Def.Name, infoFor.GetAliasedTableExpr().As.String(), op.Distinct)
+ qb.recursiveCteWith(qbR, op.Def.Name, infoFor.GetAliasedTableExpr().As.String(), op.Distinct, op.Def.Columns)
}
func mergeHaving(h1, h2 *sqlparser.Where) *sqlparser.Where {
diff --git a/go/vt/vtgate/planbuilder/operators/delete.go b/go/vt/vtgate/planbuilder/operators/delete.go
index 4d30d9b9cc1..81e36d54315 100644
--- a/go/vt/vtgate/planbuilder/operators/delete.go
+++ b/go/vt/vtgate/planbuilder/operators/delete.go
@@ -328,7 +328,7 @@ func updateQueryGraphWithSource(ctx *plancontext.PlanningContext, input Operator
if tbl.ID != tblID {
continue
}
- tbl.Alias = sqlparser.NewAliasedTableExpr(sqlparser.NewTableName(vTbl.Name.String()), tbl.Alias.As.String())
+ tbl.Alias = sqlparser.NewAliasedTableExpr(sqlparser.NewTableNameWithQualifier(vTbl.Name.String(), vTbl.Keyspace.Name), tbl.Alias.As.String())
tbl.Table, _ = tbl.Alias.TableName()
}
return op, Rewrote("change query table point to source table")
diff --git a/go/vt/vtgate/planbuilder/operators/horizon_expanding.go b/go/vt/vtgate/planbuilder/operators/horizon_expanding.go
index 7b058627b17..dad5ad3a91a 100644
--- a/go/vt/vtgate/planbuilder/operators/horizon_expanding.go
+++ b/go/vt/vtgate/planbuilder/operators/horizon_expanding.go
@@ -78,6 +78,12 @@ func expandSelectHorizon(ctx *plancontext.PlanningContext, horizon *Horizon, sel
for _, order := range horizon.Query.GetOrderBy() {
qp.addDerivedColumn(ctx, order.Expr)
}
+ sel, isSel := horizon.Query.(*sqlparser.Select)
+ if isSel && sel.Having != nil {
+ for _, pred := range sqlparser.SplitAndExpression(nil, sel.Having.Expr) {
+ qp.addDerivedColumn(ctx, pred)
+ }
+ }
}
op := createProjectionFromSelect(ctx, horizon)
diff --git a/go/vt/vtgate/planbuilder/operators/keys.go b/go/vt/vtgate/planbuilder/operators/keys.go
index ccebcbd7c10..8d75b260aeb 100644
--- a/go/vt/vtgate/planbuilder/operators/keys.go
+++ b/go/vt/vtgate/planbuilder/operators/keys.go
@@ -17,43 +17,204 @@ limitations under the License.
package operators
import (
+ "encoding/json"
"fmt"
"slices"
+ "sort"
+ "strings"
"vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/vtgate/planbuilder/plancontext"
)
-type VExplainKeys struct {
- GroupingColumns []string `json:"groupingColumns,omitempty"`
- TableName []string `json:"tableName,omitempty"`
- JoinColumns []string `json:"joinColumns,omitempty"`
- FilterColumns []string `json:"filterColumns,omitempty"`
- StatementType string `json:"statementType"`
+type (
+ Column struct {
+ Table string
+ Name string
+ }
+ ColumnUse struct {
+ Column Column
+ Uses sqlparser.ComparisonExprOperator
+ }
+ JoinPredicate struct {
+ LHS, RHS Column
+ Uses sqlparser.ComparisonExprOperator
+ }
+ VExplainKeys struct {
+ StatementType string `json:"statementType"`
+ TableName []string `json:"tableName,omitempty"`
+ GroupingColumns []Column `json:"groupingColumns,omitempty"`
+ FilterColumns []ColumnUse `json:"filterColumns,omitempty"`
+ SelectColumns []Column `json:"selectColumns,omitempty"`
+ JoinPredicates []JoinPredicate `json:"joinPredicates,omitempty"`
+ }
+)
+
+func newJoinPredicate(lhs, rhs Column, op sqlparser.ComparisonExprOperator) JoinPredicate {
+ // we want to try to keep the columns in the same order, no matter how the query was written
+ if lhs.String() > rhs.String() {
+ var success bool
+ op, success = op.SwitchSides()
+ if success {
+ lhs, rhs = rhs, lhs
+ }
+ }
+ return JoinPredicate{LHS: lhs, RHS: rhs, Uses: op}
+}
+
+func (c Column) MarshalJSON() ([]byte, error) {
+ if c.Table != "" {
+ return json.Marshal(fmt.Sprintf("%s.%s", c.Table, c.Name))
+ }
+ return json.Marshal(c.Name)
+}
+
+func (c *Column) UnmarshalJSON(data []byte) error {
+ var s string
+ if err := json.Unmarshal(data, &s); err != nil {
+ return err
+ }
+ parts := strings.Split(s, ".")
+ if len(parts) > 1 {
+ c.Table = parts[0]
+ c.Name = parts[1]
+ } else {
+ c.Name = s
+ }
+ return nil
+}
+
+func (cu ColumnUse) MarshalJSON() ([]byte, error) {
+ return json.Marshal(fmt.Sprintf("%s %s", cu.Column, cu.Uses.JSONString()))
+}
+
+func (cu *ColumnUse) UnmarshalJSON(data []byte) error {
+ var s string
+ if err := json.Unmarshal(data, &s); err != nil {
+ return err
+ }
+ spaceIdx := strings.LastIndex(s, " ")
+ if spaceIdx == -1 {
+ return fmt.Errorf("invalid ColumnUse format: %s", s)
+ }
+
+ for i := spaceIdx - 1; i >= 0; i-- {
+ // table.column not like
+ // table.`tricky not` like
+ if s[i] == '`' || s[i] == '.' {
+ break
+ }
+ if s[i] == ' ' {
+ spaceIdx = i
+ break
+ }
+ if i == 0 {
+ return fmt.Errorf("invalid ColumnUse format: %s", s)
+ }
+ }
+
+ colStr, opStr := s[:spaceIdx], s[spaceIdx+1:]
+
+ err := cu.Column.UnmarshalJSON([]byte(`"` + colStr + `"`))
+ if err != nil {
+ return fmt.Errorf("failed to unmarshal column: %w", err)
+ }
+
+ cu.Uses, err = sqlparser.ComparisonExprOperatorFromJson(strings.ToLower(opStr))
+ if err != nil {
+ return fmt.Errorf("failed to unmarshal operator: %w", err)
+ }
+ return nil
+}
+
+func (jp *JoinPredicate) MarshalJSON() ([]byte, error) {
+ return json.Marshal(jp.String())
+}
+
+func (jp *JoinPredicate) UnmarshalJSON(data []byte) error {
+ var s string
+ if err := json.Unmarshal(data, &s); err != nil {
+ return err
+ }
+ subStrings := strings.Split(s, " ")
+ if len(subStrings) != 3 {
+ return fmt.Errorf("invalid JoinPredicate format: %s", s)
+ }
+
+ op, err := sqlparser.ComparisonExprOperatorFromJson(subStrings[1])
+ if err != nil {
+ return fmt.Errorf("invalid comparison operator: %w", err)
+ }
+ jp.Uses = op
+
+ if err = jp.LHS.UnmarshalJSON([]byte(`"` + subStrings[0] + `"`)); err != nil {
+ return err
+ }
+ if err = jp.RHS.UnmarshalJSON([]byte(`"` + subStrings[2] + `"`)); err != nil {
+ return err
+ }
+ return nil
+}
+
+func (c Column) String() string {
+ return fmt.Sprintf("%s.%s", c.Table, c.Name)
+}
+
+func (cu ColumnUse) String() string {
+ return fmt.Sprintf("%s %s", cu.Column, cu.Uses.JSONString())
+}
+
+func (jp JoinPredicate) String() string {
+ return fmt.Sprintf("%s %s %s", jp.LHS.String(), jp.Uses.JSONString(), jp.RHS.String())
+}
+
+type columnUse struct {
+ col *sqlparser.ColName
+ use sqlparser.ComparisonExprOperator
+}
+
+type joinPredicate struct {
+ lhs *sqlparser.ColName
+ rhs *sqlparser.ColName
+ uses sqlparser.ComparisonExprOperator
}
func GetVExplainKeys(ctx *plancontext.PlanningContext, stmt sqlparser.Statement) (result VExplainKeys) {
- var filterColumns, joinColumns, groupingColumns []*sqlparser.ColName
+ var groupingColumns, selectColumns []*sqlparser.ColName
+ var filterColumns, joinColumns []columnUse
+ var jps []joinPredicate
addPredicate := func(predicate sqlparser.Expr) {
predicates := sqlparser.SplitAndExpression(nil, predicate)
for _, expr := range predicates {
- cmp, ok := expr.(*sqlparser.ComparisonExpr)
- if !ok {
- continue
- }
- lhs, lhsOK := cmp.Left.(*sqlparser.ColName)
- rhs, rhsOK := cmp.Right.(*sqlparser.ColName)
- if lhsOK && rhsOK && ctx.SemTable.RecursiveDeps(lhs) != ctx.SemTable.RecursiveDeps(rhs) {
- joinColumns = append(joinColumns, lhs, rhs)
- continue
- }
- if lhsOK {
- filterColumns = append(filterColumns, lhs)
- }
- if rhsOK {
- filterColumns = append(filterColumns, rhs)
+ switch cmp := expr.(type) {
+ case *sqlparser.ComparisonExpr:
+ lhs, lhsOK := cmp.Left.(*sqlparser.ColName)
+ rhs, rhsOK := cmp.Right.(*sqlparser.ColName)
+
+ var output = &filterColumns
+ if lhsOK && rhsOK && ctx.SemTable.RecursiveDeps(lhs) != ctx.SemTable.RecursiveDeps(rhs) {
+ // If the columns are from different tables, they are considered join columns
+ output = &joinColumns
+ jps = append(jps, joinPredicate{lhs: lhs, rhs: rhs, uses: cmp.Operator})
+ }
+
+ if lhsOK {
+ *output = append(*output, columnUse{lhs, cmp.Operator})
+ }
+
+ if switchedOp, ok := cmp.Operator.SwitchSides(); rhsOK && ok {
+ *output = append(*output, columnUse{rhs, switchedOp})
+ }
+ case *sqlparser.BetweenExpr:
+ if col, ok := cmp.Left.(*sqlparser.ColName); ok {
+ // a BETWEEN 100 AND 200 is equivalent to a >= 100 AND a <= 200
+ filterColumns = append(filterColumns,
+ columnUse{col, sqlparser.GreaterEqualOp},
+ columnUse{col, sqlparser.LessEqualOp})
+ }
}
+
}
}
@@ -65,41 +226,94 @@ func GetVExplainKeys(ctx *plancontext.PlanningContext, stmt sqlparser.Statement)
addPredicate(node.On)
case *sqlparser.GroupBy:
for _, expr := range node.Exprs {
- predicates := sqlparser.SplitAndExpression(nil, expr)
- for _, expr := range predicates {
- col, ok := expr.(*sqlparser.ColName)
- if ok {
- groupingColumns = append(groupingColumns, col)
- }
+ col, ok := expr.(*sqlparser.ColName)
+ if ok {
+ groupingColumns = append(groupingColumns, col)
}
}
+ case *sqlparser.AliasedExpr:
+ _ = sqlparser.VisitSQLNode(node, func(e sqlparser.SQLNode) (kontinue bool, err error) {
+ if col, ok := e.(*sqlparser.ColName); ok {
+ selectColumns = append(selectColumns, col)
+ }
+ return true, nil
+ })
}
return true, nil
})
return VExplainKeys{
+ SelectColumns: getUniqueColNames(ctx, selectColumns),
GroupingColumns: getUniqueColNames(ctx, groupingColumns),
- JoinColumns: getUniqueColNames(ctx, joinColumns),
- FilterColumns: getUniqueColNames(ctx, filterColumns),
+ FilterColumns: getUniqueColUsages(ctx, filterColumns),
StatementType: sqlparser.ASTToStatementType(stmt).String(),
+ JoinPredicates: getUniqueJoinPredicates(ctx, jps),
}
}
-func getUniqueColNames(ctx *plancontext.PlanningContext, columns []*sqlparser.ColName) []string {
- var colNames []string
- for _, col := range columns {
- tableInfo, err := ctx.SemTable.TableInfoForExpr(col)
- if err != nil {
+func getUniqueJoinPredicates(ctx *plancontext.PlanningContext, joinPredicates []joinPredicate) []JoinPredicate {
+ var result []JoinPredicate
+ for _, predicate := range joinPredicates {
+ lhs := createColumn(ctx, predicate.lhs)
+ rhs := createColumn(ctx, predicate.rhs)
+ if lhs == nil || rhs == nil {
continue
}
- table := tableInfo.GetVindexTable()
- if table == nil {
- continue
+
+ result = append(result, newJoinPredicate(*lhs, *rhs, predicate.uses))
+ }
+
+ sort.Slice(result, func(i, j int) bool {
+ if result[i].LHS.Name == result[j].LHS.Name {
+ return result[i].RHS.Name < result[j].RHS.Name
+ }
+ return result[i].LHS.Name < result[j].LHS.Name
+ })
+
+ return slices.Compact(result)
+}
+
+func getUniqueColNames(ctx *plancontext.PlanningContext, inCols []*sqlparser.ColName) (columns []Column) {
+ for _, col := range inCols {
+ column := createColumn(ctx, col)
+ if column != nil {
+ columns = append(columns, *column)
}
- colNames = append(colNames, fmt.Sprintf("%s.%s", table.Name.String(), col.Name.String()))
}
+ sort.Slice(columns, func(i, j int) bool {
+ return columns[i].String() < columns[j].String()
+ })
- slices.Sort(colNames)
- return slices.Compact(colNames)
+ return slices.Compact(columns)
+}
+
+func getUniqueColUsages(ctx *plancontext.PlanningContext, inCols []columnUse) (columns []ColumnUse) {
+ for _, col := range inCols {
+ column := createColumn(ctx, col.col)
+ if column != nil {
+ columns = append(columns, ColumnUse{Column: *column, Uses: col.use})
+ }
+ }
+
+ sort.Slice(columns, func(i, j int) bool {
+ return columns[i].Column.String() < columns[j].Column.String()
+ })
+ return slices.Compact(columns)
+}
+
+func createColumn(ctx *plancontext.PlanningContext, col *sqlparser.ColName) *Column {
+ tableInfo, err := ctx.SemTable.TableInfoForExpr(col)
+ if err != nil {
+ return nil
+ }
+ table := tableInfo.GetVindexTable()
+ if table == nil {
+ return nil
+ }
+ return &Column{
+ // we want the escaped versions of the names
+ Table: sqlparser.String(table.Name),
+ Name: sqlparser.String(col.Name),
+ }
}
diff --git a/go/vt/vtgate/planbuilder/operators/keys_test.go b/go/vt/vtgate/planbuilder/operators/keys_test.go
new file mode 100644
index 00000000000..3fcd69f0b5b
--- /dev/null
+++ b/go/vt/vtgate/planbuilder/operators/keys_test.go
@@ -0,0 +1,66 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package operators
+
+import (
+ "encoding/json"
+ "testing"
+
+ "github.com/google/go-cmp/cmp"
+ "github.com/stretchr/testify/require"
+
+ "vitess.io/vitess/go/vt/sqlparser"
+)
+
+func TestMarshalUnmarshal(t *testing.T) {
+ // Test that marshalling and unmarshalling a struct works as expected
+ original := VExplainKeys{
+ StatementType: "SELECT",
+ TableName: []string{"users", "orders"},
+ GroupingColumns: []Column{
+ {Table: "orders", Name: "category"},
+ {Table: "users", Name: "department"},
+ },
+ FilterColumns: []ColumnUse{
+ {Column: Column{Table: "users", Name: "age"}, Uses: sqlparser.GreaterThanOp},
+ {Column: Column{Table: "orders", Name: "total"}, Uses: sqlparser.LessThanOp},
+ {Column: Column{Table: "orders", Name: "`tricky name not`"}, Uses: sqlparser.InOp},
+ },
+ SelectColumns: []Column{
+ {Table: "users", Name: "name"},
+ {Table: "users", Name: "email"},
+ {Table: "orders", Name: "amount"},
+ },
+ JoinPredicates: []JoinPredicate{
+ {LHS: Column{Table: "users", Name: "id"}, RHS: Column{Table: "orders", Name: "user_id"}, Uses: sqlparser.EqualOp},
+ },
+ }
+
+ jsonData, err := json.Marshal(original)
+ require.NoError(t, err)
+
+ t.Logf("Marshalled JSON: %s", jsonData)
+
+ var unmarshalled VExplainKeys
+ err = json.Unmarshal(jsonData, &unmarshalled)
+ require.NoError(t, err)
+
+ if diff := cmp.Diff(original, unmarshalled); diff != "" {
+ t.Errorf("Unmarshalled struct does not match original (-want +got):\n%s", diff)
+ t.FailNow()
+ }
+}
diff --git a/go/vt/vtgate/planbuilder/operators/plan_query.go b/go/vt/vtgate/planbuilder/operators/plan_query.go
index baa9a7883e2..dc83c89c72c 100644
--- a/go/vt/vtgate/planbuilder/operators/plan_query.go
+++ b/go/vt/vtgate/planbuilder/operators/plan_query.go
@@ -43,6 +43,7 @@ import (
"vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/vterrors"
"vitess.io/vitess/go/vt/vtgate/planbuilder/plancontext"
+ "vitess.io/vitess/go/vt/vtgate/semantics"
)
type (
@@ -73,13 +74,35 @@ func PlanQuery(ctx *plancontext.PlanningContext, stmt sqlparser.Statement) (resu
checkValid(op)
op = planQuery(ctx, op)
- _, isRoute := op.(*Route)
- if !isRoute && ctx.SemTable.NotSingleRouteErr != nil {
- // If we got here, we don't have a single shard plan
- return nil, ctx.SemTable.NotSingleRouteErr
+ if err := checkSingleRouteError(ctx, op); err != nil {
+ return nil, err
}
- return op, err
+ return op, nil
+}
+
+// checkSingleRouteError checks if the query has a NotSingleRouteErr and more than one route, and returns an error if it does
+func checkSingleRouteError(ctx *plancontext.PlanningContext, op Operator) error {
+ if ctx.SemTable.NotSingleRouteErr == nil {
+ return nil
+ }
+ routes := 0
+ visitF := func(op Operator, _ semantics.TableSet, _ bool) (Operator, *ApplyResult) {
+ switch op.(type) {
+ case *Route:
+ routes++
+ }
+ return op, NoRewrite
+ }
+
+ // we'll walk the tree and count the number of routes
+ TopDown(op, TableID, visitF, stopAtRoute)
+
+ if routes <= 1 {
+ return nil
+ }
+
+ return ctx.SemTable.NotSingleRouteErr
}
func PanicHandler(err *error) {
diff --git a/go/vt/vtgate/planbuilder/plan_test.go b/go/vt/vtgate/planbuilder/plan_test.go
index 9cf92a91ddf..7135f4dff29 100644
--- a/go/vt/vtgate/planbuilder/plan_test.go
+++ b/go/vt/vtgate/planbuilder/plan_test.go
@@ -74,17 +74,16 @@ func TestPlanTestSuite(t *testing.T) {
func (s *planTestSuite) TestPlan() {
defer utils.EnsureNoLeaks(s.T())
- vschemaWrapper := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(s.T(), "vschemas/schema.json", true),
- TabletType_: topodatapb.TabletType_PRIMARY,
- SysVarEnabled: true,
- TestBuilder: TestBuilder,
- Env: vtenv.NewTestEnv(),
- }
- s.addPKs(vschemaWrapper.V, "user", []string{"user", "music"})
- s.addPKsProvided(vschemaWrapper.V, "user", []string{"user_extra"}, []string{"id", "user_id"})
- s.addPKsProvided(vschemaWrapper.V, "ordering", []string{"order"}, []string{"oid", "region_id"})
- s.addPKsProvided(vschemaWrapper.V, "ordering", []string{"order_event"}, []string{"oid", "ename"})
+
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(s.T(), "vschemas/schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
+
+ s.addPKs(vschema, "user", []string{"user", "music"})
+ s.addPKsProvided(vschema, "user", []string{"user_extra"}, []string{"id", "user_id"})
+ s.addPKsProvided(vschema, "ordering", []string{"order"}, []string{"oid", "region_id"})
+ s.addPKsProvided(vschema, "ordering", []string{"order_event"}, []string{"oid", "ename"})
// You will notice that some tests expect user.Id instead of user.id.
// This is because we now pre-create vindex columns in the symbol
@@ -92,77 +91,73 @@ func (s *planTestSuite) TestPlan() {
// the column is named as Id. This is to make sure that
// column names are case-preserved, but treated as
// case-insensitive even if they come from the vschema.
- s.testFile("aggr_cases.json", vschemaWrapper, false)
- s.testFile("dml_cases.json", vschemaWrapper, false)
- s.testFile("from_cases.json", vschemaWrapper, false)
- s.testFile("filter_cases.json", vschemaWrapper, false)
- s.testFile("postprocess_cases.json", vschemaWrapper, false)
- s.testFile("select_cases.json", vschemaWrapper, false)
- s.testFile("symtab_cases.json", vschemaWrapper, false)
- s.testFile("unsupported_cases.json", vschemaWrapper, false)
- s.testFile("unknown_schema_cases.json", vschemaWrapper, false)
- s.testFile("vindex_func_cases.json", vschemaWrapper, false)
- s.testFile("wireup_cases.json", vschemaWrapper, false)
- s.testFile("memory_sort_cases.json", vschemaWrapper, false)
- s.testFile("use_cases.json", vschemaWrapper, false)
- s.testFile("set_cases.json", vschemaWrapper, false)
- s.testFile("union_cases.json", vschemaWrapper, false)
- s.testFile("large_union_cases.json", vschemaWrapper, false)
- s.testFile("transaction_cases.json", vschemaWrapper, false)
- s.testFile("lock_cases.json", vschemaWrapper, false)
- s.testFile("large_cases.json", vschemaWrapper, false)
- s.testFile("ddl_cases_no_default_keyspace.json", vschemaWrapper, false)
- s.testFile("flush_cases_no_default_keyspace.json", vschemaWrapper, false)
- s.testFile("show_cases_no_default_keyspace.json", vschemaWrapper, false)
- s.testFile("stream_cases.json", vschemaWrapper, false)
- s.testFile("info_schema80_cases.json", vschemaWrapper, false)
- s.testFile("reference_cases.json", vschemaWrapper, false)
- s.testFile("vexplain_cases.json", vschemaWrapper, false)
- s.testFile("misc_cases.json", vschemaWrapper, false)
- s.testFile("cte_cases.json", vschemaWrapper, false)
+ s.testFile("aggr_cases.json", vw, false)
+ s.testFile("dml_cases.json", vw, false)
+ s.testFile("from_cases.json", vw, false)
+ s.testFile("filter_cases.json", vw, false)
+ s.testFile("postprocess_cases.json", vw, false)
+ s.testFile("select_cases.json", vw, false)
+ s.testFile("symtab_cases.json", vw, false)
+ s.testFile("unsupported_cases.json", vw, false)
+ s.testFile("unknown_schema_cases.json", vw, false)
+ s.testFile("vindex_func_cases.json", vw, false)
+ s.testFile("wireup_cases.json", vw, false)
+ s.testFile("memory_sort_cases.json", vw, false)
+ s.testFile("use_cases.json", vw, false)
+ s.testFile("set_cases.json", vw, false)
+ s.testFile("union_cases.json", vw, false)
+ s.testFile("large_union_cases.json", vw, false)
+ s.testFile("transaction_cases.json", vw, false)
+ s.testFile("lock_cases.json", vw, false)
+ s.testFile("large_cases.json", vw, false)
+ s.testFile("ddl_cases_no_default_keyspace.json", vw, false)
+ s.testFile("flush_cases_no_default_keyspace.json", vw, false)
+ s.testFile("show_cases_no_default_keyspace.json", vw, false)
+ s.testFile("stream_cases.json", vw, false)
+ s.testFile("info_schema80_cases.json", vw, false)
+ s.testFile("reference_cases.json", vw, false)
+ s.testFile("vexplain_cases.json", vw, false)
+ s.testFile("misc_cases.json", vw, false)
+ s.testFile("cte_cases.json", vw, false)
}
// TestForeignKeyPlanning tests the planning of foreign keys in a managed mode by Vitess.
func (s *planTestSuite) TestForeignKeyPlanning() {
+ env := vtenv.NewTestEnv()
vschema := loadSchema(s.T(), "vschemas/schema.json", true)
- s.setFks(vschema)
- vschemaWrapper := &vschemawrapper.VSchemaWrapper{
- V: vschema,
- TestBuilder: TestBuilder,
- Env: vtenv.NewTestEnv(),
- }
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
- s.testFile("foreignkey_cases.json", vschemaWrapper, false)
+ s.setFks(vschema)
+ s.testFile("foreignkey_cases.json", vw, false)
}
// TestForeignKeyChecksOn tests the planning when the session variable for foreign_key_checks is set to ON.
func (s *planTestSuite) TestForeignKeyChecksOn() {
+ env := vtenv.NewTestEnv()
vschema := loadSchema(s.T(), "vschemas/schema.json", true)
- s.setFks(vschema)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
+
fkChecksState := true
- vschemaWrapper := &vschemawrapper.VSchemaWrapper{
- V: vschema,
- TestBuilder: TestBuilder,
- ForeignKeyChecksState: &fkChecksState,
- Env: vtenv.NewTestEnv(),
- }
+ vw.ForeignKeyChecksState = &fkChecksState
- s.testFile("foreignkey_checks_on_cases.json", vschemaWrapper, false)
+ s.setFks(vschema)
+ s.testFile("foreignkey_checks_on_cases.json", vw, false)
}
// TestForeignKeyChecksOff tests the planning when the session variable for foreign_key_checks is set to OFF.
func (s *planTestSuite) TestForeignKeyChecksOff() {
+ env := vtenv.NewTestEnv()
vschema := loadSchema(s.T(), "vschemas/schema.json", true)
- s.setFks(vschema)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
+
fkChecksState := false
- vschemaWrapper := &vschemawrapper.VSchemaWrapper{
- V: vschema,
- TestBuilder: TestBuilder,
- ForeignKeyChecksState: &fkChecksState,
- Env: vtenv.NewTestEnv(),
- }
+ vw.ForeignKeyChecksState = &fkChecksState
- s.testFile("foreignkey_checks_off_cases.json", vschemaWrapper, false)
+ s.setFks(vschema)
+ s.testFile("foreignkey_checks_off_cases.json", vw, false)
}
func (s *planTestSuite) setFks(vschema *vindexes.VSchema) {
@@ -266,120 +261,127 @@ func (s *planTestSuite) TestSystemTables57() {
MySQLServerVersion: "5.7.9",
})
require.NoError(s.T(), err)
- vschemaWrapper := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(s.T(), "vschemas/schema.json", true),
- Env: env,
- }
- s.testFile("info_schema57_cases.json", vschemaWrapper, false)
+ vschema := loadSchema(s.T(), "vschemas/schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
+
+ s.testFile("info_schema57_cases.json", vw, false)
}
func (s *planTestSuite) TestSysVarSetDisabled() {
- vschemaWrapper := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(s.T(), "vschemas/schema.json", true),
- SysVarEnabled: false,
- Env: vtenv.NewTestEnv(),
- }
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(s.T(), "vschemas/schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
+
+ vw.SysVarEnabled = false
- s.testFile("set_sysvar_disabled_cases.json", vschemaWrapper, false)
+ s.testFile("set_sysvar_disabled_cases.json", vw, false)
}
func (s *planTestSuite) TestViews() {
- vschemaWrapper := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(s.T(), "vschemas/schema.json", true),
- EnableViews: true,
- Env: vtenv.NewTestEnv(),
- }
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(s.T(), "vschemas/schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
+
+ vw.EnableViews = true
- s.testFile("view_cases.json", vschemaWrapper, false)
+ s.testFile("view_cases.json", vw, false)
}
func (s *planTestSuite) TestOne() {
reset := operators.EnableDebugPrinting()
defer reset()
- lv := loadSchema(s.T(), "vschemas/schema.json", true)
- s.setFks(lv)
- s.addPKs(lv, "user", []string{"user", "music"})
- s.addPKs(lv, "main", []string{"unsharded"})
- s.addPKsProvided(lv, "user", []string{"user_extra"}, []string{"id", "user_id"})
- s.addPKsProvided(lv, "ordering", []string{"order"}, []string{"oid", "region_id"})
- s.addPKsProvided(lv, "ordering", []string{"order_event"}, []string{"oid", "ename"})
- vschema := &vschemawrapper.VSchemaWrapper{
- V: lv,
- TestBuilder: TestBuilder,
- Env: vtenv.NewTestEnv(),
- }
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(s.T(), "vschemas/schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
- s.testFile("onecase.json", vschema, false)
+ s.setFks(vschema)
+ s.addPKs(vschema, "user", []string{"user", "music"})
+ s.addPKs(vschema, "main", []string{"unsharded"})
+ s.addPKsProvided(vschema, "user", []string{"user_extra"}, []string{"id", "user_id"})
+ s.addPKsProvided(vschema, "ordering", []string{"order"}, []string{"oid", "region_id"})
+ s.addPKsProvided(vschema, "ordering", []string{"order_event"}, []string{"oid", "ename"})
+
+ s.testFile("onecase.json", vw, false)
}
func (s *planTestSuite) TestOneTPCC() {
reset := operators.EnableDebugPrinting()
defer reset()
- vschema := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(s.T(), "vschemas/tpcc_schema.json", true),
- Env: vtenv.NewTestEnv(),
- }
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(s.T(), "vschemas/tpcc_schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
- s.testFile("onecase.json", vschema, false)
+ s.testFile("onecase.json", vw, false)
}
func (s *planTestSuite) TestOneWithMainAsDefault() {
reset := operators.EnableDebugPrinting()
defer reset()
- vschema := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(s.T(), "vschemas/schema.json", true),
- Keyspace: &vindexes.Keyspace{
- Name: "main",
- Sharded: false,
- },
- Env: vtenv.NewTestEnv(),
- }
- s.testFile("onecase.json", vschema, false)
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(s.T(), "vschemas/schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
+
+ vw.Vcursor.SetTarget("main")
+ vw.Keyspace = &vindexes.Keyspace{Name: "main"}
+
+ s.testFile("onecase.json", vw, false)
}
func (s *planTestSuite) TestOneWithSecondUserAsDefault() {
reset := operators.EnableDebugPrinting()
defer reset()
- vschema := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(s.T(), "vschemas/schema.json", true),
- Keyspace: &vindexes.Keyspace{
- Name: "second_user",
- Sharded: true,
- },
- Env: vtenv.NewTestEnv(),
+
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(s.T(), "vschemas/schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
+
+ vw.Vcursor.SetTarget("second_user")
+ vw.Keyspace = &vindexes.Keyspace{
+ Name: "second_user",
+ Sharded: true,
}
- s.testFile("onecase.json", vschema, false)
+ s.testFile("onecase.json", vw, false)
}
func (s *planTestSuite) TestOneWithUserAsDefault() {
reset := operators.EnableDebugPrinting()
defer reset()
- vschema := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(s.T(), "vschemas/schema.json", true),
- Keyspace: &vindexes.Keyspace{
- Name: "user",
- Sharded: true,
- },
- Env: vtenv.NewTestEnv(),
+
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(s.T(), "vschemas/schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
+
+ vw.Vcursor.SetTarget("user")
+ vw.Keyspace = &vindexes.Keyspace{
+ Name: "user",
+ Sharded: true,
}
- s.testFile("onecase.json", vschema, false)
+ s.testFile("onecase.json", vw, false)
}
func (s *planTestSuite) TestOneWithTPCHVSchema() {
reset := operators.EnableDebugPrinting()
defer reset()
- vschema := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(s.T(), "vschemas/tpch_schema.json", true),
- SysVarEnabled: true,
- Env: vtenv.NewTestEnv(),
- }
- s.testFile("onecase.json", vschema, false)
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(s.T(), "vschemas/schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
+
+ s.testFile("onecase.json", vw, false)
}
func (s *planTestSuite) TestOneWith57Version() {
@@ -390,52 +392,47 @@ func (s *planTestSuite) TestOneWith57Version() {
MySQLServerVersion: "5.7.9",
})
require.NoError(s.T(), err)
- vschema := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(s.T(), "vschemas/schema.json", true),
- Env: env,
- }
+ vschema := loadSchema(s.T(), "vschemas/schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
- s.testFile("onecase.json", vschema, false)
+ s.testFile("onecase.json", vw, false)
}
func (s *planTestSuite) TestRubyOnRailsQueries() {
- vschemaWrapper := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(s.T(), "vschemas/rails_schema.json", true),
- SysVarEnabled: true,
- Env: vtenv.NewTestEnv(),
- }
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(s.T(), "vschemas/rails_schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
- s.testFile("rails_cases.json", vschemaWrapper, false)
+ s.testFile("rails_cases.json", vw, false)
}
func (s *planTestSuite) TestOLTP() {
- vschemaWrapper := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(s.T(), "vschemas/oltp_schema.json", true),
- SysVarEnabled: true,
- Env: vtenv.NewTestEnv(),
- }
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(s.T(), "vschemas/oltp_schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
- s.testFile("oltp_cases.json", vschemaWrapper, false)
+ s.testFile("oltp_cases.json", vw, false)
}
func (s *planTestSuite) TestTPCC() {
- vschemaWrapper := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(s.T(), "vschemas/tpcc_schema.json", true),
- SysVarEnabled: true,
- Env: vtenv.NewTestEnv(),
- }
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(s.T(), "vschemas/tpcc_schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
- s.testFile("tpcc_cases.json", vschemaWrapper, false)
+ s.testFile("tpcc_cases.json", vw, false)
}
func (s *planTestSuite) TestTPCH() {
- vschemaWrapper := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(s.T(), "vschemas/tpch_schema.json", true),
- SysVarEnabled: true,
- Env: vtenv.NewTestEnv(),
- }
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(s.T(), "vschemas/tpch_schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
- s.testFile("tpch_cases.json", vschemaWrapper, false)
+ s.testFile("tpch_cases.json", vw, false)
}
func BenchmarkOLTP(b *testing.B) {
@@ -451,15 +448,14 @@ func BenchmarkTPCH(b *testing.B) {
}
func benchmarkWorkload(b *testing.B, name string) {
- vschemaWrapper := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(b, "vschemas/"+name+"_schema.json", true),
- SysVarEnabled: true,
- Env: vtenv.NewTestEnv(),
- }
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(b, "vschemas/"+name+"_schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(b, err)
testCases := readJSONTests(name + "_cases.json")
b.ResetTimer()
- benchmarkPlanner(b, Gen4, testCases, vschemaWrapper)
+ benchmarkPlanner(b, Gen4, testCases, vw)
}
func (s *planTestSuite) TestBypassPlanningShardTargetFromFile() {
@@ -478,35 +474,33 @@ func (s *planTestSuite) TestBypassPlanningShardTargetFromFile() {
}
func (s *planTestSuite) TestBypassPlanningKeyrangeTargetFromFile() {
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(s.T(), "vschemas/schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
+
keyRange, _ := key.ParseShardingSpec("-")
+ vw.Dest = key.DestinationExactKeyRange{KeyRange: keyRange[0]}
- vschema := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(s.T(), "vschemas/schema.json", true),
- Keyspace: &vindexes.Keyspace{
- Name: "main",
- Sharded: false,
- },
- TabletType_: topodatapb.TabletType_PRIMARY,
- Dest: key.DestinationExactKeyRange{KeyRange: keyRange[0]},
- Env: vtenv.NewTestEnv(),
- }
+ vw.Vcursor.SetTarget("main")
+ vw.Keyspace = &vindexes.Keyspace{Name: "main"}
- s.testFile("bypass_keyrange_cases.json", vschema, false)
+ s.testFile("bypass_keyrange_cases.json", vw, false)
}
func (s *planTestSuite) TestWithDefaultKeyspaceFromFile() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
+
// We are testing this separately so we can set a default keyspace
- vschema := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(s.T(), "vschemas/schema.json", true),
- Keyspace: &vindexes.Keyspace{
- Name: "main",
- Sharded: false,
- },
- TabletType_: topodatapb.TabletType_PRIMARY,
- Env: vtenv.NewTestEnv(),
- }
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(s.T(), "vschemas/schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
+
+ vw.Vcursor.SetTarget("main")
+ vw.Keyspace = &vindexes.Keyspace{Name: "main"}
+
ts := memorytopo.NewServer(ctx, "cell1")
ts.CreateKeyspace(ctx, "main", &topodatapb.Keyspace{})
ts.CreateKeyspace(ctx, "user", &topodatapb.Keyspace{})
@@ -521,96 +515,92 @@ func (s *planTestSuite) TestWithDefaultKeyspaceFromFile() {
})
require.True(s.T(), created)
- s.testFile("alterVschema_cases.json", vschema, false)
- s.testFile("ddl_cases.json", vschema, false)
- s.testFile("migration_cases.json", vschema, false)
- s.testFile("flush_cases.json", vschema, false)
- s.testFile("show_cases.json", vschema, false)
- s.testFile("call_cases.json", vschema, false)
+ s.testFile("alterVschema_cases.json", vw, false)
+ s.testFile("ddl_cases.json", vw, false)
+ s.testFile("migration_cases.json", vw, false)
+ s.testFile("flush_cases.json", vw, false)
+ s.testFile("show_cases.json", vw, false)
+ s.testFile("call_cases.json", vw, false)
}
func (s *planTestSuite) TestWithDefaultKeyspaceFromFileSharded() {
// We are testing this separately so we can set a default keyspace
- vschema := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(s.T(), "vschemas/schema.json", true),
- Keyspace: &vindexes.Keyspace{
- Name: "second_user",
- Sharded: true,
- },
- TabletType_: topodatapb.TabletType_PRIMARY,
- Env: vtenv.NewTestEnv(),
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(s.T(), "vschemas/schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
+
+ vw.Vcursor.SetTarget("second_user")
+ vw.Keyspace = &vindexes.Keyspace{
+ Name: "second_user",
+ Sharded: true,
}
- s.testFile("select_cases_with_default.json", vschema, false)
+ s.testFile("select_cases_with_default.json", vw, false)
}
func (s *planTestSuite) TestWithUserDefaultKeyspaceFromFileSharded() {
// We are testing this separately so we can set a default keyspace
- vschema := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(s.T(), "vschemas/schema.json", true),
- Keyspace: &vindexes.Keyspace{
- Name: "user",
- Sharded: true,
- },
- TabletType_: topodatapb.TabletType_PRIMARY,
- Env: vtenv.NewTestEnv(),
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(s.T(), "vschemas/schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
+
+ vw.Vcursor.SetTarget("user")
+ vw.Keyspace = &vindexes.Keyspace{
+ Name: "user",
+ Sharded: true,
}
- s.testFile("select_cases_with_user_as_default.json", vschema, false)
+ s.testFile("select_cases_with_user_as_default.json", vw, false)
+ s.testFile("dml_cases_with_user_as_default.json", vw, false)
}
func (s *planTestSuite) TestWithSystemSchemaAsDefaultKeyspace() {
// We are testing this separately so we can set a default keyspace
- vschema := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(s.T(), "vschemas/schema.json", true),
- Keyspace: &vindexes.Keyspace{Name: "information_schema"},
- TabletType_: topodatapb.TabletType_PRIMARY,
- Env: vtenv.NewTestEnv(),
- }
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(s.T(), "vschemas/schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
- s.testFile("sysschema_default.json", vschema, false)
+ vw.Keyspace = &vindexes.Keyspace{Name: "information_schema"}
+
+ s.testFile("sysschema_default.json", vw, false)
}
func (s *planTestSuite) TestOtherPlanningFromFile() {
// We are testing this separately so we can set a default keyspace
- vschema := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(s.T(), "vschemas/schema.json", true),
- Keyspace: &vindexes.Keyspace{
- Name: "main",
- Sharded: false,
- },
- TabletType_: topodatapb.TabletType_PRIMARY,
- Env: vtenv.NewTestEnv(),
- }
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(s.T(), "vschemas/schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
- s.testFile("other_read_cases.json", vschema, false)
- s.testFile("other_admin_cases.json", vschema, false)
+ vw.Vcursor.SetTarget("main")
+ vw.Keyspace = &vindexes.Keyspace{Name: "main"}
+
+ s.testFile("other_read_cases.json", vw, false)
+ s.testFile("other_admin_cases.json", vw, false)
}
func (s *planTestSuite) TestMirrorPlanning() {
- vschema := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(s.T(), "vschemas/mirror_schema.json", true),
- TabletType_: topodatapb.TabletType_PRIMARY,
- SysVarEnabled: true,
- TestBuilder: TestBuilder,
- Env: vtenv.NewTestEnv(),
- }
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(s.T(), "vschemas/mirror_schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
- s.testFile("mirror_cases.json", vschema, false)
+ s.testFile("mirror_cases.json", vw, false)
}
func (s *planTestSuite) TestOneMirror() {
reset := operators.EnableDebugPrinting()
defer reset()
- vschema := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(s.T(), "vschemas/mirror_schema.json", true),
- TabletType_: topodatapb.TabletType_PRIMARY,
- SysVarEnabled: true,
- TestBuilder: TestBuilder,
- Env: vtenv.NewTestEnv(),
- }
- s.testFile("onecase.json", vschema, false)
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(s.T(), "vschemas/schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(s.T(), err)
+
+ s.testFile("onecase.json", vw, false)
}
func loadSchema(t testing.TB, filename string, setCollation bool) *vindexes.VSchema {
@@ -659,21 +649,12 @@ func createFkDefinition(childCols []string, parentTableName string, parentCols [
}
}
-type (
- planTest struct {
- Comment string `json:"comment,omitempty"`
- Query string `json:"query,omitempty"`
- Plan json.RawMessage `json:"plan,omitempty"`
- Skip bool `json:"skip,omitempty"`
- }
-)
-
func (s *planTestSuite) testFile(filename string, vschema *vschemawrapper.VSchemaWrapper, render bool) {
opts := jsondiff.DefaultConsoleOptions()
s.T().Run(filename, func(t *testing.T) {
failed := false
- var expected []planTest
+ var expected []PlanTest
for _, tcase := range readJSONTests(filename) {
testName := tcase.Comment
if testName == "" {
@@ -682,9 +663,10 @@ func (s *planTestSuite) testFile(filename string, vschema *vschemawrapper.VSchem
if tcase.Query == "" {
continue
}
- current := planTest{
- Comment: testName,
+ current := PlanTest{
+ Comment: tcase.Comment,
Query: tcase.Query,
+ SkipE2E: tcase.SkipE2E,
}
vschema.Version = Gen4
out := getPlanOutput(tcase, vschema, render)
@@ -730,8 +712,8 @@ func (s *planTestSuite) testFile(filename string, vschema *vschemawrapper.VSchem
})
}
-func readJSONTests(filename string) []planTest {
- var output []planTest
+func readJSONTests(filename string) []PlanTest {
+ var output []PlanTest
file, err := os.Open(locateFile(filename))
if err != nil {
panic(err)
@@ -745,7 +727,7 @@ func readJSONTests(filename string) []planTest {
return output
}
-func getPlanOutput(tcase planTest, vschema *vschemawrapper.VSchemaWrapper, render bool) (out string) {
+func getPlanOutput(tcase PlanTest, vschema *vschemawrapper.VSchemaWrapper, render bool) (out string) {
defer func() {
if r := recover(); r != nil {
out = fmt.Sprintf("panicked: %v\n%s", r, string(debug.Stack()))
@@ -783,30 +765,29 @@ func locateFile(name string) string {
var benchMarkFiles = []string{"from_cases.json", "filter_cases.json", "large_cases.json", "aggr_cases.json", "select_cases.json", "union_cases.json"}
func BenchmarkPlanner(b *testing.B) {
- vschema := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(b, "vschemas/schema.json", true),
- SysVarEnabled: true,
- Env: vtenv.NewTestEnv(),
- }
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(b, "vschemas/schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(b, err)
+
for _, filename := range benchMarkFiles {
testCases := readJSONTests(filename)
b.Run(filename+"-gen4", func(b *testing.B) {
- benchmarkPlanner(b, Gen4, testCases, vschema)
+ benchmarkPlanner(b, Gen4, testCases, vw)
})
}
}
func BenchmarkSemAnalysis(b *testing.B) {
- vschema := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(b, "vschemas/schema.json", true),
- SysVarEnabled: true,
- Env: vtenv.NewTestEnv(),
- }
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(b, "vschemas/schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(b, err)
for i := 0; i < b.N; i++ {
for _, filename := range benchMarkFiles {
for _, tc := range readJSONTests(filename) {
- exerciseAnalyzer(tc.Query, vschema.CurrentDb(), vschema)
+ exerciseAnalyzer(tc.Query, vw.CurrentDb(), vw)
}
}
}
@@ -831,12 +812,10 @@ func exerciseAnalyzer(query, database string, s semantics.SchemaInformation) {
}
func BenchmarkSelectVsDML(b *testing.B) {
- vschema := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(b, "vschemas/schema.json", true),
- SysVarEnabled: true,
- Version: Gen4,
- Env: vtenv.NewTestEnv(),
- }
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(b, "vschemas/schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(b, err)
dmlCases := readJSONTests("dml_cases.json")
selectCases := readJSONTests("select_cases.json")
@@ -850,44 +829,37 @@ func BenchmarkSelectVsDML(b *testing.B) {
})
b.Run("DML (random sample, N=32)", func(b *testing.B) {
- benchmarkPlanner(b, Gen4, dmlCases[:32], vschema)
+ benchmarkPlanner(b, Gen4, dmlCases[:32], vw)
})
b.Run("Select (random sample, N=32)", func(b *testing.B) {
- benchmarkPlanner(b, Gen4, selectCases[:32], vschema)
+ benchmarkPlanner(b, Gen4, selectCases[:32], vw)
})
}
func BenchmarkBaselineVsMirrored(b *testing.B) {
+ env := vtenv.NewTestEnv()
baseline := loadSchema(b, "vschemas/mirror_schema.json", true)
baseline.MirrorRules = map[string]*vindexes.MirrorRule{}
- baselineVschema := &vschemawrapper.VSchemaWrapper{
- V: baseline,
- SysVarEnabled: true,
- Version: Gen4,
- Env: vtenv.NewTestEnv(),
- }
+ bvw, err := vschemawrapper.NewVschemaWrapper(env, baseline, TestBuilder)
+ require.NoError(b, err)
mirroredSchema := loadSchema(b, "vschemas/mirror_schema.json", true)
- mirroredVschema := &vschemawrapper.VSchemaWrapper{
- V: mirroredSchema,
- SysVarEnabled: true,
- Version: Gen4,
- Env: vtenv.NewTestEnv(),
- }
+ mvw, err := vschemawrapper.NewVschemaWrapper(env, mirroredSchema, TestBuilder)
+ require.NoError(b, err)
cases := readJSONTests("mirror_cases.json")
b.Run("Baseline", func(b *testing.B) {
- benchmarkPlanner(b, Gen4, cases, baselineVschema)
+ benchmarkPlanner(b, Gen4, cases, bvw)
})
b.Run("Mirrored", func(b *testing.B) {
- benchmarkPlanner(b, Gen4, cases, mirroredVschema)
+ benchmarkPlanner(b, Gen4, cases, mvw)
})
}
-func benchmarkPlanner(b *testing.B, version plancontext.PlannerVersion, testCases []planTest, vschema *vschemawrapper.VSchemaWrapper) {
+func benchmarkPlanner(b *testing.B, version plancontext.PlannerVersion, testCases []PlanTest, vschema *vschemawrapper.VSchemaWrapper) {
b.ReportAllocs()
for n := 0; n < b.N; n++ {
for _, tcase := range testCases {
diff --git a/go/vt/vtgate/planbuilder/plancontext/planning_context.go b/go/vt/vtgate/planbuilder/plancontext/planning_context.go
index 607ca83aa31..016f5c877cf 100644
--- a/go/vt/vtgate/planbuilder/plancontext/planning_context.go
+++ b/go/vt/vtgate/planbuilder/plancontext/planning_context.go
@@ -91,7 +91,7 @@ func CreatePlanningContext(stmt sqlparser.Statement,
version querypb.ExecuteOptions_PlannerVersion,
) (*PlanningContext, error) {
ksName := ""
- if ks, _ := vschema.DefaultKeyspace(); ks != nil {
+ if ks, _ := vschema.SelectedKeyspace(); ks != nil {
ksName = ks.Name
}
diff --git a/go/vt/vtgate/planbuilder/plancontext/planning_context_test.go b/go/vt/vtgate/planbuilder/plancontext/planning_context_test.go
index d7315f376b6..e5e96b0a4be 100644
--- a/go/vt/vtgate/planbuilder/plancontext/planning_context_test.go
+++ b/go/vt/vtgate/planbuilder/plancontext/planning_context_test.go
@@ -201,7 +201,7 @@ func (v *vschema) FindTableOrVindex(tablename sqlparser.TableName) (*vindexes.Ta
panic("implement me")
}
-func (v *vschema) DefaultKeyspace() (*vindexes.Keyspace, error) {
+func (v *vschema) SelectedKeyspace() (*vindexes.Keyspace, error) {
// TODO implement me
panic("implement me")
}
diff --git a/go/vt/vtgate/planbuilder/plancontext/vschema.go b/go/vt/vtgate/planbuilder/plancontext/vschema.go
index 6e92ad0d83b..b4560424718 100644
--- a/go/vt/vtgate/planbuilder/plancontext/vschema.go
+++ b/go/vt/vtgate/planbuilder/plancontext/vschema.go
@@ -27,7 +27,9 @@ type VSchema interface {
FindTable(tablename sqlparser.TableName) (*vindexes.Table, string, topodatapb.TabletType, key.Destination, error)
FindView(name sqlparser.TableName) sqlparser.SelectStatement
FindTableOrVindex(tablename sqlparser.TableName) (*vindexes.Table, vindexes.Vindex, string, topodatapb.TabletType, key.Destination, error)
- DefaultKeyspace() (*vindexes.Keyspace, error)
+
+ // SelectedKeyspace returns the current keyspace if set, otherwise returns an error
+ SelectedKeyspace() (*vindexes.Keyspace, error)
TargetString() string
Destination() key.Destination
TabletType() topodatapb.TabletType
diff --git a/go/vt/vtgate/planbuilder/select.go b/go/vt/vtgate/planbuilder/select.go
index 9cc1c8efe06..409343f2760 100644
--- a/go/vt/vtgate/planbuilder/select.go
+++ b/go/vt/vtgate/planbuilder/select.go
@@ -46,7 +46,7 @@ func gen4SelectStmtPlanner(
}
if p != nil {
used := "dual"
- keyspace, ksErr := vschema.DefaultKeyspace()
+ keyspace, ksErr := vschema.SelectedKeyspace()
if ksErr == nil {
// we are just getting the ks to log the correct table use.
// no need to fail this if we can't find the default keyspace
@@ -101,7 +101,7 @@ func gen4SelectStmtPlanner(
func gen4planSQLCalcFoundRows(vschema plancontext.VSchema, sel *sqlparser.Select, query string, reservedVars *sqlparser.ReservedVars) (*planResult, error) {
ksName := ""
- if ks, _ := vschema.DefaultKeyspace(); ks != nil {
+ if ks, _ := vschema.SelectedKeyspace(); ks != nil {
ksName = ks.Name
}
semTable, err := semantics.Analyze(sel, ksName, vschema)
diff --git a/go/vt/vtgate/planbuilder/show.go b/go/vt/vtgate/planbuilder/show.go
index 82035adaa87..40cf7b2411f 100644
--- a/go/vt/vtgate/planbuilder/show.go
+++ b/go/vt/vtgate/planbuilder/show.go
@@ -676,7 +676,7 @@ func buildVschemaKeyspacesPlan(vschema plancontext.VSchema) (engine.Primitive, e
func buildVschemaTablesPlan(vschema plancontext.VSchema) (engine.Primitive, error) {
vs := vschema.GetVSchema()
- ks, err := vschema.DefaultKeyspace()
+ ks, err := vschema.SelectedKeyspace()
if err != nil {
return nil, err
}
diff --git a/go/vt/vtgate/planbuilder/show_test.go b/go/vt/vtgate/planbuilder/show_test.go
index bfdb9a623a0..c3651aaa1cd 100644
--- a/go/vt/vtgate/planbuilder/show_test.go
+++ b/go/vt/vtgate/planbuilder/show_test.go
@@ -32,10 +32,13 @@ import (
)
func TestBuildDBPlan(t *testing.T) {
- vschema := &vschemawrapper.VSchemaWrapper{
- Keyspace: &vindexes.Keyspace{Name: "main"},
- Env: vtenv.NewTestEnv(),
- }
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(t, "vschemas/schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(t, err)
+
+ vw.Vcursor.SetTarget("main")
+ vw.Keyspace = &vindexes.Keyspace{Name: "main"}
testCases := []struct {
query string
@@ -54,7 +57,7 @@ func TestBuildDBPlan(t *testing.T) {
require.NoError(t, err)
show := parserOut.(*sqlparser.Show)
- primitive, err := buildDBPlan(show.Internal.(*sqlparser.ShowBasic), vschema)
+ primitive, err := buildDBPlan(show.Internal.(*sqlparser.ShowBasic), vw)
require.NoError(t, err)
result, err := primitive.TryExecute(context.Background(), nil, nil, false)
diff --git a/go/vt/vtgate/planbuilder/simplifier_test.go b/go/vt/vtgate/planbuilder/simplifier_test.go
index 305c18896e3..dce21b3e175 100644
--- a/go/vt/vtgate/planbuilder/simplifier_test.go
+++ b/go/vt/vtgate/planbuilder/simplifier_test.go
@@ -38,21 +38,21 @@ func TestSimplifyBuggyQuery(t *testing.T) {
query := "select distinct count(distinct a), count(distinct 4) from user left join unsharded on 0 limit 5"
// select 0 from unsharded union select 0 from `user` union select 0 from unsharded
// select 0 from unsharded union (select 0 from `user` union select 0 from unsharded)
- vschema := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(t, "vschemas/schema.json", true),
- Version: Gen4,
- Env: vtenv.NewTestEnv(),
- }
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(t, "vschemas/schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(t, err)
+
stmt, reserved, err := sqlparser.NewTestParser().Parse2(query)
require.NoError(t, err)
- rewritten, _ := sqlparser.RewriteAST(sqlparser.Clone(stmt), vschema.CurrentDb(), sqlparser.SQLSelectLimitUnset, "", nil, nil, nil)
+ rewritten, _ := sqlparser.RewriteAST(sqlparser.Clone(stmt), vw.CurrentDb(), sqlparser.SQLSelectLimitUnset, "", nil, nil, nil)
reservedVars := sqlparser.NewReservedVars("vtg", reserved)
simplified := simplifier.SimplifyStatement(
stmt.(sqlparser.SelectStatement),
- vschema.CurrentDb(),
- vschema,
- keepSameError(query, reservedVars, vschema, rewritten.BindVarNeeds),
+ vw.CurrentDb(),
+ vw,
+ keepSameError(query, reservedVars, vw, rewritten.BindVarNeeds),
)
fmt.Println(sqlparser.String(simplified))
@@ -61,21 +61,22 @@ func TestSimplifyBuggyQuery(t *testing.T) {
func TestSimplifyPanic(t *testing.T) {
t.Skip("not needed to run")
query := "(select id from unsharded union select id from unsharded_auto) union (select id from unsharded_auto union select name from unsharded)"
- vschema := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(t, "vschemas/schema.json", true),
- Version: Gen4,
- Env: vtenv.NewTestEnv(),
- }
+
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(t, "vschemas/schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(t, err)
+
stmt, reserved, err := sqlparser.NewTestParser().Parse2(query)
require.NoError(t, err)
- rewritten, _ := sqlparser.RewriteAST(sqlparser.Clone(stmt), vschema.CurrentDb(), sqlparser.SQLSelectLimitUnset, "", nil, nil, nil)
+ rewritten, _ := sqlparser.RewriteAST(sqlparser.Clone(stmt), vw.CurrentDb(), sqlparser.SQLSelectLimitUnset, "", nil, nil, nil)
reservedVars := sqlparser.NewReservedVars("vtg", reserved)
simplified := simplifier.SimplifyStatement(
stmt.(sqlparser.SelectStatement),
- vschema.CurrentDb(),
- vschema,
- keepPanicking(query, reservedVars, vschema, rewritten.BindVarNeeds),
+ vw.CurrentDb(),
+ vw,
+ keepPanicking(query, reservedVars, vw, rewritten.BindVarNeeds),
)
fmt.Println(sqlparser.String(simplified))
@@ -83,11 +84,11 @@ func TestSimplifyPanic(t *testing.T) {
func TestUnsupportedFile(t *testing.T) {
t.Skip("run manually to see if any queries can be simplified")
- vschema := &vschemawrapper.VSchemaWrapper{
- V: loadSchema(t, "vschemas/schema.json", true),
- Version: Gen4,
- Env: vtenv.NewTestEnv(),
- }
+ env := vtenv.NewTestEnv()
+ vschema := loadSchema(t, "vschemas/schema.json", true)
+ vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder)
+ require.NoError(t, err)
+
fmt.Println(vschema)
for _, tcase := range readJSONTests("unsupported_cases.txt") {
t.Run(tcase.Query, func(t *testing.T) {
@@ -99,11 +100,10 @@ func TestUnsupportedFile(t *testing.T) {
t.Skip()
return
}
- rewritten, err := sqlparser.RewriteAST(stmt, vschema.CurrentDb(), sqlparser.SQLSelectLimitUnset, "", nil, nil, nil)
+ rewritten, err := sqlparser.RewriteAST(stmt, vw.CurrentDb(), sqlparser.SQLSelectLimitUnset, "", nil, nil, nil)
if err != nil {
t.Skip()
}
- vschema.CurrentDb()
reservedVars := sqlparser.NewReservedVars("vtg", reserved)
ast := rewritten.AST
@@ -111,9 +111,9 @@ func TestUnsupportedFile(t *testing.T) {
stmt, _, _ = sqlparser.NewTestParser().Parse2(tcase.Query)
simplified := simplifier.SimplifyStatement(
stmt.(sqlparser.SelectStatement),
- vschema.CurrentDb(),
- vschema,
- keepSameError(tcase.Query, reservedVars, vschema, rewritten.BindVarNeeds),
+ vw.CurrentDb(),
+ vw,
+ keepSameError(tcase.Query, reservedVars, vw, rewritten.BindVarNeeds),
)
if simplified == nil {
@@ -135,12 +135,12 @@ func keepSameError(query string, reservedVars *sqlparser.ReservedVars, vschema *
}
rewritten, _ := sqlparser.RewriteAST(stmt, vschema.CurrentDb(), sqlparser.SQLSelectLimitUnset, "", nil, nil, nil)
ast := rewritten.AST
- _, expected := BuildFromStmt(context.Background(), query, ast, reservedVars, vschema, rewritten.BindVarNeeds, true, true)
+ _, expected := BuildFromStmt(context.Background(), query, ast, reservedVars, vschema, rewritten.BindVarNeeds, staticConfig{})
if expected == nil {
panic("query does not fail to plan")
}
return func(statement sqlparser.SelectStatement) bool {
- _, myErr := BuildFromStmt(context.Background(), query, statement, reservedVars, vschema, needs, true, true)
+ _, myErr := BuildFromStmt(context.Background(), query, statement, reservedVars, vschema, needs, staticConfig{})
if myErr == nil {
return false
}
@@ -162,7 +162,7 @@ func keepPanicking(query string, reservedVars *sqlparser.ReservedVars, vschema *
}
}()
log.Errorf("trying %s", sqlparser.String(statement))
- _, _ = BuildFromStmt(context.Background(), query, statement, reservedVars, vschema, needs, true, true)
+ _, _ = BuildFromStmt(context.Background(), query, statement, reservedVars, vschema, needs, staticConfig{})
log.Errorf("did not panic")
return false
diff --git a/go/vt/vtgate/planbuilder/test_helper.go b/go/vt/vtgate/planbuilder/test_helper.go
new file mode 100644
index 00000000000..25d6b7306d1
--- /dev/null
+++ b/go/vt/vtgate/planbuilder/test_helper.go
@@ -0,0 +1,27 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package planbuilder
+
+import "encoding/json"
+
+type PlanTest struct {
+ Comment string `json:"comment,omitempty"`
+ Query string `json:"query,omitempty"`
+ Plan json.RawMessage `json:"plan,omitempty"`
+ Skip bool `json:"skip,omitempty"`
+ SkipE2E bool `json:"skip_e2e,omitempty"`
+}
diff --git a/go/vt/vtgate/planbuilder/testdata/aggr_cases.json b/go/vt/vtgate/planbuilder/testdata/aggr_cases.json
index 343159bccaa..49a03a8f05a 100644
--- a/go/vt/vtgate/planbuilder/testdata/aggr_cases.json
+++ b/go/vt/vtgate/planbuilder/testdata/aggr_cases.json
@@ -615,6 +615,35 @@
]
}
},
+ {
+ "comment": "using HAVING inside a derived table still produces viable plans",
+ "query": "select id from (select id from user group by id having (count(user.id) = 2) limit 2 offset 0) subquery_for_limit",
+ "plan": {
+ "QueryType": "SELECT",
+ "Original": "select id from (select id from user group by id having (count(user.id) = 2) limit 2 offset 0) subquery_for_limit",
+ "Instructions": {
+ "OperatorType": "Limit",
+ "Count": "2",
+ "Offset": "0",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "Scatter",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select id from (select id, count(`user`.id) = 2 from `user` where 1 != 1 group by id) as subquery_for_limit where 1 != 1",
+ "Query": "select id from (select id, count(`user`.id) = 2 from `user` group by id having count(`user`.id) = 2) as subquery_for_limit limit 2",
+ "Table": "`user`"
+ }
+ ]
+ },
+ "TablesUsed": [
+ "user.user"
+ ]
+ }
+ },
{
"comment": "sum with distinct no unique vindex",
"query": "select col1, sum(distinct col2) from user group by col1",
@@ -911,19 +940,44 @@
"Table": "`user`, user_extra"
},
{
- "OperatorType": "Route",
+ "OperatorType": "VindexLookup",
"Variant": "EqualUnique",
"Keyspace": {
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select music.`name` from music where 1 != 1",
- "Query": "select music.`name` from music where music.id = :user_id",
- "Table": "music",
"Values": [
":user_id"
],
- "Vindex": "music_user_map"
+ "Vindex": "music_user_map",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1",
+ "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals",
+ "Table": "name_user_vdx",
+ "Values": [
+ "::name"
+ ],
+ "Vindex": "user_index"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "ByDestination",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select music.`name` from music where 1 != 1",
+ "Query": "select music.`name` from music where music.id = :user_id",
+ "Table": "music"
+ }
+ ]
}
]
}
@@ -2963,19 +3017,44 @@
]
},
{
- "OperatorType": "Route",
+ "OperatorType": "VindexLookup",
"Variant": "EqualUnique",
"Keyspace": {
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select 1 from music as m where 1 != 1",
- "Query": "select 1 from music as m where m.id = :u2_val2",
- "Table": "music",
"Values": [
":u2_val2"
],
- "Vindex": "music_user_map"
+ "Vindex": "music_user_map",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1",
+ "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals",
+ "Table": "name_user_vdx",
+ "Values": [
+ "::name"
+ ],
+ "Vindex": "user_index"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "ByDestination",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select 1 from music as m where 1 != 1",
+ "Query": "select 1 from music as m where m.id = :u2_val2",
+ "Table": "music"
+ }
+ ]
}
]
}
@@ -3774,25 +3853,42 @@
"QueryType": "SELECT",
"Original": "select * from (select id from user having count(*) = 1) s",
"Instructions": {
- "OperatorType": "Filter",
- "Predicate": "count(*) = 1",
- "ResultColumns": 1,
+ "OperatorType": "SimpleProjection",
+ "ColumnNames": [
+ "0:id"
+ ],
+ "Columns": "0",
"Inputs": [
{
- "OperatorType": "Aggregate",
- "Variant": "Scalar",
- "Aggregates": "any_value(0) AS id, sum_count_star(1) AS count(*)",
+ "OperatorType": "Projection",
+ "Expressions": [
+ ":0 as id",
+ "count(*) = 1 as count(*) = 1"
+ ],
"Inputs": [
{
- "OperatorType": "Route",
- "Variant": "Scatter",
- "Keyspace": {
- "Name": "user",
- "Sharded": true
- },
- "FieldQuery": "select id, count(*) from `user` where 1 != 1",
- "Query": "select id, count(*) from `user`",
- "Table": "`user`"
+ "OperatorType": "Filter",
+ "Predicate": "count(*) = 1",
+ "Inputs": [
+ {
+ "OperatorType": "Aggregate",
+ "Variant": "Scalar",
+ "Aggregates": "any_value(0) AS id, sum_count_star(1) AS count(*), any_value(2)",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "Scatter",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select id, count(*), 1 from `user` where 1 != 1",
+ "Query": "select id, count(*), 1 from `user`",
+ "Table": "`user`"
+ }
+ ]
+ }
+ ]
}
]
}
diff --git a/go/vt/vtgate/planbuilder/testdata/cte_cases.json b/go/vt/vtgate/planbuilder/testdata/cte_cases.json
index b00dc0a060f..12f92f5a9f4 100644
--- a/go/vt/vtgate/planbuilder/testdata/cte_cases.json
+++ b/go/vt/vtgate/planbuilder/testdata/cte_cases.json
@@ -379,25 +379,42 @@
"QueryType": "SELECT",
"Original": "with s as (select id from user having count(*) = 1) select * from s",
"Instructions": {
- "OperatorType": "Filter",
- "Predicate": "count(*) = 1",
- "ResultColumns": 1,
+ "OperatorType": "SimpleProjection",
+ "ColumnNames": [
+ "0:id"
+ ],
+ "Columns": "0",
"Inputs": [
{
- "OperatorType": "Aggregate",
- "Variant": "Scalar",
- "Aggregates": "any_value(0) AS id, sum_count_star(1) AS count(*)",
+ "OperatorType": "Projection",
+ "Expressions": [
+ ":0 as id",
+ "count(*) = 1 as count(*) = 1"
+ ],
"Inputs": [
{
- "OperatorType": "Route",
- "Variant": "Scatter",
- "Keyspace": {
- "Name": "user",
- "Sharded": true
- },
- "FieldQuery": "select id, count(*) from `user` where 1 != 1",
- "Query": "select id, count(*) from `user`",
- "Table": "`user`"
+ "OperatorType": "Filter",
+ "Predicate": "count(*) = 1",
+ "Inputs": [
+ {
+ "OperatorType": "Aggregate",
+ "Variant": "Scalar",
+ "Aggregates": "any_value(0) AS id, sum_count_star(1) AS count(*), any_value(2)",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "Scatter",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select id, count(*), 1 from `user` where 1 != 1",
+ "Query": "select id, count(*), 1 from `user`",
+ "Table": "`user`"
+ }
+ ]
+ }
+ ]
}
]
}
@@ -2243,8 +2260,8 @@
"Name": "main",
"Sharded": false
},
- "FieldQuery": "with recursive cte as (select 1 from dual where 1 != 1 union all select n + 1 from cte where 1 != 1) select n from cte where 1 != 1",
- "Query": "with recursive cte as (select 1 from dual union all select n + 1 from cte where n < 5) select n from cte",
+ "FieldQuery": "with recursive cte(n) as (select 1 from dual where 1 != 1 union all select n + 1 from cte where 1 != 1) select n from cte where 1 != 1",
+ "Query": "with recursive cte(n) as (select 1 from dual union all select n + 1 from cte where n < 5) select n from cte",
"Table": "dual"
},
"TablesUsed": [
diff --git a/go/vt/vtgate/planbuilder/testdata/dml_cases.json b/go/vt/vtgate/planbuilder/testdata/dml_cases.json
index b5d0fa8951f..f796b935605 100644
--- a/go/vt/vtgate/planbuilder/testdata/dml_cases.json
+++ b/go/vt/vtgate/planbuilder/testdata/dml_cases.json
@@ -2823,7 +2823,7 @@
"Query": "delete from `user` where `name` = _binary 'abc'",
"Table": "user",
"Values": [
- "'abc'"
+ "_binary'abc'"
],
"Vindex": "name_user_map"
},
diff --git a/go/vt/vtgate/planbuilder/testdata/dml_cases_with_user_as_default.json b/go/vt/vtgate/planbuilder/testdata/dml_cases_with_user_as_default.json
new file mode 100644
index 00000000000..ff66967c2ce
--- /dev/null
+++ b/go/vt/vtgate/planbuilder/testdata/dml_cases_with_user_as_default.json
@@ -0,0 +1,24 @@
+[
+ {
+ "comment": "Update reference table from sharded keyspace to unsharded keyspace",
+ "query": "update ambiguous_ref_with_source set done = true where id = 1;",
+ "plan": {
+ "QueryType": "UPDATE",
+ "Original": "update ambiguous_ref_with_source set done = true where id = 1;",
+ "Instructions": {
+ "OperatorType": "Update",
+ "Variant": "Unsharded",
+ "Keyspace": {
+ "Name": "main",
+ "Sharded": false
+ },
+ "TargetTabletType": "PRIMARY",
+ "Query": "update ambiguous_ref_with_source set done = true where id = 1",
+ "Table": "ambiguous_ref_with_source"
+ },
+ "TablesUsed": [
+ "main.ambiguous_ref_with_source"
+ ]
+ }
+ }
+]
\ No newline at end of file
diff --git a/go/vt/vtgate/planbuilder/testdata/filter_cases.json b/go/vt/vtgate/planbuilder/testdata/filter_cases.json
index 3dc379b9aae..edce4ebd0cb 100644
--- a/go/vt/vtgate/planbuilder/testdata/filter_cases.json
+++ b/go/vt/vtgate/planbuilder/testdata/filter_cases.json
@@ -797,6 +797,108 @@
]
}
},
+ {
+ "comment": "Disjunction of conjunctions with 4 or more disjunctions",
+ "query": "select id from user where (col = 'aa' AND name = 'bb') OR (col = 'cc' AND name = 'dd') OR (col = 'ee' AND name = 'ff') OR (col = 'gg' AND name = 'hh')",
+ "plan": {
+ "QueryType": "SELECT",
+ "Original": "select id from user where (col = 'aa' AND name = 'bb') OR (col = 'cc' AND name = 'dd') OR (col = 'ee' AND name = 'ff') OR (col = 'gg' AND name = 'hh')",
+ "Instructions": {
+ "OperatorType": "VindexLookup",
+ "Variant": "MultiEqual",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "Values": [
+ "('bb', 'dd', 'ff', 'hh')"
+ ],
+ "Vindex": "name_user_map",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1",
+ "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals",
+ "Table": "name_user_vdx",
+ "Values": [
+ "::name"
+ ],
+ "Vindex": "user_index"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "ByDestination",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select id from `user` where 1 != 1",
+ "Query": "select id from `user` where col = 'aa' and `name` = 'bb' or col = 'cc' and `name` = 'dd' or col = 'ee' and `name` = 'ff' or col = 'gg' and `name` = 'hh'",
+ "Table": "`user`"
+ }
+ ]
+ },
+ "TablesUsed": [
+ "user.user"
+ ]
+ }
+ },
+ {
+ "comment": "Disjunction of conjunctions with 3 or less disjunctions",
+ "query": "select id from user where (col = 'aa' AND name = 'bb') OR (col = 'cc' AND name = 'dd') OR (col = 'ee' AND name = 'ff')",
+ "plan": {
+ "QueryType": "SELECT",
+ "Original": "select id from user where (col = 'aa' AND name = 'bb') OR (col = 'cc' AND name = 'dd') OR (col = 'ee' AND name = 'ff')",
+ "Instructions": {
+ "OperatorType": "VindexLookup",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "Values": [
+ "('bb', 'dd', 'ff')"
+ ],
+ "Vindex": "name_user_map",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1",
+ "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals",
+ "Table": "name_user_vdx",
+ "Values": [
+ "::name"
+ ],
+ "Vindex": "user_index"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "ByDestination",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select id from `user` where 1 != 1",
+ "Query": "select id from `user` where col in ('aa', 'cc', 'ee') and (col in ('aa', 'cc') or `name` = 'ff') and (col = 'aa' or `name` = 'dd' or col = 'ee') and (col = 'aa' or `name` = 'dd' or `name` = 'ff') and (`name` = 'bb' or col = 'cc' or col = 'ee') and (`name` = 'bb' or col = 'cc' or `name` = 'ff') and (`name` in ('bb', 'dd') or col = 'ee') and `name` in ::__vals",
+ "Table": "`user`"
+ }
+ ]
+ },
+ "TablesUsed": [
+ "user.user"
+ ]
+ }
+ },
{
"comment": "Single table complex in clause",
"query": "select id from user where name in (col, 'bb')",
@@ -3302,19 +3404,44 @@
"QueryType": "SELECT",
"Original": "select * from multicolvin where column_b = 1",
"Instructions": {
- "OperatorType": "Route",
+ "OperatorType": "VindexLookup",
"Variant": "EqualUnique",
"Keyspace": {
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select * from multicolvin where 1 != 1",
- "Query": "select * from multicolvin where column_b = 1",
- "Table": "multicolvin",
"Values": [
"1"
],
- "Vindex": "colb_colc_map"
+ "Vindex": "colb_colc_map",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select colb, keyspace_id from colb_colc_map where 1 != 1",
+ "Query": "select colb, keyspace_id from colb_colc_map where colb in ::__vals",
+ "Table": "colb_colc_map",
+ "Values": [
+ "::colb"
+ ],
+ "Vindex": "hash"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "ByDestination",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select * from multicolvin where 1 != 1",
+ "Query": "select * from multicolvin where column_b = 1",
+ "Table": "multicolvin"
+ }
+ ]
},
"TablesUsed": [
"user.multicolvin"
@@ -3328,19 +3455,44 @@
"QueryType": "SELECT",
"Original": "select * from multicolvin where column_b = 1 and column_c = 2",
"Instructions": {
- "OperatorType": "Route",
+ "OperatorType": "VindexLookup",
"Variant": "EqualUnique",
"Keyspace": {
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select * from multicolvin where 1 != 1",
- "Query": "select * from multicolvin where column_b = 1 and column_c = 2",
- "Table": "multicolvin",
"Values": [
"1"
],
- "Vindex": "colb_colc_map"
+ "Vindex": "colb_colc_map",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select colb, keyspace_id from colb_colc_map where 1 != 1",
+ "Query": "select colb, keyspace_id from colb_colc_map where colb in ::__vals",
+ "Table": "colb_colc_map",
+ "Values": [
+ "::colb"
+ ],
+ "Vindex": "hash"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "ByDestination",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select * from multicolvin where 1 != 1",
+ "Query": "select * from multicolvin where column_b = 1 and column_c = 2",
+ "Table": "multicolvin"
+ }
+ ]
},
"TablesUsed": [
"user.multicolvin"
@@ -3354,19 +3506,44 @@
"QueryType": "SELECT",
"Original": "select * from multicolvin where column_b = 1 and column_c = 2 and column_a = 3",
"Instructions": {
- "OperatorType": "Route",
+ "OperatorType": "VindexLookup",
"Variant": "EqualUnique",
"Keyspace": {
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select * from multicolvin where 1 != 1",
- "Query": "select * from multicolvin where column_b = 1 and column_c = 2 and column_a = 3",
- "Table": "multicolvin",
"Values": [
"1"
],
- "Vindex": "colb_colc_map"
+ "Vindex": "colb_colc_map",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select colb, keyspace_id from colb_colc_map where 1 != 1",
+ "Query": "select colb, keyspace_id from colb_colc_map where colb in ::__vals",
+ "Table": "colb_colc_map",
+ "Values": [
+ "::colb"
+ ],
+ "Vindex": "hash"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "ByDestination",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select * from multicolvin where 1 != 1",
+ "Query": "select * from multicolvin where column_b = 1 and column_c = 2 and column_a = 3",
+ "Table": "multicolvin"
+ }
+ ]
},
"TablesUsed": [
"user.multicolvin"
@@ -3380,19 +3557,44 @@
"QueryType": "SELECT",
"Original": "select * from multicolvin where column_a = 3 and column_b = 1",
"Instructions": {
- "OperatorType": "Route",
+ "OperatorType": "VindexLookup",
"Variant": "EqualUnique",
"Keyspace": {
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select * from multicolvin where 1 != 1",
- "Query": "select * from multicolvin where column_a = 3 and column_b = 1",
- "Table": "multicolvin",
"Values": [
"1"
],
- "Vindex": "colb_colc_map"
+ "Vindex": "colb_colc_map",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select colb, keyspace_id from colb_colc_map where 1 != 1",
+ "Query": "select colb, keyspace_id from colb_colc_map where colb in ::__vals",
+ "Table": "colb_colc_map",
+ "Values": [
+ "::colb"
+ ],
+ "Vindex": "hash"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "ByDestination",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select * from multicolvin where 1 != 1",
+ "Query": "select * from multicolvin where column_a = 3 and column_b = 1",
+ "Table": "multicolvin"
+ }
+ ]
},
"TablesUsed": [
"user.multicolvin"
diff --git a/go/vt/vtgate/planbuilder/testdata/from_cases.json b/go/vt/vtgate/planbuilder/testdata/from_cases.json
index 2e0fe429c1f..bec64fd7b1e 100644
--- a/go/vt/vtgate/planbuilder/testdata/from_cases.json
+++ b/go/vt/vtgate/planbuilder/testdata/from_cases.json
@@ -4709,19 +4709,44 @@
]
},
{
- "OperatorType": "Route",
+ "OperatorType": "VindexLookup",
"Variant": "EqualUnique",
"Keyspace": {
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select 1 from music as m where 1 != 1",
- "Query": "select 1 from music as m where m.user_id = 5 and m.id = 20 and m.col = :u_col /* INT16 */",
- "Table": "music",
"Values": [
"20"
],
- "Vindex": "music_user_map"
+ "Vindex": "music_user_map",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1",
+ "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals",
+ "Table": "name_user_vdx",
+ "Values": [
+ "::name"
+ ],
+ "Vindex": "user_index"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "ByDestination",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select 1 from music as m where 1 != 1",
+ "Query": "select 1 from music as m where m.user_id = 5 and m.id = 20 and m.col = :u_col /* INT16 */",
+ "Table": "music"
+ }
+ ]
}
]
},
diff --git a/go/vt/vtgate/planbuilder/testdata/memory_sort_cases.json b/go/vt/vtgate/planbuilder/testdata/memory_sort_cases.json
index 060f073a366..a35949cd4c1 100644
--- a/go/vt/vtgate/planbuilder/testdata/memory_sort_cases.json
+++ b/go/vt/vtgate/planbuilder/testdata/memory_sort_cases.json
@@ -318,19 +318,44 @@
"Vindex": "user_index"
},
{
- "OperatorType": "Route",
+ "OperatorType": "VindexLookup",
"Variant": "EqualUnique",
"Keyspace": {
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select music.col3 as c, weight_string(music.col3) from music where 1 != 1",
- "Query": "select music.col3 as c, weight_string(music.col3) from music where music.id = :user_id",
- "Table": "music",
"Values": [
":user_id"
],
- "Vindex": "music_user_map"
+ "Vindex": "music_user_map",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1",
+ "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals",
+ "Table": "name_user_vdx",
+ "Values": [
+ "::name"
+ ],
+ "Vindex": "user_index"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "ByDestination",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select music.col3 as c, weight_string(music.col3) from music where 1 != 1",
+ "Query": "select music.col3 as c, weight_string(music.col3) from music where music.id = :user_id",
+ "Table": "music"
+ }
+ ]
}
]
}
@@ -379,19 +404,44 @@
"Vindex": "user_index"
},
{
- "OperatorType": "Route",
+ "OperatorType": "VindexLookup",
"Variant": "EqualUnique",
"Keyspace": {
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select music.col3, weight_string(music.col3) from music where 1 != 1",
- "Query": "select music.col3, weight_string(music.col3) from music where music.id = :user_id",
- "Table": "music",
"Values": [
":user_id"
],
- "Vindex": "music_user_map"
+ "Vindex": "music_user_map",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1",
+ "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals",
+ "Table": "name_user_vdx",
+ "Values": [
+ "::name"
+ ],
+ "Vindex": "user_index"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "ByDestination",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select music.col3, weight_string(music.col3) from music where 1 != 1",
+ "Query": "select music.col3, weight_string(music.col3) from music where music.id = :user_id",
+ "Table": "music"
+ }
+ ]
}
]
}
diff --git a/go/vt/vtgate/planbuilder/testdata/postprocess_cases.json b/go/vt/vtgate/planbuilder/testdata/postprocess_cases.json
index 36f1472007d..6a8e94c0241 100644
--- a/go/vt/vtgate/planbuilder/testdata/postprocess_cases.json
+++ b/go/vt/vtgate/planbuilder/testdata/postprocess_cases.json
@@ -544,19 +544,44 @@
"Vindex": "user_index"
},
{
- "OperatorType": "Route",
+ "OperatorType": "VindexLookup",
"Variant": "EqualUnique",
"Keyspace": {
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select music.col3 from music where 1 != 1",
- "Query": "select music.col3 from music where music.id = :user_id",
- "Table": "music",
"Values": [
":user_id"
],
- "Vindex": "music_user_map"
+ "Vindex": "music_user_map",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1",
+ "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals",
+ "Table": "name_user_vdx",
+ "Values": [
+ "::name"
+ ],
+ "Vindex": "user_index"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "ByDestination",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select music.col3 from music where 1 != 1",
+ "Query": "select music.col3 from music where music.id = :user_id",
+ "Table": "music"
+ }
+ ]
}
]
},
@@ -597,19 +622,44 @@
"Vindex": "user_index"
},
{
- "OperatorType": "Route",
+ "OperatorType": "VindexLookup",
"Variant": "EqualUnique",
"Keyspace": {
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select music.col3 from music where 1 != 1",
- "Query": "select music.col3 from music where music.id = :user_id",
- "Table": "music",
"Values": [
":user_id"
],
- "Vindex": "music_user_map"
+ "Vindex": "music_user_map",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1",
+ "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals",
+ "Table": "name_user_vdx",
+ "Values": [
+ "::name"
+ ],
+ "Vindex": "user_index"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "ByDestination",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select music.col3 from music where 1 != 1",
+ "Query": "select music.col3 from music where music.id = :user_id",
+ "Table": "music"
+ }
+ ]
}
]
},
@@ -650,19 +700,44 @@
"Vindex": "user_index"
},
{
- "OperatorType": "Route",
+ "OperatorType": "VindexLookup",
"Variant": "EqualUnique",
"Keyspace": {
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select music.col3 from music where 1 != 1",
- "Query": "select music.col3 from music where music.id = :user_id",
- "Table": "music",
"Values": [
":user_id"
],
- "Vindex": "music_user_map"
+ "Vindex": "music_user_map",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1",
+ "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals",
+ "Table": "name_user_vdx",
+ "Values": [
+ "::name"
+ ],
+ "Vindex": "user_index"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "ByDestination",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select music.col3 from music where 1 != 1",
+ "Query": "select music.col3 from music where music.id = :user_id",
+ "Table": "music"
+ }
+ ]
}
]
},
@@ -770,19 +845,44 @@
"Vindex": "user_index"
},
{
- "OperatorType": "Route",
+ "OperatorType": "VindexLookup",
"Variant": "EqualUnique",
"Keyspace": {
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select music.col3 from music where 1 != 1",
- "Query": "select music.col3 from music where music.id = :user_id",
- "Table": "music",
"Values": [
":user_id"
],
- "Vindex": "music_user_map"
+ "Vindex": "music_user_map",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1",
+ "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals",
+ "Table": "name_user_vdx",
+ "Values": [
+ "::name"
+ ],
+ "Vindex": "user_index"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "ByDestination",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select music.col3 from music where 1 != 1",
+ "Query": "select music.col3 from music where music.id = :user_id",
+ "Table": "music"
+ }
+ ]
}
]
},
diff --git a/go/vt/vtgate/planbuilder/testdata/schemas/main.sql b/go/vt/vtgate/planbuilder/testdata/schemas/main.sql
new file mode 100644
index 00000000000..8c15b99218c
--- /dev/null
+++ b/go/vt/vtgate/planbuilder/testdata/schemas/main.sql
@@ -0,0 +1,12 @@
+CREATE TABLE `unsharded` (
+ `id` INT NOT NULL PRIMARY KEY,
+ `col1` VARCHAR(255) DEFAULT NULL,
+ `col2` VARCHAR(255) DEFAULT NULL,
+ `name` VARCHAR(255) DEFAULT NULL
+);
+
+CREATE TABLE `unsharded_auto` (
+ `id` INT NOT NULL PRIMARY KEY,
+ `col1` VARCHAR(255) DEFAULT NULL,
+ `col2` VARCHAR(255) DEFAULT NULL
+);
\ No newline at end of file
diff --git a/go/vt/vtgate/planbuilder/testdata/schemas/user.sql b/go/vt/vtgate/planbuilder/testdata/schemas/user.sql
new file mode 100644
index 00000000000..55f4078557a
--- /dev/null
+++ b/go/vt/vtgate/planbuilder/testdata/schemas/user.sql
@@ -0,0 +1,100 @@
+CREATE TABLE user
+(
+ id INT PRIMARY KEY,
+ col BIGINT,
+ predef1 VARCHAR(255),
+ predef2 VARCHAR(255),
+ textcol1 VARCHAR(255),
+ intcol BIGINT,
+ textcol2 VARCHAR(255)
+);
+
+CREATE TABLE user_metadata
+(
+ user_id INT,
+ email VARCHAR(255),
+ address VARCHAR(255),
+ md5 VARCHAR(255),
+ non_planable VARCHAR(255),
+ PRIMARY KEY (user_id)
+);
+
+CREATE TABLE music
+(
+ user_id INT,
+ id INT,
+ PRIMARY KEY (user_id)
+);
+
+CREATE TABLE samecolvin
+(
+ col VARCHAR(255),
+ PRIMARY KEY (col)
+);
+
+CREATE TABLE multicolvin
+(
+ kid INT,
+ column_a VARCHAR(255),
+ column_b VARCHAR(255),
+ column_c VARCHAR(255),
+ PRIMARY KEY (kid)
+);
+
+CREATE TABLE customer
+(
+ id INT,
+ email VARCHAR(255),
+ phone VARCHAR(255),
+ PRIMARY KEY (id)
+);
+
+CREATE TABLE multicol_tbl
+(
+ cola VARCHAR(255),
+ colb VARCHAR(255),
+ colc VARCHAR(255),
+ name VARCHAR(255),
+ PRIMARY KEY (cola, colb)
+);
+
+CREATE TABLE mixed_tbl
+(
+ shard_key VARCHAR(255),
+ lkp_key VARCHAR(255),
+ PRIMARY KEY (shard_key)
+);
+
+CREATE TABLE pin_test
+(
+ id INT PRIMARY KEY
+);
+
+CREATE TABLE cfc_vindex_col
+(
+ c1 VARCHAR(255),
+ c2 VARCHAR(255),
+ PRIMARY KEY (c1)
+);
+
+CREATE TABLE unq_lkp_idx
+(
+ unq_key INT PRIMARY KEY,
+ keyspace_id VARCHAR(255)
+);
+
+CREATE TABLE t1
+(
+ c1 INT,
+ c2 INT,
+ c3 INT,
+ PRIMARY KEY (c1)
+);
+
+CREATE TABLE authoritative
+(
+ user_id bigint NOT NULL,
+ col1 VARCHAR(255),
+ col2 bigint,
+ PRIMARY KEY (user_id)
+) ENGINE=InnoDB;
\ No newline at end of file
diff --git a/go/vt/vtgate/planbuilder/testdata/select_cases.json b/go/vt/vtgate/planbuilder/testdata/select_cases.json
index 856e56265ca..eac13216380 100644
--- a/go/vt/vtgate/planbuilder/testdata/select_cases.json
+++ b/go/vt/vtgate/planbuilder/testdata/select_cases.json
@@ -65,6 +65,36 @@
]
}
},
+ {
+ "comment": "join on sharding column with limit - should be a simple scatter query and limit on top with non resolved columns",
+ "query": "select * from user u join user_metadata um on u.id = um.user_id where foo=41 limit 20",
+ "plan": {
+ "QueryType": "SELECT",
+ "Original": "select * from user u join user_metadata um on u.id = um.user_id where foo=41 limit 20",
+ "Instructions": {
+ "OperatorType": "Limit",
+ "Count": "20",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "Scatter",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select * from `user` as u, user_metadata as um where 1 != 1",
+ "Query": "select * from `user` as u, user_metadata as um where foo = 41 and u.id = um.user_id limit 20",
+ "Table": "`user`, user_metadata"
+ }
+ ]
+ },
+ "TablesUsed": [
+ "user.user",
+ "user.user_metadata"
+ ]
+ },
+ "skip_e2e": true
+ },
{
"comment": "select with timeout directive sets QueryTimeout in the route",
"query": "select /*vt+ QUERY_TIMEOUT_MS=1000 */ * from user",
@@ -168,7 +198,8 @@
"TablesUsed": [
"main.unsharded"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "select with partial scatter directive",
@@ -373,7 +404,8 @@
{
"comment": "test table lookup failure for authoritative code path",
"query": "select a.* from authoritative",
- "plan": "Unknown table 'a'"
+ "plan": "Unknown table 'a'",
+ "skip_e2e": true
},
{
"comment": "select * from qualified authoritative table",
@@ -441,7 +473,8 @@
"user.authoritative",
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "auto-resolve anonymous columns for simple route",
@@ -464,7 +497,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "json_arrayagg in single sharded query",
@@ -490,7 +524,8 @@
"TablesUsed": [
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "json_objectagg in single sharded query",
@@ -516,17 +551,20 @@
"TablesUsed": [
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "unsupported json aggregation expressions in scatter query",
"query": "select count(1) from user where cola = 'abc' group by n_id having json_arrayagg(a_id) = '[]'",
- "plan": "VT12001: unsupported: in scatter query: aggregation function 'json_arrayagg(a_id)'"
+ "plan": "VT12001: unsupported: in scatter query: aggregation function 'json_arrayagg(a_id)'",
+ "skip_e2e": true
},
{
"comment": "Cannot auto-resolve for cross-shard joins",
"query": "select col from user join user_extra",
- "plan": "Column 'col' in field list is ambiguous"
+ "plan": "Column 'col' in field list is ambiguous",
+ "skip_e2e": true
},
{
"comment": "Auto-resolve should work if unique vindex columns are referenced",
@@ -568,7 +606,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "database calls should be substituted",
@@ -590,7 +629,8 @@
"TablesUsed": [
"main.dual"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "last_insert_id for unsharded route",
@@ -612,7 +652,8 @@
"TablesUsed": [
"main.unsharded"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "select from dual on unqualified keyspace",
@@ -665,7 +706,8 @@
{
"comment": "prefixing dual with a keyspace should not work",
"query": "select 1 from user.dual",
- "plan": "table dual not found"
+ "plan": "table dual not found",
+ "skip_e2e": true
},
{
"comment": "RHS route referenced",
@@ -707,7 +749,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Both routes referenced",
@@ -749,7 +792,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Expression with single-route reference",
@@ -791,7 +835,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "subquery with an aggregation in order by that can be merged into a single route",
@@ -818,7 +863,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Jumbled references",
@@ -860,7 +906,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Comments",
@@ -902,7 +949,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "for update",
@@ -944,7 +992,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Field query should work for joins select bind vars",
@@ -989,7 +1038,8 @@
"main.unsharded",
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Case preservation",
@@ -1031,12 +1081,14 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "syntax error",
"query": "the quick brown fox",
- "plan": "syntax error at position 4 near 'the'"
+ "plan": "syntax error at position 4 near 'the'",
+ "skip_e2e": true
},
{
"comment": "Hex number is not treated as a simple value",
@@ -1055,7 +1107,7 @@
"Query": "select * from `user` where id = 0x04",
"Table": "`user`",
"Values": [
- "'\u0004'"
+ "_binary'\u0004'"
],
"Vindex": "user_index"
},
@@ -1084,7 +1136,8 @@
"TablesUsed": [
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Selection but make the planner explicitly use a vindex",
@@ -1135,12 +1188,14 @@
"TablesUsed": [
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Vindex hint on a non-existing vindex",
"query": "select * from user use vindex (does_not_exist) where id = 1",
- "plan": "VT09021: Vindex 'does_not_exist' does not exist in table 'user.user'"
+ "plan": "VT09021: Vindex 'does_not_exist' does not exist in table 'user.user'",
+ "skip_e2e": true
},
{
"comment": "sharded limit offset",
@@ -1202,7 +1257,8 @@
"TablesUsed": [
"user.music"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Sharding Key Condition in Parenthesis",
@@ -1228,7 +1284,8 @@
"TablesUsed": [
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Multiple parenthesized expressions",
@@ -1254,7 +1311,8 @@
"TablesUsed": [
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Multiple parenthesized expressions",
@@ -1280,7 +1338,8 @@
"TablesUsed": [
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Column Aliasing with Table.Column",
@@ -1358,7 +1417,8 @@
"TablesUsed": [
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Column as boolean-ish",
@@ -1384,7 +1444,8 @@
"TablesUsed": [
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "PK as fake boolean, and column as boolean-ish",
@@ -1410,7 +1471,8 @@
"TablesUsed": [
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "top level subquery in select",
@@ -1455,7 +1517,8 @@
"main.unsharded",
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "sub-expression subquery in select",
@@ -1500,7 +1563,8 @@
"main.unsharded",
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "select * from derived table expands specific columns",
@@ -1542,17 +1606,20 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "duplicate columns not allowed in derived table",
"query": "select * from (select user.id, user_extra.id from user join user_extra) as t",
- "plan": "Duplicate column name 'id'"
+ "plan": "Duplicate column name 'id'",
+ "skip_e2e": true
},
{
"comment": "non-existent symbol in cross-shard derived table",
"query": "select t.col from (select user.id from user join user_extra) as t",
- "plan": "column 't.col' not found"
+ "plan": "column 't.col' not found",
+ "skip_e2e": true
},
{
"comment": "union with the same target shard",
@@ -1579,7 +1646,8 @@
"user.music",
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "union with the same target shard last_insert_id",
@@ -1606,7 +1674,8 @@
"user.music",
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "unsharded union in derived table",
@@ -1764,7 +1833,8 @@
"TablesUsed": [
"main.unsharded"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "routing table on music",
@@ -1786,7 +1856,8 @@
"TablesUsed": [
"user.music"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "testing SingleRow Projection",
@@ -1933,7 +2004,8 @@
"main.unsharded_a",
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Complex expression in a subquery used in NOT IN clause of an aggregate query",
@@ -1986,7 +2058,8 @@
"main.unsharded_a",
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "testing SingleRow Projection with arithmetics",
@@ -2189,12 +2262,14 @@
{
"comment": "sql_calc_found_rows in sub queries",
"query": "select * from music where user_id IN (select sql_calc_found_rows * from music limit 10)",
- "plan": "Incorrect usage/placement of 'SQL_CALC_FOUND_ROWS'"
+ "plan": "Incorrect usage/placement of 'SQL_CALC_FOUND_ROWS'",
+ "skip_e2e": true
},
{
"comment": "sql_calc_found_rows in derived table",
"query": "select sql_calc_found_rows * from (select sql_calc_found_rows * from music limit 10) t limit 1",
- "plan": "Incorrect usage/placement of 'SQL_CALC_FOUND_ROWS'"
+ "plan": "Incorrect usage/placement of 'SQL_CALC_FOUND_ROWS'",
+ "skip_e2e": true
},
{
"comment": "select from unsharded keyspace into dumpfile",
@@ -2216,7 +2291,8 @@
"TablesUsed": [
"main.unsharded"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "select from unsharded keyspace into outfile",
@@ -2238,7 +2314,8 @@
"TablesUsed": [
"main.unsharded"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "select from unsharded keyspace into outfile s3",
@@ -2260,7 +2337,8 @@
"TablesUsed": [
"main.unsharded"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "left join with a dual table on left - merge-able",
@@ -2471,17 +2549,20 @@
{
"comment": "Union after into outfile is incorrect",
"query": "select id from user into outfile 'out_file_name' union all select id from music",
- "plan": "syntax error at position 55 near 'union'"
+ "plan": "syntax error at position 55 near 'union'",
+ "skip_e2e": true
},
{
"comment": "Into outfile s3 in derived table is incorrect",
"query": "select id from (select id from user into outfile s3 'inner_outfile') as t2",
- "plan": "syntax error at position 41 near 'into'"
+ "plan": "syntax error at position 41 near 'into'",
+ "skip_e2e": true
},
{
"comment": "Into outfile s3 in derived table with union incorrect",
"query": "select id from (select id from user into outfile s3 'inner_outfile' union select 1) as t2",
- "plan": "syntax error at position 41 near 'into'"
+ "plan": "syntax error at position 41 near 'into'",
+ "skip_e2e": true
},
{
"comment": "select (select u.id from user as u where u.id = 1), a.id from user as a where a.id = 1",
@@ -2550,7 +2631,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "((((select 1))))",
@@ -2595,7 +2677,8 @@
"main.dual",
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "subquery in select expression of derived table",
@@ -2665,7 +2748,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "ORDER BY subquery",
@@ -2735,7 +2819,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "plan test for a natural character set string",
@@ -2802,7 +2887,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Straight Join ensures specific ordering of joins",
@@ -2847,7 +2933,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Dual query should be handled on the vtgate even with a LIMIT",
@@ -2921,7 +3008,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Straight Join preserved in MySQL query",
@@ -2944,7 +3032,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "correlated subquery in exists clause",
@@ -3002,7 +3091,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "correlated subquery in exists clause with an order by",
@@ -3061,7 +3151,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "correlated subquery having dependencies on two tables",
@@ -3134,7 +3225,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "correlated subquery using a column twice",
@@ -3191,7 +3283,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "correlated subquery that is dependent on one side of a join, fully mergeable",
@@ -3242,7 +3335,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "union as a derived table",
@@ -3331,7 +3425,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "mergeable derived table with order by and limit",
@@ -3353,7 +3448,8 @@
"TablesUsed": [
"main.unsharded"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "mergeable derived table with group by and limit",
@@ -3375,7 +3471,8 @@
"TablesUsed": [
"main.unsharded"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "select user.id, trim(leading 'x' from user.name) from user",
@@ -3397,7 +3494,8 @@
"TablesUsed": [
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "json utility functions",
@@ -3419,7 +3517,8 @@
"TablesUsed": [
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "dual query with exists clause",
@@ -3517,7 +3616,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "yeah, it does not make sense, but it's valid",
@@ -3603,14 +3703,15 @@
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select a -> '$[4]', a ->> '$[3]' from `user` where 1 != 1",
- "Query": "select a -> '$[4]', a ->> '$[3]' from `user`",
+ "FieldQuery": "select json_extract(a, '$[4]'), json_unquote(json_extract(a, '$[3]')) from `user` where 1 != 1",
+ "Query": "select json_extract(a, '$[4]'), json_unquote(json_extract(a, '$[3]')) from `user`",
"Table": "`user`"
},
"TablesUsed": [
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "groupe by with non aggregated columns and table alias",
@@ -3632,7 +3733,8 @@
"TablesUsed": [
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Functions that return JSON value attributes",
@@ -3837,7 +3939,8 @@
"TablesUsed": [
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "gtid functions",
@@ -3905,7 +4008,8 @@
"user.user_extra",
"user.user_metadata"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Join across multiple tables, with conditions on different vindexes, but mergeable through join predicates",
@@ -3933,7 +4037,8 @@
"user.music_extra",
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "SQL_CALC_FOUND_ROWS with vindex lookup",
@@ -4044,7 +4149,8 @@
"TablesUsed": [
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "`None` route being merged with another route via join predicate on Vindex columns",
@@ -4093,7 +4199,8 @@
"TablesUsed": [
"user.music"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Subquery with `IN` condition using columns with matching lookup vindexes",
@@ -4171,7 +4278,8 @@
"TablesUsed": [
"user.music"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Subquery with `IN` condition using columns with matching lookup vindexes",
@@ -4285,7 +4393,8 @@
"TablesUsed": [
"user.music"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Mergeable scatter subquery with `GROUP BY` on unique vindex column",
@@ -4307,7 +4416,8 @@
"TablesUsed": [
"user.music"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Unmergeable scatter subquery with `GROUP BY` on-non vindex column",
@@ -4346,26 +4456,52 @@
},
{
"InputName": "Outer",
- "OperatorType": "Route",
+ "OperatorType": "VindexLookup",
"Variant": "IN",
"Keyspace": {
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select music.id from music where 1 != 1",
- "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals",
- "Table": "music",
"Values": [
"::__sq1"
],
- "Vindex": "music_user_map"
+ "Vindex": "music_user_map",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1",
+ "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals",
+ "Table": "name_user_vdx",
+ "Values": [
+ "::name"
+ ],
+ "Vindex": "user_index"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "ByDestination",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select music.id from music where 1 != 1",
+ "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals",
+ "Table": "music"
+ }
+ ]
}
]
},
"TablesUsed": [
"user.music"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Unmergeable scatter subquery with LIMIT",
@@ -4401,26 +4537,52 @@
},
{
"InputName": "Outer",
- "OperatorType": "Route",
+ "OperatorType": "VindexLookup",
"Variant": "IN",
"Keyspace": {
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select music.id from music where 1 != 1",
- "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals",
- "Table": "music",
"Values": [
"::__sq1"
],
- "Vindex": "music_user_map"
+ "Vindex": "music_user_map",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1",
+ "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals",
+ "Table": "name_user_vdx",
+ "Values": [
+ "::name"
+ ],
+ "Vindex": "user_index"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "ByDestination",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select music.id from music where 1 != 1",
+ "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals",
+ "Table": "music"
+ }
+ ]
}
]
},
"TablesUsed": [
"user.music"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Mergeable subquery with `MAX` aggregate and grouped by unique vindex",
@@ -4454,26 +4616,52 @@
},
{
"InputName": "Outer",
- "OperatorType": "Route",
+ "OperatorType": "VindexLookup",
"Variant": "IN",
"Keyspace": {
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select music.id from music where 1 != 1",
- "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals",
- "Table": "music",
"Values": [
"::__sq1"
],
- "Vindex": "music_user_map"
+ "Vindex": "music_user_map",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1",
+ "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals",
+ "Table": "name_user_vdx",
+ "Values": [
+ "::name"
+ ],
+ "Vindex": "user_index"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "ByDestination",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select music.id from music where 1 != 1",
+ "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals",
+ "Table": "music"
+ }
+ ]
}
]
},
"TablesUsed": [
"user.music"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Unmergeable subquery with `MAX` aggregate",
@@ -4514,19 +4702,44 @@
},
{
"InputName": "Outer",
- "OperatorType": "Route",
+ "OperatorType": "VindexLookup",
"Variant": "IN",
"Keyspace": {
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select music.id from music where 1 != 1",
- "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals",
- "Table": "music",
"Values": [
"::__sq1"
],
- "Vindex": "music_user_map"
+ "Vindex": "music_user_map",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1",
+ "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals",
+ "Table": "name_user_vdx",
+ "Values": [
+ "::name"
+ ],
+ "Vindex": "user_index"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "ByDestination",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select music.id from music where 1 != 1",
+ "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals",
+ "Table": "music"
+ }
+ ]
}
]
},
@@ -4567,19 +4780,44 @@
},
{
"InputName": "Outer",
- "OperatorType": "Route",
+ "OperatorType": "VindexLookup",
"Variant": "IN",
"Keyspace": {
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select music.id from music where 1 != 1",
- "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals",
- "Table": "music",
"Values": [
"::__sq1"
],
- "Vindex": "music_user_map"
+ "Vindex": "music_user_map",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1",
+ "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals",
+ "Table": "name_user_vdx",
+ "Values": [
+ "::name"
+ ],
+ "Vindex": "user_index"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "ByDestination",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select music.id from music where 1 != 1",
+ "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals",
+ "Table": "music"
+ }
+ ]
}
]
},
@@ -4620,26 +4858,52 @@
},
{
"InputName": "Outer",
- "OperatorType": "Route",
+ "OperatorType": "VindexLookup",
"Variant": "IN",
"Keyspace": {
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select music.id from music where 1 != 1",
- "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals",
- "Table": "music",
"Values": [
"::__sq1"
],
- "Vindex": "music_user_map"
+ "Vindex": "music_user_map",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1",
+ "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals",
+ "Table": "name_user_vdx",
+ "Values": [
+ "::name"
+ ],
+ "Vindex": "user_index"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "ByDestination",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select music.id from music where 1 != 1",
+ "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals",
+ "Table": "music"
+ }
+ ]
}
]
},
"TablesUsed": [
"user.music"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Mergeable subquery with multiple levels of derived statements",
@@ -4731,26 +4995,52 @@
},
{
"InputName": "Outer",
- "OperatorType": "Route",
+ "OperatorType": "VindexLookup",
"Variant": "IN",
"Keyspace": {
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select music.id from music where 1 != 1",
- "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals",
- "Table": "music",
"Values": [
"::__sq1"
],
- "Vindex": "music_user_map"
+ "Vindex": "music_user_map",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1",
+ "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals",
+ "Table": "name_user_vdx",
+ "Values": [
+ "::name"
+ ],
+ "Vindex": "user_index"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "ByDestination",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select music.id from music where 1 != 1",
+ "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals",
+ "Table": "music"
+ }
+ ]
}
]
},
"TablesUsed": [
"user.music"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Unmergeable subquery with multiple levels of derived statements",
@@ -4786,26 +5076,52 @@
},
{
"InputName": "Outer",
- "OperatorType": "Route",
+ "OperatorType": "VindexLookup",
"Variant": "IN",
"Keyspace": {
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select music.id from music where 1 != 1",
- "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals",
- "Table": "music",
"Values": [
"::__sq1"
],
- "Vindex": "music_user_map"
+ "Vindex": "music_user_map",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1",
+ "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals",
+ "Table": "name_user_vdx",
+ "Values": [
+ "::name"
+ ],
+ "Vindex": "user_index"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "ByDestination",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select music.id from music where 1 != 1",
+ "Query": "select music.id from music where :__sq_has_values and music.id in ::__vals",
+ "Table": "music"
+ }
+ ]
}
]
},
"TablesUsed": [
"user.music"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "`None` subquery as top level predicate - outer query changes from `Scatter` to `None` on merge",
@@ -5004,7 +5320,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "select user.a, t.b from user join (select id, count(*) b, req from user_extra group by req, id) as t on user.id = t.id",
@@ -5068,7 +5385,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "SELECT music.id FROM (SELECT MAX(id) as maxt FROM music WHERE music.user_id = 5) other JOIN music ON other.maxt = music.id",
@@ -5191,7 +5509,8 @@
"main.dual",
"main.unsharded_a"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "subquery having join table on clause, using column reference of outer select table",
@@ -5240,7 +5559,8 @@
"main.unsharded",
"main.unsharded_a"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "ALL modifier on unsharded table works well",
@@ -5263,7 +5583,8 @@
"main.unsharded",
"main.unsharded_a"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "allow last_insert_id with argument",
@@ -5308,7 +5629,8 @@
"user.music_extra",
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Query with non-plannable lookup vindex",
@@ -5334,7 +5656,8 @@
"TablesUsed": [
"user.user_metadata"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "join query with lookup and join on different vindex column",
@@ -5386,7 +5709,8 @@
"user.user",
"user.user_metadata"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "pick email as vindex lookup",
@@ -5396,7 +5720,7 @@
"Original": "select * from customer where email = 'a@mail.com'",
"Instructions": {
"OperatorType": "VindexLookup",
- "Variant": "Equal",
+ "Variant": "EqualUnique",
"Keyspace": {
"Name": "user",
"Sharded": true
@@ -5481,7 +5805,8 @@
"TablesUsed": [
"user.customer"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "email vindex is costly than phone vindex - but phone vindex is backfiling hence ignored",
@@ -5491,7 +5816,7 @@
"Original": "select * from customer where email = 'a@mail.com' and phone = 123456",
"Instructions": {
"OperatorType": "VindexLookup",
- "Variant": "Equal",
+ "Variant": "EqualUnique",
"Keyspace": {
"Name": "user",
"Sharded": true
@@ -5542,7 +5867,7 @@
"Original": "select * from customer where phone = 123456 and email = 'a@mail.com'",
"Instructions": {
"OperatorType": "VindexLookup",
- "Variant": "Equal",
+ "Variant": "EqualUnique",
"Keyspace": {
"Name": "user",
"Sharded": true
@@ -5605,7 +5930,8 @@
"TablesUsed": [
"user.samecolvin"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "column with qualifier is correctly used",
@@ -5648,7 +5974,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Derived tables going to a single shard still need to expand derived table columns",
@@ -5693,7 +6020,8 @@
"main.unsharded",
"user.user"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "column name aliases in outer join queries",
@@ -5748,7 +6076,8 @@
"user.user",
"user.user_extra"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "Over clause works for unsharded tables",
@@ -5770,7 +6099,8 @@
"TablesUsed": [
"main.unsharded_a"
]
- }
+ },
+ "skip_e2e": true
},
{
"comment": "join with derived table with alias and join condition - merge into route",
diff --git a/go/vt/vtgate/planbuilder/testdata/union_cases.json b/go/vt/vtgate/planbuilder/testdata/union_cases.json
index 7feabb0a698..2927c1c6093 100644
--- a/go/vt/vtgate/planbuilder/testdata/union_cases.json
+++ b/go/vt/vtgate/planbuilder/testdata/union_cases.json
@@ -447,34 +447,84 @@
"OperatorType": "Concatenate",
"Inputs": [
{
- "OperatorType": "Route",
+ "OperatorType": "VindexLookup",
"Variant": "EqualUnique",
"Keyspace": {
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select 1 from music where 1 != 1",
- "Query": "select distinct 1 from music where id = 1",
- "Table": "music",
"Values": [
"1"
],
- "Vindex": "music_user_map"
+ "Vindex": "music_user_map",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1",
+ "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals",
+ "Table": "name_user_vdx",
+ "Values": [
+ "::name"
+ ],
+ "Vindex": "user_index"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "ByDestination",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select 1 from music where 1 != 1",
+ "Query": "select distinct 1 from music where id = 1",
+ "Table": "music"
+ }
+ ]
},
{
- "OperatorType": "Route",
+ "OperatorType": "VindexLookup",
"Variant": "EqualUnique",
"Keyspace": {
"Name": "user",
"Sharded": true
},
- "FieldQuery": "select 1 from music where 1 != 1",
- "Query": "select distinct 1 from music where id = 2",
- "Table": "music",
"Values": [
"2"
],
- "Vindex": "music_user_map"
+ "Vindex": "music_user_map",
+ "Inputs": [
+ {
+ "OperatorType": "Route",
+ "Variant": "IN",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1",
+ "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals",
+ "Table": "name_user_vdx",
+ "Values": [
+ "::name"
+ ],
+ "Vindex": "user_index"
+ },
+ {
+ "OperatorType": "Route",
+ "Variant": "ByDestination",
+ "Keyspace": {
+ "Name": "user",
+ "Sharded": true
+ },
+ "FieldQuery": "select 1 from music where 1 != 1",
+ "Query": "select distinct 1 from music where id = 2",
+ "Table": "music"
+ }
+ ]
}
]
}
diff --git a/go/vt/vtgate/planbuilder/testdata/vschemas/schema.json b/go/vt/vtgate/planbuilder/testdata/vschemas/schema.json
index 4fe275f2398..a5de9d3697e 100644
--- a/go/vt/vtgate/planbuilder/testdata/vschemas/schema.json
+++ b/go/vt/vtgate/planbuilder/testdata/vschemas/schema.json
@@ -58,34 +58,52 @@
"sharded": true,
"vindexes": {
"user_index": {
- "type": "hash_test",
+ "type": "hash",
"owner": "user"
},
"kid_index": {
- "type": "hash_test",
+ "type": "hash",
"owner": "multicolvin"
},
+ "hash": {
+ "type": "hash"
+ },
"user_md5_index": {
"type": "unicode_loose_md5"
},
"music_user_map": {
- "type": "lookup_test",
- "owner": "music"
+ "type": "lookup_unique",
+ "owner": "music",
+ "params": {
+ "table": "name_user_vdx",
+ "from": "name",
+ "to": "keyspace_id"
+ }
},
"cola_map": {
- "type": "lookup_test",
- "owner": "multicolvin"
+ "type": "lookup_unique",
+ "owner": "multicolvin",
+ "params": {
+ "table": "cola_map",
+ "from": "cola",
+ "to": "keyspace_id"
+ }
},
"colb_colc_map": {
- "type": "lookup_test",
- "owner": "multicolvin"
+ "type": "lookup_unique",
+ "owner": "multicolvin",
+ "params": {
+ "table": "colb_colc_map",
+ "from": "colb,colc",
+ "to": "keyspace_id"
+ }
},
"cola_kid_map": {
- "type": "lookup_test",
+ "type": "lookup_unique",
"owner": "overlap_vindex"
},
"name_user_map": {
- "type": "name_lkp_test",
+ "type": "lookup",
"owner": "user",
"params": {
"table": "name_user_vdx",
@@ -94,42 +112,56 @@
}
},
"email_user_map": {
- "type": "lookup_test",
+ "type": "lookup_unique",
"owner": "user_metadata"
},
"address_user_map": {
- "type": "lookup_test",
+ "type": "lookup_unique",
"owner": "user_metadata"
},
"costly_map": {
- "type": "costly",
- "owner": "user"
+ "type": "lookup_cost",
+ "owner": "user",
+ "params": {
+ "table": "costly_map",
+ "from": "costly",
+ "to": "keyspace_id",
+ "cost": "100"
+ }
},
"hash_dup": {
- "type": "hash_test",
+ "type": "hash",
"owner": "user"
},
"vindex1": {
- "type": "hash_test",
+ "type": "hash",
"owner": "samecolvin"
},
"vindex2": {
- "type": "lookup_test",
+ "type": "lookup_unique",
"owner": "samecolvin"
},
"cfc": {
"type": "cfc"
},
"multicolIdx": {
- "type": "multiCol_test"
+ "type": "multicol",
+ "params": {
+ "column_count": "2"
+ }
},
"colc_map": {
- "type": "lookup_test",
+ "type": "lookup_unique",
"owner": "multicol_tbl"
},
"name_muticoltbl_map": {
- "type": "name_lkp_test",
- "owner": "multicol_tbl"
+ "type": "lookup",
+ "owner": "multicol_tbl",
+ "params": {
+ "table": "name_user_vdx",
+ "from": "name",
+ "to": "keyspace_id"
+ }
},
"non_planable_user_map": {
"type": "lookup_unicodeloosemd5_hash",
@@ -141,7 +173,7 @@
"owner": "user_metadata"
},
"lkp_shard_map": {
- "type": "name_lkp_test",
+ "type": "lookup_unique",
"owner": "mixed_tbl",
"params": {
"table": "lkp_shard_vdx",
@@ -153,18 +185,18 @@
"type": "xxhash"
},
"unq_lkp_bf_vdx": {
- "type": "unq_lkp_test",
+ "type": "lookup_unique",
"owner": "customer",
"params": {
"table": "unq_lkp_idx",
- "from": " ",
+ "from": "unq_key",
"to": "keyspace_id",
"cost": "100",
"write_only": "true"
}
},
"unq_lkp_vdx": {
- "type": "unq_lkp_test",
+ "type": "lookup_unique",
"owner": "customer",
"params": {
"table": "unq_lkp_idx",
@@ -174,11 +206,11 @@
}
},
"lkp_bf_vdx": {
- "type": "name_lkp_test",
+ "type": "lookup_unique",
"owner": "customer",
"params": {
"table": "lkp_shard_vdx",
- "from": " ",
+ "from": "unq_key",
"to": "keyspace_id",
"write_only": "true"
}
@@ -352,6 +384,22 @@
}
]
},
+ "cola_map": {
+ "column_vindexes": [
+ {
+ "column": "cola",
+ "name": "hash"
+ }
+ ]
+ },
+ "colb_colc_map": {
+ "column_vindexes": [
+ {
+ "column": "colb",
+ "name": "hash"
+ }
+ ]
+ },
"overlap_vindex": {
"column_vindexes": [
{
@@ -462,6 +510,14 @@
}
]
},
+ "costly_map": {
+ "column_vindexes": [
+ {
+ "column": "name",
+ "name": "user_md5_index"
+ }
+ ]
+ },
"mixed_tbl": {
"column_vindexes": [
{
@@ -641,7 +697,10 @@
"type": "hash_test"
},
"multicolIdx": {
- "type": "multiCol_test"
+ "type": "multicol",
+ "params": {
+ "column_count": "3"
+ }
}
},
"tables": {
diff --git a/go/vt/vtgate/planbuilder/vexplain.go b/go/vt/vtgate/planbuilder/vexplain.go
index f66af7bfc33..7aed1e48884 100644
--- a/go/vt/vtgate/planbuilder/vexplain.go
+++ b/go/vt/vtgate/planbuilder/vexplain.go
@@ -26,6 +26,7 @@ import (
vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc"
"vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/vterrors"
+ "vitess.io/vitess/go/vt/vtgate/dynamicconfig"
"vitess.io/vitess/go/vt/vtgate/engine"
"vitess.io/vitess/go/vt/vtgate/planbuilder/operators"
"vitess.io/vitess/go/vt/vtgate/planbuilder/plancontext"
@@ -37,15 +38,15 @@ func buildVExplainPlan(
vexplainStmt *sqlparser.VExplainStmt,
reservedVars *sqlparser.ReservedVars,
vschema plancontext.VSchema,
- enableOnlineDDL, enableDirectDDL bool,
+ cfg dynamicconfig.DDL,
) (*planResult, error) {
switch vexplainStmt.Type {
case sqlparser.QueriesVExplainType, sqlparser.AllVExplainType:
- return buildVExplainLoggingPlan(ctx, vexplainStmt, reservedVars, vschema, enableOnlineDDL, enableDirectDDL)
+ return buildVExplainLoggingPlan(ctx, vexplainStmt, reservedVars, vschema, cfg)
case sqlparser.PlanVExplainType:
- return buildVExplainVtgatePlan(ctx, vexplainStmt.Statement, reservedVars, vschema, enableOnlineDDL, enableDirectDDL)
+ return buildVExplainVtgatePlan(ctx, vexplainStmt.Statement, reservedVars, vschema, cfg)
case sqlparser.TraceVExplainType:
- return buildVExplainTracePlan(ctx, vexplainStmt.Statement, reservedVars, vschema, enableOnlineDDL, enableDirectDDL)
+ return buildVExplainTracePlan(ctx, vexplainStmt.Statement, reservedVars, vschema, cfg)
case sqlparser.KeysVExplainType:
return buildVExplainKeysPlan(vexplainStmt.Statement, vschema)
}
@@ -92,8 +93,8 @@ func explainTabPlan(explain *sqlparser.ExplainTab, vschema plancontext.VSchema)
}, singleTable(keyspace.Name, explain.Table.Name.String())), nil
}
-func buildVExplainVtgatePlan(ctx context.Context, explainStatement sqlparser.Statement, reservedVars *sqlparser.ReservedVars, vschema plancontext.VSchema, enableOnlineDDL, enableDirectDDL bool) (*planResult, error) {
- innerInstruction, err := createInstructionFor(ctx, sqlparser.String(explainStatement), explainStatement, reservedVars, vschema, enableOnlineDDL, enableDirectDDL)
+func buildVExplainVtgatePlan(ctx context.Context, explainStatement sqlparser.Statement, reservedVars *sqlparser.ReservedVars, vschema plancontext.VSchema, cfg dynamicconfig.DDL) (*planResult, error) {
+ innerInstruction, err := createInstructionFor(ctx, sqlparser.String(explainStatement), explainStatement, reservedVars, vschema, cfg)
if err != nil {
return nil, err
}
@@ -124,8 +125,8 @@ func buildVExplainKeysPlan(statement sqlparser.Statement, vschema plancontext.VS
return getJsonResultPlan(result, "ColumnUsage")
}
-func buildVExplainLoggingPlan(ctx context.Context, explain *sqlparser.VExplainStmt, reservedVars *sqlparser.ReservedVars, vschema plancontext.VSchema, enableOnlineDDL, enableDirectDDL bool) (*planResult, error) {
- input, err := createInstructionFor(ctx, sqlparser.String(explain.Statement), explain.Statement, reservedVars, vschema, enableOnlineDDL, enableDirectDDL)
+func buildVExplainLoggingPlan(ctx context.Context, explain *sqlparser.VExplainStmt, reservedVars *sqlparser.ReservedVars, vschema plancontext.VSchema, cfg dynamicconfig.DDL) (*planResult, error) {
+ input, err := createInstructionFor(ctx, sqlparser.String(explain.Statement), explain.Statement, reservedVars, vschema, cfg)
if err != nil {
return nil, err
}
@@ -188,8 +189,8 @@ func explainPlan(explain *sqlparser.ExplainStmt, reservedVars *sqlparser.Reserve
}, tables...), nil
}
-func buildVExplainTracePlan(ctx context.Context, explainStatement sqlparser.Statement, reservedVars *sqlparser.ReservedVars, vschema plancontext.VSchema, enableOnlineDDL, enableDirectDDL bool) (*planResult, error) {
- innerInstruction, err := createInstructionFor(ctx, sqlparser.String(explainStatement), explainStatement, reservedVars, vschema, enableOnlineDDL, enableDirectDDL)
+func buildVExplainTracePlan(ctx context.Context, explainStatement sqlparser.Statement, reservedVars *sqlparser.ReservedVars, vschema plancontext.VSchema, cfg dynamicconfig.DDL) (*planResult, error) {
+ innerInstruction, err := createInstructionFor(ctx, sqlparser.String(explainStatement), explainStatement, reservedVars, vschema, cfg)
if err != nil {
return nil, err
}
diff --git a/go/vt/vtgate/querylogz.go b/go/vt/vtgate/querylogz.go
index 7c72e950d4a..05d301f28be 100644
--- a/go/vt/vtgate/querylogz.go
+++ b/go/vt/vtgate/querylogz.go
@@ -20,15 +20,15 @@ import (
"net/http"
"strconv"
"strings"
- "text/template"
"time"
- "vitess.io/vitess/go/vt/vtgate/logstats"
+ "github.com/google/safehtml/template"
"vitess.io/vitess/go/acl"
"vitess.io/vitess/go/vt/log"
"vitess.io/vitess/go/vt/logz"
"vitess.io/vitess/go/vt/sqlparser"
+ "vitess.io/vitess/go/vt/vtgate/logstats"
)
var (
diff --git a/go/vt/vtgate/querylogz_test.go b/go/vt/vtgate/querylogz_test.go
index 3cecb983b3f..9236b2ac840 100644
--- a/go/vt/vtgate/querylogz_test.go
+++ b/go/vt/vtgate/querylogz_test.go
@@ -35,7 +35,7 @@ import (
func TestQuerylogzHandlerFormatting(t *testing.T) {
req, _ := http.NewRequest("GET", "/querylogz?timeout=10&limit=1", nil)
- logStats := logstats.NewLogStats(context.Background(), "Execute", "select name from test_table limit 1000", "suuid", nil)
+ logStats := logstats.NewLogStats(context.Background(), "Execute", "select name, 'inject ' from test_table limit 1000", "suuid", nil)
logStats.StmtType = "select"
logStats.RowsAffected = 1000
logStats.ShardQueries = 1
@@ -64,7 +64,7 @@ func TestQuerylogzHandlerFormatting(t *testing.T) {
`0.002 `,
`0.003 `,
`select `,
- `select name from test_table limit 1000 `,
+ regexp.QuoteMeta(`select name, 'inject <script>alert();</script>' from test_table limit 1000 `),
`1 `,
`1000 `,
` `,
@@ -94,7 +94,7 @@ func TestQuerylogzHandlerFormatting(t *testing.T) {
`0.002 `,
`0.003 `,
`select `,
- `select name from test_table limit 1000 `,
+ regexp.QuoteMeta(`select name, 'inject <script>alert();</script>' from test_table limit 1000 `),
`1 `,
`1000 `,
` `,
@@ -124,7 +124,7 @@ func TestQuerylogzHandlerFormatting(t *testing.T) {
`0.002 `,
`0.003 `,
`select `,
- `select name from test_table limit 1000 `,
+ regexp.QuoteMeta(`select name, 'inject <script>alert();</script>' from test_table limit 1000 `),
`1 `,
`1000 `,
` `,
diff --git a/go/vt/vtgate/safe_session_test.go b/go/vt/vtgate/safe_session_test.go
deleted file mode 100644
index ce681fe7fd3..00000000000
--- a/go/vt/vtgate/safe_session_test.go
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
-Copyright 2020 The Vitess Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package vtgate
-
-import (
- "reflect"
- "testing"
- "time"
-
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
-
- querypb "vitess.io/vitess/go/vt/proto/query"
- topodatapb "vitess.io/vitess/go/vt/proto/topodata"
- vtgatepb "vitess.io/vitess/go/vt/proto/vtgate"
-)
-
-func TestFailToMultiShardWhenSetToSingleDb(t *testing.T) {
- session := NewSafeSession(&vtgatepb.Session{
- InTransaction: true, TransactionMode: vtgatepb.TransactionMode_SINGLE,
- })
-
- sess0 := &vtgatepb.Session_ShardSession{
- Target: &querypb.Target{Keyspace: "keyspace", Shard: "0"},
- TabletAlias: &topodatapb.TabletAlias{Cell: "cell", Uid: 0},
- TransactionId: 1,
- }
- sess1 := &vtgatepb.Session_ShardSession{
- Target: &querypb.Target{Keyspace: "keyspace", Shard: "1"},
- TabletAlias: &topodatapb.TabletAlias{Cell: "cell", Uid: 1},
- TransactionId: 1,
- }
-
- err := session.AppendOrUpdate(sess0, vtgatepb.TransactionMode_SINGLE)
- require.NoError(t, err)
- err = session.AppendOrUpdate(sess1, vtgatepb.TransactionMode_SINGLE)
- require.Error(t, err)
-}
-
-func TestPrequeries(t *testing.T) {
- session := NewSafeSession(&vtgatepb.Session{
- SystemVariables: map[string]string{
- "s1": "'apa'",
- "s2": "42",
- },
- })
-
- want := []string{"set s1 = 'apa', s2 = 42"}
- preQueries := session.SetPreQueries()
-
- if !reflect.DeepEqual(want, preQueries) {
- t.Errorf("got %v but wanted %v", preQueries, want)
- }
-}
-
-func TestTimeZone(t *testing.T) {
- testCases := []struct {
- tz string
- want string
- }{
- {
- tz: "'Europe/Amsterdam'",
- want: "Europe/Amsterdam",
- },
- {
- tz: "'+02:00'",
- want: "UTC+02:00",
- },
- {
- tz: "foo",
- want: (*time.Location)(nil).String(),
- },
- }
-
- for _, tc := range testCases {
- t.Run(tc.tz, func(t *testing.T) {
- session := NewSafeSession(&vtgatepb.Session{
- SystemVariables: map[string]string{
- "time_zone": tc.tz,
- },
- })
-
- assert.Equal(t, tc.want, session.TimeZone().String())
- })
- }
-}
diff --git a/go/vt/vtgate/scatter_conn.go b/go/vt/vtgate/scatter_conn.go
index f7db598127e..6e2cf9ad8ba 100644
--- a/go/vt/vtgate/scatter_conn.go
+++ b/go/vt/vtgate/scatter_conn.go
@@ -24,26 +24,25 @@ import (
"sync/atomic"
"time"
- "vitess.io/vitess/go/mysql/sqlerror"
- "vitess.io/vitess/go/vt/sqlparser"
-
"google.golang.org/protobuf/proto"
+ "vitess.io/vitess/go/mysql/sqlerror"
"vitess.io/vitess/go/sqltypes"
"vitess.io/vitess/go/stats"
"vitess.io/vitess/go/vt/concurrency"
"vitess.io/vitess/go/vt/discovery"
"vitess.io/vitess/go/vt/log"
+ querypb "vitess.io/vitess/go/vt/proto/query"
+ topodatapb "vitess.io/vitess/go/vt/proto/topodata"
+ vtgatepb "vitess.io/vitess/go/vt/proto/vtgate"
+ vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc"
+ "vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/srvtopo"
"vitess.io/vitess/go/vt/topo/topoproto"
"vitess.io/vitess/go/vt/vterrors"
"vitess.io/vitess/go/vt/vtgate/engine"
+ econtext "vitess.io/vitess/go/vt/vtgate/executorcontext"
"vitess.io/vitess/go/vt/vttablet/queryservice"
-
- querypb "vitess.io/vitess/go/vt/proto/query"
- topodatapb "vitess.io/vitess/go/vt/proto/topodata"
- vtgatepb "vitess.io/vitess/go/vt/proto/vtgate"
- vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc"
)
// ScatterConn is used for executing queries across
@@ -73,13 +72,10 @@ type shardActionFunc func(rs *srvtopo.ResolvedShard, i int) error
type shardActionTransactionFunc func(rs *srvtopo.ResolvedShard, i int, shardActionInfo *shardActionInfo) (*shardActionInfo, error)
type (
- resultsObserver interface {
- observe(*sqltypes.Result)
- }
nullResultsObserver struct{}
)
-func (nullResultsObserver) observe(*sqltypes.Result) {}
+func (nullResultsObserver) Observe(*sqltypes.Result) {}
// NewScatterConn creates a new ScatterConn.
func NewScatterConn(statsName string, txConn *TxConn, gw *TabletGateway) *ScatterConn {
@@ -108,7 +104,7 @@ func (stc *ScatterConn) startAction(name string, target *querypb.Target) (time.T
return startTime, statsKey
}
-func (stc *ScatterConn) endAction(startTime time.Time, allErrors *concurrency.AllErrorRecorder, statsKey []string, err *error, session *SafeSession) {
+func (stc *ScatterConn) endAction(startTime time.Time, allErrors *concurrency.AllErrorRecorder, statsKey []string, err *error, session *econtext.SafeSession) {
if *err != nil {
allErrors.RecordError(*err)
// Don't increment the error counter for duplicate
@@ -152,10 +148,10 @@ func (stc *ScatterConn) ExecuteMultiShard(
primitive engine.Primitive,
rss []*srvtopo.ResolvedShard,
queries []*querypb.BoundQuery,
- session *SafeSession,
+ session *econtext.SafeSession,
autocommit bool,
ignoreMaxMemoryRows bool,
- resultsObserver resultsObserver,
+ resultsObserver econtext.ResultsObserver,
) (qr *sqltypes.Result, errs []error) {
if len(rss) != len(queries) {
@@ -166,7 +162,7 @@ func (stc *ScatterConn) ExecuteMultiShard(
var mu sync.Mutex
qr = new(sqltypes.Result)
- if session.InLockSession() && session.TriggerLockHeartBeat() {
+ if session.InLockSession() && triggerLockHeartBeat(session) {
go stc.runLockQuery(ctx, session)
}
@@ -224,6 +220,7 @@ func (stc *ScatterConn) ExecuteMultiShard(
retryRequest(func() {
// we seem to have lost our connection. it was a reserved connection, let's try to recreate it
info.actionNeeded = reserve
+ info.ignoreOldSession = true
var state queryservice.ReservedState
state, innerqr, err = qs.ReserveExecute(ctx, rs.Target, session.SetPreQueries(), queries[i].Sql, queries[i].BindVariables, 0 /*transactionId*/, opts)
reservedID = state.ReservedID
@@ -239,6 +236,7 @@ func (stc *ScatterConn) ExecuteMultiShard(
retryRequest(func() {
// we seem to have lost our connection. it was a reserved connection, let's try to recreate it
info.actionNeeded = reserveBegin
+ info.ignoreOldSession = true
var state queryservice.ReservedTransactionState
state, innerqr, err = qs.ReserveBeginExecute(ctx, rs.Target, session.SetPreQueries(), session.SavePoints(), queries[i].Sql, queries[i].BindVariables, opts)
transactionID = state.TransactionID
@@ -260,10 +258,10 @@ func (stc *ScatterConn) ExecuteMultiShard(
default:
return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "[BUG] unexpected actionNeeded on query execution: %v", info.actionNeeded)
}
- session.logging.log(primitive, rs.Target, rs.Gateway, queries[i].Sql, info.actionNeeded == begin || info.actionNeeded == reserveBegin, queries[i].BindVariables)
+ session.Log(primitive, rs.Target, rs.Gateway, queries[i].Sql, info.actionNeeded == begin || info.actionNeeded == reserveBegin, queries[i].BindVariables)
// We need to new shard info irrespective of the error.
- newInfo := info.updateTransactionAndReservedID(transactionID, reservedID, alias)
+ newInfo := info.updateTransactionAndReservedID(transactionID, reservedID, alias, innerqr)
if err != nil {
return newInfo, err
}
@@ -271,7 +269,7 @@ func (stc *ScatterConn) ExecuteMultiShard(
defer mu.Unlock()
if innerqr != nil {
- resultsObserver.observe(innerqr)
+ resultsObserver.Observe(innerqr)
}
// Don't append more rows if row count is exceeded.
@@ -289,7 +287,13 @@ func (stc *ScatterConn) ExecuteMultiShard(
return qr, allErrors.GetErrors()
}
-func (stc *ScatterConn) runLockQuery(ctx context.Context, session *SafeSession) {
+func triggerLockHeartBeat(session *econtext.SafeSession) bool {
+ now := time.Now().Unix()
+ lastHeartbeat := session.GetLockHeartbeat()
+ return now-lastHeartbeat >= int64(lockHeartbeatTime.Seconds())
+}
+
+func (stc *ScatterConn) runLockQuery(ctx context.Context, session *econtext.SafeSession) {
rs := &srvtopo.ResolvedShard{Target: session.LockSession.Target, Gateway: stc.gateway}
query := &querypb.BoundQuery{Sql: "select 1", BindVariables: nil}
_, lockErr := stc.ExecuteLock(ctx, rs, query, session, sqlparser.IsUsedLock)
@@ -298,7 +302,7 @@ func (stc *ScatterConn) runLockQuery(ctx context.Context, session *SafeSession)
}
}
-func checkAndResetShardSession(info *shardActionInfo, err error, session *SafeSession, target *querypb.Target) reset {
+func checkAndResetShardSession(info *shardActionInfo, err error, session *econtext.SafeSession, target *querypb.Target) reset {
retry := none
if info.reservedID != 0 && info.transactionID == 0 {
if wasConnectionClosed(err) {
@@ -314,7 +318,7 @@ func checkAndResetShardSession(info *shardActionInfo, err error, session *SafeSe
return retry
}
-func getQueryService(ctx context.Context, rs *srvtopo.ResolvedShard, info *shardActionInfo, session *SafeSession, skipReset bool) (queryservice.QueryService, error) {
+func getQueryService(ctx context.Context, rs *srvtopo.ResolvedShard, info *shardActionInfo, session *econtext.SafeSession, skipReset bool) (queryservice.QueryService, error) {
if info.alias == nil {
return rs.Gateway, nil
}
@@ -365,18 +369,18 @@ func (stc *ScatterConn) StreamExecuteMulti(
query string,
rss []*srvtopo.ResolvedShard,
bindVars []map[string]*querypb.BindVariable,
- session *SafeSession,
+ session *econtext.SafeSession,
autocommit bool,
callback func(reply *sqltypes.Result) error,
- resultsObserver resultsObserver,
+ resultsObserver econtext.ResultsObserver,
) []error {
- if session.InLockSession() && session.TriggerLockHeartBeat() {
+ if session.InLockSession() && triggerLockHeartBeat(session) {
go stc.runLockQuery(ctx, session)
}
observedCallback := func(reply *sqltypes.Result) error {
if reply != nil {
- resultsObserver.observe(reply)
+ resultsObserver.Observe(reply)
}
return callback(reply)
}
@@ -469,10 +473,10 @@ func (stc *ScatterConn) StreamExecuteMulti(
default:
return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "[BUG] unexpected actionNeeded on query execution: %v", info.actionNeeded)
}
- session.logging.log(primitive, rs.Target, rs.Gateway, query, info.actionNeeded == begin || info.actionNeeded == reserveBegin, bindVars[i])
+ session.Log(primitive, rs.Target, rs.Gateway, query, info.actionNeeded == begin || info.actionNeeded == reserveBegin, bindVars[i])
- // We need to new shard info irrespective of the error.
- newInfo := info.updateTransactionAndReservedID(transactionID, reservedID, alias)
+ // We need the new shard info irrespective of the error.
+ newInfo := info.updateTransactionAndReservedID(transactionID, reservedID, alias, nil)
if err != nil {
return newInfo, err
}
@@ -604,7 +608,7 @@ func (stc *ScatterConn) multiGo(
startTime, statsKey := stc.startAction(name, rs.Target)
// Send a dummy session.
// TODO(sougou): plumb a real session through this call.
- defer stc.endAction(startTime, allErrors, statsKey, &err, NewSafeSession(nil))
+ defer stc.endAction(startTime, allErrors, statsKey, &err, econtext.NewSafeSession(nil))
err = action(rs, i)
}
@@ -646,7 +650,7 @@ func (stc *ScatterConn) multiGoTransaction(
ctx context.Context,
name string,
rss []*srvtopo.ResolvedShard,
- session *SafeSession,
+ session *econtext.SafeSession,
autocommit bool,
action shardActionTransactionFunc,
) (allErrors *concurrency.AllErrorRecorder) {
@@ -662,21 +666,24 @@ func (stc *ScatterConn) multiGoTransaction(
startTime, statsKey := stc.startAction(name, rs.Target)
defer stc.endAction(startTime, allErrors, statsKey, &err, session)
- shardActionInfo, err := actionInfo(ctx, rs.Target, session, autocommit, stc.txConn.mode)
+ info, shardSession, err := actionInfo(ctx, rs.Target, session, autocommit, stc.txConn.mode)
if err != nil {
return
}
- updated, err := action(rs, i, shardActionInfo)
- if updated == nil {
+ info, err = action(rs, i, info)
+ if info == nil {
return
}
- if updated.actionNeeded != nothing && (updated.transactionID != 0 || updated.reservedID != 0) {
- appendErr := session.AppendOrUpdate(&vtgatepb.Session_ShardSession{
- Target: rs.Target,
- TransactionId: updated.transactionID,
- ReservedId: updated.reservedID,
- TabletAlias: updated.alias,
- }, stc.txConn.mode)
+ if info.ignoreOldSession {
+ shardSession = nil
+ }
+ if shardSession != nil && info.rowsAffected {
+ // We might not always update or append in the session.
+ // We need to track if rows were affected in the transaction.
+ shardSession.RowsAffected = info.rowsAffected
+ }
+ if info.actionNeeded != nothing && (info.transactionID != 0 || info.reservedID != 0) {
+ appendErr := session.AppendOrUpdate(rs.Target, info, shardSession, stc.txConn.mode)
if appendErr != nil {
err = appendErr
}
@@ -727,7 +734,7 @@ func (stc *ScatterConn) multiGoTransaction(
// It returns an error recorder in which each shard error is recorded positionally,
// i.e. if rss[2] had an error, then the error recorder will store that error
// in the second position.
-func (stc *ScatterConn) ExecuteLock(ctx context.Context, rs *srvtopo.ResolvedShard, query *querypb.BoundQuery, session *SafeSession, lockFuncType sqlparser.LockingFuncType) (*sqltypes.Result, error) {
+func (stc *ScatterConn) ExecuteLock(ctx context.Context, rs *srvtopo.ResolvedShard, query *querypb.BoundQuery, session *econtext.SafeSession, lockFuncType sqlparser.LockingFuncType) (*sqltypes.Result, error) {
var (
qr *sqltypes.Result
@@ -830,25 +837,25 @@ func requireNewQS(err error, target *querypb.Target) bool {
}
// actionInfo looks at the current session, and returns information about what needs to be done for this tablet
-func actionInfo(ctx context.Context, target *querypb.Target, session *SafeSession, autocommit bool, txMode vtgatepb.TransactionMode) (*shardActionInfo, error) {
+func actionInfo(ctx context.Context, target *querypb.Target, session *econtext.SafeSession, autocommit bool, txMode vtgatepb.TransactionMode) (*shardActionInfo, *vtgatepb.Session_ShardSession, error) {
if !(session.InTransaction() || session.InReservedConn()) {
- return &shardActionInfo{}, nil
+ return &shardActionInfo{}, nil, nil
}
ignoreSession := ctx.Value(engine.IgnoreReserveTxn)
if ignoreSession != nil {
- return &shardActionInfo{}, nil
+ return &shardActionInfo{}, nil, nil
}
// No need to protect ourselves from the race condition between
// Find and AppendOrUpdate. The higher level functions ensure that no
// duplicate (target) tuples can execute
// this at the same time.
- transactionID, reservedID, alias, err := session.FindAndChangeSessionIfInSingleTxMode(target.Keyspace, target.Shard, target.TabletType, txMode)
+ shardSession, err := session.FindAndChangeSessionIfInSingleTxMode(target.Keyspace, target.Shard, target.TabletType, txMode)
if err != nil {
- return nil, err
+ return nil, nil, err
}
- shouldReserve := session.InReservedConn() && reservedID == 0
- shouldBegin := session.InTransaction() && transactionID == 0 && !autocommit
+ shouldReserve := session.InReservedConn() && (shardSession == nil || shardSession.ReservedId == 0)
+ shouldBegin := session.InTransaction() && (shardSession == nil || shardSession.TransactionId == 0) && !autocommit
var act = nothing
switch {
@@ -860,16 +867,20 @@ func actionInfo(ctx context.Context, target *querypb.Target, session *SafeSessio
act = begin
}
- return &shardActionInfo{
- actionNeeded: act,
- transactionID: transactionID,
- reservedID: reservedID,
- alias: alias,
- }, nil
+ info := &shardActionInfo{
+ actionNeeded: act,
+ }
+ if shardSession != nil {
+ info.transactionID = shardSession.TransactionId
+ info.reservedID = shardSession.ReservedId
+ info.alias = shardSession.TabletAlias
+ info.rowsAffected = shardSession.RowsAffected
+ }
+ return info, shardSession, nil
}
// lockInfo looks at the current session, and returns information about what needs to be done for this tablet
-func lockInfo(target *querypb.Target, session *SafeSession, lockFuncType sqlparser.LockingFuncType) (*shardActionInfo, error) {
+func lockInfo(target *querypb.Target, session *econtext.SafeSession, lockFuncType sqlparser.LockingFuncType) (*shardActionInfo, error) {
info := &shardActionInfo{actionNeeded: nothing}
if session.LockSession != nil {
if !proto.Equal(target, session.LockSession.Target) {
@@ -894,10 +905,35 @@ type shardActionInfo struct {
actionNeeded actionNeeded
reservedID, transactionID int64
alias *topodatapb.TabletAlias
+
+ // ignoreOldSession is used when there is a retry on the same shard due to connection loss for a reserved connection.
+ // The old reference should be ignored and new shard session should be added to the session.
+ ignoreOldSession bool
+ rowsAffected bool
+}
+
+func (sai *shardActionInfo) TransactionID() int64 {
+ return sai.transactionID
+}
+
+func (sai *shardActionInfo) ReservedID() int64 {
+ return sai.reservedID
+}
+
+func (sai *shardActionInfo) RowsAffected() bool {
+ return sai.rowsAffected
+}
+
+func (sai *shardActionInfo) Alias() *topodatapb.TabletAlias {
+ return sai.alias
}
-func (sai *shardActionInfo) updateTransactionAndReservedID(txID int64, rID int64, alias *topodatapb.TabletAlias) *shardActionInfo {
- if txID == sai.transactionID && rID == sai.reservedID {
+func (sai *shardActionInfo) updateTransactionAndReservedID(txID int64, rID int64, alias *topodatapb.TabletAlias, qr *sqltypes.Result) *shardActionInfo {
+ firstTimeRowsAffected := false
+ if txID != 0 && qr != nil && !sai.rowsAffected {
+ firstTimeRowsAffected = qr.RowsAffected > 0
+ }
+ if txID == sai.transactionID && rID == sai.reservedID && !firstTimeRowsAffected {
// As transaction id and reserved id have not changed, there is nothing to update in session shard sessions.
return nil
}
@@ -905,6 +941,7 @@ func (sai *shardActionInfo) updateTransactionAndReservedID(txID int64, rID int64
newInfo.reservedID = rID
newInfo.transactionID = txID
newInfo.alias = alias
+ newInfo.rowsAffected = firstTimeRowsAffected
return &newInfo
}
diff --git a/go/vt/vtgate/scatter_conn_test.go b/go/vt/vtgate/scatter_conn_test.go
index c5d4f350433..ab8680ca5e6 100644
--- a/go/vt/vtgate/scatter_conn_test.go
+++ b/go/vt/vtgate/scatter_conn_test.go
@@ -21,6 +21,7 @@ import (
"testing"
"vitess.io/vitess/go/vt/log"
+ econtext "vitess.io/vitess/go/vt/vtgate/executorcontext"
"vitess.io/vitess/go/mysql/sqlerror"
vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc"
@@ -100,7 +101,7 @@ func TestExecuteFailOnAutocommit(t *testing.T) {
},
Autocommit: false,
}
- _, errs := sc.ExecuteMultiShard(ctx, nil, rss, queries, NewSafeSession(session), true /*autocommit*/, false, nullResultsObserver{})
+ _, errs := sc.ExecuteMultiShard(ctx, nil, rss, queries, econtext.NewSafeSession(session), true /*autocommit*/, false, nullResultsObserver{})
err := vterrors.Aggregate(errs)
require.Error(t, err)
require.Contains(t, err.Error(), "in autocommit mode, transactionID should be zero but was: 123")
@@ -183,7 +184,7 @@ func TestExecutePanic(t *testing.T) {
require.Contains(t, logMessage, "(*ScatterConn).multiGoTransaction")
}()
- _, _ = sc.ExecuteMultiShard(ctx, nil, rss, queries, NewSafeSession(session), true /*autocommit*/, false, nullResultsObserver{})
+ _, _ = sc.ExecuteMultiShard(ctx, nil, rss, queries, econtext.NewSafeSession(session), true /*autocommit*/, false, nullResultsObserver{})
}
@@ -204,7 +205,7 @@ func TestReservedOnMultiReplica(t *testing.T) {
res := srvtopo.NewResolver(newSandboxForCells(ctx, []string{"aa"}), sc.gateway, "aa")
- session := NewSafeSession(&vtgatepb.Session{InTransaction: false, InReservedConn: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: false, InReservedConn: true})
destinations := []key.Destination{key.DestinationShard("0")}
for i := 0; i < 10; i++ {
executeOnShards(t, ctx, res, keyspace, sc, session, destinations)
@@ -351,7 +352,7 @@ func TestReservedBeginTableDriven(t *testing.T) {
res := srvtopo.NewResolver(newSandboxForCells(ctx, []string{"aa"}), sc.gateway, "aa")
t.Run(test.name, func(t *testing.T) {
- session := NewSafeSession(&vtgatepb.Session{})
+ session := econtext.NewSafeSession(&vtgatepb.Session{})
for _, action := range test.actions {
session.Session.InTransaction = action.transaction
session.Session.InReservedConn = action.reserved
@@ -384,7 +385,7 @@ func TestReservedConnFail(t *testing.T) {
_ = hc.AddTestTablet("aa", "1", 1, keyspace, "1", topodatapb.TabletType_REPLICA, true, 1, nil)
res := srvtopo.NewResolver(newSandboxForCells(ctx, []string{"aa"}), sc.gateway, "aa")
- session := NewSafeSession(&vtgatepb.Session{InTransaction: false, InReservedConn: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: false, InReservedConn: true})
destinations := []key.Destination{key.DestinationShard("0")}
executeOnShards(t, ctx, res, keyspace, sc, session, destinations)
diff --git a/go/vt/vtgate/semantics/early_rewriter_test.go b/go/vt/vtgate/semantics/early_rewriter_test.go
index 4f550d46392..1ec7786a46c 100644
--- a/go/vt/vtgate/semantics/early_rewriter_test.go
+++ b/go/vt/vtgate/semantics/early_rewriter_test.go
@@ -840,6 +840,9 @@ func TestRewriteNot(t *testing.T) {
}, {
sql: "select a from t1 where not a > 12",
expected: "select a from t1 where a <= 12",
+ }, {
+ sql: "select (not (1 like ('a' is null)))",
+ expected: "select 1 not like ('a' is null) from dual",
}}
for _, tcase := range tcases {
t.Run(tcase.sql, func(t *testing.T) {
diff --git a/go/vt/vtgate/tabletgateway.go b/go/vt/vtgate/tabletgateway.go
index 7ed10d3813b..c36c6981fa2 100644
--- a/go/vt/vtgate/tabletgateway.go
+++ b/go/vt/vtgate/tabletgateway.go
@@ -310,7 +310,7 @@ func (gw *TabletGateway) withRetry(ctx context.Context, target *querypb.Target,
// b) no transaction was created yet.
if gw.buffer != nil && !bufferedOnce && !inTransaction && target.TabletType == topodatapb.TabletType_PRIMARY {
// The next call blocks if we should buffer during a failover.
- retryDone, bufferErr := gw.buffer.WaitForFailoverEnd(ctx, target.Keyspace, target.Shard, err)
+ retryDone, bufferErr := gw.buffer.WaitForFailoverEnd(ctx, target.Keyspace, target.Shard, gw.kev, err)
// Request may have been buffered.
if retryDone != nil {
diff --git a/go/vt/vtgate/tabletgateway_flaky_test.go b/go/vt/vtgate/tabletgateway_flaky_test.go
index e74f613b682..124997bea9e 100644
--- a/go/vt/vtgate/tabletgateway_flaky_test.go
+++ b/go/vt/vtgate/tabletgateway_flaky_test.go
@@ -20,6 +20,8 @@ import (
"testing"
"time"
+ econtext "vitess.io/vitess/go/vt/vtgate/executorcontext"
+
"github.com/stretchr/testify/require"
"vitess.io/vitess/go/mysql/collations"
@@ -53,7 +55,7 @@ func TestGatewayBufferingWhenPrimarySwitchesServingState(t *testing.T) {
TabletType: tabletType,
}
- ts := &fakeTopoServer{}
+ ts := &econtext.FakeTopoServer{}
// create a new fake health check. We want to check the buffering code which uses Subscribe, so we must also pass a channel
hc := discovery.NewFakeHealthCheck(make(chan *discovery.TabletHealth))
// create a new tablet gateway
@@ -156,7 +158,7 @@ func TestGatewayBufferingWhileReparenting(t *testing.T) {
TabletType: tabletType,
}
- ts := &fakeTopoServer{}
+ ts := &econtext.FakeTopoServer{}
// create a new fake health check. We want to check the buffering code which uses Subscribe, so we must also pass a channel
hc := discovery.NewFakeHealthCheck(make(chan *discovery.TabletHealth))
// create a new tablet gateway
@@ -234,6 +236,7 @@ func TestGatewayBufferingWhileReparenting(t *testing.T) {
hc.SetTabletType(primaryTablet, topodatapb.TabletType_REPLICA)
hc.Broadcast(primaryTablet)
hc.SetTabletType(replicaTablet, topodatapb.TabletType_PRIMARY)
+ hc.SetPrimaryTimestamp(replicaTablet, 100) // We set a higher timestamp than before to simulate a PRS.
hc.SetServing(replicaTablet, true)
hc.Broadcast(replicaTablet)
@@ -245,7 +248,7 @@ outer:
require.Fail(t, "timed out - could not verify the new primary")
case <-time.After(10 * time.Millisecond):
newPrimary, shouldBuffer := tg.kev.ShouldStartBufferingForTarget(ctx, target)
- if newPrimary != nil && newPrimary.Uid == 1 && !shouldBuffer {
+ if newPrimary != nil && newPrimary.Uid == replicaTablet.Alias.Uid && !shouldBuffer {
break outer
}
}
@@ -285,7 +288,7 @@ func TestInconsistentStateDetectedBuffering(t *testing.T) {
TabletType: tabletType,
}
- ts := &fakeTopoServer{}
+ ts := &econtext.FakeTopoServer{}
// create a new fake health check. We want to check the buffering code which uses Subscribe, so we must also pass a channel
hc := discovery.NewFakeHealthCheck(make(chan *discovery.TabletHealth))
// create a new tablet gateway
diff --git a/go/vt/vtgate/tabletgateway_test.go b/go/vt/vtgate/tabletgateway_test.go
index 2aafb78af99..b318cb84981 100644
--- a/go/vt/vtgate/tabletgateway_test.go
+++ b/go/vt/vtgate/tabletgateway_test.go
@@ -22,6 +22,8 @@ import (
"strings"
"testing"
+ econtext "vitess.io/vitess/go/vt/vtgate/executorcontext"
+
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
@@ -109,7 +111,7 @@ func TestTabletGatewayShuffleTablets(t *testing.T) {
ctx := utils.LeakCheckContext(t)
hc := discovery.NewFakeHealthCheck(nil)
- ts := &fakeTopoServer{}
+ ts := &econtext.FakeTopoServer{}
tg := NewTabletGateway(ctx, hc, ts, "local")
defer tg.Close(ctx)
@@ -183,7 +185,7 @@ func TestTabletGatewayReplicaTransactionError(t *testing.T) {
TabletType: tabletType,
}
hc := discovery.NewFakeHealthCheck(nil)
- ts := &fakeTopoServer{}
+ ts := &econtext.FakeTopoServer{}
tg := NewTabletGateway(ctx, hc, ts, "cell")
defer tg.Close(ctx)
@@ -218,7 +220,7 @@ func testTabletGatewayGenericHelper(t *testing.T, ctx context.Context, f func(ct
TabletType: tabletType,
}
hc := discovery.NewFakeHealthCheck(nil)
- ts := &fakeTopoServer{}
+ ts := &econtext.FakeTopoServer{}
tg := NewTabletGateway(ctx, hc, ts, "cell")
defer tg.Close(ctx)
// no tablet
@@ -306,7 +308,7 @@ func testTabletGatewayTransact(t *testing.T, ctx context.Context, f func(ctx con
TabletType: tabletType,
}
hc := discovery.NewFakeHealthCheck(nil)
- ts := &fakeTopoServer{}
+ ts := &econtext.FakeTopoServer{}
tg := NewTabletGateway(ctx, hc, ts, "cell")
defer tg.Close(ctx)
@@ -348,7 +350,7 @@ func verifyShardErrors(t *testing.T, err error, wantErrors []string, wantCode vt
// TestWithRetry tests the functionality of withRetry function in different circumstances.
func TestWithRetry(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
- tg := NewTabletGateway(ctx, discovery.NewFakeHealthCheck(nil), &fakeTopoServer{}, "cell")
+ tg := NewTabletGateway(ctx, discovery.NewFakeHealthCheck(nil), &econtext.FakeTopoServer{}, "cell")
tg.kev = discovery.NewKeyspaceEventWatcher(ctx, tg.srvTopoServer, tg.hc, tg.localCell)
defer func() {
cancel()
diff --git a/go/vt/vtgate/testdata/executor_vexplain.json b/go/vt/vtgate/testdata/executor_vexplain.json
new file mode 100644
index 00000000000..2b893588aa5
--- /dev/null
+++ b/go/vt/vtgate/testdata/executor_vexplain.json
@@ -0,0 +1,129 @@
+[
+ {
+ "query": "select count(*), col2 from music group by col2",
+ "expected": {
+ "statementType": "SELECT",
+ "groupingColumns": [
+ "music.col2"
+ ],
+ "selectColumns": [
+ "music.col2"
+ ]
+ }
+ },
+ {
+ "query": "select * from user u join user_extra ue on u.id = ue.user_id where u.col1 \u003e 100 and ue.noLimit = 'foo'",
+ "expected": {
+ "statementType": "SELECT",
+ "filterColumns": [
+ "`user`.col1 gt",
+ "user_extra.noLimit ="
+ ],
+ "joinPredicates": [
+ "`user`.id = user_extra.user_id"
+ ]
+ }
+ },
+ {
+ "query": "select * from user_extra ue, user u where ue.noLimit = 'foo' and u.col1 \u003e 100 and ue.user_id = u.id",
+ "expected": {
+ "statementType": "SELECT",
+ "filterColumns": [
+ "`user`.col1 gt",
+ "user_extra.noLimit ="
+ ],
+ "joinPredicates": [
+ "`user`.id = user_extra.user_id"
+ ]
+ }
+ },
+ {
+ "query": "select u.foo, ue.bar, count(*) from user u join user_extra ue on u.id = ue.user_id where u.name = 'John Doe' group by 1, 2",
+ "expected": {
+ "statementType": "SELECT",
+ "groupingColumns": [
+ "`user`.foo",
+ "user_extra.bar"
+ ],
+ "filterColumns": [
+ "`user`.`name` ="
+ ],
+ "selectColumns": [
+ "`user`.foo",
+ "user_extra.bar"
+ ],
+ "joinPredicates": [
+ "`user`.id = user_extra.user_id"
+ ]
+ }
+ },
+ {
+ "query": "select * from (select * from user) as derived where derived.amount \u003e 1000",
+ "expected": {
+ "statementType": "SELECT"
+ }
+ },
+ {
+ "query": "select name, sum(amount) from user group by name",
+ "expected": {
+ "statementType": "SELECT",
+ "groupingColumns": [
+ "`user`.`name`"
+ ],
+ "selectColumns": [
+ "`user`.`name`",
+ "`user`.amount"
+ ]
+ }
+ },
+ {
+ "query": "select name from user where age \u003e 30",
+ "expected": {
+ "statementType": "SELECT",
+ "filterColumns": [
+ "`user`.age gt"
+ ],
+ "selectColumns": [
+ "`user`.`name`"
+ ]
+ }
+ },
+ {
+ "query": "select * from user where name = 'apa' union select * from user_extra where name = 'monkey'",
+ "expected": {
+ "statementType": "SELECT",
+ "filterColumns": [
+ "`user`.`name` =",
+ "user_extra.`name` ="
+ ]
+ }
+ },
+ {
+ "query": "update user set name = 'Jane Doe' where id = 1",
+ "expected": {
+ "statementType": "UPDATE",
+ "filterColumns": [
+ "`user`.id ="
+ ]
+ }
+ },
+ {
+ "query": "delete from user where order_date \u003c '2023-01-01'",
+ "expected": {
+ "statementType": "DELETE",
+ "filterColumns": [
+ "`user`.order_date lt"
+ ]
+ }
+ },
+ {
+ "query": "select * from user where name between 'A' and 'C'",
+ "expected": {
+ "statementType": "SELECT",
+ "filterColumns": [
+ "`user`.`name` ge",
+ "`user`.`name` le"
+ ]
+ }
+ }
+]
\ No newline at end of file
diff --git a/go/vt/vtgate/tx_conn.go b/go/vt/vtgate/tx_conn.go
index 372c3fc6164..cadb1392eca 100644
--- a/go/vt/vtgate/tx_conn.go
+++ b/go/vt/vtgate/tx_conn.go
@@ -21,6 +21,7 @@ import (
"fmt"
"strings"
"sync"
+ "time"
"vitess.io/vitess/go/mysql/sqlerror"
"vitess.io/vitess/go/vt/concurrency"
@@ -32,6 +33,7 @@ import (
vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc"
"vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/vterrors"
+ econtext "vitess.io/vitess/go/vt/vtgate/executorcontext"
"vitess.io/vitess/go/vt/vttablet/queryservice"
)
@@ -69,9 +71,17 @@ const (
Commit2pcConclude
)
+var phaseMessage = map[commitPhase]string{
+ Commit2pcCreateTransaction: "Create Transaction",
+ Commit2pcPrepare: "Prepare",
+ Commit2pcStartCommit: "Start Commit",
+ Commit2pcPrepareCommit: "Prepare Commit",
+ Commit2pcConclude: "Conclude",
+}
+
// Begin begins a new transaction. If one is already in progress, it commits it
// and starts a new one.
-func (txc *TxConn) Begin(ctx context.Context, session *SafeSession, txAccessModes []sqlparser.TxAccessMode) error {
+func (txc *TxConn) Begin(ctx context.Context, session *econtext.SafeSession, txAccessModes []sqlparser.TxAccessMode) error {
if session.InTransaction() {
if err := txc.Commit(ctx, session); err != nil {
return err
@@ -93,7 +103,7 @@ func (txc *TxConn) Begin(ctx context.Context, session *SafeSession, txAccessMode
// Commit commits the current transaction. The type of commit can be
// best effort or 2pc depending on the session setting.
-func (txc *TxConn) Commit(ctx context.Context, session *SafeSession) error {
+func (txc *TxConn) Commit(ctx context.Context, session *econtext.SafeSession) error {
defer session.ResetTx()
if !session.InTransaction() {
return nil
@@ -107,10 +117,48 @@ func (txc *TxConn) Commit(ctx context.Context, session *SafeSession) error {
twopc = txc.mode == vtgatepb.TransactionMode_TWOPC
}
+ defer recordCommitTime(session, twopc, time.Now())
+
+ err := txc.runSessions(ctx, session.PreSessions, session.GetLogger(), txc.commitShard)
+ if err != nil {
+ _ = txc.Release(ctx, session)
+ return err
+ }
+
if twopc {
- return txc.commit2PC(ctx, session)
+ err = txc.commit2PC(ctx, session)
+ } else {
+ err = txc.commitNormal(ctx, session)
+ }
+
+ if err != nil {
+ _ = txc.Release(ctx, session)
+ return err
+ }
+
+ err = txc.runSessions(ctx, session.PostSessions, session.GetLogger(), txc.commitShard)
+ if err != nil {
+ // If last commit fails, there will be nothing to rollback.
+ session.RecordWarning(&querypb.QueryWarning{Message: fmt.Sprintf("post-operation transaction had an error: %v", err)})
+ // With reserved connection we should release them.
+ if session.InReservedConn() {
+ _ = txc.Release(ctx, session)
+ }
+ }
+ return nil
+}
+
+func recordCommitTime(session *econtext.SafeSession, twopc bool, startTime time.Time) {
+ switch {
+ case len(session.ShardSessions) == 0:
+ // No-op
+ case len(session.ShardSessions) == 1:
+ commitMode.Record("Single", startTime)
+ case twopc:
+ commitMode.Record("TwoPC", startTime)
+ default:
+ commitMode.Record("Multi", startTime)
}
- return txc.commitNormal(ctx, session)
}
func (txc *TxConn) queryService(ctx context.Context, alias *topodatapb.TabletAlias) (queryservice.QueryService, error) {
@@ -120,7 +168,7 @@ func (txc *TxConn) queryService(ctx context.Context, alias *topodatapb.TabletAli
return txc.tabletGateway.QueryServiceByAlias(ctx, alias, nil)
}
-func (txc *TxConn) commitShard(ctx context.Context, s *vtgatepb.Session_ShardSession, logging *executeLogger) error {
+func (txc *TxConn) commitShard(ctx context.Context, s *vtgatepb.Session_ShardSession, logging *econtext.ExecuteLogger) error {
if s.TransactionId == 0 {
return nil
}
@@ -136,19 +184,14 @@ func (txc *TxConn) commitShard(ctx context.Context, s *vtgatepb.Session_ShardSes
}
s.TransactionId = 0
s.ReservedId = reservedID
- logging.log(nil, s.Target, nil, "commit", false, nil)
+ logging.Log(nil, s.Target, nil, "commit", false, nil)
return nil
}
-func (txc *TxConn) commitNormal(ctx context.Context, session *SafeSession) error {
- if err := txc.runSessions(ctx, session.PreSessions, session.logging, txc.commitShard); err != nil {
- _ = txc.Release(ctx, session)
- return err
- }
-
+func (txc *TxConn) commitNormal(ctx context.Context, session *econtext.SafeSession) error {
// Retain backward compatibility on commit order for the normal session.
for i, shardSession := range session.ShardSessions {
- if err := txc.commitShard(ctx, shardSession, session.logging); err != nil {
+ if err := txc.commitShard(ctx, shardSession, session.GetLogger()); err != nil {
if i > 0 {
nShards := i
elipsis := false
@@ -169,34 +212,19 @@ func (txc *TxConn) commitNormal(ctx context.Context, session *SafeSession) error
})
warnings.Add("NonAtomicCommit", 1)
}
- _ = txc.Release(ctx, session)
return err
}
}
-
- if err := txc.runSessions(ctx, session.PostSessions, session.logging, txc.commitShard); err != nil {
- // If last commit fails, there will be nothing to rollback.
- session.RecordWarning(&querypb.QueryWarning{Message: fmt.Sprintf("post-operation transaction had an error: %v", err)})
- // With reserved connection we should release them.
- if session.InReservedConn() {
- _ = txc.Release(ctx, session)
- }
- }
return nil
}
// commit2PC will not used the pinned tablets - to make sure we use the current source, we need to use the gateway's queryservice
-func (txc *TxConn) commit2PC(ctx context.Context, session *SafeSession) (err error) {
+func (txc *TxConn) commit2PC(ctx context.Context, session *econtext.SafeSession) (err error) {
// If the number of participants is one or less, then it's a normal commit.
if len(session.ShardSessions) <= 1 {
return txc.commitNormal(ctx, session)
}
- if err := txc.checkValidCondition(session); err != nil {
- _ = txc.Rollback(ctx, session)
- return err
- }
-
mmShard := session.ShardSessions[0]
rmShards := session.ShardSessions[1:]
dtid := dtids.New(mmShard)
@@ -206,11 +234,12 @@ func (txc *TxConn) commit2PC(ctx context.Context, session *SafeSession) (err err
}
var txPhase commitPhase
+ var startCommitState querypb.StartCommitState
defer func() {
if err == nil {
return
}
- txc.errActionAndLogWarn(ctx, session, txPhase, dtid, mmShard, rmShards)
+ txc.errActionAndLogWarn(ctx, session, txPhase, startCommitState, dtid, mmShard, rmShards)
}()
txPhase = Commit2pcCreateTransaction
@@ -225,7 +254,7 @@ func (txc *TxConn) commit2PC(ctx context.Context, session *SafeSession) (err err
}
txPhase = Commit2pcPrepare
- prepareAction := func(ctx context.Context, s *vtgatepb.Session_ShardSession, logging *executeLogger) error {
+ prepareAction := func(ctx context.Context, s *vtgatepb.Session_ShardSession, logging *econtext.ExecuteLogger) error {
if DebugTwoPc { // Test code to simulate a failure during RM prepare
if terr := checkTestFailure(ctx, "RMPrepare_-40_FailNow", s.Target); terr != nil {
return terr
@@ -233,7 +262,7 @@ func (txc *TxConn) commit2PC(ctx context.Context, session *SafeSession) (err err
}
return txc.tabletGateway.Prepare(ctx, s.Target, s.TransactionId, dtid)
}
- if err = txc.runSessions(ctx, rmShards, session.logging, prepareAction); err != nil {
+ if err = txc.runSessions(ctx, rmShards, session.GetLogger(), prepareAction); err != nil {
return err
}
@@ -244,7 +273,7 @@ func (txc *TxConn) commit2PC(ctx context.Context, session *SafeSession) (err err
}
txPhase = Commit2pcStartCommit
- err = txc.tabletGateway.StartCommit(ctx, mmShard.Target, mmShard.TransactionId, dtid)
+ startCommitState, err = txc.tabletGateway.StartCommit(ctx, mmShard.Target, mmShard.TransactionId, dtid)
if err != nil {
return err
}
@@ -256,7 +285,7 @@ func (txc *TxConn) commit2PC(ctx context.Context, session *SafeSession) (err err
}
txPhase = Commit2pcPrepareCommit
- prepareCommitAction := func(ctx context.Context, s *vtgatepb.Session_ShardSession, logging *executeLogger) error {
+ prepareCommitAction := func(ctx context.Context, s *vtgatepb.Session_ShardSession, logging *econtext.ExecuteLogger) error {
if DebugTwoPc { // Test code to simulate a failure during RM prepare
if terr := checkTestFailure(ctx, "RMCommit_-40_FailNow", s.Target); terr != nil {
return terr
@@ -264,7 +293,7 @@ func (txc *TxConn) commit2PC(ctx context.Context, session *SafeSession) (err err
}
return txc.tabletGateway.CommitPrepared(ctx, s.Target, dtid)
}
- if err = txc.runSessions(ctx, rmShards, session.logging, prepareCommitAction); err != nil {
+ if err = txc.runSessions(ctx, rmShards, session.GetLogger(), prepareCommitAction); err != nil {
return err
}
@@ -276,32 +305,38 @@ func (txc *TxConn) commit2PC(ctx context.Context, session *SafeSession) (err err
return nil
}
-func (txc *TxConn) checkValidCondition(session *SafeSession) error {
- if len(session.PreSessions) != 0 || len(session.PostSessions) != 0 {
- return vterrors.VT12001("atomic distributed transaction commit with consistent lookup vindex")
- }
- if len(session.GetSavepoints()) != 0 {
- return vterrors.VT12001("atomic distributed transaction commit with savepoint")
- }
- if session.GetInReservedConn() {
- return vterrors.VT12001("atomic distributed transaction commit with system settings")
- }
- return nil
-}
-
-func (txc *TxConn) errActionAndLogWarn(ctx context.Context, session *SafeSession, txPhase commitPhase, dtid string, mmShard *vtgatepb.Session_ShardSession, rmShards []*vtgatepb.Session_ShardSession) {
+func (txc *TxConn) errActionAndLogWarn(
+ ctx context.Context,
+ session *econtext.SafeSession,
+ txPhase commitPhase,
+ startCommitState querypb.StartCommitState,
+ dtid string,
+ mmShard *vtgatepb.Session_ShardSession,
+ rmShards []*vtgatepb.Session_ShardSession,
+) {
+ var rollbackErr error
switch txPhase {
case Commit2pcCreateTransaction:
// Normal rollback is safe because nothing was prepared yet.
- if rollbackErr := txc.Rollback(ctx, session); rollbackErr != nil {
- log.Warningf("Rollback failed after Create Transaction failure: %v", rollbackErr)
- }
+ rollbackErr = txc.Rollback(ctx, session)
case Commit2pcPrepare:
// Rollback the prepared and unprepared transactions.
- if resumeErr := txc.rollbackTx(ctx, dtid, mmShard, rmShards, session.logging); resumeErr != nil {
- log.Warningf("Rollback failed after Prepare failure: %v", resumeErr)
+ rollbackErr = txc.rollbackTx(ctx, dtid, mmShard, rmShards, session.GetLogger())
+ case Commit2pcStartCommit:
+ // Failed to store the commit decision on MM.
+ // If the failure state is certain, then the only option is to rollback the prepared transactions on the RMs.
+ if startCommitState == querypb.StartCommitState_Fail {
+ rollbackErr = txc.rollbackTx(ctx, dtid, mmShard, rmShards, session.GetLogger())
}
+ fallthrough
+ case Commit2pcPrepareCommit:
+ commitUnresolved.Add(1)
+ }
+ if rollbackErr != nil {
+ log.Warningf("Rollback failed after %s failure: %v", phaseMessage[txPhase], rollbackErr)
+ commitUnresolved.Add(1)
}
+
session.RecordWarning(&querypb.QueryWarning{
Code: uint32(sqlerror.ERInAtomicRecovery),
Message: createWarningMessage(dtid, txPhase)})
@@ -325,7 +360,7 @@ func createWarningMessage(dtid string, txPhase commitPhase) string {
}
// Rollback rolls back the current transaction. There are no retries on this operation.
-func (txc *TxConn) Rollback(ctx context.Context, session *SafeSession) error {
+func (txc *TxConn) Rollback(ctx context.Context, session *econtext.SafeSession) error {
if !session.InTransaction() {
return nil
}
@@ -334,7 +369,7 @@ func (txc *TxConn) Rollback(ctx context.Context, session *SafeSession) error {
allsessions := append(session.PreSessions, session.ShardSessions...)
allsessions = append(allsessions, session.PostSessions...)
- err := txc.runSessions(ctx, allsessions, session.logging, func(ctx context.Context, s *vtgatepb.Session_ShardSession, logging *executeLogger) error {
+ err := txc.runSessions(ctx, allsessions, session.GetLogger(), func(ctx context.Context, s *vtgatepb.Session_ShardSession, logging *econtext.ExecuteLogger) error {
if s.TransactionId == 0 {
return nil
}
@@ -348,7 +383,7 @@ func (txc *TxConn) Rollback(ctx context.Context, session *SafeSession) error {
}
s.TransactionId = 0
s.ReservedId = reservedID
- logging.log(nil, s.Target, nil, "rollback", false, nil)
+ logging.Log(nil, s.Target, nil, "rollback", false, nil)
return nil
})
if err != nil {
@@ -361,7 +396,7 @@ func (txc *TxConn) Rollback(ctx context.Context, session *SafeSession) error {
}
// Release releases the reserved connection and/or rollbacks the transaction
-func (txc *TxConn) Release(ctx context.Context, session *SafeSession) error {
+func (txc *TxConn) Release(ctx context.Context, session *econtext.SafeSession) error {
if !session.InTransaction() && !session.InReservedConn() {
return nil
}
@@ -370,7 +405,7 @@ func (txc *TxConn) Release(ctx context.Context, session *SafeSession) error {
allsessions := append(session.PreSessions, session.ShardSessions...)
allsessions = append(allsessions, session.PostSessions...)
- return txc.runSessions(ctx, allsessions, session.logging, func(ctx context.Context, s *vtgatepb.Session_ShardSession, logging *executeLogger) error {
+ return txc.runSessions(ctx, allsessions, session.GetLogger(), func(ctx context.Context, s *vtgatepb.Session_ShardSession, logging *econtext.ExecuteLogger) error {
if s.ReservedId == 0 && s.TransactionId == 0 {
return nil
}
@@ -389,7 +424,7 @@ func (txc *TxConn) Release(ctx context.Context, session *SafeSession) error {
}
// ReleaseLock releases the reserved connection used for locking.
-func (txc *TxConn) ReleaseLock(ctx context.Context, session *SafeSession) error {
+func (txc *TxConn) ReleaseLock(ctx context.Context, session *econtext.SafeSession) error {
if !session.InLockSession() {
return nil
}
@@ -408,7 +443,7 @@ func (txc *TxConn) ReleaseLock(ctx context.Context, session *SafeSession) error
}
// ReleaseAll releases all the shard sessions and lock session.
-func (txc *TxConn) ReleaseAll(ctx context.Context, session *SafeSession) error {
+func (txc *TxConn) ReleaseAll(ctx context.Context, session *econtext.SafeSession) error {
if !session.InTransaction() && !session.InReservedConn() && !session.InLockSession() {
return nil
}
@@ -420,7 +455,7 @@ func (txc *TxConn) ReleaseAll(ctx context.Context, session *SafeSession) error {
allsessions = append(allsessions, session.LockSession)
}
- return txc.runSessions(ctx, allsessions, session.logging, func(ctx context.Context, s *vtgatepb.Session_ShardSession, loggging *executeLogger) error {
+ return txc.runSessions(ctx, allsessions, session.GetLogger(), func(ctx context.Context, s *vtgatepb.Session_ShardSession, loggging *econtext.ExecuteLogger) error {
if s.ReservedId == 0 && s.TransactionId == 0 {
return nil
}
@@ -492,12 +527,12 @@ func (txc *TxConn) resolveTx(ctx context.Context, target *querypb.Target, transa
// rollbackTx rollbacks the specified distributed transaction.
// Rollbacks happens on the metadata manager and all participants irrespective of the failure.
-func (txc *TxConn) rollbackTx(ctx context.Context, dtid string, mmShard *vtgatepb.Session_ShardSession, participants []*vtgatepb.Session_ShardSession, logging *executeLogger) error {
+func (txc *TxConn) rollbackTx(ctx context.Context, dtid string, mmShard *vtgatepb.Session_ShardSession, participants []*vtgatepb.Session_ShardSession, logging *econtext.ExecuteLogger) error {
var errs []error
if mmErr := txc.rollbackMM(ctx, dtid, mmShard); mmErr != nil {
errs = append(errs, mmErr)
}
- if rmErr := txc.runSessions(ctx, participants, logging, func(ctx context.Context, session *vtgatepb.Session_ShardSession, logger *executeLogger) error {
+ if rmErr := txc.runSessions(ctx, participants, logging, func(ctx context.Context, session *vtgatepb.Session_ShardSession, logger *econtext.ExecuteLogger) error {
return txc.tabletGateway.RollbackPrepared(ctx, session.Target, dtid, session.TransactionId)
}); rmErr != nil {
errs = append(errs, rmErr)
@@ -538,7 +573,7 @@ func (txc *TxConn) resumeCommit(ctx context.Context, target *querypb.Target, tra
}
// runSessions executes the action for all shardSessions in parallel and returns a consolidated error.
-func (txc *TxConn) runSessions(ctx context.Context, shardSessions []*vtgatepb.Session_ShardSession, logging *executeLogger, action func(context.Context, *vtgatepb.Session_ShardSession, *executeLogger) error) error {
+func (txc *TxConn) runSessions(ctx context.Context, shardSessions []*vtgatepb.Session_ShardSession, logging *econtext.ExecuteLogger, action func(context.Context, *vtgatepb.Session_ShardSession, *econtext.ExecuteLogger) error) error {
// Fastpath.
if len(shardSessions) == 1 {
return action(ctx, shardSessions[0], logging)
diff --git a/go/vt/vtgate/tx_conn_test.go b/go/vt/vtgate/tx_conn_test.go
index dd1415bce87..333094569c8 100644
--- a/go/vt/vtgate/tx_conn_test.go
+++ b/go/vt/vtgate/tx_conn_test.go
@@ -26,6 +26,8 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
+ econtext "vitess.io/vitess/go/vt/vtgate/executorcontext"
+
"vitess.io/vitess/go/event/syslogger"
"vitess.io/vitess/go/mysql/sqlerror"
"vitess.io/vitess/go/test/utils"
@@ -51,7 +53,7 @@ func TestTxConnBegin(t *testing.T) {
session := &vtgatepb.Session{}
// begin
- safeSession := NewSafeSession(session)
+ safeSession := econtext.NewSafeSession(session)
err := sc.txConn.Begin(ctx, safeSession, nil)
require.NoError(t, err)
wantSession := vtgatepb.Session{InTransaction: true}
@@ -75,7 +77,7 @@ func TestTxConnCommitFailure(t *testing.T) {
// Sequence the executes to ensure commit order
- session := NewSafeSession(&vtgatepb.Session{InTransaction: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true})
sc.ExecuteMultiShard(ctx, nil, rssm[0], queries, session, false, false, nullResultsObserver{})
wantSession := vtgatepb.Session{
InTransaction: true,
@@ -176,7 +178,7 @@ func TestTxConnCommitFailureAfterNonAtomicCommitMaxShards(t *testing.T) {
// Sequence the executes to ensure commit order
- session := NewSafeSession(&vtgatepb.Session{InTransaction: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true})
wantSession := vtgatepb.Session{
InTransaction: true,
ShardSessions: []*vtgatepb.Session_ShardSession{},
@@ -230,7 +232,7 @@ func TestTxConnCommitFailureBeforeNonAtomicCommitMaxShards(t *testing.T) {
// Sequence the executes to ensure commit order
- session := NewSafeSession(&vtgatepb.Session{InTransaction: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true})
wantSession := vtgatepb.Session{
InTransaction: true,
ShardSessions: []*vtgatepb.Session_ShardSession{},
@@ -282,7 +284,7 @@ func TestTxConnCommitSuccess(t *testing.T) {
sc.txConn.mode = vtgatepb.TransactionMode_MULTI
// Sequence the executes to ensure commit order
- session := NewSafeSession(&vtgatepb.Session{InTransaction: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true})
sc.ExecuteMultiShard(ctx, nil, rss0, queries, session, false, false, nullResultsObserver{})
wantSession := vtgatepb.Session{
InTransaction: true,
@@ -335,7 +337,7 @@ func TestTxConnReservedCommitSuccess(t *testing.T) {
sc.txConn.mode = vtgatepb.TransactionMode_MULTI
// Sequence the executes to ensure commit order
- session := NewSafeSession(&vtgatepb.Session{InTransaction: true, InReservedConn: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true, InReservedConn: true})
sc.ExecuteMultiShard(ctx, nil, rss0, queries, session, false, false, nullResultsObserver{})
wantSession := vtgatepb.Session{
InTransaction: true,
@@ -420,7 +422,7 @@ func TestTxConnReservedOn2ShardTxOn1ShardAndCommit(t *testing.T) {
sc.txConn.mode = vtgatepb.TransactionMode_MULTI
// Sequence the executes to ensure shard session order
- session := NewSafeSession(&vtgatepb.Session{InReservedConn: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InReservedConn: true})
// this will create reserved connections against all tablets
_, errs := sc.ExecuteMultiShard(ctx, nil, rss1, queries, session, false, false, nullResultsObserver{})
@@ -515,7 +517,7 @@ func TestTxConnReservedOn2ShardTxOn1ShardAndRollback(t *testing.T) {
sc.txConn.mode = vtgatepb.TransactionMode_MULTI
// Sequence the executes to ensure shard session order
- session := NewSafeSession(&vtgatepb.Session{InReservedConn: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InReservedConn: true})
// this will create reserved connections against all tablets
_, errs := sc.ExecuteMultiShard(ctx, nil, rss1, queries, session, false, false, nullResultsObserver{})
@@ -611,7 +613,7 @@ func TestTxConnCommitOrderFailure1(t *testing.T) {
queries := []*querypb.BoundQuery{{Sql: "query1"}}
// Sequence the executes to ensure commit order
- session := NewSafeSession(&vtgatepb.Session{InTransaction: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true})
sc.ExecuteMultiShard(ctx, nil, rss0, queries, session, false, false, nullResultsObserver{})
session.SetCommitOrder(vtgatepb.CommitOrder_PRE)
@@ -646,7 +648,7 @@ func TestTxConnCommitOrderFailure2(t *testing.T) {
}}
// Sequence the executes to ensure commit order
- session := NewSafeSession(&vtgatepb.Session{InTransaction: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true})
sc.ExecuteMultiShard(context.Background(), nil, rss1, queries, session, false, false, nullResultsObserver{})
session.SetCommitOrder(vtgatepb.CommitOrder_PRE)
@@ -680,7 +682,7 @@ func TestTxConnCommitOrderFailure3(t *testing.T) {
}}
// Sequence the executes to ensure commit order
- session := NewSafeSession(&vtgatepb.Session{InTransaction: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true})
sc.ExecuteMultiShard(ctx, nil, rss0, queries, session, false, false, nullResultsObserver{})
session.SetCommitOrder(vtgatepb.CommitOrder_PRE)
@@ -722,7 +724,7 @@ func TestTxConnCommitOrderSuccess(t *testing.T) {
}}
// Sequence the executes to ensure commit order
- session := NewSafeSession(&vtgatepb.Session{InTransaction: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true})
sc.ExecuteMultiShard(ctx, nil, rss0, queries, session, false, false, nullResultsObserver{})
wantSession := vtgatepb.Session{
InTransaction: true,
@@ -820,7 +822,7 @@ func TestTxConnReservedCommitOrderSuccess(t *testing.T) {
}}
// Sequence the executes to ensure commit order
- session := NewSafeSession(&vtgatepb.Session{InTransaction: true, InReservedConn: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true, InReservedConn: true})
sc.ExecuteMultiShard(ctx, nil, rss0, queries, session, false, false, nullResultsObserver{})
wantSession := vtgatepb.Session{
InTransaction: true,
@@ -957,7 +959,7 @@ func TestTxConnCommit2PC(t *testing.T) {
sc, sbc0, sbc1, rss0, _, rss01 := newTestTxConnEnv(t, ctx, "TestTxConnCommit2PC")
- session := NewSafeSession(&vtgatepb.Session{InTransaction: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true})
sc.ExecuteMultiShard(ctx, nil, rss0, queries, session, false, false, nullResultsObserver{})
sc.ExecuteMultiShard(ctx, nil, rss01, twoQueries, session, false, false, nullResultsObserver{})
session.TransactionMode = vtgatepb.TransactionMode_TWOPC
@@ -974,7 +976,7 @@ func TestTxConnCommit2PCOneParticipant(t *testing.T) {
ctx := utils.LeakCheckContext(t)
sc, sbc0, _, rss0, _, _ := newTestTxConnEnv(t, ctx, "TestTxConnCommit2PCOneParticipant")
- session := NewSafeSession(&vtgatepb.Session{InTransaction: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true})
sc.ExecuteMultiShard(ctx, nil, rss0, queries, session, false, false, nullResultsObserver{})
session.TransactionMode = vtgatepb.TransactionMode_TWOPC
require.NoError(t,
@@ -987,16 +989,14 @@ func TestTxConnCommit2PCCreateTransactionFail(t *testing.T) {
sc, sbc0, sbc1, rss0, rss1, _ := newTestTxConnEnv(t, ctx, "TestTxConnCommit2PCCreateTransactionFail")
- session := NewSafeSession(&vtgatepb.Session{InTransaction: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true})
sc.ExecuteMultiShard(ctx, nil, rss0, queries, session, false, false, nullResultsObserver{})
sc.ExecuteMultiShard(ctx, nil, rss1, queries, session, false, false, nullResultsObserver{})
sbc0.MustFailCreateTransaction = 1
session.TransactionMode = vtgatepb.TransactionMode_TWOPC
err := sc.txConn.Commit(ctx, session)
- want := "error: err"
- require.Error(t, err)
- assert.Contains(t, err.Error(), want, "Commit")
+ require.ErrorContains(t, err, "target: TestTxConnCommit2PCCreateTransactionFail.0.primary: error: err")
assert.EqualValues(t, 1, sbc0.CreateTransactionCount.Load(), "sbc0.CreateTransactionCount")
assert.EqualValues(t, 1, sbc0.RollbackCount.Load(), "sbc0.RollbackCount")
assert.EqualValues(t, 1, sbc1.RollbackCount.Load(), "sbc1.RollbackCount")
@@ -1011,16 +1011,14 @@ func TestTxConnCommit2PCPrepareFail(t *testing.T) {
sc, sbc0, sbc1, rss0, _, rss01 := newTestTxConnEnv(t, ctx, "TestTxConnCommit2PCPrepareFail")
- session := NewSafeSession(&vtgatepb.Session{InTransaction: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true})
sc.ExecuteMultiShard(ctx, nil, rss0, queries, session, false, false, nullResultsObserver{})
sc.ExecuteMultiShard(ctx, nil, rss01, twoQueries, session, false, false, nullResultsObserver{})
sbc1.MustFailPrepare = 1
session.TransactionMode = vtgatepb.TransactionMode_TWOPC
err := sc.txConn.Commit(ctx, session)
- want := "error: err"
- require.Error(t, err)
- assert.Contains(t, err.Error(), want, "Commit")
+ require.ErrorContains(t, err, "target: TestTxConnCommit2PCPrepareFail.1.primary: error: err")
assert.EqualValues(t, 1, sbc0.CreateTransactionCount.Load(), "sbc0.CreateTransactionCount")
assert.EqualValues(t, 1, sbc1.PrepareCount.Load(), "sbc1.PrepareCount")
// Prepared failed on RM, so no commit on MM or RMs.
@@ -1039,20 +1037,40 @@ func TestTxConnCommit2PCStartCommitFail(t *testing.T) {
sc, sbc0, sbc1, rss0, _, rss01 := newTestTxConnEnv(t, ctx, "TestTxConnCommit2PCStartCommitFail")
- session := NewSafeSession(&vtgatepb.Session{InTransaction: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true})
sc.ExecuteMultiShard(ctx, nil, rss0, queries, session, false, false, nullResultsObserver{})
sc.ExecuteMultiShard(ctx, nil, rss01, twoQueries, session, false, false, nullResultsObserver{})
sbc0.MustFailStartCommit = 1
session.TransactionMode = vtgatepb.TransactionMode_TWOPC
err := sc.txConn.Commit(ctx, session)
- want := "error: err"
- require.Error(t, err)
- assert.Contains(t, err.Error(), want, "Commit")
+ require.ErrorContains(t, err, "target: TestTxConnCommit2PCStartCommitFail.0.primary: error: err")
+ assert.EqualValues(t, 1, sbc0.CreateTransactionCount.Load(), "sbc0.CreateTransactionCount")
+ assert.EqualValues(t, 1, sbc1.PrepareCount.Load(), "sbc1.PrepareCount")
+ assert.EqualValues(t, 1, sbc0.StartCommitCount.Load(), "sbc0.StartCommitCount")
+ assert.EqualValues(t, 0, sbc1.CommitPreparedCount.Load(), "sbc1.CommitPreparedCount")
+ assert.EqualValues(t, 1, sbc0.SetRollbackCount.Load(), "MM")
+ assert.EqualValues(t, 1, sbc1.RollbackPreparedCount.Load(), "RM")
+ assert.EqualValues(t, 1, sbc0.ConcludeTransactionCount.Load(), "sbc0.ConcludeTransactionCount")
+
+ sbc0.ResetCounter()
+ sbc1.ResetCounter()
+
+ session = econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true})
+ sc.ExecuteMultiShard(ctx, nil, rss0, queries, session, false, false, nullResultsObserver{})
+ sc.ExecuteMultiShard(ctx, nil, rss01, twoQueries, session, false, false, nullResultsObserver{})
+
+ // Here the StartCommit failure is in uncertain state so rollback is not called and neither conclude.
+ sbc0.MustFailStartCommitUncertain = 1
+ session.TransactionMode = vtgatepb.TransactionMode_TWOPC
+ err = sc.txConn.Commit(ctx, session)
+ require.ErrorContains(t, err, "target: TestTxConnCommit2PCStartCommitFail.0.primary: uncertain error")
assert.EqualValues(t, 1, sbc0.CreateTransactionCount.Load(), "sbc0.CreateTransactionCount")
assert.EqualValues(t, 1, sbc1.PrepareCount.Load(), "sbc1.PrepareCount")
assert.EqualValues(t, 1, sbc0.StartCommitCount.Load(), "sbc0.StartCommitCount")
assert.EqualValues(t, 0, sbc1.CommitPreparedCount.Load(), "sbc1.CommitPreparedCount")
+ assert.EqualValues(t, 0, sbc0.SetRollbackCount.Load(), "MM")
+ assert.EqualValues(t, 0, sbc1.RollbackPreparedCount.Load(), "RM")
assert.EqualValues(t, 0, sbc0.ConcludeTransactionCount.Load(), "sbc0.ConcludeTransactionCount")
}
@@ -1061,16 +1079,14 @@ func TestTxConnCommit2PCCommitPreparedFail(t *testing.T) {
sc, sbc0, sbc1, rss0, _, rss01 := newTestTxConnEnv(t, ctx, "TestTxConnCommit2PCCommitPreparedFail")
- session := NewSafeSession(&vtgatepb.Session{InTransaction: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true})
sc.ExecuteMultiShard(ctx, nil, rss0, queries, session, false, false, nullResultsObserver{})
sc.ExecuteMultiShard(ctx, nil, rss01, twoQueries, session, false, false, nullResultsObserver{})
sbc1.MustFailCommitPrepared = 1
session.TransactionMode = vtgatepb.TransactionMode_TWOPC
err := sc.txConn.Commit(ctx, session)
- want := "error: err"
- require.Error(t, err)
- assert.Contains(t, err.Error(), want, "Commit")
+ require.ErrorContains(t, err, "target: TestTxConnCommit2PCCommitPreparedFail.1.primary: error: err")
assert.EqualValues(t, 1, sbc0.CreateTransactionCount.Load(), "sbc0.CreateTransactionCount")
assert.EqualValues(t, 1, sbc1.PrepareCount.Load(), "sbc1.PrepareCount")
assert.EqualValues(t, 1, sbc0.StartCommitCount.Load(), "sbc0.StartCommitCount")
@@ -1083,7 +1099,7 @@ func TestTxConnCommit2PCConcludeTransactionFail(t *testing.T) {
sc, sbc0, sbc1, rss0, _, rss01 := newTestTxConnEnv(t, ctx, "TestTxConnCommit2PCConcludeTransactionFail")
- session := NewSafeSession(&vtgatepb.Session{InTransaction: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true})
sc.ExecuteMultiShard(ctx, nil, rss0, queries, session, false, false, nullResultsObserver{})
sc.ExecuteMultiShard(ctx, nil, rss01, twoQueries, session, false, false, nullResultsObserver{})
@@ -1103,7 +1119,7 @@ func TestTxConnRollback(t *testing.T) {
sc, sbc0, sbc1, rss0, _, rss01 := newTestTxConnEnv(t, ctx, "TxConnRollback")
- session := NewSafeSession(&vtgatepb.Session{InTransaction: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true})
sc.ExecuteMultiShard(ctx, nil, rss0, queries, session, false, false, nullResultsObserver{})
sc.ExecuteMultiShard(ctx, nil, rss01, twoQueries, session, false, false, nullResultsObserver{})
require.NoError(t,
@@ -1119,7 +1135,7 @@ func TestTxConnReservedRollback(t *testing.T) {
sc, sbc0, sbc1, rss0, _, rss01 := newTestTxConnEnv(t, ctx, "TxConnReservedRollback")
- session := NewSafeSession(&vtgatepb.Session{InTransaction: true, InReservedConn: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true, InReservedConn: true})
sc.ExecuteMultiShard(ctx, nil, rss0, queries, session, false, false, nullResultsObserver{})
sc.ExecuteMultiShard(ctx, nil, rss01, twoQueries, session, false, false, nullResultsObserver{})
require.NoError(t,
@@ -1156,7 +1172,7 @@ func TestTxConnReservedRollbackFailure(t *testing.T) {
sc, sbc0, sbc1, rss0, rss1, rss01 := newTestTxConnEnv(t, ctx, "TxConnReservedRollback")
- session := NewSafeSession(&vtgatepb.Session{InTransaction: true, InReservedConn: true})
+ session := econtext.NewSafeSession(&vtgatepb.Session{InTransaction: true, InReservedConn: true})
sc.ExecuteMultiShard(ctx, nil, rss0, queries, session, false, false, nullResultsObserver{})
sc.ExecuteMultiShard(ctx, nil, rss01, twoQueries, session, false, false, nullResultsObserver{})
@@ -1435,7 +1451,7 @@ func TestTxConnMultiGoSessions(t *testing.T) {
Keyspace: "0",
},
}}
- err := txc.runSessions(ctx, input, nil, func(ctx context.Context, s *vtgatepb.Session_ShardSession, logger *executeLogger) error {
+ err := txc.runSessions(ctx, input, nil, func(ctx context.Context, s *vtgatepb.Session_ShardSession, logger *econtext.ExecuteLogger) error {
return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "err %s", s.Target.Keyspace)
})
want := "err 0"
@@ -1450,7 +1466,7 @@ func TestTxConnMultiGoSessions(t *testing.T) {
Keyspace: "1",
},
}}
- err = txc.runSessions(ctx, input, nil, func(ctx context.Context, s *vtgatepb.Session_ShardSession, logger *executeLogger) error {
+ err = txc.runSessions(ctx, input, nil, func(ctx context.Context, s *vtgatepb.Session_ShardSession, logger *econtext.ExecuteLogger) error {
return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "err %s", s.Target.Keyspace)
})
want = "err 0\nerr 1"
@@ -1458,7 +1474,7 @@ func TestTxConnMultiGoSessions(t *testing.T) {
wantCode := vtrpcpb.Code_INTERNAL
assert.Equal(t, wantCode, vterrors.Code(err), "error code")
- err = txc.runSessions(ctx, input, nil, func(ctx context.Context, s *vtgatepb.Session_ShardSession, logger *executeLogger) error {
+ err = txc.runSessions(ctx, input, nil, func(ctx context.Context, s *vtgatepb.Session_ShardSession, logger *econtext.ExecuteLogger) error {
return nil
})
require.NoError(t, err)
@@ -1501,7 +1517,7 @@ func TestTxConnAccessModeReset(t *testing.T) {
tcases := []struct {
name string
- f func(ctx context.Context, session *SafeSession) error
+ f func(ctx context.Context, session *econtext.SafeSession) error
}{{
name: "begin-commit",
f: sc.txConn.Commit,
@@ -1518,7 +1534,7 @@ func TestTxConnAccessModeReset(t *testing.T) {
for _, tcase := range tcases {
t.Run(tcase.name, func(t *testing.T) {
- safeSession := NewSafeSession(&vtgatepb.Session{
+ safeSession := econtext.NewSafeSession(&vtgatepb.Session{
Options: &querypb.ExecuteOptions{
TransactionAccessMode: []querypb.ExecuteOptions_TransactionAccessMode{querypb.ExecuteOptions_READ_ONLY},
},
diff --git a/go/vt/vtgate/vindexes/cached_size.go b/go/vt/vtgate/vindexes/cached_size.go
index a97411a6ac8..eeadb69b532 100644
--- a/go/vt/vtgate/vindexes/cached_size.go
+++ b/go/vt/vtgate/vindexes/cached_size.go
@@ -175,6 +175,18 @@ func (cached *Keyspace) CachedSize(alloc bool) int64 {
size += hack.RuntimeAllocSize(int64(len(cached.Name)))
return size
}
+func (cached *LookupCost) CachedSize(alloc bool) int64 {
+ if cached == nil {
+ return int64(0)
+ }
+ size := int64(0)
+ if alloc {
+ size += int64(16)
+ }
+ // field LookupNonUnique *vitess.io/vitess/go/vt/vtgate/vindexes.LookupNonUnique
+ size += cached.LookupNonUnique.CachedSize(true)
+ return size
+}
func (cached *LookupHash) CachedSize(alloc bool) int64 {
if cached == nil {
return int64(0)
diff --git a/go/vt/vtgate/vindexes/lookup_cost.go b/go/vt/vtgate/vindexes/lookup_cost.go
new file mode 100644
index 00000000000..6556032cea5
--- /dev/null
+++ b/go/vt/vtgate/vindexes/lookup_cost.go
@@ -0,0 +1,70 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package vindexes
+
+import (
+ "strconv"
+)
+
+var (
+ _ SingleColumn = (*LookupCost)(nil)
+ _ Lookup = (*LookupCost)(nil)
+ _ LookupPlanable = (*LookupCost)(nil)
+)
+
+func init() {
+ Register("lookup_cost", newLookupCost)
+}
+
+const defaultCost = 5
+
+// LookupCost defines a test vindex that uses the cost provided by the user.
+// This is a test vindex.
+type LookupCost struct {
+ *LookupNonUnique
+ cost int
+}
+
+// Cost returns the cost of this vindex as provided.
+func (lc *LookupCost) Cost() int {
+ return lc.cost
+}
+
+func newLookupCost(name string, m map[string]string) (Vindex, error) {
+ lookup, err := newLookup(name, m)
+ if err != nil {
+ return nil, err
+ }
+ cost := getInt(m, "cost", defaultCost)
+ return &LookupCost{
+ LookupNonUnique: lookup.(*LookupNonUnique),
+ cost: cost,
+ }, nil
+
+}
+
+func getInt(m map[string]string, key string, defaultVal int) int {
+ val, ok := m[key]
+ if !ok {
+ return defaultVal
+ }
+ intVal, err := strconv.Atoi(val)
+ if err != nil {
+ return defaultVal
+ }
+ return intVal
+}
diff --git a/go/vt/vtgate/vindexes/vschema_test.go b/go/vt/vtgate/vindexes/vschema_test.go
index 25f8e135698..f9bcf43ddaa 100644
--- a/go/vt/vtgate/vindexes/vschema_test.go
+++ b/go/vt/vtgate/vindexes/vschema_test.go
@@ -21,6 +21,7 @@ import (
"encoding/json"
"errors"
"fmt"
+ "os"
"reflect"
"strings"
"testing"
@@ -3551,6 +3552,20 @@ func TestFindTableWithSequences(t *testing.T) {
}
}
+func TestGlobalTables(t *testing.T) {
+ input, err := os.ReadFile("../planbuilder/testdata/vschemas/schema.json")
+ require.NoError(t, err)
+
+ var vs vschemapb.SrvVSchema
+ err = json2.UnmarshalPB(input, &vs)
+ require.NoError(t, err)
+
+ got := BuildVSchema(&vs, sqlparser.NewTestParser())
+ tbl, err := got.findGlobalTable("user", false)
+ require.NoError(t, err)
+ assert.NotNil(t, tbl)
+}
+
func vindexNames(vindexes []*ColumnVindex) (result []string) {
for _, vindex := range vindexes {
result = append(result, vindex.Name)
diff --git a/go/vt/vtgate/viperconfig.go b/go/vt/vtgate/viperconfig.go
new file mode 100644
index 00000000000..ec77ff62d4f
--- /dev/null
+++ b/go/vt/vtgate/viperconfig.go
@@ -0,0 +1,16 @@
+package vtgate
+
+import "vitess.io/vitess/go/viperutil"
+
+type dynamicViperConfig struct {
+ onlineDDL viperutil.Value[bool]
+ directDDL viperutil.Value[bool]
+}
+
+func (d *dynamicViperConfig) OnlineEnabled() bool {
+ return d.onlineDDL.Get()
+}
+
+func (d *dynamicViperConfig) DirectEnabled() bool {
+ return d.directDDL.Get()
+}
diff --git a/go/vt/vtgate/vschema_manager.go b/go/vt/vtgate/vschema_manager.go
index 2b6761f4a8e..62ea2cd3455 100644
--- a/go/vt/vtgate/vschema_manager.go
+++ b/go/vt/vtgate/vschema_manager.go
@@ -33,8 +33,6 @@ import (
vschemapb "vitess.io/vitess/go/vt/proto/vschema"
)
-var _ VSchemaOperator = (*VSchemaManager)(nil)
-
// VSchemaManager is used to watch for updates to the vschema and to implement
// the DDL commands to add / remove vindexes
type VSchemaManager struct {
diff --git a/go/vt/vtgate/vschemaacl/vschemaacl.go b/go/vt/vtgate/vschemaacl/vschemaacl.go
index 5345d1437fc..08f6c2b0cd4 100644
--- a/go/vt/vtgate/vschemaacl/vschemaacl.go
+++ b/go/vt/vtgate/vschemaacl/vschemaacl.go
@@ -18,26 +18,67 @@ package vschemaacl
import (
"strings"
- "sync"
"github.com/spf13/pflag"
+ "github.com/spf13/viper"
- "vitess.io/vitess/go/vt/servenv"
-
+ "vitess.io/vitess/go/viperutil"
querypb "vitess.io/vitess/go/vt/proto/query"
+ "vitess.io/vitess/go/vt/servenv"
)
-var (
- // AuthorizedDDLUsers specifies the users that can perform ddl operations
- AuthorizedDDLUsers string
-
- // ddlAllowAll is true if the special value of "*" was specified
+type authorizedDDLUsers struct {
allowAll bool
+ acl map[string]struct{}
+ source string
+}
+
+func NewAuthorizedDDLUsers(users string) *authorizedDDLUsers {
+ acl := make(map[string]struct{})
+ allowAll := false
+
+ switch users {
+ case "":
+ case "%":
+ allowAll = true
+ default:
+ for _, user := range strings.Split(users, ",") {
+ user = strings.TrimSpace(user)
+ acl[user] = struct{}{}
+ }
+ }
+
+ return &authorizedDDLUsers{
+ allowAll: allowAll,
+ acl: acl,
+ source: users,
+ }
+}
- // ddlACL contains a set of allowed usernames
- acl map[string]struct{}
+func (a *authorizedDDLUsers) String() string {
+ return a.source
+}
- initMu sync.Mutex
+var (
+ // AuthorizedDDLUsers specifies the users that can perform ddl operations
+ AuthorizedDDLUsers = viperutil.Configure(
+ "vschema_ddl_authorized_users",
+ viperutil.Options[*authorizedDDLUsers]{
+ FlagName: "vschema_ddl_authorized_users",
+ Default: &authorizedDDLUsers{},
+ Dynamic: true,
+ GetFunc: func(v *viper.Viper) func(key string) *authorizedDDLUsers {
+ return func(key string) *authorizedDDLUsers {
+ newVal := v.GetString(key)
+ curVal, ok := v.Get(key).(*authorizedDDLUsers)
+ if ok && newVal == curVal.source {
+ return curVal
+ }
+ return NewAuthorizedDDLUsers(newVal)
+ }
+ },
+ },
+ )
)
// RegisterSchemaACLFlags installs log flags on the given FlagSet.
@@ -46,7 +87,8 @@ var (
// calls this function, or call this function directly before parsing
// command-line arguments.
func RegisterSchemaACLFlags(fs *pflag.FlagSet) {
- fs.StringVar(&AuthorizedDDLUsers, "vschema_ddl_authorized_users", AuthorizedDDLUsers, "List of users authorized to execute vschema ddl operations, or '%' to allow all users.")
+ fs.String("vschema_ddl_authorized_users", "", "List of users authorized to execute vschema ddl operations, or '%' to allow all users.")
+ viperutil.BindFlags(fs, AuthorizedDDLUsers)
}
func init() {
@@ -55,33 +97,14 @@ func init() {
}
}
-// Init parses the users option and sets allowAll / acl accordingly
-func Init() {
- initMu.Lock()
- defer initMu.Unlock()
- acl = make(map[string]struct{})
- allowAll = false
-
- if AuthorizedDDLUsers == "%" {
- allowAll = true
- return
- } else if AuthorizedDDLUsers == "" {
- return
- }
-
- for _, user := range strings.Split(AuthorizedDDLUsers, ",") {
- user = strings.TrimSpace(user)
- acl[user] = struct{}{}
- }
-}
-
// Authorized returns true if the given caller is allowed to execute vschema operations
func Authorized(caller *querypb.VTGateCallerID) bool {
- if allowAll {
+ users := AuthorizedDDLUsers.Get()
+ if users.allowAll {
return true
}
user := caller.GetUsername()
- _, ok := acl[user]
+ _, ok := users.acl[user]
return ok
}
diff --git a/go/vt/vtgate/vschemaacl/vschemaacl_test.go b/go/vt/vtgate/vschemaacl/vschemaacl_test.go
index faa2dbfc294..cfd1de705af 100644
--- a/go/vt/vtgate/vschemaacl/vschemaacl_test.go
+++ b/go/vt/vtgate/vschemaacl/vschemaacl_test.go
@@ -35,8 +35,7 @@ func TestVschemaAcl(t *testing.T) {
}
// Test wildcard
- AuthorizedDDLUsers = "%"
- Init()
+ AuthorizedDDLUsers.Set(NewAuthorizedDDLUsers("%"))
if !Authorized(&redUser) {
t.Errorf("user should be authorized")
@@ -46,8 +45,7 @@ func TestVschemaAcl(t *testing.T) {
}
// Test user list
- AuthorizedDDLUsers = "oneUser, twoUser, redUser, blueUser"
- Init()
+ AuthorizedDDLUsers.Set(NewAuthorizedDDLUsers("oneUser, twoUser, redUser, blueUser"))
if !Authorized(&redUser) {
t.Errorf("user should be authorized")
@@ -57,8 +55,7 @@ func TestVschemaAcl(t *testing.T) {
}
// Revert to baseline state for other tests
- AuthorizedDDLUsers = ""
- Init()
+ AuthorizedDDLUsers.Set(NewAuthorizedDDLUsers(""))
// By default no users are allowed in
if Authorized(&redUser) {
diff --git a/go/vt/vtgate/vtgate.go b/go/vt/vtgate/vtgate.go
index e9e7cd65011..8bab05479dd 100644
--- a/go/vt/vtgate/vtgate.go
+++ b/go/vt/vtgate/vtgate.go
@@ -34,6 +34,7 @@ import (
"vitess.io/vitess/go/sqltypes"
"vitess.io/vitess/go/stats"
"vitess.io/vitess/go/tb"
+ "vitess.io/vitess/go/viperutil"
"vitess.io/vitess/go/vt/discovery"
"vitess.io/vitess/go/vt/key"
"vitess.io/vitess/go/vt/log"
@@ -51,6 +52,7 @@ import (
"vitess.io/vitess/go/vt/topo/topoproto"
"vitess.io/vitess/go/vt/vtenv"
"vitess.io/vitess/go/vt/vterrors"
+ econtext "vitess.io/vitess/go/vt/vtgate/executorcontext"
"vitess.io/vitess/go/vt/vtgate/planbuilder/plancontext"
vtschema "vitess.io/vitess/go/vt/vtgate/schema"
"vitess.io/vitess/go/vt/vtgate/txresolver"
@@ -93,8 +95,24 @@ var (
foreignKeyMode = "allow"
dbDDLPlugin = "fail"
defaultDDLStrategy = string(schema.DDLStrategyDirect)
- enableOnlineDDL = true
- enableDirectDDL = true
+
+ enableOnlineDDL = viperutil.Configure(
+ "enable_online_ddl",
+ viperutil.Options[bool]{
+ FlagName: "enable_online_ddl",
+ Default: true,
+ Dynamic: true,
+ },
+ )
+
+ enableDirectDDL = viperutil.Configure(
+ "enable_direct_ddl",
+ viperutil.Options[bool]{
+ FlagName: "enable_direct_ddl",
+ Default: true,
+ Dynamic: true,
+ },
+ )
// schema tracking flags
enableSchemaChangeSignal = true
@@ -141,8 +159,8 @@ func registerFlags(fs *pflag.FlagSet) {
fs.DurationVar(&lockHeartbeatTime, "lock_heartbeat_time", lockHeartbeatTime, "If there is lock function used. This will keep the lock connection active by using this heartbeat")
fs.BoolVar(&warnShardedOnly, "warn_sharded_only", warnShardedOnly, "If any features that are only available in unsharded mode are used, query execution warnings will be added to the session")
fs.StringVar(&foreignKeyMode, "foreign_key_mode", foreignKeyMode, "This is to provide how to handle foreign key constraint in create/alter table. Valid values are: allow, disallow")
- fs.BoolVar(&enableOnlineDDL, "enable_online_ddl", enableOnlineDDL, "Allow users to submit, review and control Online DDL")
- fs.BoolVar(&enableDirectDDL, "enable_direct_ddl", enableDirectDDL, "Allow users to submit direct DDL statements")
+ fs.Bool("enable_online_ddl", enableOnlineDDL.Default(), "Allow users to submit, review and control Online DDL")
+ fs.Bool("enable_direct_ddl", enableDirectDDL.Default(), "Allow users to submit direct DDL statements")
fs.BoolVar(&enableSchemaChangeSignal, "schema_change_signal", enableSchemaChangeSignal, "Enable the schema tracker; requires queryserver-config-schema-change-signal to be enabled on the underlying vttablets for this to work")
fs.IntVar(&queryTimeout, "query-timeout", queryTimeout, "Sets the default query timeout (in ms). Can be overridden by session variable (query_timeout) or comment directive (QUERY_TIMEOUT_MS)")
fs.StringVar(&queryLogToFile, "log_queries_to_file", queryLogToFile, "Enable query logging to the specified file")
@@ -154,6 +172,8 @@ func registerFlags(fs *pflag.FlagSet) {
fs.IntVar(&warmingReadsPercent, "warming-reads-percent", 0, "Percentage of reads on the primary to forward to replicas. Useful for keeping buffer pools warm")
fs.IntVar(&warmingReadsConcurrency, "warming-reads-concurrency", 500, "Number of concurrent warming reads allowed")
fs.DurationVar(&warmingReadsQueryTimeout, "warming-reads-query-timeout", 5*time.Second, "Timeout of warming read queries")
+
+ viperutil.BindFlags(fs, enableOnlineDDL, enableDirectDDL)
}
func init() {
@@ -469,7 +489,7 @@ func (vtg *VTGate) Execute(ctx context.Context, mysqlCtx vtgateservice.MySQLConn
if bvErr := sqltypes.ValidateBindVariables(bindVariables); bvErr != nil {
err = vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "%v", bvErr)
} else {
- safeSession := NewSafeSession(session)
+ safeSession := econtext.NewSafeSession(session)
qr, err = vtg.executor.Execute(ctx, mysqlCtx, "Execute", safeSession, sql, bindVariables)
safeSession.RemoveInternalSavepoint()
}
@@ -526,7 +546,7 @@ func (vtg *VTGate) StreamExecute(ctx context.Context, mysqlCtx vtgateservice.MyS
defer vtg.timings.Record(statsKey, time.Now())
- safeSession := NewSafeSession(session)
+ safeSession := econtext.NewSafeSession(session)
var err error
if bvErr := sqltypes.ValidateBindVariables(bindVariables); bvErr != nil {
err = vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "%v", bvErr)
@@ -560,7 +580,7 @@ func (vtg *VTGate) StreamExecute(ctx context.Context, mysqlCtx vtgateservice.MyS
// same effect as if a "rollback" statement was executed, but does not affect the query
// statistics.
func (vtg *VTGate) CloseSession(ctx context.Context, session *vtgatepb.Session) error {
- return vtg.executor.CloseSession(ctx, NewSafeSession(session))
+ return vtg.executor.CloseSession(ctx, econtext.NewSafeSession(session))
}
// Prepare supports non-streaming prepare statement query with multi shards
@@ -575,7 +595,7 @@ func (vtg *VTGate) Prepare(ctx context.Context, session *vtgatepb.Session, sql s
goto handleError
}
- fld, err = vtg.executor.Prepare(ctx, "Prepare", NewSafeSession(session), sql, bindVariables)
+ fld, err = vtg.executor.Prepare(ctx, "Prepare", econtext.NewSafeSession(session), sql, bindVariables)
if err == nil {
return session, fld, nil
}
diff --git a/go/vt/vtorc/config/config.go b/go/vt/vtorc/config/config.go
index 2d21e377cb6..cafff5acce8 100644
--- a/go/vt/vtorc/config/config.go
+++ b/go/vt/vtorc/config/config.go
@@ -17,14 +17,12 @@
package config
import (
- "encoding/json"
- "fmt"
- "os"
"time"
"github.com/spf13/pflag"
- "vitess.io/vitess/go/vt/log"
+ "vitess.io/vitess/go/viperutil"
+ "vitess.io/vitess/go/vt/servenv"
)
var configurationLoaded = make(chan bool)
@@ -42,200 +40,296 @@ const (
)
var (
- sqliteDataFile = "file::memory:?mode=memory&cache=shared"
- instancePollTime = 5 * time.Second
- snapshotTopologyInterval = 0 * time.Hour
- reasonableReplicationLag = 10 * time.Second
- auditFileLocation = ""
- auditToBackend = false
- auditToSyslog = false
- auditPurgeDuration = 7 * 24 * time.Hour // Equivalent of 7 days
- recoveryPeriodBlockDuration = 30 * time.Second
- preventCrossCellFailover = false
- waitReplicasTimeout = 30 * time.Second
- tolerableReplicationLag = 0 * time.Second
- topoInformationRefreshDuration = 15 * time.Second
- recoveryPollDuration = 1 * time.Second
- ersEnabled = true
- convertTabletsWithErrantGTIDs = false
+ instancePollTime = viperutil.Configure(
+ "instance-poll-time",
+ viperutil.Options[time.Duration]{
+ FlagName: "instance-poll-time",
+ Default: 5 * time.Second,
+ Dynamic: true,
+ },
+ )
+
+ preventCrossCellFailover = viperutil.Configure(
+ "prevent-cross-cell-failover",
+ viperutil.Options[bool]{
+ FlagName: "prevent-cross-cell-failover",
+ Default: false,
+ Dynamic: true,
+ },
+ )
+
+ sqliteDataFile = viperutil.Configure(
+ "sqlite-data-file",
+ viperutil.Options[string]{
+ FlagName: "sqlite-data-file",
+ Default: "file::memory:?mode=memory&cache=shared",
+ Dynamic: false,
+ },
+ )
+
+ snapshotTopologyInterval = viperutil.Configure(
+ "snapshot-topology-interval",
+ viperutil.Options[time.Duration]{
+ FlagName: "snapshot-topology-interval",
+ Default: 0 * time.Hour,
+ Dynamic: true,
+ },
+ )
+
+ reasonableReplicationLag = viperutil.Configure(
+ "reasonable-replication-lag",
+ viperutil.Options[time.Duration]{
+ FlagName: "reasonable-replication-lag",
+ Default: 10 * time.Second,
+ Dynamic: true,
+ },
+ )
+
+ auditFileLocation = viperutil.Configure(
+ "audit-file-location",
+ viperutil.Options[string]{
+ FlagName: "audit-file-location",
+ Default: "",
+ Dynamic: false,
+ },
+ )
+
+ auditToBackend = viperutil.Configure(
+ "audit-to-backend",
+ viperutil.Options[bool]{
+ FlagName: "audit-to-backend",
+ Default: false,
+ Dynamic: true,
+ },
+ )
+
+ auditToSyslog = viperutil.Configure(
+ "audit-to-syslog",
+ viperutil.Options[bool]{
+ FlagName: "audit-to-syslog",
+ Default: false,
+ Dynamic: true,
+ },
+ )
+
+ auditPurgeDuration = viperutil.Configure(
+ "audit-purge-duration",
+ viperutil.Options[time.Duration]{
+ FlagName: "audit-purge-duration",
+ Default: 7 * 24 * time.Hour,
+ Dynamic: true,
+ },
+ )
+
+ waitReplicasTimeout = viperutil.Configure(
+ "wait-replicas-timeout",
+ viperutil.Options[time.Duration]{
+ FlagName: "wait-replicas-timeout",
+ Default: 30 * time.Second,
+ Dynamic: true,
+ },
+ )
+
+ tolerableReplicationLag = viperutil.Configure(
+ "tolerable-replication-lag",
+ viperutil.Options[time.Duration]{
+ FlagName: "tolerable-replication-lag",
+ Default: 0 * time.Second,
+ Dynamic: true,
+ },
+ )
+
+ topoInformationRefreshDuration = viperutil.Configure(
+ "topo-information-refresh-duration",
+ viperutil.Options[time.Duration]{
+ FlagName: "topo-information-refresh-duration",
+ Default: 15 * time.Second,
+ Dynamic: true,
+ },
+ )
+
+ recoveryPollDuration = viperutil.Configure(
+ "recovery-poll-duration",
+ viperutil.Options[time.Duration]{
+ FlagName: "recovery-poll-duration",
+ Default: 1 * time.Second,
+ Dynamic: true,
+ },
+ )
+
+ ersEnabled = viperutil.Configure(
+ "allow-emergency-reparent",
+ viperutil.Options[bool]{
+ FlagName: "allow-emergency-reparent",
+ Default: true,
+ Dynamic: true,
+ },
+ )
+
+ convertTabletsWithErrantGTIDs = viperutil.Configure(
+ "change-tablets-with-errant-gtid-to-drained",
+ viperutil.Options[bool]{
+ FlagName: "change-tablets-with-errant-gtid-to-drained",
+ Default: false,
+ Dynamic: true,
+ },
+ )
)
-// RegisterFlags registers the flags required by VTOrc
-func RegisterFlags(fs *pflag.FlagSet) {
- fs.StringVar(&sqliteDataFile, "sqlite-data-file", sqliteDataFile, "SQLite Datafile to use as VTOrc's database")
- fs.DurationVar(&instancePollTime, "instance-poll-time", instancePollTime, "Timer duration on which VTOrc refreshes MySQL information")
- fs.DurationVar(&snapshotTopologyInterval, "snapshot-topology-interval", snapshotTopologyInterval, "Timer duration on which VTOrc takes a snapshot of the current MySQL information it has in the database. Should be in multiple of hours")
- fs.DurationVar(&reasonableReplicationLag, "reasonable-replication-lag", reasonableReplicationLag, "Maximum replication lag on replicas which is deemed to be acceptable")
- fs.StringVar(&auditFileLocation, "audit-file-location", auditFileLocation, "File location where the audit logs are to be stored")
- fs.BoolVar(&auditToBackend, "audit-to-backend", auditToBackend, "Whether to store the audit log in the VTOrc database")
- fs.BoolVar(&auditToSyslog, "audit-to-syslog", auditToSyslog, "Whether to store the audit log in the syslog")
- fs.DurationVar(&auditPurgeDuration, "audit-purge-duration", auditPurgeDuration, "Duration for which audit logs are held before being purged. Should be in multiples of days")
- fs.DurationVar(&recoveryPeriodBlockDuration, "recovery-period-block-duration", recoveryPeriodBlockDuration, "Duration for which a new recovery is blocked on an instance after running a recovery")
- fs.MarkDeprecated("recovery-period-block-duration", "As of v20 this is ignored and will be removed in a future release.")
- fs.BoolVar(&preventCrossCellFailover, "prevent-cross-cell-failover", preventCrossCellFailover, "Prevent VTOrc from promoting a primary in a different cell than the current primary in case of a failover")
- fs.DurationVar(&waitReplicasTimeout, "wait-replicas-timeout", waitReplicasTimeout, "Duration for which to wait for replica's to respond when issuing RPCs")
- fs.DurationVar(&tolerableReplicationLag, "tolerable-replication-lag", tolerableReplicationLag, "Amount of replication lag that is considered acceptable for a tablet to be eligible for promotion when Vitess makes the choice of a new primary in PRS")
- fs.DurationVar(&topoInformationRefreshDuration, "topo-information-refresh-duration", topoInformationRefreshDuration, "Timer duration on which VTOrc refreshes the keyspace and vttablet records from the topology server")
- fs.DurationVar(&recoveryPollDuration, "recovery-poll-duration", recoveryPollDuration, "Timer duration on which VTOrc polls its database to run a recovery")
- fs.BoolVar(&ersEnabled, "allow-emergency-reparent", ersEnabled, "Whether VTOrc should be allowed to run emergency reparent operation when it detects a dead primary")
- fs.BoolVar(&convertTabletsWithErrantGTIDs, "change-tablets-with-errant-gtid-to-drained", convertTabletsWithErrantGTIDs, "Whether VTOrc should be changing the type of tablets with errant GTIDs to DRAINED")
+func init() {
+ servenv.OnParseFor("vtorc", registerFlags)
}
-// Configuration makes for vtorc configuration input, which can be provided by user via JSON formatted file.
-// Some of the parameters have reasonable default values, and some (like database credentials) are
-// strictly expected from user.
-// TODO(sougou): change this to yaml parsing, and possible merge with tabletenv.
-type Configuration struct {
- SQLite3DataFile string // full path to sqlite3 datafile
- InstancePollSeconds uint // Number of seconds between instance reads
- SnapshotTopologiesIntervalHours uint // Interval in hour between snapshot-topologies invocation. Default: 0 (disabled)
- ReasonableReplicationLagSeconds int // Above this value is considered a problem
- AuditLogFile string // Name of log file for audit operations. Disabled when empty.
- AuditToSyslog bool // If true, audit messages are written to syslog
- AuditToBackendDB bool // If true, audit messages are written to the backend DB's `audit` table (default: true)
- AuditPurgeDays uint // Days after which audit entries are purged from the database
- RecoveryPeriodBlockSeconds int // (overrides `RecoveryPeriodBlockMinutes`) The time for which an instance's recovery is kept "active", so as to avoid concurrent recoveries on smae instance as well as flapping
- PreventCrossDataCenterPrimaryFailover bool // When true (default: false), cross-DC primary failover are not allowed, vtorc will do all it can to only fail over within same DC, or else not fail over at all.
- WaitReplicasTimeoutSeconds int // Timeout on amount of time to wait for the replicas in case of ERS. Should be a small value because we should fail-fast. Should not be larger than LockTimeout since that is the total time we use for an ERS.
- TolerableReplicationLagSeconds int // Amount of replication lag that is considered acceptable for a tablet to be eligible for promotion when Vitess makes the choice of a new primary in PRS.
- TopoInformationRefreshSeconds int // Timer duration on which VTOrc refreshes the keyspace and vttablet records from the topo-server.
- RecoveryPollSeconds int // Timer duration on which VTOrc recovery analysis runs
+// registerFlags registers the flags required by VTOrc
+func registerFlags(fs *pflag.FlagSet) {
+ fs.String("sqlite-data-file", sqliteDataFile.Default(), "SQLite Datafile to use as VTOrc's database")
+ fs.Duration("instance-poll-time", instancePollTime.Default(), "Timer duration on which VTOrc refreshes MySQL information")
+ fs.Duration("snapshot-topology-interval", snapshotTopologyInterval.Default(), "Timer duration on which VTOrc takes a snapshot of the current MySQL information it has in the database. Should be in multiple of hours")
+ fs.Duration("reasonable-replication-lag", reasonableReplicationLag.Default(), "Maximum replication lag on replicas which is deemed to be acceptable")
+ fs.String("audit-file-location", auditFileLocation.Default(), "File location where the audit logs are to be stored")
+ fs.Bool("audit-to-backend", auditToBackend.Default(), "Whether to store the audit log in the VTOrc database")
+ fs.Bool("audit-to-syslog", auditToSyslog.Default(), "Whether to store the audit log in the syslog")
+ fs.Duration("audit-purge-duration", auditPurgeDuration.Default(), "Duration for which audit logs are held before being purged. Should be in multiples of days")
+ fs.Bool("prevent-cross-cell-failover", preventCrossCellFailover.Default(), "Prevent VTOrc from promoting a primary in a different cell than the current primary in case of a failover")
+ fs.Duration("wait-replicas-timeout", waitReplicasTimeout.Default(), "Duration for which to wait for replica's to respond when issuing RPCs")
+ fs.Duration("tolerable-replication-lag", tolerableReplicationLag.Default(), "Amount of replication lag that is considered acceptable for a tablet to be eligible for promotion when Vitess makes the choice of a new primary in PRS")
+ fs.Duration("topo-information-refresh-duration", topoInformationRefreshDuration.Default(), "Timer duration on which VTOrc refreshes the keyspace and vttablet records from the topology server")
+ fs.Duration("recovery-poll-duration", recoveryPollDuration.Default(), "Timer duration on which VTOrc polls its database to run a recovery")
+ fs.Bool("allow-emergency-reparent", ersEnabled.Default(), "Whether VTOrc should be allowed to run emergency reparent operation when it detects a dead primary")
+ fs.Bool("change-tablets-with-errant-gtid-to-drained", convertTabletsWithErrantGTIDs.Default(), "Whether VTOrc should be changing the type of tablets with errant GTIDs to DRAINED")
+
+ viperutil.BindFlags(fs,
+ instancePollTime,
+ preventCrossCellFailover,
+ sqliteDataFile,
+ snapshotTopologyInterval,
+ reasonableReplicationLag,
+ auditFileLocation,
+ auditToBackend,
+ auditToSyslog,
+ auditPurgeDuration,
+ waitReplicasTimeout,
+ tolerableReplicationLag,
+ topoInformationRefreshDuration,
+ recoveryPollDuration,
+ ersEnabled,
+ convertTabletsWithErrantGTIDs,
+ )
}
-// ToJSONString will marshal this configuration as JSON
-func (config *Configuration) ToJSONString() string {
- b, _ := json.Marshal(config)
- return string(b)
+// GetInstancePollTime is a getter function.
+func GetInstancePollTime() time.Duration {
+ return instancePollTime.Get()
}
-// Config is *the* configuration instance, used globally to get configuration data
-var Config = newConfiguration()
-var readFileNames []string
-
-// UpdateConfigValuesFromFlags is used to update the config values from the flags defined.
-// This is done before we read any configuration files from the user. So the config files take precedence.
-func UpdateConfigValuesFromFlags() {
- Config.SQLite3DataFile = sqliteDataFile
- Config.InstancePollSeconds = uint(instancePollTime / time.Second)
- Config.InstancePollSeconds = uint(instancePollTime / time.Second)
- Config.SnapshotTopologiesIntervalHours = uint(snapshotTopologyInterval / time.Hour)
- Config.ReasonableReplicationLagSeconds = int(reasonableReplicationLag / time.Second)
- Config.AuditLogFile = auditFileLocation
- Config.AuditToBackendDB = auditToBackend
- Config.AuditToSyslog = auditToSyslog
- Config.AuditPurgeDays = uint(auditPurgeDuration / (time.Hour * 24))
- Config.RecoveryPeriodBlockSeconds = int(recoveryPeriodBlockDuration / time.Second)
- Config.PreventCrossDataCenterPrimaryFailover = preventCrossCellFailover
- Config.WaitReplicasTimeoutSeconds = int(waitReplicasTimeout / time.Second)
- Config.TolerableReplicationLagSeconds = int(tolerableReplicationLag / time.Second)
- Config.TopoInformationRefreshSeconds = int(topoInformationRefreshDuration / time.Second)
- Config.RecoveryPollSeconds = int(recoveryPollDuration / time.Second)
+// SetInstancePollTime is a setter function.
+func SetInstancePollTime(v time.Duration) {
+ instancePollTime.Set(v)
}
-// ERSEnabled reports whether VTOrc is allowed to run ERS or not.
-func ERSEnabled() bool {
- return ersEnabled
+// GetInstancePollSeconds gets the instance poll time but in seconds.
+func GetInstancePollSeconds() uint {
+ return uint(instancePollTime.Get() / time.Second)
}
-// SetERSEnabled sets the value for the ersEnabled variable. This should only be used from tests.
-func SetERSEnabled(val bool) {
- ersEnabled = val
+// GetPreventCrossCellFailover is a getter function.
+func GetPreventCrossCellFailover() bool {
+ return preventCrossCellFailover.Get()
}
-// ConvertTabletWithErrantGTIDs reports whether VTOrc is allowed to change the tablet type of tablets with errant GTIDs to DRAINED.
-func ConvertTabletWithErrantGTIDs() bool {
- return convertTabletsWithErrantGTIDs
+// GetSQLiteDataFile is a getter function.
+func GetSQLiteDataFile() string {
+ return sqliteDataFile.Get()
}
-// SetConvertTabletWithErrantGTIDs sets the value for the convertTabletWithErrantGTIDs variable. This should only be used from tests.
-func SetConvertTabletWithErrantGTIDs(val bool) {
- convertTabletsWithErrantGTIDs = val
+// GetReasonableReplicationLagSeconds gets the reasonable replication lag but in seconds.
+func GetReasonableReplicationLagSeconds() int64 {
+ return int64(reasonableReplicationLag.Get() / time.Second)
+}
+
+// GetSnapshotTopologyInterval is a getter function.
+func GetSnapshotTopologyInterval() time.Duration {
+ return snapshotTopologyInterval.Get()
}
-// LogConfigValues is used to log the config values.
-func LogConfigValues() {
- b, _ := json.MarshalIndent(Config, "", "\t")
- log.Infof("Running with Configuration - %v", string(b))
+// GetAuditFileLocation is a getter function.
+func GetAuditFileLocation() string {
+ return auditFileLocation.Get()
}
-func newConfiguration() *Configuration {
- return &Configuration{
- SQLite3DataFile: "file::memory:?mode=memory&cache=shared",
- InstancePollSeconds: 5,
- SnapshotTopologiesIntervalHours: 0,
- ReasonableReplicationLagSeconds: 10,
- AuditLogFile: "",
- AuditToSyslog: false,
- AuditToBackendDB: false,
- AuditPurgeDays: 7,
- RecoveryPeriodBlockSeconds: 30,
- PreventCrossDataCenterPrimaryFailover: false,
- WaitReplicasTimeoutSeconds: 30,
- TopoInformationRefreshSeconds: 15,
- RecoveryPollSeconds: 1,
- }
+// SetAuditFileLocation is a setter function.
+func SetAuditFileLocation(v string) {
+ auditFileLocation.Set(v)
}
-func (config *Configuration) postReadAdjustments() error {
- if config.SQLite3DataFile == "" {
- return fmt.Errorf("SQLite3DataFile must be set")
- }
+// GetAuditToSyslog is a getter function.
+func GetAuditToSyslog() bool {
+ return auditToSyslog.Get()
+}
+
+// SetAuditToSyslog is a setter function.
+func SetAuditToSyslog(v bool) {
+ auditToSyslog.Set(v)
+}
+
+// GetAuditToBackend is a getter function.
+func GetAuditToBackend() bool {
+ return auditToBackend.Get()
+}
+
+// SetAuditToBackend is a setter function.
+func SetAuditToBackend(v bool) {
+ auditToBackend.Set(v)
+}
- return nil
+// GetAuditPurgeDays gets the audit purge duration but in days.
+func GetAuditPurgeDays() int64 {
+ return int64(auditPurgeDuration.Get() / (24 * time.Hour))
}
-// read reads configuration from given file, or silently skips if the file does not exist.
-// If the file does exist, then it is expected to be in valid JSON format or the function bails out.
-func read(fileName string) (*Configuration, error) {
- if fileName == "" {
- return Config, fmt.Errorf("Empty file name")
- }
- file, err := os.Open(fileName)
- if err != nil {
- return Config, err
- }
- decoder := json.NewDecoder(file)
- err = decoder.Decode(Config)
- if err == nil {
- log.Infof("Read config: %s", fileName)
- } else {
- log.Fatal("Cannot read config file:", fileName, err)
- }
- if err := Config.postReadAdjustments(); err != nil {
- log.Fatal(err)
- }
- return Config, err
+// SetAuditPurgeDays sets the audit purge duration.
+func SetAuditPurgeDays(days int64) {
+ auditPurgeDuration.Set(time.Duration(days) * 24 * time.Hour)
}
-// Read reads configuration from zero, either, some or all given files, in order of input.
-// A file can override configuration provided in previous file.
-func Read(fileNames ...string) *Configuration {
- for _, fileName := range fileNames {
- _, _ = read(fileName)
- }
- readFileNames = fileNames
- return Config
+// GetWaitReplicasTimeout is a getter function.
+func GetWaitReplicasTimeout() time.Duration {
+ return waitReplicasTimeout.Get()
}
-// ForceRead reads configuration from given file name or bails out if it fails
-func ForceRead(fileName string) *Configuration {
- _, err := read(fileName)
- if err != nil {
- log.Fatal("Cannot read config file:", fileName, err)
- }
- readFileNames = []string{fileName}
- return Config
+// GetTolerableReplicationLag is a getter function.
+func GetTolerableReplicationLag() time.Duration {
+ return tolerableReplicationLag.Get()
}
-// Reload re-reads configuration from last used files
-func Reload(extraFileNames ...string) *Configuration {
- for _, fileName := range readFileNames {
- _, _ = read(fileName)
- }
- for _, fileName := range extraFileNames {
- _, _ = read(fileName)
- }
- return Config
+// GetTopoInformationRefreshDuration is a getter function.
+func GetTopoInformationRefreshDuration() time.Duration {
+ return topoInformationRefreshDuration.Get()
+}
+
+// GetRecoveryPollDuration is a getter function.
+func GetRecoveryPollDuration() time.Duration {
+ return recoveryPollDuration.Get()
+}
+
+// ERSEnabled reports whether VTOrc is allowed to run ERS or not.
+func ERSEnabled() bool {
+ return ersEnabled.Get()
+}
+
+// SetERSEnabled sets the value for the ersEnabled variable. This should only be used from tests.
+func SetERSEnabled(val bool) {
+ ersEnabled.Set(val)
+}
+
+// ConvertTabletWithErrantGTIDs reports whether VTOrc is allowed to change the tablet type of tablets with errant GTIDs to DRAINED.
+func ConvertTabletWithErrantGTIDs() bool {
+ return convertTabletsWithErrantGTIDs.Get()
+}
+
+// SetConvertTabletWithErrantGTIDs sets the value for the convertTabletWithErrantGTIDs variable. This should only be used from tests.
+func SetConvertTabletWithErrantGTIDs(val bool) {
+ convertTabletsWithErrantGTIDs.Set(val)
}
// MarkConfigurationLoaded is called once configuration has first been loaded.
diff --git a/go/vt/vtorc/config/config_test.go b/go/vt/vtorc/config/config_test.go
deleted file mode 100644
index 2009b476f1d..00000000000
--- a/go/vt/vtorc/config/config_test.go
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
-Copyright 2022 The Vitess Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package config
-
-import (
- "testing"
- "time"
-
- "github.com/stretchr/testify/require"
-)
-
-func TestUpdateConfigValuesFromFlags(t *testing.T) {
- t.Run("defaults", func(t *testing.T) {
- // Restore the changes we make to the Config parameter
- defer func() {
- Config = newConfiguration()
- }()
- defaultConfig := newConfiguration()
- UpdateConfigValuesFromFlags()
- require.Equal(t, defaultConfig, Config)
- })
-
- t.Run("override auditPurgeDuration", func(t *testing.T) {
- oldAuditPurgeDuration := auditPurgeDuration
- auditPurgeDuration = 8 * time.Hour * 24
- auditPurgeDuration += time.Second + 4*time.Minute
- // Restore the changes we make
- defer func() {
- Config = newConfiguration()
- auditPurgeDuration = oldAuditPurgeDuration
- }()
-
- testConfig := newConfiguration()
- // auditPurgeDuration is supposed to be in multiples of days.
- // If it is not, then we round down to the nearest number of days.
- testConfig.AuditPurgeDays = 8
- UpdateConfigValuesFromFlags()
- require.Equal(t, testConfig, Config)
- })
-
- t.Run("override sqliteDataFile", func(t *testing.T) {
- oldSqliteDataFile := sqliteDataFile
- sqliteDataFile = "newVal"
- // Restore the changes we make
- defer func() {
- Config = newConfiguration()
- sqliteDataFile = oldSqliteDataFile
- }()
-
- testConfig := newConfiguration()
- testConfig.SQLite3DataFile = "newVal"
- UpdateConfigValuesFromFlags()
- require.Equal(t, testConfig, Config)
- })
-
- t.Run("override instancePollTime", func(t *testing.T) {
- oldInstancePollTime := instancePollTime
- instancePollTime = 7 * time.Second
- // Restore the changes we make
- defer func() {
- Config = newConfiguration()
- instancePollTime = oldInstancePollTime
- }()
-
- testConfig := newConfiguration()
- testConfig.InstancePollSeconds = 7
- UpdateConfigValuesFromFlags()
- require.Equal(t, testConfig, Config)
- })
-
- t.Run("override snapshotTopologyInterval", func(t *testing.T) {
- oldSnapshotTopologyInterval := snapshotTopologyInterval
- snapshotTopologyInterval = 1 * time.Hour
- // Restore the changes we make
- defer func() {
- Config = newConfiguration()
- snapshotTopologyInterval = oldSnapshotTopologyInterval
- }()
-
- testConfig := newConfiguration()
- testConfig.SnapshotTopologiesIntervalHours = 1
- UpdateConfigValuesFromFlags()
- require.Equal(t, testConfig, Config)
- })
-
- t.Run("override reasonableReplicationLag", func(t *testing.T) {
- oldReasonableReplicationLag := reasonableReplicationLag
- reasonableReplicationLag = 15 * time.Second
- // Restore the changes we make
- defer func() {
- Config = newConfiguration()
- reasonableReplicationLag = oldReasonableReplicationLag
- }()
-
- testConfig := newConfiguration()
- testConfig.ReasonableReplicationLagSeconds = 15
- UpdateConfigValuesFromFlags()
- require.Equal(t, testConfig, Config)
- })
-
- t.Run("override auditFileLocation", func(t *testing.T) {
- oldAuditFileLocation := auditFileLocation
- auditFileLocation = "newFile"
- // Restore the changes we make
- defer func() {
- Config = newConfiguration()
- auditFileLocation = oldAuditFileLocation
- }()
-
- testConfig := newConfiguration()
- testConfig.AuditLogFile = "newFile"
- UpdateConfigValuesFromFlags()
- require.Equal(t, testConfig, Config)
- })
-
- t.Run("override auditToBackend", func(t *testing.T) {
- oldAuditToBackend := auditToBackend
- auditToBackend = true
- // Restore the changes we make
- defer func() {
- Config = newConfiguration()
- auditToBackend = oldAuditToBackend
- }()
-
- testConfig := newConfiguration()
- testConfig.AuditToBackendDB = true
- UpdateConfigValuesFromFlags()
- require.Equal(t, testConfig, Config)
- })
-
- t.Run("override auditToSyslog", func(t *testing.T) {
- oldAuditToSyslog := auditToSyslog
- auditToSyslog = true
- // Restore the changes we make
- defer func() {
- Config = newConfiguration()
- auditToSyslog = oldAuditToSyslog
- }()
-
- testConfig := newConfiguration()
- testConfig.AuditToSyslog = true
- UpdateConfigValuesFromFlags()
- require.Equal(t, testConfig, Config)
- })
-
- t.Run("override recoveryPeriodBlockDuration", func(t *testing.T) {
- oldRecoveryPeriodBlockDuration := recoveryPeriodBlockDuration
- recoveryPeriodBlockDuration = 5 * time.Minute
- // Restore the changes we make
- defer func() {
- Config = newConfiguration()
- recoveryPeriodBlockDuration = oldRecoveryPeriodBlockDuration
- }()
-
- testConfig := newConfiguration()
- testConfig.RecoveryPeriodBlockSeconds = 300
- UpdateConfigValuesFromFlags()
- require.Equal(t, testConfig, Config)
- })
-
- t.Run("override preventCrossCellFailover", func(t *testing.T) {
- oldPreventCrossCellFailover := preventCrossCellFailover
- preventCrossCellFailover = true
- // Restore the changes we make
- defer func() {
- Config = newConfiguration()
- preventCrossCellFailover = oldPreventCrossCellFailover
- }()
-
- testConfig := newConfiguration()
- testConfig.PreventCrossDataCenterPrimaryFailover = true
- UpdateConfigValuesFromFlags()
- require.Equal(t, testConfig, Config)
- })
-
- t.Run("override waitReplicasTimeout", func(t *testing.T) {
- oldWaitReplicasTimeout := waitReplicasTimeout
- waitReplicasTimeout = 3*time.Minute + 4*time.Second
- // Restore the changes we make
- defer func() {
- Config = newConfiguration()
- waitReplicasTimeout = oldWaitReplicasTimeout
- }()
-
- testConfig := newConfiguration()
- testConfig.WaitReplicasTimeoutSeconds = 184
- UpdateConfigValuesFromFlags()
- require.Equal(t, testConfig, Config)
- })
-
- t.Run("override topoInformationRefreshDuration", func(t *testing.T) {
- oldTopoInformationRefreshDuration := topoInformationRefreshDuration
- topoInformationRefreshDuration = 1 * time.Second
- // Restore the changes we make
- defer func() {
- Config = newConfiguration()
- topoInformationRefreshDuration = oldTopoInformationRefreshDuration
- }()
-
- testConfig := newConfiguration()
- testConfig.TopoInformationRefreshSeconds = 1
- UpdateConfigValuesFromFlags()
- require.Equal(t, testConfig, Config)
- })
-
- t.Run("override recoveryPollDuration", func(t *testing.T) {
- oldRecoveryPollDuration := recoveryPollDuration
- recoveryPollDuration = 15 * time.Second
- // Restore the changes we make
- defer func() {
- Config = newConfiguration()
- recoveryPollDuration = oldRecoveryPollDuration
- }()
-
- testConfig := newConfiguration()
- testConfig.RecoveryPollSeconds = 15
- UpdateConfigValuesFromFlags()
- require.Equal(t, testConfig, Config)
- })
-}
diff --git a/go/vt/vtorc/db/db.go b/go/vt/vtorc/db/db.go
index 00f5b5b2550..870a3d15949 100644
--- a/go/vt/vtorc/db/db.go
+++ b/go/vt/vtorc/db/db.go
@@ -18,7 +18,6 @@ package db
import (
"database/sql"
- "strings"
"vitess.io/vitess/go/vt/external/golib/sqlutils"
"vitess.io/vitess/go/vt/log"
@@ -45,10 +44,12 @@ func (m *vtorcDB) QueryVTOrc(query string, argsArray []any, onRow func(sqlutils.
// OpenTopology returns the DB instance for the vtorc backed database
func OpenVTOrc() (db *sql.DB, err error) {
var fromCache bool
- db, fromCache, err = sqlutils.GetSQLiteDB(config.Config.SQLite3DataFile)
+ db, fromCache, err = sqlutils.GetSQLiteDB(config.GetSQLiteDataFile())
if err == nil && !fromCache {
- log.Infof("Connected to vtorc backend: sqlite on %v", config.Config.SQLite3DataFile)
- _ = initVTOrcDB(db)
+ log.Infof("Connected to vtorc backend: sqlite on %v", config.GetSQLiteDataFile())
+ if err := initVTOrcDB(db); err != nil {
+ log.Fatalf("Cannot initiate vtorc: %+v", err)
+ }
}
if db != nil {
db.SetMaxOpenConns(1)
@@ -57,19 +58,15 @@ func OpenVTOrc() (db *sql.DB, err error) {
return db, err
}
-func translateStatement(statement string) string {
- return sqlutils.ToSqlite3Dialect(statement)
-}
-
// registerVTOrcDeployment updates the vtorc_db_deployments table upon successful deployment
func registerVTOrcDeployment(db *sql.DB) error {
- query := `
- replace into vtorc_db_deployments (
- deployed_version, deployed_timestamp
- ) values (
- ?, NOW()
- )
- `
+ query := `REPLACE INTO vtorc_db_deployments (
+ deployed_version,
+ deployed_timestamp
+ ) VALUES (
+ ?,
+ DATETIME('now')
+ )`
if _, err := execInternal(db, query, ""); err != nil {
log.Fatalf("Unable to write to vtorc_db_deployments: %+v", err)
}
@@ -81,40 +78,24 @@ func registerVTOrcDeployment(db *sql.DB) error {
func deployStatements(db *sql.DB, queries []string) error {
tx, err := db.Begin()
if err != nil {
- log.Fatal(err.Error())
+ return err
}
for _, query := range queries {
- query = translateStatement(query)
if _, err := tx.Exec(query); err != nil {
- if strings.Contains(err.Error(), "syntax error") {
- log.Fatalf("Cannot initiate vtorc: %+v; query=%+v", err, query)
- return err
- }
- if !sqlutils.IsAlterTable(query) && !sqlutils.IsCreateIndex(query) && !sqlutils.IsDropIndex(query) {
- log.Fatalf("Cannot initiate vtorc: %+v; query=%+v", err, query)
- return err
- }
- if !strings.Contains(err.Error(), "duplicate column name") &&
- !strings.Contains(err.Error(), "Duplicate column name") &&
- !strings.Contains(err.Error(), "check that column/key exists") &&
- !strings.Contains(err.Error(), "already exists") &&
- !strings.Contains(err.Error(), "Duplicate key name") {
- log.Errorf("Error initiating vtorc: %+v; query=%+v", err, query)
- }
+ return err
}
}
- if err := tx.Commit(); err != nil {
- log.Fatal(err.Error())
- }
- return nil
+ return tx.Commit()
}
// ClearVTOrcDatabase is used to clear the VTOrc database. This function is meant to be used by tests to clear the
// database to get a clean slate without starting a new one.
func ClearVTOrcDatabase() {
- db, _, _ := sqlutils.GetSQLiteDB(config.Config.SQLite3DataFile)
+ db, _, _ := sqlutils.GetSQLiteDB(config.GetSQLiteDataFile())
if db != nil {
- _ = initVTOrcDB(db)
+ if err := initVTOrcDB(db); err != nil {
+ log.Fatalf("Cannot re-initiate vtorc: %+v", err)
+ }
}
}
@@ -123,21 +104,24 @@ func ClearVTOrcDatabase() {
func initVTOrcDB(db *sql.DB) error {
log.Info("Initializing vtorc")
log.Info("Migrating database schema")
- _ = deployStatements(db, vtorcBackend)
- _ = registerVTOrcDeployment(db)
-
- _, _ = ExecVTOrc(`PRAGMA journal_mode = WAL`)
- _, _ = ExecVTOrc(`PRAGMA synchronous = NORMAL`)
-
+ if err := deployStatements(db, vtorcBackend); err != nil {
+ return err
+ }
+ if err := registerVTOrcDeployment(db); err != nil {
+ return err
+ }
+ if _, err := ExecVTOrc(`PRAGMA journal_mode = WAL`); err != nil {
+ return err
+ }
+ if _, err := ExecVTOrc(`PRAGMA synchronous = NORMAL`); err != nil {
+ return err
+ }
return nil
}
// execInternal
func execInternal(db *sql.DB, query string, args ...any) (sql.Result, error) {
- var err error
- query = translateStatement(query)
- res, err := sqlutils.ExecNoPrepare(db, query, args...)
- return res, err
+ return sqlutils.ExecNoPrepare(db, query, args...)
}
// ExecVTOrc will execute given query on the vtorc backend database.
@@ -151,7 +135,6 @@ func ExecVTOrc(query string, args ...any) (sql.Result, error) {
// QueryVTOrcRowsMap
func QueryVTOrcRowsMap(query string, onRow func(sqlutils.RowMap) error) error {
- query = translateStatement(query)
db, err := OpenVTOrc()
if err != nil {
return err
@@ -162,7 +145,6 @@ func QueryVTOrcRowsMap(query string, onRow func(sqlutils.RowMap) error) error {
// QueryVTOrc
func QueryVTOrc(query string, argsArray []any, onRow func(sqlutils.RowMap) error) error {
- query = translateStatement(query)
db, err := OpenVTOrc()
if err != nil {
return err
diff --git a/go/vt/vtorc/discovery/queue.go b/go/vt/vtorc/discovery/queue.go
index 95751c6ae25..4b18303959b 100644
--- a/go/vt/vtorc/discovery/queue.go
+++ b/go/vt/vtorc/discovery/queue.go
@@ -153,7 +153,7 @@ func (q *Queue) Consume() string {
// alarm if have been waiting for too long
timeOnQueue := time.Since(q.queuedKeys[key])
- if timeOnQueue > time.Duration(config.Config.InstancePollSeconds)*time.Second {
+ if timeOnQueue > config.GetInstancePollTime() {
log.Warningf("key %v spent %.4fs waiting on a discoveryQueue", key, timeOnQueue.Seconds())
}
diff --git a/go/vt/vtorc/inst/analysis.go b/go/vt/vtorc/inst/analysis.go
index 66d6c6dd9ce..3e9e81c5c9f 100644
--- a/go/vt/vtorc/inst/analysis.go
+++ b/go/vt/vtorc/inst/analysis.go
@@ -144,5 +144,5 @@ func (replicationAnalysis *ReplicationAnalysis) MarshalJSON() ([]byte, error) {
// ValidSecondsFromSeenToLastAttemptedCheck returns the maximum allowed elapsed time
// between last_attempted_check to last_checked before we consider the instance as invalid.
func ValidSecondsFromSeenToLastAttemptedCheck() uint {
- return config.Config.InstancePollSeconds + 1
+ return config.GetInstancePollSeconds()
}
diff --git a/go/vt/vtorc/inst/analysis_dao.go b/go/vt/vtorc/inst/analysis_dao.go
index 0268a8b183a..07830bf7dda 100644
--- a/go/vt/vtorc/inst/analysis_dao.go
+++ b/go/vt/vtorc/inst/analysis_dao.go
@@ -47,7 +47,7 @@ func init() {
func initializeAnalysisDaoPostConfiguration() {
config.WaitForConfigurationToBeLoaded()
- recentInstantAnalysis = cache.New(time.Duration(config.Config.RecoveryPollSeconds*2)*time.Second, time.Second)
+ recentInstantAnalysis = cache.New(config.GetRecoveryPollDuration()*2, time.Second)
}
type clusterAnalysis struct {
@@ -68,9 +68,8 @@ func GetReplicationAnalysis(keyspace string, shard string, hints *ReplicationAna
}
// TODO(sougou); deprecate ReduceReplicationAnalysisCount
- args := sqlutils.Args(config.Config.ReasonableReplicationLagSeconds, ValidSecondsFromSeenToLastAttemptedCheck(), config.Config.ReasonableReplicationLagSeconds, keyspace, shard)
- query := `
- SELECT
+ args := sqlutils.Args(config.GetReasonableReplicationLagSeconds(), ValidSecondsFromSeenToLastAttemptedCheck(), config.GetReasonableReplicationLagSeconds(), keyspace, shard)
+ query := `SELECT
vitess_tablet.info AS tablet_info,
vitess_tablet.tablet_type,
vitess_tablet.primary_timestamp,
@@ -91,13 +90,13 @@ func GetReplicationAnalysis(keyspace string, shard string, hints *ReplicationAna
IFNULL(
primary_instance.binary_log_file = database_instance_stale_binlog_coordinates.binary_log_file
AND primary_instance.binary_log_pos = database_instance_stale_binlog_coordinates.binary_log_pos
- AND database_instance_stale_binlog_coordinates.first_seen < NOW() - interval ? second,
+ AND database_instance_stale_binlog_coordinates.first_seen < DATETIME('now', PRINTF('-%d SECOND', ?)),
0
)
) AS is_stale_binlog_coordinates,
MIN(
primary_instance.last_checked <= primary_instance.last_seen
- and primary_instance.last_attempted_check <= primary_instance.last_seen + interval ? second
+ and primary_instance.last_attempted_check <= DATETIME(primary_instance.last_seen, PRINTF('+%d SECOND', ?))
) = 1 AS is_last_check_valid,
/* To be considered a primary, traditional async replication must not be present/valid AND the host should either */
/* not be a replication group member OR be the primary of the replication group */
@@ -294,6 +293,11 @@ func GetReplicationAnalysis(keyspace string, shard string, hints *ReplicationAna
return nil
}
+ // We don't want to run any fixes on any non-replica type tablet.
+ if tablet.Type != topodatapb.TabletType_PRIMARY && !topo.IsReplicaType(tablet.Type) {
+ return nil
+ }
+
primaryTablet := &topodatapb.Tablet{}
if str := m.GetString("primary_tablet_info"); str != "" {
if err := opts.Unmarshal([]byte(str), primaryTablet); err != nil {
@@ -650,13 +654,13 @@ func auditInstanceAnalysisInChangelog(tabletAlias string, analysisCode AnalysisC
// Find if the lastAnalysisHasChanged or not while updating the row if it has.
lastAnalysisChanged := false
{
- sqlResult, err := db.ExecVTOrc(`
- update database_instance_last_analysis set
+ sqlResult, err := db.ExecVTOrc(`UPDATE database_instance_last_analysis
+ SET
analysis = ?,
- analysis_timestamp = now()
- where
+ analysis_timestamp = DATETIME('now')
+ WHERE
alias = ?
- and analysis != ?
+ AND analysis != ?
`,
string(analysisCode), tabletAlias, string(analysisCode),
)
@@ -677,13 +681,16 @@ func auditInstanceAnalysisInChangelog(tabletAlias string, analysisCode AnalysisC
firstInsertion := false
if !lastAnalysisChanged {
// The insert only returns more than 1 row changed if this is the first insertion.
- sqlResult, err := db.ExecVTOrc(`
- insert ignore into database_instance_last_analysis (
- alias, analysis_timestamp, analysis
- ) values (
- ?, now(), ?
- )
- `,
+ sqlResult, err := db.ExecVTOrc(`INSERT OR IGNORE
+ INTO database_instance_last_analysis (
+ alias,
+ analysis_timestamp,
+ analysis
+ ) VALUES (
+ ?,
+ DATETIME('now'),
+ ?
+ )`,
tabletAlias, string(analysisCode),
)
if err != nil {
@@ -703,13 +710,16 @@ func auditInstanceAnalysisInChangelog(tabletAlias string, analysisCode AnalysisC
return nil
}
- _, err := db.ExecVTOrc(`
- insert into database_instance_analysis_changelog (
- alias, analysis_timestamp, analysis
- ) values (
- ?, now(), ?
- )
- `,
+ _, err := db.ExecVTOrc(`INSERT
+ INTO database_instance_analysis_changelog (
+ alias,
+ analysis_timestamp,
+ analysis
+ ) VALUES (
+ ?,
+ DATETIME('now'),
+ ?
+ )`,
tabletAlias, string(analysisCode),
)
if err == nil {
@@ -722,12 +732,11 @@ func auditInstanceAnalysisInChangelog(tabletAlias string, analysisCode AnalysisC
// ExpireInstanceAnalysisChangelog removes old-enough analysis entries from the changelog
func ExpireInstanceAnalysisChangelog() error {
- _, err := db.ExecVTOrc(`
- delete
- from database_instance_analysis_changelog
- where
- analysis_timestamp < now() - interval ? hour
- `,
+ _, err := db.ExecVTOrc(`DELETE
+ FROM database_instance_analysis_changelog
+ WHERE
+ analysis_timestamp < DATETIME('now', PRINTF('-%d HOUR', ?))
+ `,
config.UnseenInstanceForgetHours,
)
if err != nil {
diff --git a/go/vt/vtorc/inst/analysis_dao_test.go b/go/vt/vtorc/inst/analysis_dao_test.go
index a83e975c747..c061d54ebb3 100644
--- a/go/vt/vtorc/inst/analysis_dao_test.go
+++ b/go/vt/vtorc/inst/analysis_dao_test.go
@@ -424,6 +424,47 @@ func TestGetReplicationAnalysisDecision(t *testing.T) {
keyspaceWanted: "ks",
shardWanted: "0",
codeWanted: ReplicationStopped,
+ }, {
+ name: "No recoveries on drained tablets",
+ info: []*test.InfoForRecoveryAnalysis{{
+ TabletInfo: &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{Cell: "zon1", Uid: 101},
+ Hostname: "localhost",
+ Keyspace: "ks",
+ Shard: "0",
+ Type: topodatapb.TabletType_PRIMARY,
+ MysqlHostname: "localhost",
+ MysqlPort: 6708,
+ },
+ DurabilityPolicy: "none",
+ LastCheckValid: 1,
+ CountReplicas: 4,
+ CountValidReplicas: 4,
+ CountValidReplicatingReplicas: 3,
+ CountValidOracleGTIDReplicas: 4,
+ CountLoggingReplicas: 2,
+ IsPrimary: 1,
+ }, {
+ TabletInfo: &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{Cell: "zon1", Uid: 100},
+ Hostname: "localhost",
+ Keyspace: "ks",
+ Shard: "0",
+ Type: topodatapb.TabletType_DRAINED,
+ MysqlHostname: "localhost",
+ MysqlPort: 6709,
+ },
+ DurabilityPolicy: "none",
+ PrimaryTabletInfo: &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{Cell: "zon1", Uid: 101},
+ },
+ LastCheckValid: 1,
+ ReadOnly: 1,
+ ReplicationStopped: 1,
+ }},
+ keyspaceWanted: "ks",
+ shardWanted: "0",
+ codeWanted: NoProblem,
}, {
name: "ReplicaMisconfigured",
info: []*test.InfoForRecoveryAnalysis{{
diff --git a/go/vt/vtorc/inst/audit_dao.go b/go/vt/vtorc/inst/audit_dao.go
index d048f300faf..7ae60fba927 100644
--- a/go/vt/vtorc/inst/audit_dao.go
+++ b/go/vt/vtorc/inst/audit_dao.go
@@ -38,10 +38,10 @@ func AuditOperation(auditType string, tabletAlias string, message string) error
}
auditWrittenToFile := false
- if config.Config.AuditLogFile != "" {
+ if config.GetAuditFileLocation() != "" {
auditWrittenToFile = true
go func() {
- f, err := os.OpenFile(config.Config.AuditLogFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0640)
+ f, err := os.OpenFile(config.GetAuditFileLocation(), os.O_RDWR|os.O_CREATE|os.O_APPEND, 0640)
if err != nil {
log.Error(err)
return
@@ -54,15 +54,23 @@ func AuditOperation(auditType string, tabletAlias string, message string) error
}
}()
}
- if config.Config.AuditToBackendDB {
- _, err := db.ExecVTOrc(`
- insert
- into audit (
- audit_timestamp, audit_type, alias, keyspace, shard, message
- ) VALUES (
- NOW(), ?, ?, ?, ?, ?
- )
- `,
+ if config.GetAuditToBackend() {
+ _, err := db.ExecVTOrc(`INSERT
+ INTO audit (
+ audit_timestamp,
+ audit_type,
+ alias,
+ keyspace,
+ shard,
+ message
+ ) VALUES (
+ DATETIME('now'),
+ ?,
+ ?,
+ ?,
+ ?,
+ ?
+ )`,
auditType,
tabletAlias,
keyspace,
diff --git a/go/vt/vtorc/inst/audit_dao_test.go b/go/vt/vtorc/inst/audit_dao_test.go
index 1d50de4c146..d22e9177dc3 100644
--- a/go/vt/vtorc/inst/audit_dao_test.go
+++ b/go/vt/vtorc/inst/audit_dao_test.go
@@ -35,13 +35,13 @@ import (
// This test also verifies that we are able to read the recent audits that are written to the databaes.
func TestAuditOperation(t *testing.T) {
// Restore original configurations
- originalAuditSysLog := config.Config.AuditToSyslog
- originalAuditLogFile := config.Config.AuditLogFile
- originalAuditBackend := config.Config.AuditToBackendDB
+ originalAuditSysLog := config.GetAuditToSyslog()
+ originalAuditLogFile := config.GetAuditFileLocation()
+ originalAuditBackend := config.GetAuditToBackend()
defer func() {
- config.Config.AuditToSyslog = originalAuditSysLog
- config.Config.AuditLogFile = originalAuditLogFile
- config.Config.AuditToBackendDB = originalAuditBackend
+ config.SetAuditToSyslog(originalAuditSysLog)
+ config.SetAuditFileLocation(originalAuditLogFile)
+ config.SetAuditToBackend(originalAuditBackend)
}()
orcDb, err := db.OpenVTOrc()
@@ -78,9 +78,9 @@ func TestAuditOperation(t *testing.T) {
message := "test-message"
t.Run("audit to backend", func(t *testing.T) {
- config.Config.AuditLogFile = ""
- config.Config.AuditToSyslog = false
- config.Config.AuditToBackendDB = true
+ config.SetAuditFileLocation("")
+ config.SetAuditToSyslog(false)
+ config.SetAuditToBackend(true)
// Auditing should succeed as expected
err = AuditOperation(auditType, tab100Alias, message)
@@ -106,13 +106,13 @@ func TestAuditOperation(t *testing.T) {
})
t.Run("audit to File", func(t *testing.T) {
- config.Config.AuditToBackendDB = false
- config.Config.AuditToSyslog = false
+ config.SetAuditToBackend(false)
+ config.SetAuditToSyslog(false)
file, err := os.CreateTemp("", "test-auditing-*")
require.NoError(t, err)
defer os.Remove(file.Name())
- config.Config.AuditLogFile = file.Name()
+ config.SetAuditFileLocation(file.Name())
err = AuditOperation(auditType, tab100Alias, message)
require.NoError(t, err)
diff --git a/go/vt/vtorc/inst/instance_dao.go b/go/vt/vtorc/inst/instance_dao.go
index 4e401606a95..d1421dbc91d 100644
--- a/go/vt/vtorc/inst/instance_dao.go
+++ b/go/vt/vtorc/inst/instance_dao.go
@@ -61,6 +61,7 @@ var forgetAliases *cache.Cache
var (
readTopologyInstanceCounter = stats.NewCounter("InstanceReadTopology", "Number of times an instance was read from the topology")
readInstanceCounter = stats.NewCounter("InstanceRead", "Number of times an instance was read")
+ currentErrantGTIDCount = stats.NewGaugesWithSingleLabel("CurrentErrantGTIDCount", "Number of errant GTIDs a vttablet currently has", "TabletAlias")
backendWrites = collection.CreateOrReturnCollection("BACKEND_WRITES")
writeBufferLatency = stopwatch.NewNamedStopwatch()
)
@@ -79,7 +80,7 @@ func init() {
func initializeInstanceDao() {
config.WaitForConfigurationToBeLoaded()
- forgetAliases = cache.New(time.Duration(config.Config.InstancePollSeconds*3)*time.Second, time.Second)
+ forgetAliases = cache.New(config.GetInstancePollTime()*3, time.Second)
cacheInitializationCompleted.Store(true)
}
@@ -113,10 +114,15 @@ func ExecDBWriteFunc(f func() error) error {
func ExpireTableData(tableName string, timestampColumn string) error {
writeFunc := func() error {
- _, err := db.ExecVTOrc(
- fmt.Sprintf("delete from %s where %s < NOW() - INTERVAL ? DAY", tableName, timestampColumn),
- config.Config.AuditPurgeDays,
+ query := fmt.Sprintf(`DELETE
+ FROM %s
+ WHERE
+ %s < DATETIME('now', PRINTF('-%%d DAY', ?))
+ `,
+ tableName,
+ timestampColumn,
)
+ _, err := db.ExecVTOrc(query, config.GetAuditPurgeDays())
return err
}
return ExecDBWriteFunc(writeFunc)
@@ -356,30 +362,7 @@ Cleanup:
// Add replication group ancestry UUID as well. Otherwise, VTOrc thinks there are errant GTIDs in group
// members and its replicas, even though they are not.
instance.AncestryUUID = strings.Trim(instance.AncestryUUID, ",")
- if instance.ExecutedGtidSet != "" && instance.primaryExecutedGtidSet != "" {
- // Compare primary & replica GTID sets, but ignore the sets that present the primary's UUID.
- // This is because vtorc may pool primary and replica at an inconvenient timing,
- // such that the replica may _seems_ to have more entries than the primary, when in fact
- // it's just that the primary's probing is stale.
- redactedExecutedGtidSet, _ := NewOracleGtidSet(instance.ExecutedGtidSet)
- for _, uuid := range strings.Split(instance.AncestryUUID, ",") {
- if uuid != instance.ServerUUID {
- redactedExecutedGtidSet.RemoveUUID(uuid)
- }
- if instance.IsCoPrimary && uuid == instance.ServerUUID {
- // If this is a co-primary, then this server is likely to show its own generated GTIDs as errant,
- // because its co-primary has not applied them yet
- redactedExecutedGtidSet.RemoveUUID(uuid)
- }
- }
- // Avoid querying the database if there's no point:
- if !redactedExecutedGtidSet.IsEmpty() {
- redactedPrimaryExecutedGtidSet, _ := NewOracleGtidSet(instance.primaryExecutedGtidSet)
- redactedPrimaryExecutedGtidSet.RemoveUUID(instance.SourceUUID)
-
- instance.GtidErrant, err = replication.Subtract(redactedExecutedGtidSet.String(), redactedPrimaryExecutedGtidSet.String())
- }
- }
+ err = detectErrantGTIDs(instance, tablet)
}
latency.Stop("instance")
@@ -406,6 +389,63 @@ Cleanup:
return nil, err
}
+// detectErrantGTIDs detects the errant GTIDs on an instance.
+func detectErrantGTIDs(instance *Instance, tablet *topodatapb.Tablet) (err error) {
+ // If the tablet is not replicating from anyone, then it could be the previous primary.
+ // We should check for errant GTIDs by finding the difference with the shard's current primary.
+ if instance.primaryExecutedGtidSet == "" && instance.SourceHost == "" {
+ var primaryInstance *Instance
+ primaryAlias, _, _ := ReadShardPrimaryInformation(tablet.Keyspace, tablet.Shard)
+ if primaryAlias != "" {
+ // Check if the current tablet is the primary.
+ // If it is, then we don't need to run errant gtid detection on it.
+ if primaryAlias == instance.InstanceAlias {
+ return nil
+ }
+ primaryInstance, _, _ = ReadInstance(primaryAlias)
+ }
+ // Only run errant GTID detection, if we are sure that the data read of the current primary
+ // is up-to-date enough to reflect that it has been promoted. This is needed to prevent
+ // flagging incorrect errant GTIDs. If we were to use old data, we could have some GTIDs
+ // accepted by the old primary (this tablet) that don't show in the new primary's set.
+ if primaryInstance != nil {
+ if primaryInstance.SourceHost == "" {
+ instance.primaryExecutedGtidSet = primaryInstance.ExecutedGtidSet
+ }
+ }
+ }
+ if instance.ExecutedGtidSet != "" && instance.primaryExecutedGtidSet != "" {
+ // Compare primary & replica GTID sets, but ignore the sets that present the primary's UUID.
+ // This is because vtorc may pool primary and replica at an inconvenient timing,
+ // such that the replica may _seems_ to have more entries than the primary, when in fact
+ // it's just that the primary's probing is stale.
+ redactedExecutedGtidSet, _ := NewOracleGtidSet(instance.ExecutedGtidSet)
+ for _, uuid := range strings.Split(instance.AncestryUUID, ",") {
+ if uuid != instance.ServerUUID {
+ redactedExecutedGtidSet.RemoveUUID(uuid)
+ }
+ if instance.IsCoPrimary && uuid == instance.ServerUUID {
+ // If this is a co-primary, then this server is likely to show its own generated GTIDs as errant,
+ // because its co-primary has not applied them yet
+ redactedExecutedGtidSet.RemoveUUID(uuid)
+ }
+ }
+ // Avoid querying the database if there's no point:
+ if !redactedExecutedGtidSet.IsEmpty() {
+ redactedPrimaryExecutedGtidSet, _ := NewOracleGtidSet(instance.primaryExecutedGtidSet)
+ redactedPrimaryExecutedGtidSet.RemoveUUID(instance.SourceUUID)
+
+ instance.GtidErrant, err = replication.Subtract(redactedExecutedGtidSet.String(), redactedPrimaryExecutedGtidSet.String())
+ if err == nil {
+ var gtidCount int64
+ gtidCount, err = replication.GTIDCount(instance.GtidErrant)
+ currentErrantGTIDCount.Set(instance.InstanceAlias, gtidCount)
+ }
+ }
+ }
+ return err
+}
+
// getKeyspaceShardName returns a single string having both the keyspace and shard
func getKeyspaceShardName(keyspace, shard string) string {
return fmt.Sprintf("%v:%v", keyspace, shard)
@@ -433,16 +473,16 @@ func ReadInstanceClusterAttributes(instance *Instance) (err error) {
var primaryExecutedGtidSet string
primaryDataFound := false
- query := `
- select
- replication_depth,
- source_host,
- source_port,
- ancestry_uuid,
- executed_gtid_set
- from database_instance
- where hostname=? and port=?
- `
+ query := `SELECT
+ replication_depth,
+ source_host,
+ source_port,
+ ancestry_uuid,
+ executed_gtid_set
+ FROM database_instance
+ WHERE
+ hostname = ?
+ AND port = ?`
primaryHostname := instance.SourceHost
primaryPort := instance.SourcePort
args := sqlutils.Args(primaryHostname, primaryPort)
@@ -538,8 +578,8 @@ func readInstanceRow(m sqlutils.RowMap) *Instance {
instance.ReplicationDepth = m.GetUint("replication_depth")
instance.IsCoPrimary = m.GetBool("is_co_primary")
instance.HasReplicationCredentials = m.GetBool("has_replication_credentials")
- instance.IsUpToDate = (m.GetUint("seconds_since_last_checked") <= config.Config.InstancePollSeconds)
- instance.IsRecentlyChecked = (m.GetUint("seconds_since_last_checked") <= config.Config.InstancePollSeconds*5)
+ instance.IsUpToDate = m.GetUint("seconds_since_last_checked") <= config.GetInstancePollSeconds()
+ instance.IsRecentlyChecked = m.GetUint("seconds_since_last_checked") <= config.GetInstancePollSeconds()*5
instance.LastSeenTimestamp = m.GetString("last_seen")
instance.IsLastCheckValid = m.GetBool("is_last_check_valid")
instance.SecondsSinceLastSeen = m.GetNullInt64("seconds_since_last_seen")
@@ -556,7 +596,7 @@ func readInstanceRow(m sqlutils.RowMap) *Instance {
instance.Problems = append(instance.Problems, "not_recently_checked")
} else if instance.ReplicationThreadsExist() && !instance.ReplicaRunning() {
instance.Problems = append(instance.Problems, "not_replicating")
- } else if instance.ReplicationLagSeconds.Valid && util.AbsInt64(instance.ReplicationLagSeconds.Int64-int64(instance.SQLDelay)) > int64(config.Config.ReasonableReplicationLagSeconds) {
+ } else if instance.ReplicationLagSeconds.Valid && util.AbsInt64(instance.ReplicationLagSeconds.Int64-int64(instance.SQLDelay)) > int64(config.GetReasonableReplicationLagSeconds()) {
instance.Problems = append(instance.Problems, "replication_lag")
}
if instance.GtidErrant != "" {
@@ -574,20 +614,22 @@ func readInstancesByCondition(condition string, args []any, sort string) ([](*In
if sort == "" {
sort = `alias`
}
- query := fmt.Sprintf(`
- select
- *,
- unix_timestamp() - unix_timestamp(last_checked) as seconds_since_last_checked,
- ifnull(last_checked <= last_seen, 0) as is_last_check_valid,
- unix_timestamp() - unix_timestamp(last_seen) as seconds_since_last_seen
- from
- vitess_tablet
- left join database_instance using (alias, hostname, port)
- where
- %s
- order by
- %s
- `, condition, sort)
+ query := fmt.Sprintf(`SELECT
+ *,
+ STRFTIME('%%s', 'now') - STRFTIME('%%s', last_checked) AS seconds_since_last_checked,
+ IFNULL(last_checked <= last_seen, 0) AS is_last_check_valid,
+ STRFTIME('%%s', 'now') - STRFTIME('%%s', last_seen) AS seconds_since_last_seen
+ FROM
+ vitess_tablet
+ LEFT JOIN database_instance USING (alias, hostname, port)
+ WHERE
+ %s
+ ORDER BY
+ %s
+ `,
+ condition,
+ sort,
+ )
err := db.QueryVTOrc(query, args, func(m sqlutils.RowMap) error {
instance := readInstanceRow(m)
@@ -608,9 +650,7 @@ func readInstancesByCondition(condition string, args []any, sort string) ([](*In
// ReadInstance reads an instance from the vtorc backend database
func ReadInstance(tabletAlias string) (*Instance, bool, error) {
- condition := `
- alias = ?
- `
+ condition := `alias = ?`
instances, err := readInstancesByCondition(condition, sqlutils.Args(tabletAlias), "")
// We know there will be at most one (alias is the PK).
// And we expect to find one.
@@ -627,30 +667,28 @@ func ReadInstance(tabletAlias string) (*Instance, bool, error) {
// ReadProblemInstances reads all instances with problems
func ReadProblemInstances(keyspace string, shard string) ([](*Instance), error) {
condition := `
- keyspace LIKE (CASE WHEN ? = '' THEN '%' ELSE ? END)
- and shard LIKE (CASE WHEN ? = '' THEN '%' ELSE ? END)
- and (
- (last_seen < last_checked)
- or (unix_timestamp() - unix_timestamp(last_checked) > ?)
- or (replication_sql_thread_state not in (-1 ,1))
- or (replication_io_thread_state not in (-1 ,1))
- or (abs(cast(replication_lag_seconds as signed) - cast(sql_delay as signed)) > ?)
- or (abs(cast(replica_lag_seconds as signed) - cast(sql_delay as signed)) > ?)
- or (gtid_errant != '')
- )
- `
-
- args := sqlutils.Args(keyspace, keyspace, shard, shard, config.Config.InstancePollSeconds*5, config.Config.ReasonableReplicationLagSeconds, config.Config.ReasonableReplicationLagSeconds)
+ keyspace LIKE (CASE WHEN ? = '' THEN '%' ELSE ? END)
+ AND shard LIKE (CASE WHEN ? = '' THEN '%' ELSE ? END)
+ AND (
+ (last_seen < last_checked)
+ OR (STRFTIME('%%s', 'now') - STRFTIME('%%s', last_checked) > ?)
+ OR (replication_sql_thread_state NOT IN (-1 ,1))
+ OR (replication_io_thread_state NOT IN (-1 ,1))
+ OR (ABS(CAST(replication_lag_seconds AS integer) - CAST(sql_delay AS integer)) > ?)
+ OR (ABS(CAST(replica_lag_seconds AS integer) - CAST(sql_delay AS integer)) > ?)
+ OR (gtid_errant != '')
+ )`
+
+ args := sqlutils.Args(keyspace, keyspace, shard, shard, config.GetInstancePollSeconds()*5, config.GetReasonableReplicationLagSeconds(), config.GetReasonableReplicationLagSeconds())
return readInstancesByCondition(condition, args, "")
}
// ReadInstancesWithErrantGTIds reads all instances with errant GTIDs
func ReadInstancesWithErrantGTIds(keyspace string, shard string) ([]*Instance, error) {
condition := `
- keyspace LIKE (CASE WHEN ? = '' THEN '%' ELSE ? END)
- and shard LIKE (CASE WHEN ? = '' THEN '%' ELSE ? END)
- and gtid_errant != ''
- `
+ keyspace LIKE (CASE WHEN ? = '' THEN '%' ELSE ? END)
+ AND shard LIKE (CASE WHEN ? = '' THEN '%' ELSE ? END)
+ AND gtid_errant != ''`
args := sqlutils.Args(keyspace, keyspace, shard, shard)
return readInstancesByCondition(condition, args, "")
@@ -658,15 +696,14 @@ func ReadInstancesWithErrantGTIds(keyspace string, shard string) ([]*Instance, e
// GetKeyspaceShardName gets the keyspace shard name for the given instance key
func GetKeyspaceShardName(tabletAlias string) (keyspace string, shard string, err error) {
- query := `
- select
- keyspace,
- shard
- from
- vitess_tablet
- where
- alias = ?
- `
+ query := `SELECT
+ keyspace,
+ shard
+ FROM
+ vitess_tablet
+ WHERE
+ alias = ?
+ `
err = db.QueryVTOrc(query, sqlutils.Args(tabletAlias), func(m sqlutils.RowMap) error {
keyspace = m.GetString("keyspace")
shard = m.GetString("shard")
@@ -689,28 +726,27 @@ func GetKeyspaceShardName(tabletAlias string) (keyspace string, shard string, er
// the instance.
func ReadOutdatedInstanceKeys() ([]string, error) {
var res []string
- query := `
- SELECT
- alias
- FROM
- database_instance
- WHERE
- CASE
- WHEN last_attempted_check <= last_checked
- THEN last_checked < now() - interval ? second
- ELSE last_checked < now() - interval ? second
- END
- UNION
- SELECT
- vitess_tablet.alias
- FROM
- vitess_tablet LEFT JOIN database_instance ON (
- vitess_tablet.alias = database_instance.alias
- )
- WHERE
- database_instance.alias IS NULL
- `
- args := sqlutils.Args(config.Config.InstancePollSeconds, 2*config.Config.InstancePollSeconds)
+ query := `SELECT
+ alias
+ FROM
+ database_instance
+ WHERE
+ CASE
+ WHEN last_attempted_check <= last_checked
+ THEN last_checked < DATETIME('now', PRINTF('-%d SECOND', ?))
+ ELSE last_checked < DATETIME('now', PRINTF('-%d SECOND', ?))
+ END
+ UNION
+ SELECT
+ vitess_tablet.alias
+ FROM
+ vitess_tablet LEFT JOIN database_instance ON (
+ vitess_tablet.alias = database_instance.alias
+ )
+ WHERE
+ database_instance.alias IS NULL
+ `
+ args := sqlutils.Args(config.GetInstancePollSeconds(), 2*config.GetInstancePollSeconds())
err := db.QueryVTOrc(query, args, func(m sqlutils.RowMap) error {
tabletAlias := m.GetString("alias")
@@ -727,7 +763,7 @@ func ReadOutdatedInstanceKeys() ([]string, error) {
return res, err
}
-func mkInsertOdku(table string, columns []string, values []string, nrRows int, insertIgnore bool) (string, error) {
+func mkInsert(table string, columns []string, values []string, nrRows int, insertIgnore bool) (string, error) {
if len(columns) == 0 {
return "", errors.New("Column list cannot be empty")
}
@@ -739,9 +775,9 @@ func mkInsertOdku(table string, columns []string, values []string, nrRows int, i
}
var q strings.Builder
- var ignore string
+ insertStr := "REPLACE INTO"
if insertIgnore {
- ignore = "ignore"
+ insertStr = "INSERT OR IGNORE INTO"
}
valRow := fmt.Sprintf("(%s)", strings.Join(values, ", "))
var val strings.Builder
@@ -752,26 +788,22 @@ func mkInsertOdku(table string, columns []string, values []string, nrRows int, i
}
col := strings.Join(columns, ", ")
- var odku strings.Builder
- odku.WriteString(fmt.Sprintf("%s=VALUES(%s)", columns[0], columns[0]))
- for _, c := range columns[1:] {
- odku.WriteString(", ")
- odku.WriteString(fmt.Sprintf("%s=VALUES(%s)", c, c))
- }
-
- q.WriteString(fmt.Sprintf(`INSERT %s INTO %s
- (%s)
- VALUES
- %s
- ON DUPLICATE KEY UPDATE
- %s
- `,
- ignore, table, col, val.String(), odku.String()))
+ query := fmt.Sprintf(`%s %s
+ (%s)
+ VALUES
+ %s
+ `,
+ insertStr,
+ table,
+ col,
+ val.String(),
+ )
+ q.WriteString(query)
return q.String(), nil
}
-func mkInsertOdkuForInstances(instances []*Instance, instanceWasActuallyFound bool, updateLastSeen bool) (string, []any, error) {
+func mkInsertForInstances(instances []*Instance, instanceWasActuallyFound bool, updateLastSeen bool) (string, []any, error) {
if len(instances) == 0 {
return "", nil, nil
}
@@ -852,13 +884,13 @@ func mkInsertOdkuForInstances(instances []*Instance, instanceWasActuallyFound bo
for i := range columns {
values[i] = "?"
}
- values[3] = "NOW()" // last_checked
- values[4] = "NOW()" // last_attempted_check
- values[5] = "1" // last_check_partial_success
+ values[3] = "DATETIME('now')" // last_checked
+ values[4] = "DATETIME('now')" // last_attempted_check
+ values[5] = "1" // last_check_partial_success
if updateLastSeen {
columns = append(columns, "last_seen")
- values = append(values, "NOW()")
+ values = append(values, "DATETIME('now')")
}
var args []any
@@ -929,7 +961,7 @@ func mkInsertOdkuForInstances(instances []*Instance, instanceWasActuallyFound bo
args = append(args, instance.LastDiscoveryLatency.Nanoseconds())
}
- sql, err := mkInsertOdku("database_instance", columns, values, len(instances), insertIgnore)
+ sql, err := mkInsert("database_instance", columns, values, len(instances), insertIgnore)
if err != nil {
errMsg := fmt.Sprintf("Failed to build query: %v", err)
log.Errorf(errMsg)
@@ -951,7 +983,7 @@ func writeManyInstances(instances []*Instance, instanceWasActuallyFound bool, up
if len(writeInstances) == 0 {
return nil // nothing to write
}
- sql, args, err := mkInsertOdkuForInstances(writeInstances, instanceWasActuallyFound, updateLastSeen)
+ sql, args, err := mkInsertForInstances(writeInstances, instanceWasActuallyFound, updateLastSeen)
if err != nil {
return err
}
@@ -974,14 +1006,13 @@ func WriteInstance(instance *Instance, instanceWasActuallyFound bool, lastError
// for a given instance
func UpdateInstanceLastChecked(tabletAlias string, partialSuccess bool) error {
writeFunc := func() error {
- _, err := db.ExecVTOrc(`
- update
- database_instance
- set
- last_checked = NOW(),
- last_check_partial_success = ?
- where
- alias = ?`,
+ _, err := db.ExecVTOrc(`UPDATE database_instance
+ SET
+ last_checked = DATETIME('now'),
+ last_check_partial_success = ?
+ WHERE
+ alias = ?
+ `,
partialSuccess,
tabletAlias,
)
@@ -1003,13 +1034,12 @@ func UpdateInstanceLastChecked(tabletAlias string, partialSuccess bool) error {
// we have a "hanging" issue.
func UpdateInstanceLastAttemptedCheck(tabletAlias string) error {
writeFunc := func() error {
- _, err := db.ExecVTOrc(`
- update
- database_instance
- set
- last_attempted_check = NOW()
- where
- alias = ?`,
+ _, err := db.ExecVTOrc(`UPDATE database_instance
+ SET
+ last_attempted_check = DATETIME('now')
+ WHERE
+ alias = ?
+ `,
tabletAlias,
)
if err != nil {
@@ -1036,12 +1066,15 @@ func ForgetInstance(tabletAlias string) error {
forgetAliases.Set(tabletAlias, true, cache.DefaultExpiration)
log.Infof("Forgetting: %v", tabletAlias)
+ // Remove this tablet from errant GTID count metric.
+ currentErrantGTIDCount.Reset(tabletAlias)
+
// Delete from the 'vitess_tablet' table.
- _, err := db.ExecVTOrc(`
- delete
- from vitess_tablet
- where
- alias = ?`,
+ _, err := db.ExecVTOrc(`DELETE
+ FROM vitess_tablet
+ WHERE
+ alias = ?
+ `,
tabletAlias,
)
if err != nil {
@@ -1050,11 +1083,11 @@ func ForgetInstance(tabletAlias string) error {
}
// Also delete from the 'database_instance' table.
- sqlResult, err := db.ExecVTOrc(`
- delete
- from database_instance
- where
- alias = ?`,
+ sqlResult, err := db.ExecVTOrc(`DELETE
+ FROM database_instance
+ WHERE
+ alias = ?
+ `,
tabletAlias,
)
if err != nil {
@@ -1078,11 +1111,11 @@ func ForgetInstance(tabletAlias string) error {
// ForgetLongUnseenInstances will remove entries of all instances that have long since been last seen.
func ForgetLongUnseenInstances() error {
- sqlResult, err := db.ExecVTOrc(`
- delete
- from database_instance
- where
- last_seen < NOW() - interval ? hour`,
+ sqlResult, err := db.ExecVTOrc(`DELETE
+ FROM database_instance
+ WHERE
+ last_seen < DATETIME('now', PRINTF('-%d HOUR', ?))
+ `,
config.UnseenInstanceForgetHours,
)
if err != nil {
@@ -1103,18 +1136,26 @@ func ForgetLongUnseenInstances() error {
// SnapshotTopologies records topology graph for all existing topologies
func SnapshotTopologies() error {
writeFunc := func() error {
- _, err := db.ExecVTOrc(`
- insert ignore into
- database_instance_topology_history (snapshot_unix_timestamp,
- alias, hostname, port, source_host, source_port, keyspace, shard, version)
- select
- UNIX_TIMESTAMP(NOW()),
- vitess_tablet.alias, vitess_tablet.hostname, vitess_tablet.port,
- database_instance.source_host, database_instance.source_port,
+ _, err := db.ExecVTOrc(`INSERT OR IGNORE
+ INTO database_instance_topology_history (
+ snapshot_unix_timestamp,
+ alias,
+ hostname,
+ port,
+ source_host,
+ source_port,
+ keyspace,
+ shard,
+ version
+ )
+ SELECT
+ STRFTIME('%s', 'now'),
+ vitess_tablet.alias, vitess_tablet.hostname, vitess_tablet.port,
+ database_instance.source_host, database_instance.source_port,
vitess_tablet.keyspace, vitess_tablet.shard, database_instance.version
- from
- vitess_tablet left join database_instance using (alias, hostname, port)
- `,
+ FROM
+ vitess_tablet LEFT JOIN database_instance USING (alias, hostname, port)
+ `,
)
if err != nil {
log.Error(err)
@@ -1127,15 +1168,17 @@ func SnapshotTopologies() error {
}
func ExpireStaleInstanceBinlogCoordinates() error {
- expireSeconds := config.Config.ReasonableReplicationLagSeconds * 2
+ expireSeconds := config.GetReasonableReplicationLagSeconds() * 2
if expireSeconds < config.StaleInstanceCoordinatesExpireSeconds {
expireSeconds = config.StaleInstanceCoordinatesExpireSeconds
}
writeFunc := func() error {
- _, err := db.ExecVTOrc(`
- delete from database_instance_stale_binlog_coordinates
- where first_seen < NOW() - INTERVAL ? SECOND
- `, expireSeconds,
+ _, err := db.ExecVTOrc(`DELETE
+ FROM database_instance_stale_binlog_coordinates
+ WHERE
+ first_seen < DATETIME('now', PRINTF('-%d SECOND', ?))
+ `,
+ expireSeconds,
)
if err != nil {
log.Error(err)
@@ -1157,7 +1200,7 @@ func GetDatabaseState() (string, error) {
ts := tableState{
TableName: tableName,
}
- err := db.QueryVTOrc("select * from "+tableName, nil, func(rowMap sqlutils.RowMap) error {
+ err := db.QueryVTOrc("SELECT * FROM "+tableName, nil, func(rowMap sqlutils.RowMap) error {
ts.Rows = append(ts.Rows, rowMap)
return nil
})
diff --git a/go/vt/vtorc/inst/instance_dao_test.go b/go/vt/vtorc/inst/instance_dao_test.go
index 741fc48bca9..cc3217442ed 100644
--- a/go/vt/vtorc/inst/instance_dao_test.go
+++ b/go/vt/vtorc/inst/instance_dao_test.go
@@ -14,6 +14,7 @@ import (
"vitess.io/vitess/go/vt/external/golib/sqlutils"
"vitess.io/vitess/go/vt/log"
topodatapb "vitess.io/vitess/go/vt/proto/topodata"
+ "vitess.io/vitess/go/vt/topo"
"vitess.io/vitess/go/vt/topo/topoproto"
"vitess.io/vitess/go/vt/vtorc/config"
"vitess.io/vitess/go/vt/vtorc/db"
@@ -49,57 +50,48 @@ func mkTestInstances() []*Instance {
return instances
}
-func TestMkInsertOdkuSingle(t *testing.T) {
+func TestMkInsertSingle(t *testing.T) {
instances := mkTestInstances()
- sql, args, err := mkInsertOdkuForInstances(nil, true, true)
+ sql, args, err := mkInsertForInstances(nil, true, true)
require.NoError(t, err)
require.Equal(t, sql, "")
require.Equal(t, len(args), 0)
// one instance
- s1 := `INSERT ignore INTO database_instance
+ s1 := `INSERT OR IGNORE INTO database_instance
(alias, hostname, port, last_checked, last_attempted_check, last_check_partial_success, server_id, server_uuid,
version, major_version, version_comment, binlog_server, read_only, binlog_format,
binlog_row_image, log_bin, log_replica_updates, binary_log_file, binary_log_pos, source_host, source_port, replica_net_timeout, heartbeat_interval,
replica_sql_running, replica_io_running, replication_sql_thread_state, replication_io_thread_state, has_replication_filters, supports_oracle_gtid, oracle_gtid, source_uuid, ancestry_uuid, executed_gtid_set, gtid_mode, gtid_purged, gtid_errant, mariadb_gtid, pseudo_gtid,
source_log_file, read_source_log_pos, relay_source_log_file, exec_source_log_pos, relay_log_file, relay_log_pos, last_sql_error, last_io_error, replication_lag_seconds, replica_lag_seconds, sql_delay, data_center, region, physical_environment, replication_depth, is_co_primary, has_replication_credentials, allow_tls, semi_sync_enforced, semi_sync_primary_enabled, semi_sync_primary_timeout, semi_sync_primary_wait_for_replica_count, semi_sync_replica_enabled, semi_sync_primary_status, semi_sync_primary_clients, semi_sync_replica_status, last_discovery_latency, last_seen)
VALUES
- (?, ?, ?, NOW(), NOW(), 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW())
- ON DUPLICATE KEY UPDATE
- alias=VALUES(alias), hostname=VALUES(hostname), port=VALUES(port), last_checked=VALUES(last_checked), last_attempted_check=VALUES(last_attempted_check), last_check_partial_success=VALUES(last_check_partial_success), server_id=VALUES(server_id), server_uuid=VALUES(server_uuid), version=VALUES(version), major_version=VALUES(major_version), version_comment=VALUES(version_comment), binlog_server=VALUES(binlog_server), read_only=VALUES(read_only), binlog_format=VALUES(binlog_format), binlog_row_image=VALUES(binlog_row_image), log_bin=VALUES(log_bin), log_replica_updates=VALUES(log_replica_updates), binary_log_file=VALUES(binary_log_file), binary_log_pos=VALUES(binary_log_pos), source_host=VALUES(source_host), source_port=VALUES(source_port), replica_net_timeout=VALUES(replica_net_timeout), heartbeat_interval=VALUES(heartbeat_interval), replica_sql_running=VALUES(replica_sql_running), replica_io_running=VALUES(replica_io_running), replication_sql_thread_state=VALUES(replication_sql_thread_state), replication_io_thread_state=VALUES(replication_io_thread_state), has_replication_filters=VALUES(has_replication_filters), supports_oracle_gtid=VALUES(supports_oracle_gtid), oracle_gtid=VALUES(oracle_gtid), source_uuid=VALUES(source_uuid), ancestry_uuid=VALUES(ancestry_uuid), executed_gtid_set=VALUES(executed_gtid_set), gtid_mode=VALUES(gtid_mode), gtid_purged=VALUES(gtid_purged), gtid_errant=VALUES(gtid_errant), mariadb_gtid=VALUES(mariadb_gtid), pseudo_gtid=VALUES(pseudo_gtid), source_log_file=VALUES(source_log_file), read_source_log_pos=VALUES(read_source_log_pos), relay_source_log_file=VALUES(relay_source_log_file), exec_source_log_pos=VALUES(exec_source_log_pos), relay_log_file=VALUES(relay_log_file), relay_log_pos=VALUES(relay_log_pos), last_sql_error=VALUES(last_sql_error), last_io_error=VALUES(last_io_error), replication_lag_seconds=VALUES(replication_lag_seconds), replica_lag_seconds=VALUES(replica_lag_seconds), sql_delay=VALUES(sql_delay), data_center=VALUES(data_center), region=VALUES(region), physical_environment=VALUES(physical_environment), replication_depth=VALUES(replication_depth), is_co_primary=VALUES(is_co_primary), has_replication_credentials=VALUES(has_replication_credentials), allow_tls=VALUES(allow_tls),
- semi_sync_enforced=VALUES(semi_sync_enforced), semi_sync_primary_enabled=VALUES(semi_sync_primary_enabled), semi_sync_primary_timeout=VALUES(semi_sync_primary_timeout), semi_sync_primary_wait_for_replica_count=VALUES(semi_sync_primary_wait_for_replica_count), semi_sync_replica_enabled=VALUES(semi_sync_replica_enabled), semi_sync_primary_status=VALUES(semi_sync_primary_status), semi_sync_primary_clients=VALUES(semi_sync_primary_clients), semi_sync_replica_status=VALUES(semi_sync_replica_status),
- last_discovery_latency=VALUES(last_discovery_latency), last_seen=VALUES(last_seen)
+ (?, ?, ?, DATETIME('now'), DATETIME('now'), 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, DATETIME('now'))
`
a1 := `zone1-i710, i710, 3306, 710, , 5.6.7, 5.6, MySQL, false, false, STATEMENT,
FULL, false, false, , 0, , 0, 0, 0,
false, false, 0, 0, false, false, false, , , , , , , false, false, , 0, mysql.000007, 10, , 0, , , {0 false}, {0 false}, 0, , , , 0, false, false, false, false, false, 0, 0, false, false, 0, false, 0,`
- sql1, args1, err := mkInsertOdkuForInstances(instances[:1], false, true)
+ sql1, args1, err := mkInsertForInstances(instances[:1], false, true)
require.NoError(t, err)
require.Equal(t, normalizeQuery(sql1), normalizeQuery(s1))
require.Equal(t, stripSpaces(fmtArgs(args1)), stripSpaces(a1))
}
-func TestMkInsertOdkuThree(t *testing.T) {
+func TestMkInsertThree(t *testing.T) {
instances := mkTestInstances()
// three instances
- s3 := `INSERT INTO database_instance
+ s3 := `REPLACE INTO database_instance
(alias, hostname, port, last_checked, last_attempted_check, last_check_partial_success, server_id, server_uuid,
version, major_version, version_comment, binlog_server, read_only, binlog_format,
binlog_row_image, log_bin, log_replica_updates, binary_log_file, binary_log_pos, source_host, source_port, replica_net_timeout, heartbeat_interval,
replica_sql_running, replica_io_running, replication_sql_thread_state, replication_io_thread_state, has_replication_filters, supports_oracle_gtid, oracle_gtid, source_uuid, ancestry_uuid, executed_gtid_set, gtid_mode, gtid_purged, gtid_errant, mariadb_gtid, pseudo_gtid,
source_log_file, read_source_log_pos, relay_source_log_file, exec_source_log_pos, relay_log_file, relay_log_pos, last_sql_error, last_io_error, replication_lag_seconds, replica_lag_seconds, sql_delay, data_center, region, physical_environment, replication_depth, is_co_primary, has_replication_credentials, allow_tls, semi_sync_enforced, semi_sync_primary_enabled, semi_sync_primary_timeout, semi_sync_primary_wait_for_replica_count, semi_sync_replica_enabled, semi_sync_primary_status, semi_sync_primary_clients, semi_sync_replica_status, last_discovery_latency, last_seen)
VALUES
- (?, ?, ?, NOW(), NOW(), 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW()),
- (?, ?, ?, NOW(), NOW(), 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW()),
- (?, ?, ?, NOW(), NOW(), 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW())
- ON DUPLICATE KEY UPDATE
- alias=VALUES(alias), hostname=VALUES(hostname), port=VALUES(port), last_checked=VALUES(last_checked), last_attempted_check=VALUES(last_attempted_check), last_check_partial_success=VALUES(last_check_partial_success), server_id=VALUES(server_id), server_uuid=VALUES(server_uuid), version=VALUES(version), major_version=VALUES(major_version), version_comment=VALUES(version_comment), binlog_server=VALUES(binlog_server), read_only=VALUES(read_only), binlog_format=VALUES(binlog_format), binlog_row_image=VALUES(binlog_row_image), log_bin=VALUES(log_bin), log_replica_updates=VALUES(log_replica_updates), binary_log_file=VALUES(binary_log_file), binary_log_pos=VALUES(binary_log_pos), source_host=VALUES(source_host), source_port=VALUES(source_port), replica_net_timeout=VALUES(replica_net_timeout), heartbeat_interval=VALUES(heartbeat_interval), replica_sql_running=VALUES(replica_sql_running), replica_io_running=VALUES(replica_io_running), replication_sql_thread_state=VALUES(replication_sql_thread_state), replication_io_thread_state=VALUES(replication_io_thread_state), has_replication_filters=VALUES(has_replication_filters), supports_oracle_gtid=VALUES(supports_oracle_gtid), oracle_gtid=VALUES(oracle_gtid), source_uuid=VALUES(source_uuid), ancestry_uuid=VALUES(ancestry_uuid), executed_gtid_set=VALUES(executed_gtid_set), gtid_mode=VALUES(gtid_mode), gtid_purged=VALUES(gtid_purged), gtid_errant=VALUES(gtid_errant), mariadb_gtid=VALUES(mariadb_gtid), pseudo_gtid=VALUES(pseudo_gtid), source_log_file=VALUES(source_log_file), read_source_log_pos=VALUES(read_source_log_pos), relay_source_log_file=VALUES(relay_source_log_file), exec_source_log_pos=VALUES(exec_source_log_pos), relay_log_file=VALUES(relay_log_file), relay_log_pos=VALUES(relay_log_pos), last_sql_error=VALUES(last_sql_error), last_io_error=VALUES(last_io_error), replication_lag_seconds=VALUES(replication_lag_seconds), replica_lag_seconds=VALUES(replica_lag_seconds), sql_delay=VALUES(sql_delay), data_center=VALUES(data_center), region=VALUES(region),
- physical_environment=VALUES(physical_environment), replication_depth=VALUES(replication_depth), is_co_primary=VALUES(is_co_primary), has_replication_credentials=VALUES(has_replication_credentials), allow_tls=VALUES(allow_tls), semi_sync_enforced=VALUES(semi_sync_enforced),
- semi_sync_primary_enabled=VALUES(semi_sync_primary_enabled), semi_sync_primary_timeout=VALUES(semi_sync_primary_timeout), semi_sync_primary_wait_for_replica_count=VALUES(semi_sync_primary_wait_for_replica_count), semi_sync_replica_enabled=VALUES(semi_sync_replica_enabled), semi_sync_primary_status=VALUES(semi_sync_primary_status), semi_sync_primary_clients=VALUES(semi_sync_primary_clients), semi_sync_replica_status=VALUES(semi_sync_replica_status),
- last_discovery_latency=VALUES(last_discovery_latency), last_seen=VALUES(last_seen)
+ (?, ?, ?, DATETIME('now'), DATETIME('now'), 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, DATETIME('now')),
+ (?, ?, ?, DATETIME('now'), DATETIME('now'), 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, DATETIME('now')),
+ (?, ?, ?, DATETIME('now'), DATETIME('now'), 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, DATETIME('now'))
`
a3 := `
zone1-i710, i710, 3306, 710, , 5.6.7, 5.6, MySQL, false, false, STATEMENT, FULL, false, false, , 0, , 0, 0, 0, false, false, 0, 0, false, false, false, , , , , , , false, false, , 0, mysql.000007, 10, , 0, , , {0 false}, {0 false}, 0, , , , 0, false, false, false, false, false, 0, 0, false, false, 0, false, 0,
@@ -107,7 +99,7 @@ func TestMkInsertOdkuThree(t *testing.T) {
zone1-i730, i730, 3306, 730, , 5.6.7, 5.6, MySQL, false, false, STATEMENT, FULL, false, false, , 0, , 0, 0, 0, false, false, 0, 0, false, false, false, , , , , , , false, false, , 0, mysql.000007, 30, , 0, , , {0 false}, {0 false}, 0, , , , 0, false, false, false, false, false, 0, 0, false, false, 0, false, 0,
`
- sql3, args3, err := mkInsertOdkuForInstances(instances[:3], true, true)
+ sql3, args3, err := mkInsertForInstances(instances[:3], true, true)
require.NoError(t, err)
require.Equal(t, normalizeQuery(sql3), normalizeQuery(s3))
require.Equal(t, stripSpaces(fmtArgs(args3)), stripSpaces(a3))
@@ -250,11 +242,11 @@ func TestReadProblemInstances(t *testing.T) {
// We need to set InstancePollSeconds to a large value otherwise all the instances are reported as having problems since their last_checked is very old.
// Setting this value to a hundred years, we ensure that this test doesn't fail with this issue for the next hundred years.
- oldVal := config.Config.InstancePollSeconds
+ oldVal := config.GetInstancePollTime()
defer func() {
- config.Config.InstancePollSeconds = oldVal
+ config.SetInstancePollTime(oldVal)
}()
- config.Config.InstancePollSeconds = 60 * 60 * 24 * 365 * 100
+ config.SetInstancePollTime(60 * 60 * 24 * 365 * 100 * time.Second)
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
@@ -334,11 +326,11 @@ func TestReadInstancesWithErrantGTIds(t *testing.T) {
// We need to set InstancePollSeconds to a large value otherwise all the instances are reported as having problems since their last_checked is very old.
// Setting this value to a hundred years, we ensure that this test doesn't fail with this issue for the next hundred years.
- oldVal := config.Config.InstancePollSeconds
+ oldVal := config.GetInstancePollTime()
defer func() {
- config.Config.InstancePollSeconds = oldVal
+ config.SetInstancePollTime(oldVal)
}()
- config.Config.InstancePollSeconds = 60 * 60 * 24 * 365 * 100
+ config.SetInstancePollTime(60 * 60 * 24 * 365 * 100 * time.Second)
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
@@ -437,27 +429,27 @@ func TestReadOutdatedInstanceKeys(t *testing.T) {
}{
{
name: "No problems",
- sql: []string{"update database_instance set last_checked = now()"},
+ sql: []string{"update database_instance set last_checked = DATETIME('now')"},
instancesRequired: nil,
}, {
name: "One instance is outdated",
sql: []string{
- "update database_instance set last_checked = now()",
- "update database_instance set last_checked = datetime(now(), '-1 hour') where alias = 'zone1-0000000100'",
+ "update database_instance set last_checked = DATETIME('now')",
+ "update database_instance set last_checked = DATETIME('now', '-1 hour') where alias = 'zone1-0000000100'",
},
instancesRequired: []string{"zone1-0000000100"},
}, {
name: "One instance doesn't have myql data",
sql: []string{
- "update database_instance set last_checked = now()",
+ "update database_instance set last_checked = DATETIME('now')",
`INSERT INTO vitess_tablet VALUES('zone1-0000000103','localhost',7706,'ks','0','zone1',2,'0001-01-01 00:00:00+00:00','');`,
},
instancesRequired: []string{"zone1-0000000103"},
}, {
name: "One instance doesn't have myql data and one is outdated",
sql: []string{
- "update database_instance set last_checked = now()",
- "update database_instance set last_checked = datetime(now(), '-1 hour') where alias = 'zone1-0000000100'",
+ "update database_instance set last_checked = DATETIME('now')",
+ "update database_instance set last_checked = DATETIME('now', '-1 hour') where alias = 'zone1-0000000100'",
`INSERT INTO vitess_tablet VALUES('zone1-0000000103','localhost',7706,'ks','0','zone1',2,'0001-01-01 00:00:00+00:00','');`,
},
instancesRequired: []string{"zone1-0000000103", "zone1-0000000100"},
@@ -468,13 +460,13 @@ func TestReadOutdatedInstanceKeys(t *testing.T) {
waitForCacheInitialization()
// We are setting InstancePollSeconds to 59 minutes, just for the test.
- oldVal := config.Config.InstancePollSeconds
+ oldVal := config.GetInstancePollTime()
oldCache := forgetAliases
defer func() {
forgetAliases = oldCache
- config.Config.InstancePollSeconds = oldVal
+ config.SetInstancePollTime(oldVal)
}()
- config.Config.InstancePollSeconds = 60 * 25
+ config.SetInstancePollTime(60 * 25 * time.Second)
forgetAliases = cache.New(time.Minute, time.Minute)
for _, tt := range tests {
@@ -494,10 +486,10 @@ func TestReadOutdatedInstanceKeys(t *testing.T) {
errInDataCollection := db.QueryVTOrcRowsMap(`select alias,
last_checked,
last_attempted_check,
-ROUND((JULIANDAY(now()) - JULIANDAY(last_checked)) * 86400) AS difference,
+ROUND((JULIANDAY(DATETIME('now')) - JULIANDAY(last_checked)) * 86400) AS difference,
last_attempted_check <= last_checked as use1,
-last_checked < now() - interval 1500 second as is_outdated1,
-last_checked < now() - interval 3000 second as is_outdated2
+last_checked < DATETIME('now', '-1500 second') as is_outdated1,
+last_checked < DATETIME('now', '-3000 second') as is_outdated2
from database_instance`, func(rowMap sqlutils.RowMap) error {
log.Errorf("Row in database_instance - %+v", rowMap)
return nil
@@ -521,12 +513,12 @@ func TestUpdateInstanceLastChecked(t *testing.T) {
name: "Verify updated last checked",
tabletAlias: "zone1-0000000100",
partialSuccess: false,
- conditionToCheck: "last_checked >= now() - interval 30 second and last_check_partial_success = false",
+ conditionToCheck: "last_checked >= DATETIME('now', '-30 second') and last_check_partial_success = false",
}, {
name: "Verify partial success",
tabletAlias: "zone1-0000000100",
partialSuccess: true,
- conditionToCheck: "last_checked >= now() - interval 30 second and last_check_partial_success = true",
+ conditionToCheck: "last_checked >= DATETIME('now', '-30 second') and last_check_partial_success = true",
}, {
name: "Verify no error on unknown tablet",
tabletAlias: "unknown tablet",
@@ -572,7 +564,7 @@ func TestUpdateInstanceLastAttemptedCheck(t *testing.T) {
{
name: "Verify updated last checked",
tabletAlias: "zone1-0000000100",
- conditionToCheck: "last_attempted_check >= now() - interval 30 second",
+ conditionToCheck: "last_attempted_check >= DATETIME('now', '-30 second')",
}, {
name: "Verify no error on unknown tablet",
tabletAlias: "unknown tablet",
@@ -727,10 +719,10 @@ func TestGetDatabaseState(t *testing.T) {
}
func TestExpireTableData(t *testing.T) {
- oldVal := config.Config.AuditPurgeDays
- config.Config.AuditPurgeDays = 10
+ oldVal := config.GetAuditPurgeDays()
+ config.SetAuditPurgeDays(10)
defer func() {
- config.Config.AuditPurgeDays = oldVal
+ config.SetAuditPurgeDays(oldVal)
}()
tests := []struct {
@@ -745,19 +737,19 @@ func TestExpireTableData(t *testing.T) {
tableName: "audit",
timestampColumn: "audit_timestamp",
expectedRowCount: 1,
- insertQuery: `insert into audit (audit_id, audit_timestamp, audit_type, alias, message, keyspace, shard) values
-(1, NOW() - INTERVAL 50 DAY, 'a','a','a','a','a'),
-(2, NOW() - INTERVAL 5 DAY, 'a','a','a','a','a')`,
+ insertQuery: `INSERT INTO audit (audit_id, audit_timestamp, audit_type, alias, message, keyspace, shard) VALUES
+(1, DATETIME('now', '-50 DAY'), 'a','a','a','a','a'),
+(2, DATETIME('now', '-5 DAY'), 'a','a','a','a','a')`,
},
{
name: "ExpireRecoveryDetectionHistory",
tableName: "recovery_detection",
timestampColumn: "detection_timestamp",
expectedRowCount: 2,
- insertQuery: `insert into recovery_detection (detection_id, detection_timestamp, alias, analysis, keyspace, shard) values
-(1, NOW() - INTERVAL 3 DAY,'a','a','a','a'),
-(2, NOW() - INTERVAL 5 DAY,'a','a','a','a'),
-(3, NOW() - INTERVAL 15 DAY,'a','a','a','a')`,
+ insertQuery: `INSERT INTO recovery_detection (detection_id, detection_timestamp, alias, analysis, keyspace, shard) VALUES
+(1, DATETIME('now', '-3 DAY'),'a','a','a','a'),
+(2, DATETIME('now', '-5 DAY'),'a','a','a','a'),
+(3, DATETIME('now', '-15 DAY'),'a','a','a','a')`,
},
}
for _, tt := range tests {
@@ -782,3 +774,165 @@ func TestExpireTableData(t *testing.T) {
})
}
}
+
+func TestDetectErrantGTIDs(t *testing.T) {
+ tests := []struct {
+ name string
+ instance *Instance
+ primaryInstance *Instance
+ wantErr bool
+ wantErrantGTID string
+ }{
+ {
+ name: "No errant GTIDs",
+ instance: &Instance{
+ ExecutedGtidSet: "230ea8ea-81e3-11e4-972a-e25ec4bd140a:1-10539,8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-34",
+ primaryExecutedGtidSet: "230ea8ea-81e3-11e4-972a-e25ec4bd140a:1-10591,8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-34",
+ AncestryUUID: "316d193c-70e5-11e5-adb2-ecf4bb2262ff,230ea8ea-81e3-11e4-972a-e25ec4bd140a",
+ ServerUUID: "316d193c-70e5-11e5-adb2-ecf4bb2262ff",
+ SourceUUID: "230ea8ea-81e3-11e4-972a-e25ec4bd140a",
+ },
+ }, {
+ name: "Errant GTIDs on replica",
+ instance: &Instance{
+ ExecutedGtidSet: "230ea8ea-81e3-11e4-972a-e25ec4bd140a:1-10539,8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-34,316d193c-70e5-11e5-adb2-ecf4bb2262ff:34",
+ primaryExecutedGtidSet: "230ea8ea-81e3-11e4-972a-e25ec4bd140a:1-10591,8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-34",
+ AncestryUUID: "316d193c-70e5-11e5-adb2-ecf4bb2262ff,230ea8ea-81e3-11e4-972a-e25ec4bd140a",
+ ServerUUID: "316d193c-70e5-11e5-adb2-ecf4bb2262ff",
+ SourceUUID: "230ea8ea-81e3-11e4-972a-e25ec4bd140a",
+ },
+ wantErrantGTID: "316d193c-70e5-11e5-adb2-ecf4bb2262ff:34",
+ },
+ {
+ name: "No errant GTIDs on old primary",
+ instance: &Instance{
+ ExecutedGtidSet: "230ea8ea-81e3-11e4-972a-e25ec4bd140a:1-10539,8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-34,316d193c-70e5-11e5-adb2-ecf4bb2262ff:1-341",
+ AncestryUUID: "316d193c-70e5-11e5-adb2-ecf4bb2262ff",
+ ServerUUID: "316d193c-70e5-11e5-adb2-ecf4bb2262ff",
+ },
+ primaryInstance: &Instance{
+ SourceHost: "",
+ ExecutedGtidSet: "230ea8ea-81e3-11e4-972a-e25ec4bd140a:1-10589,8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-34,316d193c-70e5-11e5-adb2-ecf4bb2262ff:1-341",
+ },
+ },
+ {
+ name: "Errant GTIDs on old primary",
+ instance: &Instance{
+ ExecutedGtidSet: "230ea8ea-81e3-11e4-972a-e25ec4bd140a:1-10539,8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-34,316d193c-70e5-11e5-adb2-ecf4bb2262ff:1-342",
+ AncestryUUID: "316d193c-70e5-11e5-adb2-ecf4bb2262ff",
+ ServerUUID: "316d193c-70e5-11e5-adb2-ecf4bb2262ff",
+ },
+ primaryInstance: &Instance{
+ SourceHost: "",
+ ExecutedGtidSet: "230ea8ea-81e3-11e4-972a-e25ec4bd140a:1-10589,8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-34,316d193c-70e5-11e5-adb2-ecf4bb2262ff:1-341",
+ },
+ wantErrantGTID: "316d193c-70e5-11e5-adb2-ecf4bb2262ff:342",
+ }, {
+ name: "Old information for new primary",
+ instance: &Instance{
+ ExecutedGtidSet: "230ea8ea-81e3-11e4-972a-e25ec4bd140a:1-10539,8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-34,316d193c-70e5-11e5-adb2-ecf4bb2262ff:1-342",
+ AncestryUUID: "316d193c-70e5-11e5-adb2-ecf4bb2262ff",
+ ServerUUID: "316d193c-70e5-11e5-adb2-ecf4bb2262ff",
+ },
+ primaryInstance: &Instance{
+ SourceHost: "localhost",
+ ExecutedGtidSet: "230ea8ea-81e3-11e4-972a-e25ec4bd140a:1-10539,8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-34,316d193c-70e5-11e5-adb2-ecf4bb2262ff:1-311",
+ },
+ },
+ }
+
+ keyspaceName := "ks"
+ shardName := "0"
+ tablet := &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone-1",
+ Uid: 100,
+ },
+ Keyspace: keyspaceName,
+ Shard: shardName,
+ }
+ primaryTablet := &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone-1",
+ Uid: 101,
+ },
+ Keyspace: keyspaceName,
+ Shard: shardName,
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ // Clear the database after the test. The easiest way to do that is to run all the initialization commands again.
+ defer func() {
+ db.ClearVTOrcDatabase()
+ }()
+ db.ClearVTOrcDatabase()
+
+ // Save shard record for the primary tablet.
+ err := SaveShard(topo.NewShardInfo(keyspaceName, shardName, &topodatapb.Shard{
+ PrimaryAlias: primaryTablet.Alias,
+ }, nil))
+ require.NoError(t, err)
+
+ if tt.primaryInstance != nil {
+ tt.primaryInstance.InstanceAlias = topoproto.TabletAliasString(primaryTablet.Alias)
+ err = SaveTablet(primaryTablet)
+ require.NoError(t, err)
+ err = WriteInstance(tt.primaryInstance, true, nil)
+ require.NoError(t, err)
+ }
+
+ tt.instance.InstanceAlias = topoproto.TabletAliasString(tablet.Alias)
+ err = detectErrantGTIDs(tt.instance, tablet)
+ if tt.wantErr {
+ require.Error(t, err)
+ return
+ }
+ require.NoError(t, err)
+ require.EqualValues(t, tt.wantErrantGTID, tt.instance.GtidErrant)
+ })
+ }
+}
+
+// TestPrimaryErrantGTIDs tests that we don't run Errant GTID detection on the primary tablet itself!
+func TestPrimaryErrantGTIDs(t *testing.T) {
+ // Clear the database after the test. The easiest way to do that is to run all the initialization commands again.
+ defer func() {
+ db.ClearVTOrcDatabase()
+ }()
+ db.ClearVTOrcDatabase()
+ keyspaceName := "ks"
+ shardName := "0"
+ tablet := &topodatapb.Tablet{
+ Alias: &topodatapb.TabletAlias{
+ Cell: "zone-1",
+ Uid: 100,
+ },
+ Keyspace: keyspaceName,
+ Shard: shardName,
+ }
+ instance := &Instance{
+ SourceHost: "",
+ ExecutedGtidSet: "230ea8ea-81e3-11e4-972a-e25ec4bd140a:1-10589,8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-34,316d193c-70e5-11e5-adb2-ecf4bb2262ff:1-341",
+ InstanceAlias: topoproto.TabletAliasString(tablet.Alias),
+ }
+
+ // Save shard record for the primary tablet.
+ err := SaveShard(topo.NewShardInfo(keyspaceName, shardName, &topodatapb.Shard{
+ PrimaryAlias: tablet.Alias,
+ }, nil))
+ require.NoError(t, err)
+
+ // Store the tablet record and the instance.
+ err = SaveTablet(tablet)
+ require.NoError(t, err)
+ err = WriteInstance(instance, true, nil)
+ require.NoError(t, err)
+
+ // After this if we read a new information for the record that updates its
+ // gtid set further, we shouldn't be detecting errant GTIDs on it since it is the primary!
+ // We shouldn't be comparing it with a previous version of itself!
+ instance.ExecutedGtidSet = "230ea8ea-81e3-11e4-972a-e25ec4bd140a:1-10589,8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-34,316d193c-70e5-11e5-adb2-ecf4bb2262ff:1-351"
+ err = detectErrantGTIDs(instance, tablet)
+ require.NoError(t, err)
+ require.EqualValues(t, "", instance.GtidErrant)
+}
diff --git a/go/vt/vtorc/inst/tablet_dao.go b/go/vt/vtorc/inst/tablet_dao.go
index af304292a70..f48f2b97370 100644
--- a/go/vt/vtorc/inst/tablet_dao.go
+++ b/go/vt/vtorc/inst/tablet_dao.go
@@ -56,13 +56,13 @@ func fullStatus(tabletAlias string) (*replicationdatapb.FullStatus, error) {
// ReadTablet reads the vitess tablet record.
func ReadTablet(tabletAlias string) (*topodatapb.Tablet, error) {
- query := `
- select
- info
- from
- vitess_tablet
- where alias = ?
- `
+ query := `SELECT
+ info
+ FROM
+ vitess_tablet
+ WHERE
+ alias = ?
+ `
args := sqlutils.Args(tabletAlias)
tablet := &topodatapb.Tablet{}
opts := prototext.UnmarshalOptions{DiscardUnknown: true}
@@ -84,14 +84,28 @@ func SaveTablet(tablet *topodatapb.Tablet) error {
if err != nil {
return err
}
- _, err = db.ExecVTOrc(`
- replace
- into vitess_tablet (
- alias, hostname, port, cell, keyspace, shard, tablet_type, primary_timestamp, info
- ) values (
- ?, ?, ?, ?, ?, ?, ?, ?, ?
- )
- `,
+ _, err = db.ExecVTOrc(`REPLACE
+ INTO vitess_tablet (
+ alias,
+ hostname,
+ port,
+ cell,
+ keyspace,
+ shard,
+ tablet_type,
+ primary_timestamp,
+ info
+ ) VALUES (
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?
+ )`,
topoproto.TabletAliasString(tablet.Alias),
tablet.MysqlHostname,
int(tablet.MysqlPort),
diff --git a/go/vt/vtorc/logic/disable_recovery.go b/go/vt/vtorc/logic/disable_recovery.go
index 74aa291e17a..c5446eeb9ff 100644
--- a/go/vt/vtorc/logic/disable_recovery.go
+++ b/go/vt/vtorc/logic/disable_recovery.go
@@ -40,14 +40,13 @@ import (
// IsRecoveryDisabled returns true if Recoveries are disabled globally
func IsRecoveryDisabled() (disabled bool, err error) {
- query := `
- SELECT
- COUNT(*) as mycount
- FROM
- global_recovery_disable
- WHERE
- disable_recovery=?
- `
+ query := `SELECT
+ COUNT(*) AS mycount
+ FROM
+ global_recovery_disable
+ WHERE
+ disable_recovery = ?
+ `
err = db.QueryVTOrc(query, sqlutils.Args(1), func(m sqlutils.RowMap) error {
mycount := m.GetInt("mycount")
disabled = (mycount > 0)
@@ -63,21 +62,19 @@ func IsRecoveryDisabled() (disabled bool, err error) {
// DisableRecovery ensures recoveries are disabled globally
func DisableRecovery() error {
- _, err := db.ExecVTOrc(`
- INSERT IGNORE INTO global_recovery_disable
- (disable_recovery)
- VALUES (1)
- `,
- )
+ _, err := db.ExecVTOrc(`INSERT OR IGNORE
+ INTO global_recovery_disable (
+ disable_recovery
+ ) VALUES (1)`)
return err
}
// EnableRecovery ensures recoveries are enabled globally
func EnableRecovery() error {
// The "WHERE" clause is just to avoid full-scan reports by monitoring tools
- _, err := db.ExecVTOrc(`
- DELETE FROM global_recovery_disable WHERE disable_recovery >= 0
- `,
- )
+ _, err := db.ExecVTOrc(`DELETE
+ FROM global_recovery_disable
+ WHERE
+ disable_recovery >= 0`)
return err
}
diff --git a/go/vt/vtorc/logic/keyspace_shard_discovery.go b/go/vt/vtorc/logic/keyspace_shard_discovery.go
index b1e93fe2a01..0dd17cb65fd 100644
--- a/go/vt/vtorc/logic/keyspace_shard_discovery.go
+++ b/go/vt/vtorc/logic/keyspace_shard_discovery.go
@@ -29,17 +29,16 @@ import (
)
// RefreshAllKeyspacesAndShards reloads the keyspace and shard information for the keyspaces that vtorc is concerned with.
-func RefreshAllKeyspacesAndShards() {
+func RefreshAllKeyspacesAndShards(ctx context.Context) error {
var keyspaces []string
if len(clustersToWatch) == 0 { // all known keyspaces
- ctx, cancel := context.WithTimeout(context.Background(), topo.RemoteOperationTimeout)
+ ctx, cancel := context.WithTimeout(ctx, topo.RemoteOperationTimeout)
defer cancel()
var err error
// Get all the keyspaces
keyspaces, err = ts.GetKeyspaces(ctx)
if err != nil {
- log.Error(err)
- return
+ return err
}
} else {
// Parse input and build list of keyspaces
@@ -55,14 +54,14 @@ func RefreshAllKeyspacesAndShards() {
}
if len(keyspaces) == 0 {
log.Errorf("Found no keyspaces for input: %+v", clustersToWatch)
- return
+ return nil
}
}
// Sort the list of keyspaces.
// The list can have duplicates because the input to clusters to watch may have multiple shards of the same keyspace
sort.Strings(keyspaces)
- refreshCtx, refreshCancel := context.WithTimeout(context.Background(), topo.RemoteOperationTimeout)
+ refreshCtx, refreshCancel := context.WithTimeout(ctx, topo.RemoteOperationTimeout)
defer refreshCancel()
var wg sync.WaitGroup
for idx, keyspace := range keyspaces {
@@ -83,6 +82,8 @@ func RefreshAllKeyspacesAndShards() {
}(keyspace)
}
wg.Wait()
+
+ return nil
}
// RefreshKeyspaceAndShard refreshes the keyspace record and shard record for the given keyspace and shard.
diff --git a/go/vt/vtorc/logic/keyspace_shard_discovery_test.go b/go/vt/vtorc/logic/keyspace_shard_discovery_test.go
index 097865db84a..5cbe139728b 100644
--- a/go/vt/vtorc/logic/keyspace_shard_discovery_test.go
+++ b/go/vt/vtorc/logic/keyspace_shard_discovery_test.go
@@ -92,7 +92,7 @@ func TestRefreshAllKeyspaces(t *testing.T) {
// Set clusters to watch to only watch ks1 and ks3
onlyKs1and3 := []string{"ks1/-80", "ks3/-80", "ks3/80-"}
clustersToWatch = onlyKs1and3
- RefreshAllKeyspacesAndShards()
+ require.NoError(t, RefreshAllKeyspacesAndShards(context.Background()))
// Verify that we only have ks1 and ks3 in vtorc's db.
verifyKeyspaceInfo(t, "ks1", keyspaceDurabilityNone, "")
@@ -107,7 +107,7 @@ func TestRefreshAllKeyspaces(t *testing.T) {
clustersToWatch = nil
// Change the durability policy of ks1
reparenttestutil.SetKeyspaceDurability(ctx, t, ts, "ks1", "semi_sync")
- RefreshAllKeyspacesAndShards()
+ require.NoError(t, RefreshAllKeyspacesAndShards(context.Background()))
// Verify that all the keyspaces are correctly reloaded
verifyKeyspaceInfo(t, "ks1", keyspaceDurabilitySemiSync, "")
diff --git a/go/vt/vtorc/logic/tablet_discovery.go b/go/vt/vtorc/logic/tablet_discovery.go
index 593b846a72e..7066229ab06 100644
--- a/go/vt/vtorc/logic/tablet_discovery.go
+++ b/go/vt/vtorc/logic/tablet_discovery.go
@@ -27,7 +27,6 @@ import (
"time"
"github.com/spf13/pflag"
-
"google.golang.org/protobuf/encoding/prototext"
"google.golang.org/protobuf/proto"
@@ -35,11 +34,9 @@ import (
"vitess.io/vitess/go/vt/log"
"vitess.io/vitess/go/vt/topo"
"vitess.io/vitess/go/vt/topo/topoproto"
- "vitess.io/vitess/go/vt/topotools"
"vitess.io/vitess/go/vt/vtorc/config"
"vitess.io/vitess/go/vt/vtorc/db"
"vitess.io/vitess/go/vt/vtorc/inst"
- "vitess.io/vitess/go/vt/vtorc/process"
"vitess.io/vitess/go/vt/vttablet/tmclient"
topodatapb "vitess.io/vitess/go/vt/proto/topodata"
@@ -67,39 +64,36 @@ func OpenTabletDiscovery() <-chan time.Time {
ts = topo.Open()
tmc = inst.InitializeTMC()
// Clear existing cache and perform a new refresh.
- if _, err := db.ExecVTOrc("delete from vitess_tablet"); err != nil {
+ if _, err := db.ExecVTOrc("DELETE FROM vitess_tablet"); err != nil {
log.Error(err)
}
- // We refresh all information from the topo once before we start the ticks to do it on a timer.
- populateAllInformation()
- return time.Tick(time.Second * time.Duration(config.Config.TopoInformationRefreshSeconds)) //nolint SA1015: using time.Tick leaks the underlying ticker
-}
-
-// populateAllInformation initializes all the information for VTOrc to function.
-func populateAllInformation() {
- refreshAllInformation()
- // We have completed one full discovery cycle. We should update the process health.
- process.FirstDiscoveryCycleComplete.Store(true)
+ // We refresh all information from the topo once before we start the ticks to do
+ // it on a timer.
+ ctx, cancel := context.WithTimeout(context.Background(), topo.RemoteOperationTimeout)
+ defer cancel()
+ if err := refreshAllInformation(ctx); err != nil {
+ log.Errorf("failed to initialize topo information: %+v", err)
+ }
+ return time.Tick(config.GetTopoInformationRefreshDuration()) //nolint SA1015: using time.Tick leaks the underlying ticker
}
// refreshAllTablets reloads the tablets from topo and discovers the ones which haven't been refreshed in a while
-func refreshAllTablets() {
- refreshTabletsUsing(func(tabletAlias string) {
+func refreshAllTablets(ctx context.Context) error {
+ return refreshTabletsUsing(ctx, func(tabletAlias string) {
DiscoverInstance(tabletAlias, false /* forceDiscovery */)
}, false /* forceRefresh */)
}
-func refreshTabletsUsing(loader func(tabletAlias string), forceRefresh bool) {
+func refreshTabletsUsing(ctx context.Context, loader func(tabletAlias string), forceRefresh bool) error {
if len(clustersToWatch) == 0 { // all known clusters
- ctx, cancel := context.WithTimeout(context.Background(), topo.RemoteOperationTimeout)
+ ctx, cancel := context.WithTimeout(ctx, topo.RemoteOperationTimeout)
defer cancel()
cells, err := ts.GetKnownCells(ctx)
if err != nil {
- log.Error(err)
- return
+ return err
}
- refreshCtx, refreshCancel := context.WithTimeout(context.Background(), topo.RemoteOperationTimeout)
+ refreshCtx, refreshCancel := context.WithTimeout(ctx, topo.RemoteOperationTimeout)
defer refreshCancel()
var wg sync.WaitGroup
for _, cell := range cells {
@@ -120,7 +114,7 @@ func refreshTabletsUsing(loader func(tabletAlias string), forceRefresh bool) {
keyspaceShards = append(keyspaceShards, &topo.KeyspaceShard{Keyspace: input[0], Shard: input[1]})
} else {
// Assume this is a keyspace and find all shards in keyspace
- ctx, cancel := context.WithTimeout(context.Background(), topo.RemoteOperationTimeout)
+ ctx, cancel := context.WithTimeout(ctx, topo.RemoteOperationTimeout)
defer cancel()
shards, err := ts.GetShardNames(ctx, ks)
if err != nil {
@@ -139,9 +133,9 @@ func refreshTabletsUsing(loader func(tabletAlias string), forceRefresh bool) {
}
if len(keyspaceShards) == 0 {
log.Errorf("Found no keyspaceShards for input: %+v", clustersToWatch)
- return
+ return nil
}
- refreshCtx, refreshCancel := context.WithTimeout(context.Background(), topo.RemoteOperationTimeout)
+ refreshCtx, refreshCancel := context.WithTimeout(ctx, topo.RemoteOperationTimeout)
defer refreshCancel()
var wg sync.WaitGroup
for _, ks := range keyspaceShards {
@@ -153,10 +147,11 @@ func refreshTabletsUsing(loader func(tabletAlias string), forceRefresh bool) {
}
wg.Wait()
}
+ return nil
}
func refreshTabletsInCell(ctx context.Context, cell string, loader func(tabletAlias string), forceRefresh bool) {
- tablets, err := topotools.GetTabletMapForCell(ctx, ts, cell)
+ tablets, err := ts.GetTabletsByCell(ctx, cell, nil)
if err != nil {
log.Errorf("Error fetching topo info for cell %v: %v", cell, err)
return
@@ -188,7 +183,7 @@ func refreshTabletInfoOfShard(ctx context.Context, keyspace, shard string) {
}
func refreshTabletsInKeyspaceShard(ctx context.Context, keyspace, shard string, loader func(tabletAlias string), forceRefresh bool, tabletsToIgnore []string) {
- tablets, err := ts.GetTabletMapForShard(ctx, keyspace, shard)
+ tablets, err := ts.GetTabletsByShard(ctx, keyspace, shard)
if err != nil {
log.Errorf("Error fetching tablets for keyspace/shard %v/%v: %v", keyspace, shard, err)
return
@@ -198,15 +193,12 @@ func refreshTabletsInKeyspaceShard(ctx context.Context, keyspace, shard string,
refreshTablets(tablets, query, args, loader, forceRefresh, tabletsToIgnore)
}
-func refreshTablets(tablets map[string]*topo.TabletInfo, query string, args []any, loader func(tabletAlias string), forceRefresh bool, tabletsToIgnore []string) {
+func refreshTablets(tablets []*topo.TabletInfo, query string, args []any, loader func(tabletAlias string), forceRefresh bool, tabletsToIgnore []string) {
// Discover new tablets.
latestInstances := make(map[string]bool)
var wg sync.WaitGroup
for _, tabletInfo := range tablets {
tablet := tabletInfo.Tablet
- if tablet.Type != topodatapb.TabletType_PRIMARY && !topo.IsReplicaType(tablet.Type) {
- continue
- }
tabletAliasString := topoproto.TabletAliasString(tablet.Alias)
latestInstances[tabletAliasString] = true
old, err := inst.ReadTablet(tabletAliasString)
diff --git a/go/vt/vtorc/logic/tablet_discovery_test.go b/go/vt/vtorc/logic/tablet_discovery_test.go
index 7acb29dcc5b..f6a7af38382 100644
--- a/go/vt/vtorc/logic/tablet_discovery_test.go
+++ b/go/vt/vtorc/logic/tablet_discovery_test.go
@@ -37,7 +37,6 @@ import (
"vitess.io/vitess/go/vt/vtctl/grpcvtctldserver/testutil"
"vitess.io/vitess/go/vt/vtorc/db"
"vitess.io/vitess/go/vt/vtorc/inst"
- "vitess.io/vitess/go/vt/vtorc/process"
)
var (
@@ -200,6 +199,8 @@ func TestRefreshTabletsInKeyspaceShard(t *testing.T) {
return nil
})
tab100.MysqlPort = 100
+ // We refresh once more to ensure we don't affect the next tests since we've made a change again.
+ refreshTabletsInKeyspaceShard(ctx, keyspace, shard, func(tabletAlias string) {}, false, nil)
}()
// Let's assume tab100 restarted on a different pod. This would change its tablet hostname and port
_, err = ts.UpdateTabletFields(context.Background(), tab100.Alias, func(tablet *topodatapb.Tablet) error {
@@ -212,6 +213,26 @@ func TestRefreshTabletsInKeyspaceShard(t *testing.T) {
// Also the old tablet should be forgotten
verifyRefreshTabletsInKeyspaceShard(t, false, 1, tablets, nil)
})
+
+ t.Run("Replica becomes a drained tablet", func(t *testing.T) {
+ defer func() {
+ _, err = ts.UpdateTabletFields(context.Background(), tab101.Alias, func(tablet *topodatapb.Tablet) error {
+ tablet.Type = topodatapb.TabletType_REPLICA
+ return nil
+ })
+ tab101.Type = topodatapb.TabletType_REPLICA
+ // We refresh once more to ensure we don't affect the next tests since we've made a change again.
+ refreshTabletsInKeyspaceShard(ctx, keyspace, shard, func(tabletAlias string) {}, false, nil)
+ }()
+ // A replica tablet can be converted to drained type if it has an errant GTID.
+ _, err = ts.UpdateTabletFields(context.Background(), tab101.Alias, func(tablet *topodatapb.Tablet) error {
+ tablet.Type = topodatapb.TabletType_DRAINED
+ return nil
+ })
+ tab101.Type = topodatapb.TabletType_DRAINED
+ // We expect 1 tablet to be refreshed since its type has been changed.
+ verifyRefreshTabletsInKeyspaceShard(t, false, 1, tablets, nil)
+ })
}
func TestShardPrimary(t *testing.T) {
@@ -347,25 +368,6 @@ func TestGetLockAction(t *testing.T) {
}
}
-// TestProcessHealth tests that the health of the process reflects that we have run the first discovery once correctly.
-func TestProcessHealth(t *testing.T) {
- require.False(t, process.FirstDiscoveryCycleComplete.Load())
- originalTs := ts
- defer func() {
- ts = originalTs
- process.FirstDiscoveryCycleComplete.Store(false)
- }()
- // Verify in the beginning, we have the first DiscoveredOnce field false.
- _, discoveredOnce := process.HealthTest()
- require.False(t, discoveredOnce)
- ts = memorytopo.NewServer(context.Background(), cell1)
- populateAllInformation()
- require.True(t, process.FirstDiscoveryCycleComplete.Load())
- // Verify after we populate all information, we have the first DiscoveredOnce field true.
- _, discoveredOnce = process.HealthTest()
- require.True(t, discoveredOnce)
-}
-
func TestSetReadOnly(t *testing.T) {
tests := []struct {
name string
diff --git a/go/vt/vtorc/logic/topology_recovery.go b/go/vt/vtorc/logic/topology_recovery.go
index aec137a45b4..f14eca624c9 100644
--- a/go/vt/vtorc/logic/topology_recovery.go
+++ b/go/vt/vtorc/logic/topology_recovery.go
@@ -21,7 +21,6 @@ import (
"encoding/json"
"fmt"
"math/rand/v2"
- "time"
"vitess.io/vitess/go/stats"
"vitess.io/vitess/go/vt/log"
@@ -235,8 +234,8 @@ func runEmergencyReparentOp(ctx context.Context, analysisEntry *inst.Replication
tablet.Shard,
reparentutil.EmergencyReparentOptions{
IgnoreReplicas: nil,
- WaitReplicasTimeout: time.Duration(config.Config.WaitReplicasTimeoutSeconds) * time.Second,
- PreventCrossCellPromotion: config.Config.PreventCrossDataCenterPrimaryFailover,
+ WaitReplicasTimeout: config.GetWaitReplicasTimeout(),
+ PreventCrossCellPromotion: config.GetPreventCrossCellFailover(),
WaitAllTablets: waitForAllTablets,
},
)
@@ -703,8 +702,8 @@ func electNewPrimary(ctx context.Context, analysisEntry *inst.ReplicationAnalysi
analyzedTablet.Keyspace,
analyzedTablet.Shard,
reparentutil.PlannedReparentOptions{
- WaitReplicasTimeout: time.Duration(config.Config.WaitReplicasTimeoutSeconds) * time.Second,
- TolerableReplLag: time.Duration(config.Config.TolerableReplicationLagSeconds) * time.Second,
+ WaitReplicasTimeout: config.GetWaitReplicasTimeout(),
+ TolerableReplLag: config.GetTolerableReplicationLag(),
},
)
diff --git a/go/vt/vtorc/logic/topology_recovery_dao.go b/go/vt/vtorc/logic/topology_recovery_dao.go
index 1920da4dcd8..137251c4fc8 100644
--- a/go/vt/vtorc/logic/topology_recovery_dao.go
+++ b/go/vt/vtorc/logic/topology_recovery_dao.go
@@ -30,21 +30,20 @@ import (
// InsertRecoveryDetection inserts the recovery analysis that has been detected.
func InsertRecoveryDetection(analysisEntry *inst.ReplicationAnalysis) error {
- sqlResult, err := db.ExecVTOrc(`
- insert ignore
- into recovery_detection (
- alias,
- analysis,
- keyspace,
- shard,
- detection_timestamp
- ) values (
- ?,
- ?,
- ?,
- ?,
- now()
- )`,
+ sqlResult, err := db.ExecVTOrc(`INSERT OR IGNORE
+ INTO recovery_detection (
+ alias,
+ analysis,
+ keyspace,
+ shard,
+ detection_timestamp
+ ) VALUES (
+ ?,
+ ?,
+ ?,
+ ?,
+ DATETIME('now')
+ )`,
analysisEntry.AnalyzedInstanceAlias,
string(analysisEntry.Analysis),
analysisEntry.ClusterDetails.Keyspace,
@@ -65,26 +64,24 @@ func InsertRecoveryDetection(analysisEntry *inst.ReplicationAnalysis) error {
func writeTopologyRecovery(topologyRecovery *TopologyRecovery) (*TopologyRecovery, error) {
analysisEntry := topologyRecovery.AnalysisEntry
- sqlResult, err := db.ExecVTOrc(`
- insert ignore
- into topology_recovery (
- recovery_id,
- alias,
- start_recovery,
- analysis,
- keyspace,
- shard,
- detection_id
- ) values (
- ?,
- ?,
- NOW(),
- ?,
- ?,
- ?,
- ?
- )
- `,
+ sqlResult, err := db.ExecVTOrc(`INSERT OR IGNORE
+ INTO topology_recovery (
+ recovery_id,
+ alias,
+ start_recovery,
+ analysis,
+ keyspace,
+ shard,
+ detection_id
+ ) VALUES (
+ ?,
+ ?,
+ DATETIME('now'),
+ ?,
+ ?,
+ ?,
+ ?
+ )`,
sqlutils.NilIfZero(topologyRecovery.ID),
analysisEntry.AnalyzedInstanceAlias,
string(analysisEntry.Analysis),
@@ -138,15 +135,16 @@ func AttemptRecoveryRegistration(analysisEntry *inst.ReplicationAnalysis) (*Topo
// ResolveRecovery is called on completion of a recovery process and updates the recovery status.
// It does not clear the "active period" as this still takes place in order to avoid flapping.
func writeResolveRecovery(topologyRecovery *TopologyRecovery) error {
- _, err := db.ExecVTOrc(`
- update topology_recovery set
- is_successful = ?,
- successor_alias = ?,
- all_errors = ?,
- end_recovery = NOW()
- where
- recovery_id = ?
- `, topologyRecovery.IsSuccessful,
+ _, err := db.ExecVTOrc(`UPDATE topology_recovery
+ SET
+ is_successful = ?,
+ successor_alias = ?,
+ all_errors = ?,
+ end_recovery = DATETIME('now')
+ WHERE
+ recovery_id = ?
+ `,
+ topologyRecovery.IsSuccessful,
topologyRecovery.SuccessorAlias,
strings.Join(topologyRecovery.AllErrors, "\n"),
topologyRecovery.ID,
@@ -160,26 +158,27 @@ func writeResolveRecovery(topologyRecovery *TopologyRecovery) error {
// readRecoveries reads recovery entry/audit entries from topology_recovery
func readRecoveries(whereCondition string, limit string, args []any) ([]*TopologyRecovery, error) {
res := []*TopologyRecovery{}
- query := fmt.Sprintf(`
- select
- recovery_id,
- alias,
- start_recovery,
- IFNULL(end_recovery, '') AS end_recovery,
- is_successful,
- ifnull(successor_alias, '') as successor_alias,
- analysis,
- keyspace,
- shard,
- all_errors,
- detection_id
- from
+ query := fmt.Sprintf(`SELECT
+ recovery_id,
+ alias,
+ start_recovery,
+ IFNULL(end_recovery, '') AS end_recovery,
+ is_successful,
+ IFNULL(successor_alias, '') AS successor_alias,
+ analysis,
+ keyspace,
+ shard,
+ all_errors,
+ detection_id
+ FROM
topology_recovery
%s
- order by
- recovery_id desc
+ ORDER BY recovery_id DESC
%s
- `, whereCondition, limit)
+ `,
+ whereCondition,
+ limit,
+ )
err := db.QueryVTOrc(query, args, func(m sqlutils.RowMap) error {
topologyRecovery := *NewTopologyRecovery(inst.ReplicationAnalysis{})
topologyRecovery.ID = m.GetInt64("recovery_id")
@@ -211,11 +210,10 @@ func readRecoveries(whereCondition string, limit string, args []any) ([]*Topolog
// ReadActiveClusterRecoveries reads recoveries that are ongoing for the given cluster.
func ReadActiveClusterRecoveries(keyspace string, shard string) ([]*TopologyRecovery, error) {
- whereClause := `
- where
- end_recovery IS NULL
- and keyspace=?
- and shard=?`
+ whereClause := `WHERE
+ end_recovery IS NULL
+ AND keyspace = ?
+ AND shard = ?`
return readRecoveries(whereClause, ``, sqlutils.Args(keyspace, shard))
}
@@ -225,23 +223,30 @@ func ReadRecentRecoveries(page int) ([]*TopologyRecovery, error) {
whereClause := ""
var args []any
if len(whereConditions) > 0 {
- whereClause = fmt.Sprintf("where %s", strings.Join(whereConditions, " and "))
+ whereClause = fmt.Sprintf("WHERE %s", strings.Join(whereConditions, " AND "))
}
- limit := `
- limit ?
- offset ?`
+ limit := `LIMIT ? OFFSET ?`
args = append(args, config.AuditPageSize, page*config.AuditPageSize)
return readRecoveries(whereClause, limit, args)
}
// writeTopologyRecoveryStep writes down a single step in a recovery process
func writeTopologyRecoveryStep(topologyRecoveryStep *TopologyRecoveryStep) error {
- sqlResult, err := db.ExecVTOrc(`
- insert ignore
- into topology_recovery_steps (
- recovery_step_id, recovery_id, audit_at, message
- ) values (?, ?, now(), ?)
- `, sqlutils.NilIfZero(topologyRecoveryStep.ID), topologyRecoveryStep.RecoveryID, topologyRecoveryStep.Message,
+ sqlResult, err := db.ExecVTOrc(`INSERT OR IGNORE
+ INTO topology_recovery_steps (
+ recovery_step_id,
+ recovery_id,
+ audit_at,
+ message
+ ) VALUES (
+ ?,
+ ?,
+ DATETIME('now'),
+ ?
+ )`,
+ sqlutils.NilIfZero(topologyRecoveryStep.ID),
+ topologyRecoveryStep.RecoveryID,
+ topologyRecoveryStep.Message,
)
if err != nil {
log.Error(err)
diff --git a/go/vt/vtorc/logic/topology_recovery_dao_test.go b/go/vt/vtorc/logic/topology_recovery_dao_test.go
index 354af82e2b3..6a1d7c4c48f 100644
--- a/go/vt/vtorc/logic/topology_recovery_dao_test.go
+++ b/go/vt/vtorc/logic/topology_recovery_dao_test.go
@@ -70,10 +70,10 @@ func TestTopologyRecovery(t *testing.T) {
}
func TestExpireTableData(t *testing.T) {
- oldVal := config.Config.AuditPurgeDays
- config.Config.AuditPurgeDays = 10
+ oldVal := config.GetAuditPurgeDays()
+ config.SetAuditPurgeDays(10)
defer func() {
- config.Config.AuditPurgeDays = oldVal
+ config.SetAuditPurgeDays(oldVal)
}()
tests := []struct {
@@ -88,9 +88,9 @@ func TestExpireTableData(t *testing.T) {
tableName: "recovery_detection",
expectedRowCount: 2,
insertQuery: `insert into recovery_detection (detection_id, detection_timestamp, alias, analysis, keyspace, shard) values
-(1, NOW() - INTERVAL 3 DAY,'a','a','a','a'),
-(2, NOW() - INTERVAL 5 DAY,'a','a','a','a'),
-(3, NOW() - INTERVAL 15 DAY,'a','a','a','a')`,
+(1, datetime('now', '-3 DAY'),'a','a','a','a'),
+(2, datetime('now', '-5 DAY'),'a','a','a','a'),
+(3, datetime('now', '-15 DAY'),'a','a','a','a')`,
expireFunc: ExpireRecoveryDetectionHistory,
},
{
@@ -98,9 +98,9 @@ func TestExpireTableData(t *testing.T) {
tableName: "topology_recovery",
expectedRowCount: 1,
insertQuery: `insert into topology_recovery (recovery_id, start_recovery, alias, analysis, keyspace, shard) values
-(1, NOW() - INTERVAL 13 DAY,'a','a','a','a'),
-(2, NOW() - INTERVAL 5 DAY,'a','a','a','a'),
-(3, NOW() - INTERVAL 15 DAY,'a','a','a','a')`,
+(1, datetime('now', '-13 DAY'),'a','a','a','a'),
+(2, datetime('now', '-5 DAY'),'a','a','a','a'),
+(3, datetime('now', '-15 DAY'),'a','a','a','a')`,
expireFunc: ExpireTopologyRecoveryHistory,
},
{
@@ -108,9 +108,9 @@ func TestExpireTableData(t *testing.T) {
tableName: "topology_recovery_steps",
expectedRowCount: 1,
insertQuery: `insert into topology_recovery_steps (recovery_step_id, audit_at, recovery_id, message) values
-(1, NOW() - INTERVAL 13 DAY, 1, 'a'),
-(2, NOW() - INTERVAL 5 DAY, 2, 'a'),
-(3, NOW() - INTERVAL 15 DAY, 3, 'a')`,
+(1, datetime('now', '-13 DAY'), 1, 'a'),
+(2, datetime('now', '-5 DAY'), 2, 'a'),
+(3, datetime('now', '-15 DAY'), 3, 'a')`,
expireFunc: ExpireTopologyRecoveryStepsHistory,
},
}
diff --git a/go/vt/vtorc/logic/vtorc.go b/go/vt/vtorc/logic/vtorc.go
index 9a468d1508a..39326525ce2 100644
--- a/go/vt/vtorc/logic/vtorc.go
+++ b/go/vt/vtorc/logic/vtorc.go
@@ -17,15 +17,14 @@
package logic
import (
- "os"
- "os/signal"
+ "context"
"sync"
"sync/atomic"
- "syscall"
"time"
"github.com/patrickmn/go-cache"
"github.com/sjmudd/stopwatch"
+ "golang.org/x/sync/errgroup"
"vitess.io/vitess/go/stats"
"vitess.io/vitess/go/vt/log"
@@ -35,6 +34,7 @@ import (
"vitess.io/vitess/go/vt/vtorc/discovery"
"vitess.io/vitess/go/vt/vtorc/inst"
ometrics "vitess.io/vitess/go/vt/vtorc/metrics"
+ "vitess.io/vitess/go/vt/vtorc/process"
"vitess.io/vitess/go/vt/vtorc/util"
)
@@ -73,26 +73,6 @@ func init() {
})
}
-// used in several places
-func instancePollSecondsDuration() time.Duration {
- return time.Duration(config.Config.InstancePollSeconds) * time.Second
-}
-
-// acceptSighupSignal registers for SIGHUP signal from the OS to reload the configuration files.
-func acceptSighupSignal() {
- c := make(chan os.Signal, 1)
-
- signal.Notify(c, syscall.SIGHUP)
- go func() {
- for range c {
- log.Infof("Received SIGHUP. Reloading configuration")
- _ = inst.AuditOperation("reload-configuration", "", "Triggered via SIGHUP")
- config.Reload()
- discoveryMetrics.SetExpirePeriod(time.Duration(config.DiscoveryCollectionRetentionSeconds) * time.Second)
- }
- }()
-}
-
// closeVTOrc runs all the operations required to cleanly shutdown VTOrc
func closeVTOrc() {
log.Infof("Starting VTOrc shutdown")
@@ -161,7 +141,7 @@ func DiscoverInstance(tabletAlias string, forceDiscovery bool) {
defer func() {
latency.Stop("total")
discoveryTime := latency.Elapsed("total")
- if discoveryTime > instancePollSecondsDuration() {
+ if discoveryTime > config.GetInstancePollTime() {
instancePollSecondsExceededCounter.Add(1)
log.Warningf("discoverInstance exceeded InstancePollSeconds for %+v, took %.4fs", tabletAlias, discoveryTime.Seconds())
if metric != nil {
@@ -177,7 +157,7 @@ func DiscoverInstance(tabletAlias string, forceDiscovery bool) {
// Calculate the expiry period each time as InstancePollSeconds
// _may_ change during the run of the process (via SIGHUP) and
// it is not possible to change the cache's default expiry..
- if existsInCacheError := recentDiscoveryOperationKeys.Add(tabletAlias, true, instancePollSecondsDuration()); existsInCacheError != nil && !forceDiscovery {
+ if existsInCacheError := recentDiscoveryOperationKeys.Add(tabletAlias, true, config.GetInstancePollTime()); existsInCacheError != nil && !forceDiscovery {
// Just recently attempted
return
}
@@ -271,24 +251,23 @@ func onHealthTick() {
// nolint SA1015: using time.Tick leaks the underlying ticker
func ContinuousDiscovery() {
log.Infof("continuous discovery: setting up")
- recentDiscoveryOperationKeys = cache.New(instancePollSecondsDuration(), time.Second)
+ recentDiscoveryOperationKeys = cache.New(config.GetInstancePollTime(), time.Second)
go handleDiscoveryRequests()
healthTick := time.Tick(config.HealthPollSeconds * time.Second)
caretakingTick := time.Tick(time.Minute)
- recoveryTick := time.Tick(time.Duration(config.Config.RecoveryPollSeconds) * time.Second)
+ recoveryTick := time.Tick(config.GetRecoveryPollDuration())
tabletTopoTick := OpenTabletDiscovery()
var recoveryEntrance int64
var snapshotTopologiesTick <-chan time.Time
- if config.Config.SnapshotTopologiesIntervalHours > 0 {
- snapshotTopologiesTick = time.Tick(time.Duration(config.Config.SnapshotTopologiesIntervalHours) * time.Hour)
+ if config.GetSnapshotTopologyInterval() > 0 {
+ snapshotTopologiesTick = time.Tick(config.GetSnapshotTopologyInterval())
}
go func() {
_ = ometrics.InitMetrics()
}()
- go acceptSighupSignal()
// On termination of the server, we should close VTOrc cleanly
servenv.OnTermSync(closeVTOrc)
@@ -328,30 +307,34 @@ func ContinuousDiscovery() {
go inst.SnapshotTopologies()
}()
case <-tabletTopoTick:
- refreshAllInformation()
+ ctx, cancel := context.WithTimeout(context.Background(), config.GetTopoInformationRefreshDuration())
+ if err := refreshAllInformation(ctx); err != nil {
+ log.Errorf("failed to refresh topo information: %+v", err)
+ }
+ cancel()
}
}
}
// refreshAllInformation refreshes both shard and tablet information. This is meant to be run on tablet topo ticks.
-func refreshAllInformation() {
- // Create a wait group
- var wg sync.WaitGroup
+func refreshAllInformation(ctx context.Context) error {
+ // Create an errgroup
+ eg, ctx := errgroup.WithContext(ctx)
// Refresh all keyspace information.
- wg.Add(1)
- go func() {
- defer wg.Done()
- RefreshAllKeyspacesAndShards()
- }()
+ eg.Go(func() error {
+ return RefreshAllKeyspacesAndShards(ctx)
+ })
// Refresh all tablets.
- wg.Add(1)
- go func() {
- defer wg.Done()
- refreshAllTablets()
- }()
+ eg.Go(func() error {
+ return refreshAllTablets(ctx)
+ })
// Wait for both the refreshes to complete
- wg.Wait()
+ err := eg.Wait()
+ if err == nil {
+ process.FirstDiscoveryCycleComplete.Store(true)
+ }
+ return err
}
diff --git a/go/vt/vtorc/logic/vtorc_test.go b/go/vt/vtorc/logic/vtorc_test.go
index c8f2ac3bfdc..edd8141e8b7 100644
--- a/go/vt/vtorc/logic/vtorc_test.go
+++ b/go/vt/vtorc/logic/vtorc_test.go
@@ -1,11 +1,17 @@
package logic
import (
+ "context"
"sync/atomic"
"testing"
"time"
"github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+
+ "vitess.io/vitess/go/vt/topo/memorytopo"
+ "vitess.io/vitess/go/vt/vtorc/db"
+ "vitess.io/vitess/go/vt/vtorc/process"
)
func TestWaitForLocksRelease(t *testing.T) {
@@ -54,3 +60,41 @@ func waitForLocksReleaseAndGetTimeWaitedFor() time.Duration {
waitForLocksRelease()
return time.Since(start)
}
+
+func TestRefreshAllInformation(t *testing.T) {
+ // Store the old flags and restore on test completion
+ oldTs := ts
+ defer func() {
+ ts = oldTs
+ }()
+
+ // Clear the database after the test. The easiest way to do that is to run all the initialization commands again.
+ defer func() {
+ db.ClearVTOrcDatabase()
+ }()
+
+ // Verify in the beginning, we have the first DiscoveredOnce field false.
+ _, discoveredOnce := process.HealthTest()
+ require.False(t, discoveredOnce)
+
+ // Create a memory topo-server and create the keyspace and shard records
+ ts = memorytopo.NewServer(context.Background(), cell1)
+ _, err := ts.GetOrCreateShard(context.Background(), keyspace, shard)
+ require.NoError(t, err)
+
+ // Test error
+ ctx, cancel := context.WithCancel(context.Background())
+ cancel() // cancel context to simulate timeout
+ require.Error(t, refreshAllInformation(ctx))
+ require.False(t, process.FirstDiscoveryCycleComplete.Load())
+ _, discoveredOnce = process.HealthTest()
+ require.False(t, discoveredOnce)
+
+ // Test success
+ ctx2, cancel2 := context.WithCancel(context.Background())
+ defer cancel2()
+ require.NoError(t, refreshAllInformation(ctx2))
+ require.True(t, process.FirstDiscoveryCycleComplete.Load())
+ _, discoveredOnce = process.HealthTest()
+ require.True(t, discoveredOnce)
+}
diff --git a/go/vt/vtorc/process/health.go b/go/vt/vtorc/process/health.go
index 86101d6c5c0..d448f03bb83 100644
--- a/go/vt/vtorc/process/health.go
+++ b/go/vt/vtorc/process/health.go
@@ -35,12 +35,17 @@ var ThisNodeHealth = &NodeHealth{}
// writeHealthToDatabase writes to the database and returns if it was successful.
func writeHealthToDatabase() bool {
- _, err := db.ExecVTOrc("delete from node_health")
+ _, err := db.ExecVTOrc("DELETE FROM node_health")
if err != nil {
log.Error(err)
return false
}
- sqlResult, err := db.ExecVTOrc(`insert into node_health (last_seen_active) values (now())`)
+ sqlResult, err := db.ExecVTOrc(`INSERT
+ INTO node_health (
+ last_seen_active
+ ) VALUES (
+ DATETIME('now')
+ )`)
if err != nil {
log.Error(err)
return false
@@ -57,7 +62,7 @@ func writeHealthToDatabase() bool {
func HealthTest() (health *NodeHealth, discoveredOnce bool) {
ThisNodeHealth.LastReported = time.Now()
discoveredOnce = FirstDiscoveryCycleComplete.Load()
- ThisNodeHealth.Healthy = writeHealthToDatabase()
+ ThisNodeHealth.Healthy = discoveredOnce && writeHealthToDatabase()
return ThisNodeHealth, discoveredOnce
}
diff --git a/go/vt/vtorc/process/health_test.go b/go/vt/vtorc/process/health_test.go
new file mode 100644
index 00000000000..c198deda4e4
--- /dev/null
+++ b/go/vt/vtorc/process/health_test.go
@@ -0,0 +1,46 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package process
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/require"
+)
+
+func TestHealthTest(t *testing.T) {
+ defer func() {
+ FirstDiscoveryCycleComplete.Store(false)
+ ThisNodeHealth = &NodeHealth{}
+ }()
+
+ require.Zero(t, ThisNodeHealth.LastReported)
+ require.False(t, ThisNodeHealth.Healthy)
+
+ ThisNodeHealth = &NodeHealth{}
+ health, discoveredOnce := HealthTest()
+ require.False(t, health.Healthy)
+ require.False(t, discoveredOnce)
+ require.NotZero(t, ThisNodeHealth.LastReported)
+
+ ThisNodeHealth = &NodeHealth{}
+ FirstDiscoveryCycleComplete.Store(true)
+ health, discoveredOnce = HealthTest()
+ require.True(t, health.Healthy)
+ require.True(t, discoveredOnce)
+ require.NotZero(t, ThisNodeHealth.LastReported)
+}
diff --git a/go/vt/vtorc/server/api.go b/go/vt/vtorc/server/api.go
index 5e9a84c0a29..177f2c80333 100644
--- a/go/vt/vtorc/server/api.go
+++ b/go/vt/vtorc/server/api.go
@@ -25,6 +25,7 @@ import (
"time"
"vitess.io/vitess/go/acl"
+ "vitess.io/vitess/go/viperutil/debug"
"vitess.io/vitess/go/vt/servenv"
"vitess.io/vitess/go/vt/vtorc/collection"
"vitess.io/vitess/go/vt/vtorc/discovery"
@@ -46,6 +47,7 @@ const (
enableGlobalRecoveriesAPI = "/api/enable-global-recoveries"
replicationAnalysisAPI = "/api/replication-analysis"
databaseStateAPI = "/api/database-state"
+ configAPI = "/api/config"
healthAPI = "/debug/health"
AggregatedDiscoveryMetricsAPI = "/api/aggregated-discovery-metrics"
@@ -62,6 +64,7 @@ var (
enableGlobalRecoveriesAPI,
replicationAnalysisAPI,
databaseStateAPI,
+ configAPI,
healthAPI,
AggregatedDiscoveryMetricsAPI,
}
@@ -90,6 +93,8 @@ func (v *vtorcAPI) ServeHTTP(response http.ResponseWriter, request *http.Request
replicationAnalysisAPIHandler(response, request)
case databaseStateAPI:
databaseStateAPIHandler(response)
+ case configAPI:
+ configAPIHandler(response)
case AggregatedDiscoveryMetricsAPI:
AggregatedDiscoveryMetricsAPIHandler(response, request)
default:
@@ -106,7 +111,7 @@ func getACLPermissionLevelForAPI(apiEndpoint string) string {
return acl.MONITORING
case disableGlobalRecoveriesAPI, enableGlobalRecoveriesAPI:
return acl.ADMIN
- case replicationAnalysisAPI:
+ case replicationAnalysisAPI, configAPI:
return acl.MONITORING
case healthAPI, databaseStateAPI:
return acl.MONITORING
@@ -180,6 +185,17 @@ func databaseStateAPIHandler(response http.ResponseWriter) {
writePlainTextResponse(response, ds, http.StatusOK)
}
+// configAPIHandler is the handler for the configAPI endpoint
+func configAPIHandler(response http.ResponseWriter) {
+ settingsMap := debug.AllSettings()
+ jsonOut, err := json.MarshalIndent(settingsMap, "", "\t")
+ if err != nil {
+ http.Error(response, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ writePlainTextResponse(response, string(jsonOut), http.StatusOK)
+}
+
// AggregatedDiscoveryMetricsAPIHandler is the handler for the discovery metrics endpoint
func AggregatedDiscoveryMetricsAPIHandler(response http.ResponseWriter, request *http.Request) {
// return metrics for last x seconds
diff --git a/go/vt/vtorc/server/api_test.go b/go/vt/vtorc/server/api_test.go
index c352d1e600f..ab6b9eed9af 100644
--- a/go/vt/vtorc/server/api_test.go
+++ b/go/vt/vtorc/server/api_test.go
@@ -31,6 +31,9 @@ func TestGetACLPermissionLevelForAPI(t *testing.T) {
}, {
apiEndpoint: healthAPI,
want: acl.MONITORING,
+ }, {
+ apiEndpoint: configAPI,
+ want: acl.MONITORING,
}, {
apiEndpoint: "gibberish",
want: acl.ADMIN,
diff --git a/go/vt/vttablet/common/flags.go b/go/vt/vttablet/common/flags.go
index f9775b8af3e..75e8e58982f 100644
--- a/go/vt/vttablet/common/flags.go
+++ b/go/vt/vttablet/common/flags.go
@@ -21,6 +21,7 @@ import (
"github.com/spf13/pflag"
+ "vitess.io/vitess/go/mysql"
"vitess.io/vitess/go/vt/servenv"
)
@@ -32,8 +33,7 @@ const (
)
var (
- // Default flags: currently VReplicationExperimentalFlagVPlayerBatching is not enabled by default.
- vreplicationExperimentalFlags = VReplicationExperimentalFlagOptimizeInserts | VReplicationExperimentalFlagAllowNoBlobBinlogRowImage
+ vreplicationExperimentalFlags = VReplicationExperimentalFlagOptimizeInserts | VReplicationExperimentalFlagAllowNoBlobBinlogRowImage | VReplicationExperimentalFlagVPlayerBatching
vreplicationNetReadTimeout = 300
vreplicationNetWriteTimeout = 600
vreplicationCopyPhaseDuration = 1 * time.Hour
@@ -94,4 +94,6 @@ func registerFlags(fs *pflag.FlagSet) {
fs.BoolVar(&vreplicationStoreCompressedGTID, "vreplication_store_compressed_gtid", vreplicationStoreCompressedGTID, "Store compressed gtids in the pos column of the sidecar database's vreplication table")
fs.IntVar(&vreplicationParallelInsertWorkers, "vreplication-parallel-insert-workers", vreplicationParallelInsertWorkers, "Number of parallel insertion workers to use during copy phase. Set <= 1 to disable parallelism, or > 1 to enable concurrent insertion during copy phase.")
+
+ fs.Uint64Var(&mysql.ZstdInMemoryDecompressorMaxSize, "binlog-in-memory-decompressor-max-size", mysql.ZstdInMemoryDecompressorMaxSize, "This value sets the uncompressed transaction payload size at which we switch from in-memory buffer based decompression to the slower streaming mode.")
}
diff --git a/go/vt/vttablet/endtoend/call_test.go b/go/vt/vttablet/endtoend/call_test.go
index a1a2eae792a..95171e1523e 100644
--- a/go/vt/vttablet/endtoend/call_test.go
+++ b/go/vt/vttablet/endtoend/call_test.go
@@ -20,7 +20,6 @@ import (
"testing"
"github.com/stretchr/testify/assert"
-
"github.com/stretchr/testify/require"
"vitess.io/vitess/go/vt/vttablet/endtoend/framework"
@@ -136,6 +135,7 @@ func TestCallProcedureLeakTx(t *testing.T) {
func TestCallProcedureChangedTx(t *testing.T) {
client := framework.NewClient()
+ defer client.Release()
_, err := client.Execute(`call proc_tx_begin()`, nil)
require.EqualError(t, err, "Transaction not concluded inside the stored procedure, leaking transaction from stored procedure is not allowed (CallerID: dev)")
diff --git a/go/vt/vttablet/endtoend/config_test.go b/go/vt/vttablet/endtoend/config_test.go
index 3902113f354..c3ad5f8a9db 100644
--- a/go/vt/vttablet/endtoend/config_test.go
+++ b/go/vt/vttablet/endtoend/config_test.go
@@ -23,7 +23,6 @@ import (
"time"
"github.com/stretchr/testify/assert"
-
"github.com/stretchr/testify/require"
"vitess.io/vitess/go/sqltypes"
@@ -37,7 +36,7 @@ import (
)
func TestPoolSize(t *testing.T) {
- revert := changeVar(t, "PoolSize", "1")
+ revert := changeVar(t, "ReadPoolSize", "1")
defer revert()
vstart := framework.DebugVars()
@@ -73,6 +72,48 @@ func TestStreamPoolSize(t *testing.T) {
verifyIntValue(t, vstart, "StreamConnPoolCapacity", 1)
}
+// TestTxPoolSize starts 2 transactions, one in normal pool and one in found rows pool of transaction pool.
+// Changing the pool size to 1, we verify that the pool size is updated and the pool is full when we try to acquire next transaction.
+func TestTxPoolSize(t *testing.T) {
+ vstart := framework.DebugVars()
+
+ verifyIntValue(t, vstart, "TransactionPoolCapacity", 20)
+ verifyIntValue(t, vstart, "FoundRowsPoolCapacity", 20)
+
+ client1 := framework.NewClient()
+ err := client1.Begin( /* found rows pool*/ false)
+ require.NoError(t, err)
+ defer client1.Rollback()
+ verifyIntValue(t, framework.DebugVars(), "TransactionPoolAvailable", framework.FetchInt(vstart, "TransactionPoolAvailable")-1)
+
+ client2 := framework.NewClient()
+ err = client2.Begin( /* found rows pool*/ true)
+ require.NoError(t, err)
+ defer client2.Rollback()
+ verifyIntValue(t, framework.DebugVars(), "FoundRowsPoolAvailable", framework.FetchInt(vstart, "FoundRowsPoolAvailable")-1)
+
+ revert := changeVar(t, "TransactionPoolSize", "1")
+ defer revert()
+ vend := framework.DebugVars()
+ verifyIntValue(t, vend, "TransactionPoolAvailable", 0)
+ verifyIntValue(t, vend, "TransactionPoolCapacity", 1)
+ verifyIntValue(t, vend, "FoundRowsPoolAvailable", 0)
+ verifyIntValue(t, vend, "FoundRowsPoolCapacity", 1)
+ assert.Equal(t, 1, framework.Server.TxPoolSize())
+
+ client3 := framework.NewClient()
+
+ // tx pool - normal
+ err = client3.Begin( /* found rows pool*/ false)
+ require.ErrorContains(t, err, "connection limit exceeded")
+ compareIntDiff(t, framework.DebugVars(), "Errors/RESOURCE_EXHAUSTED", vstart, 1)
+
+ // tx pool - found rows
+ err = client3.Begin( /* found rows pool*/ true)
+ require.ErrorContains(t, err, "connection limit exceeded")
+ compareIntDiff(t, framework.DebugVars(), "Errors/RESOURCE_EXHAUSTED", vstart, 2)
+}
+
func TestDisableConsolidator(t *testing.T) {
totalConsolidationsTag := "Waits/Histograms/Consolidations/Count"
initial := framework.FetchInt(framework.DebugVars(), totalConsolidationsTag)
diff --git a/go/vt/vttablet/endtoend/connecttcp/main_test.go b/go/vt/vttablet/endtoend/connecttcp/main_test.go
index 9d52b1287a1..43be05893cc 100644
--- a/go/vt/vttablet/endtoend/connecttcp/main_test.go
+++ b/go/vt/vttablet/endtoend/connecttcp/main_test.go
@@ -22,6 +22,7 @@ import (
"fmt"
"os"
"testing"
+ "time"
"vitess.io/vitess/go/mysql"
vttestpb "vitess.io/vitess/go/vt/proto/vttest"
@@ -86,8 +87,7 @@ func TestMain(m *testing.M) {
defer cancel()
config := tabletenv.NewDefaultConfig()
- config.TwoPCEnable = true
- config.TwoPCAbandonAge = 1
+ config.TwoPCAbandonAge = 1 * time.Second
if err := framework.StartCustomServer(ctx, connParams, connAppDebugParams, cluster.DbName(), config); err != nil {
fmt.Fprintf(os.Stderr, "%v", err)
diff --git a/go/vt/vttablet/endtoend/framework/client.go b/go/vt/vttablet/endtoend/framework/client.go
index 04342d57aa4..59def25ab61 100644
--- a/go/vt/vttablet/endtoend/framework/client.go
+++ b/go/vt/vttablet/endtoend/framework/client.go
@@ -158,7 +158,7 @@ func (client *QueryClient) CreateTransaction(dtid string, participants []*queryp
}
// StartCommit issues a StartCommit to TabletServer for the current transaction.
-func (client *QueryClient) StartCommit(dtid string) error {
+func (client *QueryClient) StartCommit(dtid string) (querypb.StartCommitState, error) {
defer func() { client.transactionID = 0 }()
return client.server.StartCommit(client.ctx, client.target, client.transactionID, dtid)
}
diff --git a/go/vt/vttablet/endtoend/framework/server.go b/go/vt/vttablet/endtoend/framework/server.go
index 2cd3ccc354c..3374aadb450 100644
--- a/go/vt/vttablet/endtoend/framework/server.go
+++ b/go/vt/vttablet/endtoend/framework/server.go
@@ -65,11 +65,16 @@ func StartCustomServer(ctx context.Context, connParams, connAppDebugParams mysql
TabletType: topodatapb.TabletType_PRIMARY,
}
TopoServer = memorytopo.NewServer(ctx, "")
+ // Create the serving keyspace for throttler.
+ err := TopoServer.UpdateSrvKeyspace(ctx, "", "vttest", &topodatapb.SrvKeyspace{})
+ if err != nil {
+ return vterrors.Wrap(err, "could not create serving keyspace in topo")
+ }
srvTopoCounts := stats.NewCountersWithSingleLabel("", "Resilient srvtopo server operations", "type")
Server = tabletserver.NewTabletServer(ctx, vtenv.NewTestEnv(), "", cfg, TopoServer, &topodatapb.TabletAlias{}, srvTopoCounts)
Server.Register()
- err := Server.StartService(Target, dbcfgs, nil /* mysqld */)
+ err = Server.StartService(Target, dbcfgs, nil /* mysqld */)
if err != nil {
return vterrors.Wrap(err, "could not start service")
}
@@ -103,8 +108,7 @@ func StartCustomServer(ctx context.Context, connParams, connAppDebugParams mysql
func StartServer(ctx context.Context, connParams, connAppDebugParams mysql.ConnParams, dbName string) error {
config := tabletenv.NewDefaultConfig()
config.StrictTableACL = true
- config.TwoPCEnable = true
- config.TwoPCAbandonAge = 1
+ config.TwoPCAbandonAge = 1 * time.Second
config.HotRowProtection.Mode = tabletenv.Enable
config.TrackSchemaVersions = true
config.GracePeriods.Shutdown = 2 * time.Second
diff --git a/go/vt/vttablet/endtoend/misc_test.go b/go/vt/vttablet/endtoend/misc_test.go
index 29bbba56873..68f6f4b1af6 100644
--- a/go/vt/vttablet/endtoend/misc_test.go
+++ b/go/vt/vttablet/endtoend/misc_test.go
@@ -35,10 +35,15 @@ import (
"vitess.io/vitess/go/sqltypes"
"vitess.io/vitess/go/test/utils"
"vitess.io/vitess/go/vt/callerid"
+ "vitess.io/vitess/go/vt/dbconfigs"
"vitess.io/vitess/go/vt/log"
querypb "vitess.io/vitess/go/vt/proto/query"
vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc"
+ "vitess.io/vitess/go/vt/sqlparser"
+ "vitess.io/vitess/go/vt/vtenv"
"vitess.io/vitess/go/vt/vttablet/endtoend/framework"
+ "vitess.io/vitess/go/vt/vttablet/tabletserver/schema"
+ "vitess.io/vitess/go/vt/vttablet/tabletserver/tabletenv"
)
func TestSimpleRead(t *testing.T) {
@@ -890,6 +895,11 @@ func TestShowTablesWithSizes(t *testing.T) {
require.NoError(t, err)
defer conn.Close()
+ if query := conn.BaseShowTablesWithSizes(); query == "" {
+ // Happens in MySQL 8.0 where we use BaseShowInnodbTableSizes, instead.
+ t.Skip("BaseShowTablesWithSizes is empty in this version of MySQL")
+ }
+
setupQueries := []string{
`drop view if exists show_tables_with_sizes_v1`,
`drop table if exists show_tables_with_sizes_t1`,
@@ -897,12 +907,14 @@ func TestShowTablesWithSizes(t *testing.T) {
`create table show_tables_with_sizes_t1 (id int primary key)`,
`create view show_tables_with_sizes_v1 as select * from show_tables_with_sizes_t1`,
`CREATE TABLE show_tables_with_sizes_employees (id INT NOT NULL, store_id INT) PARTITION BY HASH(store_id) PARTITIONS 4`,
+ `create table show_tables_with_sizes_fts (id int primary key, name text, fulltext key name_fts (name))`,
}
defer func() {
_, _ = conn.ExecuteFetch(`drop view if exists show_tables_with_sizes_v1`, 1, false)
_, _ = conn.ExecuteFetch(`drop table if exists show_tables_with_sizes_t1`, 1, false)
_, _ = conn.ExecuteFetch(`drop table if exists show_tables_with_sizes_employees`, 1, false)
+ _, _ = conn.ExecuteFetch(`drop table if exists show_tables_with_sizes_fts`, 1, false)
}()
for _, query := range setupQueries {
_, err := conn.ExecuteFetch(query, 1, false)
@@ -913,6 +925,7 @@ func TestShowTablesWithSizes(t *testing.T) {
"show_tables_with_sizes_t1",
"show_tables_with_sizes_v1",
"show_tables_with_sizes_employees",
+ "show_tables_with_sizes_fts",
}
actualTables := []string{}
@@ -933,7 +946,7 @@ func TestShowTablesWithSizes(t *testing.T) {
assert.True(t, row[2].IsIntegral())
createTime, err := row[2].ToCastInt64()
assert.NoError(t, err)
- assert.Greater(t, createTime, int64(0))
+ assert.Positive(t, createTime)
// TABLE_COMMENT
assert.Equal(t, "", row[3].ToString())
@@ -941,12 +954,12 @@ func TestShowTablesWithSizes(t *testing.T) {
assert.True(t, row[4].IsDecimal())
fileSize, err := row[4].ToCastInt64()
assert.NoError(t, err)
- assert.Greater(t, fileSize, int64(0))
+ assert.Positive(t, fileSize)
assert.True(t, row[4].IsDecimal())
allocatedSize, err := row[5].ToCastInt64()
assert.NoError(t, err)
- assert.Greater(t, allocatedSize, int64(0))
+ assert.Positive(t, allocatedSize)
actualTables = append(actualTables, tableName)
} else if tableName == "show_tables_with_sizes_v1" {
@@ -956,7 +969,7 @@ func TestShowTablesWithSizes(t *testing.T) {
assert.True(t, row[2].IsIntegral())
createTime, err := row[2].ToCastInt64()
assert.NoError(t, err)
- assert.Greater(t, createTime, int64(0))
+ assert.Positive(t, createTime)
// TABLE_COMMENT
assert.Equal(t, "VIEW", row[3].ToString())
@@ -972,7 +985,30 @@ func TestShowTablesWithSizes(t *testing.T) {
assert.True(t, row[2].IsIntegral())
createTime, err := row[2].ToCastInt64()
assert.NoError(t, err)
- assert.Greater(t, createTime, int64(0))
+ assert.Positive(t, createTime)
+
+ // TABLE_COMMENT
+ assert.Equal(t, "", row[3].ToString())
+
+ assert.True(t, row[4].IsDecimal())
+ fileSize, err := row[4].ToCastInt64()
+ assert.NoError(t, err)
+ assert.Positive(t, fileSize)
+
+ assert.True(t, row[5].IsDecimal())
+ allocatedSize, err := row[5].ToCastInt64()
+ assert.NoError(t, err)
+ assert.Positive(t, allocatedSize)
+
+ actualTables = append(actualTables, tableName)
+ } else if tableName == "show_tables_with_sizes_fts" {
+ // TABLE_TYPE
+ assert.Equal(t, "BASE TABLE", row[1].ToString())
+
+ assert.True(t, row[2].IsIntegral())
+ createTime, err := row[2].ToCastInt64()
+ assert.NoError(t, err)
+ assert.Positive(t, createTime)
// TABLE_COMMENT
assert.Equal(t, "", row[3].ToString())
@@ -980,12 +1016,12 @@ func TestShowTablesWithSizes(t *testing.T) {
assert.True(t, row[4].IsDecimal())
fileSize, err := row[4].ToCastInt64()
assert.NoError(t, err)
- assert.Greater(t, fileSize, int64(0))
+ assert.Positive(t, fileSize)
assert.True(t, row[5].IsDecimal())
allocatedSize, err := row[5].ToCastInt64()
assert.NoError(t, err)
- assert.Greater(t, allocatedSize, int64(0))
+ assert.Positive(t, allocatedSize)
actualTables = append(actualTables, tableName)
}
@@ -995,6 +1031,137 @@ func TestShowTablesWithSizes(t *testing.T) {
assert.ElementsMatch(t, expectedTables, actualTables)
}
+func newTestSchemaEngine(connParams *mysql.ConnParams) *schema.Engine {
+ cfg := tabletenv.NewDefaultConfig()
+ cfg.DB = dbconfigs.NewTestDBConfigs(*connParams, *connParams, connParams.DbName)
+ env := tabletenv.NewEnv(vtenv.NewTestEnv(), cfg, "EngineTest")
+ se := schema.NewEngine(env)
+ se.InitDBConfig(dbconfigs.New(connParams))
+ return se
+}
+
+func TestEngineReload(t *testing.T) {
+ ctx := context.Background()
+ conn, err := mysql.Connect(ctx, &connParams)
+ require.NoError(t, err)
+ defer conn.Close()
+ t.Run("validate innodb size query", func(t *testing.T) {
+ q := conn.BaseShowInnodbTableSizes()
+ require.NotEmpty(t, q)
+ })
+ t.Run("validate conn schema", func(t *testing.T) {
+ rs, err := conn.ExecuteFetch(`select database() as d`, 1, true)
+ require.NoError(t, err)
+ row := rs.Named().Row()
+ require.NotNil(t, row)
+ database := row.AsString("d", "")
+ require.Equal(t, connParams.DbName, database)
+ })
+
+ defer func() {
+ _, _ = conn.ExecuteFetch(`drop view if exists view_simple`, 1, false)
+ _, _ = conn.ExecuteFetch(`drop view if exists view_simple2`, 1, false)
+ _, _ = conn.ExecuteFetch(`drop view if exists view_simple3`, 1, false)
+ _, _ = conn.ExecuteFetch(`drop table if exists tbl_simple`, 1, false)
+ _, _ = conn.ExecuteFetch(`drop table if exists tbl_part`, 1, false)
+ _, _ = conn.ExecuteFetch(`drop table if exists tbl_fts`, 1, false)
+ }()
+
+ engine := newTestSchemaEngine(&connParams)
+ require.NotNil(t, engine)
+ err = engine.Open()
+ require.NoError(t, err)
+ defer engine.Close()
+
+ t.Run("schema", func(t *testing.T) {
+ setupQueries := []string{
+ `drop view if exists view_simple`,
+ `drop view if exists view_simple2`,
+ `drop table if exists tbl_simple`,
+ `drop table if exists tbl_part`,
+ `drop table if exists tbl_fts`,
+ `create table tbl_simple (id int primary key)`,
+ `create view view_simple as select * from tbl_simple`,
+ `create view view_simple2 as select * from tbl_simple`,
+ `create table tbl_part (id INT NOT NULL, store_id INT) PARTITION BY HASH(store_id) PARTITIONS 4`,
+ `create table tbl_fts (id int primary key, name text, fulltext key name_fts (name))`,
+ }
+
+ for _, query := range setupQueries {
+ _, err := conn.ExecuteFetch(query, 1, false)
+ require.NoError(t, err)
+ }
+
+ expectedTables := []string{
+ "tbl_simple",
+ "tbl_part",
+ "tbl_fts",
+ "view_simple",
+ "view_simple2",
+ }
+ err := engine.Reload(ctx)
+ require.NoError(t, err)
+
+ schema := engine.GetSchema()
+ require.NotEmpty(t, schema)
+ for _, expectTable := range expectedTables {
+ t.Run(expectTable, func(t *testing.T) {
+ tbl := engine.GetTable(sqlparser.NewIdentifierCS(expectTable))
+ require.NotNil(t, tbl)
+
+ switch expectTable {
+ case "view_simple", "view_simple2":
+ assert.Zero(t, tbl.FileSize)
+ assert.Zero(t, tbl.AllocatedSize)
+ default:
+ assert.NotZero(t, tbl.FileSize)
+ assert.NotZero(t, tbl.AllocatedSize)
+ }
+ })
+ }
+ })
+ t.Run("schema changes", func(t *testing.T) {
+ setupQueries := []string{
+ `alter view view_simple as select *, 2 from tbl_simple`,
+ `drop view view_simple2`,
+ `create view view_simple3 as select * from tbl_simple`,
+ }
+
+ for _, query := range setupQueries {
+ _, err := conn.ExecuteFetch(query, 1, false)
+ require.NoError(t, err)
+ }
+
+ expectedTables := []string{
+ "tbl_simple",
+ "tbl_part",
+ "tbl_fts",
+ "view_simple",
+ "view_simple3",
+ }
+ err := engine.Reload(ctx)
+ require.NoError(t, err)
+
+ schema := engine.GetSchema()
+ require.NotEmpty(t, schema)
+ for _, expectTable := range expectedTables {
+ t.Run(expectTable, func(t *testing.T) {
+ tbl := engine.GetTable(sqlparser.NewIdentifierCS(expectTable))
+ require.NotNil(t, tbl)
+
+ switch expectTable {
+ case "view_simple", "view_simple2", "view_simple3":
+ assert.Zero(t, tbl.FileSize)
+ assert.Zero(t, tbl.AllocatedSize)
+ default:
+ assert.NotZero(t, tbl.FileSize)
+ assert.NotZero(t, tbl.AllocatedSize)
+ }
+ })
+ }
+ })
+}
+
// TestTuple tests that bind variables having tuple values work with vttablet.
func TestTuple(t *testing.T) {
client := framework.NewClient()
diff --git a/go/vt/vttablet/endtoend/queries_test.go b/go/vt/vttablet/endtoend/queries_test.go
index 5a57f681a10..f67d3219010 100644
--- a/go/vt/vttablet/endtoend/queries_test.go
+++ b/go/vt/vttablet/endtoend/queries_test.go
@@ -121,6 +121,20 @@ var TestQueryCases = []framework.Testable{
},
RowsReturned: 1,
},
+ &framework.TestCase{
+ Name: "explain with bindvars",
+ Query: "explain select :__vtudvp as `@p` from dual",
+ BindVars: map[string]*querypb.BindVariable{
+ "__vtudvp": sqltypes.Int64BindVariable(1),
+ },
+ Result: [][]string{
+ {"1", "SIMPLE", "", "", "", "", "", "", "", "", "", "No tables used"},
+ },
+ Rewritten: []string{
+ "explain select 1 as `@p` from dual",
+ },
+ RowsReturned: 1,
+ },
&framework.TestCase{
Name: "limit",
Query: "select /* limit */ eid, id from vitess_a limit :a",
diff --git a/go/vt/vttablet/endtoend/savepoint_test.go b/go/vt/vttablet/endtoend/savepoint_test.go
index 74572f2376f..90cf8fbd547 100644
--- a/go/vt/vttablet/endtoend/savepoint_test.go
+++ b/go/vt/vttablet/endtoend/savepoint_test.go
@@ -103,7 +103,7 @@ func TestSavepointInTransactionWithRelease(t *testing.T) {
diff int
}{{
tag: "Queries/Histograms/Savepoint/Count",
- diff: 1,
+ diff: 2, // savepoint a (post-begin) and savepoint b
}, {
tag: "Queries/Histograms/Release/Count",
diff: 1,
diff --git a/go/vt/vttablet/endtoend/transaction_test.go b/go/vt/vttablet/endtoend/transaction_test.go
index 58a1cacbe10..5e5889ad671 100644
--- a/go/vt/vttablet/endtoend/transaction_test.go
+++ b/go/vt/vttablet/endtoend/transaction_test.go
@@ -22,12 +22,9 @@ import (
"testing"
"time"
- "vitess.io/vitess/go/vt/vttablet/tabletserver/tabletenv/tabletenvtest"
-
- "google.golang.org/protobuf/proto"
-
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
+ "google.golang.org/protobuf/proto"
"vitess.io/vitess/go/mysql"
"vitess.io/vitess/go/test/utils"
@@ -35,7 +32,6 @@ import (
topodatapb "vitess.io/vitess/go/vt/proto/topodata"
"vitess.io/vitess/go/vt/vttablet/endtoend/framework"
"vitess.io/vitess/go/vt/vttablet/tabletserver"
- "vitess.io/vitess/go/vt/vttablet/tabletserver/tabletenv"
)
func TestCommit(t *testing.T) {
@@ -202,30 +198,6 @@ func TestAutoCommit(t *testing.T) {
}
}
-func TestTxPoolSize(t *testing.T) {
- tabletenvtest.LoadTabletEnvFlags()
-
- vstart := framework.DebugVars()
-
- client1 := framework.NewClient()
- err := client1.Begin(false)
- require.NoError(t, err)
- defer client1.Rollback()
- verifyIntValue(t, framework.DebugVars(), "TransactionPoolAvailable", tabletenv.NewCurrentConfig().TxPool.Size-1)
-
- revert := changeVar(t, "TxPoolSize", "1")
- defer revert()
- vend := framework.DebugVars()
- verifyIntValue(t, vend, "TransactionPoolAvailable", 0)
- verifyIntValue(t, vend, "TransactionPoolCapacity", 1)
-
- client2 := framework.NewClient()
- err = client2.Begin(false)
- require.Error(t, err)
- require.Contains(t, err.Error(), "connection limit exceeded")
- compareIntDiff(t, framework.DebugVars(), "Errors/RESOURCE_EXHAUSTED", vstart, 1)
-}
-
func TestForUpdate(t *testing.T) {
for _, mode := range []string{"for update", "lock in share mode"} {
client := framework.NewClient()
@@ -529,8 +501,9 @@ func TestMMCommitFlow(t *testing.T) {
require.Error(t, err)
require.Contains(t, err.Error(), "Duplicate entry")
- err = client.StartCommit("aa")
+ state, err := client.StartCommit("aa")
require.NoError(t, err)
+ assert.Equal(t, querypb.StartCommitState_Success, state)
err = client.SetRollback("aa", 0)
require.EqualError(t, err, "could not transition to ROLLBACK: aa (CallerID: dev)")
diff --git a/go/vt/vttablet/endtoend/twopc/main_test.go b/go/vt/vttablet/endtoend/twopc/main_test.go
index 090751503d4..3b68ce273e1 100644
--- a/go/vt/vttablet/endtoend/twopc/main_test.go
+++ b/go/vt/vttablet/endtoend/twopc/main_test.go
@@ -22,6 +22,7 @@ import (
"fmt"
"os"
"testing"
+ "time"
"vitess.io/vitess/go/mysql"
"vitess.io/vitess/go/vt/vttablet/endtoend/framework"
@@ -83,8 +84,7 @@ func TestMain(m *testing.M) {
defer cancel()
config := tabletenv.NewDefaultConfig()
- config.TwoPCEnable = true
- config.TwoPCAbandonAge = 1
+ config.TwoPCAbandonAge = 1 * time.Second
err := framework.StartCustomServer(ctx, connParams, connAppDebugParams, cluster.DbName(), config)
if err != nil {
fmt.Fprintf(os.Stderr, "%v", err)
diff --git a/go/vt/vttablet/endtoend/twopc/prepare_test.go b/go/vt/vttablet/endtoend/twopc/prepare_test.go
index ae07356d6dc..047b02bce82 100644
--- a/go/vt/vttablet/endtoend/twopc/prepare_test.go
+++ b/go/vt/vttablet/endtoend/twopc/prepare_test.go
@@ -64,7 +64,7 @@ func TestCommitPreparedFailNonRetryable(t *testing.T) {
qr, err := client2.Execute("select dtid, state, message from _vt.redo_state where dtid = 'bb'", nil)
require.NoError(t, err)
- require.Equal(t, `[[VARBINARY("bb") INT64(0) TEXT("Lock wait timeout exceeded; try restarting transaction (errno 1205) (sqlstate HY000) during query: delete from _vt.redo_state where dtid = 'bb'")]]`, fmt.Sprintf("%v", qr.Rows))
+ require.Equal(t, `[[VARBINARY("bb") INT64(0) TEXT("Lock wait timeout exceeded; try restarting transaction (errno 1205) (sqlstate HY000) during query: delete from _vt.redo_state where dtid = _binary'bb'")]]`, fmt.Sprintf("%v", qr.Rows))
}
// TestCommitPreparedFailRetryable tests the case where the commit_prepared fails when the query is killed.
@@ -81,7 +81,7 @@ func TestCommitPreparedFailRetryable(t *testing.T) {
require.NoError(t, err)
client2 := framework.NewClient()
- _, err = client2.BeginExecute(`select * from _vt.redo_state where dtid = 'aa' for update`, nil, nil)
+ _, err = client2.BeginExecute(`select * from _vt.redo_state where dtid = _binary'aa' for update`, nil, nil)
require.NoError(t, err)
ch := make(chan any)
@@ -103,7 +103,7 @@ func TestCommitPreparedFailRetryable(t *testing.T) {
client2.Release()
<-ch
- qr, err := client2.Execute("select dtid, state, message from _vt.redo_state where dtid = 'aa'", nil)
+ qr, err := client2.Execute("select dtid, state, message from _vt.redo_state where dtid = _binary'aa'", nil)
require.NoError(t, err)
- require.Equal(t, `[[VARBINARY("aa") INT64(1) TEXT("Query execution was interrupted (errno 1317) (sqlstate 70100) during query: delete from _vt.redo_state where dtid = 'aa'")]]`, fmt.Sprintf("%v", qr.Rows))
+ require.Equal(t, `[[VARBINARY("aa") INT64(1) TEXT("Query execution was interrupted (errno 1317) (sqlstate 70100) during query: delete from _vt.redo_state where dtid = _binary'aa'")]]`, fmt.Sprintf("%v", qr.Rows))
}
diff --git a/go/vt/vttablet/faketmclient/fake_client.go b/go/vt/vttablet/faketmclient/fake_client.go
index 9df7b344473..78c87d142a9 100644
--- a/go/vt/vttablet/faketmclient/fake_client.go
+++ b/go/vt/vttablet/faketmclient/fake_client.go
@@ -66,6 +66,10 @@ func (client *FakeTabletManagerClient) CreateVReplicationWorkflow(ctx context.Co
return nil, nil
}
+func (client *FakeTabletManagerClient) DeleteTableData(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.DeleteTableDataRequest) (*tabletmanagerdatapb.DeleteTableDataResponse, error) {
+ return nil, nil
+}
+
func (client *FakeTabletManagerClient) DeleteVReplicationWorkflow(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.DeleteVReplicationWorkflowRequest) (*tabletmanagerdatapb.DeleteVReplicationWorkflowResponse, error) {
return nil, nil
}
@@ -161,6 +165,11 @@ func (client *FakeTabletManagerClient) SetReadWrite(ctx context.Context, tablet
return nil
}
+// ChangeTags is part of the tmclient.TabletManagerClient interface.
+func (client *FakeTabletManagerClient) ChangeTags(ctx context.Context, tablet *topodatapb.Tablet, tabletTags map[string]string, replace bool) (*tabletmanagerdatapb.ChangeTagsResponse, error) {
+ return &tabletmanagerdatapb.ChangeTagsResponse{}, nil
+}
+
// ChangeType is part of the tmclient.TabletManagerClient interface.
func (client *FakeTabletManagerClient) ChangeType(ctx context.Context, tablet *topodatapb.Tablet, dbType topodatapb.TabletType, semiSync bool) error {
return nil
@@ -217,7 +226,7 @@ func (client *FakeTabletManagerClient) ExecuteFetchAsApp(ctx context.Context, ta
}
// GetUnresolvedTransactions is part of the tmclient.TabletManagerClient interface.
-func (client *FakeTabletManagerClient) GetUnresolvedTransactions(ctx context.Context, tablet *topodatapb.Tablet) ([]*querypb.TransactionMetadata, error) {
+func (client *FakeTabletManagerClient) GetUnresolvedTransactions(ctx context.Context, tablet *topodatapb.Tablet, abandonAge int64) ([]*querypb.TransactionMetadata, error) {
return nil, nil
}
@@ -236,6 +245,10 @@ func (client *FakeTabletManagerClient) ReadTransaction(ctx context.Context, tabl
return nil, nil
}
+func (client *FakeTabletManagerClient) GetTransactionInfo(ctx context.Context, tablet *topodatapb.Tablet, dtid string) (*tabletmanagerdatapb.GetTransactionInfoResponse, error) {
+ return nil, nil
+}
+
//
// Replication related methods
//
@@ -344,6 +357,11 @@ func (client *FakeTabletManagerClient) PopulateReparentJournal(ctx context.Conte
return nil
}
+// ReadReparentJournalInfo is part of the tmclient.TabletManagerClient interface.
+func (client *FakeTabletManagerClient) ReadReparentJournalInfo(ctx context.Context, tablet *topodatapb.Tablet) (int, error) {
+ return 10, nil
+}
+
// DemotePrimary is part of the tmclient.TabletManagerClient interface.
func (client *FakeTabletManagerClient) DemotePrimary(ctx context.Context, tablet *topodatapb.Tablet) (*replicationdatapb.PrimaryStatus, error) {
return nil, nil
diff --git a/go/vt/vttablet/grpcqueryservice/server.go b/go/vt/vttablet/grpcqueryservice/server.go
index a1a1283b4ad..e3c179ce856 100644
--- a/go/vt/vttablet/grpcqueryservice/server.go
+++ b/go/vt/vttablet/grpcqueryservice/server.go
@@ -183,11 +183,8 @@ func (q *query) StartCommit(ctx context.Context, request *querypb.StartCommitReq
request.EffectiveCallerId,
request.ImmediateCallerId,
)
- if err := q.server.StartCommit(ctx, request.Target, request.TransactionId, request.Dtid); err != nil {
- return nil, vterrors.ToGRPC(err)
- }
-
- return &querypb.StartCommitResponse{}, nil
+ state, err := q.server.StartCommit(ctx, request.Target, request.TransactionId, request.Dtid)
+ return &querypb.StartCommitResponse{State: state}, vterrors.ToGRPC(err)
}
// SetRollback is part of the queryservice.QueryServer interface
diff --git a/go/vt/vttablet/grpctabletconn/conn.go b/go/vt/vttablet/grpctabletconn/conn.go
index 16f93a44372..d2d5604d808 100644
--- a/go/vt/vttablet/grpctabletconn/conn.go
+++ b/go/vt/vttablet/grpctabletconn/conn.go
@@ -351,11 +351,12 @@ func (conn *gRPCQueryClient) CreateTransaction(ctx context.Context, target *quer
// StartCommit atomically commits the transaction along with the
// decision to commit the associated 2pc transaction.
-func (conn *gRPCQueryClient) StartCommit(ctx context.Context, target *querypb.Target, transactionID int64, dtid string) error {
+func (conn *gRPCQueryClient) StartCommit(ctx context.Context, target *querypb.Target, transactionID int64, dtid string) (querypb.StartCommitState, error) {
conn.mu.RLock()
defer conn.mu.RUnlock()
if conn.cc == nil {
- return tabletconn.ConnClosed
+ // This can be marked as fail as not other process will try to commit this transaction.
+ return querypb.StartCommitState_Fail, tabletconn.ConnClosed
}
req := &querypb.StartCommitRequest{
@@ -365,11 +366,12 @@ func (conn *gRPCQueryClient) StartCommit(ctx context.Context, target *querypb.Ta
TransactionId: transactionID,
Dtid: dtid,
}
- _, err := conn.c.StartCommit(ctx, req)
- if err != nil {
- return tabletconn.ErrorFromGRPC(err)
+ resp, err := conn.c.StartCommit(ctx, req)
+ err = tabletconn.ErrorFromGRPC(err)
+ if resp != nil {
+ return resp.State, err
}
- return nil
+ return querypb.StartCommitState_Unknown, err
}
// SetRollback transitions the 2pc transaction to the Rollback state.
diff --git a/go/vt/vttablet/grpctmclient/client.go b/go/vt/vttablet/grpctmclient/client.go
index 3439e97d50d..20aa1e5f39f 100644
--- a/go/vt/vttablet/grpctmclient/client.go
+++ b/go/vt/vttablet/grpctmclient/client.go
@@ -384,6 +384,19 @@ func (client *Client) SetReadWrite(ctx context.Context, tablet *topodatapb.Table
return err
}
+// ChangeTags is part of the tmclient.TabletManagerClient interface.
+func (client *Client) ChangeTags(ctx context.Context, tablet *topodatapb.Tablet, tabletTags map[string]string, replace bool) (*tabletmanagerdatapb.ChangeTagsResponse, error) {
+ c, closer, err := client.dialer.dial(ctx, tablet)
+ if err != nil {
+ return nil, err
+ }
+ defer closer.Close()
+ return c.ChangeTags(ctx, &tabletmanagerdatapb.ChangeTagsRequest{
+ Tags: tabletTags,
+ Replace: replace,
+ })
+}
+
// ChangeType is part of the tmclient.TabletManagerClient interface.
func (client *Client) ChangeType(ctx context.Context, tablet *topodatapb.Tablet, dbType topodatapb.TabletType, semiSync bool) error {
c, closer, err := client.dialer.dial(ctx, tablet)
@@ -659,14 +672,16 @@ func (client *Client) ExecuteFetchAsApp(ctx context.Context, tablet *topodatapb.
}
// GetUnresolvedTransactions is part of the tmclient.TabletManagerClient interface.
-func (client *Client) GetUnresolvedTransactions(ctx context.Context, tablet *topodatapb.Tablet) ([]*querypb.TransactionMetadata, error) {
+func (client *Client) GetUnresolvedTransactions(ctx context.Context, tablet *topodatapb.Tablet, abandonAge int64) ([]*querypb.TransactionMetadata, error) {
c, closer, err := client.dialer.dial(ctx, tablet)
if err != nil {
return nil, err
}
defer closer.Close()
- response, err := c.GetUnresolvedTransactions(ctx, &tabletmanagerdatapb.GetUnresolvedTransactionsRequest{})
+ response, err := c.GetUnresolvedTransactions(ctx, &tabletmanagerdatapb.GetUnresolvedTransactionsRequest{
+ AbandonAge: abandonAge,
+ })
if err != nil {
return nil, err
}
@@ -719,6 +734,23 @@ func (client *Client) ReadTransaction(ctx context.Context, tablet *topodatapb.Ta
return resp.Transaction, nil
}
+// GetTransactionInfo is part of the tmclient.TabletManagerClient interface.
+func (client *Client) GetTransactionInfo(ctx context.Context, tablet *topodatapb.Tablet, dtid string) (*tabletmanagerdatapb.GetTransactionInfoResponse, error) {
+ c, closer, err := client.dialer.dial(ctx, tablet)
+ if err != nil {
+ return nil, err
+ }
+ defer closer.Close()
+
+ resp, err := c.GetTransactionInfo(ctx, &tabletmanagerdatapb.GetTransactionInfoRequest{
+ Dtid: dtid,
+ })
+ if err != nil {
+ return nil, err
+ }
+ return resp, nil
+}
+
//
// Replication related methods
//
@@ -897,6 +929,19 @@ func (client *Client) CreateVReplicationWorkflow(ctx context.Context, tablet *to
return response, nil
}
+func (client *Client) DeleteTableData(ctx context.Context, tablet *topodatapb.Tablet, request *tabletmanagerdatapb.DeleteTableDataRequest) (*tabletmanagerdatapb.DeleteTableDataResponse, error) {
+ c, closer, err := client.dialer.dial(ctx, tablet)
+ if err != nil {
+ return nil, err
+ }
+ defer closer.Close()
+ response, err := c.DeleteTableData(ctx, request)
+ if err != nil {
+ return nil, err
+ }
+ return response, nil
+}
+
func (client *Client) DeleteVReplicationWorkflow(ctx context.Context, tablet *topodatapb.Tablet, request *tabletmanagerdatapb.DeleteVReplicationWorkflowRequest) (*tabletmanagerdatapb.DeleteVReplicationWorkflowResponse, error) {
c, closer, err := client.dialer.dial(ctx, tablet)
if err != nil {
@@ -1078,6 +1123,20 @@ func (client *Client) PopulateReparentJournal(ctx context.Context, tablet *topod
return err
}
+// ReadReparentJournalInfo is part of the tmclient.TabletManagerClient interface.
+func (client *Client) ReadReparentJournalInfo(ctx context.Context, tablet *topodatapb.Tablet) (int, error) {
+ c, closer, err := client.dialer.dial(ctx, tablet)
+ if err != nil {
+ return 0, err
+ }
+ defer closer.Close()
+ resp, err := c.ReadReparentJournalInfo(ctx, &tabletmanagerdatapb.ReadReparentJournalInfoRequest{})
+ if err != nil {
+ return 0, err
+ }
+ return int(resp.Length), nil
+}
+
// InitReplica is part of the tmclient.TabletManagerClient interface.
func (client *Client) InitReplica(ctx context.Context, tablet *topodatapb.Tablet, parent *topodatapb.TabletAlias, replicationPosition string, timeCreatedNS int64, semiSync bool) error {
c, closer, err := client.dialer.dial(ctx, tablet)
diff --git a/go/vt/vttablet/grpctmserver/server.go b/go/vt/vttablet/grpctmserver/server.go
index 344c232f0d7..6f0fd2aa4dc 100644
--- a/go/vt/vttablet/grpctmserver/server.go
+++ b/go/vt/vttablet/grpctmserver/server.go
@@ -127,6 +127,15 @@ func (s *server) SetReadWrite(ctx context.Context, request *tabletmanagerdatapb.
return response, s.tm.SetReadOnly(ctx, false)
}
+func (s *server) ChangeTags(ctx context.Context, request *tabletmanagerdatapb.ChangeTagsRequest) (response *tabletmanagerdatapb.ChangeTagsResponse, err error) {
+ defer s.tm.HandleRPCPanic(ctx, "ChangeTags", request, response, false /*verbose*/, &err)
+ ctx = callinfo.GRPCCallInfo(ctx)
+ afterTags, err := s.tm.ChangeTags(ctx, request.Tags, request.Replace)
+ return &tabletmanagerdatapb.ChangeTagsResponse{
+ Tags: afterTags,
+ }, err
+}
+
func (s *server) ChangeType(ctx context.Context, request *tabletmanagerdatapb.ChangeTypeRequest) (response *tabletmanagerdatapb.ChangeTypeResponse, err error) {
defer s.tm.HandleRPCPanic(ctx, "ChangeType", request, response, true /*verbose*/, &err)
ctx = callinfo.GRPCCallInfo(ctx)
@@ -303,6 +312,18 @@ func (s *server) ReadTransaction(ctx context.Context, request *tabletmanagerdata
return &tabletmanagerdatapb.ReadTransactionResponse{Transaction: transaction}, nil
}
+func (s *server) GetTransactionInfo(ctx context.Context, request *tabletmanagerdatapb.GetTransactionInfoRequest) (response *tabletmanagerdatapb.GetTransactionInfoResponse, err error) {
+ defer s.tm.HandleRPCPanic(ctx, "GetTransactionInfo", request, response, false /*verbose*/, &err)
+ ctx = callinfo.GRPCCallInfo(ctx)
+
+ response, err = s.tm.GetTransactionInfo(ctx, request)
+ if err != nil {
+ return nil, vterrors.ToGRPC(err)
+ }
+
+ return response, nil
+}
+
func (s *server) ConcludeTransaction(ctx context.Context, request *tabletmanagerdatapb.ConcludeTransactionRequest) (response *tabletmanagerdatapb.ConcludeTransactionResponse, err error) {
defer s.tm.HandleRPCPanic(ctx, "ConcludeTransaction", request, response, false /*verbose*/, &err)
ctx = callinfo.GRPCCallInfo(ctx)
@@ -435,6 +456,13 @@ func (s *server) CreateVReplicationWorkflow(ctx context.Context, request *tablet
return s.tm.CreateVReplicationWorkflow(ctx, request)
}
+func (s *server) DeleteTableData(ctx context.Context, request *tabletmanagerdatapb.DeleteTableDataRequest) (response *tabletmanagerdatapb.DeleteTableDataResponse, err error) {
+ defer s.tm.HandleRPCPanic(ctx, "DeleteTableData", request, response, true /*verbose*/, &err)
+ ctx = callinfo.GRPCCallInfo(ctx)
+ response = &tabletmanagerdatapb.DeleteTableDataResponse{}
+ return s.tm.DeleteTableData(ctx, request)
+}
+
func (s *server) DeleteVReplicationWorkflow(ctx context.Context, request *tabletmanagerdatapb.DeleteVReplicationWorkflowRequest) (response *tabletmanagerdatapb.DeleteVReplicationWorkflowResponse, err error) {
defer s.tm.HandleRPCPanic(ctx, "DeleteVReplicationWorkflow", request, response, true /*verbose*/, &err)
ctx = callinfo.GRPCCallInfo(ctx)
@@ -536,6 +564,17 @@ func (s *server) PopulateReparentJournal(ctx context.Context, request *tabletman
return response, s.tm.PopulateReparentJournal(ctx, request.TimeCreatedNs, request.ActionName, request.PrimaryAlias, request.ReplicationPosition)
}
+func (s *server) ReadReparentJournalInfo(ctx context.Context, request *tabletmanagerdatapb.ReadReparentJournalInfoRequest) (response *tabletmanagerdatapb.ReadReparentJournalInfoResponse, err error) {
+ defer s.tm.HandleRPCPanic(ctx, "ReadReparentJournalInfo", request, response, true /*verbose*/, &err)
+ ctx = callinfo.GRPCCallInfo(ctx)
+ response = &tabletmanagerdatapb.ReadReparentJournalInfoResponse{}
+ length, err := s.tm.ReadReparentJournalInfo(ctx)
+ if err == nil {
+ response.Length = int32(length)
+ }
+ return response, err
+}
+
func (s *server) InitReplica(ctx context.Context, request *tabletmanagerdatapb.InitReplicaRequest) (response *tabletmanagerdatapb.InitReplicaResponse, err error) {
defer s.tm.HandleRPCPanic(ctx, "InitReplica", request, response, true /*verbose*/, &err)
ctx = callinfo.GRPCCallInfo(ctx)
@@ -598,6 +637,7 @@ func (s *server) StopReplicationAndGetStatus(ctx context.Context, request *table
if err == nil {
response.Status = statusResponse.Status
}
+
return response, err
}
diff --git a/go/vt/vttablet/onlineddl/executor.go b/go/vt/vttablet/onlineddl/executor.go
index aad8417237e..f8b5cfd9b8d 100644
--- a/go/vt/vttablet/onlineddl/executor.go
+++ b/go/vt/vttablet/onlineddl/executor.go
@@ -60,6 +60,7 @@ import (
"vitess.io/vitess/go/vt/topo"
"vitess.io/vitess/go/vt/topo/topoproto"
"vitess.io/vitess/go/vt/vterrors"
+ "vitess.io/vitess/go/vt/vttablet/tabletmanager/vreplication"
"vitess.io/vitess/go/vt/vttablet/tabletserver/connpool"
"vitess.io/vitess/go/vt/vttablet/tabletserver/tabletenv"
"vitess.io/vitess/go/vt/vttablet/tabletserver/throttle"
@@ -93,13 +94,18 @@ var (
ptOSCBinaryPath = "/usr/bin/pt-online-schema-change"
migrationCheckInterval = 1 * time.Minute
retainOnlineDDLTables = 24 * time.Hour
- defaultCutOverThreshold = 10 * time.Second
maxConcurrentOnlineDDLs = 256
migrationNextCheckIntervals = []time.Duration{1 * time.Second, 5 * time.Second, 10 * time.Second, 20 * time.Second}
cutoverIntervals = []time.Duration{0, 1 * time.Minute, 5 * time.Minute, 10 * time.Minute, 30 * time.Minute}
)
+const (
+ defaultCutOverThreshold = 10 * time.Second
+ minCutOverThreshold = 5 * time.Second
+ maxCutOverThreshold = 30 * time.Second
+)
+
func init() {
servenv.OnParseFor("vtcombo", registerOnlineDDLFlags)
servenv.OnParseFor("vttablet", registerOnlineDDLFlags)
@@ -198,13 +204,19 @@ func newGCTableRetainTime() time.Time {
return time.Now().UTC().Add(retainOnlineDDLTables)
}
-// getMigrationCutOverThreshold returns the cut-over threshold for the given migration. The migration's
-// DDL Strategy may explicitly set the threshold; otherwise, we return the default cut-over threshold.
-func getMigrationCutOverThreshold(onlineDDL *schema.OnlineDDL) time.Duration {
- if threshold, _ := onlineDDL.StrategySetting().CutOverThreshold(); threshold != 0 {
- return threshold
+// safeMigrationCutOverThreshold receives a desired threshold, and returns a cut-over threshold that
+// is reasonable to use
+func safeMigrationCutOverThreshold(threshold time.Duration) (time.Duration, error) {
+ switch {
+ case threshold == 0:
+ return defaultCutOverThreshold, nil
+ case threshold < minCutOverThreshold:
+ return defaultCutOverThreshold, vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "cut-over min value is %v", minCutOverThreshold)
+ case threshold > maxCutOverThreshold:
+ return defaultCutOverThreshold, vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "cut-over max value is %v", maxCutOverThreshold)
+ default:
+ return threshold, nil
}
- return defaultCutOverThreshold
}
// NewExecutor creates a new gh-ost executor.
@@ -784,7 +796,7 @@ func (e *Executor) killTableLockHoldersAndAccessors(ctx context.Context, tableNa
}
rs, err := conn.Conn.ExecuteFetch(query, -1, true)
if err != nil {
- return err
+ return vterrors.Wrapf(err, "finding queries potentially operating on table")
}
log.Infof("killTableLockHoldersAndAccessors: found %v potential queries", len(rs.Rows))
@@ -840,7 +852,7 @@ func (e *Executor) killTableLockHoldersAndAccessors(ctx context.Context, tableNa
}
rs, err := conn.Conn.ExecuteFetch(query, -1, true)
if err != nil {
- return err
+ return vterrors.Wrapf(err, "finding transactions locking table")
}
log.Infof("killTableLockHoldersAndAccessors: found %v locking transactions", len(rs.Rows))
for _, row := range rs.Named().Rows {
@@ -860,7 +872,7 @@ func (e *Executor) killTableLockHoldersAndAccessors(ctx context.Context, tableNa
// cutOverVReplMigration stops vreplication, then removes the _vt.vreplication entry for the given migration
func (e *Executor) cutOverVReplMigration(ctx context.Context, s *VReplStream, shouldForceCutOver bool) error {
if err := e.incrementCutoverAttempts(ctx, s.workflow); err != nil {
- return err
+ return vterrors.Wrapf(err, "cutover: failed incrementing cutover attempts")
}
tmClient := e.tabletManagerClient()
@@ -869,33 +881,35 @@ func (e *Executor) cutOverVReplMigration(ctx context.Context, s *VReplStream, sh
// sanity checks:
vreplTable, err := getVreplTable(s)
if err != nil {
- return err
+ return vterrors.Wrapf(err, "cutover: failed getting vreplication table")
}
// get topology client & entities:
tablet, err := e.ts.GetTablet(ctx, e.tabletAlias)
if err != nil {
- return err
+ return vterrors.Wrapf(err, "cutover: failed reading vreplication table")
}
// information about source tablet
- onlineDDL, _, err := e.readMigration(ctx, s.workflow)
+ onlineDDL, row, err := e.readMigration(ctx, s.workflow)
if err != nil {
- return err
+ return vterrors.Wrapf(err, "cutover: failed reading migration")
}
+ needsShadowTableAnalysis := row["shadow_analyzed_timestamp"].IsNull()
isVreplicationTestSuite := onlineDDL.StrategySetting().IsVreplicationTestSuite()
e.updateMigrationStage(ctx, onlineDDL.UUID, "starting cut-over")
var sentryTableName string
- migrationCutOverThreshold := getMigrationCutOverThreshold(onlineDDL)
-
- waitForPos := func(s *VReplStream, pos replication.Position) error {
- ctx, cancel := context.WithTimeout(ctx, migrationCutOverThreshold)
+ waitForPos := func(s *VReplStream, pos replication.Position, timeout time.Duration) error {
+ ctx, cancel := context.WithTimeout(ctx, timeout)
defer cancel()
// Wait for target to reach the up-to-date pos
if err := tmClient.VReplicationWaitForPos(ctx, tablet.Tablet, s.id, replication.EncodePosition(pos)); err != nil {
- return err
+ if s, _ := e.readVReplStream(ctx, s.workflow, true); s != nil {
+ err = vterrors.Wrapf(err, "read vrepl position %v", s.pos)
+ }
+ return vterrors.Wrapf(err, "failed waiting for position %v", replication.EncodePosition(pos))
}
// Target is now in sync with source!
return nil
@@ -909,14 +923,14 @@ func (e *Executor) cutOverVReplMigration(ctx context.Context, s *VReplStream, sh
// in that place as possible.
sentryTableName, err = schema.GenerateGCTableName(schema.HoldTableGCState, newGCTableRetainTime())
if err != nil {
- return nil
+ return vterrors.Wrapf(err, "failed creating sentry table name")
}
// We create the sentry table before toggling writes, because this involves a WaitForPos, which takes some time. We
// don't want to overload the buffering time with this excessive wait.
if err := e.updateArtifacts(ctx, onlineDDL.UUID, sentryTableName); err != nil {
- return err
+ return vterrors.Wrapf(err, "failed updating artifacts with sentry table name")
}
dropSentryTableQuery := sqlparser.BuildParsedQuery(sqlDropTableIfExists, sentryTableName)
@@ -938,34 +952,69 @@ func (e *Executor) cutOverVReplMigration(ctx context.Context, s *VReplStream, sh
// still have a record of the sentry table, and gcArtifacts() will still be able to take
// care of it in the future.
}()
- parsed := sqlparser.BuildParsedQuery(sqlCreateSentryTable, sentryTableName)
- if _, err := e.execQuery(ctx, parsed.Query); err != nil {
- return err
- }
- e.updateMigrationStage(ctx, onlineDDL.UUID, "sentry table created: %s", sentryTableName)
+ preparation := func() error {
+ preparationsConn, err := e.pool.Get(ctx, nil)
+ if err != nil {
+ return vterrors.Wrap(err, "failed getting preparation connection")
+ }
+ defer preparationsConn.Recycle()
+ // Set large enough `@@lock_wait_timeout` so that it does not interfere with the cut-over operation.
+ // The code will ensure everything that needs to be terminated by `onlineDDL.CutOverThreshold` will be terminated.
+ preparationConnRestoreLockWaitTimeout, err := e.initConnectionLockWaitTimeout(ctx, preparationsConn.Conn, 3*onlineDDL.CutOverThreshold)
+ if err != nil {
+ return vterrors.Wrap(err, "failed setting lock_wait_timeout on locking connection")
+ }
+ defer preparationConnRestoreLockWaitTimeout()
+
+ if needsShadowTableAnalysis {
+ // Run `ANALYZE TABLE` on the vreplication table so that it has up-to-date statistics at cut-over
+ parsed := sqlparser.BuildParsedQuery(sqlAnalyzeTable, vreplTable)
+ if _, err := preparationsConn.Conn.Exec(ctx, parsed.Query, -1, false); err != nil {
+ // Best effort only. Do not fail the mgiration if this fails.
+ _ = e.updateMigrationMessage(ctx, "failed ANALYZE shadow table", s.workflow)
+ } else {
+ _ = e.updateMigrationTimestamp(ctx, "shadow_analyzed_timestamp", s.workflow)
+ }
+ // This command will have blocked the table for writes, presumably only for a brief time. But this can cause
+ // vreplication to now lag. Thankfully we're gonna create the sentry table and waitForPos.
+ }
+ parsed := sqlparser.BuildParsedQuery(sqlCreateSentryTable, sentryTableName)
+ if _, err := preparationsConn.Conn.Exec(ctx, parsed.Query, 1, false); err != nil {
+ return vterrors.Wrapf(err, "failed creating sentry table")
+ }
+ e.updateMigrationStage(ctx, onlineDDL.UUID, "sentry table created: %s", sentryTableName)
+ return nil
+ }
+ if err := preparation(); err != nil {
+ return vterrors.Wrapf(err, "failed preparation")
+ }
postSentryPos, err := e.primaryPosition(ctx)
if err != nil {
- return err
+ return vterrors.Wrapf(err, "failed getting primary pos after sentry creation")
}
e.updateMigrationStage(ctx, onlineDDL.UUID, "waiting for post-sentry pos: %v", replication.EncodePosition(postSentryPos))
- if err := waitForPos(s, postSentryPos); err != nil {
- return err
+ // We have not yet locked anything, stopped anything, or done anything that otherwise
+ // impacts query serving so we wait for a multiple of the cutover threshold here, with
+ // that variable primarily serving to limit the max time we later spend waiting for
+ // a position again AFTER we've taken the locks and table access is blocked.
+ if err := waitForPos(s, postSentryPos, onlineDDL.CutOverThreshold*3); err != nil {
+ return vterrors.Wrapf(err, "failed waiting for pos after sentry creation")
}
e.updateMigrationStage(ctx, onlineDDL.UUID, "post-sentry pos reached")
}
lockConn, err := e.pool.Get(ctx, nil)
if err != nil {
- return err
+ return vterrors.Wrapf(err, "failed getting locking connection")
}
+ defer lockConn.Recycle()
// Set large enough `@@lock_wait_timeout` so that it does not interfere with the cut-over operation.
- // The code will ensure everything that needs to be terminated by `migrationCutOverThreshold` will be terminated.
- lockConnRestoreLockWaitTimeout, err := e.initConnectionLockWaitTimeout(ctx, lockConn.Conn, 5*migrationCutOverThreshold)
+ // The code will ensure everything that needs to be terminated by `onlineDDL.CutOverThreshold` will be terminated.
+ lockConnRestoreLockWaitTimeout, err := e.initConnectionLockWaitTimeout(ctx, lockConn.Conn, 5*onlineDDL.CutOverThreshold)
if err != nil {
- return err
+ return vterrors.Wrapf(err, "failed setting lock_wait_timeout on locking connection")
}
- defer lockConn.Recycle()
defer lockConnRestoreLockWaitTimeout()
defer lockConn.Conn.Exec(ctx, sqlUnlockTables, 1, false)
@@ -973,13 +1022,13 @@ func (e *Executor) cutOverVReplMigration(ctx context.Context, s *VReplStream, sh
renameWasSuccessful := false
renameConn, err := e.pool.Get(ctx, nil)
if err != nil {
- return err
+ return vterrors.Wrapf(err, "failed getting rename connection")
}
// Set large enough `@@lock_wait_timeout` so that it does not interfere with the cut-over operation.
- // The code will ensure everything that needs to be terminated by `migrationCutOverThreshold` will be terminated.
- renameConnRestoreLockWaitTimeout, err := e.initConnectionLockWaitTimeout(ctx, renameConn.Conn, 5*migrationCutOverThreshold*4)
+ // The code will ensure everything that needs to be terminated by `onlineDDL.CutOverThreshold` will be terminated.
+ renameConnRestoreLockWaitTimeout, err := e.initConnectionLockWaitTimeout(ctx, renameConn.Conn, 5*onlineDDL.CutOverThreshold*4)
if err != nil {
- return err
+ return vterrors.Wrapf(err, "failed setting lock_wait_timeout on rename connection")
}
defer renameConn.Recycle()
defer func() {
@@ -995,7 +1044,7 @@ func (e *Executor) cutOverVReplMigration(ctx context.Context, s *VReplStream, sh
// See if backend MySQL server supports 'rename_table_preserve_foreign_key' variable
preserveFKSupported, err := e.isPreserveForeignKeySupported(ctx)
if err != nil {
- return err
+ return vterrors.Wrapf(err, "failed checking for 'rename_table_preserve_foreign_key' support")
}
if preserveFKSupported {
// This code is only applicable when MySQL supports the 'rename_table_preserve_foreign_key' variable. This variable
@@ -1012,13 +1061,13 @@ func (e *Executor) cutOverVReplMigration(ctx context.Context, s *VReplStream, sh
// This function waits until it finds the RENAME TABLE... query running in MySQL's PROCESSLIST, or until timeout
// The function assumes that one of the renamed tables is locked, thus causing the RENAME to block. If nothing
// is locked, then the RENAME will be near-instantaneous and it's unlikely that the function will find it.
- renameWaitCtx, cancel := context.WithTimeout(ctx, migrationCutOverThreshold)
+ renameWaitCtx, cancel := context.WithTimeout(ctx, onlineDDL.CutOverThreshold)
defer cancel()
for {
renameProcessFound, err := e.doesConnectionInfoMatch(renameWaitCtx, renameConn.Conn.ID(), "rename")
if err != nil {
- return err
+ return vterrors.Wrapf(err, "searching for rename process")
}
if renameProcessFound {
return nil
@@ -1041,7 +1090,7 @@ func (e *Executor) cutOverVReplMigration(ctx context.Context, s *VReplStream, sh
// Preparation is complete. We proceed to cut-over.
toggleBuffering := func(bufferQueries bool) error {
log.Infof("toggling buffering: %t in migration %v", bufferQueries, onlineDDL.UUID)
- timeout := migrationCutOverThreshold + qrBufferExtraTimeout
+ timeout := onlineDDL.CutOverThreshold + qrBufferExtraTimeout
e.toggleBufferTableFunc(bufferingCtx, onlineDDL.Table, timeout, bufferQueries)
if !bufferQueries {
@@ -1052,7 +1101,7 @@ func (e *Executor) cutOverVReplMigration(ctx context.Context, s *VReplStream, sh
bufferingContextCancel()
// force re-read of tables
if err := tmClient.RefreshState(grpcCtx, tablet.Tablet); err != nil {
- return err
+ return vterrors.Wrapf(err, "refreshing table state")
}
}
log.Infof("toggled buffering: %t in migration %v", bufferQueries, onlineDDL.UUID)
@@ -1072,7 +1121,7 @@ func (e *Executor) cutOverVReplMigration(ctx context.Context, s *VReplStream, sh
err = toggleBuffering(true)
defer reenableWritesOnce()
if err != nil {
- return err
+ return vterrors.Wrapf(err, "failed enabling buffering")
}
// Give a fraction of a second for a scenario where a query is in
// query executor, it passed the ACLs and is _about to_ execute. This will be nicer to those queries:
@@ -1085,10 +1134,10 @@ func (e *Executor) cutOverVReplMigration(ctx context.Context, s *VReplStream, sh
// We should only proceed with forceful cut over if there is no pending atomic transaction for the table.
// This will help in keeping the atomicity guarantee of a prepared transaction.
if err := e.checkOnPreparedPool(ctx, onlineDDL.Table, 100*time.Millisecond); err != nil {
- return err
+ return vterrors.Wrapf(err, "checking prepared pool for table")
}
if err := e.killTableLockHoldersAndAccessors(ctx, onlineDDL.Table); err != nil {
- return err
+ return vterrors.Wrapf(err, "failed killing table lock holders and accessors")
}
}
@@ -1107,11 +1156,11 @@ func (e *Executor) cutOverVReplMigration(ctx context.Context, s *VReplStream, sh
// real production
e.updateMigrationStage(ctx, onlineDDL.UUID, "locking tables")
- lockCtx, cancel := context.WithTimeout(ctx, migrationCutOverThreshold)
+ lockCtx, cancel := context.WithTimeout(ctx, onlineDDL.CutOverThreshold)
defer cancel()
lockTableQuery := sqlparser.BuildParsedQuery(sqlLockTwoTablesWrite, sentryTableName, onlineDDL.Table)
if _, err := lockConn.Conn.Exec(lockCtx, lockTableQuery.Query, 1, false); err != nil {
- return err
+ return vterrors.Wrapf(err, "failed locking tables")
}
e.updateMigrationStage(ctx, onlineDDL.UUID, "renaming tables")
@@ -1123,7 +1172,7 @@ func (e *Executor) cutOverVReplMigration(ctx context.Context, s *VReplStream, sh
// the rename should block, because of the LOCK. Wait for it to show up.
e.updateMigrationStage(ctx, onlineDDL.UUID, "waiting for RENAME to block")
if err := waitForRenameProcess(); err != nil {
- return err
+ return vterrors.Wrapf(err, "failed waiting for rename process")
}
e.updateMigrationStage(ctx, onlineDDL.UUID, "RENAME found")
}
@@ -1131,7 +1180,7 @@ func (e *Executor) cutOverVReplMigration(ctx context.Context, s *VReplStream, sh
e.updateMigrationStage(ctx, onlineDDL.UUID, "reading post-lock pos")
postWritesPos, err := e.primaryPosition(ctx)
if err != nil {
- return err
+ return vterrors.Wrapf(err, "failed reading pos after locking")
}
// Right now: new queries are buffered, any existing query will have executed, and worst case scenario is
@@ -1143,19 +1192,19 @@ func (e *Executor) cutOverVReplMigration(ctx context.Context, s *VReplStream, sh
// Writes are now disabled on table. Read up-to-date vreplication info, specifically to get latest (and fixed) pos:
s, err = e.readVReplStream(ctx, s.workflow, false)
if err != nil {
- return err
+ return vterrors.Wrapf(err, "failed reading vreplication table after locking")
}
e.updateMigrationStage(ctx, onlineDDL.UUID, "waiting for post-lock pos: %v", replication.EncodePosition(postWritesPos))
- if err := waitForPos(s, postWritesPos); err != nil {
+ if err := waitForPos(s, postWritesPos, onlineDDL.CutOverThreshold); err != nil {
e.updateMigrationStage(ctx, onlineDDL.UUID, "timeout while waiting for post-lock pos: %v", err)
- return err
+ return vterrors.Wrapf(err, "failed waiting for pos after locking")
}
go log.Infof("cutOverVReplMigration %v: done waiting for position %v", s.workflow, replication.EncodePosition(postWritesPos))
// Stop vreplication
e.updateMigrationStage(ctx, onlineDDL.UUID, "stopping vreplication")
if _, err := e.vreplicationExec(ctx, tablet.Tablet, binlogplayer.StopVReplication(s.id, "stopped for online DDL cutover")); err != nil {
- return err
+ return vterrors.Wrapf(err, "failed stopping vreplication")
}
go log.Infof("cutOverVReplMigration %v: stopped vreplication", s.workflow)
@@ -1172,7 +1221,7 @@ func (e *Executor) cutOverVReplMigration(ctx context.Context, s *VReplStream, sh
} else {
e.updateMigrationStage(ctx, onlineDDL.UUID, "validating rename is still in place")
if err := waitForRenameProcess(); err != nil {
- return err
+ return vterrors.Wrapf(err, "failed waiting for rename process before dropping sentry table")
}
// Normal (non-testing) alter table
@@ -1180,26 +1229,26 @@ func (e *Executor) cutOverVReplMigration(ctx context.Context, s *VReplStream, sh
{
dropTableQuery := sqlparser.BuildParsedQuery(sqlDropTable, sentryTableName)
- lockCtx, cancel := context.WithTimeout(ctx, migrationCutOverThreshold)
+ lockCtx, cancel := context.WithTimeout(ctx, onlineDDL.CutOverThreshold)
defer cancel()
if _, err := lockConn.Conn.Exec(lockCtx, dropTableQuery.Query, 1, false); err != nil {
- return err
+ return vterrors.Wrapf(err, "failed dropping sentry table")
}
}
{
- lockCtx, cancel := context.WithTimeout(ctx, migrationCutOverThreshold)
+ lockCtx, cancel := context.WithTimeout(ctx, onlineDDL.CutOverThreshold)
defer cancel()
e.updateMigrationStage(ctx, onlineDDL.UUID, "unlocking tables")
if _, err := lockConn.Conn.Exec(lockCtx, sqlUnlockTables, 1, false); err != nil {
- return err
+ return vterrors.Wrapf(err, "failed unlocking tables")
}
}
{
- lockCtx, cancel := context.WithTimeout(ctx, migrationCutOverThreshold)
+ lockCtx, cancel := context.WithTimeout(ctx, onlineDDL.CutOverThreshold)
defer cancel()
e.updateMigrationStage(lockCtx, onlineDDL.UUID, "waiting for RENAME to complete")
if err := <-renameCompleteChan; err != nil {
- return err
+ return vterrors.Wrapf(err, "failed waiting for rename to complete")
}
renameWasSuccessful = true
}
@@ -1994,7 +2043,9 @@ func (e *Executor) readMigration(ctx context.Context, uuid string) (onlineDDL *s
WasReadyToComplete: row.AsInt64("was_ready_to_complete", 0),
TabletAlias: row["tablet"].ToString(),
MigrationContext: row["migration_context"].ToString(),
+ CutOverThreshold: time.Second * time.Duration(row.AsInt64("cutover_threshold_seconds", 0)),
}
+ onlineDDL.CutOverThreshold, _ = safeMigrationCutOverThreshold(onlineDDL.CutOverThreshold)
return onlineDDL, row, nil
}
@@ -3485,6 +3536,28 @@ func (e *Executor) readVReplStream(ctx context.Context, uuid string, okIfMissing
if err := prototext.Unmarshal([]byte(s.source), s.bls); err != nil {
return nil, err
}
+ {
+ // It's possible that an earlier error was overshadowed by a new non-error `message` values.
+ // Let's read _vt.vreplication_log to see whether there's any terminal errors in vreplication's history.
+ query, err := sqlparser.ParseAndBind(sqlReadVReplLogErrors,
+ sqltypes.Int32BindVariable(s.id),
+ sqltypes.StringBindVariable(vreplication.TerminalErrorIndicator),
+ )
+ if err != nil {
+ return nil, err
+ }
+ r, err := e.execQuery(ctx, query)
+ if err != nil {
+ return nil, err
+ }
+ // The query has LIMIT 1, ie returns at most one row
+ if row := r.Named().Row(); row != nil {
+ s.state = binlogdatapb.VReplicationWorkflowState_Error
+ if message := row.AsString("message", ""); message != "" {
+ s.message = "vreplication: " + message
+ }
+ }
+ }
return s, nil
}
@@ -3510,55 +3583,36 @@ func (e *Executor) isPreserveForeignKeySupported(ctx context.Context) (isSupport
// and is up to date with the binlogs.
func (e *Executor) isVReplMigrationReadyToCutOver(ctx context.Context, onlineDDL *schema.OnlineDDL, s *VReplStream) (isReady bool, err error) {
// Check all the cases where migration is still running:
- {
- // when ready to cut-over, pos must have some value
- if s.pos == "" {
- return false, nil
- }
+ // when ready to cut-over, pos must have some value
+ if s.pos == "" {
+ return false, nil
}
- {
- // Both time_updated and transaction_timestamp must be in close proximity to each
- // other and to the time now, otherwise that means we're lagging and it's not a good time
- // to cut-over
- durationDiff := func(t1, t2 time.Time) time.Duration {
- return t1.Sub(t2).Abs()
- }
- migrationCutOverThreshold := getMigrationCutOverThreshold(onlineDDL)
-
- timeNow := time.Now()
- timeUpdated := time.Unix(s.timeUpdated, 0)
- if durationDiff(timeNow, timeUpdated) > migrationCutOverThreshold {
- return false, nil
- }
- // Let's look at transaction timestamp. This gets written by any ongoing
- // writes on the server (whether on this table or any other table)
- transactionTimestamp := time.Unix(s.transactionTimestamp, 0)
- if durationDiff(timeNow, transactionTimestamp) > migrationCutOverThreshold {
- return false, nil
- }
+ // Both time_updated and transaction_timestamp must be in close proximity to each
+ // other and to the time now, otherwise that means we're lagging and it's not a good time
+ // to cut-over
+ if s.Lag() > onlineDDL.CutOverThreshold {
+ return false, nil
}
- {
- // copy_state must have no entries for this vreplication id: if entries are
- // present that means copy is still in progress
- query, err := sqlparser.ParseAndBind(sqlReadCountCopyState,
- sqltypes.Int32BindVariable(s.id),
- )
- if err != nil {
- return false, err
- }
- r, err := e.execQuery(ctx, query)
- if err != nil {
- return false, err
- }
- csRow := r.Named().Row()
- if csRow == nil {
- return false, err
- }
- count := csRow.AsInt64("cnt", 0)
- if count > 0 {
- // Still copying
- return false, nil
- }
+ // copy_state must have no entries for this vreplication id: if entries are
+ // present that means copy is still in progress
+ query, err := sqlparser.ParseAndBind(sqlReadCountCopyState,
+ sqltypes.Int32BindVariable(s.id),
+ )
+ if err != nil {
+ return false, err
+ }
+ r, err := e.execQuery(ctx, query)
+ if err != nil {
+ return false, err
+ }
+ csRow := r.Named().Row()
+ if csRow == nil {
+ return false, err
+ }
+ count := csRow.AsInt64("cnt", 0)
+ if count > 0 {
+ // Still copying
+ return false, nil
}
return true, nil
@@ -3705,6 +3759,7 @@ func (e *Executor) reviewRunningMigrations(ctx context.Context) (countRunnning i
}
_ = e.updateRowsCopied(ctx, uuid, s.rowsCopied)
_ = e.updateMigrationProgressByRowsCopied(ctx, uuid, s.rowsCopied)
+ _ = e.updateMigrationVreplicationLagSeconds(ctx, uuid, int64(s.Lag().Seconds()))
_ = e.updateMigrationETASecondsByProgress(ctx, uuid)
if s.timeThrottled != 0 {
// Avoid creating a 0000-00-00 00:00:00 timestamp
@@ -3761,8 +3816,10 @@ func (e *Executor) reviewRunningMigrations(ctx context.Context) (countRunnning i
if err := e.cutOverVReplMigration(ctx, s, shouldForceCutOver); err != nil {
_ = e.updateMigrationMessage(ctx, uuid, err.Error())
log.Errorf("cutOverVReplMigration failed: err=%v", err)
- if merr, ok := err.(*sqlerror.SQLError); ok {
- switch merr.Num {
+
+ if sqlErr, isSQLErr := sqlerror.NewSQLErrorFromError(err).(*sqlerror.SQLError); isSQLErr && sqlErr != nil {
+ // let's see if this error is actually acceptable
+ switch sqlErr.Num {
case sqlerror.ERTooLongIdent:
go e.CancelMigration(ctx, uuid, err.Error(), false)
}
@@ -4461,6 +4518,18 @@ func (e *Executor) updateRowsCopied(ctx context.Context, uuid string, rowsCopied
return err
}
+func (e *Executor) updateMigrationVreplicationLagSeconds(ctx context.Context, uuid string, vreplicationLagSeconds int64) error {
+ query, err := sqlparser.ParseAndBind(sqlUpdateMigrationVreplicationLagSeconds,
+ sqltypes.Int64BindVariable(vreplicationLagSeconds),
+ sqltypes.StringBindVariable(uuid),
+ )
+ if err != nil {
+ return err
+ }
+ _, err = e.execQuery(ctx, query)
+ return err
+}
+
func (e *Executor) updateVitessLivenessIndicator(ctx context.Context, uuid string, livenessIndicator int64) error {
query, err := sqlparser.ParseAndBind(sqlUpdateMigrationVitessLivenessIndicator,
sqltypes.Int64BindVariable(livenessIndicator),
@@ -4683,6 +4752,42 @@ func (e *Executor) ForceCutOverPendingMigrations(ctx context.Context) (result *s
return result, nil
}
+func (e *Executor) SetMigrationCutOverThreshold(ctx context.Context, uuid string, thresholdString string) (result *sqltypes.Result, err error) {
+ if atomic.LoadInt64(&e.isOpen) == 0 {
+ return nil, vterrors.New(vtrpcpb.Code_FAILED_PRECONDITION, schema.ErrOnlineDDLDisabled.Error())
+ }
+ if !schema.IsOnlineDDLUUID(uuid) {
+ return nil, vterrors.Errorf(vtrpcpb.Code_UNKNOWN, "Not a valid migration ID in FORCE_CUTOVER: %s", uuid)
+ }
+ threshold, err := time.ParseDuration(thresholdString)
+ if err != nil {
+ return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid cut-over threshold value: %s. Try '5s' to '30s'", thresholdString)
+ }
+
+ log.Infof("SetMigrationCutOverThreshold: request to set cut-over threshold to %v on migration %s", threshold, uuid)
+ e.migrationMutex.Lock()
+ defer e.migrationMutex.Unlock()
+
+ threshold, err = safeMigrationCutOverThreshold(threshold)
+ if err != nil {
+ return nil, err
+ }
+ query, err := sqlparser.ParseAndBind(sqlUpdateCutOverThresholdSeconds,
+ sqltypes.Int64BindVariable(int64(threshold.Seconds())),
+ sqltypes.StringBindVariable(uuid),
+ )
+ if err != nil {
+ return nil, err
+ }
+ rs, err := e.execQuery(ctx, query)
+ if err != nil {
+ return nil, err
+ }
+ e.triggerNextCheckInterval()
+ log.Infof("SetMigrationCutOverThreshold: migration %s cut-over threshold was set to", uuid, threshold)
+ return rs, nil
+}
+
// CompleteMigration clears the postpone_completion flag for a given migration, assuming it was set in the first place
func (e *Executor) CompleteMigration(ctx context.Context, uuid string) (result *sqltypes.Result, err error) {
if atomic.LoadInt64(&e.isOpen) == 0 {
@@ -4837,7 +4942,7 @@ func (e *Executor) submitCallbackIfNonConflicting(
) (
result *sqltypes.Result, err error,
) {
- if !onlineDDL.StrategySetting().IsSingleton() && !onlineDDL.StrategySetting().IsSingletonContext() {
+ if !onlineDDL.StrategySetting().IsSingleton() && !onlineDDL.StrategySetting().IsSingletonContext() && !onlineDDL.StrategySetting().IsSingletonTable() {
// not a singleton. No conflict
return callback()
}
@@ -4883,6 +4988,15 @@ func (e *Executor) submitCallbackIfNonConflicting(
}
// no conflict? continue looking for other pending migrations
}
+ case onlineDDL.StrategySetting().IsSingletonTable():
+ // We will reject this migration if there's any pending migration for the same table
+ for _, row := range rows {
+ pendingTableName := row["mysql_table"].ToString()
+ if onlineDDL.Table == pendingTableName {
+ pendingUUID := row["migration_uuid"].ToString()
+ return vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "singleton-table migration rejected: found pending migration: %s for the same table: %s", pendingUUID, onlineDDL.Table)
+ }
+ }
}
return nil
}()
@@ -4959,7 +5073,14 @@ func (e *Executor) SubmitMigration(
// Explicit retention indicated by `--retain-artifact` DDL strategy flag for this migration. Override!
retainArtifactsSeconds = int64((retainArtifacts).Seconds())
}
-
+ cutoverThreshold, err := onlineDDL.StrategySetting().CutOverThreshold()
+ if err != nil {
+ return nil, vterrors.Wrapf(err, "parsing cut-over threshold in migration %v", onlineDDL.UUID)
+ }
+ cutoverThreshold, err = safeMigrationCutOverThreshold(cutoverThreshold)
+ if err != nil {
+ return nil, vterrors.Wrapf(err, "validating cut-over threshold in migration %v", onlineDDL.UUID)
+ }
_, allowConcurrentMigration := e.allowConcurrentMigration(onlineDDL)
submitQuery, err := sqlparser.ParseAndBind(sqlInsertMigration,
sqltypes.StringBindVariable(onlineDDL.UUID),
@@ -4975,6 +5096,7 @@ func (e *Executor) SubmitMigration(
sqltypes.StringBindVariable(string(schema.OnlineDDLStatusQueued)),
sqltypes.StringBindVariable(e.TabletAliasString()),
sqltypes.Int64BindVariable(retainArtifactsSeconds),
+ sqltypes.Int64BindVariable(int64(cutoverThreshold.Seconds())),
sqltypes.BoolBindVariable(onlineDDL.StrategySetting().IsPostponeLaunch()),
sqltypes.BoolBindVariable(onlineDDL.StrategySetting().IsPostponeCompletion()),
sqltypes.BoolBindVariable(allowConcurrentMigration),
@@ -5137,6 +5259,7 @@ func (e *Executor) OnSchemaMigrationStatus(ctx context.Context,
return e.onSchemaMigrationStatus(ctx, uuidParam, status, dryRun, progressPct, etaSeconds, rowsCopied, hint)
}
+// checkOnPreparedPool checks if there are any cross-shard prepared transactions on the given table
func (e *Executor) checkOnPreparedPool(ctx context.Context, table string, waitTime time.Duration) error {
if e.isPreparedPoolEmpty(table) {
return nil
diff --git a/go/vt/vttablet/onlineddl/executor_test.go b/go/vt/vttablet/onlineddl/executor_test.go
index 2533f3a4b48..105da7fc1e3 100644
--- a/go/vt/vttablet/onlineddl/executor_test.go
+++ b/go/vt/vttablet/onlineddl/executor_test.go
@@ -25,6 +25,7 @@ import (
"time"
"github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
)
func TestShouldCutOverAccordingToBackoff(t *testing.T) {
@@ -164,3 +165,59 @@ func TestShouldCutOverAccordingToBackoff(t *testing.T) {
})
}
}
+
+func TestSafeMigrationCutOverThreshold(t *testing.T) {
+ require.NotZero(t, defaultCutOverThreshold)
+ require.GreaterOrEqual(t, defaultCutOverThreshold, minCutOverThreshold)
+ require.LessOrEqual(t, defaultCutOverThreshold, maxCutOverThreshold)
+
+ tcases := []struct {
+ threshold time.Duration
+ expect time.Duration
+ isErr bool
+ }{
+ {
+ threshold: 0,
+ expect: defaultCutOverThreshold,
+ },
+ {
+ threshold: 2 * time.Second,
+ expect: defaultCutOverThreshold,
+ isErr: true,
+ },
+ {
+ threshold: 75 * time.Second,
+ expect: defaultCutOverThreshold,
+ isErr: true,
+ },
+ {
+ threshold: defaultCutOverThreshold,
+ expect: defaultCutOverThreshold,
+ },
+ {
+ threshold: 5 * time.Second,
+ expect: 5 * time.Second,
+ },
+ {
+ threshold: 15 * time.Second,
+ expect: 15 * time.Second,
+ },
+ {
+ threshold: 25 * time.Second,
+ expect: 25 * time.Second,
+ },
+ }
+ for _, tcase := range tcases {
+ t.Run(tcase.threshold.String(), func(t *testing.T) {
+ threshold, err := safeMigrationCutOverThreshold(tcase.threshold)
+ if tcase.isErr {
+ assert.Error(t, err)
+ require.Equal(t, tcase.expect, defaultCutOverThreshold)
+ // And keep testing, because we then also expect the threshold to be the default
+ } else {
+ assert.NoError(t, err)
+ }
+ assert.Equal(t, tcase.expect, threshold)
+ })
+ }
+}
diff --git a/go/vt/vttablet/onlineddl/schema.go b/go/vt/vttablet/onlineddl/schema.go
index 9023639fd00..943a3b1df07 100644
--- a/go/vt/vttablet/onlineddl/schema.go
+++ b/go/vt/vttablet/onlineddl/schema.go
@@ -32,13 +32,14 @@ const (
migration_status,
tablet,
retain_artifacts_seconds,
+ cutover_threshold_seconds,
postpone_launch,
postpone_completion,
allow_concurrent,
reverted_uuid,
is_view
) VALUES (
- %a, %a, %a, %a, %a, %a, %a, %a, %a, NOW(6), %a, %a, %a, %a, %a, %a, %a, %a, %a
+ %a, %a, %a, %a, %a, %a, %a, %a, %a, NOW(6), %a, %a, %a, %a, %a, %a, %a, %a, %a, %a
)`
sqlSelectQueuedMigrations = `SELECT
@@ -86,6 +87,11 @@ const (
WHERE
migration_uuid=%a
`
+ sqlUpdateMigrationVreplicationLagSeconds = `UPDATE _vt.schema_migrations
+ SET vreplication_lag_seconds=%a
+ WHERE
+ migration_uuid=%a
+ `
sqlUpdateMigrationIsView = `UPDATE _vt.schema_migrations
SET is_view=%a
WHERE
@@ -181,6 +187,11 @@ const (
WHERE
migration_uuid=%a
`
+ sqlUpdateCutOverThresholdSeconds = `UPDATE _vt.schema_migrations
+ SET cutover_threshold_seconds=%a
+ WHERE
+ migration_uuid=%a
+ `
sqlUpdateLaunchMigration = `UPDATE _vt.schema_migrations
SET postpone_launch=0
WHERE
@@ -270,6 +281,7 @@ const (
cancelled_timestamp=NULL,
completed_timestamp=NULL,
last_cutover_attempt_timestamp=NULL,
+ shadow_analyzed_timestamp=NULL,
cleanup_timestamp=NULL
WHERE
migration_status IN ('failed', 'cancelled')
@@ -291,6 +303,7 @@ const (
cancelled_timestamp=NULL,
completed_timestamp=NULL,
last_cutover_attempt_timestamp=NULL,
+ shadow_analyzed_timestamp=NULL,
cleanup_timestamp=NULL
WHERE
migration_status IN ('failed', 'cancelled')
@@ -427,6 +440,7 @@ const (
removed_unique_keys,
migration_context,
retain_artifacts_seconds,
+ cutover_threshold_seconds,
is_view,
ready_to_complete,
ready_to_complete_timestamp is not null as was_ready_to_complete,
@@ -441,6 +455,7 @@ const (
postpone_launch,
postpone_completion,
is_immediate_operation,
+ shadow_analyzed_timestamp,
reviewed_timestamp
FROM _vt.schema_migrations
WHERE
@@ -515,6 +530,20 @@ const (
WHERE
workflow=%a
`
+ sqlReadVReplLogErrors = `SELECT
+ state,
+ message
+ FROM _vt.vreplication_log
+ WHERE
+ vrepl_id=%a
+ AND (
+ state='Error'
+ OR locate (concat(%a, ':'), message) = 1
+ )
+ ORDER BY
+ id DESC
+ LIMIT 1
+ `
sqlReadCountCopyState = `SELECT
count(*) as cnt
FROM
diff --git a/go/vt/vttablet/onlineddl/vrepl.go b/go/vt/vttablet/onlineddl/vrepl.go
index 26eb614e95a..2761c27c801 100644
--- a/go/vt/vttablet/onlineddl/vrepl.go
+++ b/go/vt/vttablet/onlineddl/vrepl.go
@@ -30,6 +30,7 @@ import (
"net/url"
"strconv"
"strings"
+ "time"
"vitess.io/vitess/go/mysql/collations"
"vitess.io/vitess/go/mysql/collations/charset"
@@ -96,6 +97,19 @@ func (v *VReplStream) hasError() (isTerminal bool, vreplError error) {
return false, nil
}
+// Lag returns the vreplication lag, as determined by the higher of the transaction timestamp and the time updated.
+func (s *VReplStream) Lag() time.Duration {
+ durationDiff := func(t1, t2 time.Time) time.Duration {
+ return t1.Sub(t2).Abs()
+ }
+ timeNow := time.Now()
+ timeUpdated := time.Unix(s.timeUpdated, 0)
+ // Let's look at transaction timestamp. This gets written by any ongoing
+ // writes on the server (whether on this table or any other table)
+ transactionTimestamp := time.Unix(s.transactionTimestamp, 0)
+ return max(durationDiff(timeNow, timeUpdated), durationDiff(timeNow, transactionTimestamp))
+}
+
// VRepl is an online DDL helper for VReplication based migrations (ddl_strategy="online")
type VRepl struct {
workflow string
diff --git a/go/vt/vttablet/queryservice/queryservice.go b/go/vt/vttablet/queryservice/queryservice.go
index 1e48c9b7b1d..d6972bfb6a3 100644
--- a/go/vt/vttablet/queryservice/queryservice.go
+++ b/go/vt/vttablet/queryservice/queryservice.go
@@ -63,7 +63,7 @@ type QueryService interface {
// StartCommit atomically commits the transaction along with the
// decision to commit the associated 2pc transaction.
- StartCommit(ctx context.Context, target *querypb.Target, transactionID int64, dtid string) (err error)
+ StartCommit(ctx context.Context, target *querypb.Target, transactionID int64, dtid string) (state querypb.StartCommitState, err error)
// SetRollback transitions the 2pc transaction to the Rollback state.
// If a transaction id is provided, that transaction is also rolled back.
diff --git a/go/vt/vttablet/queryservice/wrapped.go b/go/vt/vttablet/queryservice/wrapped.go
index 2bc8346dac2..c72a472a5cb 100644
--- a/go/vt/vttablet/queryservice/wrapped.go
+++ b/go/vt/vttablet/queryservice/wrapped.go
@@ -146,11 +146,13 @@ func (ws *wrappedService) CreateTransaction(ctx context.Context, target *querypb
})
}
-func (ws *wrappedService) StartCommit(ctx context.Context, target *querypb.Target, transactionID int64, dtid string) (err error) {
- return ws.wrapper(ctx, target, ws.impl, "StartCommit", true, func(ctx context.Context, target *querypb.Target, conn QueryService) (bool, error) {
- innerErr := conn.StartCommit(ctx, target, transactionID, dtid)
+func (ws *wrappedService) StartCommit(ctx context.Context, target *querypb.Target, transactionID int64, dtid string) (state querypb.StartCommitState, err error) {
+ err = ws.wrapper(ctx, target, ws.impl, "StartCommit", true, func(ctx context.Context, target *querypb.Target, conn QueryService) (bool, error) {
+ var innerErr error
+ state, innerErr = conn.StartCommit(ctx, target, transactionID, dtid)
return canRetry(ctx, innerErr), innerErr
})
+ return state, err
}
func (ws *wrappedService) SetRollback(ctx context.Context, target *querypb.Target, dtid string, transactionID int64) (err error) {
diff --git a/go/vt/vttablet/sandboxconn/sandboxconn.go b/go/vt/vttablet/sandboxconn/sandboxconn.go
index ae956e5e249..a34baef1238 100644
--- a/go/vt/vttablet/sandboxconn/sandboxconn.go
+++ b/go/vt/vttablet/sandboxconn/sandboxconn.go
@@ -49,13 +49,14 @@ type SandboxConn struct {
// These errors are triggered only for specific functions.
// For now these are just for the 2PC functions.
- MustFailPrepare int
- MustFailCommitPrepared int
- MustFailRollbackPrepared int
- MustFailCreateTransaction int
- MustFailStartCommit int
- MustFailSetRollback int
- MustFailConcludeTransaction int
+ MustFailPrepare int
+ MustFailCommitPrepared int
+ MustFailRollbackPrepared int
+ MustFailCreateTransaction int
+ MustFailStartCommit int
+ MustFailStartCommitUncertain int
+ MustFailSetRollback int
+ MustFailConcludeTransaction int
// MustFailExecute is keyed by the statement type and stores the number
// of times to fail when it sees that statement type.
// Once, exhausted it will start returning non-error response.
@@ -157,6 +158,27 @@ func NewSandboxConn(t *topodatapb.Tablet) *SandboxConn {
}
}
+// ResetCounter resets the counters in the sandboxconn.
+func (sbc *SandboxConn) ResetCounter() {
+ sbc.ExecCount.Store(0)
+ sbc.BeginCount.Store(0)
+ sbc.CommitCount.Store(0)
+ sbc.RollbackCount.Store(0)
+ sbc.AsTransactionCount.Store(0)
+ sbc.PrepareCount.Store(0)
+ sbc.CommitPreparedCount.Store(0)
+ sbc.RollbackPreparedCount.Store(0)
+ sbc.CreateTransactionCount.Store(0)
+ sbc.StartCommitCount.Store(0)
+ sbc.SetRollbackCount.Store(0)
+ sbc.ConcludeTransactionCount.Store(0)
+ sbc.ReadTransactionCount.Store(0)
+ sbc.UnresolvedTransactionsCount.Store(0)
+ sbc.ReserveCount.Store(0)
+ sbc.ReleaseCount.Store(0)
+ sbc.GetSchemaCount.Store(0)
+}
+
// RequireQueriesLocking sets the sandboxconn to require locking the access of Queries field.
func (sbc *SandboxConn) RequireQueriesLocking() {
sbc.queriesRequireLocking = true
@@ -172,6 +194,28 @@ func (sbc *SandboxConn) GetQueries() []*querypb.BoundQuery {
return sbc.Queries
}
+// GetFinalQueries gets the final queries as strings from sandboxconn.
+func (sbc *SandboxConn) GetFinalQueries() ([]string, error) {
+ if sbc.queriesRequireLocking {
+ sbc.queriesMu.Lock()
+ defer sbc.queriesMu.Unlock()
+ }
+ var queries []string
+ for _, q := range sbc.Queries {
+ stmt, err := sbc.parser.Parse(q.Sql)
+ if err != nil {
+ return nil, err
+ }
+ pq := sqlparser.NewParsedQuery(stmt)
+ query, err := pq.GenerateQuery(q.BindVariables, nil)
+ if err != nil {
+ return nil, err
+ }
+ queries = append(queries, query)
+ }
+ return queries, nil
+}
+
// ClearQueries clears the Queries in sandboxconn.
func (sbc *SandboxConn) ClearQueries() {
if sbc.queriesRequireLocking {
@@ -382,14 +426,22 @@ func (sbc *SandboxConn) CreateTransaction(ctx context.Context, target *querypb.T
// StartCommit atomically commits the transaction along with the
// decision to commit the associated 2pc transaction.
-func (sbc *SandboxConn) StartCommit(ctx context.Context, target *querypb.Target, transactionID int64, dtid string) (err error) {
+func (sbc *SandboxConn) StartCommit(context.Context, *querypb.Target, int64, string) (state querypb.StartCommitState, err error) {
sbc.panicIfNeeded()
sbc.StartCommitCount.Add(1)
if sbc.MustFailStartCommit > 0 {
sbc.MustFailStartCommit--
- return vterrors.New(vtrpcpb.Code_FAILED_PRECONDITION, "error: err")
+ return querypb.StartCommitState_Fail, vterrors.New(vtrpcpb.Code_FAILED_PRECONDITION, "error: err")
}
- return sbc.getError()
+ if sbc.MustFailStartCommitUncertain > 0 {
+ sbc.MustFailStartCommitUncertain--
+ return querypb.StartCommitState_Unknown, vterrors.New(vtrpcpb.Code_FAILED_PRECONDITION, "uncertain error")
+ }
+ err = sbc.getError()
+ if err != nil {
+ return querypb.StartCommitState_Unknown, err
+ }
+ return querypb.StartCommitState_Success, nil
}
// SetRollback transitions the 2pc transaction to the Rollback state.
diff --git a/go/vt/vttablet/tabletconntest/fakequeryservice.go b/go/vt/vttablet/tabletconntest/fakequeryservice.go
index ac08e095f4d..2d62b017433 100644
--- a/go/vt/vttablet/tabletconntest/fakequeryservice.go
+++ b/go/vt/vttablet/tabletconntest/fakequeryservice.go
@@ -286,9 +286,9 @@ func (f *FakeQueryService) CreateTransaction(ctx context.Context, target *queryp
}
// StartCommit is part of the queryservice.QueryService interface
-func (f *FakeQueryService) StartCommit(ctx context.Context, target *querypb.Target, transactionID int64, dtid string) (err error) {
+func (f *FakeQueryService) StartCommit(ctx context.Context, target *querypb.Target, transactionID int64, dtid string) (state querypb.StartCommitState, err error) {
if f.HasError {
- return f.TabletError
+ return querypb.StartCommitState_Fail, f.TabletError
}
if f.Panics {
panic(fmt.Errorf("test-triggered panic"))
@@ -300,7 +300,7 @@ func (f *FakeQueryService) StartCommit(ctx context.Context, target *querypb.Targ
if dtid != Dtid {
f.t.Errorf("StartCommit: invalid dtid: got %s expected %s", dtid, Dtid)
}
- return nil
+ return querypb.StartCommitState_Success, nil
}
// SetRollback is part of the queryservice.QueryService interface
diff --git a/go/vt/vttablet/tabletconntest/tabletconntest.go b/go/vt/vttablet/tabletconntest/tabletconntest.go
index 0674de3f663..416d4de9d00 100644
--- a/go/vt/vttablet/tabletconntest/tabletconntest.go
+++ b/go/vt/vttablet/tabletconntest/tabletconntest.go
@@ -294,26 +294,31 @@ func testStartCommit(t *testing.T, conn queryservice.QueryService, f *FakeQueryS
t.Log("testStartCommit")
ctx := context.Background()
ctx = callerid.NewContext(ctx, TestCallerID, TestVTGateCallerID)
- err := conn.StartCommit(ctx, TestTarget, commitTransactionID, Dtid)
- if err != nil {
- t.Fatalf("StartCommit failed: %v", err)
- }
+ state, err := conn.StartCommit(ctx, TestTarget, commitTransactionID, Dtid)
+ assert.Equal(t, querypb.StartCommitState_Success, state, "Unexpected state from StartCommit")
+ assert.NoError(t, err, "StartCommit failed")
}
func testStartCommitError(t *testing.T, conn queryservice.QueryService, f *FakeQueryService) {
t.Log("testStartCommitError")
f.HasError = true
- testErrorHelper(t, f, "StartCommit", func(ctx context.Context) error {
- return conn.StartCommit(ctx, TestTarget, commitTransactionID, Dtid)
+ var state querypb.StartCommitState
+ testErrorHelper(t, f, "StartCommit", func(ctx context.Context) (err error) {
+ state, err = conn.StartCommit(ctx, TestTarget, commitTransactionID, Dtid)
+ return err
})
f.HasError = false
+ assert.Equal(t, querypb.StartCommitState_Unknown, state, "Unexpected state from StartCommit")
}
func testStartCommitPanics(t *testing.T, conn queryservice.QueryService, f *FakeQueryService) {
t.Log("testStartCommitPanics")
- testPanicHelper(t, f, "StartCommit", func(ctx context.Context) error {
- return conn.StartCommit(ctx, TestTarget, commitTransactionID, Dtid)
+ var state querypb.StartCommitState
+ testPanicHelper(t, f, "StartCommit", func(ctx context.Context) (err error) {
+ state, err = conn.StartCommit(ctx, TestTarget, commitTransactionID, Dtid)
+ return err
})
+ assert.Equal(t, querypb.StartCommitState_Unknown, state, "Unexpected state from StartCommit")
}
func testSetRollback(t *testing.T, conn queryservice.QueryService, f *FakeQueryService) {
diff --git a/go/vt/vttablet/tabletmanager/framework_test.go b/go/vt/vttablet/tabletmanager/framework_test.go
index 872b96585f7..35aa7a08b46 100644
--- a/go/vt/vttablet/tabletmanager/framework_test.go
+++ b/go/vt/vttablet/tabletmanager/framework_test.go
@@ -27,8 +27,6 @@ import (
"github.com/stretchr/testify/require"
- vttablet "vitess.io/vitess/go/vt/vttablet/common"
-
"vitess.io/vitess/go/mysql/fakesqldb"
"vitess.io/vitess/go/mysql/replication"
"vitess.io/vitess/go/sqltypes"
@@ -39,6 +37,8 @@ import (
"vitess.io/vitess/go/vt/mysqlctl/tmutils"
"vitess.io/vitess/go/vt/topo"
"vitess.io/vitess/go/vt/topo/memorytopo"
+ "vitess.io/vitess/go/vt/vtenv"
+ vttablet "vitess.io/vitess/go/vt/vttablet/common"
"vitess.io/vitess/go/vt/vttablet/queryservice"
"vitess.io/vitess/go/vt/vttablet/tabletconn"
"vitess.io/vitess/go/vt/vttablet/tabletconntest"
@@ -48,12 +48,14 @@ import (
binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata"
querypb "vitess.io/vitess/go/vt/proto/query"
+ replicationdatapb "vitess.io/vitess/go/vt/proto/replicationdata"
tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata"
topodatapb "vitess.io/vitess/go/vt/proto/topodata"
)
const (
gtidFlavor = "MySQL56"
+ serverUUID = "16b1039f-22b6-11ed-b765-0a43f95f28a3"
gtidPosition = "16b1039f-22b6-11ed-b765-0a43f95f28a3:1-220"
)
@@ -79,6 +81,7 @@ type testEnv struct {
ctx context.Context
ts *topo.Server
cells []string
+ db *fakesqldb.DB
mysqld *mysqlctl.FakeMysqlDaemon
tmc *fakeTMClient
dbName string
@@ -115,9 +118,13 @@ func newTestEnv(t *testing.T, ctx context.Context, sourceKeyspace string, source
})
tmclienttest.SetProtocol(fmt.Sprintf("go.vt.vttablet.tabletmanager.framework_test_%s", t.Name()), tenv.protoName)
- tenv.mysqld = mysqlctl.NewFakeMysqlDaemon(fakesqldb.New(t))
- var err error
- tenv.mysqld.CurrentPrimaryPosition, err = replication.ParsePosition(gtidFlavor, gtidPosition)
+ tenv.db = fakesqldb.New(t)
+ tenv.mysqld = mysqlctl.NewFakeMysqlDaemon(tenv.db)
+ curPosition, err := replication.ParsePosition(gtidFlavor, gtidPosition)
+ require.NoError(t, err)
+ tenv.mysqld.SetPrimaryPositionLocked(curPosition)
+
+ err = tenv.ts.RebuildSrvVSchema(ctx, nil)
require.NoError(t, err)
return tenv
@@ -182,8 +189,11 @@ func (tenv *testEnv) addTablet(t *testing.T, id int, keyspace, shard string) *fa
DBConfigs: &dbconfigs.DBConfigs{
DBName: tenv.dbName,
},
+ Env: vtenv.NewTestEnv(),
+ _waitForGrantsComplete: make(chan struct{}),
+ MysqlDaemon: tenv.mysqld,
}
-
+ close(tenv.tmc.tablets[id].tm._waitForGrantsComplete) // So that we don't wait for the grants
return tenv.tmc.tablets[id]
}
@@ -244,8 +254,8 @@ func (ftc *fakeTabletConn) CreateTransaction(ctx context.Context, target *queryp
}
// fakeTabletConn implements the QueryService interface.
-func (ftc *fakeTabletConn) StartCommit(ctx context.Context, target *querypb.Target, transactionID int64, dtid string) (err error) {
- return nil
+func (ftc *fakeTabletConn) StartCommit(ctx context.Context, target *querypb.Target, transactionID int64, dtid string) (state querypb.StartCommitState, err error) {
+ return querypb.StartCommitState_Unknown, nil
}
// fakeTabletConn implements the QueryService interface.
@@ -420,8 +430,6 @@ func (tmc *fakeTMClient) ApplySchema(ctx context.Context, tablet *topodatapb.Tab
}
func (tmc *fakeTMClient) schemaRequested(uid int) {
- tmc.mu.Lock()
- defer tmc.mu.Unlock()
key := strconv.Itoa(int(uid))
n, ok := tmc.getSchemaCounts[key]
if !ok {
@@ -439,6 +447,8 @@ func (tmc *fakeTMClient) getSchemaRequestCount(uid int) int {
}
func (tmc *fakeTMClient) GetSchema(ctx context.Context, tablet *topodatapb.Tablet, request *tabletmanagerdatapb.GetSchemaRequest) (*tabletmanagerdatapb.SchemaDefinition, error) {
+ tmc.mu.Lock()
+ defer tmc.mu.Unlock()
tmc.schemaRequested(int(tablet.Alias.Uid))
// Return the schema for the tablet if it exists.
if schema, ok := tmc.tabletSchemas[int(tablet.Alias.Uid)]; ok {
@@ -466,6 +476,8 @@ func (tmc *fakeTMClient) ExecuteFetchAsDba(ctx context.Context, tablet *topodata
// and their results. You can specify exact strings or strings prefixed with
// a '/', in which case they will be treated as a valid regexp.
func (tmc *fakeTMClient) setVReplicationExecResults(tablet *topodatapb.Tablet, query string, result *sqltypes.Result) {
+ tmc.mu.Lock()
+ defer tmc.mu.Unlock()
queries, ok := tmc.vreQueries[int(tablet.Alias.Uid)]
if !ok {
queries = make(map[string]*querypb.QueryResult)
@@ -475,13 +487,15 @@ func (tmc *fakeTMClient) setVReplicationExecResults(tablet *topodatapb.Tablet, q
}
func (tmc *fakeTMClient) VReplicationExec(ctx context.Context, tablet *topodatapb.Tablet, query string) (*querypb.QueryResult, error) {
+ tmc.mu.Lock()
+ defer tmc.mu.Unlock()
if result, ok := tmc.vreQueries[int(tablet.Alias.Uid)][query]; ok {
return result, nil
}
for qry, res := range tmc.vreQueries[int(tablet.Alias.Uid)] {
if strings.HasPrefix(qry, "/") {
- re := regexp.MustCompile(qry)
- if re.MatchString(qry) {
+ re := regexp.MustCompile(qry[1:])
+ if re.MatchString(query) {
return res, nil
}
}
@@ -493,14 +507,23 @@ func (tmc *fakeTMClient) PrimaryPosition(ctx context.Context, tablet *topodatapb
return fmt.Sprintf("%s/%s", gtidFlavor, gtidPosition), nil
}
+func (tmc *fakeTMClient) PrimaryStatus(ctx context.Context, tablet *topodatapb.Tablet) (*replicationdatapb.PrimaryStatus, error) {
+ pos, _ := tmc.PrimaryPosition(ctx, tablet)
+ return &replicationdatapb.PrimaryStatus{
+ Position: pos,
+ FilePosition: pos,
+ ServerUuid: serverUUID,
+ }, nil
+}
+
func (tmc *fakeTMClient) VReplicationWaitForPos(ctx context.Context, tablet *topodatapb.Tablet, id int32, pos string) error {
return nil
}
func (tmc *fakeTMClient) ExecuteFetchAsAllPrivs(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.ExecuteFetchAsAllPrivsRequest) (*querypb.QueryResult, error) {
- return &querypb.QueryResult{
- RowsAffected: 1,
- }, nil
+ tmc.mu.Lock()
+ defer tmc.mu.Unlock()
+ return tmc.tablets[int(tablet.Alias.Uid)].tm.ExecuteFetchAsAllPrivs(ctx, req)
}
func (tmc *fakeTMClient) VDiff(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.VDiffRequest) (*tabletmanagerdatapb.VDiffResponse, error) {
@@ -514,9 +537,17 @@ func (tmc *fakeTMClient) VDiff(ctx context.Context, tablet *topodatapb.Tablet, r
}
func (tmc *fakeTMClient) CreateVReplicationWorkflow(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.CreateVReplicationWorkflowRequest) (*tabletmanagerdatapb.CreateVReplicationWorkflowResponse, error) {
+ tmc.mu.Lock()
+ defer tmc.mu.Unlock()
return tmc.tablets[int(tablet.Alias.Uid)].tm.CreateVReplicationWorkflow(ctx, req)
}
+func (tmc *fakeTMClient) DeleteTableData(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.DeleteTableDataRequest) (*tabletmanagerdatapb.DeleteTableDataResponse, error) {
+ tmc.mu.Lock()
+ defer tmc.mu.Unlock()
+ return tmc.tablets[int(tablet.Alias.Uid)].tm.DeleteTableData(ctx, req)
+}
+
func (tmc *fakeTMClient) DeleteVReplicationWorkflow(ctx context.Context, tablet *topodatapb.Tablet, request *tabletmanagerdatapb.DeleteVReplicationWorkflowRequest) (response *tabletmanagerdatapb.DeleteVReplicationWorkflowResponse, err error) {
tmc.mu.Lock()
defer tmc.mu.Unlock()
@@ -529,17 +560,25 @@ func (tmc *fakeTMClient) DeleteVReplicationWorkflow(ctx context.Context, tablet
}
func (tmc *fakeTMClient) HasVReplicationWorkflows(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.HasVReplicationWorkflowsRequest) (*tabletmanagerdatapb.HasVReplicationWorkflowsResponse, error) {
+ tmc.mu.Lock()
+ defer tmc.mu.Unlock()
return tmc.tablets[int(tablet.Alias.Uid)].tm.HasVReplicationWorkflows(ctx, req)
}
func (tmc *fakeTMClient) ReadVReplicationWorkflow(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.ReadVReplicationWorkflowRequest) (*tabletmanagerdatapb.ReadVReplicationWorkflowResponse, error) {
+ tmc.mu.Lock()
+ defer tmc.mu.Unlock()
return tmc.tablets[int(tablet.Alias.Uid)].tm.ReadVReplicationWorkflow(ctx, req)
}
func (tmc *fakeTMClient) ReadVReplicationWorkflows(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.ReadVReplicationWorkflowsRequest) (*tabletmanagerdatapb.ReadVReplicationWorkflowsResponse, error) {
+ tmc.mu.Lock()
+ defer tmc.mu.Unlock()
return tmc.tablets[int(tablet.Alias.Uid)].tm.ReadVReplicationWorkflows(ctx, req)
}
func (tmc *fakeTMClient) UpdateVReplicationWorkflow(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.UpdateVReplicationWorkflowRequest) (*tabletmanagerdatapb.UpdateVReplicationWorkflowResponse, error) {
+ tmc.mu.Lock()
+ defer tmc.mu.Unlock()
return tmc.tablets[int(tablet.Alias.Uid)].tm.UpdateVReplicationWorkflow(ctx, req)
}
diff --git a/go/vt/vttablet/tabletmanager/rpc_actions.go b/go/vt/vttablet/tabletmanager/rpc_actions.go
index 21560f9d34b..2ebef6540ed 100644
--- a/go/vt/vttablet/tabletmanager/rpc_actions.go
+++ b/go/vt/vttablet/tabletmanager/rpc_actions.go
@@ -95,6 +95,30 @@ func (tm *TabletManager) SetReadOnly(ctx context.Context, rdonly bool) error {
return tm.MysqlDaemon.SetReadOnly(ctx, rdonly)
}
+// ChangeTags changes the tablet tags
+func (tm *TabletManager) ChangeTags(ctx context.Context, tabletTags map[string]string, replace bool) (map[string]string, error) {
+ if err := tm.lock(ctx); err != nil {
+ return nil, err
+ }
+ defer tm.unlock()
+
+ tags := tm.tmState.Tablet().Tags
+ if replace || len(tags) == 0 {
+ tags = tabletTags
+ } else {
+ for key, val := range tabletTags {
+ if val == "" {
+ delete(tags, key)
+ continue
+ }
+ tags[key] = val
+ }
+ }
+
+ tm.tmState.ChangeTabletTags(ctx, tags)
+ return tags, nil
+}
+
// ChangeType changes the tablet type
func (tm *TabletManager) ChangeType(ctx context.Context, tabletType topodatapb.TabletType, semiSync bool) error {
if err := tm.lock(ctx); err != nil {
@@ -110,7 +134,7 @@ func (tm *TabletManager) ChangeType(ctx context.Context, tabletType topodatapb.T
return tm.changeTypeLocked(ctx, tabletType, DBActionNone, semiSyncAction)
}
-// ChangeType changes the tablet type
+// changeTypeLocked changes the tablet type under a lock
func (tm *TabletManager) changeTypeLocked(ctx context.Context, tabletType topodatapb.TabletType, action DBAction, semiSync SemiSyncAction) error {
// We don't want to allow multiple callers to claim a tablet as drained.
if tabletType == topodatapb.TabletType_DRAINED && tm.Tablet().Type == topodatapb.TabletType_DRAINED {
diff --git a/go/vt/vttablet/tabletmanager/rpc_agent.go b/go/vt/vttablet/tabletmanager/rpc_agent.go
index ee51560ef95..445d74cb930 100644
--- a/go/vt/vttablet/tabletmanager/rpc_agent.go
+++ b/go/vt/vttablet/tabletmanager/rpc_agent.go
@@ -51,6 +51,8 @@ type RPCTM interface {
SetReadOnly(ctx context.Context, rdonly bool) error
+ ChangeTags(ctx context.Context, tabletTags map[string]string, replace bool) (map[string]string, error)
+
ChangeType(ctx context.Context, tabletType topodatapb.TabletType, semiSync bool) error
Sleep(ctx context.Context, duration time.Duration)
@@ -87,6 +89,8 @@ type RPCTM interface {
ReadTransaction(ctx context.Context, req *tabletmanagerdatapb.ReadTransactionRequest) (*querypb.TransactionMetadata, error)
+ GetTransactionInfo(ctx context.Context, req *tabletmanagerdatapb.GetTransactionInfoRequest) (*tabletmanagerdatapb.GetTransactionInfoResponse, error)
+
ConcludeTransaction(ctx context.Context, req *tabletmanagerdatapb.ConcludeTransactionRequest) error
MysqlHostMetrics(ctx context.Context, req *tabletmanagerdatapb.MysqlHostMetricsRequest) (*tabletmanagerdatapb.MysqlHostMetricsResponse, error)
@@ -114,6 +118,7 @@ type RPCTM interface {
// VReplication API
CreateVReplicationWorkflow(ctx context.Context, req *tabletmanagerdatapb.CreateVReplicationWorkflowRequest) (*tabletmanagerdatapb.CreateVReplicationWorkflowResponse, error)
+ DeleteTableData(ctx context.Context, req *tabletmanagerdatapb.DeleteTableDataRequest) (*tabletmanagerdatapb.DeleteTableDataResponse, error)
DeleteVReplicationWorkflow(ctx context.Context, req *tabletmanagerdatapb.DeleteVReplicationWorkflowRequest) (*tabletmanagerdatapb.DeleteVReplicationWorkflowResponse, error)
HasVReplicationWorkflows(ctx context.Context, req *tabletmanagerdatapb.HasVReplicationWorkflowsRequest) (*tabletmanagerdatapb.HasVReplicationWorkflowsResponse, error)
ReadVReplicationWorkflows(ctx context.Context, req *tabletmanagerdatapb.ReadVReplicationWorkflowsRequest) (*tabletmanagerdatapb.ReadVReplicationWorkflowsResponse, error)
@@ -135,6 +140,8 @@ type RPCTM interface {
PopulateReparentJournal(ctx context.Context, timeCreatedNS int64, actionName string, tabletAlias *topodatapb.TabletAlias, pos string) error
+ ReadReparentJournalInfo(ctx context.Context) (int, error)
+
InitReplica(ctx context.Context, parent *topodatapb.TabletAlias, replicationPosition string, timeCreatedNS int64, semiSync bool) error
DemotePrimary(ctx context.Context) (*replicationdatapb.PrimaryStatus, error)
@@ -159,6 +166,8 @@ type RPCTM interface {
RestoreFromBackup(ctx context.Context, logger logutil.Logger, request *tabletmanagerdatapb.RestoreFromBackupRequest) error
+ IsBackupRunning() bool
+
// HandleRPCPanic is to be called in a defer statement in each
// RPC input point.
HandleRPCPanic(ctx context.Context, name string, args, reply any, verbose bool, err *error)
diff --git a/go/vt/vttablet/tabletmanager/rpc_backup.go b/go/vt/vttablet/tabletmanager/rpc_backup.go
index a66264d98af..22fe72716dd 100644
--- a/go/vt/vttablet/tabletmanager/rpc_backup.go
+++ b/go/vt/vttablet/tabletmanager/rpc_backup.go
@@ -205,6 +205,10 @@ func (tm *TabletManager) RestoreFromBackup(ctx context.Context, logger logutil.L
return err
}
+func (tm *TabletManager) IsBackupRunning() bool {
+ return tm._isBackupRunning
+}
+
func (tm *TabletManager) beginBackup(backupMode string) error {
tm.mutex.Lock()
defer tm.mutex.Unlock()
diff --git a/go/vt/vttablet/tabletmanager/rpc_replication.go b/go/vt/vttablet/tabletmanager/rpc_replication.go
index 6fe4e779cbb..f13efa66124 100644
--- a/go/vt/vttablet/tabletmanager/rpc_replication.go
+++ b/go/vt/vttablet/tabletmanager/rpc_replication.go
@@ -46,7 +46,11 @@ func (tm *TabletManager) ReplicationStatus(ctx context.Context) (*replicationdat
if err != nil {
return nil, err
}
- return replication.ReplicationStatusToProto(status), nil
+
+ protoStatus := replication.ReplicationStatusToProto(status)
+ protoStatus.BackupRunning = tm.IsBackupRunning()
+
+ return protoStatus, nil
}
// FullStatus returns the full status of MySQL including the replication information, semi-sync information, GTID information among others
@@ -411,6 +415,24 @@ func (tm *TabletManager) PopulateReparentJournal(ctx context.Context, timeCreate
return tm.MysqlDaemon.ExecuteSuperQueryList(ctx, cmds)
}
+// ReadReparentJournalInfo reads the information from reparent journal.
+func (tm *TabletManager) ReadReparentJournalInfo(ctx context.Context) (int, error) {
+ log.Infof("ReadReparentJournalInfo")
+ if err := tm.waitForGrantsToHaveApplied(ctx); err != nil {
+ return 0, err
+ }
+
+ query := mysqlctl.ReadReparentJournalInfoQuery()
+ res, err := tm.MysqlDaemon.FetchSuperQuery(ctx, query)
+ if err != nil {
+ return 0, err
+ }
+ if len(res.Rows) != 1 {
+ return 0, vterrors.Errorf(vtrpc.Code_INTERNAL, "unexpected rows when reading reparent journal, got %v", len(res.Rows))
+ }
+ return res.Rows[0][0].ToInt()
+}
+
// InitReplica sets replication primary and position, and waits for the
// reparent_journal table entry up to context timeout
func (tm *TabletManager) InitReplica(ctx context.Context, parent *topodatapb.TabletAlias, position string, timeCreatedNS int64, semiSync bool) error {
@@ -768,15 +790,19 @@ func (tm *TabletManager) setReplicationSourceLocked(ctx context.Context, parentA
// We will then compare our own position against it to verify that we don't
// have an errant GTID. If we find any GTID that we have, but the primary doesn't,
// we will not enter the replication graph and instead fail replication.
- primaryPositionStr, err := tm.tmc.PrimaryPosition(ctx, parent.Tablet)
+ primaryStatus, err := tm.tmc.PrimaryStatus(ctx, parent.Tablet)
+ if err != nil {
+ return err
+ }
+ primaryPosition, err := replication.DecodePosition(primaryStatus.Position)
if err != nil {
return err
}
- primaryPosition, err := replication.DecodePosition(primaryPositionStr)
+ primarySid, err := replication.ParseSID(primaryStatus.ServerUuid)
if err != nil {
return err
}
- errantGtid, err := replication.ErrantGTIDsOnReplica(replicaPosition, primaryPosition)
+ errantGtid, err := replication.ErrantGTIDsOnReplica(replicaPosition, primaryPosition, primarySid)
if err != nil {
return err
}
@@ -871,6 +897,7 @@ func (tm *TabletManager) StopReplicationAndGetStatus(ctx context.Context, stopRe
return StopReplicationAndGetStatusResponse{}, vterrors.Wrap(err, "before status failed")
}
before := replication.ReplicationStatusToProto(rs)
+ before.BackupRunning = tm.IsBackupRunning()
if stopReplicationMode == replicationdatapb.StopReplicationMode_IOTHREADONLY {
if !rs.IOHealthy() {
@@ -917,6 +944,7 @@ func (tm *TabletManager) StopReplicationAndGetStatus(ctx context.Context, stopRe
}, vterrors.Wrap(err, "acquiring replication status failed")
}
after := replication.ReplicationStatusToProto(rsAfter)
+ after.BackupRunning = tm.IsBackupRunning()
rs.Position = rsAfter.Position
rs.RelayLogPosition = rsAfter.RelayLogPosition
diff --git a/go/vt/vttablet/tabletmanager/rpc_throttler.go b/go/vt/vttablet/tabletmanager/rpc_throttler.go
index ec75db6da43..1617a5b275b 100644
--- a/go/vt/vttablet/tabletmanager/rpc_throttler.go
+++ b/go/vt/vttablet/tabletmanager/rpc_throttler.go
@@ -21,14 +21,15 @@ import (
"vitess.io/vitess/go/protoutil"
"vitess.io/vitess/go/stats"
- tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata"
- topodatapb "vitess.io/vitess/go/vt/proto/topodata"
"vitess.io/vitess/go/vt/proto/vtrpc"
"vitess.io/vitess/go/vt/topo/topoproto"
"vitess.io/vitess/go/vt/vterrors"
"vitess.io/vitess/go/vt/vttablet/tabletserver/throttle"
"vitess.io/vitess/go/vt/vttablet/tabletserver/throttle/base"
"vitess.io/vitess/go/vt/vttablet/tabletserver/throttle/throttlerapp"
+
+ tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata"
+ topodatapb "vitess.io/vitess/go/vt/proto/topodata"
)
var (
diff --git a/go/vt/vttablet/tabletmanager/rpc_transaction.go b/go/vt/vttablet/tabletmanager/rpc_transaction.go
index f6ec092e357..97c2d22db0c 100644
--- a/go/vt/vttablet/tabletmanager/rpc_transaction.go
+++ b/go/vt/vttablet/tabletmanager/rpc_transaction.go
@@ -45,6 +45,17 @@ func (tm *TabletManager) ReadTransaction(ctx context.Context, req *tabletmanager
return tm.QueryServiceControl.ReadTransaction(ctx, target, req.Dtid)
}
+// GetTransactionInfo returns the transaction data for the given distributed transaction ID.
+func (tm *TabletManager) GetTransactionInfo(ctx context.Context, req *tabletmanagerdatapb.GetTransactionInfoRequest) (*tabletmanagerdatapb.GetTransactionInfoResponse, error) {
+ if err := tm.waitForGrantsToHaveApplied(ctx); err != nil {
+ return nil, err
+ }
+
+ tablet := tm.Tablet()
+ target := &querypb.Target{Keyspace: tablet.Keyspace, Shard: tablet.Shard, TabletType: tablet.Type}
+ return tm.QueryServiceControl.GetTransactionInfo(ctx, target, req.Dtid)
+}
+
// ConcludeTransaction concludes the given distributed transaction.
func (tm *TabletManager) ConcludeTransaction(ctx context.Context, req *tabletmanagerdatapb.ConcludeTransactionRequest) error {
if err := tm.waitForGrantsToHaveApplied(ctx); err != nil {
diff --git a/go/vt/vttablet/tabletmanager/rpc_vreplication.go b/go/vt/vttablet/tabletmanager/rpc_vreplication.go
index 4060ecd650b..8ddf1391ac4 100644
--- a/go/vt/vttablet/tabletmanager/rpc_vreplication.go
+++ b/go/vt/vttablet/tabletmanager/rpc_vreplication.go
@@ -21,20 +21,25 @@ import (
"fmt"
"sort"
"strings"
+ "time"
"golang.org/x/exp/maps"
"google.golang.org/protobuf/encoding/prototext"
+ "vitess.io/vitess/go/cmd/vtctldclient/command/vreplication/movetables"
"vitess.io/vitess/go/constants/sidecar"
"vitess.io/vitess/go/protoutil"
"vitess.io/vitess/go/sqltypes"
"vitess.io/vitess/go/textutil"
"vitess.io/vitess/go/vt/discovery"
+ "vitess.io/vitess/go/vt/log"
+ "vitess.io/vitess/go/vt/logutil"
"vitess.io/vitess/go/vt/proto/vttime"
"vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/topo/topoproto"
"vitess.io/vitess/go/vt/vtctl/workflow"
"vitess.io/vitess/go/vt/vterrors"
+ "vitess.io/vitess/go/vt/vttablet/tabletserver/throttle/throttlerapp"
binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata"
querypb "vitess.io/vitess/go/vt/proto/query"
@@ -139,6 +144,99 @@ func (tm *TabletManager) CreateVReplicationWorkflow(ctx context.Context, req *ta
return &tabletmanagerdatapb.CreateVReplicationWorkflowResponse{Result: sqltypes.ResultToProto3(res)}, nil
}
+// DeleteTableData will delete data from the given tables (keys in the
+// req.Tabletfilters map) using the given filter or WHERE clauses (values
+// in the map). It will perform this work in batches of req.BatchSize
+// until all matching rows have been deleted in all tables, or the context
+// expires.
+func (tm *TabletManager) DeleteTableData(ctx context.Context, req *tabletmanagerdatapb.DeleteTableDataRequest) (*tabletmanagerdatapb.DeleteTableDataResponse, error) {
+ if req == nil {
+ return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid nil request")
+ }
+
+ if len(req.TableFilters) == 0 { // Nothing to do
+ return &tabletmanagerdatapb.DeleteTableDataResponse{}, nil
+ }
+
+ // So that we do them in a predictable and uniform order.
+ tables := maps.Keys(req.TableFilters)
+ sort.Strings(tables)
+
+ batchSize := req.BatchSize
+ if batchSize < 1 {
+ batchSize = movetables.DefaultDeleteBatchSize
+ }
+ limit := &sqlparser.Limit{Rowcount: sqlparser.NewIntLiteral(fmt.Sprintf("%d", batchSize))}
+ // We will log some progress info every 100 delete batches.
+ progressRows := uint64(batchSize * 100)
+
+ throttledLogger := logutil.NewThrottledLogger("DeleteTableData", 1*time.Minute)
+ checkIfCanceled := func() error {
+ select {
+ case <-ctx.Done():
+ return vterrors.Wrap(ctx.Err(), "context expired while deleting data")
+ default:
+ return nil
+ }
+ }
+
+ for _, table := range tables {
+ stmt, err := tm.Env.Parser().Parse(fmt.Sprintf("delete from %s %s", table, req.TableFilters[table]))
+ if err != nil {
+ return nil, vterrors.Wrapf(err, "unable to build delete query for table %s", table)
+ }
+ del, ok := stmt.(*sqlparser.Delete)
+ if !ok {
+ return nil, vterrors.Wrapf(err, "unable to build delete query for table %s", table)
+ }
+ del.Limit = limit
+ query := sqlparser.String(del)
+ rowsDeleted := uint64(0)
+ // Delete all of the matching rows from the table, in batches, until we've
+ // deleted them all.
+ log.Infof("Starting deletion of data from table %s using query %q", table, query)
+ for {
+ // Back off if we're causing too much load on the database with these
+ // batch deletes.
+ if _, ok := tm.VREngine.ThrottlerClient().ThrottleCheckOKOrWaitAppName(ctx, throttlerapp.VReplicationName); !ok {
+ throttledLogger.Infof("throttling bulk data delete for table %s using query %q",
+ table, query)
+ if err := checkIfCanceled(); err != nil {
+ return nil, err
+ }
+ continue
+ }
+ res, err := tm.ExecuteFetchAsAllPrivs(ctx,
+ &tabletmanagerdatapb.ExecuteFetchAsAllPrivsRequest{
+ Query: []byte(query),
+ DbName: tm.DBConfigs.DBName,
+ })
+ if err != nil {
+ return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "error deleting data using query %q: %v",
+ query, err)
+ }
+ rowsDeleted += res.RowsAffected
+ // Log some progress info periodically to give the operator some idea of
+ // how much work we've done, how much is left, and how long it may take
+ // (considering throttling, system performance, etc).
+ if rowsDeleted%progressRows == 0 {
+ log.Infof("Successfully deleted %d rows of data from table %s so far, using query %q",
+ rowsDeleted, table, query)
+ }
+ if res.RowsAffected == 0 { // We're done with this table
+ break
+ }
+ if err := checkIfCanceled(); err != nil {
+ return nil, err
+ }
+ }
+ log.Infof("Completed deletion of data (%d rows) from table %s using query %q",
+ rowsDeleted, table, query)
+ }
+
+ return &tabletmanagerdatapb.DeleteTableDataResponse{}, nil
+}
+
func (tm *TabletManager) DeleteVReplicationWorkflow(ctx context.Context, req *tabletmanagerdatapb.DeleteVReplicationWorkflowRequest) (*tabletmanagerdatapb.DeleteVReplicationWorkflowResponse, error) {
if req == nil || req.Workflow == "" {
return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid request, no workflow provided")
diff --git a/go/vt/vttablet/tabletmanager/rpc_vreplication_test.go b/go/vt/vttablet/tabletmanager/rpc_vreplication_test.go
index d266a1c5e0c..3f8bc85ac7f 100644
--- a/go/vt/vttablet/tabletmanager/rpc_vreplication_test.go
+++ b/go/vt/vttablet/tabletmanager/rpc_vreplication_test.go
@@ -81,6 +81,7 @@ const (
readWorkflow = "select id, source, pos, stop_pos, max_tps, max_replication_lag, cell, tablet_types, time_updated, transaction_timestamp, state, message, db_name, rows_copied, tags, time_heartbeat, workflow_type, time_throttled, component_throttled, workflow_sub_type, defer_secondary_keys, options from _vt.vreplication where workflow = '%s' and db_name = '%s'"
readWorkflowConfig = "select id, source, cell, tablet_types, state, message from _vt.vreplication where workflow = '%s'"
updateWorkflow = "update _vt.vreplication set state = '%s', source = '%s', cell = '%s', tablet_types = '%s' where id in (%d)"
+ getNonEmptyTableQuery = "select 1 from `%s` limit 1"
)
var (
@@ -285,9 +286,11 @@ func TestCreateVReplicationWorkflow(t *testing.T) {
// This is our expected query, which will also short circuit
// the test with an error as at this point we've tested what
// we wanted to test.
- targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{}, nil)
+ targetTablet.vrdbClient.AddInvariant(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{})
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
- targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{}, nil)
+ for _, table := range tt.schema.TableDefinitions {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.Name), &sqltypes.Result{})
+ }
targetTablet.vrdbClient.ExpectRequest(tt.query, &sqltypes.Result{}, errShortCircuit)
_, err := ws.MoveTablesCreate(ctx, tt.req)
tenv.tmc.tablets[targetTabletUID].vrdbClient.Wait()
@@ -302,7 +305,6 @@ func TestCreateVReplicationWorkflow(t *testing.T) {
// results returned. Followed by ensuring that SwitchTraffic
// and ReverseTraffic also work as expected.
func TestMoveTablesUnsharded(t *testing.T) {
- t.Skip("Skipping test temporarily as it is flaky on CI, pending investigation")
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
sourceKs := "sourceks"
@@ -400,6 +402,9 @@ func TestMoveTablesUnsharded(t *testing.T) {
ftc.vrdbClient.AddInvariant(getCopyStateQuery, &sqltypes.Result{})
tenv.tmc.setVReplicationExecResults(ftc.tablet, getCopyState, &sqltypes.Result{})
ftc.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
+ for _, table := range defaultSchema.TableDefinitions {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.Name), &sqltypes.Result{})
+ }
insert := fmt.Sprintf(`%s values ('%s', 'keyspace:"%s" shard:"%s" filter:{rules:{match:"t1" filter:"select * from t1"}}', '', 0, 0, '%s', 'primary,replica,rdonly', now(), 0, 'Stopped', '%s', %d, 0, 0, '{}')`,
insertVReplicationPrefix, wf, sourceKs, sourceShard, tenv.cells[0], tenv.dbName, vreplID)
ftc.vrdbClient.ExpectRequest(insert, &sqltypes.Result{InsertID: 1}, nil)
@@ -472,7 +477,6 @@ func TestMoveTablesUnsharded(t *testing.T) {
require.NoError(t, err)
for _, ftc := range targetShards {
- ftc.vrdbClient.Reset()
ftc.vrdbClient.AddInvariant(binlogplayer.TestGetWorkflowQueryId1, sqltypes.MakeTestResult(
sqltypes.MakeTestFields(
"id|source|pos|stop_pos|max_tps|max_replication_lag|cell|tablet_types|time_updated|transaction_timestamp|state|message|db_name|rows_copied|tags|time_heartbeat|workflow_type|time_throttled|component_throttled|workflow_sub_type|defer_secondary_keys|options",
@@ -661,6 +665,9 @@ func TestMoveTablesSharded(t *testing.T) {
ftc.vrdbClient.AddInvariant(getCopyStateQuery, &sqltypes.Result{})
tenv.tmc.setVReplicationExecResults(ftc.tablet, getCopyState, &sqltypes.Result{})
ftc.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
+ for _, table := range defaultSchema.TableDefinitions {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.Name), &sqltypes.Result{})
+ }
insert := fmt.Sprintf(`%s values ('%s', 'keyspace:"%s" shard:"%s" filter:{rules:{match:"t1" filter:"select * from t1 where in_keyrange(id, \'%s.hash\', \'%s\')"}}', '', 0, 0, '%s', 'primary,replica,rdonly', now(), 0, 'Stopped', '%s', %d, 0, 0, '{}')`,
insertVReplicationPrefix, wf, sourceKs, sourceShard, targetKs, ftc.tablet.Shard, tenv.cells[0], tenv.dbName, vreplID)
ftc.vrdbClient.ExpectRequest(insert, &sqltypes.Result{InsertID: 1}, nil)
@@ -732,7 +739,6 @@ func TestMoveTablesSharded(t *testing.T) {
})
require.NoError(t, err)
for _, ftc := range targetShards {
- ftc.vrdbClient.Reset()
ftc.vrdbClient.AddInvariant(binlogplayer.TestGetWorkflowQueryId1, sqltypes.MakeTestResult(
sqltypes.MakeTestFields(
"id|source|pos|stop_pos|max_tps|max_replication_lag|cell|tablet_types|time_updated|transaction_timestamp|state|message|db_name|rows_copied|tags|time_heartbeat|workflow_type|time_throttled|component_throttled|workflow_sub_type|defer_secondary_keys|options",
@@ -1331,9 +1337,12 @@ func TestSourceShardSelection(t *testing.T) {
}
for uid, streams := range tt.streams {
- tt := targetTablets[uid]
- tt.vrdbClient.ExpectRequest(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{}, nil)
- tt.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
+ targetTablet := targetTablets[uid]
+ targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{}, nil)
+ targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
+ for _, table := range tt.schema.TableDefinitions {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.Name), &sqltypes.Result{})
+ }
for i, sourceShard := range streams {
var err error
if i == len(streams)-1 {
@@ -1342,25 +1351,26 @@ func TestSourceShardSelection(t *testing.T) {
// everything we wanted to in the test.
err = errShortCircuit
}
- tt.vrdbClient.ExpectRequest(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{}, nil)
- tt.vrdbClient.ExpectRequest(
+ targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{}, nil)
+ targetTablet.vrdbClient.ExpectRequest(
fmt.Sprintf(`%s values ('%s', 'keyspace:"%s" shard:"%s" filter:{rules:{match:"t1" filter:"select * from t1 where in_keyrange(id, \'%s.hash\', \'%s\')"}}', '', 0, 0, '%s', '', now(), 0, 'Stopped', '%s', 1, 0, 0, '{}')`,
- insertVReplicationPrefix, wf, sourceKs, sourceShard, targetKs, tt.tablet.Shard, tenv.cells[0], tenv.dbName),
+ insertVReplicationPrefix, wf, sourceKs, sourceShard, targetKs, targetTablet.tablet.Shard, tenv.cells[0], tenv.dbName),
&sqltypes.Result{InsertID: uint64(i + 1)},
err,
)
if errors.Is(err, errShortCircuit) {
break
}
- tt.vrdbClient.ExpectRequest(getAutoIncrementStep, &sqltypes.Result{}, nil)
- tt.vrdbClient.ExpectRequest(
+ targetTablet.vrdbClient.ExpectRequest(getAutoIncrementStep, &sqltypes.Result{}, nil)
+ targetTablet.vrdbClient.ExpectRequest(
fmt.Sprintf("select * from _vt.vreplication where id = %d", uint64(i+1)),
sqltypes.MakeTestResult(
sqltypes.MakeTestFields(
"id|source|state|options",
"int64|varchar|varchar|varchar",
),
- fmt.Sprintf("%d|%s|Stopped|{}", uint64(i+1), fmt.Sprintf(`keyspace:"%s" shard:"%s" filter:{rules:{match:"t1" filter:"select * from t1 where in_keyrange(id, '%s.hash', '%s')"}}`, sourceKs, sourceShard, targetKs, tt.tablet.Shard)),
+ fmt.Sprintf("%d|%s|Stopped|{}", uint64(i+1), fmt.Sprintf(`keyspace:"%s" shard:"%s" filter:{rules:{match:"t1" filter:"select * from t1 where in_keyrange(id, '%s.hash', '%s')"}}`,
+ sourceKs, sourceShard, targetKs, targetTablet.tablet.Shard)),
),
nil,
)
@@ -1424,6 +1434,9 @@ func TestFailedMoveTablesCreateCleanup(t *testing.T) {
addInvariants(targetTablet.vrdbClient, vreplID, sourceTabletUID, position, wf, tenv.cells[0])
tenv.tmc.tablets[targetTabletUID].vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
+ for _, table := range defaultSchema.TableDefinitions {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.Name), &sqltypes.Result{})
+ }
targetTablet.vrdbClient.ExpectRequest(
fmt.Sprintf("%s %s",
insertVReplicationPrefix,
@@ -1709,8 +1722,11 @@ func TestReadVReplicationWorkflows(t *testing.T) {
require.NotNil(t, tt.req, "No request provided")
if !tt.wantErr { // Errors we're testing for occur before executing any queries.
- tablet.vrdbClient.ExpectRequest(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{}, nil)
+ tablet.vrdbClient.AddInvariant(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{})
tablet.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, tt.wantPreds), &sqltypes.Result{}, nil)
+ for _, table := range defaultSchema.TableDefinitions {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.Name), &sqltypes.Result{})
+ }
}
_, err := tenv.tmc.ReadVReplicationWorkflows(ctx, tablet.tablet, tt.req)
@@ -1766,7 +1782,7 @@ func addInvariants(dbClient *binlogplayer.MockDBClient, vreplID, sourceTabletUID
"0",
))
dbClient.AddInvariant(fmt.Sprintf(updatePickedSourceTablet, cell, sourceTabletUID, vreplID), &sqltypes.Result{})
-
+ dbClient.AddInvariant("update _vt.vreplication set state='Running', message='' where id=1", &sqltypes.Result{})
}
func addMaterializeSettingsTablesToSchema(ms *vtctldatapb.MaterializeSettings, tenv *testEnv, venv *vtenv.Environment) {
@@ -2101,9 +2117,11 @@ func TestMaterializerOneToOne(t *testing.T) {
addMaterializeSettingsTablesToSchema(ms, tenv, vtenv)
- targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{}, nil)
+ targetTablet.vrdbClient.AddInvariant(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{})
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
- targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{}, nil)
+ for _, table := range ms.TableSettings {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.TargetTable), &sqltypes.Result{})
+ }
// This is our expected query, which will also short circuit
// the test with an error as at this point we've tested what
@@ -2165,6 +2183,9 @@ func TestMaterializerManyToOne(t *testing.T) {
addMaterializeSettingsTablesToSchema(ms, tenv, vtenv)
targetTablet.vrdbClient.AddInvariant("update _vt.vreplication set message='no schema defined' where id=1", &sqltypes.Result{}) // If the first workflow controller progresses ...
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
+ for _, table := range ms.TableSettings {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.TargetTable), &sqltypes.Result{})
+ }
// This is our expected query, which will also short circuit
// the test with an error as at this point we've tested what
@@ -2273,6 +2294,9 @@ func TestMaterializerOneToMany(t *testing.T) {
addInvariants(targetTablet.vrdbClient, vreplID, sourceTabletUID, position, wf, tenv.cells[0])
targetTablet.vrdbClient.AddInvariant("update _vt.vreplication set message='no schema defined' where id=1", &sqltypes.Result{}) // If the first workflow controller progresses ...
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
+ for _, table := range ms.TableSettings {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.TargetTable), &sqltypes.Result{})
+ }
bls := fmt.Sprintf("keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select * from t1 where in_keyrange(c1, '%s.xxhash', '%s')\"}}",
sourceKs, sourceShard, targetKs, targetShard)
@@ -2378,6 +2402,9 @@ func TestMaterializerManyToMany(t *testing.T) {
targetTablet := targetShards[targetShard]
targetTablet.vrdbClient.AddInvariant("update _vt.vreplication set message='no schema defined' where id=1", &sqltypes.Result{}) // If the first workflow controller progresses ...
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
+ for _, table := range ms.TableSettings {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.TargetTable), &sqltypes.Result{})
+ }
for i, sourceShard := range []string{"-40", "40-"} { // One insert per [binlog]source/stream
addInvariants(targetTablet.vrdbClient, vreplID, sourceTabletUID+(i*10), position, wf, tenv.cells[0])
@@ -2489,6 +2516,9 @@ func TestMaterializerMulticolumnVindex(t *testing.T) {
addInvariants(targetTablet.vrdbClient, vreplID, sourceTabletUID, position, wf, tenv.cells[0])
targetTablet.vrdbClient.AddInvariant("update _vt.vreplication set message='no schema defined' where id=1", &sqltypes.Result{}) // If the first workflow controller progresses ...
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
+ for _, table := range ms.TableSettings {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.TargetTable), &sqltypes.Result{})
+ }
bls := fmt.Sprintf("keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select * from t1 where in_keyrange(c1, c2, '%s.region', '%s')\"}}",
sourceKs, sourceShard, targetKs, targetShard)
@@ -2575,9 +2605,11 @@ func TestMaterializerDeploySchema(t *testing.T) {
}
}
tenv.tmc.tabletSchemas[targetTabletUID] = schema
- targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{}, nil)
+ targetTablet.vrdbClient.AddInvariant(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{})
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
- targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{}, nil)
+ for _, table := range ms.TableSettings {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.TargetTable), &sqltypes.Result{})
+ }
tenv.tmc.setVReplicationExecResults(targetTablet.tablet, `t2ddl`, &sqltypes.Result{}) // Execute the fake CreateDdl
// This is our expected query, which will also short circuit
@@ -2646,9 +2678,11 @@ func TestMaterializerCopySchema(t *testing.T) {
}
}
tenv.tmc.tabletSchemas[targetTabletUID] = schema
- targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{}, nil)
+ targetTablet.vrdbClient.AddInvariant(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{})
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
- targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{}, nil)
+ for _, table := range ms.TableSettings {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.TargetTable), &sqltypes.Result{})
+ }
// This is our expected query, which will also short circuit
// the test with an error as at this point we've tested what
@@ -2736,6 +2770,9 @@ func TestMaterializerExplicitColumns(t *testing.T) {
addInvariants(targetTablet.vrdbClient, vreplID, sourceTabletUID, position, wf, tenv.cells[0])
targetTablet.vrdbClient.AddInvariant("update _vt.vreplication set message='no schema defined' where id=1", &sqltypes.Result{}) // If the first workflow controller progresses ...
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
+ for _, table := range ms.TableSettings {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.TargetTable), &sqltypes.Result{})
+ }
bls := fmt.Sprintf("keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select c1, c1 + c2, c2 from t1 where in_keyrange(c1, c2, '%s.region', '%s')\"}}",
sourceKs, sourceShard, targetKs, targetShard)
@@ -2843,6 +2880,9 @@ func TestMaterializerRenamedColumns(t *testing.T) {
addInvariants(targetTablet.vrdbClient, vreplID, sourceTabletUID, position, wf, tenv.cells[0])
targetTablet.vrdbClient.AddInvariant("update _vt.vreplication set message='no schema defined' where id=1", &sqltypes.Result{}) // If the first workflow controller progresses ...
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
+ for _, table := range ms.TableSettings {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.TargetTable), &sqltypes.Result{})
+ }
bls := fmt.Sprintf("keyspace:\"%s\" shard:\"%s\" filter:{rules:{match:\"t1\" filter:\"select c3 as c1, c1 + c2, c4 as c2 from t1 where in_keyrange(c3, c4, '%s.region', '%s')\"}}",
sourceKs, sourceShard, targetKs, targetShard)
@@ -2921,9 +2961,11 @@ func TestMaterializerStopAfterCopy(t *testing.T) {
addMaterializeSettingsTablesToSchema(ms, tenv, vtenv)
- targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{}, nil)
+ targetTablet.vrdbClient.AddInvariant(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{})
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
- targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{}, nil)
+ for _, table := range ms.TableSettings {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.TargetTable), &sqltypes.Result{})
+ }
// This is our expected query, which will also short circuit
// the test with an error as at this point we've tested what
@@ -2982,6 +3024,9 @@ func TestMaterializerNoTargetVSchema(t *testing.T) {
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{}, nil)
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
+ for _, table := range ms.TableSettings {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.TargetTable), &sqltypes.Result{})
+ }
err = ws.Materialize(ctx, ms)
targetTablet.vrdbClient.Wait()
@@ -3027,6 +3072,9 @@ func TestMaterializerNoDDL(t *testing.T) {
tenv.tmc.tabletSchemas[targetTabletUID] = &tabletmanagerdatapb.SchemaDefinition{}
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{}, nil)
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
+ for _, table := range ms.TableSettings {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.TargetTable), &sqltypes.Result{})
+ }
err := ws.Materialize(ctx, ms)
require.EqualError(t, err, "target table t1 does not exist and there is no create ddl defined")
@@ -3124,6 +3172,9 @@ func TestMaterializerTableMismatchNonCopy(t *testing.T) {
tenv.tmc.tabletSchemas[targetTabletUID] = &tabletmanagerdatapb.SchemaDefinition{}
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{}, nil)
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
+ for _, table := range ms.TableSettings {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.TargetTable), &sqltypes.Result{})
+ }
err := ws.Materialize(ctx, ms)
require.EqualError(t, err, "target table t1 does not exist and there is no create ddl defined")
@@ -3170,6 +3221,9 @@ func TestMaterializerTableMismatchCopy(t *testing.T) {
tenv.tmc.tabletSchemas[targetTabletUID] = &tabletmanagerdatapb.SchemaDefinition{}
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{}, nil)
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
+ for _, table := range ms.TableSettings {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.TargetTable), &sqltypes.Result{})
+ }
err := ws.Materialize(ctx, ms)
require.EqualError(t, err, "source and target table names must match for copying schema: t2 vs t1")
@@ -3212,6 +3266,9 @@ func TestMaterializerNoSourceTable(t *testing.T) {
tenv.tmc.tabletSchemas[targetTabletUID] = &tabletmanagerdatapb.SchemaDefinition{}
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{}, nil)
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
+ for _, table := range ms.TableSettings {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.TargetTable), &sqltypes.Result{})
+ }
err := ws.Materialize(ctx, ms)
require.EqualError(t, err, "source table t1 does not exist")
@@ -3260,6 +3317,9 @@ func TestMaterializerSyntaxError(t *testing.T) {
tenv.tmc.setVReplicationExecResults(targetTablet.tablet, ms.TableSettings[0].CreateDdl, &sqltypes.Result{})
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{}, nil)
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
+ for _, table := range ms.TableSettings {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.TargetTable), &sqltypes.Result{})
+ }
err := ws.Materialize(ctx, ms)
require.EqualError(t, err, "syntax error at position 4 near 'bad'")
@@ -3308,6 +3368,9 @@ func TestMaterializerNotASelect(t *testing.T) {
tenv.tmc.setVReplicationExecResults(targetTablet.tablet, ms.TableSettings[0].CreateDdl, &sqltypes.Result{})
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf("use %s", sidecar.GetIdentifier()), &sqltypes.Result{}, nil)
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
+ for _, table := range ms.TableSettings {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.TargetTable), &sqltypes.Result{})
+ }
err := ws.Materialize(ctx, ms)
require.EqualError(t, err, "unrecognized statement: update t1 set val=1")
@@ -3386,6 +3449,9 @@ func TestMaterializerNoGoodVindex(t *testing.T) {
targetTablet := targetShards[targetShard]
addInvariants(targetTablet.vrdbClient, vreplID, sourceTabletUID, position, wf, tenv.cells[0])
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
+ for _, table := range ms.TableSettings {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.TargetTable), &sqltypes.Result{})
+ }
errs = append(errs, errNoVindex)
}
@@ -3461,6 +3527,9 @@ func TestMaterializerComplexVindexExpression(t *testing.T) {
targetTablet := targetShards[targetShard]
addInvariants(targetTablet.vrdbClient, vreplID, sourceTabletUID, position, wf, tenv.cells[0])
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
+ for _, table := range ms.TableSettings {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.TargetTable), &sqltypes.Result{})
+ }
errs = append(errs, errNoVindex)
}
@@ -3536,6 +3605,9 @@ func TestMaterializerNoVindexInExpression(t *testing.T) {
targetTablet := targetShards[targetShard]
addInvariants(targetTablet.vrdbClient, vreplID, sourceTabletUID, position, wf, tenv.cells[0])
targetTablet.vrdbClient.ExpectRequest(fmt.Sprintf(readAllWorkflows, tenv.dbName, ""), &sqltypes.Result{}, nil)
+ for _, table := range ms.TableSettings {
+ tenv.db.AddQuery(fmt.Sprintf(getNonEmptyTableQuery, table.TargetTable), &sqltypes.Result{})
+ }
errs = append(errs, errNoVindex)
}
@@ -3671,3 +3743,81 @@ func TestBuildUpdateVReplicationWorkflowsQuery(t *testing.T) {
})
}
}
+
+func TestDeleteTableData(t *testing.T) {
+ ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
+ defer cancel()
+ sourceKs := "sourceks"
+ sourceShard := "0"
+ sourceTabletUID := 200
+ tenv := newTestEnv(t, ctx, sourceKs, []string{shard})
+ defer tenv.close()
+
+ tablet := tenv.addTablet(t, sourceTabletUID, sourceKs, sourceShard)
+ defer tenv.deleteTablet(tablet.tablet)
+
+ testCases := []struct {
+ name string
+ req *tabletmanagerdatapb.DeleteTableDataRequest
+ workflowType *binlogdatapb.VReplicationWorkflowType
+ expectedQueries []string
+ wantErr string
+ }{
+ {
+ name: "no request",
+ req: nil,
+ wantErr: "invalid nil request",
+ },
+ {
+ name: "one table",
+ req: &tabletmanagerdatapb.DeleteTableDataRequest{
+ TableFilters: map[string]string{
+ "t1": "where tenant_id = 1",
+ },
+ BatchSize: 100,
+ },
+ expectedQueries: []string{
+ "delete from t1 where tenant_id = 1 limit 100",
+ },
+ },
+ {
+ name: "one table without batch size",
+ req: &tabletmanagerdatapb.DeleteTableDataRequest{
+ TableFilters: map[string]string{
+ "t1": "where tenant_id = 1",
+ },
+ },
+ expectedQueries: []string{
+ "delete from t1 where tenant_id = 1 limit 1000", // Default batch size of 1,000
+ },
+ },
+ {
+ name: "multiple tables",
+ req: &tabletmanagerdatapb.DeleteTableDataRequest{
+ TableFilters: map[string]string{
+ "t1": "where tenant_id = 1",
+ "t2": "where foo = 2",
+ },
+ BatchSize: 500,
+ },
+ expectedQueries: []string{
+ "delete from t1 where tenant_id = 1 limit 500",
+ "delete from t2 where foo = 2 limit 500",
+ },
+ },
+ }
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ tenv.db.AddQuery(fmt.Sprintf("use `%s`", tenv.dbName), &sqltypes.Result{})
+ for _, query := range tc.expectedQueries {
+ tenv.db.AddQuery(query, &sqltypes.Result{})
+ }
+ _, err := tenv.tmc.DeleteTableData(ctx, tablet.tablet, tc.req)
+ if tc.wantErr != "" {
+ require.EqualError(t, err, tc.wantErr)
+ } else {
+ require.NoError(t, err)
+ }
+ })
+ }
+}
diff --git a/go/vt/vttablet/tabletmanager/shard_sync_test.go b/go/vt/vttablet/tabletmanager/shard_sync_test.go
index 40a62d06b76..8f7739e5341 100644
--- a/go/vt/vttablet/tabletmanager/shard_sync_test.go
+++ b/go/vt/vttablet/tabletmanager/shard_sync_test.go
@@ -18,6 +18,7 @@ package tabletmanager
import (
"context"
+ "errors"
"fmt"
"reflect"
"testing"
@@ -44,7 +45,7 @@ const (
)
func TestShardSync(t *testing.T) {
- ctx, cancel := context.WithCancel(context.Background())
+ ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
defer cancel()
ts := memorytopo.NewServer(ctx, "cell1")
statsTabletTypeCount.ResetAll()
@@ -67,48 +68,77 @@ func TestShardSync(t *testing.T) {
// wait for syncing to work correctly
// this should also have updated the shard record since it is a more recent operation
// We check here that the shard record and the tablet record are in sync
- checkShardRecordWithTimeout(ctx, t, ts, ti.Alias, ti.PrimaryTermStartTime, 1*time.Second)
+ err = checkShardRecord(ctx, t, ts, ti.Alias, ti.PrimaryTermStartTime)
+ require.NoError(t, err)
+
+ // Shard sync loop runs asynchronously and starts a watch on the shard.
+ // We wait for the shard watch to start, otherwise the test is flaky
+ // because the update of the record can happen before the watch is started.
+ waitForShardWatchToStart(ctx, t, tm, originalTime, ti)
// even if try to update the shard record with the old timestamp, it should be reverted again
updatePrimaryInfoInShardRecord(ctx, t, tm, nil, originalTime)
// this should have also updated the shard record because of the timestamp.
- checkShardRecordWithTimeout(ctx, t, ts, ti.Alias, ti.PrimaryTermStartTime, 1*time.Second)
+ err = checkShardRecord(ctx, t, ts, ti.Alias, ti.PrimaryTermStartTime)
+ require.NoError(t, err)
// updating the shard record with the latest time should trigger an update in the tablet
newTime := time.Now()
updatePrimaryInfoInShardRecord(ctx, t, tm, nil, newTime)
// this should not have updated.
- checkShardRecordWithTimeout(ctx, t, ts, nil, protoutil.TimeToProto(newTime), 1*time.Second)
+ err = checkShardRecord(ctx, t, ts, nil, protoutil.TimeToProto(newTime))
+ require.NoError(t, err)
// verify that the tablet record has been updated
- checkTabletRecordWithTimeout(ctx, t, ts, tm.tabletAlias, topodata.TabletType_REPLICA, nil, 1*time.Second)
+ checkTabletRecordWithTimeout(ctx, t, ts, tm.tabletAlias, topodata.TabletType_REPLICA, nil)
+}
+
+// waitForShardWatchToStart waits for shard watch to have started.
+func waitForShardWatchToStart(ctx context.Context, t *testing.T, tm *TabletManager, originalTime time.Time, ti *topo.TabletInfo) {
+ // We wait for shard watch to start by
+ // updating the record and waiting to see
+ // the shard record is updated back by the tablet manager.
+ idx := 1
+ for {
+ select {
+ case <-ctx.Done():
+ require.FailNow(t, "timed out: waiting for shard watch to start")
+ default:
+ updatePrimaryInfoInShardRecord(ctx, t, tm, nil, originalTime.Add(-1*time.Duration(idx)*time.Second))
+ idx = idx + 1
+ checkCtx, cancel := context.WithTimeout(context.Background(), 1*time.Second)
+ err := checkShardRecord(checkCtx, t, tm.TopoServer, ti.Alias, ti.PrimaryTermStartTime)
+ cancel()
+ if err == nil {
+ return
+ }
+ }
+ }
}
-func checkShardRecordWithTimeout(ctx context.Context, t *testing.T, ts *topo.Server, tabletAlias *topodata.TabletAlias, expectedStartTime *vttime.Time, timeToWait time.Duration) {
- timeOut := time.After(timeToWait)
+func checkShardRecord(ctx context.Context, t *testing.T, ts *topo.Server, tabletAlias *topodata.TabletAlias, expectedStartTime *vttime.Time) error {
for {
select {
- case <-timeOut:
- t.Fatalf("timed out: waiting for shard record to update")
+ case <-ctx.Done():
+ return errors.New("timed out: waiting for shard record to update")
default:
si, err := ts.GetShard(ctx, keyspace, shard)
require.NoError(t, err)
if reflect.DeepEqual(tabletAlias, si.PrimaryAlias) && reflect.DeepEqual(expectedStartTime, si.PrimaryTermStartTime) {
- return
+ return nil
}
time.Sleep(100 * time.Millisecond)
}
}
}
-func checkTabletRecordWithTimeout(ctx context.Context, t *testing.T, ts *topo.Server, tabletAlias *topodata.TabletAlias, tabletType topodata.TabletType, expectedStartTime *vttime.Time, timeToWait time.Duration) {
- timeOut := time.After(timeToWait)
+func checkTabletRecordWithTimeout(ctx context.Context, t *testing.T, ts *topo.Server, tabletAlias *topodata.TabletAlias, tabletType topodata.TabletType, expectedStartTime *vttime.Time) {
for {
select {
- case <-timeOut:
- t.Fatalf("timed out: waiting for tablet record to update")
+ case <-ctx.Done():
+ require.FailNow(t, "timed out: waiting for tablet record to update")
default:
ti, err := ts.GetTablet(ctx, tabletAlias)
require.NoError(t, err)
diff --git a/go/vt/vttablet/tabletmanager/tm_init.go b/go/vt/vttablet/tabletmanager/tm_init.go
index efc6c57661a..84150c82be8 100644
--- a/go/vt/vttablet/tabletmanager/tm_init.go
+++ b/go/vt/vttablet/tabletmanager/tm_init.go
@@ -354,6 +354,13 @@ func mergeTags(a, b map[string]string) map[string]string {
return result
}
+func setTabletTagsStats(tablet *topodatapb.Tablet) {
+ statsTabletTags.ResetAll()
+ for key, val := range tablet.Tags {
+ statsTabletTags.Set([]string{key, val}, 1)
+ }
+}
+
// Start starts the TabletManager.
func (tm *TabletManager) Start(tablet *topodatapb.Tablet, config *tabletenv.TabletConfig) error {
defer func() {
@@ -908,9 +915,7 @@ func (tm *TabletManager) exportStats() {
statsKeyRangeEnd.Set(hex.EncodeToString(tablet.KeyRange.End))
}
statsAlias.Set(topoproto.TabletAliasString(tablet.Alias))
- for k, v := range tablet.Tags {
- statsTabletTags.Set([]string{k, v}, 1)
- }
+ setTabletTagsStats(tablet)
}
// withRetry will exponentially back off and retry a function upon
@@ -965,7 +970,7 @@ func (tm *TabletManager) hookExtraEnv() map[string]string {
// initializeReplication is used to initialize the replication when the tablet starts.
// It returns the current primary tablet for use externally
-func (tm *TabletManager) initializeReplication(ctx context.Context, tabletType topodatapb.TabletType) (primaryPosStr string, err error) {
+func (tm *TabletManager) initializeReplication(ctx context.Context, tabletType topodatapb.TabletType) (string, error) {
// If active reparents are disabled, we do not touch replication.
// There is nothing to do
if mysqlctl.DisableActiveReparents {
@@ -1040,27 +1045,29 @@ func (tm *TabletManager) initializeReplication(ctx context.Context, tabletType t
return "", err
}
- primaryPosStr, err = tm.tmc.PrimaryPosition(ctx, currentPrimary.Tablet)
+ primaryStatus, err := tm.tmc.PrimaryStatus(ctx, currentPrimary.Tablet)
if err != nil {
return "", err
}
-
- primaryPosition, err := replication.DecodePosition(primaryPosStr)
+ primaryPosition, err := replication.DecodePosition(primaryStatus.Position)
if err != nil {
return "", err
}
-
- errantGTIDs, err := replication.ErrantGTIDsOnReplica(replicaPos, primaryPosition)
+ primarySid, err := replication.ParseSID(primaryStatus.ServerUuid)
+ if err != nil {
+ return "", err
+ }
+ errantGtid, err := replication.ErrantGTIDsOnReplica(replicaPos, primaryPosition, primarySid)
if err != nil {
return "", err
}
- if errantGTIDs != "" {
- return "", vterrors.New(vtrpc.Code_FAILED_PRECONDITION, fmt.Sprintf("Errant GTID detected - %s", errantGTIDs))
+ if errantGtid != "" {
+ return "", vterrors.New(vtrpc.Code_FAILED_PRECONDITION, fmt.Sprintf("Errant GTID detected - %s; Primary GTID - %s, Replica GTID - %s", errantGtid, primaryPosition, replicaPos.String()))
}
if err := tm.MysqlDaemon.SetReplicationSource(ctx, currentPrimary.Tablet.MysqlHostname, currentPrimary.Tablet.MysqlPort, 0, true, true); err != nil {
return "", vterrors.Wrap(err, "MysqlDaemon.SetReplicationSource failed")
}
- return primaryPosStr, nil
+ return primaryStatus.Position, nil
}
diff --git a/go/vt/vttablet/tabletmanager/tm_state.go b/go/vt/vttablet/tabletmanager/tm_state.go
index 75917cb2065..026f2b62552 100644
--- a/go/vt/vttablet/tabletmanager/tm_state.go
+++ b/go/vt/vttablet/tabletmanager/tm_state.go
@@ -257,6 +257,17 @@ func (ts *tmState) ChangeTabletType(ctx context.Context, tabletType topodatapb.T
return err
}
+func (ts *tmState) ChangeTabletTags(ctx context.Context, tabletTags map[string]string) {
+ ts.mu.Lock()
+ defer ts.mu.Unlock()
+ log.Infof("Changing Tablet Tags: %v for %s", tabletTags, ts.tablet.Alias.String())
+
+ ts.tablet.Tags = tabletTags
+ ts.publishStateLocked(ctx)
+ ts.publishForDisplay()
+ setTabletTagsStats(ts.tablet)
+}
+
func (ts *tmState) SetMysqlPort(mport int32) {
ts.mu.Lock()
defer ts.mu.Unlock()
diff --git a/go/vt/vttablet/tabletmanager/vdiff/framework_test.go b/go/vt/vttablet/tabletmanager/vdiff/framework_test.go
index 33a0da8e23f..7d4cdb78c20 100644
--- a/go/vt/vttablet/tabletmanager/vdiff/framework_test.go
+++ b/go/vt/vttablet/tabletmanager/vdiff/framework_test.go
@@ -396,6 +396,10 @@ func (dbc *realDBClient) Close() {
dbc.conn.Close()
}
+func (dbc *realDBClient) IsClosed() bool {
+ return dbc.conn.IsClosed()
+}
+
func (dbc *realDBClient) ExecuteFetch(query string, maxrows int) (*sqltypes.Result, error) {
// Use Clone() because the contents of memory region referenced by
// string can change when clients (e.g. vcopier) use unsafe string methods.
diff --git a/go/vt/vttablet/tabletmanager/vreplication/controller.go b/go/vt/vttablet/tabletmanager/vreplication/controller.go
index 575300a685c..7067211ff10 100644
--- a/go/vt/vttablet/tabletmanager/vreplication/controller.go
+++ b/go/vt/vttablet/tabletmanager/vreplication/controller.go
@@ -47,6 +47,9 @@ const (
// give up and return an error message that the user
// can see and act upon if needed.
tabletPickerRetries = 5
+
+ // Prepended to the message to indicate that it is a terminal error.
+ TerminalErrorIndicator = "terminal error"
)
// controller is created by Engine. Members are initialized upfront.
@@ -305,7 +308,7 @@ func (ct *controller) runBlp(ctx context.Context) (err error) {
if (err != nil && vr.WorkflowSubType == int32(binlogdatapb.VReplicationWorkflowSubType_AtomicCopy)) ||
isUnrecoverableError(err) ||
!ct.lastWorkflowError.ShouldRetry() {
-
+ err = vterrors.Wrapf(err, TerminalErrorIndicator)
if errSetState := vr.setState(binlogdatapb.VReplicationWorkflowState_Error, err.Error()); errSetState != nil {
log.Errorf("INTERNAL: unable to setState() in controller: %v. Could not set error text to: %v.", errSetState, err)
return err // yes, err and not errSetState.
diff --git a/go/vt/vttablet/tabletmanager/vreplication/engine.go b/go/vt/vttablet/tabletmanager/vreplication/engine.go
index c4832a59b6a..e692781538a 100644
--- a/go/vt/vttablet/tabletmanager/vreplication/engine.go
+++ b/go/vt/vttablet/tabletmanager/vreplication/engine.go
@@ -229,6 +229,10 @@ func (vre *Engine) Open(ctx context.Context) {
log.Infof("VReplication engine opened successfully")
}
+func (vre *Engine) ThrottlerClient() *throttle.Client {
+ return vre.throttlerClient
+}
+
func (vre *Engine) openLocked(ctx context.Context) error {
rows, err := vre.readAllRows(ctx)
if err != nil {
diff --git a/go/vt/vttablet/tabletmanager/vreplication/external_connector_test.go b/go/vt/vttablet/tabletmanager/vreplication/external_connector_test.go
index 24e6cb0dbc3..c671d2a086d 100644
--- a/go/vt/vttablet/tabletmanager/vreplication/external_connector_test.go
+++ b/go/vt/vttablet/tabletmanager/vreplication/external_connector_test.go
@@ -64,7 +64,7 @@ func TestExternalConnectorCopy(t *testing.T) {
expectDBClientAndVreplicationQueries(t, []string{
"begin",
- "insert into tab1(id,val) values (1,'a'), (2,'b')",
+ "insert into tab1(id,val) values (1,_binary'a'), (2,_binary'b')",
"/insert into _vt.copy_state",
"commit",
"/delete cs, pca from _vt.copy_state as cs left join _vt.post_copy_action as pca on cs.vrepl_id=pca.vrepl_id and cs.table_name=pca.table_name",
@@ -73,7 +73,7 @@ func TestExternalConnectorCopy(t *testing.T) {
execStatements(t, []string{"insert into tab1 values(3, 'c')"})
expectDBClientQueries(t, qh.Expect(
"begin",
- "insert into tab1(id,val) values (3,'c')",
+ "insert into tab1(id,val) values (3,_binary'c')",
"/update _vt.vreplication set pos=",
"commit",
))
@@ -96,7 +96,7 @@ func TestExternalConnectorCopy(t *testing.T) {
expectDBClientAndVreplicationQueries(t, []string{
"begin",
- "insert into tab2(id,val) values (1,'a'), (2,'b')",
+ "insert into tab2(id,val) values (1,_binary'a'), (2,_binary'b')",
"/insert into _vt.copy_state",
"commit",
"/delete cs, pca from _vt.copy_state as cs left join _vt.post_copy_action as pca on cs.vrepl_id=pca.vrepl_id and cs.table_name=pca.table_name",
@@ -121,7 +121,7 @@ func TestExternalConnectorCopy(t *testing.T) {
expectDBClientAndVreplicationQueries(t, []string{
"begin",
- "insert into tab3(id,val) values (1,'a'), (2,'b')",
+ "insert into tab3(id,val) values (1,_binary'a'), (2,_binary'b')",
"/insert into _vt.copy_state",
"commit",
"/delete cs, pca from _vt.copy_state as cs left join _vt.post_copy_action as pca on cs.vrepl_id=pca.vrepl_id and cs.table_name=pca.table_name",
@@ -163,8 +163,7 @@ func TestExternalConnectorPlay(t *testing.T) {
expectDBClientAndVreplicationQueries(t, []string{
"begin",
- "insert into tab1(id,val) values (1,'a')",
- "insert into tab1(id,val) values (2,'b')",
+ "insert into tab1(id,val) values (1,_binary'a'), (2,_binary'b')",
"/update _vt.vreplication set pos=",
"commit",
}, pos)
diff --git a/go/vt/vttablet/tabletmanager/vreplication/framework_test.go b/go/vt/vttablet/tabletmanager/vreplication/framework_test.go
index 12d20e3a867..12a05a69dbc 100644
--- a/go/vt/vttablet/tabletmanager/vreplication/framework_test.go
+++ b/go/vt/vttablet/tabletmanager/vreplication/framework_test.go
@@ -141,7 +141,6 @@ func setup(ctx context.Context) (func(), int) {
resetBinlogClient()
vttablet.InitVReplicationConfigDefaults()
- vttablet.DefaultVReplicationConfig.ExperimentalFlags = 0
// Engines cannot be initialized in testenv because it introduces circular dependencies.
streamerEngine = vstreamer.NewEngine(env.TabletEnv, env.SrvTopo, env.SchemaEngine, nil, env.Cells[0])
@@ -479,6 +478,10 @@ func (dbc *realDBClient) Close() {
dbc.conn.Close()
}
+func (dbc *realDBClient) IsClosed() bool {
+ return dbc.conn.IsClosed()
+}
+
func (dbc *realDBClient) ExecuteFetch(query string, maxrows int) (*sqltypes.Result, error) {
// Use Clone() because the contents of memory region referenced by
// string can change when clients (e.g. vcopier) use unsafe string methods.
diff --git a/go/vt/vttablet/tabletmanager/vreplication/replicator_plan.go b/go/vt/vttablet/tabletmanager/vreplication/replicator_plan.go
index aee7f5c8909..62d6166b5ca 100644
--- a/go/vt/vttablet/tabletmanager/vreplication/replicator_plan.go
+++ b/go/vt/vttablet/tabletmanager/vreplication/replicator_plan.go
@@ -111,19 +111,18 @@ func (rp *ReplicatorPlan) buildFromFields(tableName string, lastpk *sqltypes.Res
}
for _, field := range fields {
colName := sqlparser.NewIdentifierCI(field.Name)
- isGenerated := false
+ generated := false
+ // We have to loop over the columns in the plan as the columns between the
+ // source and target are not always 1 to 1.
for _, colInfo := range tpb.colInfos {
if !strings.EqualFold(colInfo.Name, field.Name) {
continue
}
if colInfo.IsGenerated {
- isGenerated = true
+ generated = true
}
break
}
- if isGenerated {
- continue
- }
cexpr := &colExpr{
colName: colName,
colType: field.Type,
@@ -133,6 +132,7 @@ func (rp *ReplicatorPlan) buildFromFields(tableName string, lastpk *sqltypes.Res
references: map[string]bool{
field.Name: true,
},
+ isGenerated: generated,
}
tpb.colExprs = append(tpb.colExprs, cexpr)
}
@@ -608,58 +608,50 @@ func valsEqual(v1, v2 sqltypes.Value) bool {
return v1.ToString() == v2.ToString()
}
-// AppendFromRow behaves like Append but takes a querypb.Row directly, assuming that
-// the fields in the row are in the same order as the placeholders in this query. The fields might include generated
-// columns which are dropped, by checking against skipFields, before binding the variables
-// note: there can be more fields than bind locations since extra columns might be requested from the source if not all
-// primary keys columns are present in the target table, for example. Also some values in the row may not correspond for
-// values from the database on the source: sum/count for aggregation queries, for example
+// AppendFromRow behaves like Append but takes a querypb.Row directly, assuming that the
+// fields in the row are in the same order as the placeholders in this query. The fields
+// might include generated columns which are dropped before binding the variables note:
+// there can be more fields than bind locations since extra columns might be requested
+// from the source if not all primary keys columns are present in the target table, for
+// example. Also some values in the row may not correspond for values from the database
+// on the source: sum/count for aggregation queries, for example.
func (tp *TablePlan) appendFromRow(buf *bytes2.Buffer, row *querypb.Row) error {
bindLocations := tp.BulkInsertValues.BindLocations()
if len(tp.Fields) < len(bindLocations) {
- return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "wrong number of fields: got %d fields for %d bind locations ",
+ return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "wrong number of fields: got %d fields for %d bind locations",
len(tp.Fields), len(bindLocations))
}
- type colInfo struct {
- typ querypb.Type
- length int64
- offset int64
- field *querypb.Field
- }
- rowInfo := make([]*colInfo, 0)
-
- offset := int64(0)
- for i, field := range tp.Fields { // collect info required for fields to be bound
- length := row.Lengths[i]
- if !tp.FieldsToSkip[strings.ToLower(field.Name)] {
- rowInfo = append(rowInfo, &colInfo{
- typ: field.Type,
- length: length,
- offset: offset,
- field: field,
- })
- }
- if length > 0 {
- offset += row.Lengths[i]
+ // Bind field values to locations.
+ var (
+ offset int64
+ offsetQuery int
+ fieldsIndex int
+ field *querypb.Field
+ )
+ for i, loc := range bindLocations {
+ field = tp.Fields[fieldsIndex]
+ length := row.Lengths[fieldsIndex]
+ for tp.FieldsToSkip[strings.ToLower(field.Name)] {
+ if length > 0 {
+ offset += length
+ }
+ fieldsIndex++
+ field = tp.Fields[fieldsIndex]
+ length = row.Lengths[fieldsIndex]
}
- }
- // bind field values to locations
- var offsetQuery int
- for i, loc := range bindLocations {
- col := rowInfo[i]
buf.WriteString(tp.BulkInsertValues.Query[offsetQuery:loc.Offset])
- typ := col.typ
+ typ := field.Type
switch typ {
case querypb.Type_TUPLE:
return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "unexpected Type_TUPLE for value %d", i)
case querypb.Type_JSON:
- if col.length < 0 { // An SQL NULL and not an actual JSON value
+ if length < 0 { // An SQL NULL and not an actual JSON value
buf.WriteString(sqltypes.NullStr)
} else { // A JSON value (which may be a JSON null literal value)
- buf2 := row.Values[col.offset : col.offset+col.length]
+ buf2 := row.Values[offset : offset+length]
vv, err := vjson.MarshalSQLValue(buf2)
if err != nil {
return err
@@ -667,16 +659,16 @@ func (tp *TablePlan) appendFromRow(buf *bytes2.Buffer, row *querypb.Row) error {
buf.WriteString(vv.RawStr())
}
default:
- if col.length < 0 {
+ if length < 0 {
// -1 means a null variable; serialize it directly
buf.WriteString(sqltypes.NullStr)
} else {
- raw := row.Values[col.offset : col.offset+col.length]
+ raw := row.Values[offset : offset+length]
var vv sqltypes.Value
- if conversion, ok := tp.ConvertCharset[col.field.Name]; ok && col.length > 0 {
+ if conversion, ok := tp.ConvertCharset[field.Name]; ok && length > 0 {
// Non-null string value, for which we have a charset conversion instruction
- out, err := tp.convertStringCharset(raw, conversion, col.field.Name)
+ out, err := tp.convertStringCharset(raw, conversion, field.Name)
if err != nil {
return err
}
@@ -689,6 +681,10 @@ func (tp *TablePlan) appendFromRow(buf *bytes2.Buffer, row *querypb.Row) error {
}
}
offsetQuery = loc.Offset + loc.Length
+ if length > 0 {
+ offset += length
+ }
+ fieldsIndex++
}
buf.WriteString(tp.BulkInsertValues.Query[offsetQuery:])
return nil
diff --git a/go/vt/vttablet/tabletmanager/vreplication/replicator_plan_test.go b/go/vt/vttablet/tabletmanager/vreplication/replicator_plan_test.go
index 644b4585914..09ace916f11 100644
--- a/go/vt/vttablet/tabletmanager/vreplication/replicator_plan_test.go
+++ b/go/vt/vttablet/tabletmanager/vreplication/replicator_plan_test.go
@@ -21,17 +21,18 @@ import (
"strings"
"testing"
- vttablet "vitess.io/vitess/go/vt/vttablet/common"
-
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
+ "vitess.io/vitess/go/bytes2"
"vitess.io/vitess/go/mysql/collations"
"vitess.io/vitess/go/sqltypes"
"vitess.io/vitess/go/vt/binlog/binlogplayer"
"vitess.io/vitess/go/vt/sqlparser"
binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata"
+ querypb "vitess.io/vitess/go/vt/proto/query"
+ vttablet "vitess.io/vitess/go/vt/vttablet/common"
)
type TestReplicatorPlan struct {
@@ -829,3 +830,137 @@ func TestBuildPlayerPlanExclude(t *testing.T) {
wantPlan, _ := json.Marshal(want)
assert.Equal(t, string(gotPlan), string(wantPlan))
}
+
+func TestAppendFromRow(t *testing.T) {
+ testCases := []struct {
+ name string
+ tp *TablePlan
+ row *querypb.Row
+ want string
+ wantErr string
+ }{
+ {
+ name: "simple",
+ tp: &TablePlan{
+ BulkInsertValues: sqlparser.BuildParsedQuery("values (%a, %a, %a)",
+ ":c1", ":c2", ":c3",
+ ),
+ Fields: []*querypb.Field{
+ {Name: "c1", Type: querypb.Type_INT32},
+ {Name: "c2", Type: querypb.Type_INT32},
+ {Name: "c3", Type: querypb.Type_INT32},
+ },
+ },
+ row: sqltypes.RowToProto3(
+ []sqltypes.Value{
+ sqltypes.NewInt64(1),
+ sqltypes.NewInt64(2),
+ sqltypes.NewInt64(3),
+ },
+ ),
+ want: "values (1, 2, 3)",
+ },
+ {
+ name: "too few fields",
+ tp: &TablePlan{
+ BulkInsertValues: sqlparser.BuildParsedQuery("values (%a, %a, %a)",
+ ":c1", ":c2", ":c3",
+ ),
+ Fields: []*querypb.Field{
+ {Name: "c1", Type: querypb.Type_INT32},
+ {Name: "c2", Type: querypb.Type_INT32},
+ },
+ },
+ wantErr: "wrong number of fields: got 2 fields for 3 bind locations",
+ },
+ {
+ name: "skip half",
+ tp: &TablePlan{
+ BulkInsertValues: sqlparser.BuildParsedQuery("values (%a, %a, %a, %a)",
+ ":c1", ":c2", ":c4", ":c8",
+ ),
+ Fields: []*querypb.Field{
+ {Name: "c1", Type: querypb.Type_INT32},
+ {Name: "c2", Type: querypb.Type_INT32},
+ {Name: "c3", Type: querypb.Type_INT32},
+ {Name: "c4", Type: querypb.Type_INT32},
+ {Name: "c5", Type: querypb.Type_INT32},
+ {Name: "c6", Type: querypb.Type_INT32},
+ {Name: "c7", Type: querypb.Type_INT32},
+ {Name: "c8", Type: querypb.Type_INT32},
+ },
+ FieldsToSkip: map[string]bool{
+ "c3": true,
+ "c5": true,
+ "c6": true,
+ "c7": true,
+ },
+ },
+ row: sqltypes.RowToProto3(
+ []sqltypes.Value{
+ sqltypes.NewInt64(1),
+ sqltypes.NewInt64(2),
+ sqltypes.NewInt64(3),
+ sqltypes.NewInt64(4),
+ sqltypes.NewInt64(5),
+ sqltypes.NewInt64(6),
+ sqltypes.NewInt64(7),
+ sqltypes.NewInt64(8),
+ },
+ ),
+ want: "values (1, 2, 4, 8)",
+ },
+ {
+ name: "skip all but one",
+ tp: &TablePlan{
+ BulkInsertValues: sqlparser.BuildParsedQuery("values (%a)",
+ ":c4",
+ ),
+ Fields: []*querypb.Field{
+ {Name: "c1", Type: querypb.Type_INT32},
+ {Name: "c2", Type: querypb.Type_INT32},
+ {Name: "c3", Type: querypb.Type_INT32},
+ {Name: "c4", Type: querypb.Type_INT32},
+ {Name: "c5", Type: querypb.Type_INT32},
+ {Name: "c6", Type: querypb.Type_INT32},
+ {Name: "c7", Type: querypb.Type_INT32},
+ {Name: "c8", Type: querypb.Type_INT32},
+ },
+ FieldsToSkip: map[string]bool{
+ "c1": true,
+ "c2": true,
+ "c3": true,
+ "c5": true,
+ "c6": true,
+ "c7": true,
+ "c8": true,
+ },
+ },
+ row: sqltypes.RowToProto3(
+ []sqltypes.Value{
+ sqltypes.NewInt64(1),
+ sqltypes.NewInt64(2),
+ sqltypes.NewInt64(3),
+ sqltypes.NewInt64(4),
+ sqltypes.NewInt64(5),
+ sqltypes.NewInt64(6),
+ sqltypes.NewInt64(7),
+ sqltypes.NewInt64(8),
+ },
+ ),
+ want: "values (4)",
+ },
+ }
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ bb := &bytes2.Buffer{}
+ err := tc.tp.appendFromRow(bb, tc.row)
+ if tc.wantErr != "" {
+ require.EqualError(t, err, tc.wantErr)
+ } else {
+ require.NoError(t, err)
+ require.Equal(t, tc.want, bb.String())
+ }
+ })
+ }
+}
diff --git a/go/vt/vttablet/tabletmanager/vreplication/table_plan_builder.go b/go/vt/vttablet/tabletmanager/vreplication/table_plan_builder.go
index 12afc3fec28..b8a86b94de5 100644
--- a/go/vt/vttablet/tabletmanager/vreplication/table_plan_builder.go
+++ b/go/vt/vttablet/tabletmanager/vreplication/table_plan_builder.go
@@ -80,10 +80,11 @@ type colExpr struct {
// references contains all the column names referenced in the expression.
references map[string]bool
- isGrouped bool
- isPK bool
- dataType string
- columnType string
+ isGrouped bool
+ isPK bool
+ isGenerated bool
+ dataType string
+ columnType string
}
// operation is the opcode for the colExpr.
@@ -360,7 +361,7 @@ func (tpb *tablePlanBuilder) generate() *TablePlan {
fieldsToSkip := make(map[string]bool)
for _, colInfo := range tpb.colInfos {
if colInfo.IsGenerated {
- fieldsToSkip[colInfo.Name] = true
+ fieldsToSkip[strings.ToLower(colInfo.Name)] = true
}
}
return &TablePlan{
@@ -694,7 +695,7 @@ func (tpb *tablePlanBuilder) generateInsertPart(buf *sqlparser.TrackedBuffer) *s
}
separator := ""
for _, cexpr := range tpb.colExprs {
- if tpb.isColumnGenerated(cexpr.colName) {
+ if cexpr.isGenerated {
continue
}
buf.Myprintf("%s%v", separator, cexpr.colName)
@@ -708,7 +709,7 @@ func (tpb *tablePlanBuilder) generateValuesPart(buf *sqlparser.TrackedBuffer, bv
bvf.mode = bvAfter
separator := "("
for _, cexpr := range tpb.colExprs {
- if tpb.isColumnGenerated(cexpr.colName) {
+ if cexpr.isGenerated {
continue
}
buf.Myprintf("%s", separator)
@@ -745,7 +746,7 @@ func (tpb *tablePlanBuilder) generateSelectPart(buf *sqlparser.TrackedBuffer, bv
buf.WriteString(" select ")
separator := ""
for _, cexpr := range tpb.colExprs {
- if tpb.isColumnGenerated(cexpr.colName) {
+ if cexpr.isGenerated {
continue
}
buf.Myprintf("%s", separator)
@@ -781,7 +782,7 @@ func (tpb *tablePlanBuilder) generateOnDupPart(buf *sqlparser.TrackedBuffer) *sq
if cexpr.isGrouped || cexpr.isPK {
continue
}
- if tpb.isColumnGenerated(cexpr.colName) {
+ if cexpr.isGenerated {
continue
}
buf.Myprintf("%s%v=", separator, cexpr.colName)
@@ -812,10 +813,7 @@ func (tpb *tablePlanBuilder) generateUpdateStatement() *sqlparser.ParsedQuery {
if cexpr.isPK {
tpb.pkIndices[i] = true
}
- if cexpr.isGrouped || cexpr.isPK {
- continue
- }
- if tpb.isColumnGenerated(cexpr.colName) {
+ if cexpr.isGrouped || cexpr.isPK || cexpr.isGenerated {
continue
}
buf.Myprintf("%s%v=", separator, cexpr.colName)
@@ -961,15 +959,6 @@ func (tpb *tablePlanBuilder) generatePKConstraint(buf *sqlparser.TrackedBuffer,
buf.WriteString(")")
}
-func (tpb *tablePlanBuilder) isColumnGenerated(col sqlparser.IdentifierCI) bool {
- for _, colInfo := range tpb.colInfos {
- if col.EqualString(colInfo.Name) && colInfo.IsGenerated {
- return true
- }
- }
- return false
-}
-
// bindvarFormatter is a dual mode formatter. Its behavior
// can be changed dynamically changed to generate bind vars
// for the 'before' row or 'after' row by setting its mode
diff --git a/go/vt/vttablet/tabletmanager/vreplication/table_plan_partial.go b/go/vt/vttablet/tabletmanager/vreplication/table_plan_partial.go
index cb8ac6dc515..85e0fd8e50f 100644
--- a/go/vt/vttablet/tabletmanager/vreplication/table_plan_partial.go
+++ b/go/vt/vttablet/tabletmanager/vreplication/table_plan_partial.go
@@ -50,10 +50,7 @@ func (tpb *tablePlanBuilder) generatePartialValuesPart(buf *sqlparser.TrackedBuf
bvf.mode = bvAfter
separator := "("
for ind, cexpr := range tpb.colExprs {
- if tpb.isColumnGenerated(cexpr.colName) {
- continue
- }
- if !isBitSet(dataColumns.Cols, ind) {
+ if cexpr.isGenerated || !isBitSet(dataColumns.Cols, ind) {
continue
}
buf.Myprintf("%s", separator)
@@ -84,7 +81,7 @@ func (tpb *tablePlanBuilder) generatePartialInsertPart(buf *sqlparser.TrackedBuf
buf.Myprintf("insert into %v(", tpb.name)
separator := ""
for ind, cexpr := range tpb.colExprs {
- if tpb.isColumnGenerated(cexpr.colName) {
+ if cexpr.isGenerated {
continue
}
if !isBitSet(dataColumns.Cols, ind) {
@@ -102,7 +99,7 @@ func (tpb *tablePlanBuilder) generatePartialSelectPart(buf *sqlparser.TrackedBuf
buf.WriteString(" select ")
separator := ""
for ind, cexpr := range tpb.colExprs {
- if tpb.isColumnGenerated(cexpr.colName) {
+ if cexpr.isGenerated {
continue
}
if !isBitSet(dataColumns.Cols, ind) {
@@ -141,17 +138,11 @@ func (tpb *tablePlanBuilder) createPartialUpdateQuery(dataColumns *binlogdatapb.
buf.Myprintf("update %v set ", tpb.name)
separator := ""
for i, cexpr := range tpb.colExprs {
- if cexpr.isPK {
- continue
- }
- if tpb.isColumnGenerated(cexpr.colName) {
- continue
- }
if int64(i) >= dataColumns.Count {
log.Errorf("Ran out of columns trying to generate query for %s", tpb.name.CompliantName())
return nil
}
- if !isBitSet(dataColumns.Cols, i) {
+ if cexpr.isPK || cexpr.isGenerated || !isBitSet(dataColumns.Cols, i) {
continue
}
buf.Myprintf("%s%v=", separator, cexpr.colName)
diff --git a/go/vt/vttablet/tabletmanager/vreplication/utils.go b/go/vt/vttablet/tabletmanager/vreplication/utils.go
index 230fe6a249c..67b52c56261 100644
--- a/go/vt/vttablet/tabletmanager/vreplication/utils.go
+++ b/go/vt/vttablet/tabletmanager/vreplication/utils.go
@@ -227,10 +227,29 @@ func isUnrecoverableError(err error) bool {
sqlerror.ERWrongParametersToProcedure,
sqlerror.ERWrongUsage,
sqlerror.ERWrongValue,
+ sqlerror.ERWrongParamcountToNativeFct,
sqlerror.ERVectorConversion,
sqlerror.ERWrongValueCountOnRow:
log.Errorf("Got unrecoverable error: %v", sqlErr)
return true
+ case sqlerror.ERErrorDuringCommit:
+ switch sqlErr.HaErrorCode() {
+ case
+ 0, // Not really a HA error.
+ sqlerror.HaErrLockDeadlock,
+ sqlerror.HaErrLockTableFull,
+ sqlerror.HaErrLockWaitTimeout,
+ sqlerror.HaErrNotInLockPartitions,
+ sqlerror.HaErrQueryInterrupted,
+ sqlerror.HaErrRolledBack,
+ sqlerror.HaErrTooManyConcurrentTrxs,
+ sqlerror.HaErrUndoRecTooBig:
+ // These are recoverable errors.
+ return false
+ default:
+ log.Errorf("Got unrecoverable error: %v", sqlErr)
+ return true
+ }
}
return false
}
diff --git a/go/vt/vttablet/tabletmanager/vreplication/utils_test.go b/go/vt/vttablet/tabletmanager/vreplication/utils_test.go
index 69a57c34341..15093e299fc 100644
--- a/go/vt/vttablet/tabletmanager/vreplication/utils_test.go
+++ b/go/vt/vttablet/tabletmanager/vreplication/utils_test.go
@@ -152,6 +152,16 @@ func TestIsUnrecoverableError(t *testing.T) {
err: sqlerror.NewSQLError(sqlerror.ERDataOutOfRange, "data out of range", "test"),
expected: true,
},
+ {
+ name: "SQL error with HaErrDiskFullNowait error",
+ err: sqlerror.NewSQLError(sqlerror.ERErrorDuringCommit, "unknown", "ERROR HY000: Got error 204 - 'No more room in disk' during COMMIT"),
+ expected: true,
+ },
+ {
+ name: "SQL error with HaErrLockDeadlock error",
+ err: sqlerror.NewSQLError(sqlerror.ERErrorDuringCommit, "unknown", "ERROR HY000: Got error 149 - 'Lock deadlock; Retry transaction' during COMMIT"),
+ expected: false,
+ },
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
diff --git a/go/vt/vttablet/tabletmanager/vreplication/vcopier_test.go b/go/vt/vttablet/tabletmanager/vreplication/vcopier_test.go
index ab91d480535..a7e4794ba76 100644
--- a/go/vt/vttablet/tabletmanager/vreplication/vcopier_test.go
+++ b/go/vt/vttablet/tabletmanager/vreplication/vcopier_test.go
@@ -174,11 +174,11 @@ func testPlayerCopyCharPK(t *testing.T) {
"/update _vt.vreplication set message='Picked source tablet.*",
"/insert into _vt.copy_state",
"/update _vt.vreplication set state='Copying'",
- "insert into dst(idc,val) values ('a\\0',1)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"idc" type:BINARY charset:63 flags:20611} rows:{lengths:2 values:"a\\\\x00"}'.*`,
- `update dst set val=3 where idc='a\0' and ('a\0') <= ('a\0')`,
- "insert into dst(idc,val) values ('c\\0',2)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"idc" type:BINARY charset:63 flags:20611} rows:{lengths:2 values:"c\\\\x00"}'.*`,
+ "insert into dst(idc,val) values (_binary'a\\0',1)",
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"idc" type:BINARY charset:63 flags:20611} rows:{lengths:2 values:"a\\\\x00"}'.*`,
+ `update dst set val=3 where idc=_binary'a\0' and (_binary'a\0') <= (_binary'a\0')`,
+ "insert into dst(idc,val) values (_binary'c\\0',2)",
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"idc" type:BINARY charset:63 flags:20611} rows:{lengths:2 values:"c\\\\x00"}'.*`,
"/delete cs, pca from _vt.copy_state as cs left join _vt.post_copy_action as pca on cs.vrepl_id=pca.vrepl_id and cs.table_name=pca.table_name.*dst",
"/update _vt.vreplication set state='Running",
), recvTimeout)
@@ -282,7 +282,7 @@ func testPlayerCopyVarcharPKCaseInsensitive(t *testing.T) {
"/update _vt.vreplication set state='Copying'",
// Copy mode.
"insert into dst(idc,val) values ('a',1)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"idc" type:VARCHAR charset:33 flags:20483} rows:{lengths:1 values:"a"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"idc" type:VARCHAR charset:33 flags:20483} rows:{lengths:1 values:"a"}'.*`,
// Copy-catchup mode.
`/insert into dst\(idc,val\) select 'B', 3 from dual where \( .* 'B' COLLATE .* \) <= \( .* 'a' COLLATE .* \)`,
).Then(func(expect qh.ExpectationSequencer) qh.ExpectationSequencer {
@@ -292,11 +292,11 @@ func testPlayerCopyVarcharPKCaseInsensitive(t *testing.T) {
// upd1 := expect.
upd1 := expect.Then(qh.Eventually(
"insert into dst(idc,val) values ('B',3)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"idc" type:VARCHAR charset:33 flags:20483} rows:{lengths:1 values:"B"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"idc" type:VARCHAR charset:33 flags:20483} rows:{lengths:1 values:"B"}'.*`,
))
upd2 := expect.Then(qh.Eventually(
"insert into dst(idc,val) values ('c',2)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"idc" type:VARCHAR charset:33 flags:20483} rows:{lengths:1 values:"c"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"idc" type:VARCHAR charset:33 flags:20483} rows:{lengths:1 values:"c"}'.*`,
))
upd1.Then(upd2.Eventually())
return upd2
@@ -336,7 +336,7 @@ func testPlayerCopyVarcharCompositePKCaseSensitiveCollation(t *testing.T) {
execStatements(t, []string{
"create table src(id int, idc varbinary(20), idc2 varbinary(20), val int, primary key(id,idc,idc2))",
- "insert into src values(1, 'a', 'a', 1), (1, 'c', 'c', 2)",
+ "insert into src values(1, _binary'a', _binary'a', 1), (1, _binary'c', _binary'c', 2)",
fmt.Sprintf("create table %s.dst(id int, idc varbinary(20), idc2 varbinary(20), val int, primary key(id,idc,idc2))", vrepldb),
})
defer execStatements(t, []string{
@@ -354,7 +354,7 @@ func testPlayerCopyVarcharCompositePKCaseSensitiveCollation(t *testing.T) {
}
// Insert a row with PK which is < the lastPK till now because of the utf8mb4 collation
execStatements(t, []string{
- "insert into src values(1, 'B', 'B', 3)",
+ "insert into src values(1, _binary'B', _binary'B', 3)",
})
// Wait for context to expire and then send the row.
// This will cause the copier to abort and go back to catchup mode.
@@ -404,13 +404,13 @@ func testPlayerCopyVarcharCompositePKCaseSensitiveCollation(t *testing.T) {
"/insert into _vt.copy_state",
"/update _vt.vreplication set state='Copying'",
// Copy mode.
- "insert into dst(id,idc,idc2,val) values (1,'a','a',1)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} fields:{name:"idc" type:VARBINARY charset:63 flags:20611} fields:{name:"idc2" type:VARBINARY charset:63 flags:20611} rows:{lengths:1 lengths:1 lengths:1 values:"1aa"}'.*`,
+ "insert into dst(id,idc,idc2,val) values (1,_binary'a',_binary'a',1)",
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"id" type:INT32 charset:63 flags:53251} fields:{name:"idc" type:VARBINARY charset:63 flags:20611} fields:{name:"idc2" type:VARBINARY charset:63 flags:20611} rows:{lengths:1 lengths:1 lengths:1 values:"1aa"}'.*`,
// Copy-catchup mode.
- `insert into dst(id,idc,idc2,val) select 1, 'B', 'B', 3 from dual where (1,'B','B') <= (1,'a','a')`,
+ `insert into dst(id,idc,idc2,val) select 1, _binary'B', _binary'B', 3 from dual where (1,_binary'B',_binary'B') <= (1,_binary'a',_binary'a')`,
// Copy mode.
- "insert into dst(id,idc,idc2,val) values (1,'c','c',2)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} fields:{name:"idc" type:VARBINARY charset:63 flags:20611} fields:{name:"idc2" type:VARBINARY charset:63 flags:20611} rows:{lengths:1 lengths:1 lengths:1 values:"1cc"}'.*`,
+ "insert into dst(id,idc,idc2,val) values (1,_binary'c',_binary'c',2)",
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"id" type:INT32 charset:63 flags:53251} fields:{name:"idc" type:VARBINARY charset:63 flags:20611} fields:{name:"idc2" type:VARBINARY charset:63 flags:20611} rows:{lengths:1 lengths:1 lengths:1 values:"1cc"}'.*`,
// Wrap-up.
"/delete cs, pca from _vt.copy_state as cs left join _vt.post_copy_action as pca on cs.vrepl_id=pca.vrepl_id and cs.table_name=pca.table_name.*dst",
"/update _vt.vreplication set state='Running'",
@@ -494,7 +494,7 @@ func testPlayerCopyTablesWithFK(t *testing.T) {
// Inserts may happen out-of-order. Update happen in-order.
"begin",
"insert into dst1(id,id2) values (1,1), (2,2)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
"commit",
)).Then(qh.Immediately(
"set @@session.foreign_key_checks=0",
@@ -515,7 +515,7 @@ func testPlayerCopyTablesWithFK(t *testing.T) {
// copy dst2
"begin",
"insert into dst2(id,id2) values (1,21), (2,22)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
"commit",
)).Then(qh.Immediately(
"set @@session.foreign_key_checks=0",
@@ -560,13 +560,13 @@ func testPlayerCopyTables(t *testing.T) {
execStatements(t, []string{
"create table ast1(id int, primary key(id))",
- "create table src1(id int, val varbinary(128), d decimal(8,0), j json, primary key(id))",
+ "create table src1(id int, val varchar(128), d decimal(8,0), j json, primary key(id))",
"insert into src1 values(2, 'bbb', 1, '{\"foo\": \"bar\"}'), (1, 'aaa', 0, JSON_ARRAY(123456789012345678901234567890, \"abcd\")), (3, 'ccc', 2, 'null'), (4, 'ddd', 3, '{\"name\": \"matt\", \"size\": null}'), (5, 'eee', 4, null)",
fmt.Sprintf("create table %s.ast1(id int, primary key(id))", vrepldb),
- fmt.Sprintf("create table %s.dst1(id int, val varbinary(128), val2 varbinary(128), d decimal(8,0), j json, primary key(id))", vrepldb),
- "create table yes(id int, val varbinary(128), primary key(id))",
- fmt.Sprintf("create table %s.yes(id int, val varbinary(128), primary key(id))", vrepldb),
- "create table no(id int, val varbinary(128), primary key(id))",
+ fmt.Sprintf("create table %s.dst1(id int, val varchar(128), val2 varchar(128), d decimal(8,0), j json, primary key(id))", vrepldb),
+ "create table yes(id int, val varchar(128), primary key(id))",
+ fmt.Sprintf("create table %s.yes(id int, val varchar(128), primary key(id))", vrepldb),
+ "create table no(id int, val varchar(128), primary key(id))",
})
defer execStatements(t, []string{
"drop table ast1",
@@ -628,7 +628,7 @@ func testPlayerCopyTables(t *testing.T) {
"commit",
"begin",
"insert into dst1(id,val,val2,d,j) values (1,'aaa','aaa',0,JSON_ARRAY(123456789012345678901234567890, _utf8mb4'abcd')), (2,'bbb','bbb',1,JSON_OBJECT(_utf8mb4'foo', _utf8mb4'bar')), (3,'ccc','ccc',2,CAST(_utf8mb4'null' as JSON)), (4,'ddd','ddd',3,JSON_OBJECT(_utf8mb4'name', _utf8mb4'matt', _utf8mb4'size', null)), (5,'eee','eee',4,null)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"5"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"5"}'.*`,
"commit",
// copy of dst1 is done: delete from copy_state.
"/delete cs, pca from _vt.copy_state as cs left join _vt.post_copy_action as pca on cs.vrepl_id=pca.vrepl_id and cs.table_name=pca.table_name.*dst1",
@@ -684,6 +684,14 @@ func testPlayerCopyBigTable(t *testing.T) {
reset := vstreamer.AdjustPacketSize(1)
defer reset()
+ // The test is written to match the behavior w/o
+ // VReplicationExperimentalFlagOptimizeInserts enabled.
+ origExperimentalFlags := vttablet.DefaultVReplicationConfig.ExperimentalFlags
+ vttablet.DefaultVReplicationConfig.ExperimentalFlags = 0
+ defer func() {
+ vttablet.DefaultVReplicationConfig.ExperimentalFlags = origExperimentalFlags
+ }()
+
savedCopyPhaseDuration := vttablet.DefaultVReplicationConfig.CopyPhaseDuration
// copyPhaseDuration should be low enough to have time to send one row.
vttablet.DefaultVReplicationConfig.CopyPhaseDuration = 500 * time.Millisecond
@@ -695,9 +703,9 @@ func testPlayerCopyBigTable(t *testing.T) {
defer func() { waitRetryTime = savedWaitRetryTime }()
execStatements(t, []string{
- "create table src(id int, val varbinary(128), primary key(id))",
+ "create table src(id int, val varchar(128), primary key(id))",
"insert into src values(1, 'aaa'), (2, 'bbb')",
- fmt.Sprintf("create table %s.dst(id int, val varbinary(128), primary key(id))", vrepldb),
+ fmt.Sprintf("create table %s.dst(id int, val varchar(128), primary key(id))", vrepldb),
})
defer execStatements(t, []string{
"drop table src",
@@ -764,7 +772,7 @@ func testPlayerCopyBigTable(t *testing.T) {
// The first fast-forward has no starting point. So, it just saves the current position.
"/update _vt.vreplication set state='Copying'",
"insert into dst(id,val) values (1,'aaa')",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"1"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"1"}'.*`,
// The next catchup executes the new row insert, but will be a no-op.
"insert into dst(id,val) select 3, 'ccc' from dual where (3) <= (1)",
// fastForward has nothing to add. Just saves position.
@@ -774,12 +782,12 @@ func testPlayerCopyBigTable(t *testing.T) {
).Then(func(expect qh.ExpectationSequencer) qh.ExpectationSequencer {
ins1 := expect.Then(qh.Eventually("insert into dst(id,val) values (2,'bbb')"))
upd1 := ins1.Then(qh.Eventually(
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
))
// Third row copied without going back to catchup state.
ins3 := expect.Then(qh.Eventually("insert into dst(id,val) values (3,'ccc')"))
upd3 := ins3.Then(qh.Eventually(
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"3"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"3"}'.*`,
))
upd1.Then(upd3.Eventually())
return upd3
@@ -814,6 +822,14 @@ func testPlayerCopyWildcardRule(t *testing.T) {
reset := vstreamer.AdjustPacketSize(1)
defer reset()
+ // The test is written to match the behavior w/o
+ // VReplicationExperimentalFlagOptimizeInserts enabled.
+ origExperimentalFlags := vttablet.DefaultVReplicationConfig.ExperimentalFlags
+ vttablet.DefaultVReplicationConfig.ExperimentalFlags = 0
+ defer func() {
+ vttablet.DefaultVReplicationConfig.ExperimentalFlags = origExperimentalFlags
+ }()
+
savedCopyPhaseDuration := vttablet.DefaultVReplicationConfig.CopyPhaseDuration
// copyPhaseDuration should be low enough to have time to send one row.
vttablet.DefaultVReplicationConfig.CopyPhaseDuration = 500 * time.Millisecond
@@ -825,9 +841,9 @@ func testPlayerCopyWildcardRule(t *testing.T) {
defer func() { waitRetryTime = savedWaitRetryTime }()
execStatements(t, []string{
- "create table src(id int, val varbinary(128), primary key(id))",
+ "create table src(id int, val varchar(128), primary key(id))",
"insert into src values(1, 'aaa'), (2, 'bbb')",
- fmt.Sprintf("create table %s.src(id int, val varbinary(128), primary key(id))", vrepldb),
+ fmt.Sprintf("create table %s.src(id int, val varchar(128), primary key(id))", vrepldb),
})
defer execStatements(t, []string{
"drop table src",
@@ -893,7 +909,7 @@ func testPlayerCopyWildcardRule(t *testing.T) {
"/update _vt.vreplication set state='Copying'",
// The first fast-forward has no starting point. So, it just saves the current position.
"insert into src(id,val) values (1,'aaa')",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"1"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"1"}'.*`,
// The next catchup executes the new row insert, but will be a no-op.
"insert into src(id,val) select 3, 'ccc' from dual where (3) <= (1)",
// fastForward has nothing to add. Just saves position.
@@ -903,12 +919,12 @@ func testPlayerCopyWildcardRule(t *testing.T) {
).Then(func(expect qh.ExpectationSequencer) qh.ExpectationSequencer {
ins1 := expect.Then(qh.Eventually("insert into src(id,val) values (2,'bbb')"))
upd1 := ins1.Then(qh.Eventually(
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
))
// Third row copied without going back to catchup state.
ins3 := expect.Then(qh.Eventually("insert into src(id,val) values (3,'ccc')"))
upd3 := ins3.Then(qh.Eventually(
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"3"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"3"}'.*`,
))
upd1.Then(upd3.Eventually())
return upd3
@@ -943,19 +959,19 @@ func testPlayerCopyTableContinuation(t *testing.T) {
// src1 is initialized as partially copied.
// lastpk will be initialized at (6,6) later below.
// dst1 only copies id1 and val. This will allow us to test for correctness if id2 changes in the source.
- "create table src1(id1 int, id2 int, val varbinary(128), primary key(id1, id2))",
+ "create table src1(id1 int, id2 int, val varchar(128), primary key(id1, id2))",
"insert into src1 values(2,2,'no change'), (3,3,'update'), (4,4,'delete'), (5,5,'move within'), (6,6,'move out'), (8,8,'no change'), (9,9,'delete'), (10,10,'update'), (11,11,'move in')",
- fmt.Sprintf("create table %s.dst1(id int, val varbinary(128), primary key(id))", vrepldb),
+ fmt.Sprintf("create table %s.dst1(id int, val varchar(128), primary key(id))", vrepldb),
fmt.Sprintf("insert into %s.dst1 values(2,'no change'), (3,'update'), (4,'delete'), (5,'move within'), (6,'move out')", vrepldb),
// copied is initialized as fully copied
- "create table copied(id int, val varbinary(128), primary key(id))",
+ "create table copied(id int, val varchar(128), primary key(id))",
"insert into copied values(1,'aaa')",
- fmt.Sprintf("create table %s.copied(id int, val varbinary(128), primary key(id))", vrepldb),
+ fmt.Sprintf("create table %s.copied(id int, val varchar(128), primary key(id))", vrepldb),
fmt.Sprintf("insert into %s.copied values(1,'aaa')", vrepldb),
// not_copied yet to be copied.
- "create table not_copied(id int, val varbinary(128), primary key(id))",
+ "create table not_copied(id int, val varchar(128), primary key(id))",
"insert into not_copied values(1,'aaa')",
- fmt.Sprintf("create table %s.not_copied(id int, val varbinary(128), primary key(id))", vrepldb),
+ fmt.Sprintf("create table %s.not_copied(id int, val varchar(128), primary key(id))", vrepldb),
})
defer execStatements(t, []string{
"drop table src1",
@@ -1067,13 +1083,13 @@ func testPlayerCopyTableContinuation(t *testing.T) {
).Then(qh.Immediately(
"insert into dst1(id,val) values (7,'insert out'), (8,'no change'), (10,'updated'), (12,'move out')",
)).Then(qh.Eventually(
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id1" type:INT32 charset:63 flags:53251} fields:{name:"id2" type:INT32 charset:63 flags:53251} rows:{lengths:2 lengths:1 values:"126"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"id1" type:INT32 charset:63 flags:53251} fields:{name:"id2" type:INT32 charset:63 flags:53251} rows:{lengths:2 lengths:1 values:"126"}'.*`,
)).Then(qh.Immediately(
"/delete cs, pca from _vt.copy_state as cs left join _vt.post_copy_action as pca on cs.vrepl_id=pca.vrepl_id and cs.table_name=pca.table_name.*dst1",
"insert into not_copied(id,val) values (1,'bbb')",
)).Then(qh.Eventually(
// Copy again. There should be no events for catchup.
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"1"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"1"}'.*`,
)).Then(qh.Immediately(
"/delete cs, pca from _vt.copy_state as cs left join _vt.post_copy_action as pca on cs.vrepl_id=pca.vrepl_id and cs.table_name=pca.table_name.*not_copied",
"/update _vt.vreplication set state='Running'",
@@ -1118,9 +1134,9 @@ func testPlayerCopyWildcardTableContinuation(t *testing.T) {
defer deleteTablet(addTablet(100))
execStatements(t, []string{
- "create table src(id int, val varbinary(128), primary key(id))",
+ "create table src(id int, val varchar(128), primary key(id))",
"insert into src values(2,'copied'), (3,'uncopied')",
- fmt.Sprintf("create table %s.dst(id int, val varbinary(128), primary key(id))", vrepldb),
+ fmt.Sprintf("create table %s.dst(id int, val varchar(128), primary key(id))", vrepldb),
fmt.Sprintf("insert into %s.dst values(2,'copied')", vrepldb),
})
defer execStatements(t, []string{
@@ -1218,9 +1234,9 @@ func TestPlayerCopyWildcardTableContinuationWithOptimizeInserts(t *testing.T) {
defer deleteTablet(addTablet(100))
execStatements(t, []string{
- "create table src(id int, val varbinary(128), primary key(id))",
+ "create table src(id int, val varchar(128), primary key(id))",
"insert into src values(2,'copied'), (3,'uncopied')",
- fmt.Sprintf("create table %s.dst(id int, val varbinary(128), primary key(id))", vrepldb),
+ fmt.Sprintf("create table %s.dst(id int, val varchar(128), primary key(id))", vrepldb),
fmt.Sprintf("insert into %s.dst values(2,'copied')", vrepldb),
})
defer execStatements(t, []string{
@@ -1344,9 +1360,9 @@ func testPlayerCopyTablesStopAfterCopy(t *testing.T) {
defer deleteTablet(addTablet(100))
execStatements(t, []string{
- "create table src1(id int, val varbinary(128), primary key(id))",
+ "create table src1(id int, val varchar(128), primary key(id))",
"insert into src1 values(2, 'bbb'), (1, 'aaa')",
- fmt.Sprintf("create table %s.dst1(id int, val varbinary(128), primary key(id))", vrepldb),
+ fmt.Sprintf("create table %s.dst1(id int, val varchar(128), primary key(id))", vrepldb),
})
defer execStatements(t, []string{
"drop table src1",
@@ -1393,7 +1409,7 @@ func testPlayerCopyTablesStopAfterCopy(t *testing.T) {
).Then(qh.Eventually(
"begin",
"insert into dst1(id,val) values (1,'aaa'), (2,'bbb')",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
"commit",
)).Then(qh.Immediately(
// copy of dst1 is done: delete from copy_state.
@@ -1423,13 +1439,13 @@ func testPlayerCopyTablesGIPK(t *testing.T) {
execStatements(t, []string{
"SET @@session.sql_generate_invisible_primary_key=ON;",
- "create table src1(val varbinary(128))",
+ "create table src1(val varchar(128))",
"insert into src1 values('aaa'), ('bbb')",
- "create table src2(val varbinary(128))",
+ "create table src2(val varchar(128))",
"insert into src2 values('aaa'), ('bbb')",
- fmt.Sprintf("create table %s.dst1(val varbinary(128))", vrepldb),
+ fmt.Sprintf("create table %s.dst1(val varchar(128))", vrepldb),
"SET @@session.sql_generate_invisible_primary_key=OFF;",
- fmt.Sprintf("create table %s.dst2(my_row_id int, val varbinary(128), primary key(my_row_id))", vrepldb),
+ fmt.Sprintf("create table %s.dst2(my_row_id int, val varchar(128), primary key(my_row_id))", vrepldb),
})
defer execStatements(t, []string{
"drop table src1",
@@ -1481,7 +1497,7 @@ func testPlayerCopyTablesGIPK(t *testing.T) {
).Then(qh.Eventually(
"begin",
"insert into dst1(my_row_id,val) values (1,'aaa'), (2,'bbb')",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"my_row_id" type:UINT64 charset:63 flags:49699} rows:{lengths:1 values:"2"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"my_row_id" type:UINT64 charset:63 flags:49699} rows:{lengths:1 values:"2"}'.*`,
"commit",
)).Then(qh.Immediately(
// copy of dst1 is done: delete from copy_state.
@@ -1492,7 +1508,7 @@ func testPlayerCopyTablesGIPK(t *testing.T) {
"commit",
"begin",
"insert into dst2(my_row_id,val) values (1,'aaa'), (2,'bbb')",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"my_row_id" type:UINT64 charset:63 flags:49699} rows:{lengths:1 values:"2"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"my_row_id" type:UINT64 charset:63 flags:49699} rows:{lengths:1 values:"2"}'.*`,
"commit",
)).Then(qh.Immediately(
// copy of dst2 is done: delete from copy_state.
@@ -1519,9 +1535,9 @@ func testPlayerCopyTableCancel(t *testing.T) {
defer deleteTablet(addTablet(100))
execStatements(t, []string{
- "create table src1(id int, val varbinary(128), primary key(id))",
+ "create table src1(id int, val varchar(128), primary key(id))",
"insert into src1 values(2, 'bbb'), (1, 'aaa')",
- fmt.Sprintf("create table %s.dst1(id int, val varbinary(128), primary key(id))", vrepldb),
+ fmt.Sprintf("create table %s.dst1(id int, val varchar(128), primary key(id))", vrepldb),
})
defer execStatements(t, []string{
"drop table src1",
@@ -1583,7 +1599,7 @@ func testPlayerCopyTableCancel(t *testing.T) {
).Then(qh.Eventually(
"begin",
"insert into dst1(id,val) values (1,'aaa'), (2,'bbb')",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
"commit",
)).Then(qh.Immediately(
// copy of dst1 is done: delete from copy_state.
@@ -1606,12 +1622,12 @@ func testPlayerCopyTablesWithGeneratedColumn(t *testing.T) {
defer deleteTablet(addTablet(100))
execStatements(t, []string{
- "create table src1(id int, val varbinary(128), val2 varbinary(128) as (concat(id, val)), val3 varbinary(128) as (concat(val, id)), id2 int, primary key(id))",
+ "create table src1(id int, val varchar(128), val2 varchar(128) as (concat(id, val)), val3 varchar(128) as (concat(val, id)), id2 int, primary key(id))",
"insert into src1(id, val, id2) values(2, 'bbb', 20), (1, 'aaa', 10)",
- fmt.Sprintf("create table %s.dst1(id int, val varbinary(128), val2 varbinary(128) as (concat(id, val)), val3 varbinary(128), id2 int, primary key(id))", vrepldb),
- "create table src2(id int, val varbinary(128), val2 varbinary(128) as (concat(id, val)), val3 varbinary(128) as (concat(val, id)), id2 int, primary key(id))",
+ fmt.Sprintf("create table %s.dst1(id int, val varchar(128), val2 varchar(128) as (concat(id, val)), val3 varchar(128), id2 int, primary key(id))", vrepldb),
+ "create table src2(id int, val varchar(128), val2 varchar(128) as (concat(id, val)), val3 varchar(128) as (concat(val, id)), id2 int, primary key(id))",
"insert into src2(id, val, id2) values(2, 'bbb', 20), (1, 'aaa', 10)",
- fmt.Sprintf("create table %s.dst2(val3 varbinary(128), val varbinary(128), id2 int)", vrepldb),
+ fmt.Sprintf("create table %s.dst2(val3 varchar(128), val varchar(128), id2 int)", vrepldb),
})
defer execStatements(t, []string{
"drop table src1",
@@ -1656,11 +1672,11 @@ func testPlayerCopyTablesWithGeneratedColumn(t *testing.T) {
"/update _vt.vreplication set state",
// The first fast-forward has no starting point. So, it just saves the current position.
"insert into dst1(id,val,val3,id2) values (1,'aaa','aaa1',10), (2,'bbb','bbb2',20)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
// copy of dst1 is done: delete from copy_state.
"/delete cs, pca from _vt.copy_state as cs left join _vt.post_copy_action as pca on cs.vrepl_id=pca.vrepl_id and cs.table_name=pca.table_name.*dst1",
"insert into dst2(val3,val,id2) values ('aaa1','aaa',10), ('bbb2','bbb',20)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
// copy of dst2 is done: delete from copy_state.
"/delete cs, pca from _vt.copy_state as cs left join _vt.post_copy_action as pca on cs.vrepl_id=pca.vrepl_id and cs.table_name=pca.table_name.*dst2",
"/update _vt.vreplication set state",
@@ -1737,7 +1753,7 @@ func testCopyTablesWithInvalidDates(t *testing.T) {
).Then(qh.Eventually(
"begin",
"insert into dst1(id,dt) values (1,'2020-01-12'), (2,'0000-00-00')",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"id" type:INT32 charset:63 flags:53251} rows:{lengths:1 values:"2"}'.*`,
"commit",
)).Then(qh.Immediately(
// copy of dst1 is done: delete from copy_state.
@@ -1827,7 +1843,7 @@ func testCopyInvisibleColumns(t *testing.T) {
"/update _vt.vreplication set state='Copying'",
// The first fast-forward has no starting point. So, it just saves the current position.
"insert into dst1(id,id2,inv1,inv2) values (1,10,100,1000), (2,20,200,2000)",
- `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \('fields:{name:"id" type:INT32 charset:63 flags:53251} fields:{name:"inv1" type:INT32 charset:63 flags:53251} rows:{lengths:1 lengths:3 values:"2200"}'.*`,
+ `/insert into _vt.copy_state \(lastpk, vrepl_id, table_name\) values \(_binary'fields:{name:"id" type:INT32 charset:63 flags:53251} fields:{name:"inv1" type:INT32 charset:63 flags:53251} rows:{lengths:1 lengths:3 values:"2200"}'.*`,
// copy of dst1 is done: delete from copy_state.
"/delete cs, pca from _vt.copy_state as cs left join _vt.post_copy_action as pca on cs.vrepl_id=pca.vrepl_id and cs.table_name=pca.table_name.*dst1",
"/update _vt.vreplication set state='Running'",
diff --git a/go/vt/vttablet/tabletmanager/vreplication/vdbclient.go b/go/vt/vttablet/tabletmanager/vreplication/vdbclient.go
index b8339cdf874..63538be881d 100644
--- a/go/vt/vttablet/tabletmanager/vreplication/vdbclient.go
+++ b/go/vt/vttablet/tabletmanager/vreplication/vdbclient.go
@@ -30,6 +30,8 @@ import (
"vitess.io/vitess/go/vt/vterrors"
)
+const beginStmtLen = int64(len("begin;"))
+
// vdbClient is a wrapper on binlogplayer.DBClient.
// It allows us to retry a failed transactions on lock errors.
type vdbClient struct {
@@ -56,16 +58,19 @@ func (vc *vdbClient) Begin() error {
if vc.InTransaction {
return nil
}
- if err := vc.DBClient.Begin(); err != nil {
- return err
+ if vc.maxBatchSize > 0 {
+ // We are batching the contents of the transaction, which
+ // starts with the BEGIN and ends with the COMMIT, so we
+ // do not send a BEGIN down the wire ahead of time.
+ vc.queriesPos = int64(len(vc.queries))
+ vc.batchSize = beginStmtLen
+ } else {
+ // We're not batching so we start the transaction here
+ // by sending the BEGIN down the wire.
+ if err := vc.DBClient.Begin(); err != nil {
+ return err
+ }
}
-
- // If we're batching, we only batch the contents of the
- // transaction, which starts with the begin and ends with
- // the commit.
- vc.queriesPos = int64(len(vc.queries))
- vc.batchSize = 6 // begin and semicolon
-
vc.queries = append(vc.queries, "begin")
vc.InTransaction = true
vc.startTime = time.Now()
@@ -171,7 +176,7 @@ func (vc *vdbClient) Execute(query string) (*sqltypes.Result, error) {
func (vc *vdbClient) ExecuteWithRetry(ctx context.Context, query string) (*sqltypes.Result, error) {
qr, err := vc.Execute(query)
for err != nil {
- if sqlErr, ok := err.(*sqlerror.SQLError); ok && sqlErr.Number() == sqlerror.ERLockDeadlock || sqlErr.Number() == sqlerror.ERLockWaitTimeout {
+ if sqlErr, ok := err.(*sqlerror.SQLError); ok && (sqlErr.Number() == sqlerror.ERLockDeadlock || sqlErr.Number() == sqlerror.ERLockWaitTimeout) {
log.Infof("retryable error: %v, waiting for %v and retrying", sqlErr, dbLockRetryDelay)
if err := vc.Rollback(); err != nil {
return nil, err
diff --git a/go/vt/vttablet/tabletmanager/vreplication/vplayer.go b/go/vt/vttablet/tabletmanager/vreplication/vplayer.go
index db2f3f341ac..98e36119622 100644
--- a/go/vt/vttablet/tabletmanager/vreplication/vplayer.go
+++ b/go/vt/vttablet/tabletmanager/vreplication/vplayer.go
@@ -133,7 +133,8 @@ func newVPlayer(vr *vreplicator, settings binlogplayer.VRSettings, copyState map
return vr.dbClient.Commit()
}
batchMode := false
- if vr.workflowConfig.ExperimentalFlags&vttablet.VReplicationExperimentalFlagVPlayerBatching != 0 {
+ // We only do batching in the running/replicating phase.
+ if len(copyState) == 0 && vr.workflowConfig.ExperimentalFlags&vttablet.VReplicationExperimentalFlagVPlayerBatching != 0 {
batchMode = true
}
if batchMode {
diff --git a/go/vt/vttablet/tabletmanager/vreplication/vplayer_flaky_test.go b/go/vt/vttablet/tabletmanager/vreplication/vplayer_flaky_test.go
index 420134ab7e3..50d93e60e5a 100644
--- a/go/vt/vttablet/tabletmanager/vreplication/vplayer_flaky_test.go
+++ b/go/vt/vttablet/tabletmanager/vreplication/vplayer_flaky_test.go
@@ -53,11 +53,11 @@ func TestPlayerGeneratedInvisiblePrimaryKey(t *testing.T) {
execStatements(t, []string{
"SET @@session.sql_generate_invisible_primary_key=ON;",
- "create table t1(val varbinary(128))",
- fmt.Sprintf("create table %s.t1(val varbinary(128))", vrepldb),
- "create table t2(val varbinary(128))",
+ "create table t1(val varchar(128))",
+ fmt.Sprintf("create table %s.t1(val varchar(128))", vrepldb),
+ "create table t2(val varchar(128))",
"SET @@session.sql_generate_invisible_primary_key=OFF;",
- fmt.Sprintf("create table %s.t2(my_row_id int, val varbinary(128), primary key(my_row_id))", vrepldb),
+ fmt.Sprintf("create table %s.t2(my_row_id int, val varchar(128), primary key(my_row_id))", vrepldb),
})
defer execStatements(t, []string{
"drop table t1",
@@ -235,8 +235,8 @@ func TestVReplicationTimeUpdated(t *testing.T) {
ctx := context.Background()
defer deleteTablet(addTablet(100))
execStatements(t, []string{
- "create table t1(id int, val varbinary(128), primary key(id))",
- fmt.Sprintf("create table %s.t1(id int, val varbinary(128), primary key(id))", vrepldb),
+ "create table t1(id int, val varchar(128), primary key(id))",
+ fmt.Sprintf("create table %s.t1(id int, val varchar(128), primary key(id))", vrepldb),
})
defer execStatements(t, []string{
"drop table t1",
@@ -340,14 +340,14 @@ func TestCharPK(t *testing.T) {
data [][]string
}{{ // binary(2)
input: "insert into t1 values(1, 'a')",
- output: "insert into t1(id,val) values (1,'a\\0')",
+ output: "insert into t1(id,val) values (1,_binary'a\\0')",
table: "t1",
data: [][]string{
{"1", "a\000"},
},
}, {
input: "update t1 set id = 2 where val = 'a\000'",
- output: "update t1 set id=2 where val='a\\0'",
+ output: "update t1 set id=2 where val=_binary'a\\0'",
table: "t1",
data: [][]string{
{"2", "a\000"},
@@ -368,14 +368,14 @@ func TestCharPK(t *testing.T) {
},
}, { // varbinary(2)
input: "insert into t3 values(1, 'a')",
- output: "insert into t3(id,val) values (1,'a')",
+ output: "insert into t3(id,val) values (1,_binary'a')",
table: "t3",
data: [][]string{
{"1", "a"},
},
}, {
input: "update t3 set id = 2 where val = 'a'",
- output: "update t3 set id=2 where val='a'",
+ output: "update t3 set id=2 where val=_binary'a'",
table: "t3",
data: [][]string{
{"2", "a"},
@@ -628,7 +628,6 @@ func TestPlayerStatementModeWithFilterAndErrorHandling(t *testing.T) {
// It does not work when filter is enabled
output := qh.Expect(
- "begin",
"rollback",
fmt.Sprintf("/update _vt.vreplication set message='%s", expectedMsg),
)
@@ -748,7 +747,7 @@ func TestPlayerFilters(t *testing.T) {
Filter: "select id1, val from src5 where val = 'abc'",
}, {
Match: "dst_charset",
- Filter: "select id1, concat(substr(_utf8mb4 val collate utf8mb4_bin,1,1),'abcxyz') val, concat(substr(_utf8mb4 val collate utf8mb4_bin,1,1),'abcxyz') val2 from src_charset",
+ Filter: "select id1, concat(substr(CONVERT(val USING utf8mb4) COLLATE utf8mb4_bin,1,1),'abcxyz') val, concat(substr(CONVERT(val USING utf8mb4) COLLATE utf8mb4_bin,1,1),'abcxyz') val2 from src_charset",
}},
}
bls := &binlogdatapb.BinlogSource{
@@ -772,7 +771,7 @@ func TestPlayerFilters(t *testing.T) {
input: "insert into src1 values(1, 'aaa')",
output: qh.Expect(
"begin",
- "insert into dst1(id,val) values (1,'aaa')",
+ "insert into dst1(id,val) values (1,_binary'aaa')",
"/update _vt.vreplication set pos=",
"commit",
),
@@ -782,7 +781,7 @@ func TestPlayerFilters(t *testing.T) {
},
logs: []LogExpectation{
{"FIELD", "/src1.*id.*INT32.*val.*VARBINARY.*"},
- {"ROWCHANGE", "insert into dst1(id,val) values (1,'aaa')"},
+ {"ROWCHANGE", "insert into dst1(id,val) values (1,_binary'aaa')"},
{"ROW", "/src1.*3.*1aaa.*"},
},
}, {
@@ -790,7 +789,7 @@ func TestPlayerFilters(t *testing.T) {
input: "update src1 set val='bbb'",
output: qh.Expect(
"begin",
- "update dst1 set val='bbb' where id=1",
+ "update dst1 set val=_binary'bbb' where id=1",
"/update _vt.vreplication set pos=",
"commit",
),
@@ -799,7 +798,7 @@ func TestPlayerFilters(t *testing.T) {
{"1", "bbb"},
},
logs: []LogExpectation{
- {"ROWCHANGE", "update dst1 set val='bbb' where id=1"},
+ {"ROWCHANGE", "update dst1 set val=_binary'bbb' where id=1"},
{"ROW", "/src1.*3.*1aaa.*"},
},
}, {
@@ -869,7 +868,7 @@ func TestPlayerFilters(t *testing.T) {
input: "insert into src3 values(1, 'aaa')",
output: qh.Expect(
"begin",
- "insert ignore into dst3(id,val) values (1,'aaa')",
+ "insert ignore into dst3(id,val) values (1,_binary'aaa')",
"/update _vt.vreplication set pos=",
"commit",
),
@@ -882,7 +881,7 @@ func TestPlayerFilters(t *testing.T) {
input: "update src3 set val='bbb'",
output: qh.Expect(
"begin",
- "insert ignore into dst3(id,val) values (1,'bbb')",
+ "insert ignore into dst3(id,val) values (1,_binary'bbb')",
"/update _vt.vreplication set pos=",
"commit",
),
@@ -907,7 +906,7 @@ func TestPlayerFilters(t *testing.T) {
input: "insert into yes values(1, 'aaa')",
output: qh.Expect(
"begin",
- "insert into yes(id,val) values (1,'aaa')",
+ "insert into yes(id,val) values (1,_binary'aaa')",
"/update _vt.vreplication set pos=",
"commit",
),
@@ -920,7 +919,7 @@ func TestPlayerFilters(t *testing.T) {
input: "update yes set val='bbb'",
output: qh.Expect(
"begin",
- "update yes set val='bbb' where id=1",
+ "update yes set val=_binary'bbb' where id=1",
"/update _vt.vreplication set pos=",
"commit",
),
@@ -937,7 +936,7 @@ func TestPlayerFilters(t *testing.T) {
input: "insert into nopk values(1, 'aaa')",
output: qh.Expect(
"begin",
- "insert into nopk(id,val) values (1,'aaa')",
+ "insert into nopk(id,val) values (1,_binary'aaa')",
"/update _vt.vreplication set pos=",
"commit",
),
@@ -950,8 +949,8 @@ func TestPlayerFilters(t *testing.T) {
input: "update nopk set val='bbb' where id=1",
output: qh.Expect(
"begin",
- "delete from nopk where id=1 and val='aaa'",
- "insert into nopk(id,val) values (1,'bbb')",
+ "delete from nopk where id=1 and val=_binary'aaa'",
+ "insert into nopk(id,val) values (1,_binary'bbb')",
"/update _vt.vreplication set pos=",
"commit",
),
@@ -964,7 +963,7 @@ func TestPlayerFilters(t *testing.T) {
input: "delete from nopk where id=1",
output: qh.Expect(
"begin",
- "delete from nopk where id=1 and val='bbb'",
+ "delete from nopk where id=1 and val=_binary'bbb'",
"/update _vt.vreplication set pos=",
"commit",
),
@@ -975,8 +974,7 @@ func TestPlayerFilters(t *testing.T) {
input: "insert into src4 values (1,100,'aaa'),(2,200,'bbb'),(3,100,'ccc')",
output: qh.Expect(
"begin",
- "insert into dst4(id1,val) values (1,'aaa')",
- "insert into dst4(id1,val) values (3,'ccc')",
+ "insert into dst4(id1,val) values (1,_binary'aaa'), (3,_binary'ccc')",
"/update _vt.vreplication set pos=",
"commit",
),
@@ -987,8 +985,7 @@ func TestPlayerFilters(t *testing.T) {
input: "insert into src5 values (1,100,'abc'),(2,200,'xyz'),(3,100,'xyz'),(4,300,'abc'),(5,200,'xyz')",
output: qh.Expect(
"begin",
- "insert into dst5(id1,val) values (1,'abc')",
- "insert into dst5(id1,val) values (4,'abc')",
+ "insert into dst5(id1,val) values (1,_binary'abc'), (4,_binary'abc')",
"/update _vt.vreplication set pos=",
"commit",
),
@@ -999,7 +996,7 @@ func TestPlayerFilters(t *testing.T) {
input: "insert into src_charset values (1,'木元')",
output: qh.Expect(
"begin",
- "insert into dst_charset(id1,val,val2) values (1,concat(substr(_utf8mb4 '木元' collate utf8mb4_bin, 1, 1), 'abcxyz'),concat(substr(_utf8mb4 '木元' collate utf8mb4_bin, 1, 1), 'abcxyz'))",
+ "insert into dst_charset(id1,val,val2) values (1,concat(substr(convert(_binary'木元' using utf8mb4) collate utf8mb4_bin, 1, 1), 'abcxyz'),concat(substr(convert(_binary'木元' using utf8mb4) collate utf8mb4_bin, 1, 1), 'abcxyz'))",
"/update _vt.vreplication set pos=",
"commit",
),
@@ -1026,12 +1023,12 @@ func TestPlayerKeywordNames(t *testing.T) {
defer deleteTablet(addTablet(100))
execStatements(t, []string{
- "create table `begin`(`primary` int, `column` varbinary(128), primary key(`primary`))",
- fmt.Sprintf("create table %s.`begin`(`primary` int, `column` varbinary(128), primary key(`primary`))", vrepldb),
- "create table `rollback`(`primary` int, `column` varbinary(128), primary key(`primary`))",
- fmt.Sprintf("create table %s.`rollback`(`primary` int, `column` varbinary(128), primary key(`primary`))", vrepldb),
- "create table `commit`(`primary` int, `column` varbinary(128), primary key(`primary`))",
- fmt.Sprintf("create table %s.`commit`(`primary` int, `column` varbinary(128), primary key(`primary`))", vrepldb),
+ "create table `begin`(`primary` int, `column` varchar(128), primary key(`primary`))",
+ fmt.Sprintf("create table %s.`begin`(`primary` int, `column` varchar(128), primary key(`primary`))", vrepldb),
+ "create table `rollback`(`primary` int, `column` varchar(128), primary key(`primary`))",
+ fmt.Sprintf("create table %s.`rollback`(`primary` int, `column` varchar(128), primary key(`primary`))", vrepldb),
+ "create table `commit`(`primary` int, `column` varchar(128), primary key(`primary`))",
+ fmt.Sprintf("create table %s.`commit`(`primary` int, `column` varchar(128), primary key(`primary`))", vrepldb),
})
defer execStatements(t, []string{
"drop table `begin`",
@@ -1257,7 +1254,7 @@ func TestPlayerKeyspaceID(t *testing.T) {
input: "insert into src1 values(1, 'aaa')",
output: qh.Expect(
"begin",
- "insert into dst1(id,val) values (1,'\x16k@\xb4J\xbaK\xd6')",
+ "insert into dst1(id,val) values (1,_binary'\x16k@\xb4J\xbaK\xd6')",
"/update _vt.vreplication set pos=",
"commit",
),
@@ -1495,9 +1492,7 @@ func TestPlayerRowMove(t *testing.T) {
})
expectDBClientQueries(t, qh.Expect(
"begin",
- "insert into dst(val1,sval2,rcount) values (1,ifnull(1, 0),1) on duplicate key update sval2=sval2+ifnull(values(sval2), 0), rcount=rcount+1",
- "insert into dst(val1,sval2,rcount) values (2,ifnull(2, 0),1) on duplicate key update sval2=sval2+ifnull(values(sval2), 0), rcount=rcount+1",
- "insert into dst(val1,sval2,rcount) values (2,ifnull(3, 0),1) on duplicate key update sval2=sval2+ifnull(values(sval2), 0), rcount=rcount+1",
+ "insert into dst(val1,sval2,rcount) values (1,ifnull(1, 0),1), (2,ifnull(2, 0),1), (2,ifnull(3, 0),1) on duplicate key update sval2=sval2+ifnull(values(sval2), 0), rcount=rcount+1",
"/update _vt.vreplication set pos=",
"commit",
))
@@ -1505,7 +1500,7 @@ func TestPlayerRowMove(t *testing.T) {
{"1", "1", "1"},
{"2", "5", "2"},
})
- validateQueryCountStat(t, "replicate", 3)
+ validateQueryCountStat(t, "replicate", 1)
execStatements(t, []string{
"update src set val1=1, val2=4 where id=3",
@@ -1521,7 +1516,7 @@ func TestPlayerRowMove(t *testing.T) {
{"1", "5", "2"},
{"2", "2", "1"},
})
- validateQueryCountStat(t, "replicate", 5)
+ validateQueryCountStat(t, "replicate", 3)
}
func TestPlayerTypes(t *testing.T) {
@@ -1602,7 +1597,7 @@ func TestPlayerTypes(t *testing.T) {
},
}, {
input: "insert into vitess_strings values('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'a', 'a,b,f,l,q,s,v,z')",
- output: "insert into vitess_strings(vb,c,vc,b,tb,bl,ttx,tx,en,s) values ('a','b','c','d\\0\\0\\0\\0','e','f','g','h','a','a,b,f,l,q,s,v,z')",
+ output: "insert into vitess_strings(vb,c,vc,b,tb,bl,ttx,tx,en,s) values (_binary'a','b','c',_binary'd\\0\\0\\0\\0',_binary'e',_binary'f','g','h','a','a,b,f,l,q,s,v,z')",
table: "vitess_strings",
data: [][]string{
{"a", "b", "c", "d\000\000\000\000", "e", "f", "g", "h", "a", "a,b,f,l,q,s,v,z"},
@@ -1623,7 +1618,7 @@ func TestPlayerTypes(t *testing.T) {
},
}, {
input: "insert into binary_pk values('a', 'aaa')",
- output: "insert into binary_pk(b,val) values ('a\\0\\0\\0','aaa')",
+ output: "insert into binary_pk(b,val) values (_binary'a\\0\\0\\0',_binary'aaa')",
table: "binary_pk",
data: [][]string{
{"a\000\000\000", "aaa"},
@@ -1638,7 +1633,7 @@ func TestPlayerTypes(t *testing.T) {
}, {
// Binary pk is a special case: https://github.com/vitessio/vitess/issues/3984
input: "update binary_pk set val='bbb' where b='a\\0\\0\\0'",
- output: "update binary_pk set val='bbb' where b='a\\0\\0\\0'",
+ output: "update binary_pk set val=_binary'bbb' where b=_binary'a\\0\\0\\0'",
table: "binary_pk",
data: [][]string{
{"a\000\000\000", "bbb"},
@@ -1782,7 +1777,7 @@ func TestPlayerDDL(t *testing.T) {
expectDBClientQueries(t, qh.Expect(
"alter table t1 add column val2 varchar(128)",
"/update _vt.vreplication set message='error applying event: Duplicate",
- "/update _vt.vreplication set state='Error', message='error applying event: Duplicate",
+ "/update _vt.vreplication set state='Error', message='terminal error: error applying event: Duplicate",
))
cancel()
@@ -1874,9 +1869,9 @@ func TestPlayerStopPos(t *testing.T) {
vttablet.DefaultVReplicationConfig.StoreCompressedGTID = false
}()
execStatements(t, []string{
- "create table yes(id int, val varbinary(128), primary key(id))",
- fmt.Sprintf("create table %s.yes(id int, val varbinary(128), primary key(id))", vrepldb),
- "create table no(id int, val varbinary(128), primary key(id))",
+ "create table yes(id int, val varchar(128), primary key(id))",
+ fmt.Sprintf("create table %s.yes(id int, val varchar(128), primary key(id))", vrepldb),
+ "create table no(id int, val varchar(128), primary key(id))",
})
defer execStatements(t, []string{
"drop table yes",
@@ -2084,8 +2079,8 @@ func TestPlayerIdleUpdate(t *testing.T) {
idleTimeout = 100 * time.Millisecond
execStatements(t, []string{
- "create table t1(id int, val varbinary(128), primary key(id))",
- fmt.Sprintf("create table %s.t1(id int, val varbinary(128), primary key(id))", vrepldb),
+ "create table t1(id int, val varchar(128), primary key(id))",
+ fmt.Sprintf("create table %s.t1(id int, val varchar(128), primary key(id))", vrepldb),
})
defer execStatements(t, []string{
"drop table t1",
@@ -2137,8 +2132,8 @@ func TestPlayerSplitTransaction(t *testing.T) {
defer setFlag("vstream_packet_size", "10000")
execStatements(t, []string{
- "create table t1(id int, val varbinary(128), primary key(id))",
- fmt.Sprintf("create table %s.t1(id int, val varbinary(128), primary key(id))", vrepldb),
+ "create table t1(id int, val varchar(128), primary key(id))",
+ fmt.Sprintf("create table %s.t1(id int, val varchar(128), primary key(id))", vrepldb),
})
defer execStatements(t, []string{
"drop table t1",
@@ -2179,9 +2174,17 @@ func TestPlayerSplitTransaction(t *testing.T) {
func TestPlayerLockErrors(t *testing.T) {
defer deleteTablet(addTablet(100))
+ // The immediate retry behavior does not apply when doing
+ // VPlayer Batching.
+ origExperimentalFlags := vttablet.DefaultVReplicationConfig.ExperimentalFlags
+ vttablet.DefaultVReplicationConfig.ExperimentalFlags = 0
+ defer func() {
+ vttablet.DefaultVReplicationConfig.ExperimentalFlags = origExperimentalFlags
+ }()
+
execStatements(t, []string{
- "create table t1(id int, val varbinary(128), primary key(id))",
- fmt.Sprintf("create table %s.t1(id int, val varbinary(128), primary key(id))", vrepldb),
+ "create table t1(id int, val varchar(128), primary key(id))",
+ fmt.Sprintf("create table %s.t1(id int, val varchar(128), primary key(id))", vrepldb),
})
defer execStatements(t, []string{
"drop table t1",
@@ -2258,9 +2261,17 @@ func TestPlayerLockErrors(t *testing.T) {
func TestPlayerCancelOnLock(t *testing.T) {
defer deleteTablet(addTablet(100))
+ // The immediate retry behavior does not apply when doing
+ // VPlayer Batching.
+ origExperimentalFlags := vttablet.DefaultVReplicationConfig.ExperimentalFlags
+ vttablet.DefaultVReplicationConfig.ExperimentalFlags = 0
+ defer func() {
+ vttablet.DefaultVReplicationConfig.ExperimentalFlags = origExperimentalFlags
+ }()
+
execStatements(t, []string{
- "create table t1(id int, val varbinary(128), primary key(id))",
- fmt.Sprintf("create table %s.t1(id int, val varbinary(128), primary key(id))", vrepldb),
+ "create table t1(id int, val varchar(128), primary key(id))",
+ fmt.Sprintf("create table %s.t1(id int, val varchar(128), primary key(id))", vrepldb),
})
defer execStatements(t, []string{
"drop table t1",
@@ -2336,8 +2347,8 @@ func TestPlayerTransactions(t *testing.T) {
defer deleteTablet(addTablet(100))
execStatements(t, []string{
- "create table t1(id int, val varbinary(128), primary key(id))",
- fmt.Sprintf("create table %s.t1(id int, val varbinary(128), primary key(id))", vrepldb),
+ "create table t1(id int, val varchar(128), primary key(id))",
+ fmt.Sprintf("create table %s.t1(id int, val varchar(128), primary key(id))", vrepldb),
})
defer execStatements(t, []string{
"drop table t1",
@@ -2441,8 +2452,8 @@ func TestPlayerRelayLogMaxSize(t *testing.T) {
}
execStatements(t, []string{
- "create table t1(id int, val varbinary(128), primary key(id))",
- fmt.Sprintf("create table %s.t1(id int, val varbinary(128), primary key(id))", vrepldb),
+ "create table t1(id int, val varchar(128), primary key(id))",
+ fmt.Sprintf("create table %s.t1(id int, val varchar(128), primary key(id))", vrepldb),
})
defer execStatements(t, []string{
"drop table t1",
@@ -2535,8 +2546,8 @@ func TestRestartOnVStreamEnd(t *testing.T) {
vttablet.DefaultVReplicationConfig.RetryDelay = 1 * time.Millisecond
execStatements(t, []string{
- "create table t1(id int, val varbinary(128), primary key(id))",
- fmt.Sprintf("create table %s.t1(id int, val varbinary(128), primary key(id))", vrepldb),
+ "create table t1(id int, val varchar(128), primary key(id))",
+ fmt.Sprintf("create table %s.t1(id int, val varchar(128), primary key(id))", vrepldb),
})
defer execStatements(t, []string{
"drop table t1",
@@ -2801,10 +2812,10 @@ func TestGeneratedColumns(t *testing.T) {
defer deleteTablet(addTablet(100))
execStatements(t, []string{
- "create table t1(id int, val varbinary(6), val2 varbinary(6) as (concat(id, val)), val3 varbinary(6) as (concat(val, id)), id2 int, primary key(id))",
- fmt.Sprintf("create table %s.t1(id int, val varbinary(6), val2 varbinary(6) as (concat(id, val)), val3 varbinary(6), id2 int, primary key(id))", vrepldb),
- "create table t2(id int, val varbinary(128), val2 varbinary(128) as (concat(id, val)) stored, val3 varbinary(128) as (concat(val, id)), id2 int, primary key(id))",
- fmt.Sprintf("create table %s.t2(id int, val3 varbinary(128), val varbinary(128), id2 int, primary key(id))", vrepldb),
+ "create table t1(id int, val varchar(6), val2 varchar(6) as (concat(id, val)), val3 varchar(6) as (concat(val, id)), id2 int, primary key(id))",
+ fmt.Sprintf("create table %s.t1(id int, val varchar(6), val2 varchar(6) as (concat(id, val)), val3 varchar(6), id2 int, primary key(id))", vrepldb),
+ "create table t2(id int, val varchar(128), val2 varchar(128) as (concat(id, val)) stored, val3 varchar(128) as (concat(val, id)), id2 int, primary key(id))",
+ fmt.Sprintf("create table %s.t2(id int, val3 varchar(128), val varchar(128), id2 int, primary key(id))", vrepldb),
})
defer execStatements(t, []string{
"drop table t1",
@@ -2962,10 +2973,10 @@ func TestPlayerNoBlob(t *testing.T) {
defer deleteTablet(addTablet(100))
execStatements(t, []string{
- "create table t1(id int, val1 varchar(20), blb1 blob, id2 int, blb2 longblob, val2 varbinary(10), primary key(id))",
- fmt.Sprintf("create table %s.t1(id int, val1 varchar(20), blb1 blob, id2 int, blb2 longblob, val2 varbinary(10), primary key(id))", vrepldb),
- "create table t2(id int, val1 varchar(20), txt1 text, id2 int, val2 varbinary(10), unique key(id, val1))",
- fmt.Sprintf("create table %s.t2(id int, val1 varchar(20), txt1 text, id2 int, val2 varbinary(10), primary key(id, val1))", vrepldb),
+ "create table t1(id int, val1 varchar(20), blb1 text, id2 int, blb2 longtext, val2 varchar(10), primary key(id))",
+ fmt.Sprintf("create table %s.t1(id int, val1 varchar(20), blb1 text, id2 int, blb2 longtext, val2 varchar(10), primary key(id))", vrepldb),
+ "create table t2(id int, val1 varchar(20), txt1 text, id2 int, val2 varchar(10), unique key(id, val1))",
+ fmt.Sprintf("create table %s.t2(id int, val1 varchar(20), txt1 text, id2 int, val2 varchar(10), primary key(id, val1))", vrepldb),
})
defer execStatements(t, []string{
"drop table t1",
diff --git a/go/vt/vttablet/tabletmanager/vreplication/vreplicator.go b/go/vt/vttablet/tabletmanager/vreplication/vreplicator.go
index 0c5c0b5b334..42701288a44 100644
--- a/go/vt/vttablet/tabletmanager/vreplication/vreplicator.go
+++ b/go/vt/vttablet/tabletmanager/vreplication/vreplicator.go
@@ -186,11 +186,18 @@ func newVReplicator(id int32, source *binlogdatapb.BinlogSource, sourceVStreamer
// code.
func (vr *vreplicator) Replicate(ctx context.Context) error {
err := vr.replicate(ctx)
- if err != nil {
- if err := vr.setMessage(err.Error()); err != nil {
- binlogplayer.LogError("Failed to set error state", err)
+ if err == nil {
+ return nil
+ }
+ if vr.dbClient.IsClosed() {
+ // Connection was possible terminated by the server. We should renew it.
+ if cerr := vr.dbClient.Connect(); cerr != nil {
+ return vterrors.Wrapf(err, "failed to reconnect to the database: %v", cerr)
}
}
+ if err := vr.setMessage(err.Error()); err != nil {
+ binlogplayer.LogError("Failed to set error state", err)
+ }
return err
}
@@ -501,8 +508,14 @@ func (vr *vreplicator) setState(state binlogdatapb.VReplicationWorkflowState, me
}
vr.stats.State.Store(state.String())
query := fmt.Sprintf("update _vt.vreplication set state='%v', message=%v where id=%v", state, encodeString(binlogplayer.MessageTruncate(message)), vr.id)
- if _, err := vr.dbClient.ExecuteFetch(query, 1); err != nil {
- return fmt.Errorf("could not set state: %v: %v", query, err)
+ // If we're batching a transaction, then include the state update
+ // in the current transaction batch.
+ if vr.dbClient.InTransaction && vr.dbClient.maxBatchSize > 0 {
+ vr.dbClient.AddQueryToTrxBatch(query)
+ } else { // Otherwise, send it down the wire
+ if _, err := vr.dbClient.ExecuteFetch(query, 1); err != nil {
+ return fmt.Errorf("could not set state: %v: %v", query, err)
+ }
}
if state == vr.state {
return nil
diff --git a/go/vt/vttablet/tabletserver/connpool/dbconn.go b/go/vt/vttablet/tabletserver/connpool/dbconn.go
index 4f3d5fe893d..fcadc3d4075 100644
--- a/go/vt/vttablet/tabletserver/connpool/dbconn.go
+++ b/go/vt/vttablet/tabletserver/connpool/dbconn.go
@@ -563,6 +563,11 @@ func (dbc *Conn) BaseShowTablesWithSizes() string {
return dbc.conn.BaseShowTablesWithSizes()
}
+// BaseShowInnodbTableSizes returns a query that shows innodb-internal FULLTEXT index tables and their sizes
+func (dbc *Conn) BaseShowInnodbTableSizes() string {
+ return dbc.conn.BaseShowInnodbTableSizes()
+}
+
func (dbc *Conn) ConnCheck(ctx context.Context) error {
if err := dbc.conn.ConnCheck(); err != nil {
return dbc.Reconnect(ctx)
diff --git a/go/vt/vttablet/tabletserver/controller.go b/go/vt/vttablet/tabletserver/controller.go
index abb7b390e0d..cef0dd2baee 100644
--- a/go/vt/vttablet/tabletserver/controller.go
+++ b/go/vt/vttablet/tabletserver/controller.go
@@ -22,6 +22,7 @@ import (
"vitess.io/vitess/go/vt/dbconfigs"
"vitess.io/vitess/go/vt/mysqlctl"
+ "vitess.io/vitess/go/vt/proto/tabletmanagerdata"
"vitess.io/vitess/go/vt/topo"
"vitess.io/vitess/go/vt/vttablet/queryservice"
"vitess.io/vitess/go/vt/vttablet/tabletserver/rules"
@@ -107,6 +108,9 @@ type Controller interface {
// ReadTransaction returns all unresolved transactions list
ReadTransaction(ctx context.Context, target *querypb.Target, dtid string) (*querypb.TransactionMetadata, error)
+ // GetTransactionInfo returns data about a single transaction
+ GetTransactionInfo(ctx context.Context, target *querypb.Target, dtid string) (*tabletmanagerdata.GetTransactionInfoResponse, error)
+
// ConcludeTransaction deletes the distributed transaction metadata
ConcludeTransaction(ctx context.Context, target *querypb.Target, dtid string) error
diff --git a/go/vt/vttablet/tabletserver/debug_2pc.go b/go/vt/vttablet/tabletserver/debug_2pc.go
index a0de20104db..5db72be0fba 100644
--- a/go/vt/vttablet/tabletserver/debug_2pc.go
+++ b/go/vt/vttablet/tabletserver/debug_2pc.go
@@ -19,12 +19,16 @@ limitations under the License.
package tabletserver
import (
+ "context"
"os"
"path"
"strconv"
"time"
+ "vitess.io/vitess/go/vt/callerid"
"vitess.io/vitess/go/vt/log"
+ vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc"
+ "vitess.io/vitess/go/vt/vterrors"
)
const DebugTwoPc = true
@@ -46,3 +50,24 @@ func commitPreparedDelayForTest(tsv *TabletServer) {
time.Sleep(time.Duration(delVal) * time.Second)
}
}
+
+// checkTestFailure is used to simulate failures in 2PC flow for testing when DebugTwoPc is true.
+func checkTestFailure(ctx context.Context, shard string) error {
+ if shard != "80-" {
+ return nil
+ }
+ callerID := callerid.EffectiveCallerIDFromContext(ctx)
+ if callerID == nil {
+ return nil
+ }
+ switch callerID.Principal {
+ case "CP_80-_R":
+ // retryable error.
+ return vterrors.Errorf(vtrpcpb.Code_UNAVAILABLE, "commit prepared: retryable error")
+ case "CP_80-_NR":
+ // non retryable error.
+ return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "commit prepared: non retryable error")
+ default:
+ return nil
+ }
+}
diff --git a/go/vt/vttablet/tabletserver/debugenv.go b/go/vt/vttablet/tabletserver/debugenv.go
index 54cf09db7d6..6f1ea854ea9 100644
--- a/go/vt/vttablet/tabletserver/debugenv.go
+++ b/go/vt/vttablet/tabletserver/debugenv.go
@@ -23,9 +23,10 @@ import (
"html"
"net/http"
"strconv"
- "text/template"
"time"
+ "github.com/google/safehtml/template"
+
"vitess.io/vitess/go/acl"
"vitess.io/vitess/go/vt/log"
)
@@ -70,90 +71,131 @@ func debugEnvHandler(tsv *TabletServer, w http.ResponseWriter, r *http.Request)
return
}
+ switch r.Method {
+ case http.MethodPost:
+ handlePost(tsv, w, r)
+ case http.MethodGet:
+ handleGet(tsv, w, r)
+ default:
+ http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
+ }
+}
+
+func handlePost(tsv *TabletServer, w http.ResponseWriter, r *http.Request) {
+ varname := r.FormValue("varname")
+ value := r.FormValue("value")
+
var msg string
- if r.Method == "POST" {
- varname := r.FormValue("varname")
- value := r.FormValue("value")
- setIntVal := func(f func(int)) {
- ival, err := strconv.Atoi(value)
- if err != nil {
- msg = fmt.Sprintf("Failed setting value for %v: %v", varname, err)
- return
- }
- f(ival)
- msg = fmt.Sprintf("Setting %v to: %v", varname, value)
+ if varname == "" || value == "" {
+ http.Error(w, "Missing varname or value", http.StatusBadRequest)
+ return
+ }
+
+ setIntVal := func(f func(int)) error {
+ ival, err := strconv.Atoi(value)
+ if err != nil {
+ return fmt.Errorf("invalid int value for %v: %v", varname, err)
}
- setIntValCtx := func(f func(context.Context, int) error) {
- ival, err := strconv.Atoi(value)
- if err == nil {
- err = f(r.Context(), ival)
- if err == nil {
- msg = fmt.Sprintf("Setting %v to: %v", varname, value)
- return
- }
- }
- msg = fmt.Sprintf("Failed setting value for %v: %v", varname, err)
+ f(ival)
+ msg = fmt.Sprintf("Setting %v to: %v", varname, value)
+ return nil
+ }
+
+ setIntValCtx := func(f func(context.Context, int) error) error {
+ ival, err := strconv.Atoi(value)
+ if err == nil {
+ err = f(r.Context(), ival)
}
- setInt64Val := func(f func(int64)) {
- ival, err := strconv.ParseInt(value, 10, 64)
- if err != nil {
- msg = fmt.Sprintf("Failed setting value for %v: %v", varname, err)
- return
- }
- f(ival)
- msg = fmt.Sprintf("Setting %v to: %v", varname, value)
+ if err != nil {
+ return fmt.Errorf("failed setting value for %v: %v", varname, err)
}
- setDurationVal := func(f func(time.Duration)) {
- durationVal, err := time.ParseDuration(value)
- if err != nil {
- msg = fmt.Sprintf("Failed setting value for %v: %v", varname, err)
- return
- }
- f(durationVal)
- msg = fmt.Sprintf("Setting %v to: %v", varname, value)
+ msg = fmt.Sprintf("Setting %v to: %v", varname, value)
+ return nil
+ }
+
+ setInt64Val := func(f func(int64)) error {
+ ival, err := strconv.ParseInt(value, 10, 64)
+ if err != nil {
+ return fmt.Errorf("invalid int64 value for %v: %v", varname, err)
}
- setFloat64Val := func(f func(float64)) {
- fval, err := strconv.ParseFloat(value, 64)
- if err != nil {
- msg = fmt.Sprintf("Failed setting value for %v: %v", varname, err)
- return
- }
- f(fval)
- msg = fmt.Sprintf("Setting %v to: %v", varname, value)
+ f(ival)
+ msg = fmt.Sprintf("Setting %v to: %v", varname, value)
+ return nil
+ }
+
+ setDurationVal := func(f func(time.Duration)) error {
+ durationVal, err := time.ParseDuration(value)
+ if err != nil {
+ return fmt.Errorf("invalid duration value for %v: %v", varname, err)
}
- switch varname {
- case "PoolSize":
- setIntValCtx(tsv.SetPoolSize)
- case "StreamPoolSize":
- setIntValCtx(tsv.SetStreamPoolSize)
- case "TxPoolSize":
- setIntValCtx(tsv.SetTxPoolSize)
- case "MaxResultSize":
- setIntVal(tsv.SetMaxResultSize)
- case "WarnResultSize":
- setIntVal(tsv.SetWarnResultSize)
- case "RowStreamerMaxInnoDBTrxHistLen":
- setInt64Val(func(val int64) { tsv.Config().RowStreamer.MaxInnoDBTrxHistLen = val })
- case "RowStreamerMaxMySQLReplLagSecs":
- setInt64Val(func(val int64) { tsv.Config().RowStreamer.MaxMySQLReplLagSecs = val })
- case "UnhealthyThreshold":
- setDurationVal(func(d time.Duration) { tsv.Config().Healthcheck.UnhealthyThreshold = d })
- setDurationVal(tsv.hs.SetUnhealthyThreshold)
- setDurationVal(tsv.sm.SetUnhealthyThreshold)
- case "ThrottleMetricThreshold":
- setFloat64Val(tsv.SetThrottleMetricThreshold)
- case "Consolidator":
- tsv.SetConsolidatorMode(value)
- msg = fmt.Sprintf("Setting %v to: %v", varname, value)
+ f(durationVal)
+ msg = fmt.Sprintf("Setting %v to: %v", varname, value)
+ return nil
+ }
+
+ setFloat64Val := func(f func(float64)) error {
+ fval, err := strconv.ParseFloat(value, 64)
+ if err != nil {
+ return fmt.Errorf("invalid float64 value for %v: %v", varname, err)
}
+ f(fval)
+ msg = fmt.Sprintf("Setting %v to: %v", varname, value)
+ return nil
+ }
+
+ var err error
+ switch varname {
+ case "ReadPoolSize":
+ err = setIntValCtx(tsv.SetPoolSize)
+ case "StreamPoolSize":
+ err = setIntValCtx(tsv.SetStreamPoolSize)
+ case "TransactionPoolSize":
+ err = setIntValCtx(tsv.SetTxPoolSize)
+ case "MaxResultSize":
+ err = setIntVal(tsv.SetMaxResultSize)
+ case "WarnResultSize":
+ err = setIntVal(tsv.SetWarnResultSize)
+ case "RowStreamerMaxInnoDBTrxHistLen":
+ err = setInt64Val(func(val int64) { tsv.Config().RowStreamer.MaxInnoDBTrxHistLen = val })
+ case "RowStreamerMaxMySQLReplLagSecs":
+ err = setInt64Val(func(val int64) { tsv.Config().RowStreamer.MaxMySQLReplLagSecs = val })
+ case "UnhealthyThreshold":
+ err = setDurationVal(func(d time.Duration) { tsv.Config().Healthcheck.UnhealthyThreshold = d })
+ case "ThrottleMetricThreshold":
+ err = setFloat64Val(tsv.SetThrottleMetricThreshold)
+ case "Consolidator":
+ tsv.SetConsolidatorMode(value)
+ msg = fmt.Sprintf("Setting %v to: %v", varname, value)
+ }
+
+ if err != nil {
+ http.Error(w, err.Error(), http.StatusBadRequest)
+ return
}
+ vars := getVars(tsv)
+ sendResponse(r, w, vars, msg)
+}
+
+func handleGet(tsv *TabletServer, w http.ResponseWriter, r *http.Request) {
+ vars := getVars(tsv)
+ sendResponse(r, w, vars, "")
+}
+
+func sendResponse(r *http.Request, w http.ResponseWriter, vars []envValue, msg string) {
+ format := r.FormValue("format")
+ if format == "json" {
+ respondWithJSON(w, vars, msg)
+ return
+ }
+ respondWithHTML(w, vars, msg)
+}
+
+func getVars(tsv *TabletServer) []envValue {
var vars []envValue
- vars = addVar(vars, "PoolSize", tsv.PoolSize)
+ vars = addVar(vars, "ReadPoolSize", tsv.PoolSize)
vars = addVar(vars, "StreamPoolSize", tsv.StreamPoolSize)
- vars = addVar(vars, "TxPoolSize", tsv.TxPoolSize)
- vars = addVar(vars, "QueryCacheCapacity", tsv.QueryPlanCacheCap) // QueryCacheCapacity is deprecated in v21, it is replaced by QueryEnginePlanCacheCapacity
- vars = addVar(vars, "QueryEnginePlanCacheCapacity", tsv.QueryPlanCacheCap)
+ vars = addVar(vars, "TransactionPoolSize", tsv.TxPoolSize)
vars = addVar(vars, "MaxResultSize", tsv.MaxResultSize)
vars = addVar(vars, "WarnResultSize", tsv.WarnResultSize)
vars = addVar(vars, "RowStreamerMaxInnoDBTrxHistLen", func() int64 { return tsv.Config().RowStreamer.MaxInnoDBTrxHistLen })
@@ -165,18 +207,22 @@ func debugEnvHandler(tsv *TabletServer, w http.ResponseWriter, r *http.Request)
Value: tsv.ConsolidatorMode(),
})
- format := r.FormValue("format")
- if format == "json" {
- mvars := make(map[string]string)
- for _, v := range vars {
- mvars[v.Name] = v.Value
- }
- w.Header().Set("Content-Type", "application/json")
- _ = json.NewEncoder(w).Encode(mvars)
- return
+ return vars
+}
+
+func respondWithJSON(w http.ResponseWriter, vars []envValue, msg string) {
+ mvars := make(map[string]string)
+ for _, v := range vars {
+ mvars[v.Name] = v.Value
}
+ if msg != "" {
+ mvars["ResponseMessage"] = msg
+ }
+ w.Header().Set("Content-Type", "application/json")
+ _ = json.NewEncoder(w).Encode(mvars)
+}
- // gridTable is reused from twopcz.go.
+func respondWithHTML(w http.ResponseWriter, vars []envValue, msg string) {
w.Write(gridTable)
w.Write([]byte("Internal Variables \n"))
if msg != "" {
diff --git a/go/vt/vttablet/tabletserver/dt_executor.go b/go/vt/vttablet/tabletserver/dt_executor.go
index 1aaf75edc9e..1789632c2d0 100644
--- a/go/vt/vttablet/tabletserver/dt_executor.go
+++ b/go/vt/vttablet/tabletserver/dt_executor.go
@@ -23,6 +23,7 @@ import (
"vitess.io/vitess/go/trace"
"vitess.io/vitess/go/vt/log"
querypb "vitess.io/vitess/go/vt/proto/query"
+ tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata"
vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc"
"vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/vterrors"
@@ -33,19 +34,21 @@ import (
// DTExecutor is used for executing a distributed transactional request.
type DTExecutor struct {
- ctx context.Context
- logStats *tabletenv.LogStats
- te *TxEngine
- qe *QueryEngine
+ ctx context.Context
+ logStats *tabletenv.LogStats
+ te *TxEngine
+ qe *QueryEngine
+ shardFunc func() string
}
// NewDTExecutor creates a new distributed transaction executor.
-func NewDTExecutor(ctx context.Context, te *TxEngine, qe *QueryEngine, logStats *tabletenv.LogStats) *DTExecutor {
+func NewDTExecutor(ctx context.Context, logStats *tabletenv.LogStats, te *TxEngine, qe *QueryEngine, shardFunc func() string) *DTExecutor {
return &DTExecutor{
- ctx: ctx,
- te: te,
- qe: qe,
- logStats: logStats,
+ ctx: ctx,
+ logStats: logStats,
+ te: te,
+ qe: qe,
+ shardFunc: shardFunc,
}
}
@@ -69,7 +72,8 @@ func (dte *DTExecutor) Prepare(transactionID int64, dtid string) error {
}
// If no queries were executed, we just rollback.
- if len(conn.TxProperties().Queries) == 0 {
+ queries := conn.TxProperties().GetQueries()
+ if len(queries) == 0 {
dte.te.txPool.RollbackAndRelease(dte.ctx, conn)
return nil
}
@@ -90,7 +94,7 @@ func (dte *DTExecutor) Prepare(transactionID int64, dtid string) error {
// Fail Prepare if any query rule disallows it.
// This could be due to ongoing cutover happening in vreplication workflow
// regarding OnlineDDL or MoveTables.
- for _, query := range conn.TxProperties().Queries {
+ for _, query := range queries {
qr := dte.qe.queryRuleSources.FilterByPlan(query.Sql, 0, query.Tables...)
if qr != nil {
act, _, _, _ := qr.GetAction("", "", nil, sqlparser.MarginComments{})
@@ -110,7 +114,7 @@ func (dte *DTExecutor) Prepare(transactionID int64, dtid string) error {
// Recheck the rules. As some prepare transaction could have passed the first check.
// If they are put in the prepared pool, then vreplication workflow waits.
// This check helps reject the prepare that came later.
- for _, query := range conn.TxProperties().Queries {
+ for _, query := range queries {
qr := dte.qe.queryRuleSources.FilterByPlan(query.Sql, 0, query.Tables...)
if qr != nil {
act, _, _, _ := qr.GetAction("", "", nil, sqlparser.MarginComments{})
@@ -130,7 +134,7 @@ func (dte *DTExecutor) Prepare(transactionID int64, dtid string) error {
}
return dte.inTransaction(func(localConn *StatefulConnection) error {
- return dte.te.twoPC.SaveRedo(dte.ctx, localConn, dtid, conn.TxProperties().Queries)
+ return dte.te.twoPC.SaveRedo(dte.ctx, localConn, dtid, queries)
})
}
@@ -158,10 +162,21 @@ func (dte *DTExecutor) CommitPrepared(dtid string) (err error) {
defer func() {
if err != nil {
log.Warningf("failed to commit the prepared transaction '%s' with error: %v", dtid, err)
- dte.te.checkErrorAndMarkFailed(ctx, dtid, err, "TwopcCommit")
+ fail := dte.te.checkErrorAndMarkFailed(ctx, dtid, err, "TwopcCommit")
+ if fail {
+ dte.te.env.Stats().CommitPreparedFail.Add("NonRetryable", 1)
+ } else {
+ dte.te.env.Stats().CommitPreparedFail.Add("Retryable", 1)
+ }
}
dte.te.txPool.RollbackAndRelease(ctx, conn)
}()
+ if DebugTwoPc {
+ if err := checkTestFailure(dte.ctx, dte.shardFunc()); err != nil {
+ log.Errorf("failing test on commit prepared: %v", err)
+ return err
+ }
+ }
if err = dte.te.twoPC.DeleteRedo(ctx, conn, dtid); err != nil {
return err
}
@@ -221,16 +236,16 @@ func (dte *DTExecutor) CreateTransaction(dtid string, participants []*querypb.Ta
// StartCommit atomically commits the transaction along with the
// decision to commit the associated 2pc transaction.
-func (dte *DTExecutor) StartCommit(transactionID int64, dtid string) error {
+func (dte *DTExecutor) StartCommit(transactionID int64, dtid string) (querypb.StartCommitState, error) {
if !dte.te.twopcEnabled {
- return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "2pc is not enabled")
+ return querypb.StartCommitState_Fail, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "2pc is not enabled")
}
defer dte.te.env.Stats().QueryTimings.Record("START_COMMIT", time.Now())
dte.logStats.TransactionID = transactionID
conn, err := dte.te.txPool.GetAndLock(transactionID, "for 2pc commit")
if err != nil {
- return err
+ return querypb.StartCommitState_Fail, err
}
defer dte.te.txPool.RollbackAndRelease(dte.ctx, conn)
@@ -240,15 +255,17 @@ func (dte *DTExecutor) StartCommit(transactionID int64, dtid string) error {
return dte.te.twoPC.Transition(dte.ctx, conn, dtid, DTStateRollback)
})
// return the error, defer call above will roll back the transaction.
- return vterrors.VT10002("cannot commit the transaction on a reserved connection")
+ return querypb.StartCommitState_Fail, vterrors.VT10002("cannot commit the transaction on a reserved connection")
}
err = dte.te.twoPC.Transition(dte.ctx, conn, dtid, DTStateCommit)
if err != nil {
- return err
+ return querypb.StartCommitState_Fail, err
}
- _, err = dte.te.txPool.Commit(dte.ctx, conn)
- return err
+ if _, err = dte.te.txPool.Commit(dte.ctx, conn); err != nil {
+ return querypb.StartCommitState_Unknown, err
+ }
+ return querypb.StartCommitState_Success, nil
}
// SetRollback transitions the 2pc transaction to the Rollback state.
@@ -295,6 +312,14 @@ func (dte *DTExecutor) ReadTransaction(dtid string) (*querypb.TransactionMetadat
return dte.te.twoPC.ReadTransaction(dte.ctx, dtid)
}
+// GetTransactionInfo returns the data of the specified dtid.
+func (dte *DTExecutor) GetTransactionInfo(dtid string) (*tabletmanagerdatapb.GetTransactionInfoResponse, error) {
+ if !dte.te.twopcEnabled {
+ return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "2pc is not enabled")
+ }
+ return dte.te.twoPC.GetTransactionInfo(dte.ctx, dtid)
+}
+
// ReadTwopcInflight returns info about all in-flight 2pc transactions.
func (dte *DTExecutor) ReadTwopcInflight() (distributed []*tx.DistributedTx, prepared, failed []*tx.PreparedTx, err error) {
if !dte.te.twopcEnabled {
@@ -312,7 +337,7 @@ func (dte *DTExecutor) ReadTwopcInflight() (distributed []*tx.DistributedTx, pre
}
func (dte *DTExecutor) inTransaction(f func(*StatefulConnection) error) error {
- conn, _, _, err := dte.te.txPool.Begin(dte.ctx, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ conn, _, _, err := dte.te.txPool.Begin(dte.ctx, &querypb.ExecuteOptions{}, false, 0, nil)
if err != nil {
return err
}
diff --git a/go/vt/vttablet/tabletserver/dt_executor_test.go b/go/vt/vttablet/tabletserver/dt_executor_test.go
index bc497b070e6..b21667392d6 100644
--- a/go/vt/vttablet/tabletserver/dt_executor_test.go
+++ b/go/vt/vttablet/tabletserver/dt_executor_test.go
@@ -27,22 +27,21 @@ import (
"testing"
"time"
- "vitess.io/vitess/go/event/syslogger"
- "vitess.io/vitess/go/mysql/sqlerror"
- "vitess.io/vitess/go/vt/vtenv"
- "vitess.io/vitess/go/vt/vttablet/tabletserver/rules"
- "vitess.io/vitess/go/vt/vttablet/tabletserver/schema"
- "vitess.io/vitess/go/vt/vttablet/tabletserver/tx"
-
+ "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"google.golang.org/protobuf/proto"
+ "vitess.io/vitess/go/event/syslogger"
"vitess.io/vitess/go/mysql/fakesqldb"
+ "vitess.io/vitess/go/mysql/sqlerror"
"vitess.io/vitess/go/sqltypes"
- "vitess.io/vitess/go/vt/vttablet/tabletserver/tabletenv"
-
querypb "vitess.io/vitess/go/vt/proto/query"
topodatapb "vitess.io/vitess/go/vt/proto/topodata"
+ "vitess.io/vitess/go/vt/vtenv"
+ "vitess.io/vitess/go/vt/vttablet/tabletserver/rules"
+ "vitess.io/vitess/go/vt/vttablet/tabletserver/schema"
+ "vitess.io/vitess/go/vt/vttablet/tabletserver/tabletenv"
+ "vitess.io/vitess/go/vt/vttablet/tabletserver/tx"
)
func TestTxExecutorEmptyPrepare(t *testing.T) {
@@ -267,8 +266,8 @@ func TestTxExecutorCommitRedoFail(t *testing.T) {
require.NoError(t, err)
// fail commit prepare as the delete redo query is in rejected query.
- db.AddRejectedQuery("delete from _vt.redo_state where dtid = 'bb'", errors.New("delete redo log fail"))
- db.AddQuery("update _vt.redo_state set state = 0 where dtid = 'bb'", sqltypes.MakeTestResult(nil))
+ db.AddRejectedQuery("delete from _vt.redo_state where dtid = _binary'bb'", errors.New("delete redo log fail"))
+ db.AddQuery("update _vt.redo_state set state = 0 where dtid = _binary'bb'", sqltypes.MakeTestResult(nil))
err = txe.CommitPrepared("bb")
require.ErrorContains(t, err, "delete redo log fail")
@@ -331,8 +330,8 @@ func TestExecutorCreateTransaction(t *testing.T) {
txe, _, db, closer := newTestTxExecutor(t, ctx)
defer closer()
- db.AddQueryPattern(fmt.Sprintf("insert into _vt\\.dt_state\\(dtid, state, time_created\\) values \\('aa', %d,.*", int(querypb.TransactionState_PREPARE)), &sqltypes.Result{})
- db.AddQueryPattern("insert into _vt\\.dt_participant\\(dtid, id, keyspace, shard\\) values \\('aa', 1,.*", &sqltypes.Result{})
+ db.AddQueryPattern(fmt.Sprintf("insert into _vt\\.dt_state\\(dtid, state, time_created\\) values \\(_binary'aa', %d,.*", int(querypb.TransactionState_PREPARE)), &sqltypes.Result{})
+ db.AddQueryPattern("insert into _vt\\.dt_participant\\(dtid, id, keyspace, shard\\) values \\(_binary'aa', 1,.*", &sqltypes.Result{})
err := txe.CreateTransaction("aa", []*querypb.Target{{
Keyspace: "t1",
Shard: "0",
@@ -346,17 +345,19 @@ func TestExecutorStartCommit(t *testing.T) {
txe, tsv, db, closer := newTestTxExecutor(t, ctx)
defer closer()
- commitTransition := fmt.Sprintf("update _vt.dt_state set state = %d where dtid = 'aa' and state = %d", int(querypb.TransactionState_COMMIT), int(querypb.TransactionState_PREPARE))
+ commitTransition := fmt.Sprintf("update _vt.dt_state set state = %d where dtid = _binary'aa' and state = %d", int(querypb.TransactionState_COMMIT), int(querypb.TransactionState_PREPARE))
db.AddQuery(commitTransition, &sqltypes.Result{RowsAffected: 1})
txid := newTxForPrep(ctx, tsv)
- err := txe.StartCommit(txid, "aa")
+ state, err := txe.StartCommit(txid, "aa")
require.NoError(t, err)
+ assert.Equal(t, querypb.StartCommitState_Success, state)
db.AddQuery(commitTransition, &sqltypes.Result{})
txid = newTxForPrep(ctx, tsv)
- err = txe.StartCommit(txid, "aa")
+ state, err = txe.StartCommit(txid, "aa")
require.Error(t, err)
require.Contains(t, err.Error(), "could not transition to COMMIT: aa")
+ assert.Equal(t, querypb.StartCommitState_Fail, state)
}
func TestExecutorStartCommitFailure(t *testing.T) {
@@ -375,12 +376,13 @@ func TestExecutorStartCommitFailure(t *testing.T) {
sc.Unlock()
// add rollback state update expectation
- rollbackTransition := fmt.Sprintf("update _vt.dt_state set state = %d where dtid = 'aa' and state = %d", int(querypb.TransactionState_ROLLBACK), int(querypb.TransactionState_PREPARE))
+ rollbackTransition := fmt.Sprintf("update _vt.dt_state set state = %d where dtid = _binary'aa' and state = %d", int(querypb.TransactionState_ROLLBACK), int(querypb.TransactionState_PREPARE))
db.AddQuery(rollbackTransition, sqltypes.MakeTestResult(nil))
// try 2pc commit of Metadata Manager.
- err = txe.StartCommit(txid, "aa")
+ state, err := txe.StartCommit(txid, "aa")
require.EqualError(t, err, "VT10002: atomic distributed transaction not allowed: cannot commit the transaction on a reserved connection")
+ assert.Equal(t, querypb.StartCommitState_Fail, state)
}
func TestExecutorSetRollback(t *testing.T) {
@@ -389,7 +391,7 @@ func TestExecutorSetRollback(t *testing.T) {
txe, tsv, db, closer := newTestTxExecutor(t, ctx)
defer closer()
- rollbackTransition := fmt.Sprintf("update _vt.dt_state set state = %d where dtid = 'aa' and state = %d", int(querypb.TransactionState_ROLLBACK), int(querypb.TransactionState_PREPARE))
+ rollbackTransition := fmt.Sprintf("update _vt.dt_state set state = %d where dtid = _binary'aa' and state = %d", int(querypb.TransactionState_ROLLBACK), int(querypb.TransactionState_PREPARE))
db.AddQuery(rollbackTransition, &sqltypes.Result{RowsAffected: 1})
txid := newTxForPrep(ctx, tsv)
err := txe.SetRollback("aa", txid)
@@ -464,8 +466,8 @@ func TestExecutorConcludeTransaction(t *testing.T) {
txe, _, db, closer := newTestTxExecutor(t, ctx)
defer closer()
- db.AddQuery("delete from _vt.dt_state where dtid = 'aa'", &sqltypes.Result{})
- db.AddQuery("delete from _vt.dt_participant where dtid = 'aa'", &sqltypes.Result{})
+ db.AddQuery("delete from _vt.dt_state where dtid = _binary'aa'", &sqltypes.Result{})
+ db.AddQuery("delete from _vt.dt_participant where dtid = _binary'aa'", &sqltypes.Result{})
err := txe.ConcludeTransaction("aa")
require.NoError(t, err)
}
@@ -476,7 +478,7 @@ func TestExecutorReadTransaction(t *testing.T) {
txe, _, db, closer := newTestTxExecutor(t, ctx)
defer closer()
- db.AddQuery("select dtid, state, time_created from _vt.dt_state where dtid = 'aa'", &sqltypes.Result{})
+ db.AddQuery("select dtid, state, time_created from _vt.dt_state where dtid = _binary'aa'", &sqltypes.Result{})
got, err := txe.ReadTransaction("aa")
require.NoError(t, err)
want := &querypb.TransactionMetadata{}
@@ -496,8 +498,8 @@ func TestExecutorReadTransaction(t *testing.T) {
sqltypes.NewVarBinary("1"),
}},
}
- db.AddQuery("select dtid, state, time_created from _vt.dt_state where dtid = 'aa'", txResult)
- db.AddQuery("select keyspace, shard from _vt.dt_participant where dtid = 'aa'", &sqltypes.Result{
+ db.AddQuery("select dtid, state, time_created from _vt.dt_state where dtid = _binary'aa'", txResult)
+ db.AddQuery("select keyspace, shard from _vt.dt_participant where dtid = _binary'aa'", &sqltypes.Result{
Fields: []*querypb.Field{
{Type: sqltypes.VarChar},
{Type: sqltypes.VarChar},
@@ -542,7 +544,7 @@ func TestExecutorReadTransaction(t *testing.T) {
sqltypes.NewVarBinary("1"),
}},
}
- db.AddQuery("select dtid, state, time_created from _vt.dt_state where dtid = 'aa'", txResult)
+ db.AddQuery("select dtid, state, time_created from _vt.dt_state where dtid = _binary'aa'", txResult)
want.State = querypb.TransactionState_COMMIT
got, err = txe.ReadTransaction("aa")
require.NoError(t, err)
@@ -562,7 +564,7 @@ func TestExecutorReadTransaction(t *testing.T) {
sqltypes.NewVarBinary("1"),
}},
}
- db.AddQuery("select dtid, state, time_created from _vt.dt_state where dtid = 'aa'", txResult)
+ db.AddQuery("select dtid, state, time_created from _vt.dt_state where dtid = _binary'aa'", txResult)
want.State = querypb.TransactionState_ROLLBACK
got, err = txe.ReadTransaction("aa")
require.NoError(t, err)
@@ -671,7 +673,10 @@ func TestNoTwopc(t *testing.T) {
fun: func() error { return txe.CreateTransaction("aa", nil) },
}, {
desc: "StartCommit",
- fun: func() error { return txe.StartCommit(1, "aa") },
+ fun: func() error {
+ _, err := txe.StartCommit(1, "aa")
+ return err
+ },
}, {
desc: "SetRollback",
fun: func() error { return txe.SetRollback("aa", 1) },
@@ -700,8 +705,10 @@ func TestNoTwopc(t *testing.T) {
want := "2pc is not enabled"
for _, tc := range testcases {
- err := tc.fun()
- require.EqualError(t, err, want)
+ t.Run(tc.desc, func(t *testing.T) {
+ err := tc.fun()
+ require.EqualError(t, err, want)
+ })
}
}
@@ -714,10 +721,10 @@ func newTestTxExecutor(t *testing.T, ctx context.Context) (txe *DTExecutor, tsv
env := tabletenv.NewEnv(vtenv.NewTestEnv(), cfg, "TabletServerTest")
se := schema.NewEngine(env)
qe := NewQueryEngine(env, se)
- db.AddQueryPattern("insert into _vt\\.redo_state\\(dtid, state, time_created\\) values \\('aa', 1,.*", &sqltypes.Result{})
+ db.AddQueryPattern("insert into _vt\\.redo_state\\(dtid, state, time_created\\) values \\(_binary'aa', 1,.*", &sqltypes.Result{})
db.AddQueryPattern("insert into _vt\\.redo_statement.*", &sqltypes.Result{})
- db.AddQuery("delete from _vt.redo_state where dtid = 'aa'", &sqltypes.Result{})
- db.AddQuery("delete from _vt.redo_statement where dtid = 'aa'", &sqltypes.Result{})
+ db.AddQuery("delete from _vt.redo_state where dtid = _binary'aa'", &sqltypes.Result{})
+ db.AddQuery("delete from _vt.redo_statement where dtid = _binary'aa'", &sqltypes.Result{})
db.AddQuery("update test_table set `name` = 2 where pk = 1 limit 10001", &sqltypes.Result{})
db.AddRejectedQuery("bogus", sqlerror.NewSQLError(sqlerror.ERUnknownError, sqlerror.SSUnknownSQLState, "bogus query"))
return &DTExecutor{
@@ -736,10 +743,10 @@ func newShortAgeExecutor(t *testing.T, ctx context.Context) (txe *DTExecutor, ts
db = setUpQueryExecutorTest(t)
logStats := tabletenv.NewLogStats(ctx, "TestTxExecutor")
tsv = newTestTabletServer(ctx, smallTxPool|shortTwopcAge, db)
- db.AddQueryPattern("insert into _vt\\.redo_state\\(dtid, state, time_created\\) values \\('aa', 1,.*", &sqltypes.Result{})
+ db.AddQueryPattern("insert into _vt\\.redo_state\\(dtid, state, time_created\\) values \\(_binary'aa', 1,.*", &sqltypes.Result{})
db.AddQueryPattern("insert into _vt\\.redo_statement.*", &sqltypes.Result{})
- db.AddQuery("delete from _vt.redo_state where dtid = 'aa'", &sqltypes.Result{})
- db.AddQuery("delete from _vt.redo_statement where dtid = 'aa'", &sqltypes.Result{})
+ db.AddQuery("delete from _vt.redo_state where dtid = _binary'aa'", &sqltypes.Result{})
+ db.AddQuery("delete from _vt.redo_statement where dtid = _binary'aa'", &sqltypes.Result{})
db.AddQuery("update test_table set `name` = 2 where pk = 1 limit 10001", &sqltypes.Result{})
return &DTExecutor{
ctx: ctx,
diff --git a/go/vt/vttablet/tabletserver/health_streamer.go b/go/vt/vttablet/tabletserver/health_streamer.go
index 89157298c50..5ee86555cc5 100644
--- a/go/vt/vttablet/tabletserver/health_streamer.go
+++ b/go/vt/vttablet/tabletserver/health_streamer.go
@@ -65,11 +65,18 @@ type healthStreamer struct {
degradedThreshold time.Duration
unhealthyThreshold atomic.Int64
- mu sync.Mutex
- ctx context.Context
- cancel context.CancelFunc
- clients map[chan *querypb.StreamHealthResponse]struct{}
- state *querypb.StreamHealthResponse
+ // cancelMu is a mutex used to protect the cancel variable
+ // and for ensuring we don't call setup functions in parallel.
+ cancelMu sync.Mutex
+ ctx context.Context
+ cancel context.CancelFunc
+
+ // fieldsMu is used to protect access to the fields below.
+ // We require two separate mutexes, so that we don't have to acquire the same mutex
+ // in Close and reload that can lead to a deadlock described in https://github.com/vitessio/vitess/issues/17229#issuecomment-2476136610.
+ fieldsMu sync.Mutex
+ clients map[chan *querypb.StreamHealthResponse]struct{}
+ state *querypb.StreamHealthResponse
// isServingPrimary stores if this tablet is currently the serving primary or not.
isServingPrimary bool
@@ -112,8 +119,8 @@ func (hs *healthStreamer) InitDBConfig(target *querypb.Target) {
}
func (hs *healthStreamer) Open() {
- hs.mu.Lock()
- defer hs.mu.Unlock()
+ hs.cancelMu.Lock()
+ defer hs.cancelMu.Unlock()
if hs.cancel != nil {
return
@@ -122,8 +129,8 @@ func (hs *healthStreamer) Open() {
}
func (hs *healthStreamer) Close() {
- hs.mu.Lock()
- defer hs.mu.Unlock()
+ hs.cancelMu.Lock()
+ defer hs.cancelMu.Unlock()
if hs.cancel != nil {
hs.se.UnregisterNotifier("healthStreamer")
@@ -160,13 +167,16 @@ func (hs *healthStreamer) Stream(ctx context.Context, callback func(*querypb.Str
}
func (hs *healthStreamer) register() (chan *querypb.StreamHealthResponse, context.Context) {
- hs.mu.Lock()
- defer hs.mu.Unlock()
+ hs.cancelMu.Lock()
+ defer hs.cancelMu.Unlock()
if hs.cancel == nil {
return nil, nil
}
+ hs.fieldsMu.Lock()
+ defer hs.fieldsMu.Unlock()
+
ch := make(chan *querypb.StreamHealthResponse, streamHealthBufferSize)
hs.clients[ch] = struct{}{}
@@ -176,15 +186,15 @@ func (hs *healthStreamer) register() (chan *querypb.StreamHealthResponse, contex
}
func (hs *healthStreamer) unregister(ch chan *querypb.StreamHealthResponse) {
- hs.mu.Lock()
- defer hs.mu.Unlock()
+ hs.fieldsMu.Lock()
+ defer hs.fieldsMu.Unlock()
delete(hs.clients, ch)
}
func (hs *healthStreamer) ChangeState(tabletType topodatapb.TabletType, ptsTimestamp time.Time, lag time.Duration, err error, serving bool) {
- hs.mu.Lock()
- defer hs.mu.Unlock()
+ hs.fieldsMu.Lock()
+ defer hs.fieldsMu.Unlock()
hs.state.Target.TabletType = tabletType
if tabletType == topodatapb.TabletType_PRIMARY {
@@ -239,8 +249,8 @@ func (hs *healthStreamer) broadCastToClients(shr *querypb.StreamHealthResponse)
}
func (hs *healthStreamer) AppendDetails(details []*kv) []*kv {
- hs.mu.Lock()
- defer hs.mu.Unlock()
+ hs.fieldsMu.Lock()
+ defer hs.fieldsMu.Unlock()
if hs.state.Target.TabletType == topodatapb.TabletType_PRIMARY {
return details
}
@@ -285,9 +295,11 @@ func (hs *healthStreamer) SetUnhealthyThreshold(v time.Duration) {
// MakePrimary tells the healthstreamer that the current tablet is now the primary,
// so it can read and write to the MySQL instance for schema-tracking.
func (hs *healthStreamer) MakePrimary(serving bool) {
- hs.mu.Lock()
- defer hs.mu.Unlock()
+ hs.fieldsMu.Lock()
hs.isServingPrimary = serving
+ // We let go of the lock here because we don't want to hold the lock when calling RegisterNotifier.
+ // If we keep holding the lock, there is a potential deadlock that can happen.
+ hs.fieldsMu.Unlock()
// We register for notifications from the schema Engine only when schema tracking is enabled,
// and we are going to a serving primary state.
if serving && hs.signalWhenSchemaChange {
@@ -301,15 +313,15 @@ func (hs *healthStreamer) MakePrimary(serving bool) {
// MakeNonPrimary tells the healthstreamer that the current tablet is now not a primary.
func (hs *healthStreamer) MakeNonPrimary() {
- hs.mu.Lock()
- defer hs.mu.Unlock()
+ hs.fieldsMu.Lock()
+ defer hs.fieldsMu.Unlock()
hs.isServingPrimary = false
}
// reload reloads the schema from the underlying mysql for the tables that we get the alert on.
func (hs *healthStreamer) reload(created, altered, dropped []*schema.Table, udfsChanged bool) error {
- hs.mu.Lock()
- defer hs.mu.Unlock()
+ hs.fieldsMu.Lock()
+ defer hs.fieldsMu.Unlock()
// Schema Reload to happen only on primary when it is serving.
// We can be in a state when the primary is not serving after we have run DemotePrimary. In that case,
// we don't want to run any queries in MySQL, so we shouldn't reload anything in the healthStreamer.
@@ -352,8 +364,8 @@ func (hs *healthStreamer) reload(created, altered, dropped []*schema.Table, udfs
// sendUnresolvedTransactionSignal sends broadcast message about unresolved transactions.
func (hs *healthStreamer) sendUnresolvedTransactionSignal() {
- hs.mu.Lock()
- defer hs.mu.Unlock()
+ hs.fieldsMu.Lock()
+ defer hs.fieldsMu.Unlock()
// send signal only when primary is serving.
if !hs.isServingPrimary {
return
diff --git a/go/vt/vttablet/tabletserver/health_streamer_test.go b/go/vt/vttablet/tabletserver/health_streamer_test.go
index 0345396d015..720e562845d 100644
--- a/go/vt/vttablet/tabletserver/health_streamer_test.go
+++ b/go/vt/vttablet/tabletserver/health_streamer_test.go
@@ -40,6 +40,8 @@ import (
"vitess.io/vitess/go/vt/vttablet/tabletserver/tabletenv"
)
+const baseInnoDBTableSizesPattern = `(?s).*SELECT.*its\.space = it\.space.*SUM\(its\.file_size\).*`
+
func TestHealthStreamerClosed(t *testing.T) {
cfg := newConfig(nil)
env := tabletenv.NewEnv(vtenv.NewTestEnv(), cfg, "ReplTrackerTest")
@@ -282,6 +284,13 @@ func TestReloadSchema(t *testing.T) {
// Update the query pattern for the query that schema.Engine uses to get the tables so that it runs a reload again.
// If we don't change the t.create_time to a value greater than before, then the schema engine doesn't reload the database.
+ db.AddQueryPattern(baseInnoDBTableSizesPattern,
+ sqltypes.MakeTestResult(
+ sqltypes.MakeTestFields(
+ "it.name | normal_tables_sum_file_size | normal_tables_sum_allocated_size",
+ "varchar|int64|int64",
+ ),
+ ))
db.AddQueryPattern("SELECT .* information_schema.innodb_tablespaces .*",
sqltypes.MakeTestResult(
sqltypes.MakeTestFields(
@@ -291,7 +300,6 @@ func TestReloadSchema(t *testing.T) {
"product|BASE TABLE|1684735967||114688|114688",
"users|BASE TABLE|1684735967||114688|114688",
))
-
db.AddQuery(mysql.BaseShowTables,
sqltypes.MakeTestResult(
sqltypes.MakeTestFields(
@@ -357,6 +365,14 @@ func TestReloadView(t *testing.T) {
db.AddQuery("commit", &sqltypes.Result{})
db.AddQuery("rollback", &sqltypes.Result{})
// Add the query pattern for the query that schema.Engine uses to get the tables.
+ // InnoDBTableSizes query
+ db.AddQueryPattern(baseInnoDBTableSizesPattern,
+ sqltypes.MakeTestResult(
+ sqltypes.MakeTestFields(
+ "it.name | normal_tables_sum_file_size | normal_tables_sum_allocated_size",
+ "varchar|int64|int64",
+ ),
+ ))
db.AddQueryPattern("SELECT .* information_schema.innodb_tablespaces .*",
sqltypes.MakeTestResult(
sqltypes.MakeTestFields(
@@ -423,7 +439,7 @@ func TestReloadView(t *testing.T) {
expGetViewDefinitionsQuery string
viewDefinitionsOutput *sqltypes.Result
- expClearQuery string
+ expClearQuery []string
expInsertQuery []string
expViewsChanged []string
}{
@@ -439,7 +455,10 @@ func TestReloadView(t *testing.T) {
expViewsChanged: []string{"view_a", "view_b"},
expGetViewDefinitionsQuery: "select table_name, view_definition from information_schema.views where table_schema = database() and table_name in ('view_a', 'view_b')",
expCreateStmtQuery: []string{"show create table view_a", "show create table view_b"},
- expClearQuery: "delete from _vt.views where TABLE_SCHEMA = database() and TABLE_NAME in ('view_a', 'view_b')",
+ expClearQuery: []string{
+ "delete from _vt.views where TABLE_SCHEMA = database() and TABLE_NAME in ('view_a', 'view_b')",
+ "delete from _vt.views where TABLE_SCHEMA = database() and TABLE_NAME in ('view_b', 'view_a')",
+ },
expInsertQuery: []string{
"insert into _vt.views(TABLE_SCHEMA, TABLE_NAME, CREATE_STATEMENT, VIEW_DEFINITION) values (database(), 'view_a', 'create_view_a', 'def_a')",
"insert into _vt.views(TABLE_SCHEMA, TABLE_NAME, CREATE_STATEMENT, VIEW_DEFINITION) values (database(), 'view_b', 'create_view_b', 'def_b')",
@@ -456,7 +475,7 @@ func TestReloadView(t *testing.T) {
expViewsChanged: []string{"view_b"},
expGetViewDefinitionsQuery: "select table_name, view_definition from information_schema.views where table_schema = database() and table_name in ('view_b')",
expCreateStmtQuery: []string{"show create table view_b"},
- expClearQuery: "delete from _vt.views where TABLE_SCHEMA = database() and TABLE_NAME in ('view_b')",
+ expClearQuery: []string{"delete from _vt.views where TABLE_SCHEMA = database() and TABLE_NAME in ('view_b')"},
expInsertQuery: []string{
"insert into _vt.views(TABLE_SCHEMA, TABLE_NAME, CREATE_STATEMENT, VIEW_DEFINITION) values (database(), 'view_b', 'create_view_mod_b', 'def_mod_b')",
},
@@ -473,7 +492,14 @@ func TestReloadView(t *testing.T) {
expViewsChanged: []string{"view_a", "view_b", "view_c"},
expGetViewDefinitionsQuery: "select table_name, view_definition from information_schema.views where table_schema = database() and table_name in ('view_b', 'view_c', 'view_a')",
expCreateStmtQuery: []string{"show create table view_a", "show create table view_c"},
- expClearQuery: "delete from _vt.views where table_schema = database() and table_name in ('view_b', 'view_c', 'view_a')",
+ expClearQuery: []string{
+ "delete from _vt.views where table_schema = database() and table_name in ('view_a', 'view_b', 'view_c')",
+ "delete from _vt.views where table_schema = database() and table_name in ('view_a', 'view_c', 'view_b')",
+ "delete from _vt.views where table_schema = database() and table_name in ('view_b', 'view_a', 'view_c')",
+ "delete from _vt.views where table_schema = database() and table_name in ('view_b', 'view_c', 'view_a')",
+ "delete from _vt.views where table_schema = database() and table_name in ('view_c', 'view_a', 'view_b')",
+ "delete from _vt.views where table_schema = database() and table_name in ('view_c', 'view_b', 'view_a')",
+ },
expInsertQuery: []string{
"insert into _vt.views(TABLE_SCHEMA, TABLE_NAME, CREATE_STATEMENT, VIEW_DEFINITION) values (database(), 'view_a', 'create_view_mod_a', 'def_mod_a')",
"insert into _vt.views(TABLE_SCHEMA, TABLE_NAME, CREATE_STATEMENT, VIEW_DEFINITION) values (database(), 'view_c', 'create_view_c', 'def_c')",
@@ -492,8 +518,9 @@ func TestReloadView(t *testing.T) {
for idx := range tcases[0].expInsertQuery {
db.AddQuery(tcases[0].expInsertQuery[idx], &sqltypes.Result{})
}
- db.AddQuery(tcases[0].expClearQuery, &sqltypes.Result{})
-
+ for _, query := range tcases[0].expClearQuery {
+ db.AddQuery(query, &sqltypes.Result{})
+ }
var tcCount atomic.Int32
ch := make(chan struct{})
@@ -525,7 +552,9 @@ func TestReloadView(t *testing.T) {
for i := range tcases[idx].expInsertQuery {
db.AddQuery(tcases[idx].expInsertQuery[i], &sqltypes.Result{})
}
- db.AddQuery(tcases[idx].expClearQuery, &sqltypes.Result{})
+ for _, query := range tcases[idx].expClearQuery {
+ db.AddQuery(query, &sqltypes.Result{})
+ }
db.AddQueryPattern("SELECT .* information_schema.innodb_tablespaces .*", tcases[idx].showTablesWithSizesOutput)
db.AddQueryPattern(".*SELECT table_name, view_definition.*views.*", tcases[idx].detectViewChangeOutput)
case <-time.After(10 * time.Second):
@@ -549,3 +578,44 @@ func testStream(hs *healthStreamer) (<-chan *querypb.StreamHealthResponse, conte
func testBlpFunc() (int64, int32) {
return 1, 2
}
+
+// TestDeadlockBwCloseAndReload tests the deadlock observed between Close and Reload
+// functions. More details can be found in the issue https://github.com/vitessio/vitess/issues/17229#issuecomment-2476136610.
+func TestDeadlockBwCloseAndReload(t *testing.T) {
+ cfg := newConfig(nil)
+ env := tabletenv.NewEnv(vtenv.NewTestEnv(), cfg, "TestNotServingPrimary")
+ alias := &topodatapb.TabletAlias{
+ Cell: "cell",
+ Uid: 1,
+ }
+ se := schema.NewEngineForTests()
+ // Create a new health streamer and set it to a serving primary state
+ hs := newHealthStreamer(env, alias, se)
+ hs.signalWhenSchemaChange = true
+ hs.Open()
+ hs.MakePrimary(true)
+ defer hs.Close()
+
+ wg := sync.WaitGroup{}
+ wg.Add(2)
+ // Try running Close & MakePrimary and reload in parallel multiple times.
+ // This reproduces the deadlock quite readily.
+ go func() {
+ defer wg.Done()
+ for i := 0; i < 100; i++ {
+ hs.Close()
+ hs.Open()
+ hs.MakePrimary(true)
+ }
+ }()
+
+ go func() {
+ defer wg.Done()
+ for i := 0; i < 100; i++ {
+ se.BroadcastForTesting(nil, nil, nil, true)
+ }
+ }()
+
+ // Wait for wait group to finish.
+ wg.Wait()
+}
diff --git a/go/vt/vttablet/tabletserver/messager/engine.go b/go/vt/vttablet/tabletserver/messager/engine.go
index 2e526fcdc3d..9d8b09e819a 100644
--- a/go/vt/vttablet/tabletserver/messager/engine.go
+++ b/go/vt/vttablet/tabletserver/messager/engine.go
@@ -52,9 +52,16 @@ type VStreamer interface {
// Engine is the engine for handling messages.
type Engine struct {
- mu sync.Mutex
- isOpen bool
- managers map[string]*messageManager
+ // mu is a mutex used to protect the isOpen variable
+ // and for ensuring we don't call setup functions in parallel.
+ mu sync.Mutex
+ isOpen bool
+
+ // managersMu is a mutex used to protect the managers field.
+ // We require two separate mutexes, so that we don't have to acquire the same mutex
+ // in Close and schemaChanged which can lead to a deadlock described in https://github.com/vitessio/vitess/issues/17229.
+ managersMu sync.Mutex
+ managers map[string]*messageManager
tsv TabletService
se *schema.Engine
@@ -76,15 +83,12 @@ func NewEngine(tsv TabletService, se *schema.Engine, vs VStreamer) *Engine {
// Open starts the Engine service.
func (me *Engine) Open() {
me.mu.Lock()
+ defer me.mu.Unlock()
if me.isOpen {
- me.mu.Unlock()
return
}
me.isOpen = true
- me.mu.Unlock()
log.Info("Messager: opening")
- // Unlock before invoking RegisterNotifier because it
- // obtains the same lock.
me.se.RegisterNotifier("messages", me.schemaChanged, true)
}
@@ -102,6 +106,8 @@ func (me *Engine) Close() {
log.Infof("messager Engine - unregistering notifiers")
me.se.UnregisterNotifier("messages")
log.Infof("messager Engine - closing all managers")
+ me.managersMu.Lock()
+ defer me.managersMu.Unlock()
for _, mm := range me.managers {
mm.Close()
}
@@ -110,8 +116,8 @@ func (me *Engine) Close() {
}
func (me *Engine) GetGenerator(name string) (QueryGenerator, error) {
- me.mu.Lock()
- defer me.mu.Unlock()
+ me.managersMu.Lock()
+ defer me.managersMu.Unlock()
mm := me.managers[name]
if mm == nil {
return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "message table %s not found in schema", name)
@@ -132,6 +138,8 @@ func (me *Engine) Subscribe(ctx context.Context, name string, send func(*sqltype
if !me.isOpen {
return nil, vterrors.Errorf(vtrpcpb.Code_UNAVAILABLE, "messager engine is closed, probably because this is not a primary any more")
}
+ me.managersMu.Lock()
+ defer me.managersMu.Unlock()
mm := me.managers[name]
if mm == nil {
return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "message table %s not found", name)
@@ -140,8 +148,8 @@ func (me *Engine) Subscribe(ctx context.Context, name string, send func(*sqltype
}
func (me *Engine) schemaChanged(tables map[string]*schema.Table, created, altered, dropped []*schema.Table, _ bool) {
- me.mu.Lock()
- defer me.mu.Unlock()
+ me.managersMu.Lock()
+ defer me.managersMu.Unlock()
for _, table := range append(dropped, altered...) {
name := table.Name.String()
mm := me.managers[name]
diff --git a/go/vt/vttablet/tabletserver/messager/engine_test.go b/go/vt/vttablet/tabletserver/messager/engine_test.go
index 30e849ac73b..124e6a9a380 100644
--- a/go/vt/vttablet/tabletserver/messager/engine_test.go
+++ b/go/vt/vttablet/tabletserver/messager/engine_test.go
@@ -19,6 +19,7 @@ package messager
import (
"context"
"reflect"
+ "sync"
"testing"
"vitess.io/vitess/go/sqltypes"
@@ -156,7 +157,7 @@ func newTestEngine() *Engine {
tsv := &fakeTabletServer{
Env: tabletenv.NewEnv(vtenv.NewTestEnv(), cfg, "MessagerTest"),
}
- se := schema.NewEngine(tsv)
+ se := schema.NewEngineForTests()
te := NewEngine(tsv, se, newFakeVStreamer())
te.Open()
return te
@@ -169,3 +170,33 @@ func newEngineReceiver() (f func(qr *sqltypes.Result) error, ch chan *sqltypes.R
return nil
}, ch
}
+
+// TestDeadlockBwCloseAndSchemaChange tests the deadlock observed between Close and schemaChanged
+// functions. More details can be found in the issue https://github.com/vitessio/vitess/issues/17229.
+func TestDeadlockBwCloseAndSchemaChange(t *testing.T) {
+ engine := newTestEngine()
+ defer engine.Close()
+ se := engine.se
+
+ wg := sync.WaitGroup{}
+ wg.Add(2)
+ // Try running Close and schemaChanged in parallel multiple times.
+ // This reproduces the deadlock quite readily.
+ go func() {
+ defer wg.Done()
+ for i := 0; i < 100; i++ {
+ engine.Close()
+ engine.Open()
+ }
+ }()
+
+ go func() {
+ defer wg.Done()
+ for i := 0; i < 100; i++ {
+ se.BroadcastForTesting(nil, nil, nil, true)
+ }
+ }()
+
+ // Wait for wait group to finish.
+ wg.Wait()
+}
diff --git a/go/vt/vttablet/tabletserver/messager/message_manager.go b/go/vt/vttablet/tabletserver/messager/message_manager.go
index a1fc27187a3..7a217fb63b7 100644
--- a/go/vt/vttablet/tabletserver/messager/message_manager.go
+++ b/go/vt/vttablet/tabletserver/messager/message_manager.go
@@ -236,6 +236,9 @@ type messageManager struct {
ackQuery *sqlparser.ParsedQuery
postponeQuery *sqlparser.ParsedQuery
purgeQuery *sqlparser.ParsedQuery
+
+ // idType is the type of the id column in the message table.
+ idType sqltypes.Type
}
// newMessageManager creates a new message manager.
@@ -259,6 +262,7 @@ func newMessageManager(tsv TabletService, vs VStreamer, table *schema.Table, pos
purgeTicks: timer.NewTimer(table.MessageInfo.PollInterval),
postponeSema: postponeSema,
messagesPending: true,
+ idType: table.MessageInfo.IDType,
}
mm.cond.L = &mm.mu
@@ -856,7 +860,7 @@ func (mm *messageManager) GenerateAckQuery(ids []string) (string, map[string]*qu
}
for _, id := range ids {
idbvs.Values = append(idbvs.Values, &querypb.Value{
- Type: querypb.Type_VARBINARY,
+ Type: mm.idType,
Value: []byte(id),
})
}
@@ -874,7 +878,7 @@ func (mm *messageManager) GeneratePostponeQuery(ids []string) (string, map[strin
}
for _, id := range ids {
idbvs.Values = append(idbvs.Values, &querypb.Value{
- Type: querypb.Type_VARBINARY,
+ Type: mm.idType,
Value: []byte(id),
})
}
diff --git a/go/vt/vttablet/tabletserver/messager/message_manager_test.go b/go/vt/vttablet/tabletserver/messager/message_manager_test.go
index 6c323d2d95b..5e1c21f773f 100644
--- a/go/vt/vttablet/tabletserver/messager/message_manager_test.go
+++ b/go/vt/vttablet/tabletserver/messager/message_manager_test.go
@@ -74,6 +74,7 @@ func newMMTable() *schema.Table {
BatchSize: 1,
CacheSize: 10,
PollInterval: 1 * time.Second,
+ IDType: sqltypes.VarBinary,
},
}
}
@@ -91,6 +92,7 @@ func newMMTableWithBackoff() *schema.Table {
BatchSize: 1,
CacheSize: 10,
PollInterval: 1 * time.Second,
+ IDType: sqltypes.VarBinary,
},
}
}
diff --git a/go/vt/vttablet/tabletserver/planbuilder/plan.go b/go/vt/vttablet/tabletserver/planbuilder/plan.go
index f18ea59a714..5dbabcc8763 100644
--- a/go/vt/vttablet/tabletserver/planbuilder/plan.go
+++ b/go/vt/vttablet/tabletserver/planbuilder/plan.go
@@ -205,10 +205,7 @@ func (plan *Plan) TableNames() (names []string) {
func Build(env *vtenv.Environment, statement sqlparser.Statement, tables map[string]*schema.Table, dbName string, viewsEnabled bool) (plan *Plan, err error) {
switch stmt := statement.(type) {
case *sqlparser.Union:
- plan, err = &Plan{
- PlanID: PlanSelect,
- FullQuery: GenerateLimitQuery(stmt),
- }, nil
+ plan = &Plan{PlanID: PlanSelect, FullQuery: GenerateLimitQuery(stmt)}
case *sqlparser.Select:
plan, err = analyzeSelect(env, stmt, tables)
case *sqlparser.Insert:
@@ -218,39 +215,44 @@ func Build(env *vtenv.Environment, statement sqlparser.Statement, tables map[str
case *sqlparser.Delete:
plan, err = analyzeDelete(stmt, tables)
case *sqlparser.Set:
- plan, err = analyzeSet(stmt), nil
+ plan = analyzeSet(stmt)
case sqlparser.DDLStatement:
plan, err = analyzeDDL(stmt)
case *sqlparser.AlterMigration:
- plan, err = &Plan{PlanID: PlanAlterMigration, FullStmt: stmt}, nil
+ plan = &Plan{PlanID: PlanAlterMigration, FullStmt: stmt}
case *sqlparser.RevertMigration:
- plan, err = &Plan{PlanID: PlanRevertMigration, FullStmt: stmt}, nil
+ plan = &Plan{PlanID: PlanRevertMigration, FullStmt: stmt}
case *sqlparser.ShowMigrationLogs:
- plan, err = &Plan{PlanID: PlanShowMigrationLogs, FullStmt: stmt}, nil
+ plan = &Plan{PlanID: PlanShowMigrationLogs, FullStmt: stmt}
case *sqlparser.ShowThrottledApps:
- plan, err = &Plan{PlanID: PlanShowThrottledApps, FullStmt: stmt}, nil
+ plan = &Plan{PlanID: PlanShowThrottledApps, FullStmt: stmt}
case *sqlparser.ShowThrottlerStatus:
- plan, err = &Plan{PlanID: PlanShowThrottlerStatus, FullStmt: stmt}, nil
+ plan = &Plan{PlanID: PlanShowThrottlerStatus, FullStmt: stmt}
case *sqlparser.Show:
plan, err = analyzeShow(stmt, dbName)
case *sqlparser.Analyze, sqlparser.Explain:
- plan, err = &Plan{PlanID: PlanOtherRead}, nil
+ // Analyze and Explain are treated as read-only queries.
+ // We send down a string, and get a table result back.
+ plan = &Plan{
+ PlanID: PlanSelect,
+ FullQuery: GenerateFullQuery(stmt),
+ }
case *sqlparser.OtherAdmin:
- plan, err = &Plan{PlanID: PlanOtherAdmin}, nil
+ plan = &Plan{PlanID: PlanOtherAdmin}
case *sqlparser.Savepoint:
- plan, err = &Plan{PlanID: PlanSavepoint}, nil
+ plan = &Plan{PlanID: PlanSavepoint, FullStmt: stmt}
case *sqlparser.Release:
- plan, err = &Plan{PlanID: PlanRelease}, nil
+ plan = &Plan{PlanID: PlanRelease}
case *sqlparser.SRollback:
- plan, err = &Plan{PlanID: PlanSRollback}, nil
+ plan = &Plan{PlanID: PlanSRollback, FullStmt: stmt}
case *sqlparser.Load:
- plan, err = &Plan{PlanID: PlanLoad}, nil
+ plan = &Plan{PlanID: PlanLoad}
case *sqlparser.Flush:
plan, err = analyzeFlush(stmt, tables)
case *sqlparser.UnlockTables:
- plan, err = &Plan{PlanID: PlanUnlockTables}, nil
+ plan = &Plan{PlanID: PlanUnlockTables}
case *sqlparser.CallProc:
- plan, err = &Plan{PlanID: PlanCallProc, FullQuery: GenerateFullQuery(stmt)}, nil
+ plan = &Plan{PlanID: PlanCallProc, FullQuery: GenerateFullQuery(stmt)}
default:
return nil, vterrors.New(vtrpcpb.Code_INVALID_ARGUMENT, "invalid SQL")
}
diff --git a/go/vt/vttablet/tabletserver/planbuilder/testdata/exec_cases.txt b/go/vt/vttablet/tabletserver/planbuilder/testdata/exec_cases.txt
index cafbe43231d..f549f506ad3 100644
--- a/go/vt/vttablet/tabletserver/planbuilder/testdata/exec_cases.txt
+++ b/go/vt/vttablet/tabletserver/planbuilder/testdata/exec_cases.txt
@@ -763,14 +763,15 @@ options:PassthroughDMLs
# analyze
"analyze table a"
{
- "PlanID": "OtherRead",
+ "PlanID": "Select",
"TableName": "",
"Permissions": [
- {
- "TableName": "a",
- "Role": 1
- }
- ]
+ {
+ "TableName": "a",
+ "Role": 1
+ }
+ ],
+ "FullQuery": "analyze table a"
}
# show
@@ -783,15 +784,17 @@ options:PassthroughDMLs
# describe
"describe a"
{
- "PlanID": "OtherRead",
- "TableName": ""
+ "PlanID": "Select",
+ "TableName": "",
+ "FullQuery": "explain a"
}
# explain
"explain a"
{
- "PlanID": "OtherRead",
- "TableName": ""
+ "PlanID": "Select",
+ "TableName": "",
+ "FullQuery": "explain a"
}
# repair
diff --git a/go/vt/vttablet/tabletserver/production.go b/go/vt/vttablet/tabletserver/production.go
index 70cb8b092fa..e0d8cb4fd66 100644
--- a/go/vt/vttablet/tabletserver/production.go
+++ b/go/vt/vttablet/tabletserver/production.go
@@ -18,6 +18,10 @@ limitations under the License.
package tabletserver
+import (
+ "context"
+)
+
// This file defines debug constants that are always false.
// This file is used for building production code.
// We use go build directives to include a file that defines the constant to true
@@ -28,3 +32,7 @@ package tabletserver
const DebugTwoPc = false
func commitPreparedDelayForTest(tsv *TabletServer) {}
+
+func checkTestFailure(context.Context, string) error {
+ return nil
+}
diff --git a/go/vt/vttablet/tabletserver/query_executor.go b/go/vt/vttablet/tabletserver/query_executor.go
index 1318f2b90ab..519b60b79d6 100644
--- a/go/vt/vttablet/tabletserver/query_executor.go
+++ b/go/vt/vttablet/tabletserver/query_executor.go
@@ -167,9 +167,15 @@ func (qre *QueryExecutor) Execute() (reply *sqltypes.Result, err error) {
}
defer conn.Unlock()
if qre.setting != nil {
- if err = conn.ApplySetting(qre.ctx, qre.setting); err != nil {
+ applied, err := conn.ApplySetting(qre.ctx, qre.setting)
+ if err != nil {
return nil, vterrors.Wrap(err, "failed to execute system setting on the connection")
}
+ // If we have applied the settings on the connection, then we should record the query detail.
+ // This is required for redoing the transaction in case of a failure.
+ if applied {
+ conn.TxProperties().RecordQueryDetail(qre.setting.ApplyQuery(), nil)
+ }
}
return qre.txConnExec(conn)
}
@@ -235,7 +241,7 @@ func (qre *QueryExecutor) execAutocommit(f func(conn *StatefulConnection) (*sqlt
return nil, errTxThrottled
}
- conn, _, _, err := qre.tsv.te.txPool.Begin(qre.ctx, qre.options, false, 0, nil, qre.setting)
+ conn, _, _, err := qre.tsv.te.txPool.Begin(qre.ctx, qre.options, false, 0, qre.setting)
if err != nil {
return nil, err
@@ -249,7 +255,7 @@ func (qre *QueryExecutor) execAsTransaction(f func(conn *StatefulConnection) (*s
if qre.tsv.txThrottler.Throttle(qre.tsv.getPriorityFromOptions(qre.options), qre.options.GetWorkloadName()) {
return nil, errTxThrottled
}
- conn, beginSQL, _, err := qre.tsv.te.txPool.Begin(qre.ctx, qre.options, false, 0, nil, qre.setting)
+ conn, beginSQL, _, err := qre.tsv.te.txPool.Begin(qre.ctx, qre.options, false, 0, qre.setting)
if err != nil {
return nil, err
}
@@ -278,8 +284,10 @@ func (qre *QueryExecutor) execAsTransaction(f func(conn *StatefulConnection) (*s
func (qre *QueryExecutor) txConnExec(conn *StatefulConnection) (*sqltypes.Result, error) {
switch qre.plan.PlanID {
- case p.PlanInsert, p.PlanUpdate, p.PlanDelete, p.PlanSet:
+ case p.PlanInsert, p.PlanUpdate, p.PlanDelete:
return qre.txFetch(conn, true)
+ case p.PlanSet:
+ return qre.txFetch(conn, false)
case p.PlanInsertMessage:
qre.bindVars["#time_now"] = sqltypes.Int64BindVariable(time.Now().UnixNano())
return qre.txFetch(conn, true)
@@ -287,8 +295,12 @@ func (qre *QueryExecutor) txConnExec(conn *StatefulConnection) (*sqltypes.Result
return qre.execDMLLimit(conn)
case p.PlanOtherRead, p.PlanOtherAdmin, p.PlanFlush, p.PlanUnlockTables:
return qre.execStatefulConn(conn, qre.query, true)
- case p.PlanSavepoint, p.PlanRelease, p.PlanSRollback:
- return qre.execStatefulConn(conn, qre.query, true)
+ case p.PlanSavepoint:
+ return qre.execSavepointQuery(conn, qre.query, qre.plan.FullStmt)
+ case p.PlanSRollback:
+ return qre.execRollbackToSavepoint(conn, qre.query, qre.plan.FullStmt)
+ case p.PlanRelease:
+ return qre.execTxQuery(conn, qre.query, false)
case p.PlanSelect, p.PlanSelectImpossible, p.PlanShow, p.PlanSelectLockFunc:
maxrows := qre.getSelectLimit()
qre.bindVars["#maxLimit"] = sqltypes.Int64BindVariable(maxrows + 1)
@@ -378,7 +390,7 @@ func (qre *QueryExecutor) Stream(callback StreamCallback) error {
}
defer txConn.Unlock()
if qre.setting != nil {
- if err = txConn.ApplySetting(qre.ctx, qre.setting); err != nil {
+ if _, err = txConn.ApplySetting(qre.ctx, qre.setting); err != nil {
return vterrors.Wrap(err, "failed to execute system setting on the connection")
}
}
@@ -790,6 +802,11 @@ func (qre *QueryExecutor) txFetch(conn *StatefulConnection, record bool) (*sqlty
if err != nil {
return nil, err
}
+ return qre.execTxQuery(conn, sql, record)
+}
+
+// execTxQuery executes the query provided and record in Tx Property if record is true.
+func (qre *QueryExecutor) execTxQuery(conn *StatefulConnection, sql string, record bool) (*sqltypes.Result, error) {
qr, err := qre.execStatefulConn(conn, sql, true)
if err != nil {
return nil, err
@@ -801,6 +818,40 @@ func (qre *QueryExecutor) txFetch(conn *StatefulConnection, record bool) (*sqlty
return qr, nil
}
+// execTxQuery executes the query provided and record in Tx Property if record is true.
+func (qre *QueryExecutor) execSavepointQuery(conn *StatefulConnection, sql string, ast sqlparser.Statement) (*sqltypes.Result, error) {
+ qr, err := qre.execStatefulConn(conn, sql, true)
+ if err != nil {
+ return nil, err
+ }
+
+ // Only record successful queries.
+ sp, ok := ast.(*sqlparser.Savepoint)
+ if !ok {
+ return nil, vterrors.VT13001("expected to get a savepoint statement")
+ }
+ conn.TxProperties().RecordSavePointDetail(sp.Name.String())
+
+ return qr, nil
+}
+
+// execTxQuery executes the query provided and record in Tx Property if record is true.
+func (qre *QueryExecutor) execRollbackToSavepoint(conn *StatefulConnection, sql string, ast sqlparser.Statement) (*sqltypes.Result, error) {
+ qr, err := qre.execStatefulConn(conn, sql, true)
+ if err != nil {
+ return nil, err
+ }
+
+ // Only record successful queries.
+ sp, ok := ast.(*sqlparser.SRollback)
+ if !ok {
+ return nil, vterrors.VT13001("expected to get a rollback statement")
+ }
+
+ _ = conn.TxProperties().RollbackToSavepoint(sp.Name.String())
+ return qr, nil
+}
+
func (qre *QueryExecutor) generateFinalSQL(parsedQuery *sqlparser.ParsedQuery, bindVars map[string]*querypb.BindVariable) (string, string, error) {
query, err := parsedQuery.GenerateQuery(bindVars, nil)
if err != nil {
@@ -940,6 +991,8 @@ func (qre *QueryExecutor) execAlterMigration() (*sqltypes.Result, error) {
return qre.tsv.onlineDDLExecutor.ForceCutOverMigration(qre.ctx, alterMigration.UUID)
case sqlparser.ForceCutOverAllMigrationType:
return qre.tsv.onlineDDLExecutor.ForceCutOverPendingMigrations(qre.ctx)
+ case sqlparser.SetCutOverThresholdMigrationType:
+ return qre.tsv.onlineDDLExecutor.SetMigrationCutOverThreshold(qre.ctx, alterMigration.UUID, alterMigration.Threshold)
}
return nil, vterrors.New(vtrpcpb.Code_UNIMPLEMENTED, "ALTER VITESS_MIGRATION not implemented")
}
diff --git a/go/vt/vttablet/tabletserver/query_executor_test.go b/go/vt/vttablet/tabletserver/query_executor_test.go
index 78daad2e616..ade79ecaef5 100644
--- a/go/vt/vttablet/tabletserver/query_executor_test.go
+++ b/go/vt/vttablet/tabletserver/query_executor_test.go
@@ -1514,20 +1514,17 @@ func newTestTabletServer(ctx context.Context, flags executorFlags, db *fakesqldb
} else {
cfg.StrictTableACL = false
}
- if flags&noTwopc > 0 {
- cfg.TwoPCEnable = false
- } else {
- cfg.TwoPCEnable = true
- }
if flags&disableOnlineDDL > 0 {
cfg.EnableOnlineDDL = false
} else {
cfg.EnableOnlineDDL = true
}
- if flags&shortTwopcAge > 0 {
- cfg.TwoPCAbandonAge = 0.5
+ if flags&noTwopc > 0 {
+ cfg.TwoPCAbandonAge = 0
+ } else if flags&shortTwopcAge > 0 {
+ cfg.TwoPCAbandonAge = 500 * time.Millisecond
} else {
- cfg.TwoPCAbandonAge = 10
+ cfg.TwoPCAbandonAge = 10 * time.Second
}
if flags&smallResultSize > 0 {
cfg.Oltp.MaxRows = 2
diff --git a/go/vt/vttablet/tabletserver/querylogz.go b/go/vt/vttablet/tabletserver/querylogz.go
index 33341d1641b..09f375aa329 100644
--- a/go/vt/vttablet/tabletserver/querylogz.go
+++ b/go/vt/vttablet/tabletserver/querylogz.go
@@ -20,9 +20,10 @@ import (
"net/http"
"strconv"
"strings"
- "text/template"
"time"
+ "github.com/google/safehtml/template"
+
"vitess.io/vitess/go/acl"
"vitess.io/vitess/go/vt/log"
"vitess.io/vitess/go/vt/logz"
diff --git a/go/vt/vttablet/tabletserver/querylogz_test.go b/go/vt/vttablet/tabletserver/querylogz_test.go
index 25f03c762c7..ee26437f330 100644
--- a/go/vt/vttablet/tabletserver/querylogz_test.go
+++ b/go/vt/vttablet/tabletserver/querylogz_test.go
@@ -37,7 +37,7 @@ func TestQuerylogzHandler(t *testing.T) {
req, _ := http.NewRequest("GET", "/querylogz?timeout=10&limit=1", nil)
logStats := tabletenv.NewLogStats(context.Background(), "Execute")
logStats.PlanType = planbuilder.PlanSelect.String()
- logStats.OriginalSQL = "select name from test_table limit 1000"
+ logStats.OriginalSQL = "select name, 'inject ' from test_table limit 1000"
logStats.RowsAffected = 1000
logStats.NumberOfQueries = 1
logStats.StartTime, _ = time.Parse("Jan 2 15:04:05", "Nov 29 13:33:09")
@@ -64,7 +64,7 @@ func TestQuerylogzHandler(t *testing.T) {
`0.001 `,
`1e-08 `,
`Select `,
- `select name from test_table limit 1000 `,
+ regexp.QuoteMeta(`select name, 'inject <script>alert();</script>' from test_table limit 1000 `),
`1 `,
`none `,
`1000 `,
@@ -95,7 +95,7 @@ func TestQuerylogzHandler(t *testing.T) {
`0.001 `,
`1e-08 `,
`Select `,
- `select name from test_table limit 1000 `,
+ regexp.QuoteMeta(`select name, 'inject <script>alert();</script>' from test_table limit 1000 `),
`1 `,
`none `,
`1000 `,
@@ -126,7 +126,7 @@ func TestQuerylogzHandler(t *testing.T) {
`0.001 `,
`1e-08 `,
`Select `,
- `select name from test_table limit 1000 `,
+ regexp.QuoteMeta(`select name, 'inject <script>alert();</script>' from test_table limit 1000 `),
`1 `,
`none `,
`1000 `,
diff --git a/go/vt/vttablet/tabletserver/schema/cached_size.go b/go/vt/vttablet/tabletserver/schema/cached_size.go
index 8ca75534a62..4db9f313644 100644
--- a/go/vt/vttablet/tabletserver/schema/cached_size.go
+++ b/go/vt/vttablet/tabletserver/schema/cached_size.go
@@ -25,7 +25,7 @@ func (cached *MessageInfo) CachedSize(alloc bool) int64 {
}
size := int64(0)
if alloc {
- size += int64(80)
+ size += int64(96)
}
// field Fields []*vitess.io/vitess/go/vt/proto/query.Field
{
diff --git a/go/vt/vttablet/tabletserver/schema/engine.go b/go/vt/vttablet/tabletserver/schema/engine.go
index aadba5739c8..fb4a9d9367a 100644
--- a/go/vt/vttablet/tabletserver/schema/engine.go
+++ b/go/vt/vttablet/tabletserver/schema/engine.go
@@ -31,6 +31,7 @@ import (
"vitess.io/vitess/go/acl"
"vitess.io/vitess/go/constants/sidecar"
"vitess.io/vitess/go/mysql"
+ "vitess.io/vitess/go/mysql/collations/charset"
"vitess.io/vitess/go/mysql/replication"
"vitess.io/vitess/go/mysql/sqlerror"
"vitess.io/vitess/go/sqltypes"
@@ -180,14 +181,15 @@ func (se *Engine) syncSidecarDB(ctx context.Context, conn *dbconnpool.DBConnecti
// EnsureConnectionAndDB ensures that we can connect to mysql.
// If tablet type is primary and there is no db, then the database is created.
// This function can be called before opening the Engine.
-func (se *Engine) EnsureConnectionAndDB(tabletType topodatapb.TabletType) error {
+func (se *Engine) EnsureConnectionAndDB(tabletType topodatapb.TabletType, serving bool) error {
ctx := tabletenv.LocalContext()
// We use AllPrivs since syncSidecarDB() might need to upgrade the schema
conn, err := dbconnpool.NewDBConnection(ctx, se.env.Config().DB.AllPrivsWithDB())
if err == nil {
se.dbCreationFailed = false
// upgrade sidecar db if required, for a tablet with an existing database
- if tabletType == topodatapb.TabletType_PRIMARY {
+ // only run DDL updates when a PRIMARY is transitioning to serving state.
+ if tabletType == topodatapb.TabletType_PRIMARY && serving {
if err := se.syncSidecarDB(ctx, conn); err != nil {
conn.Close()
return err
@@ -196,7 +198,7 @@ func (se *Engine) EnsureConnectionAndDB(tabletType topodatapb.TabletType) error
conn.Close()
return nil
}
- if tabletType != topodatapb.TabletType_PRIMARY {
+ if tabletType != topodatapb.TabletType_PRIMARY || !serving {
return err
}
if merr, isSQLErr := err.(*sqlerror.SQLError); !isSQLErr || merr.Num != sqlerror.ERBadDb {
@@ -423,10 +425,55 @@ func (se *Engine) reload(ctx context.Context, includeStats bool) error {
return err
}
+ var innodbTablesStats map[string]*Table
+ if includeStats {
+ if innodbTableSizesQuery := conn.Conn.BaseShowInnodbTableSizes(); innodbTableSizesQuery != "" {
+ // Since the InnoDB table size query is available to us on this MySQL version, we should use it.
+ // We therefore don't want to query for table sizes in getTableData()
+ includeStats = false
+
+ innodbResults, err := conn.Conn.Exec(ctx, innodbTableSizesQuery, maxTableCount, false)
+ if err != nil {
+ return vterrors.Wrapf(err, "in Engine.reload(), reading innodb tables")
+ }
+ innodbTablesStats = make(map[string]*Table, len(innodbResults.Rows))
+ for _, row := range innodbResults.Rows {
+ innodbTableName := row[0].ToString() // In the form of encoded `schema/table`
+ fileSize, _ := row[1].ToCastUint64()
+ allocatedSize, _ := row[2].ToCastUint64()
+
+ if _, ok := innodbTablesStats[innodbTableName]; !ok {
+ innodbTablesStats[innodbTableName] = &Table{}
+ }
+ // There could be multiple appearances of the same table in the result set:
+ // A table that has FULLTEXT indexes will appear once for the table itself,
+ // with total size of row data, and once for the aggregates size of all
+ // FULLTEXT indexes. We aggregate the sizes of all appearances of the same table.
+ table := innodbTablesStats[innodbTableName]
+ table.FileSize += fileSize
+ table.AllocatedSize += allocatedSize
+
+ if originalTableName, _, found := strings.Cut(innodbTableName, "#p#"); found {
+ // innodbTableName is encoded any special characters are turned into some @0-f0-f0-f value.
+ // Therefore this "#p#" here is a clear indication that we are looking at a partitioned table.
+ // We turn `my@002ddb/tbl_part#p#p0` into `my@002ddb/tbl_part`
+ // and aggregate the total partition sizes.
+ if _, ok := innodbTablesStats[originalTableName]; !ok {
+ innodbTablesStats[originalTableName] = &Table{}
+ originalTable := innodbTablesStats[originalTableName]
+ originalTable.FileSize += fileSize
+ originalTable.AllocatedSize += allocatedSize
+ }
+ }
+ }
+ // See testing in TestEngineReload
+ }
+ }
tableData, err := getTableData(ctx, conn.Conn, includeStats)
if err != nil {
return vterrors.Wrapf(err, "in Engine.reload(), reading tables")
}
+
// On the primary tablet, we also check the data we have stored in our schema tables to see what all needs reloading.
shouldUseDatabase := se.isServingPrimary && se.schemaCopy
@@ -461,8 +508,14 @@ func (se *Engine) reload(ctx context.Context, includeStats bool) error {
changedTables := make(map[string]*Table)
// created and altered contain the names of created and altered tables for broadcast.
var created, altered []*Table
+ databaseName := se.cp.DBName()
for _, row := range tableData.Rows {
tableName := row[0].ToString()
+ var innodbTable *Table
+ if innodbTablesStats != nil {
+ innodbTableName := fmt.Sprintf("%s/%s", charset.TablenameToFilename(databaseName), charset.TablenameToFilename(tableName))
+ innodbTable = innodbTablesStats[innodbTableName]
+ }
curTables[tableName] = true
createTime, _ := row[2].ToCastInt64()
var fileSize, allocatedSize uint64
@@ -473,6 +526,9 @@ func (se *Engine) reload(ctx context.Context, includeStats bool) error {
// publish the size metrics
se.tableFileSizeGauge.Set(tableName, int64(fileSize))
se.tableAllocatedSizeGauge.Set(tableName, int64(allocatedSize))
+ } else if innodbTable != nil {
+ se.tableFileSizeGauge.Set(tableName, int64(innodbTable.FileSize))
+ se.tableAllocatedSizeGauge.Set(tableName, int64(innodbTable.AllocatedSize))
}
// Table schemas are cached by tabletserver. For each table we cache `information_schema.tables.create_time` (`tbl.CreateTime`).
@@ -500,6 +556,9 @@ func (se *Engine) reload(ctx context.Context, includeStats bool) error {
if includeStats {
tbl.FileSize = fileSize
tbl.AllocatedSize = allocatedSize
+ } else if innodbTable != nil {
+ tbl.FileSize = innodbTable.FileSize
+ tbl.AllocatedSize = innodbTable.AllocatedSize
}
continue
}
@@ -519,6 +578,9 @@ func (se *Engine) reload(ctx context.Context, includeStats bool) error {
if includeStats {
table.FileSize = fileSize
table.AllocatedSize = allocatedSize
+ } else if innodbTable != nil {
+ table.FileSize = innodbTable.FileSize
+ table.AllocatedSize = innodbTable.AllocatedSize
}
table.CreateTime = createTime
changedTables[tableName] = table
@@ -803,6 +865,13 @@ func (se *Engine) broadcast(created, altered, dropped []*Table, udfsChanged bool
}
}
+// BroadcastForTesting is meant to be a testing function that triggers a broadcast call.
+func (se *Engine) BroadcastForTesting(created, altered, dropped []*Table, udfsChanged bool) {
+ se.mu.Lock()
+ defer se.mu.Unlock()
+ se.broadcast(created, altered, dropped, udfsChanged)
+}
+
// GetTable returns the info for a table.
func (se *Engine) GetTable(tableName sqlparser.IdentifierCS) *Table {
se.mu.Lock()
@@ -889,6 +958,7 @@ func NewEngineForTests() *Engine {
tables: make(map[string]*Table),
historian: newHistorian(false, 0, nil),
env: tabletenv.NewEnv(vtenv.NewTestEnv(), tabletenv.NewDefaultConfig(), "SchemaEngineForTests"),
+ notifiers: make(map[string]notifier),
}
return se
}
diff --git a/go/vt/vttablet/tabletserver/schema/engine_test.go b/go/vt/vttablet/tabletserver/schema/engine_test.go
index 1fd6098b384..3faa7a10554 100644
--- a/go/vt/vttablet/tabletserver/schema/engine_test.go
+++ b/go/vt/vttablet/tabletserver/schema/engine_test.go
@@ -42,6 +42,7 @@ import (
"vitess.io/vitess/go/stats"
"vitess.io/vitess/go/test/utils"
"vitess.io/vitess/go/vt/dbconfigs"
+ topodatapb "vitess.io/vitess/go/vt/proto/topodata"
"vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/vtenv"
"vitess.io/vitess/go/vt/vttablet/tabletserver/connpool"
@@ -53,11 +54,15 @@ import (
)
const baseShowTablesWithSizesPattern = `SELECT t\.table_name.*SUM\(i\.file_size\).*`
+const baseInnoDBTableSizesPattern = `(?s).*SELECT.*its\.space = it\.space.*SUM\(its\.file_size\).*`
var mustMatch = utils.MustMatchFn(".Mutex")
-func TestOpenAndReload(t *testing.T) {
- db := fakesqldb.New(t)
+// TestOpenAndReloadLegacy
+//
+// Runs with 5.7 env
+func TestOpenAndReloadLegacy(t *testing.T) {
+ db := fakesqldb.NewWithEnv(t, vtenv.NewLegacyTestEnv())
defer db.Close()
schematest.AddDefaultQueries(db)
@@ -86,7 +91,7 @@ func TestOpenAndReload(t *testing.T) {
))
firstReadRowsValue := 12
AddFakeInnoDBReadRowsResult(db, firstReadRowsValue)
- se := newEngine(10*time.Second, 10*time.Second, 0, db)
+ se := newEngine(10*time.Second, 10*time.Second, 0, db, vtenv.NewLegacyTestEnv())
se.Open()
defer se.Close()
@@ -95,6 +100,19 @@ func TestOpenAndReload(t *testing.T) {
assert.Equal(t, int64(0), se.tableFileSizeGauge.Counts()["msg"])
assert.Equal(t, int64(0), se.tableAllocatedSizeGauge.Counts()["msg"])
+ t.Run("EnsureConnectionAndDB", func(t *testing.T) {
+ // Verify that none of the following configurations run any schema change detection queries -
+ // 1. REPLICA serving
+ // 2. REPLICA non-serving
+ // 3. PRIMARY serving
+ err := se.EnsureConnectionAndDB(topodatapb.TabletType_REPLICA, true)
+ require.NoError(t, err)
+ err = se.EnsureConnectionAndDB(topodatapb.TabletType_PRIMARY, false)
+ require.NoError(t, err)
+ err = se.EnsureConnectionAndDB(topodatapb.TabletType_REPLICA, false)
+ require.NoError(t, err)
+ })
+
// Advance time some more.
db.AddQuery("select unix_timestamp()", sqltypes.MakeTestResult(sqltypes.MakeTestFields(
"t",
@@ -278,23 +296,279 @@ func TestOpenAndReload(t *testing.T) {
assert.Equal(t, want, se.GetSchema())
}
-func TestReloadWithSwappedTables(t *testing.T) {
+func TestOpenAndReload(t *testing.T) {
db := fakesqldb.New(t)
defer db.Close()
schematest.AddDefaultQueries(db)
db.RejectQueryPattern(baseShowTablesWithSizesPattern, "Opening schema engine should query tables without size information")
+ db.RejectQueryPattern(baseInnoDBTableSizesPattern, "Opening schema engine should query tables without size information")
+
+ db.AddQuery(mysql.BaseShowTables, &sqltypes.Result{
+ Fields: mysql.BaseShowTablesFields,
+ RowsAffected: 0,
+ InsertID: 0,
+ Rows: [][]sqltypes.Value{
+ mysql.BaseShowTablesRow("test_table_01", false, ""),
+ mysql.BaseShowTablesRow("test_table_02", false, ""),
+ mysql.BaseShowTablesRow("test_table_03", false, ""),
+ mysql.BaseShowTablesRow("seq", false, "vitess_sequence"),
+ mysql.BaseShowTablesRow("msg", false, "vitess_message,vt_ack_wait=30,vt_purge_after=120,vt_batch_size=1,vt_cache_size=10,vt_poller_interval=30"),
+ },
+ SessionStateChanges: "",
+ StatusFlags: 0,
+ })
+
+ // advance to one second after the default 1427325875.
+ db.AddQuery("select unix_timestamp()", sqltypes.MakeTestResult(sqltypes.MakeTestFields(
+ "t",
+ "int64"),
+ "1427325876",
+ ))
+ firstReadRowsValue := 12
+ AddFakeInnoDBReadRowsResult(db, firstReadRowsValue)
+ se := newEngine(10*time.Second, 10*time.Second, 0, db, nil)
+ se.Open()
+ defer se.Close()
+
+ want := initialSchema()
+ mustMatch(t, want, se.GetSchema())
+ assert.Equal(t, int64(0), se.tableFileSizeGauge.Counts()["msg"])
+ assert.Equal(t, int64(0), se.tableAllocatedSizeGauge.Counts()["msg"])
+
+ t.Run("EnsureConnectionAndDB", func(t *testing.T) {
+ // Verify that none of the following configurations run any schema change detection queries -
+ // 1. REPLICA serving
+ // 2. REPLICA non-serving
+ // 3. PRIMARY serving
+ err := se.EnsureConnectionAndDB(topodatapb.TabletType_REPLICA, true)
+ require.NoError(t, err)
+ err = se.EnsureConnectionAndDB(topodatapb.TabletType_PRIMARY, false)
+ require.NoError(t, err)
+ err = se.EnsureConnectionAndDB(topodatapb.TabletType_REPLICA, false)
+ require.NoError(t, err)
+ })
+
+ // Advance time some more.
+ db.AddQuery("select unix_timestamp()", sqltypes.MakeTestResult(sqltypes.MakeTestFields(
+ "t",
+ "int64"),
+ "1427325877",
+ ))
+ assert.EqualValues(t, firstReadRowsValue, se.innoDbReadRowsCounter.Get())
+ // Modify test_table_03
+ // Add test_table_04
+ // Drop msg
db.AddQuery(mysql.BaseShowTables, &sqltypes.Result{
Fields: mysql.BaseShowTablesFields,
RowsAffected: 0,
InsertID: 0,
+ Rows: [][]sqltypes.Value{
+ mysql.BaseShowTablesRow("test_table_01", false, ""),
+ mysql.BaseShowTablesRow("test_table_02", false, ""),
+ {
+ sqltypes.MakeTrusted(sqltypes.VarChar, []byte("test_table_03")), // table_name
+ sqltypes.MakeTrusted(sqltypes.VarChar, []byte("BASE TABLE")), // table_type
+ sqltypes.MakeTrusted(sqltypes.Int64, []byte("1427325877")), // unix_timestamp(t.create_time)
+ sqltypes.MakeTrusted(sqltypes.VarChar, []byte("")), // table_comment
+ sqltypes.MakeTrusted(sqltypes.Int64, []byte("128")), // file_size
+ sqltypes.MakeTrusted(sqltypes.Int64, []byte("256")), // allocated_size
+ },
+ mysql.BaseShowTablesRow("test_table_04", false, ""),
+ mysql.BaseShowTablesRow("seq", false, "vitess_sequence"),
+ },
+ SessionStateChanges: "",
+ StatusFlags: 0,
+ })
+ // Modify test_table_03
+ // Add test_table_04
+ // Drop msg
+ db.AddQueryPattern(baseInnoDBTableSizesPattern, &sqltypes.Result{
+ Fields: mysql.BaseInnoDBTableSizesFields,
+ Rows: [][]sqltypes.Value{
+ mysql.BaseInnoDBTableSizesRow("fakesqldb", "test_table_01"),
+ mysql.BaseInnoDBTableSizesRow("fakesqldb", "test_table_02"),
+ {
+ sqltypes.MakeTrusted(sqltypes.VarChar, []byte("fakesqldb/test_table_03")), // table_name
+ sqltypes.MakeTrusted(sqltypes.Int64, []byte("128")), // file_size
+ sqltypes.MakeTrusted(sqltypes.Int64, []byte("256")), // allocated_size
+ },
+ mysql.BaseInnoDBTableSizesRow("fakesqldb", "test_table_04"),
+ mysql.BaseInnoDBTableSizesRow("fakesqldb", "seq"),
+ },
+ })
+ db.RejectQueryPattern(baseShowTablesWithSizesPattern, "Opening schema engine should query tables without size information")
+
+ db.MockQueriesForTable("test_table_03", &sqltypes.Result{
+ Fields: []*querypb.Field{{
+ Name: "pk1",
+ Type: sqltypes.Int32,
+ }, {
+ Name: "pk2",
+ Type: sqltypes.Int32,
+ }, {
+ Name: "val",
+ Type: sqltypes.Int32,
+ }},
+ })
+
+ db.MockQueriesForTable("test_table_04", &sqltypes.Result{
+ Fields: []*querypb.Field{{
+ Name: "pk",
+ Type: sqltypes.Int32,
+ }},
+ })
+
+ db.AddQuery(mysql.BaseShowPrimary, &sqltypes.Result{
+ Fields: mysql.ShowPrimaryFields,
+ Rows: [][]sqltypes.Value{
+ mysql.ShowPrimaryRow("test_table_01", "pk"),
+ mysql.ShowPrimaryRow("test_table_02", "pk"),
+ mysql.ShowPrimaryRow("test_table_03", "pk1"),
+ mysql.ShowPrimaryRow("test_table_03", "pk2"),
+ mysql.ShowPrimaryRow("test_table_04", "pk"),
+ mysql.ShowPrimaryRow("seq", "id"),
+ },
+ })
+ secondReadRowsValue := 123
+ AddFakeInnoDBReadRowsResult(db, secondReadRowsValue)
+
+ firstTime := true
+ notifier := func(full map[string]*Table, created, altered, dropped []*Table, _ bool) {
+ if firstTime {
+ firstTime = false
+ createTables := extractNamesFromTablesList(created)
+ sort.Strings(createTables)
+ assert.Equal(t, []string{"dual", "msg", "seq", "test_table_01", "test_table_02", "test_table_03"}, createTables)
+ assert.Equal(t, []*Table(nil), altered)
+ assert.Equal(t, []*Table(nil), dropped)
+ } else {
+ assert.Equal(t, []string{"test_table_04"}, extractNamesFromTablesList(created))
+ assert.Equal(t, []string{"test_table_03"}, extractNamesFromTablesList(altered))
+ assert.Equal(t, []string{"msg"}, extractNamesFromTablesList(dropped))
+ }
+ }
+ se.RegisterNotifier("test", notifier, true)
+ err := se.Reload(context.Background())
+ require.NoError(t, err)
+
+ assert.EqualValues(t, secondReadRowsValue, se.innoDbReadRowsCounter.Get())
+
+ want["seq"].FileSize = 100
+ want["seq"].AllocatedSize = 150
+
+ want["test_table_01"].FileSize = 100
+ want["test_table_01"].AllocatedSize = 150
+
+ want["test_table_02"].FileSize = 100
+ want["test_table_02"].AllocatedSize = 150
+
+ want["test_table_03"] = &Table{
+ Name: sqlparser.NewIdentifierCS("test_table_03"),
+ Fields: []*querypb.Field{{
+ Name: "pk1",
+ Type: sqltypes.Int32,
+ }, {
+ Name: "pk2",
+ Type: sqltypes.Int32,
+ }, {
+ Name: "val",
+ Type: sqltypes.Int32,
+ }},
+ PKColumns: []int{0, 1},
+ CreateTime: 1427325877,
+ FileSize: 128,
+ AllocatedSize: 256,
+ }
+ want["test_table_04"] = &Table{
+ Name: sqlparser.NewIdentifierCS("test_table_04"),
+ Fields: []*querypb.Field{{
+ Name: "pk",
+ Type: sqltypes.Int32,
+ }},
+ PKColumns: []int{0},
+ CreateTime: 1427325875,
+ FileSize: 100,
+ AllocatedSize: 150,
+ }
+ delete(want, "msg")
+ assert.Equal(t, want, se.GetSchema())
+ assert.Equal(t, int64(0), se.tableAllocatedSizeGauge.Counts()["msg"])
+ assert.Equal(t, int64(0), se.tableFileSizeGauge.Counts()["msg"])
+
+ // ReloadAt tests
+ pos1, err := replication.DecodePosition("MariaDB/0-41983-20")
+ require.NoError(t, err)
+ pos2, err := replication.DecodePosition("MariaDB/0-41983-40")
+ require.NoError(t, err)
+ se.UnregisterNotifier("test")
+
+ err = se.ReloadAt(context.Background(), replication.Position{})
+ require.NoError(t, err)
+ assert.Equal(t, want, se.GetSchema())
+
+ err = se.ReloadAt(context.Background(), pos1)
+ require.NoError(t, err)
+ assert.Equal(t, want, se.GetSchema())
+
+ db.AddQueryPattern(baseShowTablesWithSizesPattern, &sqltypes.Result{
+ Fields: mysql.BaseShowTablesWithSizesFields,
Rows: [][]sqltypes.Value{
mysql.BaseShowTablesWithSizesRow("test_table_01", false, ""),
mysql.BaseShowTablesWithSizesRow("test_table_02", false, ""),
- mysql.BaseShowTablesWithSizesRow("test_table_03", false, ""),
+ mysql.BaseShowTablesWithSizesRow("test_table_04", false, ""),
mysql.BaseShowTablesWithSizesRow("seq", false, "vitess_sequence"),
- mysql.BaseShowTablesWithSizesRow("msg", false, "vitess_message,vt_ack_wait=30,vt_purge_after=120,vt_batch_size=1,vt_cache_size=10,vt_poller_interval=30"),
+ },
+ })
+
+ db.AddQuery(mysql.BaseShowTables, &sqltypes.Result{
+ Fields: mysql.BaseShowTablesFields,
+ Rows: [][]sqltypes.Value{
+ mysql.BaseShowTablesRow("test_table_01", false, ""),
+ mysql.BaseShowTablesRow("test_table_02", false, ""),
+ mysql.BaseShowTablesRow("test_table_04", false, ""),
+ mysql.BaseShowTablesRow("seq", false, "vitess_sequence"),
+ },
+ })
+
+ db.AddQuery(mysql.BaseShowPrimary, &sqltypes.Result{
+ Fields: mysql.ShowPrimaryFields,
+ Rows: [][]sqltypes.Value{
+ mysql.ShowPrimaryRow("test_table_01", "pk"),
+ mysql.ShowPrimaryRow("test_table_02", "pk"),
+ mysql.ShowPrimaryRow("test_table_04", "pk"),
+ mysql.ShowPrimaryRow("seq", "id"),
+ },
+ })
+ err = se.ReloadAt(context.Background(), pos1)
+ require.NoError(t, err)
+ assert.Equal(t, want, se.GetSchema())
+
+ delete(want, "test_table_03")
+ err = se.ReloadAt(context.Background(), pos2)
+ require.NoError(t, err)
+ assert.Equal(t, want, se.GetSchema())
+}
+
+func TestReloadWithSwappedTables(t *testing.T) {
+ db := fakesqldb.New(t)
+ defer db.Close()
+ schematest.AddDefaultQueries(db)
+
+ db.RejectQueryPattern(baseShowTablesWithSizesPattern, "Opening schema engine should query tables without size information")
+ db.RejectQueryPattern(baseInnoDBTableSizesPattern, "Opening schema engine should query tables without size information")
+
+ db.AddQuery(mysql.BaseShowTables, &sqltypes.Result{
+ Fields: mysql.BaseShowTablesFields,
+ RowsAffected: 0,
+ InsertID: 0,
+ Rows: [][]sqltypes.Value{
+ mysql.BaseShowTablesRow("test_table_01", false, ""),
+ mysql.BaseShowTablesRow("test_table_02", false, ""),
+ mysql.BaseShowTablesRow("test_table_03", false, ""),
+ mysql.BaseShowTablesRow("seq", false, "vitess_sequence"),
+ mysql.BaseShowTablesRow("msg", false, "vitess_message,vt_ack_wait=30,vt_purge_after=120,vt_batch_size=1,vt_cache_size=10,vt_poller_interval=30"),
},
SessionStateChanges: "",
StatusFlags: 0,
@@ -302,7 +576,7 @@ func TestReloadWithSwappedTables(t *testing.T) {
firstReadRowsValue := 12
AddFakeInnoDBReadRowsResult(db, firstReadRowsValue)
- se := newEngine(10*time.Second, 10*time.Second, 0, db)
+ se := newEngine(10*time.Second, 10*time.Second, 0, db, nil)
se.Open()
defer se.Close()
want := initialSchema()
@@ -315,24 +589,43 @@ func TestReloadWithSwappedTables(t *testing.T) {
"int64"),
"1427325876",
))
- db.AddQueryPattern(baseShowTablesWithSizesPattern, &sqltypes.Result{
- Fields: mysql.BaseShowTablesWithSizesFields,
+ db.AddQueryPattern(baseInnoDBTableSizesPattern, &sqltypes.Result{
+ Fields: mysql.BaseInnoDBTableSizesFields,
Rows: [][]sqltypes.Value{
- mysql.BaseShowTablesWithSizesRow("test_table_01", false, ""),
- mysql.BaseShowTablesWithSizesRow("test_table_02", false, ""),
- mysql.BaseShowTablesWithSizesRow("test_table_03", false, ""),
+ mysql.BaseInnoDBTableSizesRow("fakesqldb", "test_table_01"),
+ mysql.BaseInnoDBTableSizesRow("fakesqldb", "test_table_02"),
+ mysql.BaseInnoDBTableSizesRow("fakesqldb", "test_table_03"),
{
- sqltypes.MakeTrusted(sqltypes.VarChar, []byte("test_table_04")),
- sqltypes.MakeTrusted(sqltypes.VarChar, []byte("BASE TABLE")),
- sqltypes.MakeTrusted(sqltypes.Int64, []byte("1427325877")), // unix_timestamp(create_time)
- sqltypes.MakeTrusted(sqltypes.VarChar, []byte("")),
- sqltypes.MakeTrusted(sqltypes.Int64, []byte("128")), // file_size
- sqltypes.MakeTrusted(sqltypes.Int64, []byte("256")), // allocated_size
+ sqltypes.MakeTrusted(sqltypes.VarChar, []byte("fakesqldb/test_table_04")), // table_name
+ sqltypes.MakeTrusted(sqltypes.Int64, []byte("128")), // file_size
+ sqltypes.MakeTrusted(sqltypes.Int64, []byte("256")), // allocated_size
},
- mysql.BaseShowTablesWithSizesRow("seq", false, "vitess_sequence"),
- mysql.BaseShowTablesWithSizesRow("msg", false, "vitess_message,vt_ack_wait=30,vt_purge_after=120,vt_batch_size=1,vt_cache_size=10,vt_poller_interval=30"),
+ mysql.BaseInnoDBTableSizesRow("fakesqldb", "seq"),
+ mysql.BaseInnoDBTableSizesRow("fakesqldb", "msg"),
},
})
+ db.AddQuery(mysql.BaseShowTables, &sqltypes.Result{
+ Fields: mysql.BaseShowTablesFields,
+ RowsAffected: 0,
+ InsertID: 0,
+ Rows: [][]sqltypes.Value{
+ mysql.BaseShowTablesRow("test_table_01", false, ""),
+ mysql.BaseShowTablesRow("test_table_02", false, ""),
+ mysql.BaseShowTablesRow("test_table_03", false, ""),
+ {
+ sqltypes.MakeTrusted(sqltypes.VarChar, []byte("test_table_04")), // table_name
+ sqltypes.MakeTrusted(sqltypes.VarChar, []byte("BASE TABLE")), // table_type
+ sqltypes.MakeTrusted(sqltypes.Int64, []byte("1427325877")), // unix_timestamp(t.create_time)
+ sqltypes.MakeTrusted(sqltypes.VarChar, []byte("")), // table_comment
+ sqltypes.MakeTrusted(sqltypes.Int64, []byte("128")), // file_size
+ sqltypes.MakeTrusted(sqltypes.Int64, []byte("256")), // allocated_size
+ },
+ mysql.BaseShowTablesRow("seq", false, "vitess_sequence"),
+ mysql.BaseShowTablesRow("msg", false, "vitess_message,vt_ack_wait=30,vt_purge_after=120,vt_batch_size=1,vt_cache_size=10,vt_poller_interval=30"),
+ },
+ SessionStateChanges: "",
+ StatusFlags: 0,
+ })
db.MockQueriesForTable("test_table_04", &sqltypes.Result{
Fields: []*querypb.Field{{
Name: "mypk",
@@ -389,11 +682,28 @@ func TestReloadWithSwappedTables(t *testing.T) {
"int64"),
"1427325877",
))
- db.AddQueryPattern(baseShowTablesWithSizesPattern, &sqltypes.Result{
- Fields: mysql.BaseShowTablesWithSizesFields,
+ db.AddQueryPattern(baseInnoDBTableSizesPattern, &sqltypes.Result{
+ Fields: mysql.BaseInnoDBTableSizesFields,
Rows: [][]sqltypes.Value{
- mysql.BaseShowTablesWithSizesRow("test_table_01", false, ""),
- mysql.BaseShowTablesWithSizesRow("test_table_02", false, ""),
+ mysql.BaseInnoDBTableSizesRow("fakesqldb", "test_table_01"),
+ mysql.BaseInnoDBTableSizesRow("fakesqldb", "test_table_02"),
+ {
+ sqltypes.MakeTrusted(sqltypes.VarChar, []byte("fakesqldb/test_table_03")), // table_name
+ sqltypes.MakeTrusted(sqltypes.Int64, []byte("128")), // file_size
+ sqltypes.MakeTrusted(sqltypes.Int64, []byte("256")), // allocated_size
+ },
+ mysql.BaseInnoDBTableSizesRow("fakesqldb", "test_table_04"),
+ mysql.BaseInnoDBTableSizesRow("fakesqldb", "seq"),
+ mysql.BaseInnoDBTableSizesRow("fakesqldb", "msg"),
+ },
+ })
+ db.AddQuery(mysql.BaseShowTables, &sqltypes.Result{
+ Fields: mysql.BaseShowTablesFields,
+ RowsAffected: 0,
+ InsertID: 0,
+ Rows: [][]sqltypes.Value{
+ mysql.BaseShowTablesRow("test_table_01", false, ""),
+ mysql.BaseShowTablesRow("test_table_02", false, ""),
{
sqltypes.MakeTrusted(sqltypes.VarChar, []byte("test_table_03")),
sqltypes.MakeTrusted(sqltypes.VarChar, []byte("BASE TABLE")),
@@ -402,10 +712,12 @@ func TestReloadWithSwappedTables(t *testing.T) {
sqltypes.MakeTrusted(sqltypes.Int64, []byte("128")), // file_size
sqltypes.MakeTrusted(sqltypes.Int64, []byte("256")), // allocated_size
},
- mysql.BaseShowTablesWithSizesRow("test_table_04", false, ""),
- mysql.BaseShowTablesWithSizesRow("seq", false, "vitess_sequence"),
- mysql.BaseShowTablesWithSizesRow("msg", false, "vitess_message,vt_ack_wait=30,vt_purge_after=120,vt_batch_size=1,vt_cache_size=10,vt_poller_interval=30"),
+ mysql.BaseShowTablesRow("test_table_04", false, ""),
+ mysql.BaseShowTablesRow("seq", false, "vitess_sequence"),
+ mysql.BaseShowTablesRow("msg", false, "vitess_message,vt_ack_wait=30,vt_purge_after=120,vt_batch_size=1,vt_cache_size=10,vt_poller_interval=30"),
},
+ SessionStateChanges: "",
+ StatusFlags: 0,
})
db.MockQueriesForTable("test_table_03", &sqltypes.Result{
Fields: []*querypb.Field{{
@@ -468,7 +780,7 @@ func TestOpenFailedDueToExecErr(t *testing.T) {
schematest.AddDefaultQueries(db)
want := "injected error"
db.AddRejectedQuery(mysql.BaseShowTables, errors.New(want))
- se := newEngine(1*time.Second, 1*time.Second, 0, db)
+ se := newEngine(1*time.Second, 1*time.Second, 0, db, nil)
err := se.Open()
if err == nil || !strings.Contains(err.Error(), want) {
t.Errorf("se.Open: %v, want %s", err, want)
@@ -499,7 +811,7 @@ func TestOpenFailedDueToLoadTableErr(t *testing.T) {
db.AddRejectedQuery("SELECT * FROM `fakesqldb`.`test_view` WHERE 1 != 1", sqlerror.NewSQLErrorFromError(errors.New("The user specified as a definer ('root'@'%') does not exist (errno 1449) (sqlstate HY000)")))
AddFakeInnoDBReadRowsResult(db, 0)
- se := newEngine(1*time.Second, 1*time.Second, 0, db)
+ se := newEngine(1*time.Second, 1*time.Second, 0, db, nil)
err := se.Open()
// failed load should return an error because of test_table
assert.ErrorContains(t, err, "Row count exceeded")
@@ -534,7 +846,7 @@ func TestOpenNoErrorDueToInvalidViews(t *testing.T) {
db.AddRejectedQuery("SELECT `col1`, `col2` FROM `fakesqldb`.`bar_view` WHERE 1 != 1", sqlerror.NewSQLError(sqlerror.ERWrongFieldWithGroup, sqlerror.SSClientError, "random error for table bar_view"))
AddFakeInnoDBReadRowsResult(db, 0)
- se := newEngine(1*time.Second, 1*time.Second, 0, db)
+ se := newEngine(1*time.Second, 1*time.Second, 0, db, nil)
err := se.Open()
require.NoError(t, err)
@@ -550,7 +862,7 @@ func TestExportVars(t *testing.T) {
db := fakesqldb.New(t)
defer db.Close()
schematest.AddDefaultQueries(db)
- se := newEngine(1*time.Second, 1*time.Second, 0, db)
+ se := newEngine(1*time.Second, 1*time.Second, 0, db, nil)
se.Open()
defer se.Close()
expvar.Do(func(kv expvar.KeyValue) {
@@ -562,7 +874,7 @@ func TestStatsURL(t *testing.T) {
db := fakesqldb.New(t)
defer db.Close()
schematest.AddDefaultQueries(db)
- se := newEngine(1*time.Second, 1*time.Second, 0, db)
+ se := newEngine(1*time.Second, 1*time.Second, 0, db, nil)
se.Open()
defer se.Close()
@@ -592,7 +904,7 @@ func TestSchemaEngineCloseTickRace(t *testing.T) {
})
AddFakeInnoDBReadRowsResult(db, 12)
// Start the engine with a small reload tick
- se := newEngine(100*time.Millisecond, 1*time.Second, 0, db)
+ se := newEngine(100*time.Millisecond, 1*time.Second, 0, db, nil)
err := se.Open()
require.NoError(t, err)
@@ -619,15 +931,20 @@ func TestSchemaEngineCloseTickRace(t *testing.T) {
}
}
-func newEngine(reloadTime time.Duration, idleTimeout time.Duration, schemaMaxAgeSeconds int64, db *fakesqldb.DB) *Engine {
+func newEngine(reloadTime time.Duration, idleTimeout time.Duration, schemaMaxAgeSeconds int64, db *fakesqldb.DB, env *vtenv.Environment) *Engine {
cfg := tabletenv.NewDefaultConfig()
cfg.SchemaReloadInterval = reloadTime
cfg.OltpReadPool.IdleTimeout = idleTimeout
cfg.OlapReadPool.IdleTimeout = idleTimeout
cfg.TxPool.IdleTimeout = idleTimeout
cfg.SchemaVersionMaxAgeSeconds = schemaMaxAgeSeconds
- se := NewEngine(tabletenv.NewEnv(vtenv.NewTestEnv(), cfg, "SchemaTest"))
- se.InitDBConfig(newDBConfigs(db).DbaWithDB())
+ dbConfigs := newDBConfigs(db)
+ cfg.DB = dbConfigs
+ if env == nil {
+ env = vtenv.NewTestEnv()
+ }
+ se := NewEngine(tabletenv.NewEnv(env, cfg, "SchemaTest"))
+ se.InitDBConfig(dbConfigs.DbaWithDB())
return se
}
@@ -737,6 +1054,7 @@ func initialSchema() map[string]*Table {
BatchSize: 1,
CacheSize: 10,
PollInterval: 30 * time.Second,
+ IDType: sqltypes.Int64,
},
},
}
@@ -1015,7 +1333,6 @@ func TestEngineGetTableData(t *testing.T) {
name string
expectedQueries map[string]*sqltypes.Result
queriesToReject map[string]error
- includeStats bool
expectedError string
}{
{
@@ -1023,13 +1340,6 @@ func TestEngineGetTableData(t *testing.T) {
expectedQueries: map[string]*sqltypes.Result{
conn.BaseShowTables(): {},
},
- includeStats: false,
- }, {
- name: "Success with include stats",
- expectedQueries: map[string]*sqltypes.Result{
- conn.BaseShowTablesWithSizes(): {},
- },
- includeStats: true,
}, {
name: "Error in query",
queriesToReject: map[string]error{
@@ -1051,7 +1361,7 @@ func TestEngineGetTableData(t *testing.T) {
defer db.DeleteRejectedQuery(query)
}
- _, err = getTableData(context.Background(), conn, tt.includeStats)
+ _, err = getTableData(context.Background(), conn, false)
if tt.expectedError != "" {
require.ErrorContains(t, err, tt.expectedError)
return
@@ -1178,194 +1488,204 @@ func TestEngineGetDroppedTables(t *testing.T) {
// TestEngineReload tests the entire functioning of engine.Reload testing all the queries that we end up running against MySQL
// while simulating the responses and verifies the final list of created, altered and dropped tables.
func TestEngineReload(t *testing.T) {
- db := fakesqldb.New(t)
- cfg := tabletenv.NewDefaultConfig()
- cfg.DB = newDBConfigs(db)
- cfg.SignalWhenSchemaChange = true
- env := tabletenv.NewEnv(vtenv.NewTestEnv(), nil, "TestEngineReload")
- conn, err := connpool.NewConn(context.Background(), dbconfigs.New(db.ConnParams()), nil, nil, env)
- require.NoError(t, err)
-
- se := newEngine(10*time.Second, 10*time.Second, 0, db)
- se.conns.Open(se.cp, se.cp, se.cp)
- se.isOpen = true
- se.notifiers = make(map[string]notifier)
- se.MakePrimary(true)
+ envs := []*vtenv.Environment{
+ vtenv.NewTestEnv(),
+ vtenv.NewLegacyTestEnv(),
+ }
+ for _, venv := range envs {
+ t.Run(venv.MySQLVersion(), func(t *testing.T) {
+ db := fakesqldb.NewWithEnv(t, venv)
+ cfg := tabletenv.NewDefaultConfig()
+ cfg.DB = newDBConfigs(db)
+ cfg.SignalWhenSchemaChange = true
+
+ env := tabletenv.NewEnv(venv, nil, "TestEngineReload")
+ conn, err := connpool.NewConn(context.Background(), dbconfigs.New(db.ConnParams()), nil, nil, env)
+ require.NoError(t, err)
- // If we have to skip the meta check, then there is nothing to do
- se.SkipMetaCheck = true
- err = se.reload(context.Background(), false)
- require.NoError(t, err)
+ se := newEngine(10*time.Second, 10*time.Second, 0, db, venv)
+ se.conns.Open(se.cp, se.cp, se.cp)
+ se.isOpen = true
+ se.notifiers = make(map[string]notifier)
+ se.MakePrimary(true)
- se.SkipMetaCheck = false
- se.lastChange = 987654321
+ // If we have to skip the meta check, then there is nothing to do
+ se.SkipMetaCheck = true
+ err = se.reload(context.Background(), false)
+ require.NoError(t, err)
- // Initial tables in the schema engine
- se.tables = map[string]*Table{
- "t1": {
- Name: sqlparser.NewIdentifierCS("t1"),
- Type: NoType,
- CreateTime: 123456789,
- },
- "t2": {
- Name: sqlparser.NewIdentifierCS("t2"),
- Type: NoType,
- CreateTime: 123456789,
- },
- "t4": {
- Name: sqlparser.NewIdentifierCS("t4"),
- Type: NoType,
- CreateTime: 123456789,
- },
- "v1": {
- Name: sqlparser.NewIdentifierCS("v1"),
- Type: View,
- CreateTime: 123456789,
- },
- "v2": {
- Name: sqlparser.NewIdentifierCS("v2"),
- Type: View,
- CreateTime: 123456789,
- },
- "v4": {
- Name: sqlparser.NewIdentifierCS("v4"),
- Type: View,
- CreateTime: 123456789,
- },
- }
- // MySQL unix timestamp query.
- db.AddQuery("SELECT UNIX_TIMESTAMP()", sqltypes.MakeTestResult(sqltypes.MakeTestFields("UNIX_TIMESTAMP", "int64"), "987654326"))
- // Table t2 is updated, T2 is created and t4 is deleted.
- // View v2 is updated, V2 is created and v4 is deleted.
- db.AddQuery(conn.BaseShowTables(), sqltypes.MakeTestResult(sqltypes.MakeTestFields("table_name|table_type|unix_timestamp(create_time)|table_comment",
- "varchar|varchar|int64|varchar"),
- "t1|BASE_TABLE|123456789|",
- "t2|BASE_TABLE|123456790|",
- "T2|BASE_TABLE|123456789|",
- "v1|VIEW|123456789|",
- "v2|VIEW|123456789|",
- "V2|VIEW|123456789|",
- ))
+ se.SkipMetaCheck = false
+ se.lastChange = 987654321
- // Detecting view changes.
- // According to the database, v2, V2, v4, and v5 require updating.
- db.AddQuery(fmt.Sprintf(detectViewChange, sidecar.GetIdentifier()), sqltypes.MakeTestResult(sqltypes.MakeTestFields("table_name", "varchar"),
- "v2",
- "V2",
- "v4",
- "v5",
- ))
+ // Initial tables in the schema engine
+ se.tables = map[string]*Table{
+ "t1": {
+ Name: sqlparser.NewIdentifierCS("t1"),
+ Type: NoType,
+ CreateTime: 123456789,
+ },
+ "t2": {
+ Name: sqlparser.NewIdentifierCS("t2"),
+ Type: NoType,
+ CreateTime: 123456789,
+ },
+ "t4": {
+ Name: sqlparser.NewIdentifierCS("t4"),
+ Type: NoType,
+ CreateTime: 123456789,
+ },
+ "v1": {
+ Name: sqlparser.NewIdentifierCS("v1"),
+ Type: View,
+ CreateTime: 123456789,
+ },
+ "v2": {
+ Name: sqlparser.NewIdentifierCS("v2"),
+ Type: View,
+ CreateTime: 123456789,
+ },
+ "v4": {
+ Name: sqlparser.NewIdentifierCS("v4"),
+ Type: View,
+ CreateTime: 123456789,
+ },
+ }
+ // MySQL unix timestamp query.
+ db.AddQuery("SELECT UNIX_TIMESTAMP()", sqltypes.MakeTestResult(sqltypes.MakeTestFields("UNIX_TIMESTAMP", "int64"), "987654326"))
+ // Table t2 is updated, T2 is created and t4 is deleted.
+ // View v2 is updated, V2 is created and v4 is deleted.
+ db.AddQuery(conn.BaseShowTables(), sqltypes.MakeTestResult(sqltypes.MakeTestFields("table_name|table_type|unix_timestamp(create_time)|table_comment",
+ "varchar|varchar|int64|varchar"),
+ "t1|BASE_TABLE|123456789|",
+ "t2|BASE_TABLE|123456790|",
+ "T2|BASE_TABLE|123456789|",
+ "v1|VIEW|123456789|",
+ "v2|VIEW|123456789|",
+ "V2|VIEW|123456789|",
+ ))
+ // Detecting view changes.
+ // According to the database, v2, V2, v4, and v5 require updating.
+ db.AddQuery(fmt.Sprintf(detectViewChange, sidecar.GetIdentifier()), sqltypes.MakeTestResult(sqltypes.MakeTestFields("table_name", "varchar"),
+ "v2",
+ "V2",
+ "v4",
+ "v5",
+ ))
- // Finding mismatches in the tables.
- // t5 exists in the database.
- db.AddQuery("SELECT TABLE_NAME, CREATE_TIME FROM _vt.`tables`", sqltypes.MakeTestResult(sqltypes.MakeTestFields("table_name|create_time", "varchar|int64"),
- "t1|123456789",
- "t2|123456789",
- "t4|123456789",
- "t5|123456789",
- ))
+ // Finding mismatches in the tables.
+ // t5 exists in the database.
+ db.AddQuery("SELECT TABLE_NAME, CREATE_TIME FROM _vt.`tables`", sqltypes.MakeTestResult(sqltypes.MakeTestFields("table_name|create_time", "varchar|int64"),
+ "t1|123456789",
+ "t2|123456789",
+ "t4|123456789",
+ "t5|123456789",
+ ))
- // Read Innodb_rows_read.
- db.AddQuery(mysql.ShowRowsRead, sqltypes.MakeTestResult(sqltypes.MakeTestFields("Variable_name|Value", "varchar|int64"),
- "Innodb_rows_read|35"))
+ // Read Innodb_rows_read.
+ db.AddQuery(mysql.ShowRowsRead, sqltypes.MakeTestResult(sqltypes.MakeTestFields("Variable_name|Value", "varchar|int64"),
+ "Innodb_rows_read|35"))
- // Queries to load the tables' information.
- for _, tableName := range []string{"t2", "T2", "v2", "V2"} {
- db.AddQuery(fmt.Sprintf(`SELECT COLUMN_NAME as column_name
+ // Queries to load the tables' information.
+ for _, tableName := range []string{"t2", "T2", "v2", "V2"} {
+ db.AddQuery(fmt.Sprintf(`SELECT COLUMN_NAME as column_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'fakesqldb' AND TABLE_NAME = '%s'
ORDER BY ORDINAL_POSITION`, tableName),
- sqltypes.MakeTestResult(sqltypes.MakeTestFields("column_name", "varchar"),
- "col1"))
- db.AddQuery(fmt.Sprintf("SELECT `col1` FROM `fakesqldb`.`%v` WHERE 1 != 1", tableName), sqltypes.MakeTestResult(sqltypes.MakeTestFields("col1", "varchar")))
- }
-
- // Primary key information.
- db.AddQuery(mysql.BaseShowPrimary, sqltypes.MakeTestResult(mysql.ShowPrimaryFields,
- "t1|col1",
- "t2|col1",
- "T2|col1",
- ))
-
- // Queries for reloading the tables' information.
- {
- for _, tableName := range []string{"t2", "T2"} {
- db.AddQuery(fmt.Sprintf(`show create table %s`, tableName),
- sqltypes.MakeTestResult(sqltypes.MakeTestFields("Table | Create Table", "varchar|varchar"),
- fmt.Sprintf("%v|create_table_%v", tableName, tableName)))
- }
- db.AddQuery("begin", &sqltypes.Result{})
- db.AddQuery("commit", &sqltypes.Result{})
- db.AddQuery("rollback", &sqltypes.Result{})
- // We are adding both the variants of the delete statements that we can see in the test, since the deleted tables are initially stored as a map, the order is not defined.
- db.AddQuery("delete from _vt.`tables` where TABLE_SCHEMA = database() and TABLE_NAME in ('t5', 't4', 'T2', 't2')", &sqltypes.Result{})
- db.AddQuery("delete from _vt.`tables` where TABLE_SCHEMA = database() and TABLE_NAME in ('t4', 't5', 'T2', 't2')", &sqltypes.Result{})
- db.AddQuery("insert into _vt.`tables`(TABLE_SCHEMA, TABLE_NAME, CREATE_STATEMENT, CREATE_TIME) values (database(), 't2', 'create_table_t2', 123456790)", &sqltypes.Result{})
- db.AddQuery("insert into _vt.`tables`(TABLE_SCHEMA, TABLE_NAME, CREATE_STATEMENT, CREATE_TIME) values (database(), 'T2', 'create_table_T2', 123456789)", &sqltypes.Result{})
- }
+ sqltypes.MakeTestResult(sqltypes.MakeTestFields("column_name", "varchar"),
+ "col1"))
+ db.AddQuery(fmt.Sprintf("SELECT `col1` FROM `fakesqldb`.`%v` WHERE 1 != 1", tableName), sqltypes.MakeTestResult(sqltypes.MakeTestFields("col1", "varchar")))
+ }
- // Queries for reloading the views' information.
- {
- for _, tableName := range []string{"v2", "V2"} {
- db.AddQuery(fmt.Sprintf(`show create table %s`, tableName),
- sqltypes.MakeTestResult(sqltypes.MakeTestFields(" View | Create View | character_set_client | collation_connection", "varchar|varchar|varchar|varchar"),
- fmt.Sprintf("%v|create_table_%v|utf8mb4|utf8mb4_0900_ai_ci", tableName, tableName)))
- }
- // We are adding both the variants of the select statements that we can see in the test, since the deleted views are initially stored as a map, the order is not defined.
- db.AddQuery("select table_name, view_definition from information_schema.views where table_schema = database() and table_name in ('v4', 'v5', 'V2', 'v2')",
- sqltypes.MakeTestResult(sqltypes.MakeTestFields("table_name|view_definition", "varchar|varchar"),
- "v2|select_v2",
- "V2|select_V2",
- ))
- db.AddQuery("select table_name, view_definition from information_schema.views where table_schema = database() and table_name in ('v5', 'v4', 'V2', 'v2')",
- sqltypes.MakeTestResult(sqltypes.MakeTestFields("table_name|view_definition", "varchar|varchar"),
- "v2|select_v2",
- "V2|select_V2",
+ // Primary key information.
+ db.AddQuery(mysql.BaseShowPrimary, sqltypes.MakeTestResult(mysql.ShowPrimaryFields,
+ "t1|col1",
+ "t2|col1",
+ "T2|col1",
))
- // We are adding both the variants of the delete statements that we can see in the test, since the deleted views are initially stored as a map, the order is not defined.
- db.AddQuery("delete from _vt.views where TABLE_SCHEMA = database() and TABLE_NAME in ('v4', 'v5', 'V2', 'v2')", &sqltypes.Result{})
- db.AddQuery("delete from _vt.views where TABLE_SCHEMA = database() and TABLE_NAME in ('v5', 'v4', 'V2', 'v2')", &sqltypes.Result{})
- db.AddQuery("insert into _vt.views(TABLE_SCHEMA, TABLE_NAME, CREATE_STATEMENT, VIEW_DEFINITION) values (database(), 'v2', 'create_table_v2', 'select_v2')", &sqltypes.Result{})
- db.AddQuery("insert into _vt.views(TABLE_SCHEMA, TABLE_NAME, CREATE_STATEMENT, VIEW_DEFINITION) values (database(), 'V2', 'create_table_V2', 'select_V2')", &sqltypes.Result{})
- }
+ // Queries for reloading the tables' information.
+ {
+ for _, tableName := range []string{"t2", "T2"} {
+ db.AddQuery(fmt.Sprintf(`show create table %s`, tableName),
+ sqltypes.MakeTestResult(sqltypes.MakeTestFields("Table | Create Table", "varchar|varchar"),
+ fmt.Sprintf("%v|create_table_%v", tableName, tableName)))
+ }
+ db.AddQuery("begin", &sqltypes.Result{})
+ db.AddQuery("commit", &sqltypes.Result{})
+ db.AddQuery("rollback", &sqltypes.Result{})
+ // We are adding both the variants of the delete statements that we can see in the test, since the deleted tables are initially stored as a map, the order is not defined.
+ db.AddQuery("delete from _vt.`tables` where TABLE_SCHEMA = database() and TABLE_NAME in ('t5', 't4', 'T2', 't2')", &sqltypes.Result{})
+ db.AddQuery("delete from _vt.`tables` where TABLE_SCHEMA = database() and TABLE_NAME in ('t4', 't5', 'T2', 't2')", &sqltypes.Result{})
+ db.AddQuery("insert into _vt.`tables`(TABLE_SCHEMA, TABLE_NAME, CREATE_STATEMENT, CREATE_TIME) values (database(), 't2', 'create_table_t2', 123456790)", &sqltypes.Result{})
+ db.AddQuery("insert into _vt.`tables`(TABLE_SCHEMA, TABLE_NAME, CREATE_STATEMENT, CREATE_TIME) values (database(), 'T2', 'create_table_T2', 123456789)", &sqltypes.Result{})
+ }
- // adding query pattern for udfs
- udfQueryPattern := "SELECT name.*"
- db.AddQueryPattern(udfQueryPattern, &sqltypes.Result{})
+ // Queries for reloading the views' information.
+ {
+ for _, tableName := range []string{"v2", "V2"} {
+ db.AddQuery(fmt.Sprintf(`show create table %s`, tableName),
+ sqltypes.MakeTestResult(sqltypes.MakeTestFields(" View | Create View | character_set_client | collation_connection", "varchar|varchar|varchar|varchar"),
+ fmt.Sprintf("%v|create_table_%v|utf8mb4|utf8mb4_0900_ai_ci", tableName, tableName)))
+ }
+ // We are adding both the variants of the select statements that we can see in the test, since the deleted views are initially stored as a map, the order is not defined.
+ db.AddQuery("select table_name, view_definition from information_schema.views where table_schema = database() and table_name in ('v4', 'v5', 'V2', 'v2')",
+ sqltypes.MakeTestResult(sqltypes.MakeTestFields("table_name|view_definition", "varchar|varchar"),
+ "v2|select_v2",
+ "V2|select_V2",
+ ))
+ db.AddQuery("select table_name, view_definition from information_schema.views where table_schema = database() and table_name in ('v5', 'v4', 'V2', 'v2')",
+ sqltypes.MakeTestResult(sqltypes.MakeTestFields("table_name|view_definition", "varchar|varchar"),
+ "v2|select_v2",
+ "V2|select_V2",
+ ))
+
+ // We are adding both the variants of the delete statements that we can see in the test, since the deleted views are initially stored as a map, the order is not defined.
+ db.AddQuery("delete from _vt.views where TABLE_SCHEMA = database() and TABLE_NAME in ('v4', 'v5', 'V2', 'v2')", &sqltypes.Result{})
+ db.AddQuery("delete from _vt.views where TABLE_SCHEMA = database() and TABLE_NAME in ('v5', 'v4', 'V2', 'v2')", &sqltypes.Result{})
+ db.AddQuery("insert into _vt.views(TABLE_SCHEMA, TABLE_NAME, CREATE_STATEMENT, VIEW_DEFINITION) values (database(), 'v2', 'create_table_v2', 'select_v2')", &sqltypes.Result{})
+ db.AddQuery("insert into _vt.views(TABLE_SCHEMA, TABLE_NAME, CREATE_STATEMENT, VIEW_DEFINITION) values (database(), 'V2', 'create_table_V2', 'select_V2')", &sqltypes.Result{})
+ }
- // Verify the list of created, altered and dropped tables seen.
- se.RegisterNotifier("test", func(full map[string]*Table, created, altered, dropped []*Table, _ bool) {
- require.ElementsMatch(t, extractNamesFromTablesList(created), []string{"T2", "V2"})
- require.ElementsMatch(t, extractNamesFromTablesList(altered), []string{"t2", "v2"})
- require.ElementsMatch(t, extractNamesFromTablesList(dropped), []string{"t4", "v4", "t5", "v5"})
- }, false)
+ // adding query pattern for udfs
+ udfQueryPattern := "SELECT name.*mysql.func.*"
+ db.AddQueryPattern(udfQueryPattern, &sqltypes.Result{})
- // Run the reload.
- err = se.reload(context.Background(), false)
- require.NoError(t, err)
- require.NoError(t, db.LastError())
- require.Zero(t, se.throttledLogger.GetLastLogTime())
+ // Verify the list of created, altered and dropped tables seen.
+ se.RegisterNotifier("test", func(full map[string]*Table, created, altered, dropped []*Table, _ bool) {
+ require.ElementsMatch(t, extractNamesFromTablesList(created), []string{"T2", "V2"})
+ require.ElementsMatch(t, extractNamesFromTablesList(altered), []string{"t2", "v2"})
+ require.ElementsMatch(t, extractNamesFromTablesList(dropped), []string{"t4", "v4", "t5", "v5"})
+ }, false)
- // Now if we remove the query pattern for udfs, schema engine shouldn't fail.
- // Instead we should see a log message with the error.
- db.RemoveQueryPattern(udfQueryPattern)
- se.UnregisterNotifier("test")
- err = se.reload(context.Background(), false)
- require.NoError(t, err)
- // Check for the udf error being logged. The last log time should be less than a second.
- require.Less(t, time.Since(se.throttledLogger.GetLastLogTime()), 1*time.Second)
+ // Run the reload.
+ err = se.reload(context.Background(), false)
+ require.NoError(t, err)
+ require.NoError(t, db.LastError())
+ require.Zero(t, se.throttledLogger.GetLastLogTime())
+
+ // Now if we remove the query pattern for udfs, schema engine shouldn't fail.
+ // Instead we should see a log message with the error.
+ db.RemoveQueryPattern(udfQueryPattern)
+ se.UnregisterNotifier("test")
+ err = se.reload(context.Background(), false)
+ require.NoError(t, err)
+ // Check for the udf error being logged. The last log time should be less than a second.
+ require.Less(t, time.Since(se.throttledLogger.GetLastLogTime()), 1*time.Second)
+ })
+ }
}
-// TestEngineReload tests the vreplication specific GetTableForPos function to ensure
+// TestGetTableForPosLegacy tests the vreplication specific GetTableForPos function to ensure
// that it conforms to the intended/expected behavior in various scenarios.
// This more specifically tests the behavior of the function when the historian is
// disabled or otherwise unable to get a table schema for the given position. When it
// CAN, that is tested indepenently in the historian tests.
-func TestGetTableForPos(t *testing.T) {
+//
+// Runs with 5.7 env
+func TestGetTableForPosLegacy(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
- fakedb := fakesqldb.New(t)
+ fakedb := fakesqldb.NewWithEnv(t, vtenv.NewLegacyTestEnv())
cfg := tabletenv.NewDefaultConfig()
cfg.DB = newDBConfigs(fakedb)
table := sqlparser.NewIdentifierCS("t1")
@@ -1383,7 +1703,7 @@ func TestGetTableForPos(t *testing.T) {
}
// Don't do any automatic / TTL based cache refreshes.
- se := newEngine(1*time.Hour, 1*time.Hour, 0, fakedb)
+ se := newEngine(1*time.Hour, 1*time.Hour, 0, fakedb, vtenv.NewLegacyTestEnv())
se.conns.Open(se.cp, se.cp, se.cp)
se.isOpen = true
se.notifiers = make(map[string]notifier)
@@ -1545,3 +1865,197 @@ func TestGetTableForPos(t *testing.T) {
})
}
}
+
+// TestGetTableForPos tests the vreplication specific GetTableForPos function to ensure
+// that it conforms to the intended/expected behavior in various scenarios.
+// This more specifically tests the behavior of the function when the historian is
+// disabled or otherwise unable to get a table schema for the given position. When it
+// CAN, that is tested indepenently in the historian tests.
+func TestGetTableForPos(t *testing.T) {
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+ fakedb := fakesqldb.New(t)
+ cfg := tabletenv.NewDefaultConfig()
+ cfg.DB = newDBConfigs(fakedb)
+ table := sqlparser.NewIdentifierCS("t1")
+ column := "col1"
+ tableSchema := fmt.Sprintf("create table %s (%s varchar(50), primary key(col1))", table.String(), column)
+ tableMt := &binlogdatapb.MinimalTable{
+ Name: table.String(),
+ Fields: []*querypb.Field{
+ {
+ Name: column,
+ Type: sqltypes.VarChar,
+ },
+ },
+ PKColumns: []int64{0}, // First column: col1
+ }
+
+ // Don't do any automatic / TTL based cache refreshes.
+ se := newEngine(1*time.Hour, 1*time.Hour, 0, fakedb, nil)
+ se.conns.Open(se.cp, se.cp, se.cp)
+ se.isOpen = true
+ se.notifiers = make(map[string]notifier)
+ se.MakePrimary(true)
+ se.historian.enabled = false
+
+ addExpectedReloadQueries := func(db *fakesqldb.DB) {
+ db.AddQuery("SELECT UNIX_TIMESTAMP()", sqltypes.MakeTestResult(sqltypes.MakeTestFields(
+ "UNIX_TIMESTAMP()",
+ "int64"),
+ fmt.Sprintf("%d", time.Now().Unix()),
+ ))
+ db.AddQuery(fmt.Sprintf(detectViewChange, sidecar.GetIdentifier()), sqltypes.MakeTestResult(sqltypes.MakeTestFields("table_name", "varchar")))
+ db.AddQuery(fmt.Sprintf(readTableCreateTimes, sidecar.GetIdentifier()),
+ sqltypes.MakeTestResult(sqltypes.MakeTestFields("table_name|create_time", "varchar|int64")))
+ db.AddQuery(fmt.Sprintf(detectUdfChange, sidecar.GetIdentifier()), &sqltypes.Result{})
+ db.AddQueryPattern(baseInnoDBTableSizesPattern, &sqltypes.Result{
+ Fields: mysql.BaseInnoDBTableSizesFields,
+ Rows: [][]sqltypes.Value{
+ {
+ sqltypes.MakeTrusted(sqltypes.VarChar, []byte("fakesqldb/"+table.String())), // table_name
+ sqltypes.MakeTrusted(sqltypes.Int64, []byte("128")), // file_size
+ sqltypes.MakeTrusted(sqltypes.Int64, []byte("256")), // allocated_size
+ },
+ },
+ })
+ db.AddQuery(mysql.BaseShowTables, &sqltypes.Result{
+ Fields: mysql.BaseShowTablesFields,
+ Rows: [][]sqltypes.Value{
+ {
+ sqltypes.MakeTrusted(sqltypes.VarChar, []byte(table.String())), // table_name
+ sqltypes.MakeTrusted(sqltypes.VarChar, []byte("BASE TABLE")), // table_type
+ sqltypes.MakeTrusted(sqltypes.Int64, []byte(fmt.Sprintf("%d", time.Now().Unix()-1000))), // unix_timestamp(t.create_time)
+ sqltypes.MakeTrusted(sqltypes.VarChar, []byte("")), // table_comment
+ },
+ },
+ SessionStateChanges: "",
+ StatusFlags: 0,
+ })
+ db.RejectQueryPattern(baseShowTablesWithSizesPattern, "we should expect to get sizes by InnoDBTableSizes")
+ db.AddQuery(mysql.BaseShowPrimary, &sqltypes.Result{
+ Fields: mysql.ShowPrimaryFields,
+ Rows: [][]sqltypes.Value{
+ mysql.ShowPrimaryRow(table.String(), column),
+ },
+ })
+ db.AddQueryPattern(fmt.Sprintf(mysql.GetColumnNamesQueryPatternForTable, table.String()),
+ sqltypes.MakeTestResult(sqltypes.MakeTestFields("column_name", "varchar"), column))
+ db.AddQuery(fmt.Sprintf("SELECT `%s` FROM `fakesqldb`.`%v` WHERE 1 != 1", column, table.String()),
+ sqltypes.MakeTestResult(sqltypes.MakeTestFields(column, "varchar")))
+ db.AddQuery(fmt.Sprintf(`show create table %s`, table.String()),
+ sqltypes.MakeTestResult(sqltypes.MakeTestFields("Table|Create Table", "varchar|varchar"), table.String(), tableSchema))
+ db.AddQuery("begin", &sqltypes.Result{})
+ db.AddQuery(fmt.Sprintf("delete from %s.`tables` where TABLE_SCHEMA = database() and TABLE_NAME in ('%s')",
+ sidecar.GetIdentifier(), table.String()), &sqltypes.Result{})
+ db.AddQuery(fmt.Sprintf("insert into %s.`tables`(TABLE_SCHEMA, TABLE_NAME, CREATE_STATEMENT, CREATE_TIME) values (database(), '%s', '%s', %d)",
+ sidecar.GetIdentifier(), table.String(), tableSchema, time.Now().Unix()), &sqltypes.Result{RowsAffected: 1})
+ db.AddQuery("rollback", &sqltypes.Result{})
+ }
+
+ type testcase struct {
+ name string
+ initialCacheState map[string]*Table
+ expectedQueriesFunc func(db *fakesqldb.DB)
+ expectFunc func()
+ }
+ tests := []testcase{
+ {
+ name: "GetTableForPos with cache uninitialized",
+ initialCacheState: make(map[string]*Table), // empty
+ expectedQueriesFunc: func(db *fakesqldb.DB) {
+ // We do a reload to initialize the cache.
+ addExpectedReloadQueries(db)
+ },
+ expectFunc: func() {
+ tbl, err := se.GetTableForPos(ctx, table, "")
+ require.NoError(t, err)
+ require.Equal(t, tableMt, tbl)
+ },
+ },
+ {
+ name: "GetTableForPos with cache uninitialized, table not found",
+ initialCacheState: make(map[string]*Table), // empty
+ expectedQueriesFunc: func(db *fakesqldb.DB) {
+ // We do a reload to initialize the cache and in doing so get the missing table.
+ addExpectedReloadQueries(db)
+ },
+ expectFunc: func() {
+ tbl, err := se.GetTableForPos(ctx, sqlparser.NewIdentifierCS("nobueno"), "")
+ require.EqualError(t, err, "table nobueno not found in vttablet schema")
+ require.Nil(t, tbl)
+ },
+ },
+ {
+ name: "GetTableForPos with cache initialized, table not found",
+ initialCacheState: map[string]*Table{"t2": {Name: sqlparser.NewIdentifierCS("t2")}},
+ expectedQueriesFunc: func(db *fakesqldb.DB) {
+ // We do a reload to try and get this missing table and any other recently created ones.
+ addExpectedReloadQueries(db)
+ },
+ expectFunc: func() {
+ tbl, err := se.GetTableForPos(ctx, table, "")
+ require.NoError(t, err)
+ require.Equal(t, tableMt, tbl)
+ },
+ },
+ {
+ name: "GetTableForPos with cache initialized, table found",
+ initialCacheState: map[string]*Table{table.String(): {Name: table}},
+ expectedQueriesFunc: func(db *fakesqldb.DB) {
+ // We only reload the column and PK info for the table in our cache. A new column
+ // called col2 has been added to the table schema and it is the new PK.
+ newTableSchema := fmt.Sprintf("create table %s (%s varchar(50), col2 varchar(50), primary key(col2))", table.String(), column)
+ db.AddQuery(mysql.BaseShowPrimary, &sqltypes.Result{
+ Fields: mysql.ShowPrimaryFields,
+ Rows: [][]sqltypes.Value{
+ mysql.ShowPrimaryRow(table.String(), "col2"),
+ },
+ })
+ db.AddQueryPattern(fmt.Sprintf(mysql.GetColumnNamesQueryPatternForTable, table.String()),
+ sqltypes.MakeTestResult(sqltypes.MakeTestFields("column_name", "varchar"), column, "col2"))
+ db.AddQuery(fmt.Sprintf("SELECT `%s`, `%s` FROM `fakesqldb`.`%v` WHERE 1 != 1",
+ column, "col2", table.String()), sqltypes.MakeTestResult(sqltypes.MakeTestFields(fmt.Sprintf("%s|%s", column, "col2"), "varchar|varchar")))
+ db.AddQuery(fmt.Sprintf(`show create table %s`, table.String()),
+ sqltypes.MakeTestResult(sqltypes.MakeTestFields("Table|Create Table", "varchar|varchar"), table.String(), newTableSchema))
+ db.AddQuery("begin", &sqltypes.Result{})
+ db.AddQuery(fmt.Sprintf("delete from %s.`tables` where TABLE_SCHEMA = database() and TABLE_NAME in ('%s')",
+ sidecar.GetIdentifier(), table.String()), &sqltypes.Result{})
+ db.AddQuery(fmt.Sprintf("insert into %s.`tables`(TABLE_SCHEMA, TABLE_NAME, CREATE_STATEMENT, CREATE_TIME) values (database(), '%s', '%s', %d)",
+ sidecar.GetIdentifier(), table.String(), newTableSchema, time.Now().Unix()), &sqltypes.Result{})
+ db.AddQuery("rollback", &sqltypes.Result{})
+ },
+ expectFunc: func() {
+ tbl, err := se.GetTableForPos(ctx, table, "MySQL56/1497ddb0-7cb9-11ed-a1eb-0242ac120002:1-891")
+ require.NoError(t, err)
+ require.NotNil(t, tbl)
+ require.Equal(t, &binlogdatapb.MinimalTable{
+ Name: table.String(),
+ Fields: []*querypb.Field{
+ {
+ Name: column,
+ Type: sqltypes.VarChar,
+ },
+ {
+ Name: "col2",
+ Type: sqltypes.VarChar,
+ },
+ },
+ PKColumns: []int64{1}, // Second column: col2
+ }, tbl)
+ },
+ },
+ }
+
+ for _, tc := range tests {
+ t.Run(tc.name, func(t *testing.T) {
+ fakedb.DeleteAllQueries()
+ AddFakeInnoDBReadRowsResult(fakedb, int(rand.Int32N(1000000)))
+ tc.expectedQueriesFunc(fakedb)
+ se.tables = tc.initialCacheState
+ tc.expectFunc()
+ fakedb.VerifyAllExecutedOrFail()
+ require.NoError(t, fakedb.LastError())
+ })
+ }
+}
diff --git a/go/vt/vttablet/tabletserver/schema/load_table.go b/go/vt/vttablet/tabletserver/schema/load_table.go
index 6022f8724eb..2a2be33a208 100644
--- a/go/vt/vttablet/tabletserver/schema/load_table.go
+++ b/go/vt/vttablet/tabletserver/schema/load_table.go
@@ -157,6 +157,14 @@ func loadMessageInfo(ta *Table, comment string, collationEnv *collations.Environ
ta.MessageInfo.Fields = getDefaultMessageFields(ta.Fields, hiddenCols)
}
+ ta.MessageInfo.IDType = sqltypes.VarBinary
+ for _, field := range ta.MessageInfo.Fields {
+ if field.Name == "id" {
+ ta.MessageInfo.IDType = field.Type
+ break
+ }
+ }
+
return nil
}
diff --git a/go/vt/vttablet/tabletserver/schema/load_table_test.go b/go/vt/vttablet/tabletserver/schema/load_table_test.go
index 6416e2e306e..e451624c0d7 100644
--- a/go/vt/vttablet/tabletserver/schema/load_table_test.go
+++ b/go/vt/vttablet/tabletserver/schema/load_table_test.go
@@ -149,6 +149,7 @@ func TestLoadTableMessage(t *testing.T) {
BatchSize: 1,
CacheSize: 10,
PollInterval: 30 * time.Second,
+ IDType: sqltypes.Int64,
},
}
assert.Equal(t, want, table)
diff --git a/go/vt/vttablet/tabletserver/schema/main_test.go b/go/vt/vttablet/tabletserver/schema/main_test.go
index 7eaca5f18e5..8b705b9bfbd 100644
--- a/go/vt/vttablet/tabletserver/schema/main_test.go
+++ b/go/vt/vttablet/tabletserver/schema/main_test.go
@@ -34,11 +34,11 @@ func getTestSchemaEngine(t *testing.T, schemaMaxAgeSeconds int64) (*Engine, *fak
"int64"),
"1427325876",
))
- db.AddQueryPattern(baseShowTablesWithSizesPattern, &sqltypes.Result{})
+ db.AddQueryPattern(baseInnoDBTableSizesPattern, &sqltypes.Result{})
db.AddQuery(mysql.BaseShowTables, &sqltypes.Result{})
db.AddQuery(mysql.BaseShowPrimary, &sqltypes.Result{})
AddFakeInnoDBReadRowsResult(db, 1)
- se := newEngine(10*time.Second, 10*time.Second, schemaMaxAgeSeconds, db)
+ se := newEngine(10*time.Second, 10*time.Second, schemaMaxAgeSeconds, db, nil)
require.NoError(t, se.Open())
cancel := func() {
defer db.Close()
diff --git a/go/vt/vttablet/tabletserver/schema/schema.go b/go/vt/vttablet/tabletserver/schema/schema.go
index 4b3d9c88fb5..e800477da3b 100644
--- a/go/vt/vttablet/tabletserver/schema/schema.go
+++ b/go/vt/vttablet/tabletserver/schema/schema.go
@@ -20,6 +20,7 @@ import (
"sync"
"time"
+ "vitess.io/vitess/go/sqltypes"
"vitess.io/vitess/go/vt/log"
"vitess.io/vitess/go/vt/sqlparser"
@@ -125,6 +126,9 @@ type MessageInfo struct {
// MaxBackoff specifies the longest duration message manager
// should wait before rescheduling a message
MaxBackoff time.Duration
+
+ // IDType specifies the type of the ID column
+ IDType sqltypes.Type
}
// NewTable creates a new Table.
diff --git a/go/vt/vttablet/tabletserver/state_manager.go b/go/vt/vttablet/tabletserver/state_manager.go
index 3fe78457b60..cae6a237dc8 100644
--- a/go/vt/vttablet/tabletserver/state_manager.go
+++ b/go/vt/vttablet/tabletserver/state_manager.go
@@ -140,7 +140,7 @@ type stateManager struct {
type (
schemaEngine interface {
- EnsureConnectionAndDB(topodatapb.TabletType) error
+ EnsureConnectionAndDB(topodatapb.TabletType, bool) error
Open() error
MakeNonPrimary()
MakePrimary(bool)
@@ -447,7 +447,7 @@ func (sm *stateManager) verifyTargetLocked(ctx context.Context, target *querypb.
func (sm *stateManager) servePrimary() error {
sm.watcher.Close()
- if err := sm.connect(topodatapb.TabletType_PRIMARY); err != nil {
+ if err := sm.connect(topodatapb.TabletType_PRIMARY, true); err != nil {
return err
}
@@ -476,7 +476,7 @@ func (sm *stateManager) unservePrimary() error {
sm.watcher.Close()
- if err := sm.connect(topodatapb.TabletType_PRIMARY); err != nil {
+ if err := sm.connect(topodatapb.TabletType_PRIMARY, false); err != nil {
return err
}
@@ -500,7 +500,7 @@ func (sm *stateManager) serveNonPrimary(wantTabletType topodatapb.TabletType) er
sm.se.MakeNonPrimary()
sm.hs.MakeNonPrimary()
- if err := sm.connect(wantTabletType); err != nil {
+ if err := sm.connect(wantTabletType, true); err != nil {
return err
}
@@ -518,7 +518,7 @@ func (sm *stateManager) unserveNonPrimary(wantTabletType topodatapb.TabletType)
sm.se.MakeNonPrimary()
sm.hs.MakeNonPrimary()
- if err := sm.connect(wantTabletType); err != nil {
+ if err := sm.connect(wantTabletType, false); err != nil {
return err
}
@@ -528,8 +528,8 @@ func (sm *stateManager) unserveNonPrimary(wantTabletType topodatapb.TabletType)
return nil
}
-func (sm *stateManager) connect(tabletType topodatapb.TabletType) error {
- if err := sm.se.EnsureConnectionAndDB(tabletType); err != nil {
+func (sm *stateManager) connect(tabletType topodatapb.TabletType, serving bool) error {
+ if err := sm.se.EnsureConnectionAndDB(tabletType, serving); err != nil {
return err
}
if err := sm.se.Open(); err != nil {
diff --git a/go/vt/vttablet/tabletserver/state_manager_test.go b/go/vt/vttablet/tabletserver/state_manager_test.go
index f70e77de710..df819c6f05c 100644
--- a/go/vt/vttablet/tabletserver/state_manager_test.go
+++ b/go/vt/vttablet/tabletserver/state_manager_test.go
@@ -809,7 +809,7 @@ type testSchemaEngine struct {
failMySQL bool
}
-func (te *testSchemaEngine) EnsureConnectionAndDB(tabletType topodatapb.TabletType) error {
+func (te *testSchemaEngine) EnsureConnectionAndDB(topodatapb.TabletType, bool) error {
if te.failMySQL {
te.failMySQL = false
return errors.New("intentional error")
diff --git a/go/vt/vttablet/tabletserver/stateful_connection.go b/go/vt/vttablet/tabletserver/stateful_connection.go
index 91d51677241..10fc763984f 100644
--- a/go/vt/vttablet/tabletserver/stateful_connection.go
+++ b/go/vt/vttablet/tabletserver/stateful_connection.go
@@ -313,11 +313,12 @@ func (sc *StatefulConnection) getUsername() string {
return callerid.GetUsername(sc.reservedProps.ImmediateCaller)
}
-func (sc *StatefulConnection) ApplySetting(ctx context.Context, setting *smartconnpool.Setting) error {
+// ApplySetting returns whether the settings where applied or not. It also returns an error, if encountered.
+func (sc *StatefulConnection) ApplySetting(ctx context.Context, setting *smartconnpool.Setting) (bool, error) {
if sc.dbConn.Conn.Setting() == setting {
- return nil
+ return false, nil
}
- return sc.dbConn.Conn.ApplySetting(ctx, setting)
+ return true, sc.dbConn.Conn.ApplySetting(ctx, setting)
}
func (sc *StatefulConnection) resetExpiryTime() {
diff --git a/go/vt/vttablet/tabletserver/tabletenv/config.go b/go/vt/vttablet/tabletserver/tabletenv/config.go
index 158f40d5202..994999f2368 100644
--- a/go/vt/vttablet/tabletserver/tabletenv/config.go
+++ b/go/vt/vttablet/tabletserver/tabletenv/config.go
@@ -156,8 +156,12 @@ func registerTabletEnvFlags(fs *pflag.FlagSet) {
fs.BoolVar(¤tConfig.WatchReplication, "watch_replication_stream", false, "When enabled, vttablet will stream the MySQL replication stream from the local server, and use it to update schema when it sees a DDL.")
fs.BoolVar(¤tConfig.TrackSchemaVersions, "track_schema_versions", false, "When enabled, vttablet will store versions of schemas at each position that a DDL is applied and allow retrieval of the schema corresponding to a position")
fs.Int64Var(¤tConfig.SchemaVersionMaxAgeSeconds, "schema-version-max-age-seconds", 0, "max age of schema version records to kept in memory by the vreplication historian")
- fs.BoolVar(¤tConfig.TwoPCEnable, "twopc_enable", defaultConfig.TwoPCEnable, "if the flag is on, 2pc is enabled. Other 2pc flags must be supplied.")
- SecondsVar(fs, ¤tConfig.TwoPCAbandonAge, "twopc_abandon_age", defaultConfig.TwoPCAbandonAge, "time in seconds. Any unresolved transaction older than this time will be sent to the coordinator to be resolved.")
+
+ _ = fs.Bool("twopc_enable", true, "TwoPC is enabled")
+ _ = fs.MarkDeprecated("twopc_enable", "TwoPC is always enabled, the transaction abandon age can be configured")
+ flagutil.FloatDuration(fs, ¤tConfig.TwoPCAbandonAge, "twopc_abandon_age", defaultConfig.TwoPCAbandonAge,
+ "Any unresolved transaction older than this time will be sent to the coordinator to be resolved. NOTE: Providing time as seconds (float64) is deprecated. Use time.Duration format (e.g., '1s', '2m', '1h').")
+
// Tx throttler config
flagutil.DualFormatBoolVar(fs, ¤tConfig.EnableTxThrottler, "enable_tx_throttler", defaultConfig.EnableTxThrottler, "If true replication-lag-based throttling on transactions will be enabled.")
flagutil.DualFormatVar(fs, currentConfig.TxThrottlerConfig, "tx_throttler_config", "The configuration of the transaction throttler as a text-formatted throttlerdata.Configuration protocol buffer message.")
@@ -331,12 +335,11 @@ type TabletConfig struct {
ExternalConnections map[string]*dbconfigs.DBConfigs `json:"externalConnections,omitempty"`
- SanitizeLogMessages bool `json:"-"`
- StrictTableACL bool `json:"-"`
- EnableTableACLDryRun bool `json:"-"`
- TableACLExemptACL string `json:"-"`
- TwoPCEnable bool `json:"-"`
- TwoPCAbandonAge Seconds `json:"-"`
+ SanitizeLogMessages bool `json:"-"`
+ StrictTableACL bool `json:"-"`
+ EnableTableACLDryRun bool `json:"-"`
+ TableACLExemptACL string `json:"-"`
+ TwoPCAbandonAge time.Duration `json:"-"`
EnableTxThrottler bool `json:"-"`
TxThrottlerConfig *TxThrottlerConfigFlag `json:"-"`
@@ -1054,6 +1057,8 @@ var defaultConfig = TabletConfig{
},
EnablePerWorkloadTableMetrics: false,
+
+ TwoPCAbandonAge: 15 * time.Minute,
}
// defaultTxThrottlerConfig returns the default TxThrottlerConfigFlag object based on
diff --git a/go/vt/vttablet/tabletserver/tabletenv/seconds.go b/go/vt/vttablet/tabletserver/tabletenv/seconds.go
deleted file mode 100644
index ae11121f2de..00000000000
--- a/go/vt/vttablet/tabletserver/tabletenv/seconds.go
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-Copyright 2020 The Vitess Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package tabletenv
-
-import (
- "time"
-
- "github.com/spf13/pflag"
-)
-
-// Seconds provides convenience functions for extracting
-// duration from float64 seconds values.
-type Seconds float64
-
-// SecondsVar is like a flag.Float64Var, but it works for Seconds.
-func SecondsVar(fs *pflag.FlagSet, p *Seconds, name string, value Seconds, usage string) {
- fs.Float64Var((*float64)(p), name, float64(value), usage)
-}
-
-// Get converts Seconds to time.Duration
-func (s Seconds) Get() time.Duration {
- return time.Duration(s * Seconds(1*time.Second))
-}
-
-// Set sets the value from time.Duration
-func (s *Seconds) Set(d time.Duration) {
- *s = Seconds(d) / Seconds(1*time.Second)
-}
diff --git a/go/vt/vttablet/tabletserver/tabletenv/seconds_test.go b/go/vt/vttablet/tabletserver/tabletenv/seconds_test.go
deleted file mode 100644
index dc09a3f419f..00000000000
--- a/go/vt/vttablet/tabletserver/tabletenv/seconds_test.go
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
-Copyright 2020 The Vitess Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package tabletenv
-
-import (
- "testing"
- "time"
-
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
-
- "vitess.io/vitess/go/yaml2"
-)
-
-func TestSecondsYaml(t *testing.T) {
- type testSecond struct {
- Value Seconds `json:"value"`
- }
-
- ts := testSecond{
- Value: 1,
- }
- gotBytes, err := yaml2.Marshal(&ts)
- require.NoError(t, err)
- wantBytes := "value: 1\n"
- assert.Equal(t, wantBytes, string(gotBytes))
-
- var gotts testSecond
- err = yaml2.Unmarshal([]byte(wantBytes), &gotts)
- require.NoError(t, err)
- assert.Equal(t, ts, gotts)
-}
-
-func TestSecondsGetSet(t *testing.T) {
- var val Seconds
- val.Set(2 * time.Second)
- assert.Equal(t, Seconds(2), val)
- assert.Equal(t, 2*time.Second, val.Get())
-}
diff --git a/go/vt/vttablet/tabletserver/tabletenv/stats.go b/go/vt/vttablet/tabletserver/tabletenv/stats.go
index 1ad93532719..52bb6a5a3b0 100644
--- a/go/vt/vttablet/tabletserver/tabletenv/stats.go
+++ b/go/vt/vttablet/tabletserver/tabletenv/stats.go
@@ -34,7 +34,6 @@ type Stats struct {
ErrorCounters *stats.CountersWithSingleLabel
InternalErrors *stats.CountersWithSingleLabel
Warnings *stats.CountersWithSingleLabel
- Unresolved *stats.GaugesWithSingleLabel // For now, only Prepares are tracked
UserTableQueryCount *stats.CountersWithMultiLabels // Per CallerID/table counts
UserTableQueryTimesNs *stats.CountersWithMultiLabels // Per CallerID/table latencies
UserTransactionCount *stats.CountersWithMultiLabels // Per CallerID transaction counts
@@ -49,6 +48,11 @@ type Stats struct {
UserReservedTimesNs *stats.CountersWithSingleLabel // Per CallerID reserved connection duration
QueryTimingsByTabletType *servenv.TimingsWrapper // Query timings split by current tablet type
+
+ // Atomic Transactions
+ Unresolved *stats.GaugesWithSingleLabel
+ CommitPreparedFail *stats.CountersWithSingleLabel
+ RedoPreparedFail *stats.CountersWithSingleLabel
}
// NewStats instantiates a new set of stats scoped by exporter.
@@ -83,7 +87,6 @@ func NewStats(exporter *servenv.Exporter) *Stats {
),
InternalErrors: exporter.NewCountersWithSingleLabel("InternalErrors", "Internal component errors", "type", "Task", "StrayTransactions", "Panic", "HungQuery", "Schema", "TwopcCommit", "TwopcResurrection", "WatchdogFail", "Messages"),
Warnings: exporter.NewCountersWithSingleLabel("Warnings", "Warnings", "type", "ResultsExceeded"),
- Unresolved: exporter.NewGaugesWithSingleLabel("Unresolved", "Unresolved items", "item_type", "Prepares"),
UserTableQueryCount: exporter.NewCountersWithMultiLabels("UserTableQueryCount", "Queries received for each CallerID/table combination", []string{"TableName", "CallerID", "Type"}),
UserTableQueryTimesNs: exporter.NewCountersWithMultiLabels("UserTableQueryTimesNs", "Total latency for each CallerID/table combination", []string{"TableName", "CallerID", "Type"}),
UserTransactionCount: exporter.NewCountersWithMultiLabels("UserTransactionCount", "transactions received for each CallerID", []string{"CallerID", "Conclusion"}),
@@ -98,6 +101,10 @@ func NewStats(exporter *servenv.Exporter) *Stats {
UserReservedTimesNs: exporter.NewCountersWithSingleLabel("UserReservedTimesNs", "Total reserved connection latency for each CallerID", "CallerID"),
QueryTimingsByTabletType: exporter.NewTimings("QueryTimingsByTabletType", "Query timings broken down by active tablet type", "TabletType"),
+
+ Unresolved: exporter.NewGaugesWithSingleLabel("UnresolvedTransaction", "Current unresolved transactions", "ManagerType"),
+ CommitPreparedFail: exporter.NewCountersWithSingleLabel("CommitPreparedFail", "failed prepared transactions commit", "FailureType"),
+ RedoPreparedFail: exporter.NewCountersWithSingleLabel("RedoPreparedFail", "failed prepared transactions on redo", "FailureType"),
}
stats.QPSRates = exporter.NewRates("QPS", stats.QueryTimings, 15*60/5, 5*time.Second)
return stats
diff --git a/go/vt/vttablet/tabletserver/tabletserver.go b/go/vt/vttablet/tabletserver/tabletserver.go
index 4936516be72..847de25eb02 100644
--- a/go/vt/vttablet/tabletserver/tabletserver.go
+++ b/go/vt/vttablet/tabletserver/tabletserver.go
@@ -510,7 +510,14 @@ func (tsv *TabletServer) Begin(ctx context.Context, target *querypb.Target, opti
return tsv.begin(ctx, target, nil, 0, nil, options)
}
-func (tsv *TabletServer) begin(ctx context.Context, target *querypb.Target, savepointQueries []string, reservedID int64, settings []string, options *querypb.ExecuteOptions) (state queryservice.TransactionState, err error) {
+func (tsv *TabletServer) begin(
+ ctx context.Context,
+ target *querypb.Target,
+ postBeginQueries []string,
+ reservedID int64,
+ settings []string,
+ options *querypb.ExecuteOptions,
+) (state queryservice.TransactionState, err error) {
state.TabletAlias = tsv.alias
err = tsv.execRequest(
ctx, tsv.loadQueryTimeoutWithOptions(options),
@@ -528,12 +535,43 @@ func (tsv *TabletServer) begin(ctx context.Context, target *querypb.Target, save
return err
}
}
- transactionID, beginSQL, sessionStateChanges, err := tsv.te.Begin(ctx, savepointQueries, reservedID, connSetting, options)
+ transactionID, beginSQL, sessionStateChanges, err := tsv.te.Begin(ctx, reservedID, connSetting, options)
state.TransactionID = transactionID
state.SessionStateChanges = sessionStateChanges
logStats.TransactionID = transactionID
logStats.ReservedID = reservedID
+ if err != nil {
+ return err
+ }
+
+ targetType, err := tsv.resolveTargetType(ctx, target)
+ if err != nil {
+ return err
+ }
+ for _, query := range postBeginQueries {
+ plan, err := tsv.qe.GetPlan(ctx, logStats, query, true)
+ if err != nil {
+ return err
+ }
+
+ qre := &QueryExecutor{
+ ctx: ctx,
+ query: query,
+ connID: transactionID,
+ options: options,
+ plan: plan,
+ logStats: logStats,
+ tsv: tsv,
+ targetTabletType: targetType,
+ setting: connSetting,
+ }
+ _, err = qre.Execute()
+ if err != nil {
+ return err
+ }
+ }
+
// Record the actual statements that were executed in the logStats.
// If nothing was actually executed, don't count the operation in
// the tablet metrics, and clear out the logStats Method so that
@@ -552,7 +590,7 @@ func (tsv *TabletServer) begin(ctx context.Context, target *querypb.Target, save
return err
},
)
- return state, err
+ return
}
func (tsv *TabletServer) getPriorityFromOptions(options *querypb.ExecuteOptions) int {
@@ -665,7 +703,7 @@ func (tsv *TabletServer) Prepare(ctx context.Context, target *querypb.Target, tr
"Prepare", "prepare", nil,
target, nil, true, /* allowOnShutdown */
func(ctx context.Context, logStats *tabletenv.LogStats) error {
- txe := NewDTExecutor(ctx, tsv.te, tsv.qe, logStats)
+ txe := NewDTExecutor(ctx, logStats, tsv.te, tsv.qe, tsv.getShard)
return txe.Prepare(transactionID, dtid)
},
)
@@ -678,7 +716,7 @@ func (tsv *TabletServer) CommitPrepared(ctx context.Context, target *querypb.Tar
"CommitPrepared", "commit_prepared", nil,
target, nil, true, /* allowOnShutdown */
func(ctx context.Context, logStats *tabletenv.LogStats) error {
- txe := NewDTExecutor(ctx, tsv.te, tsv.qe, logStats)
+ txe := NewDTExecutor(ctx, logStats, tsv.te, tsv.qe, tsv.getShard)
if DebugTwoPc {
commitPreparedDelayForTest(tsv)
}
@@ -694,7 +732,7 @@ func (tsv *TabletServer) RollbackPrepared(ctx context.Context, target *querypb.T
"RollbackPrepared", "rollback_prepared", nil,
target, nil, true, /* allowOnShutdown */
func(ctx context.Context, logStats *tabletenv.LogStats) error {
- txe := NewDTExecutor(ctx, tsv.te, tsv.qe, logStats)
+ txe := NewDTExecutor(ctx, logStats, tsv.te, tsv.qe, tsv.getShard)
return txe.RollbackPrepared(dtid, originalID)
},
)
@@ -727,7 +765,7 @@ func (tsv *TabletServer) CreateTransaction(ctx context.Context, target *querypb.
"CreateTransaction", "create_transaction", nil,
target, nil, true, /* allowOnShutdown */
func(ctx context.Context, logStats *tabletenv.LogStats) error {
- txe := NewDTExecutor(ctx, tsv.te, tsv.qe, logStats)
+ txe := NewDTExecutor(ctx, logStats, tsv.te, tsv.qe, tsv.getShard)
return txe.CreateTransaction(dtid, participants)
},
)
@@ -735,16 +773,18 @@ func (tsv *TabletServer) CreateTransaction(ctx context.Context, target *querypb.
// StartCommit atomically commits the transaction along with the
// decision to commit the associated 2pc transaction.
-func (tsv *TabletServer) StartCommit(ctx context.Context, target *querypb.Target, transactionID int64, dtid string) (err error) {
- return tsv.execRequest(
+func (tsv *TabletServer) StartCommit(ctx context.Context, target *querypb.Target, transactionID int64, dtid string) (state querypb.StartCommitState, err error) {
+ err = tsv.execRequest(
ctx, tsv.loadQueryTimeout(),
"StartCommit", "start_commit", nil,
target, nil, true, /* allowOnShutdown */
func(ctx context.Context, logStats *tabletenv.LogStats) error {
- txe := NewDTExecutor(ctx, tsv.te, tsv.qe, logStats)
- return txe.StartCommit(transactionID, dtid)
+ txe := NewDTExecutor(ctx, logStats, tsv.te, tsv.qe, tsv.getShard)
+ state, err = txe.StartCommit(transactionID, dtid)
+ return err
},
)
+ return state, err
}
// SetRollback transitions the 2pc transaction to the Rollback state.
@@ -755,7 +795,7 @@ func (tsv *TabletServer) SetRollback(ctx context.Context, target *querypb.Target
"SetRollback", "set_rollback", nil,
target, nil, true, /* allowOnShutdown */
func(ctx context.Context, logStats *tabletenv.LogStats) error {
- txe := NewDTExecutor(ctx, tsv.te, tsv.qe, logStats)
+ txe := NewDTExecutor(ctx, logStats, tsv.te, tsv.qe, tsv.getShard)
return txe.SetRollback(dtid, transactionID)
},
)
@@ -769,7 +809,7 @@ func (tsv *TabletServer) ConcludeTransaction(ctx context.Context, target *queryp
"ConcludeTransaction", "conclude_transaction", nil,
target, nil, true, /* allowOnShutdown */
func(ctx context.Context, logStats *tabletenv.LogStats) error {
- txe := NewDTExecutor(ctx, tsv.te, tsv.qe, logStats)
+ txe := NewDTExecutor(ctx, logStats, tsv.te, tsv.qe, tsv.getShard)
return txe.ConcludeTransaction(dtid)
},
)
@@ -782,7 +822,7 @@ func (tsv *TabletServer) ReadTransaction(ctx context.Context, target *querypb.Ta
"ReadTransaction", "read_transaction", nil,
target, nil, true, /* allowOnShutdown */
func(ctx context.Context, logStats *tabletenv.LogStats) error {
- txe := NewDTExecutor(ctx, tsv.te, tsv.qe, logStats)
+ txe := NewDTExecutor(ctx, logStats, tsv.te, tsv.qe, tsv.getShard)
metadata, err = txe.ReadTransaction(dtid)
return err
},
@@ -790,6 +830,21 @@ func (tsv *TabletServer) ReadTransaction(ctx context.Context, target *querypb.Ta
return metadata, err
}
+// GetTransactionInfo returns the data for the specified dtid.
+func (tsv *TabletServer) GetTransactionInfo(ctx context.Context, target *querypb.Target, dtid string) (resp *tabletmanagerdatapb.GetTransactionInfoResponse, err error) {
+ err = tsv.execRequest(
+ ctx, tsv.loadQueryTimeout(),
+ "GetTransactionInfo", "get_transaction_info", nil,
+ target, nil, true, /* allowOnShutdown */
+ func(ctx context.Context, logStats *tabletenv.LogStats) error {
+ txe := NewDTExecutor(ctx, logStats, tsv.te, tsv.qe, tsv.getShard)
+ resp, err = txe.GetTransactionInfo(dtid)
+ return err
+ },
+ )
+ return resp, err
+}
+
// UnresolvedTransactions returns the unresolved distributed transaction record.
func (tsv *TabletServer) UnresolvedTransactions(ctx context.Context, target *querypb.Target, abandonAgeSeconds int64) (transactions []*querypb.TransactionMetadata, err error) {
err = tsv.execRequest(
@@ -797,7 +852,7 @@ func (tsv *TabletServer) UnresolvedTransactions(ctx context.Context, target *que
"UnresolvedTransactions", "unresolved_transaction", nil,
target, nil, false, /* allowOnShutdown */
func(ctx context.Context, logStats *tabletenv.LogStats) error {
- txe := NewDTExecutor(ctx, tsv.te, tsv.qe, logStats)
+ txe := NewDTExecutor(ctx, logStats, tsv.te, tsv.qe, tsv.getShard)
transactions, err = txe.UnresolvedTransactions(time.Duration(abandonAgeSeconds) * time.Second)
return err
},
@@ -978,7 +1033,7 @@ func (tsv *TabletServer) streamExecute(ctx context.Context, target *querypb.Targ
}
// BeginExecute combines Begin and Execute.
-func (tsv *TabletServer) BeginExecute(ctx context.Context, target *querypb.Target, preQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, reservedID int64, options *querypb.ExecuteOptions) (queryservice.TransactionState, *sqltypes.Result, error) {
+func (tsv *TabletServer) BeginExecute(ctx context.Context, target *querypb.Target, postBeginQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, reservedID int64, options *querypb.ExecuteOptions) (queryservice.TransactionState, *sqltypes.Result, error) {
// Disable hot row protection in case of reserve connection.
if tsv.enableHotRowProtection && reservedID == 0 {
@@ -991,7 +1046,7 @@ func (tsv *TabletServer) BeginExecute(ctx context.Context, target *querypb.Targe
}
}
- state, err := tsv.begin(ctx, target, preQueries, reservedID, nil, options)
+ state, err := tsv.begin(ctx, target, postBeginQueries, reservedID, nil, options)
if err != nil {
return state, nil, err
}
@@ -1004,14 +1059,14 @@ func (tsv *TabletServer) BeginExecute(ctx context.Context, target *querypb.Targe
func (tsv *TabletServer) BeginStreamExecute(
ctx context.Context,
target *querypb.Target,
- preQueries []string,
+ postBeginQueries []string,
sql string,
bindVariables map[string]*querypb.BindVariable,
reservedID int64,
options *querypb.ExecuteOptions,
callback func(*sqltypes.Result) error,
) (queryservice.TransactionState, error) {
- state, err := tsv.begin(ctx, target, preQueries, reservedID, nil, options)
+ state, err := tsv.begin(ctx, target, postBeginQueries, reservedID, nil, options)
if err != nil {
return state, err
}
@@ -1237,8 +1292,8 @@ func (tsv *TabletServer) VStreamResults(ctx context.Context, target *querypb.Tar
}
// ReserveBeginExecute implements the QueryService interface
-func (tsv *TabletServer) ReserveBeginExecute(ctx context.Context, target *querypb.Target, preQueries []string, postBeginQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions) (state queryservice.ReservedTransactionState, result *sqltypes.Result, err error) {
- state, result, err = tsv.beginExecuteWithSettings(ctx, target, preQueries, postBeginQueries, sql, bindVariables, options)
+func (tsv *TabletServer) ReserveBeginExecute(ctx context.Context, target *querypb.Target, settings []string, postBeginQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions) (state queryservice.ReservedTransactionState, result *sqltypes.Result, err error) {
+ state, result, err = tsv.beginExecuteWithSettings(ctx, target, settings, postBeginQueries, sql, bindVariables, options)
// If there is an error and the error message is about allowing query in reserved connection only,
// then we do not return an error from here and continue to use the reserved connection path.
// This is specially for get_lock function call from vtgate that needs a reserved connection.
@@ -1266,12 +1321,35 @@ func (tsv *TabletServer) ReserveBeginExecute(ctx context.Context, target *queryp
return err
}
defer tsv.stats.QueryTimingsByTabletType.Record(targetType.String(), time.Now())
- connID, sessionStateChanges, err = tsv.te.ReserveBegin(ctx, options, preQueries, postBeginQueries)
+ connID, sessionStateChanges, err = tsv.te.ReserveBegin(ctx, options, settings)
+ logStats.TransactionID = connID
+ logStats.ReservedID = connID
if err != nil {
return err
}
- logStats.TransactionID = connID
- logStats.ReservedID = connID
+
+ for _, query := range postBeginQueries {
+ plan, err := tsv.qe.GetPlan(ctx, logStats, query, true)
+ if err != nil {
+ return err
+ }
+
+ qre := &QueryExecutor{
+ ctx: ctx,
+ query: query,
+ connID: connID,
+ options: options,
+ plan: plan,
+ logStats: logStats,
+ tsv: tsv,
+ targetTabletType: targetType,
+ }
+ _, err = qre.Execute()
+ if err != nil {
+ return err
+ }
+ }
+
return nil
},
)
@@ -1292,13 +1370,13 @@ func (tsv *TabletServer) ReserveBeginStreamExecute(
ctx context.Context,
target *querypb.Target,
settings []string,
- savepointQueries []string,
+ postBeginQueries []string,
sql string,
bindVariables map[string]*querypb.BindVariable,
options *querypb.ExecuteOptions,
callback func(*sqltypes.Result) error,
) (state queryservice.ReservedTransactionState, err error) {
- txState, err := tsv.begin(ctx, target, savepointQueries, 0, settings, options)
+ txState, err := tsv.begin(ctx, target, postBeginQueries, 0, settings, options)
if err != nil {
return txToReserveState(txState), err
}
@@ -1308,9 +1386,9 @@ func (tsv *TabletServer) ReserveBeginStreamExecute(
}
// ReserveExecute implements the QueryService interface
-func (tsv *TabletServer) ReserveExecute(ctx context.Context, target *querypb.Target, preQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, transactionID int64, options *querypb.ExecuteOptions) (state queryservice.ReservedState, result *sqltypes.Result, err error) {
+func (tsv *TabletServer) ReserveExecute(ctx context.Context, target *querypb.Target, settings []string, sql string, bindVariables map[string]*querypb.BindVariable, transactionID int64, options *querypb.ExecuteOptions) (state queryservice.ReservedState, result *sqltypes.Result, err error) {
- result, err = tsv.executeWithSettings(ctx, target, preQueries, sql, bindVariables, transactionID, options)
+ result, err = tsv.executeWithSettings(ctx, target, settings, sql, bindVariables, transactionID, options)
// If there is an error and the error message is about allowing query in reserved connection only,
// then we do not return an error from here and continue to use the reserved connection path.
// This is specially for get_lock function call from vtgate that needs a reserved connection.
@@ -1335,7 +1413,7 @@ func (tsv *TabletServer) ReserveExecute(ctx context.Context, target *querypb.Tar
return err
}
defer tsv.stats.QueryTimingsByTabletType.Record(targetType.String(), time.Now())
- state.ReservedID, err = tsv.te.Reserve(ctx, options, transactionID, preQueries)
+ state.ReservedID, err = tsv.te.Reserve(ctx, options, transactionID, settings)
if err != nil {
return err
}
@@ -1357,14 +1435,14 @@ func (tsv *TabletServer) ReserveExecute(ctx context.Context, target *querypb.Tar
func (tsv *TabletServer) ReserveStreamExecute(
ctx context.Context,
target *querypb.Target,
- preQueries []string,
+ settings []string,
sql string,
bindVariables map[string]*querypb.BindVariable,
transactionID int64,
options *querypb.ExecuteOptions,
callback func(*sqltypes.Result) error,
) (state queryservice.ReservedState, err error) {
- return state, tsv.streamExecute(ctx, target, sql, bindVariables, transactionID, 0, preQueries, options, callback)
+ return state, tsv.streamExecute(ctx, target, sql, bindVariables, transactionID, 0, settings, options, callback)
}
// Release implements the QueryService interface
@@ -1404,8 +1482,8 @@ func (tsv *TabletServer) executeWithSettings(ctx context.Context, target *queryp
return tsv.execute(ctx, target, sql, bindVariables, transactionID, 0, settings, options)
}
-func (tsv *TabletServer) beginExecuteWithSettings(ctx context.Context, target *querypb.Target, settings []string, savepointQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions) (queryservice.ReservedTransactionState, *sqltypes.Result, error) {
- txState, err := tsv.begin(ctx, target, savepointQueries, 0, settings, options)
+func (tsv *TabletServer) beginExecuteWithSettings(ctx context.Context, target *querypb.Target, settings []string, postBeginQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions) (queryservice.ReservedTransactionState, *sqltypes.Result, error) {
+ txState, err := tsv.begin(ctx, target, postBeginQueries, 0, settings, options)
if err != nil {
return txToReserveState(txState), nil, err
}
@@ -1620,7 +1698,7 @@ func convertErrorCode(err error) vtrpcpb.Code {
sqlerror.ERTooLongString, sqlerror.ERDelayedInsertTableLocked, sqlerror.ERDupUnique, sqlerror.ERRequiresPrimaryKey, sqlerror.ERCantDoThisDuringAnTransaction, sqlerror.ERReadOnlyTransaction,
sqlerror.ERCannotAddForeign, sqlerror.ERNoReferencedRow, sqlerror.ERRowIsReferenced, sqlerror.ERCantUpdateWithReadLock, sqlerror.ERNoDefault, sqlerror.EROperandColumns,
sqlerror.ERSubqueryNo1Row, sqlerror.ERNonUpdateableTable, sqlerror.ERFeatureDisabled, sqlerror.ERDuplicatedValueInType, sqlerror.ERRowIsReferenced2,
- sqlerror.ErNoReferencedRow2, sqlerror.ERWarnDataOutOfRange:
+ sqlerror.ErNoReferencedRow2, sqlerror.ERWarnDataOutOfRange, sqlerror.ERInnodbIndexCorrupt:
errCode = vtrpcpb.Code_FAILED_PRECONDITION
case sqlerror.EROptionPreventsStatement:
errCode = vtrpcpb.Code_CLUSTER_EVENT
@@ -1645,7 +1723,7 @@ func convertErrorCode(err error) vtrpcpb.Code {
sqlerror.ERCantAggregate3Collations, sqlerror.ERCantAggregateNCollations, sqlerror.ERVariableIsNotStruct, sqlerror.ERUnknownCollation, sqlerror.ERWrongNameForIndex,
sqlerror.ERWrongNameForCatalog, sqlerror.ERBadFTColumn, sqlerror.ERTruncatedWrongValue, sqlerror.ERTooMuchAutoTimestampCols, sqlerror.ERInvalidOnUpdate, sqlerror.ERUnknownTimeZone,
sqlerror.ERInvalidCharacterString, sqlerror.ERIllegalReference, sqlerror.ERDerivedMustHaveAlias, sqlerror.ERTableNameNotAllowedHere, sqlerror.ERDataTooLong, sqlerror.ERDataOutOfRange,
- sqlerror.ERTruncatedWrongValueForField, sqlerror.ERIllegalValueForType:
+ sqlerror.ERTruncatedWrongValueForField, sqlerror.ERIllegalValueForType, sqlerror.ERWrongValue, sqlerror.ERWrongParamcountToNativeFct:
errCode = vtrpcpb.Code_INVALID_ARGUMENT
case sqlerror.ERSpecifiedAccessDenied:
errCode = vtrpcpb.Code_PERMISSION_DENIED
@@ -1804,7 +1882,7 @@ func (tsv *TabletServer) registerQueryListHandlers(queryLists []*QueryList) {
func (tsv *TabletServer) registerTwopczHandler() {
tsv.exporter.HandleFunc("/twopcz", func(w http.ResponseWriter, r *http.Request) {
ctx := tabletenv.LocalContext()
- txe := NewDTExecutor(ctx, tsv.te, tsv.qe, tabletenv.NewLogStats(ctx, "twopcz"))
+ txe := NewDTExecutor(ctx, tabletenv.NewLogStats(ctx, "twopcz"), tsv.te, tsv.qe, tsv.getShard)
twopczHandler(txe, w, r)
})
}
@@ -1963,7 +2041,11 @@ func (tsv *TabletServer) StreamPoolSize() int {
// SetTxPoolSize changes the tx pool size to the specified value.
func (tsv *TabletServer) SetTxPoolSize(ctx context.Context, val int) error {
- return tsv.te.txPool.scp.conns.SetCapacity(ctx, int64(val))
+ // TxPool manages two pools, one for normal connections and one for CLIENT_FOUND_ROWS capability enabled on the connections.
+ if err := tsv.te.txPool.scp.conns.SetCapacity(ctx, int64(val)); err != nil {
+ return err
+ }
+ return tsv.te.txPool.scp.foundRowsPool.SetCapacity(ctx, int64(val))
}
// TxPoolSize returns the tx pool size.
@@ -2093,3 +2175,7 @@ func skipQueryPlanCache(options *querypb.ExecuteOptions) bool {
}
return options.SkipQueryPlanCache || options.HasCreatedTempTables
}
+
+func (tsv *TabletServer) getShard() string {
+ return tsv.sm.Target().Shard
+}
diff --git a/go/vt/vttablet/tabletserver/tabletserver_test.go b/go/vt/vttablet/tabletserver/tabletserver_test.go
index 97d948a4d0a..621941224a9 100644
--- a/go/vt/vttablet/tabletserver/tabletserver_test.go
+++ b/go/vt/vttablet/tabletserver/tabletserver_test.go
@@ -304,8 +304,8 @@ func TestTabletServerCreateTransaction(t *testing.T) {
defer closer()
target := querypb.Target{TabletType: topodatapb.TabletType_PRIMARY}
- db.AddQueryPattern(fmt.Sprintf("insert into _vt\\.dt_state\\(dtid, state, time_created\\) values \\('aa', %d,.*", int(querypb.TransactionState_PREPARE)), &sqltypes.Result{})
- db.AddQueryPattern("insert into _vt\\.dt_participant\\(dtid, id, keyspace, shard\\) values \\('aa', 1,.*", &sqltypes.Result{})
+ db.AddQueryPattern(fmt.Sprintf("insert into _vt\\.dt_state\\(dtid, state, time_created\\) values \\(_binary'aa', %d,.*", int(querypb.TransactionState_PREPARE)), &sqltypes.Result{})
+ db.AddQueryPattern("insert into _vt\\.dt_participant\\(dtid, id, keyspace, shard\\) values \\(_binary'aa', 1,.*", &sqltypes.Result{})
err := tsv.CreateTransaction(ctx, &target, "aa", []*querypb.Target{{
Keyspace: "t1",
Shard: "0",
@@ -320,16 +320,18 @@ func TestTabletServerStartCommit(t *testing.T) {
defer closer()
target := querypb.Target{TabletType: topodatapb.TabletType_PRIMARY}
- commitTransition := fmt.Sprintf("update _vt.dt_state set state = %d where dtid = 'aa' and state = %d", int(querypb.TransactionState_COMMIT), int(querypb.TransactionState_PREPARE))
+ commitTransition := fmt.Sprintf("update _vt.dt_state set state = %d where dtid = _binary'aa' and state = %d", int(querypb.TransactionState_COMMIT), int(querypb.TransactionState_PREPARE))
db.AddQuery(commitTransition, &sqltypes.Result{RowsAffected: 1})
txid := newTxForPrep(ctx, tsv)
- err := tsv.StartCommit(ctx, &target, txid, "aa")
+ state, err := tsv.StartCommit(ctx, &target, txid, "aa")
require.NoError(t, err)
+ assert.Equal(t, querypb.StartCommitState_Success, state, "StartCommit state")
db.AddQuery(commitTransition, &sqltypes.Result{})
txid = newTxForPrep(ctx, tsv)
- err = tsv.StartCommit(ctx, &target, txid, "aa")
+ state, err = tsv.StartCommit(ctx, &target, txid, "aa")
assert.EqualError(t, err, "could not transition to COMMIT: aa", "Prepare err")
+ assert.Equal(t, querypb.StartCommitState_Fail, state, "StartCommit state")
}
func TestTabletserverSetRollback(t *testing.T) {
@@ -339,7 +341,7 @@ func TestTabletserverSetRollback(t *testing.T) {
defer closer()
target := querypb.Target{TabletType: topodatapb.TabletType_PRIMARY}
- rollbackTransition := fmt.Sprintf("update _vt.dt_state set state = %d where dtid = 'aa' and state = %d", int(querypb.TransactionState_ROLLBACK), int(querypb.TransactionState_PREPARE))
+ rollbackTransition := fmt.Sprintf("update _vt.dt_state set state = %d where dtid = _binary'aa' and state = %d", int(querypb.TransactionState_ROLLBACK), int(querypb.TransactionState_PREPARE))
db.AddQuery(rollbackTransition, &sqltypes.Result{RowsAffected: 1})
txid := newTxForPrep(ctx, tsv)
err := tsv.SetRollback(ctx, &target, "aa", txid)
@@ -358,7 +360,7 @@ func TestTabletServerReadTransaction(t *testing.T) {
defer closer()
target := querypb.Target{TabletType: topodatapb.TabletType_PRIMARY}
- db.AddQuery("select dtid, state, time_created from _vt.dt_state where dtid = 'aa'", &sqltypes.Result{})
+ db.AddQuery("select dtid, state, time_created from _vt.dt_state where dtid = _binary'aa'", &sqltypes.Result{})
got, err := tsv.ReadTransaction(ctx, &target, "aa")
require.NoError(t, err)
want := &querypb.TransactionMetadata{}
@@ -376,8 +378,8 @@ func TestTabletServerReadTransaction(t *testing.T) {
sqltypes.NewVarBinary("1"),
}},
}
- db.AddQuery("select dtid, state, time_created from _vt.dt_state where dtid = 'aa'", txResult)
- db.AddQuery("select keyspace, shard from _vt.dt_participant where dtid = 'aa'", &sqltypes.Result{
+ db.AddQuery("select dtid, state, time_created from _vt.dt_state where dtid = _binary'aa'", txResult)
+ db.AddQuery("select keyspace, shard from _vt.dt_participant where dtid = _binary'aa'", &sqltypes.Result{
Fields: []*querypb.Field{
{Type: sqltypes.VarBinary},
{Type: sqltypes.VarBinary},
@@ -420,7 +422,7 @@ func TestTabletServerReadTransaction(t *testing.T) {
sqltypes.NewVarBinary("1"),
}},
}
- db.AddQuery("select dtid, state, time_created from _vt.dt_state where dtid = 'aa'", txResult)
+ db.AddQuery("select dtid, state, time_created from _vt.dt_state where dtid = _binary'aa'", txResult)
want.State = querypb.TransactionState_COMMIT
got, err = tsv.ReadTransaction(ctx, &target, "aa")
require.NoError(t, err)
@@ -438,7 +440,7 @@ func TestTabletServerReadTransaction(t *testing.T) {
sqltypes.NewVarBinary("1"),
}},
}
- db.AddQuery("select dtid, state, time_created from _vt.dt_state where dtid = 'aa'", txResult)
+ db.AddQuery("select dtid, state, time_created from _vt.dt_state where dtid = _binary'aa'", txResult)
want.State = querypb.TransactionState_ROLLBACK
got, err = tsv.ReadTransaction(ctx, &target, "aa")
require.NoError(t, err)
@@ -452,8 +454,8 @@ func TestTabletServerConcludeTransaction(t *testing.T) {
defer closer()
target := querypb.Target{TabletType: topodatapb.TabletType_PRIMARY}
- db.AddQuery("delete from _vt.dt_state where dtid = 'aa'", &sqltypes.Result{})
- db.AddQuery("delete from _vt.dt_participant where dtid = 'aa'", &sqltypes.Result{})
+ db.AddQuery("delete from _vt.dt_state where dtid = _binary'aa'", &sqltypes.Result{})
+ db.AddQuery("delete from _vt.dt_participant where dtid = _binary'aa'", &sqltypes.Result{})
err := tsv.ConcludeTransaction(ctx, &target, "aa")
require.NoError(t, err)
}
diff --git a/go/vt/vttablet/tabletserver/throttle/base/metric_cache.go b/go/vt/vttablet/tabletserver/throttle/base/metric_cache.go
index 8695cb83229..faad65ca79e 100644
--- a/go/vt/vttablet/tabletserver/throttle/base/metric_cache.go
+++ b/go/vt/vttablet/tabletserver/throttle/base/metric_cache.go
@@ -49,6 +49,7 @@ import (
"github.com/patrickmn/go-cache"
"vitess.io/vitess/go/stats"
+ "vitess.io/vitess/go/vt/vttablet/tmclient"
)
// MetricsQueryType indicates the type of metrics query on MySQL backend. See following.
@@ -142,13 +143,13 @@ func (metric *ThrottleMetric) WithError(err error) *ThrottleMetric {
// ReadThrottleMetrics returns a metric for the given probe. Either by explicit query
// or via SHOW REPLICA STATUS
-func ReadThrottleMetrics(ctx context.Context, probe *Probe, metricsFunc func(context.Context) ThrottleMetrics) ThrottleMetrics {
+func ReadThrottleMetrics(ctx context.Context, probe *Probe, tmClient tmclient.TabletManagerClient, metricsFunc func(context.Context, tmclient.TabletManagerClient) ThrottleMetrics) ThrottleMetrics {
if metrics := getCachedThrottleMetrics(probe); metrics != nil {
return metrics
}
started := time.Now()
- throttleMetrics := metricsFunc(ctx)
+ throttleMetrics := metricsFunc(ctx, tmClient)
go func(metrics ThrottleMetrics, started time.Time) {
stats.GetOrNewGauge("ThrottlerProbesLatency", "probes latency").Set(time.Since(started).Nanoseconds())
diff --git a/go/vt/vttablet/tabletserver/throttle/base/metric_name.go b/go/vt/vttablet/tabletserver/throttle/base/metric_name.go
index 98e1288fb23..43bd2d17a8c 100644
--- a/go/vt/vttablet/tabletserver/throttle/base/metric_name.go
+++ b/go/vt/vttablet/tabletserver/throttle/base/metric_name.go
@@ -60,11 +60,14 @@ func (names MetricNames) Unique() MetricNames {
}
const (
- DefaultMetricName MetricName = "default"
- LagMetricName MetricName = "lag"
- ThreadsRunningMetricName MetricName = "threads_running"
- CustomMetricName MetricName = "custom"
- LoadAvgMetricName MetricName = "loadavg"
+ DefaultMetricName MetricName = "default"
+ LagMetricName MetricName = "lag"
+ ThreadsRunningMetricName MetricName = "threads_running"
+ CustomMetricName MetricName = "custom"
+ LoadAvgMetricName MetricName = "loadavg"
+ HistoryListLengthMetricName MetricName = "history_list_length"
+ MysqldLoadAvgMetricName MetricName = "mysqld-loadavg"
+ MysqldDatadirUsedRatioMetricName MetricName = "mysqld-datadir-used-ratio"
)
func (metric MetricName) DefaultScope() Scope {
diff --git a/go/vt/vttablet/tabletserver/throttle/base/metric_name_test.go b/go/vt/vttablet/tabletserver/throttle/base/metric_name_test.go
index 9867ca18db3..c2e2b44b36f 100644
--- a/go/vt/vttablet/tabletserver/throttle/base/metric_name_test.go
+++ b/go/vt/vttablet/tabletserver/throttle/base/metric_name_test.go
@@ -21,6 +21,9 @@ import (
"testing"
"github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+
+ "vitess.io/vitess/go/textutil"
)
func TestAggregateName(t *testing.T) {
@@ -238,4 +241,27 @@ func TestKnownMetricNames(t *testing.T) {
assert.Contains(t, KnownMetricNames, LoadAvgMetricName)
assert.Contains(t, KnownMetricNames, CustomMetricName)
assert.Contains(t, KnownMetricNames, DefaultMetricName)
+ assert.Contains(t, KnownMetricNames, HistoryListLengthMetricName)
+ assert.Contains(t, KnownMetricNames, MysqldLoadAvgMetricName)
+ assert.Contains(t, KnownMetricNames, MysqldDatadirUsedRatioMetricName)
+}
+
+func TestKnownMetricNamesPascalCase(t *testing.T) {
+ expectCases := map[MetricName]string{
+ LagMetricName: "Lag",
+ ThreadsRunningMetricName: "ThreadsRunning",
+ LoadAvgMetricName: "Loadavg",
+ HistoryListLengthMetricName: "HistoryListLength",
+ CustomMetricName: "Custom",
+ DefaultMetricName: "Default",
+ MysqldLoadAvgMetricName: "MysqldLoadavg",
+ MysqldDatadirUsedRatioMetricName: "MysqldDatadirUsedRatio",
+ }
+ for _, metricName := range KnownMetricNames {
+ t.Run(metricName.String(), func(t *testing.T) {
+ expect, ok := expectCases[metricName]
+ require.True(t, ok)
+ assert.Equal(t, expect, textutil.PascalCase(metricName.String()))
+ })
+ }
}
diff --git a/go/vt/vttablet/tabletserver/throttle/base/self_metric.go b/go/vt/vttablet/tabletserver/throttle/base/self_metric.go
index 220dfa6bf60..88fbe2bdd13 100644
--- a/go/vt/vttablet/tabletserver/throttle/base/self_metric.go
+++ b/go/vt/vttablet/tabletserver/throttle/base/self_metric.go
@@ -21,15 +21,24 @@ import (
"fmt"
"strconv"
+ "vitess.io/vitess/go/vt/topo"
"vitess.io/vitess/go/vt/vttablet/tabletserver/connpool"
+ "vitess.io/vitess/go/vt/vttablet/tmclient"
)
+type SelfMetricReadParams struct {
+ Throttler metricsPublisher
+ Conn *connpool.Conn
+ TmClient tmclient.TabletManagerClient
+ TabletInfo *topo.TabletInfo
+}
+
type SelfMetric interface {
Name() MetricName
DefaultScope() Scope
DefaultThreshold() float64
RequiresConn() bool
- Read(ctx context.Context, throttler ThrottlerMetricsPublisher, conn *connpool.Conn) *ThrottleMetric
+ Read(ctx context.Context, params *SelfMetricReadParams) *ThrottleMetric
}
var (
diff --git a/go/vt/vttablet/tabletserver/throttle/base/self_metric_custom_query.go b/go/vt/vttablet/tabletserver/throttle/base/self_metric_custom_query.go
index 585e63ea285..88f789e5dcd 100644
--- a/go/vt/vttablet/tabletserver/throttle/base/self_metric_custom_query.go
+++ b/go/vt/vttablet/tabletserver/throttle/base/self_metric_custom_query.go
@@ -18,8 +18,6 @@ package base
import (
"context"
-
- "vitess.io/vitess/go/vt/vttablet/tabletserver/connpool"
)
var _ SelfMetric = registerSelfMetric(&CustomQuerySelfMetric{})
@@ -43,6 +41,6 @@ func (m *CustomQuerySelfMetric) RequiresConn() bool {
return true
}
-func (m *CustomQuerySelfMetric) Read(ctx context.Context, throttler ThrottlerMetricsPublisher, conn *connpool.Conn) *ThrottleMetric {
- return ReadSelfMySQLThrottleMetric(ctx, conn, throttler.GetCustomMetricsQuery())
+func (m *CustomQuerySelfMetric) Read(ctx context.Context, params *SelfMetricReadParams) *ThrottleMetric {
+ return ReadSelfMySQLThrottleMetric(ctx, params.Conn, params.Throttler.GetCustomMetricsQuery())
}
diff --git a/go/vt/vttablet/tabletserver/throttle/base/self_metric_default.go b/go/vt/vttablet/tabletserver/throttle/base/self_metric_default.go
index 8bce295da7c..97309fa6ea9 100644
--- a/go/vt/vttablet/tabletserver/throttle/base/self_metric_default.go
+++ b/go/vt/vttablet/tabletserver/throttle/base/self_metric_default.go
@@ -19,8 +19,6 @@ package base
import (
"context"
"fmt"
-
- "vitess.io/vitess/go/vt/vttablet/tabletserver/connpool"
)
var _ SelfMetric = registerSelfMetric(&DefaultSelfMetric{})
@@ -44,7 +42,7 @@ func (m *DefaultSelfMetric) RequiresConn() bool {
return false
}
-func (m *DefaultSelfMetric) Read(ctx context.Context, throttler ThrottlerMetricsPublisher, conn *connpool.Conn) *ThrottleMetric {
+func (m *DefaultSelfMetric) Read(ctx context.Context, params *SelfMetricReadParams) *ThrottleMetric {
return &ThrottleMetric{
Err: fmt.Errorf("unexpected direct call to DefaultSelfMetric.Read"),
}
diff --git a/go/vt/vttablet/tabletserver/throttle/base/self_metric_innodb_history_list_length.go b/go/vt/vttablet/tabletserver/throttle/base/self_metric_innodb_history_list_length.go
new file mode 100644
index 00000000000..2696b1750ea
--- /dev/null
+++ b/go/vt/vttablet/tabletserver/throttle/base/self_metric_innodb_history_list_length.go
@@ -0,0 +1,68 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package base
+
+import (
+ "context"
+ "math"
+ "sync/atomic"
+ "time"
+)
+
+var (
+ historyListLengthQuery = "select count as history_len from information_schema.INNODB_METRICS where name = 'trx_rseg_history_len'"
+
+ cachedHistoryListLengthMetric atomic.Pointer[ThrottleMetric]
+ historyListLengthCacheDuration = 5 * time.Second
+ historyListLengthDefaultThreshold = math.Pow10(9)
+)
+
+var _ SelfMetric = registerSelfMetric(&HistoryListLengthSelfMetric{})
+
+type HistoryListLengthSelfMetric struct {
+}
+
+func (m *HistoryListLengthSelfMetric) Name() MetricName {
+ return HistoryListLengthMetricName
+}
+
+func (m *HistoryListLengthSelfMetric) DefaultScope() Scope {
+ return SelfScope
+}
+
+func (m *HistoryListLengthSelfMetric) DefaultThreshold() float64 {
+ return historyListLengthDefaultThreshold
+}
+
+func (m *HistoryListLengthSelfMetric) RequiresConn() bool {
+ return true
+}
+
+func (m *HistoryListLengthSelfMetric) Read(ctx context.Context, params *SelfMetricReadParams) *ThrottleMetric {
+ // This function will be called sequentially, and therefore does not need strong mutex protection. Still, we use atomics
+ // to ensure correctness in case an external goroutine tries to read the metric concurrently.
+ metric := cachedHistoryListLengthMetric.Load()
+ if metric != nil {
+ return metric
+ }
+ metric = ReadSelfMySQLThrottleMetric(ctx, params.Conn, historyListLengthQuery)
+ cachedHistoryListLengthMetric.Store(metric)
+ time.AfterFunc(historyListLengthCacheDuration, func() {
+ cachedHistoryListLengthMetric.Store(nil)
+ })
+ return metric
+}
diff --git a/go/vt/vttablet/tabletserver/throttle/base/self_metric_lag.go b/go/vt/vttablet/tabletserver/throttle/base/self_metric_lag.go
index dc25ee5622a..3d0e4beebe1 100644
--- a/go/vt/vttablet/tabletserver/throttle/base/self_metric_lag.go
+++ b/go/vt/vttablet/tabletserver/throttle/base/self_metric_lag.go
@@ -23,7 +23,6 @@ import (
"vitess.io/vitess/go/constants/sidecar"
"vitess.io/vitess/go/vt/sqlparser"
- "vitess.io/vitess/go/vt/vttablet/tabletserver/connpool"
)
var (
@@ -65,6 +64,6 @@ func (m *LagSelfMetric) RequiresConn() bool {
return true
}
-func (m *LagSelfMetric) Read(ctx context.Context, throttler ThrottlerMetricsPublisher, conn *connpool.Conn) *ThrottleMetric {
- return ReadSelfMySQLThrottleMetric(ctx, conn, m.GetQuery())
+func (m *LagSelfMetric) Read(ctx context.Context, params *SelfMetricReadParams) *ThrottleMetric {
+ return ReadSelfMySQLThrottleMetric(ctx, params.Conn, m.GetQuery())
}
diff --git a/go/vt/vttablet/tabletserver/throttle/base/self_metric_loadavg.go b/go/vt/vttablet/tabletserver/throttle/base/self_metric_loadavg.go
index 40a2878421a..2d880169020 100644
--- a/go/vt/vttablet/tabletserver/throttle/base/self_metric_loadavg.go
+++ b/go/vt/vttablet/tabletserver/throttle/base/self_metric_loadavg.go
@@ -18,20 +18,16 @@ package base
import (
"context"
- "fmt"
- "os"
"runtime"
- "strconv"
- "strings"
+ "sync/atomic"
+ "time"
- "vitess.io/vitess/go/vt/vttablet/tabletserver/connpool"
+ "vitess.io/vitess/go/osutil"
)
var (
- loadavgOnlyAvailableOnLinuxMetric = &ThrottleMetric{
- Scope: SelfScope,
- Err: fmt.Errorf("loadavg metric is only available on Linux"),
- }
+ cachedLoadAvgMetric atomic.Pointer[ThrottleMetric]
+ loadAvgCacheDuration = 1 * time.Second
)
var _ SelfMetric = registerSelfMetric(&LoadAvgSelfMetric{})
@@ -55,27 +51,26 @@ func (m *LoadAvgSelfMetric) RequiresConn() bool {
return false
}
-func (m *LoadAvgSelfMetric) Read(ctx context.Context, throttler ThrottlerMetricsPublisher, conn *connpool.Conn) *ThrottleMetric {
- if runtime.GOOS != "linux" {
- return loadavgOnlyAvailableOnLinuxMetric
+func (m *LoadAvgSelfMetric) Read(ctx context.Context, params *SelfMetricReadParams) *ThrottleMetric {
+ // This function will be called sequentially, and therefore does not need strong mutex protection. Still, we use atomics
+ // to ensure correctness in case an external goroutine tries to read the metric concurrently.
+ metric := cachedLoadAvgMetric.Load()
+ if metric != nil {
+ return metric
}
- metric := &ThrottleMetric{
+ metric = &ThrottleMetric{
Scope: SelfScope,
}
- {
- content, err := os.ReadFile("/proc/loadavg")
- if err != nil {
- return metric.WithError(err)
- }
- fields := strings.Fields(string(content))
- if len(fields) == 0 {
- return metric.WithError(fmt.Errorf("unexpected /proc/loadavg content"))
- }
- loadAvg, err := strconv.ParseFloat(fields[0], 64)
- if err != nil {
- return metric.WithError(err)
- }
- metric.Value = loadAvg / float64(runtime.NumCPU())
+ val, err := osutil.LoadAvg()
+ if err != nil {
+ return metric.WithError(err)
}
+ metric.Value = val / float64(runtime.NumCPU())
+
+ cachedLoadAvgMetric.Store(metric)
+ time.AfterFunc(loadAvgCacheDuration, func() {
+ cachedLoadAvgMetric.Store(nil)
+ })
+
return metric
}
diff --git a/go/vt/vttablet/tabletserver/throttle/base/self_metric_mysqld.go b/go/vt/vttablet/tabletserver/throttle/base/self_metric_mysqld.go
new file mode 100644
index 00000000000..321837d86b4
--- /dev/null
+++ b/go/vt/vttablet/tabletserver/throttle/base/self_metric_mysqld.go
@@ -0,0 +1,156 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package base
+
+import (
+ "context"
+ "errors"
+ "fmt"
+ "sync/atomic"
+ "time"
+
+ "vitess.io/vitess/go/timer"
+
+ tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata"
+)
+
+var (
+ mysqlHostMetricsRpcTimeout = 5 * time.Second
+ mysqlHostMetricsRateLimit = 10 * time.Second
+ mysqlHostMetricsRateLimiter atomic.Pointer[timer.RateLimiter]
+ lastMySQLHostMetricsResponse atomic.Pointer[tabletmanagerdatapb.MysqlHostMetricsResponse]
+)
+
+// getMysqlMetricsRateLimiter returns a rate limiter that is active until the given context is cancelled.
+// This function will be called sequentially, but nonetheless it offers _some_ concurrent safety. Namely,
+// that a created rate limiter is guaranteed to be cleaned up
+func getMysqlMetricsRateLimiter(ctx context.Context, rateLimit time.Duration) *timer.RateLimiter {
+ rateLimiter := mysqlHostMetricsRateLimiter.Load()
+ if rateLimiter == nil {
+ rateLimiter = timer.NewRateLimiter(rateLimit)
+ go func() {
+ defer mysqlHostMetricsRateLimiter.Store(nil)
+ defer rateLimiter.Stop()
+ <-ctx.Done()
+ }()
+ mysqlHostMetricsRateLimiter.Store(rateLimiter)
+ }
+ return rateLimiter
+}
+
+// readMysqlHostMetrics reads MySQL host metrics sporadically from the tablet manager (which in turn reads
+// them from mysql deamon). The metrics are then cached, whether successful or not.
+// This idea is that is is very wasteful to read these metrics for every single query. E.g. right now the throttler
+// can issue 4 reads per second, which is wasteful to go through two RPCs to get the disk space usage for example. Even the load
+// average on the MySQL server is not that susceptible to change.
+func readMysqlHostMetrics(ctx context.Context, params *SelfMetricReadParams) error {
+ if params.TmClient == nil {
+ return fmt.Errorf("tmClient is nil")
+ }
+ if params.TabletInfo == nil {
+ return fmt.Errorf("tabletInfo is nil")
+ }
+ rateLimiter := getMysqlMetricsRateLimiter(ctx, mysqlHostMetricsRateLimit)
+ err := rateLimiter.Do(func() error {
+ ctx, cancel := context.WithTimeout(ctx, mysqlHostMetricsRpcTimeout)
+ defer cancel()
+
+ resp, err := params.TmClient.MysqlHostMetrics(ctx, params.TabletInfo.Tablet, &tabletmanagerdatapb.MysqlHostMetricsRequest{})
+ if err != nil {
+ return err
+ }
+ lastMySQLHostMetricsResponse.Store(resp)
+ return nil
+ })
+ return err
+}
+
+// getMysqlHostMetric gets a metric from the last read MySQL host metrics. The metric will either be directly read from
+// tablet manager (which then reads it from the mysql deamon), or from the cache.
+func getMysqlHostMetric(ctx context.Context, params *SelfMetricReadParams, mysqlHostMetricName string) *ThrottleMetric {
+ metric := &ThrottleMetric{
+ Scope: SelfScope,
+ }
+ if err := readMysqlHostMetrics(ctx, params); err != nil {
+ return metric.WithError(err)
+ }
+ resp := lastMySQLHostMetricsResponse.Load()
+ if resp == nil {
+ return metric.WithError(ErrNoResultYet)
+ }
+ mysqlMetric := resp.HostMetrics.Metrics[mysqlHostMetricName]
+ if mysqlMetric == nil {
+ return metric.WithError(ErrNoSuchMetric)
+ }
+ metric.Value = mysqlMetric.Value
+ if mysqlMetric.Error != nil {
+ metric.Err = errors.New(mysqlMetric.Error.Message)
+ }
+ return metric
+}
+
+var _ SelfMetric = registerSelfMetric(&MysqldLoadAvgSelfMetric{})
+var _ SelfMetric = registerSelfMetric(&MysqldDatadirUsedRatioSelfMetric{})
+
+// MysqldLoadAvgSelfMetric stands for the load average per cpu, on the MySQL host.
+type MysqldLoadAvgSelfMetric struct {
+}
+
+func (m *MysqldLoadAvgSelfMetric) Name() MetricName {
+ return MysqldLoadAvgMetricName
+}
+
+func (m *MysqldLoadAvgSelfMetric) DefaultScope() Scope {
+ return SelfScope
+}
+
+func (m *MysqldLoadAvgSelfMetric) DefaultThreshold() float64 {
+ return 1.0
+}
+
+func (m *MysqldLoadAvgSelfMetric) RequiresConn() bool {
+ return false
+}
+
+func (m *MysqldLoadAvgSelfMetric) Read(ctx context.Context, params *SelfMetricReadParams) *ThrottleMetric {
+ return getMysqlHostMetric(ctx, params, "loadavg")
+}
+
+// MysqldDatadirUsedRatioSelfMetric stands for the disk space usage of the mount where MySQL's datadir is located.
+// Range: 0.0 (empty) - 1.0 (full)
+type MysqldDatadirUsedRatioSelfMetric struct {
+}
+
+func (m *MysqldDatadirUsedRatioSelfMetric) Name() MetricName {
+ return MysqldDatadirUsedRatioMetricName
+}
+
+func (m *MysqldDatadirUsedRatioSelfMetric) DefaultScope() Scope {
+ return SelfScope
+}
+
+func (m *MysqldDatadirUsedRatioSelfMetric) DefaultThreshold() float64 {
+ return 0.98
+}
+
+func (m *MysqldDatadirUsedRatioSelfMetric) RequiresConn() bool {
+ return false
+}
+
+func (m *MysqldDatadirUsedRatioSelfMetric) Read(ctx context.Context, params *SelfMetricReadParams) *ThrottleMetric {
+ return getMysqlHostMetric(ctx, params, "datadir-used-ratio")
+}
diff --git a/go/vt/vttablet/tabletserver/throttle/base/self_metric_mysqld_test.go b/go/vt/vttablet/tabletserver/throttle/base/self_metric_mysqld_test.go
new file mode 100644
index 00000000000..39d3f3f5ec2
--- /dev/null
+++ b/go/vt/vttablet/tabletserver/throttle/base/self_metric_mysqld_test.go
@@ -0,0 +1,72 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package base
+
+import (
+ "context"
+ "fmt"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestGetMysqlMetricsRateLimiter(t *testing.T) {
+ rateLimit := 10 * time.Millisecond
+ for i := range 3 {
+ testName := fmt.Sprintf("iteration %d", i)
+ t.Run(testName, func(t *testing.T) {
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+ {
+ rateLimiter := mysqlHostMetricsRateLimiter.Load()
+ assert.Nil(t, rateLimiter)
+ }
+ rateLimiter := getMysqlMetricsRateLimiter(ctx, rateLimit)
+ assert.NotNil(t, rateLimiter)
+ for range 5 {
+ r := getMysqlMetricsRateLimiter(ctx, rateLimit)
+ // Returning the same rate limiter
+ assert.Equal(t, rateLimiter, r)
+ }
+ val := 0
+ incr := func() error {
+ val++
+ return nil
+ }
+ for range 10 {
+ rateLimiter.Do(incr)
+ time.Sleep(2 * rateLimit)
+ }
+ assert.EqualValues(t, 10, val)
+ cancel()
+ // There can be a race condition where the rate limiter still emits one final tick after the context is cancelled.
+ // So we wait enough time to ensure that tick is "wasted".
+ time.Sleep(2 * rateLimit)
+ // Now that the rate limited was stopped (we invoked `cancel()`), its `Do()` should not invoke the function anymore.
+ for range 7 {
+ rateLimiter.Do(incr)
+ time.Sleep(time.Millisecond)
+ }
+ assert.EqualValues(t, 10, val) // Same "10" value as before.
+ {
+ rateLimiter := mysqlHostMetricsRateLimiter.Load()
+ assert.Nil(t, rateLimiter)
+ }
+ })
+ }
+}
diff --git a/go/vt/vttablet/tabletserver/throttle/base/self_metric_threads_running.go b/go/vt/vttablet/tabletserver/throttle/base/self_metric_threads_running.go
index 08f7d408d1c..cb59547a768 100644
--- a/go/vt/vttablet/tabletserver/throttle/base/self_metric_threads_running.go
+++ b/go/vt/vttablet/tabletserver/throttle/base/self_metric_threads_running.go
@@ -18,8 +18,6 @@ package base
import (
"context"
-
- "vitess.io/vitess/go/vt/vttablet/tabletserver/connpool"
)
var (
@@ -47,6 +45,6 @@ func (m *ThreadsRunningSelfMetric) RequiresConn() bool {
return true
}
-func (m *ThreadsRunningSelfMetric) Read(ctx context.Context, throttler ThrottlerMetricsPublisher, conn *connpool.Conn) *ThrottleMetric {
- return ReadSelfMySQLThrottleMetric(ctx, conn, threadsRunningMetricQuery)
+func (m *ThreadsRunningSelfMetric) Read(ctx context.Context, params *SelfMetricReadParams) *ThrottleMetric {
+ return ReadSelfMySQLThrottleMetric(ctx, params.Conn, threadsRunningMetricQuery)
}
diff --git a/go/vt/vttablet/tabletserver/throttle/base/throttler_metrics_publisher.go b/go/vt/vttablet/tabletserver/throttle/base/throttler_metrics_publisher.go
index 1d2d4d0652c..10020af27e6 100644
--- a/go/vt/vttablet/tabletserver/throttle/base/throttler_metrics_publisher.go
+++ b/go/vt/vttablet/tabletserver/throttle/base/throttler_metrics_publisher.go
@@ -16,8 +16,8 @@ limitations under the License.
package base
-// ThrottlerMetricsPublisher is implemented by throttler.Throttler and is used by SelfMetric
+// metricsPublisher is implemented by throttler.Throttler and is used by SelfMetric
// implementations to query the throttler.
-type ThrottlerMetricsPublisher interface {
+type metricsPublisher interface {
GetCustomMetricsQuery() string
}
diff --git a/go/vt/vttablet/tabletserver/throttle/check.go b/go/vt/vttablet/tabletserver/throttle/check.go
index ccdfcb2ce23..d7f43d85e9d 100644
--- a/go/vt/vttablet/tabletserver/throttle/check.go
+++ b/go/vt/vttablet/tabletserver/throttle/check.go
@@ -188,9 +188,9 @@ func (check *ThrottlerCheck) Check(ctx context.Context, appName string, scope ba
// Out of abundance of caution, we will protect against such a scenario.
return
}
- stats.GetOrNewCounter(fmt.Sprintf("ThrottlerCheck%s%sTotal", textutil.SingleWordCamel(metricScope.String()), textutil.SingleWordCamel(metricName.String())), "").Add(1)
+ stats.GetOrNewCounter(fmt.Sprintf("ThrottlerCheck%s%sTotal", textutil.PascalCase(metricScope.String()), textutil.PascalCase(metricName.String())), "").Add(1)
if !metricCheckResult.IsOK() {
- stats.GetOrNewCounter(fmt.Sprintf("ThrottlerCheck%s%sError", textutil.SingleWordCamel(metricScope.String()), textutil.SingleWordCamel(metricName.String())), "").Add(1)
+ stats.GetOrNewCounter(fmt.Sprintf("ThrottlerCheck%s%sError", textutil.PascalCase(metricScope.String()), textutil.PascalCase(metricName.String())), "").Add(1)
}
}(metricCheckResult)
}
@@ -249,7 +249,7 @@ func (check *ThrottlerCheck) localCheck(ctx context.Context, aggregatedMetricNam
check.throttler.markMetricHealthy(aggregatedMetricName)
}
if timeSinceHealthy, found := check.throttler.timeSinceMetricHealthy(aggregatedMetricName); found {
- go stats.GetOrNewGauge(fmt.Sprintf("ThrottlerCheck%sSecondsSinceHealthy", textutil.SingleWordCamel(scope.String())), fmt.Sprintf("seconds since last healthy check for %v", scope)).Set(int64(timeSinceHealthy.Seconds()))
+ go stats.GetOrNewGauge(fmt.Sprintf("ThrottlerCheck%sSecondsSinceHealthy", textutil.PascalCase(scope.String())), fmt.Sprintf("seconds since last healthy check for %v", scope)).Set(int64(timeSinceHealthy.Seconds()))
}
return checkResult
@@ -261,7 +261,7 @@ func (check *ThrottlerCheck) reportAggregated(aggregatedMetricName string, metri
return
}
if value, err := metricResult.Get(); err == nil {
- stats.GetOrNewGaugeFloat64(fmt.Sprintf("ThrottlerAggregated%s%s", textutil.SingleWordCamel(scope.String()), textutil.SingleWordCamel(metricName.String())), fmt.Sprintf("aggregated value for %v", scope)).Set(value)
+ stats.GetOrNewGaugeFloat64(fmt.Sprintf("ThrottlerAggregated%s%s", textutil.PascalCase(scope.String()), textutil.PascalCase(metricName.String())), fmt.Sprintf("aggregated value for %v", scope)).Set(value)
}
}
diff --git a/go/vt/vttablet/tabletserver/throttle/throttler.go b/go/vt/vttablet/tabletserver/throttle/throttler.go
index af7f59abb7e..839ba9d43b8 100644
--- a/go/vt/vttablet/tabletserver/throttle/throttler.go
+++ b/go/vt/vttablet/tabletserver/throttle/throttler.go
@@ -95,7 +95,6 @@ const (
DefaultThrottleRatio = 1.0
defaultReplicationLagQuery = "select unix_timestamp(now(6))-max(ts/1000000000) as replication_lag from %s.heartbeat"
- threadsRunningQuery = "show global status like 'threads_running'"
inventoryPrefix = "inventory/"
throttlerConfigPrefix = "config/"
@@ -137,6 +136,7 @@ type Throttler struct {
keyspace string
shard string
tabletAlias *topodatapb.TabletAlias
+ tabletInfo atomic.Pointer[topo.TabletInfo]
check *ThrottlerCheck
isEnabled atomic.Bool
@@ -190,7 +190,7 @@ type Throttler struct {
cancelEnableContext context.CancelFunc
throttledAppsMutex sync.Mutex
- readSelfThrottleMetrics func(context.Context) base.ThrottleMetrics // overwritten by unit test
+ readSelfThrottleMetrics func(context.Context, tmclient.TabletManagerClient) base.ThrottleMetrics // overwritten by unit test
}
// ThrottlerStatus published some status values from the throttler
@@ -262,8 +262,8 @@ func NewThrottler(env tabletenv.Env, srvTopoServer srvtopo.Server, ts *topo.Serv
}
throttler.StoreMetricsThreshold(base.RegisteredSelfMetrics[base.LagMetricName].DefaultThreshold())
- throttler.readSelfThrottleMetrics = func(ctx context.Context) base.ThrottleMetrics {
- return throttler.readSelfThrottleMetricsInternal(ctx)
+ throttler.readSelfThrottleMetrics = func(ctx context.Context, tmClient tmclient.TabletManagerClient) base.ThrottleMetrics {
+ return throttler.readSelfThrottleMetricsInternal(ctx, tmClient)
}
return throttler
}
@@ -338,6 +338,15 @@ func (throttler *Throttler) initConfig() {
// readThrottlerConfig proactively reads the throttler's config from SrvKeyspace in local topo
func (throttler *Throttler) readThrottlerConfig(ctx context.Context) (*topodatapb.ThrottlerConfig, error) {
+ // since we're reading from topo, let's seize this opportunity to read table info as well
+ if throttler.tabletInfo.Load() == nil {
+ if ti, err := throttler.ts.GetTablet(ctx, throttler.tabletAlias); err == nil {
+ throttler.tabletInfo.Store(ti)
+ } else {
+ log.Errorf("Throttler: error reading tablet info: %v", err)
+ }
+ }
+
srvks, err := throttler.ts.GetSrvKeyspace(ctx, throttler.tabletAlias.Cell, throttler.keyspace)
if err != nil {
return nil, err
@@ -804,7 +813,7 @@ func (throttler *Throttler) Operate(ctx context.Context, wg *sync.WaitGroup) {
if throttler.IsOpen() {
// frequent
// Always collect self metrics:
- throttler.collectSelfMetrics(ctx)
+ throttler.collectSelfMetrics(ctx, tmClient)
if !throttler.isDormant() {
throttler.collectShardMetrics(ctx, tmClient)
}
@@ -869,7 +878,7 @@ func (throttler *Throttler) Operate(ctx context.Context, wg *sync.WaitGroup) {
}()
}
-func (throttler *Throttler) generateTabletProbeFunction(scope base.Scope, tmClient tmclient.TabletManagerClient, probe *base.Probe) (probeFunc func(context.Context) base.ThrottleMetrics) {
+func (throttler *Throttler) generateTabletProbeFunction(scope base.Scope, probe *base.Probe) (probeFunc func(context.Context, tmclient.TabletManagerClient) base.ThrottleMetrics) {
metricsWithError := func(err error) base.ThrottleMetrics {
metrics := base.ThrottleMetrics{}
for _, metricName := range base.KnownMetricNames {
@@ -882,7 +891,7 @@ func (throttler *Throttler) generateTabletProbeFunction(scope base.Scope, tmClie
}
return metrics
}
- return func(ctx context.Context) base.ThrottleMetrics {
+ return func(ctx context.Context, tmClient tmclient.TabletManagerClient) base.ThrottleMetrics {
// Some reasonable timeout, to ensure we release connections even if they're hanging (otherwise grpc-go keeps polling those connections forever)
ctx, cancel := context.WithTimeout(ctx, 4*activeCollectInterval)
defer cancel()
@@ -940,7 +949,7 @@ func (throttler *Throttler) generateTabletProbeFunction(scope base.Scope, tmClie
// readSelfThrottleMetricsInternal rreads all registsred self metrics on this tablet (or backend MySQL server).
// This is the actual place where metrics are read, to be later aggregated and/or propagated to other tablets.
-func (throttler *Throttler) readSelfThrottleMetricsInternal(ctx context.Context) base.ThrottleMetrics {
+func (throttler *Throttler) readSelfThrottleMetricsInternal(ctx context.Context, tmClient tmclient.TabletManagerClient) base.ThrottleMetrics {
result := make(base.ThrottleMetrics, len(base.RegisteredSelfMetrics))
writeMetric := func(metric *base.ThrottleMetric) {
select {
@@ -950,15 +959,20 @@ func (throttler *Throttler) readSelfThrottleMetricsInternal(ctx context.Context)
}
}
readMetric := func(selfMetric base.SelfMetric) *base.ThrottleMetric {
- if !selfMetric.RequiresConn() {
- return selfMetric.Read(ctx, throttler, nil)
+ params := &base.SelfMetricReadParams{
+ Throttler: throttler,
+ TmClient: tmClient,
+ TabletInfo: throttler.tabletInfo.Load(),
}
- conn, err := throttler.pool.Get(ctx, nil)
- if err != nil {
- return &base.ThrottleMetric{Err: err}
+ if selfMetric.RequiresConn() {
+ conn, err := throttler.pool.Get(ctx, nil)
+ if err != nil {
+ return &base.ThrottleMetric{Err: err}
+ }
+ defer conn.Recycle()
+ params.Conn = conn.Conn
}
- defer conn.Recycle()
- return selfMetric.Read(ctx, throttler, conn.Conn)
+ return selfMetric.Read(ctx, params)
}
for metricName, selfMetric := range base.RegisteredSelfMetrics {
if metricName == base.DefaultMetricName {
@@ -975,7 +989,7 @@ func (throttler *Throttler) readSelfThrottleMetricsInternal(ctx context.Context)
return result
}
-func (throttler *Throttler) collectSelfMetrics(ctx context.Context) {
+func (throttler *Throttler) collectSelfMetrics(ctx context.Context, tmClient tmclient.TabletManagerClient) {
probe := throttler.inventory.ClustersProbes[throttler.tabletAliasString()]
if probe == nil {
// probe not created yet
@@ -990,7 +1004,7 @@ func (throttler *Throttler) collectSelfMetrics(ctx context.Context) {
defer atomic.StoreInt64(&probe.QueryInProgress, 0)
// Throttler is probing its own tablet's metrics:
- _ = base.ReadThrottleMetrics(ctx, probe, throttler.readSelfThrottleMetrics)
+ _ = base.ReadThrottleMetrics(ctx, probe, tmClient, throttler.readSelfThrottleMetrics)
}()
}
@@ -1011,9 +1025,9 @@ func (throttler *Throttler) collectShardMetrics(ctx context.Context, tmClient tm
defer atomic.StoreInt64(&probe.QueryInProgress, 0)
// Throttler probing other tablets:
- throttleMetricFunc := throttler.generateTabletProbeFunction(base.ShardScope, tmClient, probe)
+ throttleMetricFunc := throttler.generateTabletProbeFunction(base.ShardScope, probe)
- throttleMetrics := base.ReadThrottleMetrics(ctx, probe, throttleMetricFunc)
+ throttleMetrics := base.ReadThrottleMetrics(ctx, probe, tmClient, throttleMetricFunc)
for _, metric := range throttleMetrics {
select {
case <-ctx.Done():
diff --git a/go/vt/vttablet/tabletserver/throttle/throttler_test.go b/go/vt/vttablet/tabletserver/throttle/throttler_test.go
index fd7921899da..352e641fa35 100644
--- a/go/vt/vttablet/tabletserver/throttle/throttler_test.go
+++ b/go/vt/vttablet/tabletserver/throttle/throttler_test.go
@@ -71,6 +71,24 @@ var (
Value: 2.718,
Err: nil,
},
+ base.HistoryListLengthMetricName: &base.ThrottleMetric{
+ Scope: base.SelfScope,
+ Alias: "",
+ Value: 5,
+ Err: nil,
+ },
+ base.MysqldLoadAvgMetricName: &base.ThrottleMetric{
+ Scope: base.SelfScope,
+ Alias: "",
+ Value: 0.3311,
+ Err: nil,
+ },
+ base.MysqldDatadirUsedRatioMetricName: &base.ThrottleMetric{
+ Scope: base.SelfScope,
+ Alias: "",
+ Value: 0.85,
+ Err: nil,
+ },
}
replicaMetrics = map[string]*MetricResult{
base.LagMetricName.String(): {
@@ -93,6 +111,21 @@ var (
ResponseCode: tabletmanagerdatapb.CheckThrottlerResponseCode_OK,
Value: 5.1,
},
+ base.HistoryListLengthMetricName.String(): {
+ StatusCode: http.StatusOK,
+ ResponseCode: tabletmanagerdatapb.CheckThrottlerResponseCode_OK,
+ Value: 6,
+ },
+ base.MysqldLoadAvgMetricName.String(): {
+ StatusCode: http.StatusOK,
+ ResponseCode: tabletmanagerdatapb.CheckThrottlerResponseCode_OK,
+ Value: 0.2211,
+ },
+ base.MysqldDatadirUsedRatioMetricName.String(): {
+ StatusCode: http.StatusOK,
+ ResponseCode: tabletmanagerdatapb.CheckThrottlerResponseCode_OK,
+ Value: 0.87,
+ },
}
nonPrimaryTabletType atomic.Int32
)
@@ -283,7 +316,7 @@ func newTestThrottler() *Throttler {
throttler.recentCheckDormantDiff = int64(throttler.dormantPeriod / recentCheckRateLimiterInterval)
throttler.recentCheckDiff = int64(3 * time.Second / recentCheckRateLimiterInterval)
- throttler.readSelfThrottleMetrics = func(ctx context.Context) base.ThrottleMetrics {
+ throttler.readSelfThrottleMetrics = func(ctx context.Context, tmClient tmclient.TabletManagerClient) base.ThrottleMetrics {
for _, metric := range selfMetrics {
go func() {
select {
@@ -1827,10 +1860,13 @@ func TestChecks(t *testing.T) {
assert.Equal(t, testAppName.String(), checkResult.AppName)
assert.Equal(t, len(base.KnownMetricNames), len(checkResult.Metrics))
- assert.EqualValues(t, 0.3, checkResult.Metrics[base.LagMetricName.String()].Value) // self lag value, because flags.Scope is set
- assert.EqualValues(t, 26, checkResult.Metrics[base.ThreadsRunningMetricName.String()].Value) // self value, because flags.Scope is set
- assert.EqualValues(t, 17, checkResult.Metrics[base.CustomMetricName.String()].Value) // self value, because flags.Scope is set
- assert.EqualValues(t, 2.718, checkResult.Metrics[base.LoadAvgMetricName.String()].Value) // self value, because flags.Scope is set
+ assert.EqualValues(t, 0.3, checkResult.Metrics[base.LagMetricName.String()].Value) // self lag value, because flags.Scope is set
+ assert.EqualValues(t, 26, checkResult.Metrics[base.ThreadsRunningMetricName.String()].Value) // self value, because flags.Scope is set
+ assert.EqualValues(t, 17, checkResult.Metrics[base.CustomMetricName.String()].Value) // self value, because flags.Scope is set
+ assert.EqualValues(t, 2.718, checkResult.Metrics[base.LoadAvgMetricName.String()].Value) // self value, because flags.Scope is set
+ assert.EqualValues(t, 5, checkResult.Metrics[base.HistoryListLengthMetricName.String()].Value) // self value, because flags.Scope is set
+ assert.EqualValues(t, 0.3311, checkResult.Metrics[base.MysqldLoadAvgMetricName.String()].Value) // self value, because flags.Scope is set
+ assert.EqualValues(t, 0.85, checkResult.Metrics[base.MysqldDatadirUsedRatioMetricName.String()].Value) // self value, because flags.Scope is set
for _, metric := range checkResult.Metrics {
assert.EqualValues(t, base.SelfScope.String(), metric.Scope)
}
@@ -1886,10 +1922,13 @@ func TestChecks(t *testing.T) {
assert.Equal(t, testAppName.String(), checkResult.AppName)
assert.Equal(t, len(base.KnownMetricNames), len(checkResult.Metrics))
- assert.EqualValues(t, 0.9, checkResult.Metrics[base.LagMetricName.String()].Value) // shard lag value, because flags.Scope is set
- assert.EqualValues(t, 26, checkResult.Metrics[base.ThreadsRunningMetricName.String()].Value) // shard value, because flags.Scope is set
- assert.EqualValues(t, 17, checkResult.Metrics[base.CustomMetricName.String()].Value) // shard value, because flags.Scope is set
- assert.EqualValues(t, 5.1, checkResult.Metrics[base.LoadAvgMetricName.String()].Value) // shard value, because flags.Scope is set
+ assert.EqualValues(t, 0.9, checkResult.Metrics[base.LagMetricName.String()].Value) // shard lag value, because flags.Scope is set
+ assert.EqualValues(t, 26, checkResult.Metrics[base.ThreadsRunningMetricName.String()].Value) // shard value, because flags.Scope is set
+ assert.EqualValues(t, 17, checkResult.Metrics[base.CustomMetricName.String()].Value) // shard value, because flags.Scope is set
+ assert.EqualValues(t, 5.1, checkResult.Metrics[base.LoadAvgMetricName.String()].Value) // shard value, because flags.Scope is set
+ assert.EqualValues(t, 6, checkResult.Metrics[base.HistoryListLengthMetricName.String()].Value) // shard value, because flags.Scope is set
+ assert.EqualValues(t, 0.3311, checkResult.Metrics[base.MysqldLoadAvgMetricName.String()].Value) // shard value, because flags.Scope is set
+ assert.EqualValues(t, 0.87, checkResult.Metrics[base.MysqldDatadirUsedRatioMetricName.String()].Value) // shard value, because flags.Scope is set
for _, metric := range checkResult.Metrics {
assert.EqualValues(t, base.ShardScope.String(), metric.Scope)
}
@@ -1918,14 +1957,19 @@ func TestChecks(t *testing.T) {
assert.ErrorIs(t, checkResult.Error, base.ErrThresholdExceeded)
assert.Equal(t, len(base.KnownMetricNames), len(checkResult.Metrics))
- assert.EqualValues(t, 0.9, checkResult.Metrics[base.LagMetricName.String()].Value) // shard lag value, because "shard" is the default scope for lag
- assert.EqualValues(t, 26, checkResult.Metrics[base.ThreadsRunningMetricName.String()].Value) // self value, because "self" is the default scope for threads_running
- assert.EqualValues(t, 17, checkResult.Metrics[base.CustomMetricName.String()].Value) // self value, because "self" is the default scope for custom
- assert.EqualValues(t, 2.718, checkResult.Metrics[base.LoadAvgMetricName.String()].Value) // self value, because "self" is the default scope for loadavg
+ assert.EqualValues(t, 0.9, checkResult.Metrics[base.LagMetricName.String()].Value) // shard lag value, because "shard" is the default scope for lag
+ assert.EqualValues(t, 26, checkResult.Metrics[base.ThreadsRunningMetricName.String()].Value) // self value, because "self" is the default scope for threads_running
+ assert.EqualValues(t, 17, checkResult.Metrics[base.CustomMetricName.String()].Value) // self value, because "self" is the default scope for custom
+ assert.EqualValues(t, 2.718, checkResult.Metrics[base.LoadAvgMetricName.String()].Value) // self value, because "self" is the default scope for loadavg
+ assert.EqualValues(t, 5, checkResult.Metrics[base.HistoryListLengthMetricName.String()].Value) // self value, because "self" is the default scope for loadavg
+ assert.EqualValues(t, 0.3311, checkResult.Metrics[base.MysqldLoadAvgMetricName.String()].Value) // self value, because "self" is the default scope for loadavg
+ assert.EqualValues(t, 0.85, checkResult.Metrics[base.MysqldDatadirUsedRatioMetricName.String()].Value) // self value, because "self" is the default scope for loadavg
assert.EqualValues(t, base.ShardScope.String(), checkResult.Metrics[base.LagMetricName.String()].Scope)
assert.EqualValues(t, base.SelfScope.String(), checkResult.Metrics[base.ThreadsRunningMetricName.String()].Scope)
assert.EqualValues(t, base.SelfScope.String(), checkResult.Metrics[base.CustomMetricName.String()].Scope)
assert.EqualValues(t, base.SelfScope.String(), checkResult.Metrics[base.LoadAvgMetricName.String()].Scope)
+ assert.EqualValues(t, base.SelfScope.String(), checkResult.Metrics[base.MysqldLoadAvgMetricName.String()].Scope)
+ assert.EqualValues(t, base.SelfScope.String(), checkResult.Metrics[base.MysqldDatadirUsedRatioMetricName.String()].Scope)
})
})
t.Run("checks, defined scope masks explicit scope metrics", func(t *testing.T) {
@@ -1939,6 +1983,9 @@ func TestChecks(t *testing.T) {
base.MetricName("self/threads_running"),
base.MetricName("custom"),
base.MetricName("shard/loadavg"),
+ base.MetricName("shard/mysqld-loadavg"),
+ base.MetricName("self/history_list_length"),
+ base.MetricName("self/mysqld-datadir-used-ratio"),
base.MetricName("default"),
}
checkResult := throttler.Check(ctx, testAppName.String(), metricNames, flags)
@@ -1950,10 +1997,13 @@ func TestChecks(t *testing.T) {
assert.ErrorIs(t, checkResult.Error, base.ErrThresholdExceeded)
assert.Equal(t, len(metricNames), len(checkResult.Metrics))
- assert.EqualValues(t, 0.9, checkResult.Metrics[base.LagMetricName.String()].Value) // shard lag value, even though scope name is in metric name
- assert.EqualValues(t, 26, checkResult.Metrics[base.ThreadsRunningMetricName.String()].Value) // shard value, even though scope name is in metric name
- assert.EqualValues(t, 17, checkResult.Metrics[base.CustomMetricName.String()].Value) // shard value because flags.Scope is set
- assert.EqualValues(t, 5.1, checkResult.Metrics[base.LoadAvgMetricName.String()].Value) // shard value, not because scope name is in metric name but because flags.Scope is set
+ assert.EqualValues(t, 0.9, checkResult.Metrics[base.LagMetricName.String()].Value) // shard lag value, even though scope name is in metric name
+ assert.EqualValues(t, 26, checkResult.Metrics[base.ThreadsRunningMetricName.String()].Value) // shard value, even though scope name is in metric name
+ assert.EqualValues(t, 17, checkResult.Metrics[base.CustomMetricName.String()].Value) // shard value because flags.Scope is set
+ assert.EqualValues(t, 5.1, checkResult.Metrics[base.LoadAvgMetricName.String()].Value) // shard value, not because scope name is in metric name but because flags.Scope is set
+ assert.EqualValues(t, 6, checkResult.Metrics[base.HistoryListLengthMetricName.String()].Value) // shard value, even though scope name is in metric name
+ assert.EqualValues(t, 0.3311, checkResult.Metrics[base.MysqldLoadAvgMetricName.String()].Value) // shard value, not because scope name is in metric name but because flags.Scope is set
+ assert.EqualValues(t, 0.87, checkResult.Metrics[base.MysqldDatadirUsedRatioMetricName.String()].Value) // shard value, even though scope name is in metric name
for _, metric := range checkResult.Metrics {
assert.EqualValues(t, base.ShardScope.String(), metric.Scope)
}
@@ -2222,8 +2272,13 @@ func TestReplica(t *testing.T) {
base.DefaultMetricName:
assert.Error(t, metricResult.Error, "metricName=%v, value=%v, threshold=%v", metricName, metricResult.Value, metricResult.Threshold)
assert.ErrorIs(t, metricResult.Error, base.ErrThresholdExceeded)
- case base.ThreadsRunningMetricName:
+ case base.ThreadsRunningMetricName,
+ base.HistoryListLengthMetricName,
+ base.MysqldLoadAvgMetricName,
+ base.MysqldDatadirUsedRatioMetricName:
assert.NoError(t, metricResult.Error, "metricName=%v, value=%v, threshold=%v", metricName, metricResult.Value, metricResult.Threshold)
+ default:
+ assert.Fail(t, "unexpected metric", "name=%v", metricName)
}
}
})
diff --git a/go/vt/vttablet/tabletserver/twopc.go b/go/vt/vttablet/tabletserver/twopc.go
index 5eff30ce07e..e1212ebe627 100644
--- a/go/vt/vttablet/tabletserver/twopc.go
+++ b/go/vt/vttablet/tabletserver/twopc.go
@@ -27,6 +27,7 @@ import (
"vitess.io/vitess/go/vt/dbconnpool"
"vitess.io/vitess/go/vt/log"
querypb "vitess.io/vitess/go/vt/proto/query"
+ tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata"
topodatapb "vitess.io/vitess/go/vt/proto/topodata"
vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc"
"vitess.io/vitess/go/vt/sqlparser"
@@ -75,7 +76,9 @@ type TwoPC struct {
readPool *connpool.Pool
insertRedoTx *sqlparser.ParsedQuery
+ readRedoTx *sqlparser.ParsedQuery
insertRedoStmt *sqlparser.ParsedQuery
+ readRedoStmts *sqlparser.ParsedQuery
updateRedoTx *sqlparser.ParsedQuery
deleteRedoTx *sqlparser.ParsedQuery
deleteRedoStmt *sqlparser.ParsedQuery
@@ -105,9 +108,15 @@ func (tpc *TwoPC) initializeQueries() {
tpc.insertRedoTx = sqlparser.BuildParsedQuery(
"insert into %s.redo_state(dtid, state, time_created) values (%a, %a, %a)",
dbname, ":dtid", ":state", ":time_created")
+ tpc.readRedoTx = sqlparser.BuildParsedQuery(
+ "select state, time_created, message from %s.redo_state where dtid = %a",
+ dbname, ":dtid")
tpc.insertRedoStmt = sqlparser.BuildParsedQuery(
"insert into %s.redo_statement(dtid, id, statement) values %a",
dbname, ":vals")
+ tpc.readRedoStmts = sqlparser.BuildParsedQuery(
+ "select statement from %s.redo_statement where dtid = %a order by id",
+ dbname, ":dtid")
tpc.updateRedoTx = sqlparser.BuildParsedQuery(
"update %s.redo_state set state = %a, message = %a where dtid = %a",
dbname, ":state", ":message", ":dtid")
@@ -150,6 +159,18 @@ func (tpc *TwoPC) initializeQueries() {
dbname, ":time_created")
}
+// getStateString gets the redo state of the transaction as a string.
+func getStateString(st int) string {
+ switch st {
+ case RedoStateFailed:
+ return "FAILED"
+ case RedoStatePrepared:
+ return "PREPARED"
+ default:
+ return "UNKNOWN"
+ }
+}
+
// Open starts the TwoPC service.
func (tpc *TwoPC) Open(dbconfigs *dbconfigs.DBConfigs) error {
conn, err := dbconnpool.NewDBConnection(context.TODO(), dbconfigs.DbaWithDB())
@@ -171,7 +192,7 @@ func (tpc *TwoPC) Close() {
// SaveRedo saves the statements in the redo log using the supplied connection.
func (tpc *TwoPC) SaveRedo(ctx context.Context, conn *StatefulConnection, dtid string, queries []tx.Query) error {
bindVars := map[string]*querypb.BindVariable{
- "dtid": sqltypes.StringBindVariable(dtid),
+ "dtid": sqltypes.BytesBindVariable([]byte(dtid)),
"state": sqltypes.Int64BindVariable(RedoStatePrepared),
"time_created": sqltypes.Int64BindVariable(time.Now().UnixNano()),
}
@@ -202,7 +223,7 @@ func (tpc *TwoPC) SaveRedo(ctx context.Context, conn *StatefulConnection, dtid s
// UpdateRedo changes the state of the redo log for the dtid.
func (tpc *TwoPC) UpdateRedo(ctx context.Context, conn *StatefulConnection, dtid string, state int, message string) error {
bindVars := map[string]*querypb.BindVariable{
- "dtid": sqltypes.StringBindVariable(dtid),
+ "dtid": sqltypes.BytesBindVariable([]byte(dtid)),
"state": sqltypes.Int64BindVariable(int64(state)),
"message": sqltypes.StringBindVariable(message),
}
@@ -213,7 +234,7 @@ func (tpc *TwoPC) UpdateRedo(ctx context.Context, conn *StatefulConnection, dtid
// DeleteRedo deletes the redo log for the dtid.
func (tpc *TwoPC) DeleteRedo(ctx context.Context, conn *StatefulConnection, dtid string) error {
bindVars := map[string]*querypb.BindVariable{
- "dtid": sqltypes.StringBindVariable(dtid),
+ "dtid": sqltypes.BytesBindVariable([]byte(dtid)),
}
_, err := tpc.exec(ctx, conn, tpc.deleteRedoTx, bindVars)
if err != nil {
@@ -291,7 +312,7 @@ func (tpc *TwoPC) CountUnresolvedRedo(ctx context.Context, unresolvedTime time.T
// CreateTransaction saves the metadata of a 2pc transaction as Prepared.
func (tpc *TwoPC) CreateTransaction(ctx context.Context, conn *StatefulConnection, dtid string, participants []*querypb.Target) error {
bindVars := map[string]*querypb.BindVariable{
- "dtid": sqltypes.StringBindVariable(dtid),
+ "dtid": sqltypes.BytesBindVariable([]byte(dtid)),
"state": sqltypes.Int64BindVariable(int64(DTStatePrepare)),
"cur_time": sqltypes.Int64BindVariable(time.Now().UnixNano()),
}
@@ -324,7 +345,7 @@ func (tpc *TwoPC) CreateTransaction(ctx context.Context, conn *StatefulConnectio
// If the transaction is not a in the Prepare state, an error is returned.
func (tpc *TwoPC) Transition(ctx context.Context, conn *StatefulConnection, dtid string, state querypb.TransactionState) error {
bindVars := map[string]*querypb.BindVariable{
- "dtid": sqltypes.StringBindVariable(dtid),
+ "dtid": sqltypes.BytesBindVariable([]byte(dtid)),
"state": sqltypes.Int64BindVariable(int64(state)),
"prepare": sqltypes.Int64BindVariable(int64(querypb.TransactionState_PREPARE)),
}
@@ -341,7 +362,7 @@ func (tpc *TwoPC) Transition(ctx context.Context, conn *StatefulConnection, dtid
// DeleteTransaction deletes the metadata for the specified transaction.
func (tpc *TwoPC) DeleteTransaction(ctx context.Context, conn *StatefulConnection, dtid string) error {
bindVars := map[string]*querypb.BindVariable{
- "dtid": sqltypes.StringBindVariable(dtid),
+ "dtid": sqltypes.BytesBindVariable([]byte(dtid)),
}
_, err := tpc.exec(ctx, conn, tpc.deleteTransaction, bindVars)
if err != nil {
@@ -361,7 +382,7 @@ func (tpc *TwoPC) ReadTransaction(ctx context.Context, dtid string) (*querypb.Tr
result := &querypb.TransactionMetadata{}
bindVars := map[string]*querypb.BindVariable{
- "dtid": sqltypes.StringBindVariable(dtid),
+ "dtid": sqltypes.BytesBindVariable([]byte(dtid)),
}
qr, err := tpc.read(ctx, conn.Conn, tpc.readTransaction, bindVars)
if err != nil {
@@ -400,6 +421,47 @@ func (tpc *TwoPC) ReadTransaction(ctx context.Context, dtid string) (*querypb.Tr
return result, nil
}
+// GetTransactionInfo returns the data for the transaction.
+func (tpc *TwoPC) GetTransactionInfo(ctx context.Context, dtid string) (*tabletmanagerdatapb.GetTransactionInfoResponse, error) {
+ conn, err := tpc.readPool.Get(ctx, nil)
+ if err != nil {
+ return nil, err
+ }
+ defer conn.Recycle()
+
+ result := &tabletmanagerdatapb.GetTransactionInfoResponse{}
+ bindVars := map[string]*querypb.BindVariable{
+ "dtid": sqltypes.BytesBindVariable([]byte(dtid)),
+ }
+ qr, err := tpc.read(ctx, conn.Conn, tpc.readRedoTx, bindVars)
+ if err != nil {
+ return nil, err
+ }
+ if len(qr.Rows) == 0 {
+ return result, nil
+ }
+ state, err := qr.Rows[0][0].ToInt()
+ if err != nil {
+ return nil, err
+ }
+ result.State = getStateString(state)
+ // A failure in time parsing will show up as a very old time,
+ // which is harmless.
+ tm, _ := qr.Rows[0][1].ToCastInt64()
+ result.TimeCreated = tm
+ result.Message = qr.Rows[0][2].ToString()
+
+ qr, err = tpc.read(ctx, conn.Conn, tpc.readRedoStmts, bindVars)
+ if err != nil {
+ return nil, err
+ }
+ result.Statements = make([]string, len(qr.Rows))
+ for idx, row := range qr.Rows {
+ result.Statements[idx] = row[0].ToString()
+ }
+ return result, nil
+}
+
// ReadAllTransactions returns info about all distributed transactions.
func (tpc *TwoPC) ReadAllTransactions(ctx context.Context) ([]*tx.DistributedTx, error) {
conn, err := tpc.readPool.Get(ctx, nil)
diff --git a/go/vt/vttablet/tabletserver/tx/api.go b/go/vt/vttablet/tabletserver/tx/api.go
index 48a1cc1107a..a7bc4389b89 100644
--- a/go/vt/vttablet/tabletserver/tx/api.go
+++ b/go/vt/vttablet/tabletserver/tx/api.go
@@ -21,19 +21,19 @@ import (
"strings"
"time"
+ "vitess.io/vitess/go/slice"
querypb "vitess.io/vitess/go/vt/proto/query"
vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc"
"vitess.io/vitess/go/vt/servenv"
"vitess.io/vitess/go/vt/sqlparser"
+ "vitess.io/vitess/go/vt/vterrors"
)
type (
// ConnID as type int64
ConnID = int64
-
// DTID as type string
DTID = string
-
// EngineStateMachine is used to control the state the transactional engine -
// whether new connections and/or transactions are allowed or not.
EngineStateMachine interface {
@@ -42,10 +42,8 @@ type (
AcceptReadOnly() error
StopGently()
}
-
// ReleaseReason as type int
ReleaseReason int
-
// Properties contains all information that is related to the currently running
// transaction on the connection
Properties struct {
@@ -60,12 +58,17 @@ type (
Stats *servenv.TimingsWrapper
}
-)
-type Query struct {
- Sql string
- Tables []string
-}
+ // Query contains the query and involved tables executed inside transaction.
+ // A savepoint is represented by having only the Savepoint field set.
+ // This is used to rollback to a specific savepoint.
+ // The query log on commit, does not need to store the savepoint.
+ Query struct {
+ Savepoint string
+ Sql string
+ Tables []string
+ }
+)
const (
// TxClose - connection released on close.
@@ -130,6 +133,30 @@ func (p *Properties) RecordQueryDetail(query string, tables []string) {
})
}
+// RecordQueryDetail records the query and tables against this transaction.
+func (p *Properties) RecordSavePointDetail(savepoint string) {
+ if p == nil {
+ return
+ }
+ p.Queries = append(p.Queries, Query{
+ Savepoint: savepoint,
+ })
+}
+
+func (p *Properties) RollbackToSavepoint(savepoint string) error {
+ if p == nil {
+ return nil
+ }
+ for i, query := range p.Queries {
+ if query.Savepoint == savepoint {
+ p.Queries = p.Queries[:i]
+ return nil
+ }
+ }
+
+ return vterrors.VT13001(fmt.Sprintf("savepoint %s not found", savepoint))
+}
+
// RecordQuery records the query and extract tables against this transaction.
func (p *Properties) RecordQuery(query string, parser *sqlparser.Parser) {
if p == nil {
@@ -181,3 +208,12 @@ func (p *Properties) String(sanitize bool, parser *sqlparser.Parser) string {
printQueries(),
)
}
+
+func (p *Properties) GetQueries() []Query {
+ if p == nil {
+ return nil
+ }
+ return slice.Filter(p.Queries, func(q Query) bool {
+ return q.Sql != ""
+ })
+}
diff --git a/go/vt/vttablet/tabletserver/tx/api_test.go b/go/vt/vttablet/tabletserver/tx/api_test.go
new file mode 100644
index 00000000000..cefb04c0391
--- /dev/null
+++ b/go/vt/vttablet/tabletserver/tx/api_test.go
@@ -0,0 +1,62 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package tx
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/require"
+
+ "vitess.io/vitess/go/test/utils"
+)
+
+/*
+ TestRollbackToSavePointQueryDetails tests the rollback to savepoint query details
+
+s1
+q1
+s2
+r1
+q2
+q3
+s3
+s4
+q4
+q5
+r2 -- error
+r4
+*/
+func TestRollbackToSavePointQueryDetails(t *testing.T) {
+ p := &Properties{}
+ p.RecordSavePointDetail("s1")
+ p.RecordQueryDetail("select 1", nil)
+ p.RecordSavePointDetail("s2")
+ require.NoError(t, p.RollbackToSavepoint("s1"))
+ p.RecordQueryDetail("select 2", nil)
+ p.RecordQueryDetail("select 3", nil)
+ p.RecordSavePointDetail("s3")
+ p.RecordSavePointDetail("s4")
+ p.RecordQueryDetail("select 4", nil)
+ p.RecordQueryDetail("select 5", nil)
+ require.ErrorContains(t, p.RollbackToSavepoint("s2"), "savepoint s2 not found")
+ require.NoError(t, p.RollbackToSavepoint("s4"))
+
+ utils.MustMatch(t, p.GetQueries(), []Query{
+ {Sql: "select 2"},
+ {Sql: "select 3"},
+ })
+}
diff --git a/go/vt/vttablet/tabletserver/tx_engine.go b/go/vt/vttablet/tabletserver/tx_engine.go
index 42bec29dfa3..d0ca4ec498c 100644
--- a/go/vt/vttablet/tabletserver/tx_engine.go
+++ b/go/vt/vttablet/tabletserver/tx_engine.go
@@ -31,6 +31,7 @@ import (
querypb "vitess.io/vitess/go/vt/proto/query"
vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc"
"vitess.io/vitess/go/vt/servenv"
+ "vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/vterrors"
"vitess.io/vitess/go/vt/vttablet/tabletserver/connpool"
"vitess.io/vitess/go/vt/vttablet/tabletserver/tabletenv"
@@ -83,7 +84,6 @@ type TxEngine struct {
// 2. TabletControls have been set in the tablet record, and Query service is going to be disabled.
twopcAllowed []bool
shutdownGracePeriod time.Duration
- coordinatorAddress string
abandonAge time.Duration
ticks *timer.Timer
@@ -116,20 +116,19 @@ func NewTxEngine(env tabletenv.Env, dxNotifier func()) *TxEngine {
te.txPool = NewTxPool(env, limiter)
// We initially allow twoPC (handles vttablet restarts).
// We will disallow them for a few reasons -
- // 1. when a new tablet is promoted if semi-sync is turned off.
+ // 1. When a new tablet is promoted if semi-sync is turned off.
// 2. TabletControls have been set by a Resharding workflow.
te.twopcAllowed = make([]bool, TwoPCAllowed_Len)
for idx := range te.twopcAllowed {
te.twopcAllowed[idx] = true
}
- te.twopcEnabled = config.TwoPCEnable
- if te.twopcEnabled {
- if config.TwoPCAbandonAge <= 0 {
- log.Error("2PC abandon age not specified: Disabling 2PC")
- te.twopcEnabled = false
- }
+ te.twopcEnabled = true
+ if config.TwoPCAbandonAge <= 0 {
+ log.Error("2PC abandon age not specified: Disabling 2PC")
+ te.twopcEnabled = false
}
- te.abandonAge = config.TwoPCAbandonAge.Get()
+
+ te.abandonAge = config.TwoPCAbandonAge
te.ticks = timer.NewTimer(te.abandonAge / 2)
// Set the prepared pool capacity to something lower than
@@ -270,7 +269,7 @@ func (te *TxEngine) isTxPoolAvailable(addToWaitGroup func(int)) error {
// statement(s) used to execute the begin (if any).
//
// Subsequent statements can access the connection through the transaction id.
-func (te *TxEngine) Begin(ctx context.Context, savepointQueries []string, reservedID int64, setting *smartconnpool.Setting, options *querypb.ExecuteOptions) (int64, string, string, error) {
+func (te *TxEngine) Begin(ctx context.Context, reservedID int64, setting *smartconnpool.Setting, options *querypb.ExecuteOptions) (int64, string, string, error) {
span, ctx := trace.NewSpan(ctx, "TxEngine.Begin")
defer span.Finish()
@@ -285,7 +284,7 @@ func (te *TxEngine) Begin(ctx context.Context, savepointQueries []string, reserv
}
defer te.beginRequests.Done()
- conn, beginSQL, sessionStateChanges, err := te.txPool.Begin(ctx, options, te.state == AcceptingReadOnly, reservedID, savepointQueries, setting)
+ conn, beginSQL, sessionStateChanges, err := te.txPool.Begin(ctx, options, te.state == AcceptingReadOnly, reservedID, setting)
if err != nil {
return 0, "", "", err
}
@@ -454,6 +453,9 @@ func (te *TxEngine) prepareFromRedo() error {
allErrs = append(allErrs, vterrors.Wrapf(err, "dtid - %v", preparedTx.Dtid))
if prepFailed {
failedCounter++
+ te.env.Stats().RedoPreparedFail.Add("NonRetryable", 1)
+ } else {
+ te.env.Stats().RedoPreparedFail.Add("Retryable", 1)
}
} else {
preparedCounter++
@@ -480,9 +482,24 @@ func (te *TxEngine) prepareTx(ctx context.Context, preparedTx *tx.PreparedTx) (f
}
}()
+ // We need to check whether the first query is a SET query or not.
+ // If it is then we need to run it before we begin the transaction because
+ // some connection settings can't be modified after a transaction has started
+ // For example -
+ // mysql> begin;
+ // Query OK, 0 rows affected (0.00 sec)
+ // mysql> set @@transaction_isolation="read-committed";
+ // ERROR 1568 (25001): Transaction characteristics can't be changed while a transaction is in progress.
+ var settingsQuery string
+ firstQuery := preparedTx.Queries[0]
+ if sqlparser.Preview(firstQuery) == sqlparser.StmtSet {
+ settingsQuery = firstQuery
+ preparedTx.Queries = preparedTx.Queries[1:]
+ }
+
// We need to redo the prepared transactions using a dba user because MySQL might still be in read only mode.
var conn *StatefulConnection
- if conn, err = te.beginNewDbaConnection(ctx); err != nil {
+ if conn, err = te.beginNewDbaConnection(ctx, settingsQuery); err != nil {
return
}
@@ -516,7 +533,7 @@ func (te *TxEngine) checkErrorAndMarkFailed(ctx context.Context, dtid string, re
// Update the state of the transaction in the redo log.
// Retryable Error: Update the message with error message.
// Non-retryable Error: Along with message, update the state as RedoStateFailed.
- conn, _, _, err := te.txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ conn, _, _, err := te.txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil)
if err != nil {
log.Errorf("markFailed: Begin failed for dtid %s: %v", dtid, err)
return
@@ -580,14 +597,13 @@ func (te *TxEngine) startTransactionWatcher() {
ctx, cancel := context.WithTimeout(tabletenv.LocalContext(), te.abandonAge/4)
defer cancel()
- // Raise alerts on prepares that have been unresolved for too long.
- // Use 5x abandonAge to give opportunity for transaction coordinator to resolve these redo logs.
- count, err := te.twoPC.CountUnresolvedRedo(ctx, time.Now().Add(-te.abandonAge*5))
+ // Track unresolved redo logs.
+ count, err := te.twoPC.CountUnresolvedRedo(ctx, time.Now().Add(-te.abandonAge))
if err != nil {
te.env.Stats().InternalErrors.Add("RedoWatcherFail", 1)
log.Errorf("Error reading prepared transactions: %v", err)
}
- te.env.Stats().Unresolved.Set("Prepares", count)
+ te.env.Stats().Unresolved.Set("ResourceManager", count)
// Notify lingering distributed transactions.
count, err = te.twoPC.CountUnresolvedTransaction(ctx, time.Now().Add(-te.abandonAge))
@@ -596,6 +612,7 @@ func (te *TxEngine) startTransactionWatcher() {
log.Errorf("Error reading unresolved transactions: %v", err)
return
}
+ te.env.Stats().Unresolved.Set("MetadataManager", count)
if count > 0 {
te.dxNotify()
}
@@ -608,7 +625,7 @@ func (te *TxEngine) stopTransactionWatcher() {
}
// ReserveBegin creates a reserved connection, and in it opens a transaction
-func (te *TxEngine) ReserveBegin(ctx context.Context, options *querypb.ExecuteOptions, preQueries []string, savepointQueries []string) (int64, string, error) {
+func (te *TxEngine) ReserveBegin(ctx context.Context, options *querypb.ExecuteOptions, preQueries []string) (int64, string, error) {
span, ctx := trace.NewSpan(ctx, "TxEngine.ReserveBegin")
defer span.Finish()
err := te.isTxPoolAvailable(te.beginRequests.Add)
@@ -622,7 +639,7 @@ func (te *TxEngine) ReserveBegin(ctx context.Context, options *querypb.ExecuteOp
return 0, "", err
}
defer conn.UnlockUpdateTime()
- _, sessionStateChanges, err := te.txPool.begin(ctx, options, te.state == AcceptingReadOnly, conn, savepointQueries)
+ _, sessionStateChanges, err := te.txPool.begin(ctx, options, te.state == AcceptingReadOnly, conn)
if err != nil {
conn.Close()
conn.Release(tx.ConnInitFail)
@@ -707,12 +724,19 @@ func (te *TxEngine) Release(connID int64) error {
// beginNewDbaConnection gets a new dba connection and starts a transaction in it.
// This should only be used to redo prepared transactions. All the other writes should use the normal pool.
-func (te *TxEngine) beginNewDbaConnection(ctx context.Context) (*StatefulConnection, error) {
+func (te *TxEngine) beginNewDbaConnection(ctx context.Context, settingsQuery string) (*StatefulConnection, error) {
dbConn, err := connpool.NewConn(ctx, te.env.Config().DB.DbaWithDB(), nil, nil, te.env)
if err != nil {
return nil, err
}
+ // If we have a settings query that we need to apply, we do that before starting the transaction.
+ if settingsQuery != "" {
+ if _, err = dbConn.ExecOnce(ctx, settingsQuery, 1, false); err != nil {
+ return nil, err
+ }
+ }
+
sc := &StatefulConnection{
dbConn: &connpool.PooledConn{
Conn: dbConn,
@@ -720,7 +744,7 @@ func (te *TxEngine) beginNewDbaConnection(ctx context.Context) (*StatefulConnect
env: te.env,
}
- _, _, err = te.txPool.begin(ctx, nil, false, sc, nil)
+ _, _, err = te.txPool.begin(ctx, nil, false, sc)
return sc, err
}
diff --git a/go/vt/vttablet/tabletserver/tx_engine_test.go b/go/vt/vttablet/tabletserver/tx_engine_test.go
index a9958525587..cba7bf86e8f 100644
--- a/go/vt/vttablet/tabletserver/tx_engine_test.go
+++ b/go/vt/vttablet/tabletserver/tx_engine_test.go
@@ -62,11 +62,11 @@ func TestTxEngineClose(t *testing.T) {
// Normal close with timeout wait.
te.AcceptReadWrite()
- c, beginSQL, _, err := te.txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ c, beginSQL, _, err := te.txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil)
require.NoError(t, err)
require.Equal(t, "begin", beginSQL)
c.Unlock()
- c, beginSQL, _, err = te.txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ c, beginSQL, _, err = te.txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil)
require.NoError(t, err)
require.Equal(t, "begin", beginSQL)
c.Unlock()
@@ -78,7 +78,7 @@ func TestTxEngineClose(t *testing.T) {
// Immediate close.
te.AcceptReadOnly()
- c, _, _, err = te.txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ c, _, _, err = te.txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil)
if err != nil {
t.Fatal(err)
}
@@ -90,7 +90,7 @@ func TestTxEngineClose(t *testing.T) {
// Normal close with short grace period.
te.shutdownGracePeriod = 25 * time.Millisecond
te.AcceptReadWrite()
- c, _, _, err = te.txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ c, _, _, err = te.txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil)
require.NoError(t, err)
c.Unlock()
start = time.Now()
@@ -101,7 +101,7 @@ func TestTxEngineClose(t *testing.T) {
// Normal close with short grace period, but pool gets empty early.
te.shutdownGracePeriod = 25 * time.Millisecond
te.AcceptReadWrite()
- c, _, _, err = te.txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ c, _, _, err = te.txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil)
require.NoError(t, err)
c.Unlock()
go func() {
@@ -117,7 +117,7 @@ func TestTxEngineClose(t *testing.T) {
// Immediate close, but connection is in use.
te.AcceptReadOnly()
- c, _, _, err = te.txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ c, _, _, err = te.txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil)
require.NoError(t, err)
go func() {
time.Sleep(100 * time.Millisecond)
@@ -138,7 +138,7 @@ func TestTxEngineClose(t *testing.T) {
te.AcceptReadWrite()
_, err = te.Reserve(ctx, &querypb.ExecuteOptions{}, 0, nil)
require.NoError(t, err)
- _, _, err = te.ReserveBegin(ctx, &querypb.ExecuteOptions{}, nil, nil)
+ _, _, err = te.ReserveBegin(ctx, &querypb.ExecuteOptions{}, nil)
require.NoError(t, err)
start = time.Now()
te.Close()
@@ -159,11 +159,11 @@ func TestTxEngineBegin(t *testing.T) {
for _, exec := range []func() (int64, string, error){
func() (int64, string, error) {
- tx, _, schemaStateChanges, err := te.Begin(ctx, nil, 0, nil, &querypb.ExecuteOptions{})
+ tx, _, schemaStateChanges, err := te.Begin(ctx, 0, nil, &querypb.ExecuteOptions{})
return tx, schemaStateChanges, err
},
func() (int64, string, error) {
- return te.ReserveBegin(ctx, &querypb.ExecuteOptions{}, nil, nil)
+ return te.ReserveBegin(ctx, &querypb.ExecuteOptions{}, nil)
},
} {
te.AcceptReadOnly()
@@ -204,7 +204,7 @@ func TestTxEngineRenewFails(t *testing.T) {
te := NewTxEngine(tabletenv.NewEnv(vtenv.NewTestEnv(), cfg, "TabletServerTest"), nil)
te.AcceptReadOnly()
options := &querypb.ExecuteOptions{}
- connID, _, err := te.ReserveBegin(ctx, options, nil, nil)
+ connID, _, err := te.ReserveBegin(ctx, options, nil)
require.NoError(t, err)
conn, err := te.txPool.GetAndLock(connID, "for test")
@@ -559,7 +559,7 @@ func startTx(te *TxEngine, writeTransaction bool) error {
} else {
options.TransactionIsolation = querypb.ExecuteOptions_CONSISTENT_SNAPSHOT_READ_ONLY
}
- _, _, _, err := te.Begin(context.Background(), nil, 0, nil, options)
+ _, _, _, err := te.Begin(context.Background(), 0, nil, options)
return err
}
@@ -577,7 +577,7 @@ func TestTxEngineFailReserve(t *testing.T) {
_, err := te.Reserve(ctx, options, 0, nil)
assert.EqualError(t, err, "tx engine can't accept new connections in state NotServing")
- _, _, err = te.ReserveBegin(ctx, options, nil, nil)
+ _, _, err = te.ReserveBegin(ctx, options, nil)
assert.EqualError(t, err, "tx engine can't accept new connections in state NotServing")
te.AcceptReadOnly()
@@ -586,14 +586,14 @@ func TestTxEngineFailReserve(t *testing.T) {
_, err = te.Reserve(ctx, options, 0, []string{"dummy_query"})
assert.EqualError(t, err, "unknown error: failed executing dummy_query (errno 1105) (sqlstate HY000) during query: dummy_query")
- _, _, err = te.ReserveBegin(ctx, options, []string{"dummy_query"}, nil)
+ _, _, err = te.ReserveBegin(ctx, options, []string{"dummy_query"})
assert.EqualError(t, err, "unknown error: failed executing dummy_query (errno 1105) (sqlstate HY000) during query: dummy_query")
nonExistingID := int64(42)
_, err = te.Reserve(ctx, options, nonExistingID, nil)
assert.EqualError(t, err, "transaction 42: not found (potential transaction timeout)")
- txID, _, _, err := te.Begin(ctx, nil, 0, nil, options)
+ txID, _, _, err := te.Begin(ctx, 0, nil, options)
require.NoError(t, err)
conn, err := te.txPool.GetAndLock(txID, "for test")
require.NoError(t, err)
@@ -613,8 +613,7 @@ func TestCheckReceivedError(t *testing.T) {
cfg := tabletenv.NewDefaultConfig()
cfg.DB = newDBConfigs(db)
env := tabletenv.NewEnv(vtenv.NewTestEnv(), cfg, "TabletServerTest")
- env.Config().TwoPCEnable = true
- env.Config().TwoPCAbandonAge = 5
+ env.Config().TwoPCAbandonAge = 5 * time.Second
te := NewTxEngine(env, nil)
te.AcceptReadWrite()
@@ -625,43 +624,43 @@ func TestCheckReceivedError(t *testing.T) {
}{{
receivedErr: vterrors.New(vtrpcpb.Code_DEADLINE_EXCEEDED, "deadline exceeded"),
retryable: true,
- expQuery: `update _vt.redo_state set state = 1, message = 'deadline exceeded' where dtid = 'aa'`,
+ expQuery: `update _vt.redo_state set state = 1, message = 'deadline exceeded' where dtid = _binary'aa'`,
}, {
receivedErr: vterrors.New(vtrpcpb.Code_INVALID_ARGUMENT, "invalid argument"),
retryable: false,
- expQuery: `update _vt.redo_state set state = 0, message = 'invalid argument' where dtid = 'aa'`,
+ expQuery: `update _vt.redo_state set state = 0, message = 'invalid argument' where dtid = _binary'aa'`,
}, {
receivedErr: sqlerror.NewSQLError(sqlerror.ERLockDeadlock, sqlerror.SSLockDeadlock, "Deadlock found when trying to get lock; try restarting transaction"),
retryable: false,
- expQuery: `update _vt.redo_state set state = 0, message = 'Deadlock found when trying to get lock; try restarting transaction (errno 1213) (sqlstate 40001)' where dtid = 'aa'`,
+ expQuery: `update _vt.redo_state set state = 0, message = 'Deadlock found when trying to get lock; try restarting transaction (errno 1213) (sqlstate 40001)' where dtid = _binary'aa'`,
}, {
receivedErr: context.DeadlineExceeded,
retryable: true,
- expQuery: `update _vt.redo_state set state = 1, message = 'context deadline exceeded' where dtid = 'aa'`,
+ expQuery: `update _vt.redo_state set state = 1, message = 'context deadline exceeded' where dtid = _binary'aa'`,
}, {
receivedErr: context.Canceled,
retryable: true,
- expQuery: `update _vt.redo_state set state = 1, message = 'context canceled' where dtid = 'aa'`,
+ expQuery: `update _vt.redo_state set state = 1, message = 'context canceled' where dtid = _binary'aa'`,
}, {
receivedErr: sqlerror.NewSQLError(sqlerror.CRServerLost, sqlerror.SSUnknownSQLState, "Lost connection to MySQL server during query"),
retryable: true,
- expQuery: `update _vt.redo_state set state = 1, message = 'Lost connection to MySQL server during query (errno 2013) (sqlstate HY000)' where dtid = 'aa'`,
+ expQuery: `update _vt.redo_state set state = 1, message = 'Lost connection to MySQL server during query (errno 2013) (sqlstate HY000)' where dtid = _binary'aa'`,
}, {
receivedErr: sqlerror.NewSQLError(sqlerror.CRMalformedPacket, sqlerror.SSUnknownSQLState, "Malformed packet"),
retryable: false,
- expQuery: `update _vt.redo_state set state = 0, message = 'Malformed packet (errno 2027) (sqlstate HY000)' where dtid = 'aa'`,
+ expQuery: `update _vt.redo_state set state = 0, message = 'Malformed packet (errno 2027) (sqlstate HY000)' where dtid = _binary'aa'`,
}, {
receivedErr: sqlerror.NewSQLError(sqlerror.CRServerGone, sqlerror.SSUnknownSQLState, "Server has gone away"),
retryable: true,
- expQuery: `update _vt.redo_state set state = 1, message = 'Server has gone away (errno 2006) (sqlstate HY000)' where dtid = 'aa'`,
+ expQuery: `update _vt.redo_state set state = 1, message = 'Server has gone away (errno 2006) (sqlstate HY000)' where dtid = _binary'aa'`,
}, {
receivedErr: vterrors.New(vtrpcpb.Code_ABORTED, "Row count exceeded"),
retryable: false,
- expQuery: `update _vt.redo_state set state = 0, message = 'Row count exceeded' where dtid = 'aa'`,
+ expQuery: `update _vt.redo_state set state = 0, message = 'Row count exceeded' where dtid = _binary'aa'`,
}, {
receivedErr: errors.New("(errno 2013) (sqlstate HY000) lost connection"),
retryable: true,
- expQuery: `update _vt.redo_state set state = 1, message = '(errno 2013) (sqlstate HY000) lost connection' where dtid = 'aa'`,
+ expQuery: `update _vt.redo_state set state = 1, message = '(errno 2013) (sqlstate HY000) lost connection' where dtid = _binary'aa'`,
}}
for _, tc := range tcases {
@@ -721,3 +720,89 @@ func TestIsTwoPCAllowed(t *testing.T) {
})
}
}
+
+// TestPrepareTx tests prepareTx function in transaction engine.
+func TestPrepareTx(t *testing.T) {
+ testcases := []struct {
+ name string
+ preparedTx *tx.PreparedTx
+ requireFailure bool
+ errWanted string
+ queryLogWanted string
+ }{
+ {
+ name: "Success",
+ preparedTx: &tx.PreparedTx{
+ Queries: []string{
+ "insert into vitess_test (intval) values(40)",
+ "set @@time_zone='+10:30'",
+ "insert into vitess_test (intval) values(20)",
+ },
+ },
+ requireFailure: false,
+ errWanted: "",
+ queryLogWanted: "use `fakesqldb`;begin;insert into vitess_test (intval) values(40);set @@time_zone='+10:30';insert into vitess_test (intval) values(20)",
+ },
+ {
+ name: "Unretryable failure during query",
+ preparedTx: &tx.PreparedTx{
+ Queries: []string{
+ "insert into vitess_test (intval) values(40)",
+ "failing query",
+ "insert into vitess_test (intval) values(20)",
+ },
+ },
+ requireFailure: true,
+ errWanted: "(errno 1105) (sqlstate HY000)",
+ },
+ {
+ name: "Retryable failure during query",
+ preparedTx: &tx.PreparedTx{
+ Queries: []string{
+ "insert into vitess_test (intval) values(40)",
+ "retryable query",
+ "insert into vitess_test (intval) values(20)",
+ },
+ },
+ requireFailure: false,
+ errWanted: "Retryable error (errno 2002) (sqlstate HY000)",
+ },
+ {
+ name: "Success - Settings query in the beginning",
+ preparedTx: &tx.PreparedTx{
+ Queries: []string{
+ "set @@time_zone='+10:30'",
+ "insert into vitess_test (intval) values(40)",
+ "insert into vitess_test (intval) values(20)",
+ },
+ },
+ requireFailure: false,
+ errWanted: "",
+ queryLogWanted: "use `fakesqldb`;set @@time_zone='+10:30';begin;insert into vitess_test (intval) values(40);insert into vitess_test (intval) values(20)",
+ },
+ }
+ for _, tt := range testcases {
+ t.Run(tt.name, func(t *testing.T) {
+ db := setUpQueryExecutorTest(t)
+ defer db.Close()
+ db.AddQueryPattern(".*", &sqltypes.Result{})
+ db.AddRejectedQuery("failing query", assert.AnError)
+ db.AddRejectedQuery("retryable query", sqlerror.NewSQLError(sqlerror.CRConnectionError, "", "Retryable error"))
+ cfg := tabletenv.NewDefaultConfig()
+ cfg.DB = newDBConfigs(db)
+ cfg.TwoPCAbandonAge = 200 * time.Second
+ te := NewTxEngine(tabletenv.NewEnv(vtenv.NewTestEnv(), cfg, "TabletServerTest"), nil)
+ te.AcceptReadWrite()
+ db.ResetQueryLog()
+ failed, err := te.prepareTx(context.Background(), tt.preparedTx)
+ require.EqualValues(t, tt.requireFailure, failed)
+ if tt.errWanted != "" {
+ require.ErrorContains(t, err, tt.errWanted)
+ return
+ }
+ require.NoError(t, err)
+ require.EqualValues(t, 1, len(te.preparedPool.conns))
+ require.EqualValues(t, tt.queryLogWanted, db.QueryLog())
+ })
+ }
+}
diff --git a/go/vt/vttablet/tabletserver/tx_pool.go b/go/vt/vttablet/tabletserver/tx_pool.go
index 52f356e0cca..302a3d41050 100644
--- a/go/vt/vttablet/tabletserver/tx_pool.go
+++ b/go/vt/vttablet/tabletserver/tx_pool.go
@@ -40,9 +40,8 @@ import (
)
const (
- txLogInterval = 1 * time.Minute
- beginWithCSRO = "start transaction with consistent snapshot, read only"
- trackGtidQuery = "set session session_track_gtids = START_GTID"
+ txLogInterval = 1 * time.Minute
+ beginWithCSRO = "start transaction with consistent snapshot, read only"
)
var txIsolations = map[querypb.ExecuteOptions_TransactionIsolation]string{
@@ -230,7 +229,7 @@ func (tp *TxPool) Rollback(ctx context.Context, txConn *StatefulConnection) erro
// the statements (if any) executed to initiate the transaction. In autocommit
// mode the statement will be "".
// The connection returned is locked for the callee and its responsibility is to unlock the connection.
-func (tp *TxPool) Begin(ctx context.Context, options *querypb.ExecuteOptions, readOnly bool, reservedID int64, savepointQueries []string, setting *smartconnpool.Setting) (*StatefulConnection, string, string, error) {
+func (tp *TxPool) Begin(ctx context.Context, options *querypb.ExecuteOptions, readOnly bool, reservedID int64, setting *smartconnpool.Setting) (*StatefulConnection, string, string, error) {
span, ctx := trace.NewSpan(ctx, "TxPool.Begin")
defer span.Finish()
@@ -262,25 +261,28 @@ func (tp *TxPool) Begin(ctx context.Context, options *querypb.ExecuteOptions, re
if err != nil {
return nil, "", "", err
}
- sql, sessionStateChanges, err := tp.begin(ctx, options, readOnly, conn, savepointQueries)
+ sql, sessionStateChanges, err := tp.begin(ctx, options, readOnly, conn)
if err != nil {
conn.Close()
conn.Release(tx.ConnInitFail)
return nil, "", "", err
}
+ // If we have applied any settings on the connection, then we need to record the query
+ // in case we need to redo the transaction because of a failure.
+ if setting != nil {
+ conn.TxProperties().RecordQueryDetail(setting.ApplyQuery(), nil)
+ }
return conn, sql, sessionStateChanges, nil
}
-func (tp *TxPool) begin(ctx context.Context, options *querypb.ExecuteOptions, readOnly bool, conn *StatefulConnection, savepointQueries []string) (string, string, error) {
+func (tp *TxPool) begin(ctx context.Context, options *querypb.ExecuteOptions, readOnly bool, conn *StatefulConnection) (string, string, error) {
immediateCaller := callerid.ImmediateCallerIDFromContext(ctx)
effectiveCaller := callerid.EffectiveCallerIDFromContext(ctx)
- beginQueries, autocommit, sessionStateChanges, err := createTransaction(ctx, options, conn, readOnly, savepointQueries)
+ beginQueries, autocommit, sessionStateChanges, err := createTransaction(ctx, options, conn, readOnly)
if err != nil {
return "", "", err
}
-
conn.txProps = tp.NewTxProps(immediateCaller, effectiveCaller, autocommit)
-
return beginQueries, sessionStateChanges, nil
}
@@ -306,7 +308,6 @@ func createTransaction(
options *querypb.ExecuteOptions,
conn *StatefulConnection,
readOnly bool,
- savepointQueries []string,
) (beginQueries string, autocommitTransaction bool, sessionStateChanges string, err error) {
switch options.GetTransactionIsolation() {
case querypb.ExecuteOptions_CONSISTENT_SNAPSHOT_READ_ONLY:
@@ -344,12 +345,6 @@ func createTransaction(
default:
return "", false, "", vterrors.Errorf(vtrpcpb.Code_INTERNAL, "[BUG] don't know how to open a transaction of this type: %v", options.GetTransactionIsolation())
}
-
- for _, savepoint := range savepointQueries {
- if _, err = conn.Exec(ctx, savepoint, 1, false); err != nil {
- return "", false, "", err
- }
- }
return
}
@@ -398,16 +393,6 @@ func createStartTxStmt(options *querypb.ExecuteOptions, readOnly bool) (string,
}
func handleConsistentSnapshotCase(ctx context.Context, conn *StatefulConnection) (beginSQL string, sessionStateChanges string, err error) {
- _, err = conn.execWithRetry(ctx, trackGtidQuery, 1, false)
- // We allow this to fail since this is a custom MySQL extension, but we return
- // then if this query was executed or not.
- //
- // Callers also can know because the sessionStateChanges will be empty for a snapshot
- // transaction and get GTID information in another (less efficient) way.
- if err == nil {
- beginSQL = trackGtidQuery + "; "
- }
-
isolationLevel := txIsolations[querypb.ExecuteOptions_CONSISTENT_SNAPSHOT_READ_ONLY]
execSQL, err := setIsolationLevel(ctx, conn, isolationLevel)
diff --git a/go/vt/vttablet/tabletserver/tx_pool_test.go b/go/vt/vttablet/tabletserver/tx_pool_test.go
index e80f1edb17f..22810d4c422 100644
--- a/go/vt/vttablet/tabletserver/tx_pool_test.go
+++ b/go/vt/vttablet/tabletserver/tx_pool_test.go
@@ -48,7 +48,7 @@ func TestTxPoolExecuteCommit(t *testing.T) {
sql := "select 'this is a query'"
// begin a transaction and then return the connection
- conn, _, _, err := txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ conn, _, _, err := txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil)
require.NoError(t, err)
id := conn.ReservedID()
@@ -83,7 +83,7 @@ func TestTxPoolExecuteRollback(t *testing.T) {
db, txPool, _, closer := setup(t)
defer closer()
- conn, _, _, err := txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ conn, _, _, err := txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil)
require.NoError(t, err)
defer conn.Release(tx.TxRollback)
@@ -104,7 +104,7 @@ func TestTxPoolExecuteRollbackOnClosedConn(t *testing.T) {
db, txPool, _, closer := setup(t)
defer closer()
- conn, _, _, err := txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ conn, _, _, err := txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil)
require.NoError(t, err)
defer conn.Release(tx.TxRollback)
@@ -125,9 +125,9 @@ func TestTxPoolRollbackNonBusy(t *testing.T) {
defer closer()
// start two transactions, and mark one of them as unused
- conn1, _, _, err := txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ conn1, _, _, err := txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil)
require.NoError(t, err)
- conn2, _, _, err := txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ conn2, _, _, err := txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil)
require.NoError(t, err)
conn2.Unlock() // this marks conn2 as NonBusy
@@ -154,7 +154,7 @@ func TestTxPoolTransactionIsolation(t *testing.T) {
db, txPool, _, closer := setup(t)
defer closer()
- c2, _, _, err := txPool.Begin(ctx, &querypb.ExecuteOptions{TransactionIsolation: querypb.ExecuteOptions_READ_COMMITTED}, false, 0, nil, nil)
+ c2, _, _, err := txPool.Begin(ctx, &querypb.ExecuteOptions{TransactionIsolation: querypb.ExecuteOptions_READ_COMMITTED}, false, 0, nil)
require.NoError(t, err)
c2.Release(tx.TxClose)
@@ -172,7 +172,7 @@ func TestTxPoolAutocommit(t *testing.T) {
// to mysql.
// This test is meaningful because if txPool.Begin were to send a BEGIN statement to the connection, it will fatal
// because is not in the list of expected queries (i.e db.AddQuery hasn't been called).
- conn1, _, _, err := txPool.Begin(ctx, &querypb.ExecuteOptions{TransactionIsolation: querypb.ExecuteOptions_AUTOCOMMIT}, false, 0, nil, nil)
+ conn1, _, _, err := txPool.Begin(ctx, &querypb.ExecuteOptions{TransactionIsolation: querypb.ExecuteOptions_AUTOCOMMIT}, false, 0, nil)
require.NoError(t, err)
// run a query to see it in the query log
@@ -204,7 +204,7 @@ func TestTxPoolBeginWithPoolConnectionError_Errno2006_Transient(t *testing.T) {
err := db.WaitForClose(2 * time.Second)
require.NoError(t, err)
- txConn, _, _, err := txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ txConn, _, _, err := txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil)
require.NoError(t, err, "Begin should have succeeded after the retry in DBConn.Exec()")
txConn.Release(tx.TxCommit)
}
@@ -225,7 +225,7 @@ func primeTxPoolWithConnection(t *testing.T, ctx context.Context) (*fakesqldb.DB
// reused by subsequent transactions.
db.AddQuery("begin", &sqltypes.Result{})
db.AddQuery("rollback", &sqltypes.Result{})
- txConn, _, _, err := txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ txConn, _, _, err := txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil)
require.NoError(t, err)
txConn.Release(tx.TxCommit)
@@ -248,7 +248,7 @@ func TestTxPoolBeginWithError(t *testing.T) {
}
ctxWithCallerID := callerid.NewContext(ctx, ef, im)
- _, _, _, err := txPool.Begin(ctxWithCallerID, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ _, _, _, err := txPool.Begin(ctxWithCallerID, &querypb.ExecuteOptions{}, false, 0, nil)
require.Error(t, err)
require.Contains(t, err.Error(), "error: rejected")
require.Equal(t, vtrpcpb.Code_UNKNOWN, vterrors.Code(err), "wrong error code for Begin error")
@@ -270,19 +270,6 @@ func TestTxPoolBeginWithError(t *testing.T) {
}, limiter.Actions())
}
-func TestTxPoolBeginWithPreQueryError(t *testing.T) {
- ctx, cancel := context.WithCancel(context.Background())
- defer cancel()
-
- db, txPool, _, closer := setup(t)
- defer closer()
- db.AddRejectedQuery("pre_query", errRejected)
- _, _, _, err := txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, []string{"pre_query"}, nil)
- require.Error(t, err)
- require.Contains(t, err.Error(), "error: rejected")
- require.Equal(t, vtrpcpb.Code_UNKNOWN, vterrors.Code(err), "wrong error code for Begin error")
-}
-
func TestTxPoolCancelledContextError(t *testing.T) {
// given
db, txPool, _, closer := setup(t)
@@ -291,7 +278,7 @@ func TestTxPoolCancelledContextError(t *testing.T) {
cancel()
// when
- _, _, _, err := txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ _, _, _, err := txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil)
// then
require.Error(t, err)
@@ -312,12 +299,12 @@ func TestTxPoolWaitTimeoutError(t *testing.T) {
defer closer()
// lock the only connection in the pool.
- conn, _, _, err := txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ conn, _, _, err := txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil)
require.NoError(t, err)
defer conn.Unlock()
// try locking one more connection.
- _, _, _, err = txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ _, _, _, err = txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil)
// then
require.Error(t, err)
@@ -337,7 +324,7 @@ func TestTxPoolRollbackFailIsPassedThrough(t *testing.T) {
defer closer()
db.AddRejectedQuery("rollback", errRejected)
- conn1, _, _, err := txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ conn1, _, _, err := txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil)
require.NoError(t, err)
_, err = conn1.Exec(ctx, sql, 1, true)
@@ -357,7 +344,7 @@ func TestTxPoolGetConnRecentlyRemovedTransaction(t *testing.T) {
db, txPool, _, _ := setup(t)
defer db.Close()
- conn1, _, _, _ := txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ conn1, _, _, _ := txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil)
id := conn1.ReservedID()
conn1.Unlock()
txPool.Close()
@@ -380,7 +367,7 @@ func TestTxPoolGetConnRecentlyRemovedTransaction(t *testing.T) {
params := dbconfigs.New(db.ConnParams())
txPool.Open(params, params, params)
- conn1, _, _, _ = txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ conn1, _, _, _ = txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil)
id = conn1.ReservedID()
_, err := txPool.Commit(ctx, conn1)
require.NoError(t, err)
@@ -396,7 +383,7 @@ func TestTxPoolGetConnRecentlyRemovedTransaction(t *testing.T) {
txPool.Open(params, params, params)
defer txPool.Close()
- conn1, _, _, err = txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ conn1, _, _, err = txPool.Begin(ctx, &querypb.ExecuteOptions{}, false, 0, nil)
require.NoError(t, err, "unable to start transaction: %v", err)
conn1.Unlock()
id = conn1.ReservedID()
@@ -412,7 +399,7 @@ func TestTxPoolCloseKillsStrayTransactions(t *testing.T) {
startingStray := txPool.env.Stats().InternalErrors.Counts()["StrayTransactions"]
// Start stray transaction.
- conn, _, _, err := txPool.Begin(context.Background(), &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ conn, _, _, err := txPool.Begin(context.Background(), &querypb.ExecuteOptions{}, false, 0, nil)
require.NoError(t, err)
conn.Unlock()
@@ -443,7 +430,7 @@ func TestTxTimeoutKillsTransactions(t *testing.T) {
ctxWithCallerID := callerid.NewContext(ctx, ef, im)
// Start transaction.
- conn, _, _, err := txPool.Begin(ctxWithCallerID, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ conn, _, _, err := txPool.Begin(ctxWithCallerID, &querypb.ExecuteOptions{}, false, 0, nil)
require.NoError(t, err)
conn.Unlock()
@@ -491,7 +478,7 @@ func TestTxTimeoutDoesNotKillShortLivedTransactions(t *testing.T) {
ctxWithCallerID := callerid.NewContext(ctx, ef, im)
// Start transaction.
- conn, _, _, err := txPool.Begin(ctxWithCallerID, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ conn, _, _, err := txPool.Begin(ctxWithCallerID, &querypb.ExecuteOptions{}, false, 0, nil)
require.NoError(t, err)
conn.Unlock()
@@ -526,7 +513,7 @@ func TestTxTimeoutKillsOlapTransactions(t *testing.T) {
// Start transaction.
conn, _, _, err := txPool.Begin(ctxWithCallerID, &querypb.ExecuteOptions{
Workload: querypb.ExecuteOptions_OLAP,
- }, false, 0, nil, nil)
+ }, false, 0, nil)
require.NoError(t, err)
conn.Unlock()
@@ -561,11 +548,11 @@ func TestTxTimeoutNotEnforcedForZeroLengthTimeouts(t *testing.T) {
ctxWithCallerID := callerid.NewContext(ctx, ef, im)
// Start transactions.
- conn0, _, _, err := txPool.Begin(ctxWithCallerID, &querypb.ExecuteOptions{}, false, 0, nil, nil)
+ conn0, _, _, err := txPool.Begin(ctxWithCallerID, &querypb.ExecuteOptions{}, false, 0, nil)
require.NoError(t, err)
conn1, _, _, err := txPool.Begin(ctxWithCallerID, &querypb.ExecuteOptions{
Workload: querypb.ExecuteOptions_OLAP,
- }, false, 0, nil, nil)
+ }, false, 0, nil)
require.NoError(t, err)
conn0.Unlock()
conn1.Unlock()
@@ -606,7 +593,7 @@ func TestTxTimeoutReservedConn(t *testing.T) {
// Start OLAP transaction and return it to pool right away.
conn0, _, _, err := txPool.Begin(ctxWithCallerID, &querypb.ExecuteOptions{
Workload: querypb.ExecuteOptions_OLAP,
- }, false, 0, nil, nil)
+ }, false, 0, nil)
require.NoError(t, err)
// Taint the connection.
conn0.Taint(ctxWithCallerID, nil)
@@ -648,14 +635,14 @@ func TestTxTimeoutReusedReservedConn(t *testing.T) {
// Start OLAP transaction and return it to pool right away.
conn0, _, _, err := txPool.Begin(ctxWithCallerID, &querypb.ExecuteOptions{
Workload: querypb.ExecuteOptions_OLAP,
- }, false, 0, nil, nil)
+ }, false, 0, nil)
require.NoError(t, err)
// Taint the connection.
conn0.Taint(ctxWithCallerID, nil)
conn0.Unlock()
// Reuse underlying connection in an OLTP transaction.
- conn1, _, _, err := txPool.Begin(ctxWithCallerID, &querypb.ExecuteOptions{}, false, conn0.ReservedID(), nil, nil)
+ conn1, _, _, err := txPool.Begin(ctxWithCallerID, &querypb.ExecuteOptions{}, false, conn0.ReservedID(), nil)
require.NoError(t, err)
require.Equal(t, conn1.ReservedID(), conn0.ReservedID())
conn1.Unlock()
@@ -714,11 +701,11 @@ func TestTxPoolBeginStatements(t *testing.T) {
expBeginSQL: "set transaction isolation level serializable; start transaction read only",
}, {
txIsolationLevel: querypb.ExecuteOptions_CONSISTENT_SNAPSHOT_READ_ONLY,
- expBeginSQL: "set session session_track_gtids = START_GTID; set transaction isolation level repeatable read; start transaction with consistent snapshot, read only",
+ expBeginSQL: "set transaction isolation level repeatable read; start transaction with consistent snapshot, read only",
}, {
txIsolationLevel: querypb.ExecuteOptions_CONSISTENT_SNAPSHOT_READ_ONLY,
readOnly: true,
- expBeginSQL: "set session session_track_gtids = START_GTID; set transaction isolation level repeatable read; start transaction with consistent snapshot, read only",
+ expBeginSQL: "set transaction isolation level repeatable read; start transaction with consistent snapshot, read only",
}, {
txIsolationLevel: querypb.ExecuteOptions_AUTOCOMMIT,
expBeginSQL: "",
@@ -786,7 +773,7 @@ func TestTxPoolBeginStatements(t *testing.T) {
TransactionIsolation: tc.txIsolationLevel,
TransactionAccessMode: tc.txAccessModes,
}
- conn, beginSQL, _, err := txPool.Begin(ctx, options, tc.readOnly, 0, nil, nil)
+ conn, beginSQL, _, err := txPool.Begin(ctx, options, tc.readOnly, 0, nil)
if tc.expErr != "" {
require.Error(t, err)
require.Contains(t, err.Error(), tc.expErr)
diff --git a/go/vt/vttablet/tabletserver/vstreamer/helper_event_test.go b/go/vt/vttablet/tabletserver/vstreamer/helper_event_test.go
index c52e81564c0..675677bf820 100644
--- a/go/vt/vttablet/tabletserver/vstreamer/helper_event_test.go
+++ b/go/vt/vttablet/tabletserver/vstreamer/helper_event_test.go
@@ -142,6 +142,11 @@ type TestQuery struct {
type TestRowChange struct {
before []string
after []string
+
+ // If you need to customize the image you can use the raw types.
+ beforeRaw *query.Row
+ afterRaw *query.Row
+ dataColumnsRaw *binlogdatapb.RowChange_Bitmap
}
// TestRowEventSpec is used for defining a custom row event.
@@ -161,7 +166,12 @@ func (s *TestRowEventSpec) String() string {
if len(s.changes) > 0 {
for _, c := range s.changes {
rowChange := binlogdatapb.RowChange{}
- if len(c.before) > 0 {
+ if c.dataColumnsRaw != nil {
+ rowChange.DataColumns = c.dataColumnsRaw
+ }
+ if c.beforeRaw != nil {
+ rowChange.Before = c.beforeRaw
+ } else if len(c.before) > 0 {
rowChange.Before = &query.Row{}
for _, val := range c.before {
if val == sqltypes.NullStr {
@@ -171,7 +181,9 @@ func (s *TestRowEventSpec) String() string {
rowChange.Before.Values = append(rowChange.Before.Values, []byte(val)...)
}
}
- if len(c.after) > 0 {
+ if c.afterRaw != nil {
+ rowChange.After = c.afterRaw
+ } else if len(c.after) > 0 {
rowChange.After = &query.Row{}
for i, val := range c.after {
if val == sqltypes.NullStr {
@@ -354,6 +366,7 @@ func (ts *TestSpec) getBindVarsForUpdate(stmt sqlparser.Statement) (string, map[
require.True(ts.t, ok, "field event for table %s not found", table)
index := int64(0)
state := ts.getCurrentState(table)
+ require.NotNil(ts.t, state)
for i, col := range fe.cols {
bv[col.name] = string(state.Values[index : index+state.Lengths[i]])
index += state.Lengths[i]
diff --git a/go/vt/vttablet/tabletserver/vstreamer/planbuilder.go b/go/vt/vttablet/tabletserver/vstreamer/planbuilder.go
index 9bbc98ca2bd..e5115afe6d3 100644
--- a/go/vt/vttablet/tabletserver/vstreamer/planbuilder.go
+++ b/go/vt/vttablet/tabletserver/vstreamer/planbuilder.go
@@ -89,6 +89,8 @@ const (
NotEqual
// IsNotNull is used to filter a column if it is NULL
IsNotNull
+ // In is used to filter a comparable column if equals any of the values from a specific tuple
+ In
)
// Filter contains opcodes for filtering.
@@ -97,6 +99,9 @@ type Filter struct {
ColNum int
Value sqltypes.Value
+ // Values will be used to store tuple/list values.
+ Values []sqltypes.Value
+
// Parameters for VindexMatch.
// Vindex, VindexColumns and KeyRange, if set, will be used
// to filter the row.
@@ -166,6 +171,8 @@ func getOpcode(comparison *sqlparser.ComparisonExpr) (Opcode, error) {
opcode = GreaterThanEqual
case sqlparser.NotEqualOp:
opcode = NotEqual
+ case sqlparser.InOp:
+ opcode = In
default:
return -1, fmt.Errorf("comparison operator %s not supported", comparison.Operator.ToString())
}
@@ -238,6 +245,24 @@ func (plan *Plan) filter(values, result []sqltypes.Value, charsets []collations.
if values[filter.ColNum].IsNull() {
return false, nil
}
+ case In:
+ if filter.Values == nil {
+ return false, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "unexpected empty filter values when performing IN operator")
+ }
+ found := false
+ for _, filterValue := range filter.Values {
+ match, err := compare(Equal, values[filter.ColNum], filterValue, plan.env.CollationEnv(), charsets[filter.ColNum])
+ if err != nil {
+ return false, err
+ }
+ if match {
+ found = true
+ break
+ }
+ }
+ if !found {
+ return false, nil
+ }
default:
match, err := compare(filter.Opcode, values[filter.ColNum], filter.Value, plan.env.CollationEnv(), charsets[filter.ColNum])
if err != nil {
@@ -514,6 +539,27 @@ func (plan *Plan) getColumnFuncExpr(columnName string) *sqlparser.FuncExpr {
return nil
}
+func (plan *Plan) appendTupleFilter(values sqlparser.ValTuple, opcode Opcode, colnum int) error {
+ pv, err := evalengine.Translate(values, &evalengine.Config{
+ Collation: plan.env.CollationEnv().DefaultConnectionCharset(),
+ Environment: plan.env,
+ })
+ if err != nil {
+ return err
+ }
+ env := evalengine.EmptyExpressionEnv(plan.env)
+ resolved, err := env.Evaluate(pv)
+ if err != nil {
+ return err
+ }
+ plan.Filters = append(plan.Filters, Filter{
+ Opcode: opcode,
+ ColNum: colnum,
+ Values: resolved.TupleValues(),
+ })
+ return nil
+}
+
func (plan *Plan) analyzeWhere(vschema *localVSchema, where *sqlparser.Where) error {
if where == nil {
return nil
@@ -537,6 +583,20 @@ func (plan *Plan) analyzeWhere(vschema *localVSchema, where *sqlparser.Where) er
if err != nil {
return err
}
+ // The Right Expr is typically expected to be a Literal value,
+ // except for the IN operator, where a Tuple value is expected.
+ // Handle the IN operator case first.
+ if opcode == In {
+ values, ok := expr.Right.(sqlparser.ValTuple)
+ if !ok {
+ return fmt.Errorf("unexpected: %v", sqlparser.String(expr))
+ }
+ err := plan.appendTupleFilter(values, opcode, colnum)
+ if err != nil {
+ return err
+ }
+ continue
+ }
val, ok := expr.Right.(*sqlparser.Literal)
if !ok {
return fmt.Errorf("unexpected: %v", sqlparser.String(expr))
diff --git a/go/vt/vttablet/tabletserver/vstreamer/planbuilder_test.go b/go/vt/vttablet/tabletserver/vstreamer/planbuilder_test.go
index ba345b2a00b..aba74368802 100644
--- a/go/vt/vttablet/tabletserver/vstreamer/planbuilder_test.go
+++ b/go/vt/vttablet/tabletserver/vstreamer/planbuilder_test.go
@@ -710,9 +710,15 @@ func TestPlanBuilderFilterComparison(t *testing.T) {
outFilters: []Filter{{Opcode: LessThan, ColNum: 0, Value: sqltypes.NewInt64(2)},
{Opcode: LessThanEqual, ColNum: 1, Value: sqltypes.NewVarChar("xyz")},
},
+ }, {
+ name: "in-operator",
+ inFilter: "select * from t1 where id in (1, 2)",
+ outFilters: []Filter{
+ {Opcode: In, ColNum: 0, Values: []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(2)}},
+ },
}, {
name: "vindex-and-operators",
- inFilter: "select * from t1 where in_keyrange(id, 'hash', '-80') and id = 2 and val <> 'xyz'",
+ inFilter: "select * from t1 where in_keyrange(id, 'hash', '-80') and id = 2 and val <> 'xyz' and id in (100, 30)",
outFilters: []Filter{
{
Opcode: VindexMatch,
@@ -727,6 +733,7 @@ func TestPlanBuilderFilterComparison(t *testing.T) {
},
{Opcode: Equal, ColNum: 0, Value: sqltypes.NewInt64(2)},
{Opcode: NotEqual, ColNum: 1, Value: sqltypes.NewVarChar("xyz")},
+ {Opcode: In, ColNum: 0, Values: []sqltypes.Value{sqltypes.NewInt64(100), sqltypes.NewInt64(30)}},
},
}}
diff --git a/go/vt/vttablet/tabletserver/vstreamer/rowstreamer_test.go b/go/vt/vttablet/tabletserver/vstreamer/rowstreamer_test.go
index 2c75c4a73b0..47db5fb839a 100644
--- a/go/vt/vttablet/tabletserver/vstreamer/rowstreamer_test.go
+++ b/go/vt/vttablet/tabletserver/vstreamer/rowstreamer_test.go
@@ -202,7 +202,7 @@ func TestStreamRowsScan(t *testing.T) {
`fields:{name:"id" type:INT32 table:"t3" org_table:"t3" database:"vttest" org_name:"id" column_length:11 charset:63 column_type:"int(11)"} fields:{name:"val" type:VARBINARY table:"t3" org_table:"t3" database:"vttest" org_name:"val" column_length:128 charset:63 column_type:"varbinary(128)"} pkfields:{name:"id" type:INT32 charset:63} pkfields:{name:"val" type:VARBINARY charset:63}`,
`rows:{lengths:1 lengths:3 values:"2bbb"} lastpk:{lengths:1 lengths:3 values:"2bbb"}`,
}
- wantQuery = "select /*+ MAX_EXECUTION_TIME(3600000) */ id, val from t3 where (id = 1 and val > 'aaa') or (id > 1) order by id, val"
+ wantQuery = "select /*+ MAX_EXECUTION_TIME(3600000) */ id, val from t3 where (id = 1 and val > _binary'aaa') or (id > 1) order by id, val"
checkStream(t, "select * from t3", []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewVarBinary("aaa")}, wantQuery, wantStream)
// t4: all rows
diff --git a/go/vt/vttablet/tabletserver/vstreamer/snapshot_conn.go b/go/vt/vttablet/tabletserver/vstreamer/snapshot_conn.go
index ec326cc4159..ee141ce9859 100644
--- a/go/vt/vttablet/tabletserver/vstreamer/snapshot_conn.go
+++ b/go/vt/vttablet/tabletserver/vstreamer/snapshot_conn.go
@@ -132,29 +132,6 @@ func (conn *snapshotConn) startSnapshot(ctx context.Context, table string) (gtid
return replication.EncodePosition(mpos), nil
}
-// startSnapshotWithConsistentGTID performs the snapshotting without locking tables. This assumes
-// session_track_gtids = START_GTID, which is a contribution to MySQL and is not in vanilla MySQL at the
-// time of this writing.
-func (conn *snapshotConn) startSnapshotWithConsistentGTID(ctx context.Context) (gtid string, err error) {
- if _, err := conn.ExecuteFetch("set transaction isolation level repeatable read", 1, false); err != nil {
- return "", err
- }
- result, err := conn.ExecuteFetch("start transaction with consistent snapshot, read only", 1, false)
- if err != nil {
- return "", err
- }
- // The "session_track_gtids = START_GTID" patch is only applicable to MySQL56 GTID, which is
- // why we hardcode the position as mysql.Mysql56FlavorID
- mpos, err := replication.ParsePosition(replication.Mysql56FlavorID, result.SessionStateChanges)
- if err != nil {
- return "", err
- }
- if _, err := conn.ExecuteFetch("set @@session.time_zone = '+00:00'", 1, false); err != nil {
- return "", err
- }
- return replication.EncodePosition(mpos), nil
-}
-
// Close rolls back any open transactions and closes the connection.
func (conn *snapshotConn) Close() {
_, _ = conn.ExecuteFetch("rollback", 1, false)
diff --git a/go/vt/vttablet/tabletserver/vstreamer/vstreamer.go b/go/vt/vttablet/tabletserver/vstreamer/vstreamer.go
index e7453b2b70f..59db723ff2b 100644
--- a/go/vt/vttablet/tabletserver/vstreamer/vstreamer.go
+++ b/go/vt/vttablet/tabletserver/vstreamer/vstreamer.go
@@ -37,6 +37,7 @@ import (
"vitess.io/vitess/go/vt/logutil"
vtschema "vitess.io/vitess/go/vt/schema"
"vitess.io/vitess/go/vt/sqlparser"
+ "vitess.io/vitess/go/vt/vtenv"
"vitess.io/vitess/go/vt/vterrors"
vttablet "vitess.io/vitess/go/vt/vttablet/common"
"vitess.io/vitess/go/vt/vttablet/tabletserver/schema"
@@ -374,7 +375,7 @@ func (vs *vstreamer) parseEvents(ctx context.Context, events <-chan mysql.Binlog
}
return fmt.Errorf("unexpected server EOF")
}
- vevents, err := vs.parseEvent(ev)
+ vevents, err := vs.parseEvent(ev, bufferAndTransmit)
if err != nil {
vs.vse.errorCounts.Add("ParseEvent", 1)
return err
@@ -415,7 +416,11 @@ func (vs *vstreamer) parseEvents(ctx context.Context, events <-chan mysql.Binlog
}
// parseEvent parses an event from the binlog and converts it to a list of VEvents.
-func (vs *vstreamer) parseEvent(ev mysql.BinlogEvent) ([]*binlogdatapb.VEvent, error) {
+// The bufferAndTransmit function must be passed if the event is a TransactionPayloadEvent
+// as for larger payloads (> ZstdInMemoryDecompressorMaxSize) the internal events need
+// to be streamed directly here in order to avoid holding the entire payload's contents,
+// which can be 10s or even 100s of GiBs, all in memory.
+func (vs *vstreamer) parseEvent(ev mysql.BinlogEvent, bufferAndTransmit func(vevent *binlogdatapb.VEvent) error) ([]*binlogdatapb.VEvent, error) {
if !ev.IsValid() {
return nil, fmt.Errorf("can't parse binlog event: invalid data: %#v", ev)
}
@@ -671,11 +676,31 @@ func (vs *vstreamer) parseEvent(ev mysql.BinlogEvent) ([]*binlogdatapb.VEvent, e
}
return nil, err
}
- tpvevents, err := vs.parseEvent(tpevent)
+ tpvevents, err := vs.parseEvent(tpevent, nil) // Parse the internal event
if err != nil {
return nil, vterrors.Wrap(err, "failed to parse transaction payload's internal event")
}
- vevents = append(vevents, tpvevents...)
+ if tp.StreamingContents {
+ // Transmit each internal event individually to avoid buffering
+ // the large transaction's entire payload of events in memory, as
+ // the uncompressed size can be 10s or even 100s of GiBs in size.
+ if bufferAndTransmit == nil {
+ return nil, vterrors.New(vtrpcpb.Code_INTERNAL, "[bug] cannot stream compressed transaction payload's internal events as no bufferAndTransmit function was provided")
+ }
+ for _, tpvevent := range tpvevents {
+ tpvevent.Timestamp = int64(ev.Timestamp())
+ tpvevent.CurrentTime = time.Now().UnixNano()
+ if err := bufferAndTransmit(tpvevent); err != nil {
+ if err == io.EOF {
+ return nil, nil
+ }
+ vs.vse.errorCounts.Add("TransactionPayloadBufferAndTransmit", 1)
+ return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "error sending compressed transaction payload's internal event: %v", err)
+ }
+ }
+ } else { // Process the payload's internal events all at once
+ vevents = append(vevents, tpvevents...)
+ }
}
vs.vse.vstreamerCompressedTransactionsDecoded.Add(1)
}
@@ -783,7 +808,7 @@ func (vs *vstreamer) buildTablePlan(id uint64, tm *mysql.TableMap) (*binlogdatap
vs.plans[id] = nil
return nil, nil
}
- if err := addEnumAndSetMappingstoPlan(plan, cols, tm.Metadata); err != nil {
+ if err := addEnumAndSetMappingstoPlan(vs.se.Environment(), plan, cols, tm.Metadata); err != nil {
return nil, vterrors.Wrapf(err, "failed to build ENUM and SET column integer to string mappings")
}
vs.plans[id] = &streamerPlan{
@@ -1097,13 +1122,13 @@ func (vs *vstreamer) extractRowAndFilter(plan *streamerPlan, data []byte, dataCo
// Convert the integer values in the binlog event for any SET and ENUM fields into their
// string representations.
if plan.Table.Fields[colNum].Type == querypb.Type_ENUM || mysqlType == mysqlbinlog.TypeEnum {
- value, err = buildEnumStringValue(plan, colNum, value)
+ value, err = buildEnumStringValue(vs.se.Environment(), plan, colNum, value)
if err != nil {
return false, nil, false, vterrors.Wrapf(err, "failed to perform ENUM column integer to string value mapping")
}
}
if plan.Table.Fields[colNum].Type == querypb.Type_SET || mysqlType == mysqlbinlog.TypeSet {
- value, err = buildSetStringValue(plan, colNum, value)
+ value, err = buildSetStringValue(vs.se.Environment(), plan, colNum, value)
if err != nil {
return false, nil, false, vterrors.Wrapf(err, "failed to perform SET column integer to string value mapping")
}
@@ -1120,7 +1145,7 @@ func (vs *vstreamer) extractRowAndFilter(plan *streamerPlan, data []byte, dataCo
}
// addEnumAndSetMappingstoPlan sets up any necessary ENUM and SET integer to string mappings.
-func addEnumAndSetMappingstoPlan(plan *Plan, cols []*querypb.Field, metadata []uint16) error {
+func addEnumAndSetMappingstoPlan(env *vtenv.Environment, plan *Plan, cols []*querypb.Field, metadata []uint16) error {
plan.EnumSetValuesMap = make(map[int]map[int]string)
for i, col := range cols {
// If the column is a CHAR based type with a binary collation (e.g. utf8mb4_bin) then
@@ -1139,21 +1164,25 @@ func addEnumAndSetMappingstoPlan(plan *Plan, cols []*querypb.Field, metadata []u
return fmt.Errorf("enum or set column %s does not have valid string values: %s",
col.Name, col.ColumnType)
}
- plan.EnumSetValuesMap[i] = vtschema.ParseEnumOrSetTokensMap(col.ColumnType[begin+1 : end])
+ var err error
+ plan.EnumSetValuesMap[i], err = vtschema.ParseEnumOrSetTokensMap(env, col.ColumnType[begin+1:end])
+ if err != nil {
+ return err
+ }
}
}
return nil
}
// buildEnumStringValue takes the integer value of an ENUM column and returns the string value.
-func buildEnumStringValue(plan *streamerPlan, colNum int, value sqltypes.Value) (sqltypes.Value, error) {
+func buildEnumStringValue(env *vtenv.Environment, plan *streamerPlan, colNum int, value sqltypes.Value) (sqltypes.Value, error) {
if value.IsNull() { // No work is needed
return value, nil
}
// Add the mappings just-in-time in case we haven't properly received and processed a
// table map event to initialize it.
if plan.EnumSetValuesMap == nil {
- if err := addEnumAndSetMappingstoPlan(plan.Plan, plan.Table.Fields, plan.TableMap.Metadata); err != nil {
+ if err := addEnumAndSetMappingstoPlan(env, plan.Plan, plan.Table.Fields, plan.TableMap.Metadata); err != nil {
return sqltypes.Value{}, err
}
}
@@ -1181,14 +1210,14 @@ func buildEnumStringValue(plan *streamerPlan, colNum int, value sqltypes.Value)
}
// buildSetStringValue takes the integer value of a SET column and returns the string value.
-func buildSetStringValue(plan *streamerPlan, colNum int, value sqltypes.Value) (sqltypes.Value, error) {
+func buildSetStringValue(env *vtenv.Environment, plan *streamerPlan, colNum int, value sqltypes.Value) (sqltypes.Value, error) {
if value.IsNull() { // No work is needed
return value, nil
}
// Add the mappings just-in-time in case we haven't properly received and processed a
// table map event to initialize it.
if plan.EnumSetValuesMap == nil {
- if err := addEnumAndSetMappingstoPlan(plan.Plan, plan.Table.Fields, plan.TableMap.Metadata); err != nil {
+ if err := addEnumAndSetMappingstoPlan(env, plan.Plan, plan.Table.Fields, plan.TableMap.Metadata); err != nil {
return sqltypes.Value{}, err
}
}
diff --git a/go/vt/vttablet/tabletserver/vstreamer/vstreamer_test.go b/go/vt/vttablet/tabletserver/vstreamer/vstreamer_test.go
index c265fb45b85..5282b5f372d 100644
--- a/go/vt/vttablet/tabletserver/vstreamer/vstreamer_test.go
+++ b/go/vt/vttablet/tabletserver/vstreamer/vstreamer_test.go
@@ -41,6 +41,7 @@ import (
"vitess.io/vitess/go/vt/vttablet/tabletserver/vstreamer/testenv"
binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata"
+ querypb "vitess.io/vitess/go/vt/proto/query"
)
type testcase struct {
@@ -87,6 +88,9 @@ func TestNoBlob(t *testing.T) {
"create table t2(id int, txt text, val varchar(4), unique key(id, val))",
// t3 has a text column and a primary key. The text column will not be in update row events.
"create table t3(id int, txt text, val varchar(4), primary key(id))",
+ // t4 has a blob column and a primary key, along with a generated virtual column. The blob
+ // column will not be in update row events.
+ "create table t4(id int, cOl varbinary(8) generated always as (concat(val, 'tsty')) virtual, blb blob, val varbinary(4), primary key(id))",
},
options: &TestSpecOptions{
noblob: true,
@@ -94,6 +98,18 @@ func TestNoBlob(t *testing.T) {
}
defer ts.Close()
ts.Init()
+
+ insertGeneratedFE := &TestFieldEvent{
+ table: "t4",
+ db: testenv.DBName,
+ cols: []*TestColumn{
+ {name: "id", dataType: "INT32", colType: "int(11)", len: 11, collationID: 63},
+ {name: "cOl", dataType: "VARBINARY", colType: "varbinary(8)", len: 8, collationID: 63},
+ {name: "blb", dataType: "BLOB", colType: "blob", len: 65535, collationID: 63},
+ {name: "val", dataType: "VARBINARY", colType: "varbinary(4)", len: 4, collationID: 63},
+ },
+ }
+
ts.tests = [][]*TestQuery{{
{"begin", nil},
{"insert into t1 values (1, 'blob1', 'aaa')", nil},
@@ -107,6 +123,29 @@ func TestNoBlob(t *testing.T) {
{"insert into t3 values (1, 'text1', 'aaa')", nil},
{"update t3 set val = 'bbb'", nil},
{"commit", nil},
+ }, {{"begin", nil},
+ {"insert into t4 (id, blb, val) values (1, 'text1', 'aaa')", []TestRowEvent{
+ {event: insertGeneratedFE.String()},
+ {spec: &TestRowEventSpec{table: "t4", changes: []TestRowChange{{after: []string{"1", "aaatsty", "text1", "aaa"}}}}},
+ }},
+ {"update t4 set val = 'bbb'", []TestRowEvent{
+ // The blob column is not in the update row event's before or after image.
+ {spec: &TestRowEventSpec{table: "t4", changes: []TestRowChange{{
+ beforeRaw: &querypb.Row{
+ Lengths: []int64{1, 7, -1, 3}, // -1 for the 3rd column / blob field, as it's not present
+ Values: []byte("1aaatstyaaa"),
+ },
+ afterRaw: &querypb.Row{
+ Lengths: []int64{1, 7, -1, 3}, // -1 for the 3rd column / blob field, as it's not present
+ Values: []byte("1bbbtstybbb"),
+ },
+ dataColumnsRaw: &binlogdatapb.RowChange_Bitmap{
+ Count: 4,
+ Cols: []byte{0x0b}, // Columns bitmap of 00001011 as the third column/bit position representing the blob column has no data
+ },
+ }}}},
+ }},
+ {"commit", nil},
}}
ts.Run()
}
@@ -1927,7 +1966,7 @@ func TestFilteredMultipleWhere(t *testing.T) {
filter: &binlogdatapb.Filter{
Rules: []*binlogdatapb.Rule{{
Match: "t1",
- Filter: "select id1, val from t1 where in_keyrange('-80') and id2 = 200 and id3 = 1000 and val = 'newton'",
+ Filter: "select id1, val from t1 where in_keyrange('-80') and id2 = 200 and id3 = 1000 and val = 'newton' and id1 in (1, 2, 129)",
}},
},
customFieldEvents: true,
@@ -1949,9 +1988,7 @@ func TestFilteredMultipleWhere(t *testing.T) {
{spec: &TestRowEventSpec{table: "t1", changes: []TestRowChange{{after: []string{"2", "newton"}}}}},
}},
{"insert into t1 values (3, 100, 2000, 'kepler')", noEvents},
- {"insert into t1 values (128, 200, 1000, 'newton')", []TestRowEvent{
- {spec: &TestRowEventSpec{table: "t1", changes: []TestRowChange{{after: []string{"128", "newton"}}}}},
- }},
+ {"insert into t1 values (128, 200, 1000, 'newton')", noEvents},
{"insert into t1 values (5, 200, 2000, 'kepler')", noEvents},
{"insert into t1 values (129, 200, 1000, 'kepler')", noEvents},
{"commit", nil},
@@ -2041,3 +2078,33 @@ func TestGeneratedInvisiblePrimaryKey(t *testing.T) {
}}
ts.Run()
}
+
+func TestFilteredInOperator(t *testing.T) {
+ ts := &TestSpec{
+ t: t,
+ ddls: []string{
+ "create table t1(id1 int, id2 int, val varbinary(128), primary key(id1))",
+ },
+ options: &TestSpecOptions{
+ filter: &binlogdatapb.Filter{
+ Rules: []*binlogdatapb.Rule{{
+ Match: "t1",
+ Filter: "select id1, val from t1 where val in ('eee', 'bbb', 'ddd') and id1 in (4, 5)",
+ }},
+ },
+ },
+ }
+ defer ts.Close()
+ ts.Init()
+ ts.fieldEvents["t1"].cols[1].skip = true
+ ts.tests = [][]*TestQuery{{
+ {"begin", nil},
+ {"insert into t1 values (1, 100, 'aaa')", noEvents},
+ {"insert into t1 values (2, 200, 'bbb')", noEvents},
+ {"insert into t1 values (3, 100, 'ccc')", noEvents},
+ {"insert into t1 values (4, 200, 'ddd')", nil},
+ {"insert into t1 values (5, 200, 'eee')", nil},
+ {"commit", nil},
+ }}
+ ts.Run()
+}
diff --git a/go/vt/vttablet/tabletservermock/controller.go b/go/vt/vttablet/tabletservermock/controller.go
index 9e97c033776..9d570b8f6c7 100644
--- a/go/vt/vttablet/tabletservermock/controller.go
+++ b/go/vt/vttablet/tabletservermock/controller.go
@@ -24,6 +24,7 @@ import (
"vitess.io/vitess/go/vt/dbconfigs"
"vitess.io/vitess/go/vt/mysqlctl"
+ "vitess.io/vitess/go/vt/proto/tabletmanagerdata"
"vitess.io/vitess/go/vt/servenv"
"vitess.io/vitess/go/vt/topo"
"vitess.io/vitess/go/vt/vttablet/queryservice"
@@ -249,6 +250,12 @@ func (tqsc *Controller) ReadTransaction(ctx context.Context, target *querypb.Tar
return nil, nil
}
+// GetTransactionInfo is part of the tabletserver.Controller interface
+func (tqsc *Controller) GetTransactionInfo(ctx context.Context, target *querypb.Target, dtid string) (*tabletmanagerdata.GetTransactionInfoResponse, error) {
+ tqsc.MethodCalled["GetTransactionInfo"] = true
+ return nil, nil
+}
+
// ConcludeTransaction is part of the tabletserver.Controller interface
func (tqsc *Controller) ConcludeTransaction(context.Context, *querypb.Target, string) error {
tqsc.MethodCalled["ConcludeTransaction"] = true
diff --git a/go/vt/vttablet/tmclient/rpc_client_api.go b/go/vt/vttablet/tmclient/rpc_client_api.go
index 2a22a9a90a7..2b5cc967e9f 100644
--- a/go/vt/vttablet/tmclient/rpc_client_api.go
+++ b/go/vt/vttablet/tmclient/rpc_client_api.go
@@ -91,6 +91,9 @@ type TabletManagerClient interface {
// SetReadWrite makes the mysql instance read-write
SetReadWrite(ctx context.Context, tablet *topodatapb.Tablet) error
+ // ChangeTags asks the remote tablet to change its tags
+ ChangeTags(ctx context.Context, tablet *topodatapb.Tablet, tabletTags map[string]string, replace bool) (*tabletmanagerdatapb.ChangeTagsResponse, error)
+
// ChangeType asks the remote tablet to change its type
ChangeType(ctx context.Context, tablet *topodatapb.Tablet, dbType topodatapb.TabletType, semiSync bool) error
@@ -151,11 +154,13 @@ type TabletManagerClient interface {
//
// GetUnresolvedTransactions returns the list of unresolved transactions for the tablet.
- GetUnresolvedTransactions(ctx context.Context, tablet *topodatapb.Tablet) ([]*querypb.TransactionMetadata, error)
+ GetUnresolvedTransactions(ctx context.Context, tablet *topodatapb.Tablet, abandonAge int64) ([]*querypb.TransactionMetadata, error)
// ReadTransaction returns the metadata for the specified distributed transaction ID.
ReadTransaction(ctx context.Context, tablet *topodatapb.Tablet, dtid string) (*querypb.TransactionMetadata, error)
+ GetTransactionInfo(ctx context.Context, tablet *topodatapb.Tablet, dtid string) (*tabletmanagerdatapb.GetTransactionInfoResponse, error)
+
// ConcludeTransaction conclude the transaction on the tablet.
ConcludeTransaction(ctx context.Context, tablet *topodatapb.Tablet, dtid string, mm bool) error
@@ -202,6 +207,7 @@ type TabletManagerClient interface {
//
CreateVReplicationWorkflow(ctx context.Context, tablet *topodatapb.Tablet, request *tabletmanagerdatapb.CreateVReplicationWorkflowRequest) (*tabletmanagerdatapb.CreateVReplicationWorkflowResponse, error)
+ DeleteTableData(ctx context.Context, tablet *topodatapb.Tablet, request *tabletmanagerdatapb.DeleteTableDataRequest) (*tabletmanagerdatapb.DeleteTableDataResponse, error)
DeleteVReplicationWorkflow(ctx context.Context, tablet *topodatapb.Tablet, request *tabletmanagerdatapb.DeleteVReplicationWorkflowRequest) (*tabletmanagerdatapb.DeleteVReplicationWorkflowResponse, error)
HasVReplicationWorkflows(ctx context.Context, tablet *topodatapb.Tablet, request *tabletmanagerdatapb.HasVReplicationWorkflowsRequest) (*tabletmanagerdatapb.HasVReplicationWorkflowsResponse, error)
ReadVReplicationWorkflows(ctx context.Context, tablet *topodatapb.Tablet, request *tabletmanagerdatapb.ReadVReplicationWorkflowsRequest) (*tabletmanagerdatapb.ReadVReplicationWorkflowsResponse, error)
@@ -232,6 +238,9 @@ type TabletManagerClient interface {
// its reparent_journal table.
PopulateReparentJournal(ctx context.Context, tablet *topodatapb.Tablet, timeCreatedNS int64, actionName string, tabletAlias *topodatapb.TabletAlias, pos string) error
+ // ReadReparentJournalInfo reads the information from reparent journal
+ ReadReparentJournalInfo(ctx context.Context, tablet *topodatapb.Tablet) (int, error)
+
// InitReplica tells a tablet to start replicating from the
// passed in primary tablet alias, and wait for the row in the
// reparent_journal table.
diff --git a/go/vt/vttablet/tmrpctest/test_tm_rpc.go b/go/vt/vttablet/tmrpctest/test_tm_rpc.go
index 4b1785565fb..a106b43bf2c 100644
--- a/go/vt/vttablet/tmrpctest/test_tm_rpc.go
+++ b/go/vt/vttablet/tmrpctest/test_tm_rpc.go
@@ -61,6 +61,11 @@ func (fra *fakeRPCTM) CreateVReplicationWorkflow(ctx context.Context, req *table
panic("implement me")
}
+func (fra *fakeRPCTM) DeleteTableData(ctx context.Context, req *tabletmanagerdatapb.DeleteTableDataRequest) (*tabletmanagerdatapb.DeleteTableDataResponse, error) {
+ // TODO implement me
+ panic("implement me")
+}
+
func (fra *fakeRPCTM) DeleteVReplicationWorkflow(ctx context.Context, req *tabletmanagerdatapb.DeleteVReplicationWorkflowRequest) (*tabletmanagerdatapb.DeleteVReplicationWorkflowResponse, error) {
// TODO implement me
panic("implement me")
@@ -416,12 +421,12 @@ func tmRPCTestGetGlobalStatusVarsPanic(ctx context.Context, t *testing.T, client
}
func tmRPCTestGetUnresolvedTransactions(ctx context.Context, t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.Tablet) {
- _, err := client.GetUnresolvedTransactions(ctx, tablet)
+ _, err := client.GetUnresolvedTransactions(ctx, tablet, 0)
require.NoError(t, err)
}
func tmRPCTestGetUnresolvedTransactionsPanic(ctx context.Context, t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.Tablet) {
- _, err := client.GetUnresolvedTransactions(ctx, tablet)
+ _, err := client.GetUnresolvedTransactions(ctx, tablet, 0)
expectHandleRPCPanic(t, "GetUnresolvedTransactions", false /*verbose*/, err)
}
@@ -435,6 +440,16 @@ func tmRPCTestReadTransactionPanic(ctx context.Context, t *testing.T, client tmc
expectHandleRPCPanic(t, "ReadTransaction", false /*verbose*/, err)
}
+func tmRPCTestGetTransactionInfo(ctx context.Context, t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.Tablet) {
+ _, err := client.GetTransactionInfo(ctx, tablet, "aa")
+ require.NoError(t, err)
+}
+
+func tmRPCTestGetTransactionInfoPanic(ctx context.Context, t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.Tablet) {
+ _, err := client.GetTransactionInfo(ctx, tablet, "aa")
+ expectHandleRPCPanic(t, "GetTransactionInfo", false /*verbose*/, err)
+}
+
//
// Various read-write methods
//
@@ -471,6 +486,30 @@ func tmRPCTestSetReadOnlyPanic(ctx context.Context, t *testing.T, client tmclien
expectHandleRPCPanic(t, "SetReadWrite", true /*verbose*/, err)
}
+var testChangeTagsValue = map[string]string{
+ "test": "12345",
+}
+
+func (fra *fakeRPCTM) ChangeTags(ctx context.Context, tabletTags map[string]string, replace bool) (map[string]string, error) {
+ if fra.panics {
+ panic(fmt.Errorf("test-triggered panic"))
+ }
+ compare(fra.t, "ChangeTags tabletType", tabletTags, testChangeTagsValue)
+ return tabletTags, nil
+}
+
+func tmRPCTestChangeTags(ctx context.Context, t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.Tablet) {
+ _, err := client.ChangeTags(ctx, tablet, testChangeTagsValue, false)
+ if err != nil {
+ t.Errorf("ChangeTags failed: %v", err)
+ }
+}
+
+func tmRPCTestChangeTagsPanic(ctx context.Context, t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.Tablet) {
+ _, err := client.ChangeTags(ctx, tablet, testChangeTagsValue, false)
+ expectHandleRPCPanic(t, "ChangeTags", true /*verbose*/, err)
+}
+
var testChangeTypeValue = topodatapb.TabletType_REPLICA
func (fra *fakeRPCTM) ChangeType(ctx context.Context, tabletType topodatapb.TabletType, semiSync bool) error {
@@ -771,6 +810,13 @@ func (fra *fakeRPCTM) ReadTransaction(ctx context.Context, req *tabletmanagerdat
return nil, nil
}
+func (fra *fakeRPCTM) GetTransactionInfo(ctx context.Context, req *tabletmanagerdatapb.GetTransactionInfoRequest) (*tabletmanagerdatapb.GetTransactionInfoResponse, error) {
+ if fra.panics {
+ panic(fmt.Errorf("test-triggered panic"))
+ }
+ return nil, nil
+}
+
func (fra *fakeRPCTM) ConcludeTransaction(ctx context.Context, req *tabletmanagerdatapb.ConcludeTransactionRequest) error {
if fra.panics {
panic(fmt.Errorf("test-triggered panic"))
@@ -1133,6 +1179,15 @@ func (fra *fakeRPCTM) PopulateReparentJournal(ctx context.Context, timeCreatedNS
return nil
}
+var testReparentJournalLen = 10
+
+func (fra *fakeRPCTM) ReadReparentJournalInfo(context.Context) (int, error) {
+ if fra.panics {
+ panic(fmt.Errorf("test-triggered panic"))
+ }
+ return testReparentJournalLen, nil
+}
+
func tmRPCTestPopulateReparentJournal(ctx context.Context, t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.Tablet) {
err := client.PopulateReparentJournal(ctx, tablet, testTimeCreatedNS, testActionName, testPrimaryAlias, testReplicationPosition)
compareError(t, "PopulateReparentJournal", err, true, testPopulateReparentJournalCalled)
@@ -1143,6 +1198,16 @@ func tmRPCTestPopulateReparentJournalPanic(ctx context.Context, t *testing.T, cl
expectHandleRPCPanic(t, "PopulateReparentJournal", true /*verbose*/, err)
}
+func tmRPCTestReadReparentJournalInfo(ctx context.Context, t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.Tablet) {
+ length, err := client.ReadReparentJournalInfo(ctx, tablet)
+ compareError(t, "ReadReparentJournalInfo", err, length, testReparentJournalLen)
+}
+
+func tmRPCTestReadReparentJournalInfoPanic(ctx context.Context, t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.Tablet) {
+ _, err := client.ReadReparentJournalInfo(ctx, tablet)
+ expectHandleRPCPanic(t, "ReadReparentJournalInfo", true /*verbose*/, err)
+}
+
func tmRPCTestWaitForPositionPanic(ctx context.Context, t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.Tablet) {
err := client.WaitForPosition(ctx, tablet, testReplicationPosition)
expectHandleRPCPanic(t, "WaitForPosition", true /*verbose*/, err)
@@ -1363,6 +1428,10 @@ func (fra *fakeRPCTM) Backup(ctx context.Context, logger logutil.Logger, request
return nil
}
+func (fra *fakeRPCTM) IsBackupRunning() bool {
+ return false
+}
+
func tmRPCTestBackup(ctx context.Context, t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.Tablet) {
req := &tabletmanagerdatapb.BackupRequest{Concurrency: testBackupConcurrency, AllowPrimary: testBackupAllowPrimary}
stream, err := client.Backup(ctx, tablet, req)
@@ -1478,6 +1547,7 @@ func Run(t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.T
tmRPCTestGetGlobalStatusVars(ctx, t, client, tablet)
tmRPCTestGetUnresolvedTransactions(ctx, t, client, tablet)
tmRPCTestReadTransaction(ctx, t, client, tablet)
+ tmRPCTestGetTransactionInfo(ctx, t, client, tablet)
// Various read-write methods
tmRPCTestSetReadOnly(ctx, t, client, tablet)
@@ -1511,6 +1581,7 @@ func Run(t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.T
tmRPCTestResetReplication(ctx, t, client, tablet)
tmRPCTestInitPrimary(ctx, t, client, tablet)
tmRPCTestPopulateReparentJournal(ctx, t, client, tablet)
+ tmRPCTestReadReparentJournalInfo(ctx, t, client, tablet)
tmRPCTestDemotePrimary(ctx, t, client, tablet)
tmRPCTestUndoDemotePrimary(ctx, t, client, tablet)
tmRPCTestSetReplicationSource(ctx, t, client, tablet)
@@ -1541,6 +1612,7 @@ func Run(t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.T
tmRPCTestGetGlobalStatusVarsPanic(ctx, t, client, tablet)
tmRPCTestGetUnresolvedTransactionsPanic(ctx, t, client, tablet)
tmRPCTestReadTransactionPanic(ctx, t, client, tablet)
+ tmRPCTestGetTransactionInfoPanic(ctx, t, client, tablet)
// Various read-write methods
tmRPCTestSetReadOnlyPanic(ctx, t, client, tablet)
@@ -1570,6 +1642,7 @@ func Run(t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.T
tmRPCTestResetReplicationPanic(ctx, t, client, tablet)
tmRPCTestInitPrimaryPanic(ctx, t, client, tablet)
tmRPCTestPopulateReparentJournalPanic(ctx, t, client, tablet)
+ tmRPCTestReadReparentJournalInfoPanic(ctx, t, client, tablet)
tmRPCTestWaitForPositionPanic(ctx, t, client, tablet)
tmRPCTestDemotePrimaryPanic(ctx, t, client, tablet)
tmRPCTestUndoDemotePrimaryPanic(ctx, t, client, tablet)
diff --git a/go/vt/vttest/local_cluster.go b/go/vt/vttest/local_cluster.go
index 576a78bb761..fa7e40feb12 100644
--- a/go/vt/vttest/local_cluster.go
+++ b/go/vt/vttest/local_cluster.go
@@ -660,6 +660,7 @@ func (db *LocalCluster) JSONConfig() any {
config := map[string]any{
"bind_address": db.vt.BindAddress,
"port": db.vt.Port,
+ "grpc_bind_address": db.vt.BindAddressGprc,
"socket": db.mysql.UnixSocket(),
"vtcombo_mysql_port": db.Env.PortForProtocol("vtcombo_mysql_port", ""),
"mysql": db.Env.PortForProtocol("mysql", ""),
diff --git a/go/vt/vttest/vtprocess.go b/go/vt/vttest/vtprocess.go
index 3f34994bb75..6371811a60e 100644
--- a/go/vt/vttest/vtprocess.go
+++ b/go/vt/vttest/vtprocess.go
@@ -44,16 +44,17 @@ type HealthChecker func(addr string) bool
// It can be spawned manually or through one of the available
// helper methods.
type VtProcess struct {
- Name string
- Directory string
- LogDirectory string
- Binary string
- ExtraArgs []string
- Env []string
- BindAddress string
- Port int
- PortGrpc int
- HealthCheck HealthChecker
+ Name string
+ Directory string
+ LogDirectory string
+ Binary string
+ ExtraArgs []string
+ Env []string
+ BindAddress string
+ BindAddressGprc string
+ Port int
+ PortGrpc int
+ HealthCheck HealthChecker
proc *exec.Cmd
exit chan error
@@ -139,6 +140,11 @@ func (vtp *VtProcess) WaitStart() (err error) {
vtp.proc.Args = append(vtp.proc.Args, fmt.Sprintf("%d", vtp.PortGrpc))
}
+ if vtp.BindAddressGprc != "" {
+ vtp.proc.Args = append(vtp.proc.Args, "--grpc_bind_address")
+ vtp.proc.Args = append(vtp.proc.Args, vtp.BindAddressGprc)
+ }
+
vtp.proc.Args = append(vtp.proc.Args, vtp.ExtraArgs...)
vtp.proc.Env = append(vtp.proc.Env, os.Environ()...)
vtp.proc.Env = append(vtp.proc.Env, vtp.Env...)
@@ -199,16 +205,22 @@ func VtcomboProcess(environment Environment, args *Config, mysql MySQLManager) (
if args.VtComboBindAddress != "" {
vtcomboBindAddress = args.VtComboBindAddress
}
+ grpcBindAddress := "127.0.0.1"
+ if servenv.GRPCBindAddress() != "" {
+ grpcBindAddress = servenv.GRPCBindAddress()
+ }
+
vt := &VtProcess{
- Name: "vtcombo",
- Directory: environment.Directory(),
- LogDirectory: environment.LogDirectory(),
- Binary: environment.BinaryPath("vtcombo"),
- BindAddress: vtcomboBindAddress,
- Port: environment.PortForProtocol("vtcombo", ""),
- PortGrpc: environment.PortForProtocol("vtcombo", "grpc"),
- HealthCheck: environment.ProcessHealthCheck("vtcombo"),
- Env: environment.EnvVars(),
+ Name: "vtcombo",
+ Directory: environment.Directory(),
+ LogDirectory: environment.LogDirectory(),
+ Binary: environment.BinaryPath("vtcombo"),
+ BindAddress: vtcomboBindAddress,
+ BindAddressGprc: grpcBindAddress,
+ Port: environment.PortForProtocol("vtcombo", ""),
+ PortGrpc: environment.PortForProtocol("vtcombo", "grpc"),
+ HealthCheck: environment.ProcessHealthCheck("vtcombo"),
+ Env: environment.EnvVars(),
}
user, pass := mysql.Auth()
diff --git a/go/vt/wrangler/fake_dbclient_test.go b/go/vt/wrangler/fake_dbclient_test.go
index 14ef0913383..02ee79210d7 100644
--- a/go/vt/wrangler/fake_dbclient_test.go
+++ b/go/vt/wrangler/fake_dbclient_test.go
@@ -153,6 +153,10 @@ func (dc *fakeDBClient) Rollback() error {
func (dc *fakeDBClient) Close() {
}
+func (dc *fakeDBClient) IsClosed() bool {
+ return false
+}
+
// ExecuteFetch is part of the DBClient interface
func (dc *fakeDBClient) ExecuteFetch(query string, maxrows int) (*sqltypes.Result, error) {
dc.mu.Lock()
diff --git a/go/vt/wrangler/materializer.go b/go/vt/wrangler/materializer.go
index 7e24945cde7..bd7ae553130 100644
--- a/go/vt/wrangler/materializer.go
+++ b/go/vt/wrangler/materializer.go
@@ -551,11 +551,8 @@ func (wr *Wrangler) prepareCreateLookup(ctx context.Context, keyspace string, sp
if len(vindexFromCols) != 1 {
return nil, nil, nil, fmt.Errorf("unique vindex 'from' should have only one column: %v", vindex)
}
- } else {
- if len(vindexFromCols) < 2 {
- return nil, nil, nil, fmt.Errorf("non-unique vindex 'from' should have more than one column: %v", vindex)
- }
}
+
vindexToCol = vindex.Params["to"]
// Make the vindex write_only. If one exists already in the vschema,
// it will need to match this vindex exactly, including the write_only setting.
diff --git a/go/vt/wrangler/materializer_test.go b/go/vt/wrangler/materializer_test.go
index 1728ba6efc2..1871d778c6b 100644
--- a/go/vt/wrangler/materializer_test.go
+++ b/go/vt/wrangler/materializer_test.go
@@ -1599,7 +1599,7 @@ func TestCreateLookupVindexFailures(t *testing.T) {
},
err: "unique vindex 'from' should have only one column",
}, {
- description: "non-unique lookup should have more than one column",
+ description: "non-unique lookup can have only one column",
input: &vschemapb.Keyspace{
Vindexes: map[string]*vschemapb.Vindex{
"v": {
@@ -1612,7 +1612,7 @@ func TestCreateLookupVindexFailures(t *testing.T) {
},
},
},
- err: "non-unique vindex 'from' should have more than one column",
+ err: "",
}, {
description: "vindex not found",
input: &vschemapb.Keyspace{
diff --git a/go/vt/wrangler/testlib/backup_test.go b/go/vt/wrangler/testlib/backup_test.go
index f1977df3f16..b540fc9f8f0 100644
--- a/go/vt/wrangler/testlib/backup_test.go
+++ b/go/vt/wrangler/testlib/backup_test.go
@@ -28,7 +28,6 @@ import (
"github.com/stretchr/testify/require"
"vitess.io/vitess/go/mysql"
- "vitess.io/vitess/go/mysql/capabilities"
"vitess.io/vitess/go/mysql/fakesqldb"
"vitess.io/vitess/go/mysql/replication"
"vitess.io/vitess/go/sqltypes"
@@ -36,6 +35,7 @@ import (
"vitess.io/vitess/go/vt/logutil"
"vitess.io/vitess/go/vt/mysqlctl"
"vitess.io/vitess/go/vt/mysqlctl/backupstorage"
+ "vitess.io/vitess/go/vt/mysqlctl/blackbox"
"vitess.io/vitess/go/vt/mysqlctl/filebackupstorage"
"vitess.io/vitess/go/vt/topo/memorytopo"
"vitess.io/vitess/go/vt/topo/topoproto"
@@ -132,7 +132,7 @@ func testBackupRestore(t *testing.T, cDetails *compressionDetails) error {
require.NoError(t, os.MkdirAll(s, os.ModePerm))
}
- needIt, err := needInnoDBRedoLogSubdir()
+ needIt, err := blackbox.NeedInnoDBRedoLogSubdir()
require.NoError(t, err)
if needIt {
newPath := path.Join(sourceInnodbLogDir, mysql.DynamicRedoLogSubdir)
@@ -149,7 +149,7 @@ func testBackupRestore(t *testing.T, cDetails *compressionDetails) error {
primary := NewFakeTablet(t, wr, "cell1", 0, topodatapb.TabletType_PRIMARY, db)
primary.FakeMysqlDaemon.ReadOnly = false
primary.FakeMysqlDaemon.Replicating = false
- primary.FakeMysqlDaemon.CurrentPrimaryPosition = replication.Position{
+ primary.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
2: replication.MariadbGTID{
Domain: 2,
@@ -157,7 +157,7 @@ func testBackupRestore(t *testing.T, cDetails *compressionDetails) error {
Sequence: 457,
},
},
- }
+ })
// start primary so that replica can fetch primary position from it
primary.StartActionLoop(t, wr)
@@ -169,7 +169,7 @@ func testBackupRestore(t *testing.T, cDetails *compressionDetails) error {
sourceTablet.FakeMysqlDaemon.ReadOnly = true
sourceTablet.FakeMysqlDaemon.Replicating = true
sourceTablet.FakeMysqlDaemon.SetReplicationSourceInputs = []string{fmt.Sprintf("%s:%d", primary.Tablet.MysqlHostname, primary.Tablet.MysqlPort)}
- sourceTablet.FakeMysqlDaemon.CurrentPrimaryPosition = replication.Position{
+ sourceTablet.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
2: replication.MariadbGTID{
Domain: 2,
@@ -177,7 +177,7 @@ func testBackupRestore(t *testing.T, cDetails *compressionDetails) error {
Sequence: 457,
},
},
- }
+ })
sourceTablet.FakeMysqlDaemon.ExpectedExecuteSuperQueryList = []string{
// These 3 statements come from tablet startup
"STOP REPLICA",
@@ -220,7 +220,7 @@ func testBackupRestore(t *testing.T, cDetails *compressionDetails) error {
destTablet := NewFakeTablet(t, wr, "cell1", 2, topodatapb.TabletType_REPLICA, db)
destTablet.FakeMysqlDaemon.ReadOnly = true
destTablet.FakeMysqlDaemon.Replicating = true
- destTablet.FakeMysqlDaemon.CurrentPrimaryPosition = replication.Position{
+ destTablet.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
2: replication.MariadbGTID{
Domain: 2,
@@ -228,7 +228,7 @@ func testBackupRestore(t *testing.T, cDetails *compressionDetails) error {
Sequence: 457,
},
},
- }
+ })
destTablet.FakeMysqlDaemon.ExpectedExecuteSuperQueryList = []string{
// These 3 statements come from tablet startup
"STOP REPLICA",
@@ -247,7 +247,7 @@ func testBackupRestore(t *testing.T, cDetails *compressionDetails) error {
destTablet.FakeMysqlDaemon.FetchSuperQueryMap = map[string]*sqltypes.Result{
"SHOW DATABASES": {},
}
- destTablet.FakeMysqlDaemon.SetReplicationPositionPos = sourceTablet.FakeMysqlDaemon.CurrentPrimaryPosition
+ destTablet.FakeMysqlDaemon.SetReplicationPositionPos = sourceTablet.FakeMysqlDaemon.GetPrimaryPositionLocked()
destTablet.FakeMysqlDaemon.SetReplicationSourceInputs = append(destTablet.FakeMysqlDaemon.SetReplicationSourceInputs, topoproto.MysqlAddr(primary.Tablet))
destTablet.StartActionLoop(t, wr)
@@ -300,7 +300,7 @@ func testBackupRestore(t *testing.T, cDetails *compressionDetails) error {
"START REPLICA",
}
- primary.FakeMysqlDaemon.SetReplicationPositionPos = primary.FakeMysqlDaemon.CurrentPrimaryPosition
+ primary.FakeMysqlDaemon.SetReplicationPositionPos = primary.FakeMysqlDaemon.GetPrimaryPositionLocked()
// restore primary from latest backup
require.NoError(t, primary.TM.RestoreData(ctx, logutil.NewConsoleLogger(), 0 /* waitForBackupInterval */, false /* deleteBeforeRestore */, time.Time{} /* restoreFromBackupTs */, time.Time{} /* restoreToTimestamp */, "" /* restoreToPos */, []string{} /* ignoreBackupEngines */, mysqlShutdownTimeout),
@@ -371,7 +371,7 @@ func TestBackupRestoreLagged(t *testing.T) {
}
require.NoError(t, os.WriteFile(path.Join(sourceInnodbDataDir, "innodb_data_1"), []byte("innodb data 1 contents"), os.ModePerm))
- needIt, err := needInnoDBRedoLogSubdir()
+ needIt, err := blackbox.NeedInnoDBRedoLogSubdir()
require.NoError(t, err)
if needIt {
newPath := path.Join(sourceInnodbLogDir, mysql.DynamicRedoLogSubdir)
@@ -387,7 +387,7 @@ func TestBackupRestoreLagged(t *testing.T) {
primary := NewFakeTablet(t, wr, "cell1", 0, topodatapb.TabletType_PRIMARY, db)
primary.FakeMysqlDaemon.ReadOnly = false
primary.FakeMysqlDaemon.Replicating = false
- primary.FakeMysqlDaemon.CurrentPrimaryPosition = replication.Position{
+ primary.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
2: replication.MariadbGTID{
Domain: 2,
@@ -395,7 +395,7 @@ func TestBackupRestoreLagged(t *testing.T) {
Sequence: 457,
},
},
- }
+ })
// start primary so that replica can fetch primary position from it
primary.StartActionLoop(t, wr)
@@ -406,7 +406,7 @@ func TestBackupRestoreLagged(t *testing.T) {
sourceTablet := NewFakeTablet(t, wr, "cell1", 1, topodatapb.TabletType_REPLICA, db)
sourceTablet.FakeMysqlDaemon.ReadOnly = true
sourceTablet.FakeMysqlDaemon.Replicating = true
- sourceTablet.FakeMysqlDaemon.CurrentPrimaryPosition = replication.Position{
+ sourceTablet.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
2: replication.MariadbGTID{
Domain: 2,
@@ -414,7 +414,7 @@ func TestBackupRestoreLagged(t *testing.T) {
Sequence: 456,
},
},
- }
+ })
sourceTablet.FakeMysqlDaemon.SetReplicationSourceInputs = []string{fmt.Sprintf("%s:%d", primary.Tablet.MysqlHostname, primary.Tablet.MysqlPort)}
sourceTablet.FakeMysqlDaemon.ExpectedExecuteSuperQueryList = []string{
// These 3 statements come from tablet startup
@@ -448,7 +448,7 @@ func TestBackupRestoreLagged(t *testing.T) {
timer := time.NewTicker(1 * time.Second)
<-timer.C
- sourceTablet.FakeMysqlDaemon.CurrentPrimaryPositionLocked(replication.Position{
+ sourceTablet.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
2: replication.MariadbGTID{
Domain: 2,
@@ -467,7 +467,7 @@ func TestBackupRestoreLagged(t *testing.T) {
require.NoError(t, sourceTablet.FakeMysqlDaemon.CheckSuperQueryList())
assert.True(t, sourceTablet.FakeMysqlDaemon.Replicating)
assert.True(t, sourceTablet.FakeMysqlDaemon.Running)
- assert.Equal(t, primary.FakeMysqlDaemon.CurrentPrimaryPosition, sourceTablet.FakeMysqlDaemon.CurrentPrimaryPosition)
+ assert.Equal(t, primary.FakeMysqlDaemon.GetPrimaryPositionLocked(), sourceTablet.FakeMysqlDaemon.GetPrimaryPositionLocked())
case <-timer2.C:
require.FailNow(t, "Backup timed out")
}
@@ -476,7 +476,7 @@ func TestBackupRestoreLagged(t *testing.T) {
destTablet := NewFakeTablet(t, wr, "cell1", 2, topodatapb.TabletType_REPLICA, db)
destTablet.FakeMysqlDaemon.ReadOnly = true
destTablet.FakeMysqlDaemon.Replicating = true
- destTablet.FakeMysqlDaemon.CurrentPrimaryPosition = replication.Position{
+ destTablet.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
2: replication.MariadbGTID{
Domain: 2,
@@ -484,7 +484,7 @@ func TestBackupRestoreLagged(t *testing.T) {
Sequence: 456,
},
},
- }
+ })
destTablet.FakeMysqlDaemon.ExpectedExecuteSuperQueryList = []string{
// These 3 statements come from tablet startup
"STOP REPLICA",
@@ -503,7 +503,7 @@ func TestBackupRestoreLagged(t *testing.T) {
destTablet.FakeMysqlDaemon.FetchSuperQueryMap = map[string]*sqltypes.Result{
"SHOW DATABASES": {},
}
- destTablet.FakeMysqlDaemon.SetReplicationPositionPos = destTablet.FakeMysqlDaemon.CurrentPrimaryPosition
+ destTablet.FakeMysqlDaemon.SetReplicationPositionPos = destTablet.FakeMysqlDaemon.GetPrimaryPositionLocked()
destTablet.FakeMysqlDaemon.SetReplicationSourceInputs = append(destTablet.FakeMysqlDaemon.SetReplicationSourceInputs, topoproto.MysqlAddr(primary.Tablet))
destTablet.StartActionLoop(t, wr)
@@ -526,7 +526,7 @@ func TestBackupRestoreLagged(t *testing.T) {
timer = time.NewTicker(1 * time.Second)
<-timer.C
- destTablet.FakeMysqlDaemon.CurrentPrimaryPositionLocked(replication.Position{
+ destTablet.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
2: replication.MariadbGTID{
Domain: 2,
@@ -544,7 +544,7 @@ func TestBackupRestoreLagged(t *testing.T) {
require.NoError(t, destTablet.FakeMysqlDaemon.CheckSuperQueryList(), "destTablet.FakeMysqlDaemon.CheckSuperQueryList failed")
assert.True(t, destTablet.FakeMysqlDaemon.Replicating)
assert.True(t, destTablet.FakeMysqlDaemon.Running)
- assert.Equal(t, primary.FakeMysqlDaemon.CurrentPrimaryPosition, destTablet.FakeMysqlDaemon.CurrentPrimaryPosition)
+ assert.Equal(t, primary.FakeMysqlDaemon.GetPrimaryPositionLocked(), destTablet.FakeMysqlDaemon.GetPrimaryPositionLocked())
case <-timer2.C:
require.FailNow(t, "Restore timed out")
}
@@ -591,7 +591,7 @@ func TestRestoreUnreachablePrimary(t *testing.T) {
}
require.NoError(t, os.WriteFile(path.Join(sourceInnodbDataDir, "innodb_data_1"), []byte("innodb data 1 contents"), os.ModePerm))
- needIt, err := needInnoDBRedoLogSubdir()
+ needIt, err := blackbox.NeedInnoDBRedoLogSubdir()
require.NoError(t, err)
if needIt {
newPath := path.Join(sourceInnodbLogDir, mysql.DynamicRedoLogSubdir)
@@ -607,7 +607,7 @@ func TestRestoreUnreachablePrimary(t *testing.T) {
primary := NewFakeTablet(t, wr, "cell1", 0, topodatapb.TabletType_PRIMARY, db)
primary.FakeMysqlDaemon.ReadOnly = false
primary.FakeMysqlDaemon.Replicating = false
- primary.FakeMysqlDaemon.CurrentPrimaryPosition = replication.Position{
+ primary.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
2: replication.MariadbGTID{
Domain: 2,
@@ -615,7 +615,7 @@ func TestRestoreUnreachablePrimary(t *testing.T) {
Sequence: 457,
},
},
- }
+ })
// start primary so that replica can fetch primary position from it
primary.StartActionLoop(t, wr)
@@ -625,7 +625,7 @@ func TestRestoreUnreachablePrimary(t *testing.T) {
sourceTablet := NewFakeTablet(t, wr, "cell1", 1, topodatapb.TabletType_REPLICA, db)
sourceTablet.FakeMysqlDaemon.ReadOnly = true
sourceTablet.FakeMysqlDaemon.Replicating = true
- sourceTablet.FakeMysqlDaemon.CurrentPrimaryPosition = replication.Position{
+ sourceTablet.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
2: replication.MariadbGTID{
Domain: 2,
@@ -633,7 +633,7 @@ func TestRestoreUnreachablePrimary(t *testing.T) {
Sequence: 457,
},
},
- }
+ })
sourceTablet.FakeMysqlDaemon.SetReplicationSourceInputs = []string{fmt.Sprintf("%s:%d", primary.Tablet.MysqlHostname, primary.Tablet.MysqlPort)}
sourceTablet.FakeMysqlDaemon.ExpectedExecuteSuperQueryList = []string{
// These 3 statements come from tablet startup
@@ -667,7 +667,7 @@ func TestRestoreUnreachablePrimary(t *testing.T) {
destTablet := NewFakeTablet(t, wr, "cell1", 2, topodatapb.TabletType_REPLICA, db)
destTablet.FakeMysqlDaemon.ReadOnly = true
destTablet.FakeMysqlDaemon.Replicating = true
- destTablet.FakeMysqlDaemon.CurrentPrimaryPosition = replication.Position{
+ destTablet.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
2: replication.MariadbGTID{
Domain: 2,
@@ -675,7 +675,7 @@ func TestRestoreUnreachablePrimary(t *testing.T) {
Sequence: 457,
},
},
- }
+ })
destTablet.FakeMysqlDaemon.ExpectedExecuteSuperQueryList = []string{
// These 3 statements come from tablet startup
"STOP REPLICA",
@@ -691,7 +691,7 @@ func TestRestoreUnreachablePrimary(t *testing.T) {
destTablet.FakeMysqlDaemon.FetchSuperQueryMap = map[string]*sqltypes.Result{
"SHOW DATABASES": {},
}
- destTablet.FakeMysqlDaemon.SetReplicationPositionPos = sourceTablet.FakeMysqlDaemon.CurrentPrimaryPosition
+ destTablet.FakeMysqlDaemon.SetReplicationPositionPos = sourceTablet.FakeMysqlDaemon.GetPrimaryPositionLocked()
destTablet.FakeMysqlDaemon.SetReplicationSourceInputs = append(destTablet.FakeMysqlDaemon.SetReplicationSourceInputs, topoproto.MysqlAddr(primary.Tablet))
destTablet.StartActionLoop(t, wr)
@@ -767,7 +767,7 @@ func TestDisableActiveReparents(t *testing.T) {
}
require.NoError(t, os.WriteFile(path.Join(sourceInnodbDataDir, "innodb_data_1"), []byte("innodb data 1 contents"), os.ModePerm))
- needIt, err := needInnoDBRedoLogSubdir()
+ needIt, err := blackbox.NeedInnoDBRedoLogSubdir()
require.NoError(t, err)
if needIt {
newPath := path.Join(sourceInnodbLogDir, mysql.DynamicRedoLogSubdir)
@@ -783,7 +783,7 @@ func TestDisableActiveReparents(t *testing.T) {
primary := NewFakeTablet(t, wr, "cell1", 0, topodatapb.TabletType_PRIMARY, db)
primary.FakeMysqlDaemon.ReadOnly = false
primary.FakeMysqlDaemon.Replicating = false
- primary.FakeMysqlDaemon.CurrentPrimaryPosition = replication.Position{
+ primary.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
2: replication.MariadbGTID{
Domain: 2,
@@ -791,7 +791,7 @@ func TestDisableActiveReparents(t *testing.T) {
Sequence: 457,
},
},
- }
+ })
// start primary so that replica can fetch primary position from it
primary.StartActionLoop(t, wr)
@@ -802,7 +802,7 @@ func TestDisableActiveReparents(t *testing.T) {
sourceTablet := NewFakeTablet(t, wr, "cell1", 1, topodatapb.TabletType_REPLICA, db)
sourceTablet.FakeMysqlDaemon.ReadOnly = true
sourceTablet.FakeMysqlDaemon.Replicating = true
- sourceTablet.FakeMysqlDaemon.CurrentPrimaryPosition = replication.Position{
+ sourceTablet.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
2: replication.MariadbGTID{
Domain: 2,
@@ -810,7 +810,7 @@ func TestDisableActiveReparents(t *testing.T) {
Sequence: 457,
},
},
- }
+ })
sourceTablet.FakeMysqlDaemon.ExpectedExecuteSuperQueryList = []string{
"STOP REPLICA",
}
@@ -835,7 +835,7 @@ func TestDisableActiveReparents(t *testing.T) {
destTablet := NewFakeTablet(t, wr, "cell1", 2, topodatapb.TabletType_REPLICA, db)
destTablet.FakeMysqlDaemon.ReadOnly = true
destTablet.FakeMysqlDaemon.Replicating = true
- destTablet.FakeMysqlDaemon.CurrentPrimaryPosition = replication.Position{
+ destTablet.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
2: replication.MariadbGTID{
Domain: 2,
@@ -843,7 +843,7 @@ func TestDisableActiveReparents(t *testing.T) {
Sequence: 457,
},
},
- }
+ })
destTablet.FakeMysqlDaemon.ExpectedExecuteSuperQueryList = []string{
"FAKE RESET BINARY LOGS AND GTIDS",
"FAKE SET GLOBAL gtid_purged",
@@ -855,7 +855,7 @@ func TestDisableActiveReparents(t *testing.T) {
destTablet.FakeMysqlDaemon.FetchSuperQueryMap = map[string]*sqltypes.Result{
"SHOW DATABASES": {},
}
- destTablet.FakeMysqlDaemon.SetReplicationPositionPos = sourceTablet.FakeMysqlDaemon.CurrentPrimaryPosition
+ destTablet.FakeMysqlDaemon.SetReplicationPositionPos = sourceTablet.FakeMysqlDaemon.GetPrimaryPositionLocked()
destTablet.FakeMysqlDaemon.SetReplicationSourceInputs = append(destTablet.FakeMysqlDaemon.SetReplicationSourceInputs, topoproto.MysqlAddr(primary.Tablet))
destTablet.StartActionLoop(t, wr)
@@ -877,25 +877,3 @@ func TestDisableActiveReparents(t *testing.T) {
assert.False(t, destTablet.FakeMysqlDaemon.Replicating)
assert.True(t, destTablet.FakeMysqlDaemon.Running)
}
-
-// needInnoDBRedoLogSubdir indicates whether we need to create a redo log subdirectory.
-// Starting with MySQL 8.0.30, the InnoDB redo logs are stored in a subdirectory of the
-// (/. by default) called "#innodb_redo". See:
-//
-// https://dev.mysql.com/doc/refman/8.0/en/innodb-redo-log.html#innodb-modifying-redo-log-capacity
-func needInnoDBRedoLogSubdir() (needIt bool, err error) {
- mysqldVersionStr, err := mysqlctl.GetVersionString()
- if err != nil {
- return needIt, err
- }
- _, sv, err := mysqlctl.ParseVersionString(mysqldVersionStr)
- if err != nil {
- return needIt, err
- }
- versionStr := fmt.Sprintf("%d.%d.%d", sv.Major, sv.Minor, sv.Patch)
- capableOf := mysql.ServerVersionCapableOf(versionStr)
- if capableOf == nil {
- return needIt, fmt.Errorf("cannot determine database flavor details for version %s", versionStr)
- }
- return capableOf(capabilities.DynamicRedoLogCapacityFlavorCapability)
-}
diff --git a/go/vt/wrangler/testlib/emergency_reparent_shard_test.go b/go/vt/wrangler/testlib/emergency_reparent_shard_test.go
index 96f9df74405..3167be5e512 100644
--- a/go/vt/wrangler/testlib/emergency_reparent_shard_test.go
+++ b/go/vt/wrangler/testlib/emergency_reparent_shard_test.go
@@ -63,7 +63,7 @@ func TestEmergencyReparentShard(t *testing.T) {
reparenttestutil.SetKeyspaceDurability(context.Background(), t, ts, "test_keyspace", "semi_sync")
oldPrimary.FakeMysqlDaemon.Replicating = false
- oldPrimary.FakeMysqlDaemon.CurrentPrimaryPosition = replication.Position{
+ oldPrimary.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
2: replication.MariadbGTID{
Domain: 2,
@@ -71,7 +71,7 @@ func TestEmergencyReparentShard(t *testing.T) {
Sequence: 456,
},
},
- }
+ })
currentPrimaryFilePosition, _ := replication.ParseFilePosGTIDSet("mariadb-bin.000010:456")
oldPrimary.FakeMysqlDaemon.CurrentSourceFilePosition = replication.Position{
GTIDSet: currentPrimaryFilePosition,
@@ -80,7 +80,7 @@ func TestEmergencyReparentShard(t *testing.T) {
// new primary
newPrimary.FakeMysqlDaemon.ReadOnly = true
newPrimary.FakeMysqlDaemon.Replicating = true
- newPrimary.FakeMysqlDaemon.CurrentPrimaryPosition = replication.Position{
+ newPrimary.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
2: replication.MariadbGTID{
Domain: 2,
@@ -88,7 +88,7 @@ func TestEmergencyReparentShard(t *testing.T) {
Sequence: 456,
},
},
- }
+ })
newPrimaryRelayLogPos, _ := replication.ParseFilePosGTIDSet("relay-bin.000004:456")
newPrimary.FakeMysqlDaemon.CurrentSourceFilePosition = replication.Position{
GTIDSet: newPrimaryRelayLogPos,
@@ -123,7 +123,7 @@ func TestEmergencyReparentShard(t *testing.T) {
// good replica 1 is replicating
goodReplica1.FakeMysqlDaemon.ReadOnly = true
goodReplica1.FakeMysqlDaemon.Replicating = true
- goodReplica1.FakeMysqlDaemon.CurrentPrimaryPosition = replication.Position{
+ goodReplica1.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
2: replication.MariadbGTID{
Domain: 2,
@@ -131,7 +131,7 @@ func TestEmergencyReparentShard(t *testing.T) {
Sequence: 455,
},
},
- }
+ })
goodReplica1RelayLogPos, _ := replication.ParseFilePosGTIDSet("relay-bin.000004:455")
goodReplica1.FakeMysqlDaemon.CurrentSourceFilePosition = replication.Position{
GTIDSet: goodReplica1RelayLogPos,
@@ -154,7 +154,7 @@ func TestEmergencyReparentShard(t *testing.T) {
// good replica 2 is not replicating
goodReplica2.FakeMysqlDaemon.ReadOnly = true
goodReplica2.FakeMysqlDaemon.Replicating = false
- goodReplica2.FakeMysqlDaemon.CurrentPrimaryPosition = replication.Position{
+ goodReplica2.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
2: replication.MariadbGTID{
Domain: 2,
@@ -162,7 +162,7 @@ func TestEmergencyReparentShard(t *testing.T) {
Sequence: 454,
},
},
- }
+ })
goodReplica2RelayLogPos, _ := replication.ParseFilePosGTIDSet("relay-bin.000004:454")
goodReplica2.FakeMysqlDaemon.CurrentSourceFilePosition = replication.Position{
GTIDSet: goodReplica2RelayLogPos,
@@ -217,7 +217,7 @@ func TestEmergencyReparentShardPrimaryElectNotBest(t *testing.T) {
newPrimary.FakeMysqlDaemon.Replicating = true
// It has transactions in its relay log, but not as many as
// moreAdvancedReplica
- newPrimary.FakeMysqlDaemon.CurrentPrimaryPosition = replication.Position{
+ newPrimary.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
2: replication.MariadbGTID{
Domain: 2,
@@ -225,7 +225,7 @@ func TestEmergencyReparentShardPrimaryElectNotBest(t *testing.T) {
Sequence: 456,
},
},
- }
+ })
newPrimaryRelayLogPos, _ := replication.ParseFilePosGTIDSet("relay-bin.000004:456")
newPrimary.FakeMysqlDaemon.CurrentSourceFilePosition = replication.Position{
GTIDSet: newPrimaryRelayLogPos,
@@ -250,7 +250,7 @@ func TestEmergencyReparentShardPrimaryElectNotBest(t *testing.T) {
// more advanced replica
moreAdvancedReplica.FakeMysqlDaemon.Replicating = true
// relay log position is more advanced than desired new primary
- moreAdvancedReplica.FakeMysqlDaemon.CurrentPrimaryPosition = replication.Position{
+ moreAdvancedReplica.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
2: replication.MariadbGTID{
Domain: 2,
@@ -258,14 +258,14 @@ func TestEmergencyReparentShardPrimaryElectNotBest(t *testing.T) {
Sequence: 457,
},
},
- }
+ })
moreAdvancedReplicaLogPos, _ := replication.ParseFilePosGTIDSet("relay-bin.000004:457")
moreAdvancedReplica.FakeMysqlDaemon.CurrentSourceFilePosition = replication.Position{
GTIDSet: moreAdvancedReplicaLogPos,
}
moreAdvancedReplica.FakeMysqlDaemon.SetReplicationSourceInputs = append(moreAdvancedReplica.FakeMysqlDaemon.SetReplicationSourceInputs, topoproto.MysqlAddr(newPrimary.Tablet), topoproto.MysqlAddr(oldPrimary.Tablet))
moreAdvancedReplica.FakeMysqlDaemon.WaitPrimaryPositions = append(moreAdvancedReplica.FakeMysqlDaemon.WaitPrimaryPositions, moreAdvancedReplica.FakeMysqlDaemon.CurrentSourceFilePosition)
- newPrimary.FakeMysqlDaemon.WaitPrimaryPositions = append(newPrimary.FakeMysqlDaemon.WaitPrimaryPositions, moreAdvancedReplica.FakeMysqlDaemon.CurrentPrimaryPosition)
+ newPrimary.FakeMysqlDaemon.WaitPrimaryPositions = append(newPrimary.FakeMysqlDaemon.WaitPrimaryPositions, moreAdvancedReplica.FakeMysqlDaemon.GetPrimaryPositionLocked())
moreAdvancedReplica.FakeMysqlDaemon.ExpectedExecuteSuperQueryList = []string{
// These 3 statements come from tablet startup
"STOP REPLICA",
diff --git a/go/vt/wrangler/testlib/planned_reparent_shard_test.go b/go/vt/wrangler/testlib/planned_reparent_shard_test.go
index 28ffd34b756..1894c6bb4eb 100644
--- a/go/vt/wrangler/testlib/planned_reparent_shard_test.go
+++ b/go/vt/wrangler/testlib/planned_reparent_shard_test.go
@@ -96,7 +96,7 @@ func TestPlannedReparentShardNoPrimaryProvided(t *testing.T) {
oldPrimary.FakeMysqlDaemon.ReadOnly = false
oldPrimary.FakeMysqlDaemon.Replicating = false
oldPrimary.FakeMysqlDaemon.ReplicationStatusError = mysql.ErrNotReplica
- oldPrimary.FakeMysqlDaemon.CurrentPrimaryPosition = newPrimary.FakeMysqlDaemon.WaitPrimaryPositions[0]
+ oldPrimary.FakeMysqlDaemon.SetPrimaryPositionLocked(newPrimary.FakeMysqlDaemon.WaitPrimaryPositions[0])
oldPrimary.FakeMysqlDaemon.SetReplicationSourceInputs = append(oldPrimary.FakeMysqlDaemon.SetReplicationSourceInputs, topoproto.MysqlAddr(newPrimary.Tablet))
oldPrimary.FakeMysqlDaemon.ExpectedExecuteSuperQueryList = []string{
"FAKE SET SOURCE",
@@ -213,7 +213,7 @@ func TestPlannedReparentShardNoError(t *testing.T) {
oldPrimary.FakeMysqlDaemon.ReadOnly = false
oldPrimary.FakeMysqlDaemon.Replicating = false
oldPrimary.FakeMysqlDaemon.ReplicationStatusError = mysql.ErrNotReplica
- oldPrimary.FakeMysqlDaemon.CurrentPrimaryPosition = newPrimary.FakeMysqlDaemon.WaitPrimaryPositions[0]
+ oldPrimary.FakeMysqlDaemon.SetPrimaryPositionLocked(newPrimary.FakeMysqlDaemon.WaitPrimaryPositions[0])
oldPrimary.FakeMysqlDaemon.SetReplicationSourceInputs = append(oldPrimary.FakeMysqlDaemon.SetReplicationSourceInputs, topoproto.MysqlAddr(newPrimary.Tablet))
oldPrimary.FakeMysqlDaemon.ExpectedExecuteSuperQueryList = []string{
"FAKE SET SOURCE",
@@ -434,7 +434,7 @@ func TestPlannedReparentShardWaitForPositionFail(t *testing.T) {
oldPrimary.FakeMysqlDaemon.ReadOnly = false
oldPrimary.FakeMysqlDaemon.Replicating = false
// set to incorrect value to make promote fail on WaitForReplicationPos
- oldPrimary.FakeMysqlDaemon.CurrentPrimaryPosition = newPrimary.FakeMysqlDaemon.PromoteResult
+ oldPrimary.FakeMysqlDaemon.SetPrimaryPositionLocked(newPrimary.FakeMysqlDaemon.PromoteResult)
oldPrimary.FakeMysqlDaemon.SetReplicationSourceInputs = append(oldPrimary.FakeMysqlDaemon.SetReplicationSourceInputs, topoproto.MysqlAddr(newPrimary.Tablet))
oldPrimary.FakeMysqlDaemon.ExpectedExecuteSuperQueryList = []string{
"FAKE SET SOURCE",
@@ -542,7 +542,7 @@ func TestPlannedReparentShardWaitForPositionTimeout(t *testing.T) {
// old primary
oldPrimary.FakeMysqlDaemon.ReadOnly = false
oldPrimary.FakeMysqlDaemon.Replicating = false
- oldPrimary.FakeMysqlDaemon.CurrentPrimaryPosition = newPrimary.FakeMysqlDaemon.WaitPrimaryPositions[0]
+ oldPrimary.FakeMysqlDaemon.SetPrimaryPositionLocked(newPrimary.FakeMysqlDaemon.WaitPrimaryPositions[0])
oldPrimary.FakeMysqlDaemon.SetReplicationSourceInputs = append(oldPrimary.FakeMysqlDaemon.SetReplicationSourceInputs, topoproto.MysqlAddr(newPrimary.Tablet))
oldPrimary.FakeMysqlDaemon.ExpectedExecuteSuperQueryList = []string{
"FAKE SET SOURCE",
@@ -616,7 +616,7 @@ func TestPlannedReparentShardRelayLogError(t *testing.T) {
primary.FakeMysqlDaemon.ReadOnly = false
primary.FakeMysqlDaemon.Replicating = false
primary.FakeMysqlDaemon.ReplicationStatusError = mysql.ErrNotReplica
- primary.FakeMysqlDaemon.CurrentPrimaryPosition = replication.Position{
+ primary.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
7: replication.MariadbGTID{
Domain: 7,
@@ -624,7 +624,7 @@ func TestPlannedReparentShardRelayLogError(t *testing.T) {
Sequence: 990,
},
},
- }
+ })
primary.FakeMysqlDaemon.ExpectedExecuteSuperQueryList = []string{
"SUBINSERT INTO _vt.reparent_journal (time_created_ns, action_name, primary_alias, replication_position) VALUES",
}
@@ -697,7 +697,7 @@ func TestPlannedReparentShardRelayLogErrorStartReplication(t *testing.T) {
primary.FakeMysqlDaemon.ReadOnly = false
primary.FakeMysqlDaemon.Replicating = false
primary.FakeMysqlDaemon.ReplicationStatusError = mysql.ErrNotReplica
- primary.FakeMysqlDaemon.CurrentPrimaryPosition = replication.Position{
+ primary.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
7: replication.MariadbGTID{
Domain: 7,
@@ -705,7 +705,7 @@ func TestPlannedReparentShardRelayLogErrorStartReplication(t *testing.T) {
Sequence: 990,
},
},
- }
+ })
primary.FakeMysqlDaemon.ExpectedExecuteSuperQueryList = []string{
"SUBINSERT INTO _vt.reparent_journal (time_created_ns, action_name, primary_alias, replication_position) VALUES",
}
@@ -815,7 +815,7 @@ func TestPlannedReparentShardPromoteReplicaFail(t *testing.T) {
oldPrimary.FakeMysqlDaemon.ReadOnly = false
oldPrimary.FakeMysqlDaemon.Replicating = false
oldPrimary.FakeMysqlDaemon.ReplicationStatusError = mysql.ErrNotReplica
- oldPrimary.FakeMysqlDaemon.CurrentPrimaryPosition = newPrimary.FakeMysqlDaemon.WaitPrimaryPositions[0]
+ oldPrimary.FakeMysqlDaemon.SetPrimaryPositionLocked(newPrimary.FakeMysqlDaemon.WaitPrimaryPositions[0])
oldPrimary.FakeMysqlDaemon.SetReplicationSourceInputs = append(oldPrimary.FakeMysqlDaemon.SetReplicationSourceInputs, topoproto.MysqlAddr(newPrimary.Tablet))
oldPrimary.FakeMysqlDaemon.ExpectedExecuteSuperQueryList = []string{
"FAKE SET SOURCE",
@@ -823,7 +823,7 @@ func TestPlannedReparentShardPromoteReplicaFail(t *testing.T) {
// We call a SetReplicationSource explicitly
"FAKE SET SOURCE",
"START REPLICA",
- // extra SetReplicationSource call due to retry
+ // extra SetReplicationSource call due to retry)
"FAKE SET SOURCE",
"START REPLICA",
}
@@ -885,7 +885,7 @@ func TestPlannedReparentShardPromoteReplicaFail(t *testing.T) {
// retrying should work
newPrimary.FakeMysqlDaemon.PromoteError = nil
- newPrimary.FakeMysqlDaemon.CurrentPrimaryPosition = newPrimary.FakeMysqlDaemon.WaitPrimaryPositions[0]
+ newPrimary.FakeMysqlDaemon.SetPrimaryPositionLocked(newPrimary.FakeMysqlDaemon.WaitPrimaryPositions[0])
// run PlannedReparentShard
err = vp.Run([]string{"PlannedReparentShard", "--wait_replicas_timeout", "10s", "--keyspace_shard", newPrimary.Tablet.Keyspace + "/" + newPrimary.Tablet.Shard, "--new_primary", topoproto.TabletAliasString(newPrimary.Tablet.Alias)})
@@ -922,7 +922,7 @@ func TestPlannedReparentShardSamePrimary(t *testing.T) {
oldPrimary.FakeMysqlDaemon.ReadOnly = true
oldPrimary.FakeMysqlDaemon.Replicating = false
oldPrimary.FakeMysqlDaemon.ReplicationStatusError = mysql.ErrNotReplica
- oldPrimary.FakeMysqlDaemon.CurrentPrimaryPosition = replication.Position{
+ oldPrimary.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
7: replication.MariadbGTID{
Domain: 7,
@@ -930,7 +930,7 @@ func TestPlannedReparentShardSamePrimary(t *testing.T) {
Sequence: 990,
},
},
- }
+ })
oldPrimary.FakeMysqlDaemon.ExpectedExecuteSuperQueryList = []string{
"SUBINSERT INTO _vt.reparent_journal (time_created_ns, action_name, primary_alias, replication_position) VALUES",
}
diff --git a/go/vt/wrangler/testlib/reparent_utils_test.go b/go/vt/wrangler/testlib/reparent_utils_test.go
index ea2e34b66bd..b199a64340a 100644
--- a/go/vt/wrangler/testlib/reparent_utils_test.go
+++ b/go/vt/wrangler/testlib/reparent_utils_test.go
@@ -67,7 +67,7 @@ func TestShardReplicationStatuses(t *testing.T) {
}
// primary action loop (to initialize host and port)
- primary.FakeMysqlDaemon.CurrentPrimaryPosition = replication.Position{
+ primary.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
5: replication.MariadbGTID{
Domain: 5,
@@ -75,12 +75,12 @@ func TestShardReplicationStatuses(t *testing.T) {
Sequence: 892,
},
},
- }
+ })
primary.StartActionLoop(t, wr)
defer primary.StopActionLoop(t)
// replica loop
- replica.FakeMysqlDaemon.CurrentPrimaryPosition = replication.Position{
+ replica.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
5: replication.MariadbGTID{
Domain: 5,
@@ -88,7 +88,7 @@ func TestShardReplicationStatuses(t *testing.T) {
Sequence: 890,
},
},
- }
+ })
replica.FakeMysqlDaemon.CurrentSourceHost = primary.Tablet.MysqlHostname
replica.FakeMysqlDaemon.CurrentSourcePort = primary.Tablet.MysqlPort
replica.FakeMysqlDaemon.SetReplicationSourceInputs = append(replica.FakeMysqlDaemon.SetReplicationSourceInputs, topoproto.MysqlAddr(primary.Tablet))
@@ -207,7 +207,8 @@ func TestSetReplicationSource(t *testing.T) {
require.NoError(t, err, "UpdateShardFields failed")
pos, err := replication.DecodePosition("MySQL56/8bc65c84-3fe4-11ed-a912-257f0fcdd6c9:1-8")
require.NoError(t, err)
- primary.FakeMysqlDaemon.CurrentPrimaryPositionLocked(pos)
+ primary.FakeMysqlDaemon.SetPrimaryPositionLocked(pos)
+ primary.FakeMysqlDaemon.ServerUUID = "8bc65c84-3fe4-11ed-a912-257f0fcdd6c9"
// primary action loop (to initialize host and port)
primary.StartActionLoop(t, wr)
diff --git a/go/vt/wrangler/traffic_switcher_env_test.go b/go/vt/wrangler/traffic_switcher_env_test.go
index 4e58024785d..a99e6ba2c43 100644
--- a/go/vt/wrangler/traffic_switcher_env_test.go
+++ b/go/vt/wrangler/traffic_switcher_env_test.go
@@ -776,7 +776,7 @@ func (tme *testMigraterEnv) createDBClients(ctx context.Context, t *testing.T) {
func (tme *testMigraterEnv) setPrimaryPositions() {
for _, primary := range tme.sourcePrimaries {
- primary.FakeMysqlDaemon.CurrentPrimaryPosition = replication.Position{
+ primary.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
5: replication.MariadbGTID{
Domain: 5,
@@ -784,10 +784,10 @@ func (tme *testMigraterEnv) setPrimaryPositions() {
Sequence: 892,
},
},
- }
+ })
}
for _, primary := range tme.targetPrimaries {
- primary.FakeMysqlDaemon.CurrentPrimaryPosition = replication.Position{
+ primary.FakeMysqlDaemon.SetPrimaryPositionLocked(replication.Position{
GTIDSet: replication.MariadbGTIDSet{
5: replication.MariadbGTID{
Domain: 5,
@@ -795,7 +795,7 @@ func (tme *testMigraterEnv) setPrimaryPositions() {
Sequence: 893,
},
},
- }
+ })
}
}
diff --git a/java/client/pom.xml b/java/client/pom.xml
index fc78d17b564..1cb1ecb5862 100644
--- a/java/client/pom.xml
+++ b/java/client/pom.xml
@@ -5,7 +5,7 @@
io.vitess
vitess-parent
- 21.0.0-SNAPSHOT
+ 22.0.0-SNAPSHOT
vitess-client
diff --git a/java/client/src/main/java/io/vitess/client/VTGateBlockingConnection.java b/java/client/src/main/java/io/vitess/client/VTGateBlockingConnection.java
index 4c24c12bfcf..8a19659ef65 100644
--- a/java/client/src/main/java/io/vitess/client/VTGateBlockingConnection.java
+++ b/java/client/src/main/java/io/vitess/client/VTGateBlockingConnection.java
@@ -111,9 +111,6 @@ public Cursor streamExecute(Context ctx,
return vtGateConnection.streamExecute(ctx, query, bindVars, vtSession);
}
- /**
- * @inheritDoc
- */
@Override
public void close() throws IOException {
vtGateConnection.close();
diff --git a/java/client/src/main/java/io/vitess/client/VTGateConnection.java b/java/client/src/main/java/io/vitess/client/VTGateConnection.java
index ee2fb270a9a..683f4bf5f15 100644
--- a/java/client/src/main/java/io/vitess/client/VTGateConnection.java
+++ b/java/client/src/main/java/io/vitess/client/VTGateConnection.java
@@ -205,9 +205,6 @@ StreamIterator getVStream(Context ctx, VStreamRequest vstreamRe
return client.getVStream(ctx, request);
}
- /**
- * @inheritDoc
- */
@Override
public void close() throws IOException {
client.close();
diff --git a/java/client/src/main/java/io/vitess/client/VTSession.java b/java/client/src/main/java/io/vitess/client/VTSession.java
index 9974e5f034a..3b52b4d3c2e 100644
--- a/java/client/src/main/java/io/vitess/client/VTSession.java
+++ b/java/client/src/main/java/io/vitess/client/VTSession.java
@@ -103,7 +103,7 @@ public Query.ExecuteOptions.TransactionIsolation getTransactionIsolation() {
/**
* Sets this session's transaction isolation level.
*
- * @param Transaction Isolation Level of the Session
+ * @param isolation Isolation Level of the Session
*/
public void setTransactionIsolation(Query.ExecuteOptions.TransactionIsolation isolation) {
this.session = this.session.toBuilder()
diff --git a/java/client/src/main/java/io/vitess/client/grpc/tls/TlsOptions.java b/java/client/src/main/java/io/vitess/client/grpc/tls/TlsOptions.java
index ffd570d413b..4defac70378 100644
--- a/java/client/src/main/java/io/vitess/client/grpc/tls/TlsOptions.java
+++ b/java/client/src/main/java/io/vitess/client/grpc/tls/TlsOptions.java
@@ -17,11 +17,10 @@
package io.vitess.client.grpc.tls;
import java.io.File;
-import java.net.InetSocketAddress;
/**
* A wrapper type holding TLS-related fields for the
- * {@link io.vitess.client.RpcClientFactory#createTls(InetSocketAddress, TlsOptions)} method, so
+ * createTls(InetSocketAddress, TlsOptions) method, so
* that this method won't have an unwieldy number of direct parameters.
*
* This path uses a builder pattern style:
diff --git a/java/example/pom.xml b/java/example/pom.xml
index c2b226b6806..fa3220f51bd 100644
--- a/java/example/pom.xml
+++ b/java/example/pom.xml
@@ -5,7 +5,7 @@
io.vitess
vitess-parent
- 21.0.0-SNAPSHOT
+ 22.0.0-SNAPSHOT
vitess-example
diff --git a/java/grpc-client/pom.xml b/java/grpc-client/pom.xml
index 41bd4de8291..55c406b0e8f 100644
--- a/java/grpc-client/pom.xml
+++ b/java/grpc-client/pom.xml
@@ -5,7 +5,7 @@
io.vitess
vitess-parent
- 21.0.0-SNAPSHOT
+ 22.0.0-SNAPSHOT
vitess-grpc-client
@@ -51,6 +51,10 @@
io.grpc
grpc-api
+
+ io.grpc
+ grpc-inprocess
+
io.netty
netty-handler
diff --git a/java/grpc-client/src/main/java/io/vitess/client/grpc/RetryingInterceptor.java b/java/grpc-client/src/main/java/io/vitess/client/grpc/RetryingInterceptor.java
index 9323a1b00d4..301ddaed282 100644
--- a/java/grpc-client/src/main/java/io/vitess/client/grpc/RetryingInterceptor.java
+++ b/java/grpc-client/src/main/java/io/vitess/client/grpc/RetryingInterceptor.java
@@ -39,8 +39,8 @@
/**
* RetryingInterceptor is used for retrying certain classes of failed requests in the underlying
- * gRPC connection. At this time it handles {@link MethodDescriptor.MethodType.UNARY} requests with
- * status {@link Status.Code.UNAVAILABLE}, which is according to the spec meant to be a transient
+ * gRPC connection. At this time it handles unary requests with
+ * status Unavailable, which is according to the spec meant to be a transient
* error. This class can be configured with {@link RetryingInterceptorConfig} to determine what
* level of exponential backoff to apply to the handled types of failing requests.
*
diff --git a/java/grpc-client/src/test/java/io/vitess/client/grpc/RetryingInterceptorTest.java b/java/grpc-client/src/test/java/io/vitess/client/grpc/RetryingInterceptorTest.java
index 376a920ad31..9b3644139fd 100644
--- a/java/grpc-client/src/test/java/io/vitess/client/grpc/RetryingInterceptorTest.java
+++ b/java/grpc-client/src/test/java/io/vitess/client/grpc/RetryingInterceptorTest.java
@@ -55,6 +55,8 @@ public void testNoopConfigPassesThrough() throws ExecutionException, Interrupted
Assert.fail("Should have failed after 1 attempt");
} catch (Exception e) {
Assert.assertEquals(1, forceRetryNTimesInterceptor.getNumRetryableFailures());
+ }finally {
+ channel.shutdownNow();
}
}
@@ -75,6 +77,8 @@ public void testRetryAfterBackoff() throws ExecutionException, InterruptedExcept
} catch (Exception e) {
e.printStackTrace();
Assert.assertEquals(3, forceRetryNTimesInterceptor.getNumRetryableFailures());
+ } finally {
+ channel.shutdownNow();
}
}
@@ -95,6 +99,8 @@ public void testRetryDeadlineExceeded() throws ExecutionException, InterruptedEx
Assert.fail("Should have failed");
} catch (Exception e) {
Assert.assertEquals(1, forceRetryNTimesInterceptor.getNumRetryableFailures());
+ }finally {
+ channel.shutdownNow();
}
}
diff --git a/java/jdbc/pom.xml b/java/jdbc/pom.xml
index 49a5d61779b..dd554e64501 100644
--- a/java/jdbc/pom.xml
+++ b/java/jdbc/pom.xml
@@ -5,7 +5,7 @@
io.vitess
vitess-parent
- 21.0.0-SNAPSHOT
+ 22.0.0-SNAPSHOT
vitess-jdbc
diff --git a/java/jdbc/src/main/java/io/vitess/jdbc/VitessConnection.java b/java/jdbc/src/main/java/io/vitess/jdbc/VitessConnection.java
index 5e51ff908dc..f4bc43ed65e 100644
--- a/java/jdbc/src/main/java/io/vitess/jdbc/VitessConnection.java
+++ b/java/jdbc/src/main/java/io/vitess/jdbc/VitessConnection.java
@@ -105,7 +105,7 @@ public Statement createStatement() throws SQLException {
}
/**
- * Create PreparedStatement for the given connection & sql
+ * Create PreparedStatement for the given connection and sql
*
* @param sql - Sql Statement
* @return PreparedStatement Object
@@ -338,7 +338,6 @@ public void setTransactionIsolation(int level) throws SQLException {
/**
* Return Warnings
- *
* TODO: Not implementing as Error is Thrown when occurred
*
* @return SQLWarning or null
diff --git a/java/jdbc/src/main/java/io/vitess/jdbc/VitessDriver.java b/java/jdbc/src/main/java/io/vitess/jdbc/VitessDriver.java
index 5b6a889103f..a77e1ec0860 100644
--- a/java/jdbc/src/main/java/io/vitess/jdbc/VitessDriver.java
+++ b/java/jdbc/src/main/java/io/vitess/jdbc/VitessDriver.java
@@ -60,12 +60,10 @@ public Connection connect(String url, Properties info) throws SQLException {
/**
* Checks whether a given url is in a valid format.
- *
* The current uri format is: jdbc:vitess://[host]:[port]
*
* @param url the URL of the database
* @return true, if this driver understands the given URL; false, otherwise
- *
* TODO: Write a better regex
*/
@Override
diff --git a/java/jdbc/src/main/java/io/vitess/jdbc/VitessJDBCUrl.java b/java/jdbc/src/main/java/io/vitess/jdbc/VitessJDBCUrl.java
index 6234d037807..e6a1b0187dd 100644
--- a/java/jdbc/src/main/java/io/vitess/jdbc/VitessJDBCUrl.java
+++ b/java/jdbc/src/main/java/io/vitess/jdbc/VitessJDBCUrl.java
@@ -93,7 +93,6 @@ public String toString() {
* trustAlias
=alias_under_which_certificate_chain_is_stored (if not set,
* then the first valid X509Certificate
found in the trustStore will be used)
*
- *
*
*
If useSSL=true
, and any of these additional properties are not set on the JDBC
* URL, then the driver will look to see if these corresponding property was set at JVM startup
@@ -109,7 +108,6 @@ public String toString() {
*
-Djavax.net.ssl.trustStorePassword
* -Djavax.net.ssl.trustStoreAlias
*
- *
*
*
See:
* https://mariadb.com/kb/en/mariadb/about-mariadb-connector-j/#tls-ssl
diff --git a/java/jdbc/src/main/java/io/vitess/jdbc/VitessStatement.java b/java/jdbc/src/main/java/io/vitess/jdbc/VitessStatement.java
index ddaf813af2d..90a83b56485 100644
--- a/java/jdbc/src/main/java/io/vitess/jdbc/VitessStatement.java
+++ b/java/jdbc/src/main/java/io/vitess/jdbc/VitessStatement.java
@@ -241,7 +241,6 @@ public void setQueryTimeout(int seconds) throws SQLException {
/**
* Return Warnings
- *
* Not implementing as Error is Thrown when occurred
*
* @return SQLWarning or null
diff --git a/java/jdbc/src/main/java/io/vitess/util/charset/CharsetMapping.java b/java/jdbc/src/main/java/io/vitess/util/charset/CharsetMapping.java
index c1388bfb7bb..343ae0e90eb 100644
--- a/java/jdbc/src/main/java/io/vitess/util/charset/CharsetMapping.java
+++ b/java/jdbc/src/main/java/io/vitess/util/charset/CharsetMapping.java
@@ -541,6 +541,7 @@ public class CharsetMapping {
/**
* MySQL charset could map to several Java encodings. So here we choose the one according to next
* rules:
+ *
* if there is no static mapping for this charset then return javaEncoding value as is
* because this could be a custom charset for example
* if static mapping exists and javaEncoding equals to one of Java encoding canonical names
@@ -550,6 +551,7 @@ public class CharsetMapping {
* if static mapping exists and javaEncoding doesn't match any Java encoding canonical
* names or aliases available for this mapping then return default Java encoding (the first in
* mapping list)
+ *
*/
public static String getJavaEncodingForCollationIndex(Integer collationIndex,
String javaEncoding) {
diff --git a/java/pom.xml b/java/pom.xml
index 8d8f6ab9275..6742258a6b8 100644
--- a/java/pom.xml
+++ b/java/pom.xml
@@ -11,7 +11,7 @@
io.vitess
vitess-parent
- 21.0.0-SNAPSHOT
+ 22.0.0-SNAPSHOT
pom
Vitess Java Client libraries [Parent]
@@ -66,16 +66,16 @@
UTF-8
- 1.57.1
+ 1.67.1
- 4.1.94.Final
- 2.0.61.Final
+ 4.1.110.Final
+ 2.0.65.Final
- 3.25.5
+ 4.28.3
3.24.3
3.0.0
- 2.17.1
+ 2.24.1
@@ -89,12 +89,12 @@
com.google.code.gson
gson
- 2.8.9
+ 2.11.0
com.google.guava
guava
- 32.0.0-jre
+ 33.3.1-jre
com.google.protobuf
@@ -109,7 +109,7 @@
commons-io
commons-io
- 2.7
+ 2.17.0
@@ -122,6 +122,11 @@
grpc-netty
${grpc.version}
+
+ io.grpc
+ grpc-inprocess
+ ${grpc.version}
+
io.grpc
grpc-stub
@@ -180,7 +185,7 @@
joda-time
joda-time
- 2.10
+ 2.13.0
@@ -227,7 +232,7 @@
org.apache.maven.plugins
maven-compiler-plugin
- 3.8.1
+ 3.13.0
1.8
1.8
@@ -288,7 +293,7 @@
org.sonatype.plugins
nexus-staging-maven-plugin
- 1.6.13
+ 1.7.0
true
ossrh
@@ -299,7 +304,7 @@
org.apache.maven.plugins
maven-source-plugin
- 2.4
+ 3.3.1
attach-sources
@@ -312,7 +317,7 @@
org.apache.maven.plugins
maven-javadoc-plugin
- 2.10.4
+ 3.3.1
attach-javadocs
@@ -325,7 +330,7 @@
org.apache.maven.plugins
maven-gpg-plugin
- 1.6
+ 3.2.7
sign-artifacts
diff --git a/proto/binlogdata.proto b/proto/binlogdata.proto
index 595760dcd52..e1df792776b 100644
--- a/proto/binlogdata.proto
+++ b/proto/binlogdata.proto
@@ -353,6 +353,10 @@ message FieldEvent {
repeated query.Field fields = 2;
string keyspace = 3;
string shard = 4;
+
+ // Field numbers in the gap between shard (4) and enum_set_string_values
+ // (25) are NOT reserved and can be used.
+
// Are ENUM and SET field values already mapped to strings in the ROW
// events? This allows us to transition VTGate VStream consumers from
// the pre v20 behavior of having to do this mapping themselves to the
@@ -362,6 +366,9 @@ message FieldEvent {
// vstreams managed by the vstreamManager.
bool enum_set_string_values = 25;
bool is_internal_table = 26; // set for sidecardb tables
+
+ // Add new members in the field number gap between shard (4) and
+ // enum_set_string_values (25).
}
// ShardGtid contains the GTID position for one shard.
diff --git a/proto/query.proto b/proto/query.proto
index 917883e5ad8..dd690788004 100644
--- a/proto/query.proto
+++ b/proto/query.proto
@@ -610,8 +610,16 @@ message StartCommitRequest {
string dtid = 5;
}
+enum StartCommitState {
+ Unknown = 0;
+ Fail = 1;
+ Success = 2;
+}
+
// StartCommitResponse is the returned value from StartCommit
-message StartCommitResponse {}
+message StartCommitResponse {
+ StartCommitState state = 1;
+}
// SetRollbackRequest is the payload to SetRollback
message SetRollbackRequest {
diff --git a/proto/replicationdata.proto b/proto/replicationdata.proto
index 1a8b608f984..e788fc64bc3 100644
--- a/proto/replicationdata.proto
+++ b/proto/replicationdata.proto
@@ -50,6 +50,7 @@ message Status {
bool has_replication_filters = 22;
bool ssl_allowed = 23;
bool replication_lag_unknown = 24;
+ bool backup_running = 25;
}
// Configuration holds replication configuration information gathered from performance_schema and global variables.
@@ -77,6 +78,7 @@ enum StopReplicationMode {
message PrimaryStatus {
string position = 1;
string file_position = 2;
+ string server_uuid = 3;
}
// FullStatus contains the full status of MySQL including the replication information, semi-sync information, GTID information among others
diff --git a/proto/tabletmanagerdata.proto b/proto/tabletmanagerdata.proto
index 772501d8c57..bb20e712e7f 100644
--- a/proto/tabletmanagerdata.proto
+++ b/proto/tabletmanagerdata.proto
@@ -326,6 +326,18 @@ message ReadTransactionResponse {
query.TransactionMetadata transaction = 1;
}
+message GetTransactionInfoRequest {
+ string dtid = 1;
+}
+
+message GetTransactionInfoResponse {
+ string state = 1;
+ string message = 2;
+ int64 time_created = 3;
+ repeated string statements = 4;
+}
+
+
message ConcludeTransactionRequest {
string dtid = 1;
bool mm = 2;
@@ -448,6 +460,13 @@ message PopulateReparentJournalRequest {
message PopulateReparentJournalResponse {
}
+message ReadReparentJournalInfoRequest {
+}
+
+message ReadReparentJournalInfoResponse {
+ int32 length = 1;
+}
+
message InitReplicaRequest {
topodata.TabletAlias parent = 1;
string replication_position = 2;
@@ -605,6 +624,18 @@ message CreateVReplicationWorkflowResponse {
query.QueryResult result = 1;
}
+message DeleteTableDataRequest {
+ // The key is the table that we want to delete data from.
+ // The value is the filter or WHERE clause to use when deleting
+ // data in the table.
+ map table_filters = 1;
+ // BatchSize is the number of rows to delete in a single batch.
+ int64 batch_size = 2;
+}
+
+message DeleteTableDataResponse {
+}
+
message DeleteVReplicationWorkflowRequest {
string workflow = 1;
}
@@ -908,3 +939,12 @@ message GetThrottlerStatusResponse {
// RecentApps is a map of app names to their recent check status
map recent_apps = 18;
}
+
+message ChangeTagsRequest {
+ map tags = 1;
+ bool replace = 2;
+}
+
+message ChangeTagsResponse {
+ map tags = 1;
+}
diff --git a/proto/tabletmanagerservice.proto b/proto/tabletmanagerservice.proto
index 0fe337c75c0..3dac1aa1ee8 100644
--- a/proto/tabletmanagerservice.proto
+++ b/proto/tabletmanagerservice.proto
@@ -57,6 +57,9 @@ service TabletManager {
rpc SetReadWrite(tabletmanagerdata.SetReadWriteRequest) returns (tabletmanagerdata.SetReadWriteResponse) {};
+ // ChangeTags asks the remote tablet to change its tags
+ rpc ChangeTags(tabletmanagerdata.ChangeTagsRequest) returns (tabletmanagerdata.ChangeTagsResponse) {};
+
// ChangeType asks the remote tablet to change its type
rpc ChangeType(tabletmanagerdata.ChangeTypeRequest) returns (tabletmanagerdata.ChangeTypeResponse) {};
@@ -94,6 +97,8 @@ service TabletManager {
rpc ReadTransaction(tabletmanagerdata.ReadTransactionRequest) returns (tabletmanagerdata.ReadTransactionResponse) {};
+ rpc GetTransactionInfo(tabletmanagerdata.GetTransactionInfoRequest) returns (tabletmanagerdata.GetTransactionInfoResponse) {};
+
rpc ConcludeTransaction(tabletmanagerdata.ConcludeTransactionRequest) returns (tabletmanagerdata.ConcludeTransactionResponse) {};
rpc MysqlHostMetrics(tabletmanagerdata.MysqlHostMetricsRequest) returns (tabletmanagerdata.MysqlHostMetricsResponse) {};
@@ -133,6 +138,7 @@ service TabletManager {
// VReplication API
rpc CreateVReplicationWorkflow(tabletmanagerdata.CreateVReplicationWorkflowRequest) returns (tabletmanagerdata.CreateVReplicationWorkflowResponse) {};
+ rpc DeleteTableData(tabletmanagerdata.DeleteTableDataRequest) returns(tabletmanagerdata.DeleteTableDataResponse) {}
rpc DeleteVReplicationWorkflow(tabletmanagerdata.DeleteVReplicationWorkflowRequest) returns(tabletmanagerdata.DeleteVReplicationWorkflowResponse) {};
rpc HasVReplicationWorkflows(tabletmanagerdata.HasVReplicationWorkflowsRequest) returns(tabletmanagerdata.HasVReplicationWorkflowsResponse) {};
rpc ReadVReplicationWorkflow(tabletmanagerdata.ReadVReplicationWorkflowRequest) returns(tabletmanagerdata.ReadVReplicationWorkflowResponse) {};
@@ -160,6 +166,9 @@ service TabletManager {
// reparent journal
rpc PopulateReparentJournal(tabletmanagerdata.PopulateReparentJournalRequest) returns (tabletmanagerdata.PopulateReparentJournalResponse) {};
+ // ReadReparentJournalInfo reads the information from reparent journal
+ rpc ReadReparentJournalInfo(tabletmanagerdata.ReadReparentJournalInfoRequest) returns (tabletmanagerdata.ReadReparentJournalInfoResponse) {};
+
// InitReplica tells the tablet to reparent to the primary unconditionally
rpc InitReplica(tabletmanagerdata.InitReplicaRequest) returns (tabletmanagerdata.InitReplicaResponse) {};
diff --git a/proto/vtadmin.proto b/proto/vtadmin.proto
index a8e6775de98..963d1fa5779 100644
--- a/proto/vtadmin.proto
+++ b/proto/vtadmin.proto
@@ -44,6 +44,8 @@ service VTAdmin {
// CompleteSchemaMigration completes one or all migrations in the given
// cluster executed with --postpone-completion.
rpc CompleteSchemaMigration(CompleteSchemaMigrationRequest) returns (vtctldata.CompleteSchemaMigrationResponse) {};
+ // ConcludeTransaction concludes a distributed transaction identified by the provided dtid.
+ rpc ConcludeTransaction(ConcludeTransactionRequest) returns (vtctldata.ConcludeTransactionResponse) {};
// CreateKeyspace creates a new keyspace in the given cluster.
rpc CreateKeyspace(CreateKeyspaceRequest) returns (CreateKeyspaceResponse) {};
// CreateShard creates a new shard in the given cluster and keyspace.
@@ -114,6 +116,8 @@ service VTAdmin {
rpc GetTablets(GetTabletsRequest) returns (GetTabletsResponse) {};
// GetTopologyPath returns the cell located at the specified path in the topology server.
rpc GetTopologyPath(GetTopologyPathRequest) returns (vtctldata.GetTopologyPathResponse){};
+ // GetTransactionInfo returns the information about a single transaction.
+ rpc GetTransactionInfo(GetTransactionInfoRequest) returns (vtctldata.GetTransactionInfoResponse){};
// GetUnresolvedTransactions returns the unresolved transactions for the request.
rpc GetUnresolvedTransactions(GetUnresolvedTransactionsRequest) returns (vtctldata.GetUnresolvedTransactionsResponse){};
// GetVSchema returns a VSchema for the specified keyspace in the specified
@@ -137,9 +141,15 @@ service VTAdmin {
// LaunchSchemaMigration launches one or all migrations in the given
// cluster executed with --postpone-launch.
rpc LaunchSchemaMigration(LaunchSchemaMigrationRequest) returns (vtctldata.LaunchSchemaMigrationResponse) {};
+ // MoveTablesComplete completes the move and cleans up the workflow and
+ // its related artifacts.
+ rpc MoveTablesComplete(MoveTablesCompleteRequest) returns (vtctldata.MoveTablesCompleteResponse) {};
// MoveTablesCreate creates a workflow which moves one or more tables from a
// source keyspace to a target keyspace.
rpc MoveTablesCreate(MoveTablesCreateRequest) returns (vtctldata.WorkflowStatusResponse) {};
+ // MaterializeCreate creates a workflow to materialize one or more tables
+ // from a source keyspace to a target keyspace using a provided expressions.
+ rpc MaterializeCreate(MaterializeCreateRequest) returns (vtctldata.MaterializeCreateResponse) {};
// PingTablet checks that the specified tablet is awake and responding to
// RPCs. This command can be blocked by other in-flight operations.
rpc PingTablet(PingTabletRequest) returns (PingTabletResponse) {};
@@ -171,6 +181,8 @@ service VTAdmin {
rpc RetrySchemaMigration(RetrySchemaMigrationRequest) returns (vtctldata.RetrySchemaMigrationResponse) {};
// RunHealthCheck runs a healthcheck on the tablet.
rpc RunHealthCheck(RunHealthCheckRequest) returns (RunHealthCheckResponse) {};
+ // ReshardCreate creates a workflow to reshard a keyspace.
+ rpc ReshardCreate(ReshardCreateRequest) returns (vtctldata.WorkflowStatusResponse) {};
// SetReadOnly sets the tablet to read-only mode.
rpc SetReadOnly(SetReadOnlyRequest) returns (SetReadOnlyResponse) {};
// SetReadWrite sets the tablet to read-write mode.
@@ -208,9 +220,15 @@ service VTAdmin {
rpc ValidateVersionKeyspace(ValidateVersionKeyspaceRequest) returns (vtctldata.ValidateVersionKeyspaceResponse) {};
// ValidateVersionShard validates that the version on the primary matches all of the replicas.
rpc ValidateVersionShard(ValidateVersionShardRequest) returns (vtctldata.ValidateVersionShardResponse) {};
+ rpc VDiffCreate(VDiffCreateRequest) returns (vtctldata.VDiffCreateResponse) {};
+ rpc VDiffShow(VDiffShowRequest) returns (VDiffShowResponse) {};
// VTExplain provides information on how Vitess plans to execute a
// particular query.
rpc VTExplain(VTExplainRequest) returns (VTExplainResponse) {};
+ // WorkflowDelete deletes a vreplication workflow.
+ rpc WorkflowDelete(WorkflowDeleteRequest) returns (vtctldata.WorkflowDeleteResponse) {};
+ // WorkflowSwitchTraffic switches traffic for a VReplication workflow.
+ rpc WorkflowSwitchTraffic(WorkflowSwitchTrafficRequest) returns (vtctldata.WorkflowSwitchTrafficResponse) {};
}
/* Data types */
@@ -356,11 +374,25 @@ message Workflow {
vtctldata.Workflow workflow = 3;
}
+message WorkflowDeleteRequest {
+ string cluster_id = 1;
+ vtctldata.WorkflowDeleteRequest request = 2;
+}
+
+message WorkflowSwitchTrafficRequest {
+ string cluster_id = 1;
+ vtctldata.WorkflowSwitchTrafficRequest request = 2;
+}
+
/* Request/Response types */
message ApplySchemaRequest {
string cluster_id = 1;
- vtctldata.ApplySchemaRequest request = 2;
+ // Request.Sql will be overriden by this Sql field.
+ string sql = 2;
+ // Request.CallerId will be overriden by this CallerId field.
+ string caller_id = 3;
+ vtctldata.ApplySchemaRequest request = 4;
}
message CancelSchemaMigrationRequest {
@@ -378,6 +410,11 @@ message CompleteSchemaMigrationRequest {
vtctldata.CompleteSchemaMigrationRequest request = 2;
}
+message ConcludeTransactionRequest {
+ string cluster_id = 1;
+ string dtid = 2;
+}
+
message CreateKeyspaceRequest {
string cluster_id = 1;
vtctldata.CreateKeyspaceRequest options = 2;
@@ -624,9 +661,15 @@ message GetTopologyPathRequest {
string path = 2;
}
+message GetTransactionInfoRequest {
+ string cluster_id = 1;
+ vtctldata.GetTransactionInfoRequest request = 2;
+}
+
message GetUnresolvedTransactionsRequest {
string cluster_id = 1;
string keyspace = 2;
+ int64 abandon_age = 3;
}
message GetVSchemaRequest {
@@ -706,6 +749,19 @@ message LaunchSchemaMigrationRequest {
vtctldata.LaunchSchemaMigrationRequest request = 2;
}
+message MaterializeCreateRequest {
+ string cluster_id = 1;
+ // TableSettings is a JSON string defining what tables to materialize using
+ // what select statements.
+ string table_settings = 2;
+ vtctldata.MaterializeCreateRequest request = 3;
+}
+
+message MoveTablesCompleteRequest {
+ string cluster_id = 1;
+ vtctldata.MoveTablesCompleteRequest request = 2;
+}
+
message MoveTablesCreateRequest {
string cluster_id = 1;
vtctldata.MoveTablesCreateRequest request = 2;
@@ -909,6 +965,11 @@ message RunHealthCheckResponse {
Cluster cluster = 2;
}
+message ReshardCreateRequest {
+ string cluster_id = 1;
+ vtctldata.ReshardCreateRequest request = 2;
+}
+
message SetReadOnlyRequest {
topodata.TabletAlias alias = 1;
repeated string cluster_ids = 2;
@@ -999,6 +1060,34 @@ message ValidateVersionShardRequest {
string shard = 3;
}
+message VDiffCreateRequest {
+ string cluster_id = 1;
+ vtctldata.VDiffCreateRequest request = 2;
+}
+
+message VDiffShowRequest {
+ string cluster_id = 1;
+ vtctldata.VDiffShowRequest request = 2;
+}
+
+message VDiffProgress {
+ double percentage = 1;
+ string eta = 2;
+}
+
+message VDiffShardReport {
+ string state = 1;
+ int64 rows_compared = 2;
+ bool has_mismatch = 3;
+ string started_at = 4;
+ string completed_at = 5;
+ VDiffProgress progress = 6;
+}
+
+message VDiffShowResponse {
+ map shard_report = 1;
+}
+
message VTExplainRequest {
string cluster = 1;
string keyspace = 2;
diff --git a/proto/vtctldata.proto b/proto/vtctldata.proto
index 49b541ea2c5..b1e5fb215bc 100644
--- a/proto/vtctldata.proto
+++ b/proto/vtctldata.proto
@@ -209,16 +209,25 @@ message Shard {
topodata.Shard shard = 3;
}
+enum ShardedAutoIncrementHandling {
+ LEAVE = 0;
+ REMOVE = 1;
+ REPLACE = 2;
+}
+
message WorkflowOptions {
string tenant_id = 1;
// Remove auto_increment clauses on tables when moving them to a sharded
- // keyspace.
- bool strip_sharded_auto_increment = 2;
+ // keyspace and optionally replace them with vschema AutoIncrement
+ // definitions.
+ ShardedAutoIncrementHandling sharded_auto_increment_handling = 2;
// Shards on which vreplication streams in the target keyspace are created for this workflow and to which the data
// from the source will be vreplicated.
repeated string shards = 3;
map config = 4;
-
+ // Where to create any related schema and vschema objects such as
+ // sequence tables.
+ string global_keyspace = 5;
}
// TODO: comment the hell out of this.
@@ -488,6 +497,17 @@ message CancelSchemaMigrationResponse {
map rows_affected_by_shard = 1;
}
+message ChangeTabletTagsRequest {
+ topodata.TabletAlias tablet_alias = 1;
+ map tags = 2;
+ bool replace = 3;
+}
+
+message ChangeTabletTagsResponse {
+ map before_tags = 1;
+ map after_tags = 2;
+}
+
message ChangeTabletTypeRequest {
topodata.TabletAlias tablet_alias = 1;
topodata.TabletType db_type = 2;
@@ -687,6 +707,9 @@ message EmergencyReparentShardRequest {
// WaitForAllTablets makes ERS wait for a response from all the tablets before proceeding.
// Useful when all the tablets are up and reachable.
bool wait_for_all_tablets = 7;
+ // ExpectedPrimary is the optional alias we expect to be the current primary in order for
+ // the reparent operation to succeed.
+ topodata.TabletAlias expected_primary = 8;
}
message EmergencyReparentShardResponse {
@@ -1117,6 +1140,24 @@ message GetUnresolvedTransactionsResponse {
repeated query.TransactionMetadata transactions = 1;
}
+message GetTransactionInfoRequest {
+ string dtid = 1;
+}
+
+message ShardTransactionState {
+ string shard = 1;
+ string state = 2;
+ string message = 3;
+ int64 time_created = 4;
+ repeated string statements = 5;
+}
+
+message GetTransactionInfoResponse {
+ query.TransactionMetadata metadata = 1;
+ repeated ShardTransactionState shard_states = 2;
+}
+
+
message ConcludeTransactionRequest {
string dtid = 1;
repeated query.Target participants = 2;
@@ -1383,6 +1424,9 @@ message PlannedReparentShardRequest {
vttime.Duration tolerable_replication_lag = 6;
// AllowCrossCellPromotion allows cross cell promotion,
bool allow_cross_cell_promotion = 7;
+ // ExpectedPrimary is the optional alias we expect to be the current primary in order for
+ // the reparent operation to succeed.
+ topodata.TabletAlias expected_primary = 8;
}
message PlannedReparentShardResponse {
@@ -1870,27 +1914,85 @@ message ValidateVSchemaResponse {
}
message VDiffCreateRequest {
+ // The name of the workflow that we're diffing tables for.
string workflow = 1;
+ // The keyspace where the vreplication workflow is running.
string target_keyspace = 2;
+ // A unique identifier for the vdiff.
+ // If empty, a new UUID will be generated.
string uuid = 3;
+ // The cells to look for source tablets in.
+ // If empty, all cells are used.
repeated string source_cells = 4;
+ // The cells to look for target tablets in.
+ // If empty, all cells are used.
repeated string target_cells = 5;
+ // The tablet types to use when searching for tablets to use when streaming
+ // results.
+ // A default value of "replica,rdonly,primary" is used by the tablet picker.
repeated topodata.TabletType tablet_types = 6;
+ // When performing source tablet selection, look for candidates in the type
+ // order as they are listed in the tablet_types value (or the default of
+ // "replica,rdonly,primary" that the tablet picker uses).
+ // The default is ANY (0) and you can use INORDER (1) to e.g. ensure that a
+ // primary tablet is only used if there are no available replica or rdonly
+ // tablets.
tabletmanagerdata.TabletSelectionPreference tablet_selection_preference = 7;
+ // The tables to compare. If empty, all tables in the workflow are compared.
repeated string tables = 8;
+ // The maximum number of rows to compare for each table on each shard.
+ // The default is a max int64 value: 2^63 - 1 or 9,223,372,036,854,775,807.
int64 limit = 9;
+ // How long to wait for the relevant vreplication stream(s) to catch up when
+ // attempting to setup the table snapshots on the source and target to use for
+ // the diff on each shard.
+ // The default is 30s.
vttime.Duration filtered_replication_wait_time = 10;
+ // Include the MySQL query used for the diff in the report that is stored on
+ // each shard primary tablet in the _vt.vdiff_table records.
bool debug_query = 11;
+ // Only show the Primary Key columns in any row diff output. You would
+ // typically want to use this if you set the max_sample_rows very high.
bool only_p_ks = 12;
+ // Update the table statistics, using ANALYZE TABLE, on each table involved
+ // in the vdiff during initialization on each target shard. This will ensure
+ // that progress estimates are as accurate as possible -- but it does involve
+ // locks and can potentially impact query processing on the target keyspace.
bool update_table_stats = 13;
+ // If there are collation differences between the source and target, you can
+ // have rows that are identical but simply returned in a different order from
+ // MySQL. We will do a second pass to compare the rows for any actual
+ // differences in this case and this flag allows you to control the resources
+ // used for this operation.
+ // The default is 0, comparing no extra rows.
int64 max_extra_rows_to_compare = 14;
+ // Wait for the vdiff to complete before returning (making the call synchronous
+ // vs asynchronous by default).
bool wait = 15;
+ // When wait is true, this is how frequently the vdiff progress will be shown.
vttime.Duration wait_update_interval = 16;
+ // Automatically retry the vdiff if we encounter an error. This should almost
+ // always be set to true (default is false).
bool auto_retry = 17;
+ // Include additional information in the vdiff report that is produced and
+ // stored on each target shard primary's _vt sidecar database.
bool verbose = 18;
+ // The maximum number of rows to include in the row diff report (when
+ // differences are found) for each table on each shard.
+ // The default is 0, which will include no sample rows that differed.
int64 max_report_sample_rows = 19;
+ // The maximum time that a diff of a single table can run on each target shard
+ // before it is stopped and then later resumed from where we left off. This
+ // can be helpful in limiting the impact of holding open that large transaction
+ // where we scan up to every row in the table.
+ // The default is 0 or no limit.
vttime.Duration max_diff_duration = 20;
+ // At what length should we truncate the column values in the row diff report
+ // generated for each table on each shard when differences are detected.
+ // The default is 0, meaning do not truncate.
int64 row_diff_column_truncate_at = 21;
+ // Auto start the vdiff after creating it.
+ // The default is true if no value is specified.
optional bool auto_start = 22;
}
@@ -1948,6 +2050,10 @@ message WorkflowDeleteRequest {
bool keep_data = 3;
bool keep_routing_rules = 4;
repeated string shards = 5;
+ // The max records to delete from the moved tables when cleaning
+ // up the migrated data. This is only used with multi-tenant
+ // MoveTables migrations.
+ int64 delete_batch_size = 6;
}
message WorkflowDeleteResponse {
diff --git a/proto/vtctlservice.proto b/proto/vtctlservice.proto
index 23f00c2a376..3133d4fb4e1 100644
--- a/proto/vtctlservice.proto
+++ b/proto/vtctlservice.proto
@@ -58,6 +58,8 @@ service Vtctld {
rpc BackupShard(vtctldata.BackupShardRequest) returns (stream vtctldata.BackupResponse) {};
// CancelSchemaMigration cancels one or all migrations, terminating any running ones as needed.
rpc CancelSchemaMigration(vtctldata.CancelSchemaMigrationRequest) returns (vtctldata.CancelSchemaMigrationResponse) {};
+ // ChangeTabletTags changes the tags of the specified tablet, if possible.
+ rpc ChangeTabletTags(vtctldata.ChangeTabletTagsRequest) returns (vtctldata.ChangeTabletTagsResponse) {};
// ChangeTabletType changes the db type for the specified tablet, if possible.
// This is used primarily to arrange replicas, and it will not convert a
// primary. For that, use InitShardPrimary.
@@ -171,6 +173,8 @@ service Vtctld {
rpc GetThrottlerStatus(vtctldata.GetThrottlerStatusRequest) returns (vtctldata.GetThrottlerStatusResponse) {};
// GetTopologyPath returns the topology cell at a given path.
rpc GetTopologyPath(vtctldata.GetTopologyPathRequest) returns (vtctldata.GetTopologyPathResponse) {};
+ // GetTransactionInfo reads a given transactions information.
+ rpc GetTransactionInfo(vtctldata.GetTransactionInfoRequest) returns (vtctldata.GetTransactionInfoResponse) {};
// GetTransactions returns the unresolved transactions for the request.
rpc GetUnresolvedTransactions(vtctldata.GetUnresolvedTransactionsRequest) returns (vtctldata.GetUnresolvedTransactionsResponse) {};
// GetVersion returns the version of a tablet from its debug vars.
diff --git a/proto/vtgate.proto b/proto/vtgate.proto
index 5b080178218..aadf211f0a2 100644
--- a/proto/vtgate.proto
+++ b/proto/vtgate.proto
@@ -76,6 +76,8 @@ message Session {
// reserved connection if a dedicated connection is needed
int64 reserved_id = 4;
bool vindex_only = 5;
+ // rows_affected tracks if any query has modified the rows.
+ bool rows_affected = 6;
}
// shard_sessions keep track of per-shard transaction info.
repeated ShardSession shard_sessions = 2;
diff --git a/test.go b/test.go
index 52b1d06115d..95d62af892f 100755
--- a/test.go
+++ b/test.go
@@ -77,7 +77,7 @@ For example:
// Flags
var (
flavor = flag.String("flavor", "mysql80", "comma-separated bootstrap flavor(s) to run against (when using Docker mode). Available flavors: all,"+flavors)
- bootstrapVersion = flag.String("bootstrap-version", "36", "the version identifier to use for the docker images")
+ bootstrapVersion = flag.String("bootstrap-version", "39", "the version identifier to use for the docker images")
runCount = flag.Int("runs", 1, "run each test this many times")
retryMax = flag.Int("retry", 3, "max number of retries, to detect flaky tests")
logPass = flag.Bool("log-pass", false, "log test output even if it passes")
diff --git a/test/ci_workflow_gen.go b/test/ci_workflow_gen.go
index af8b0a84d47..b24db1154fb 100644
--- a/test/ci_workflow_gen.go
+++ b/test/ci_workflow_gen.go
@@ -103,6 +103,7 @@ var (
"vtgate_vindex_heavy",
"vtgate_vschema",
"vtgate_queries",
+ "vtgate_plantests",
"vtgate_schema_tracker",
"vtgate_foreignkey_stress",
"vtorc",
@@ -116,7 +117,8 @@ var (
"vreplication_v2",
"vreplication_partial_movetables_and_materialize",
"vreplication_foreign_key_stress",
- "vreplication_migrate_vdiff2_convert_tz",
+ "vreplication_migrate",
+ "vreplication_vtctldclient_vdiff2_movetables_tz",
"vreplication_multi_tenant",
"schemadiff_vrepl",
"topo_connection_cache",
@@ -153,7 +155,11 @@ var (
"onlineddl_vrepl_stress_suite",
"onlineddl_vrepl_suite",
"vreplication_basic",
- "vreplication_migrate_vdiff2_convert_tz",
+ "vreplication_migrate",
+ "vreplication_vtctldclient_vdiff2_movetables_tz",
+ }
+ clusterRequiringMinio = []string{
+ "21",
}
)
@@ -172,6 +178,7 @@ type clusterTest struct {
EnableBinlogTransactionCompression bool
PartialKeyspace bool
Cores16 bool
+ NeedsMinio bool
}
type vitessTesterTest struct {
@@ -284,6 +291,13 @@ func generateClusterWorkflows(list []string, tpl string) {
break
}
}
+ minioClusters := canonnizeList(clusterRequiringMinio)
+ for _, minioCluster := range minioClusters {
+ if minioCluster == cluster {
+ test.NeedsMinio = true
+ break
+ }
+ }
if mysqlVersion == mysql57 {
test.Platform = string(mysql57)
}
diff --git a/test/config.json b/test/config.json
index cfc89de84ce..da0026f0125 100644
--- a/test/config.json
+++ b/test/config.json
@@ -136,6 +136,15 @@
"RetryMax": 1,
"Tags": []
},
+ "backup_s3": {
+ "File": "unused.go",
+ "Args": ["vitess.io/vitess/go/test/endtoend/backup/s3", "-timeout", "30m"],
+ "Command": [],
+ "Manual": false,
+ "Shard": "21",
+ "RetryMax": 1,
+ "Tags": []
+ },
"backup_only": {
"File": "unused.go",
"Args": ["vitess.io/vitess/go/test/endtoend/backup/vtbackup", "-timeout", "20m"],
@@ -340,17 +349,6 @@
"RetryMax": 1,
"Tags": []
},
- "pitr": {
- "File": "unused.go",
- "Args": ["vitess.io/vitess/go/test/endtoend/recovery/pitr"],
- "Command": [],
- "Manual": false,
- "Shard": "10",
- "RetryMax": 1,
- "Tags": [
- "site_test"
- ]
- },
"recovery": {
"File": "unused.go",
"Args": ["vitess.io/vitess/go/test/endtoend/recovery/unshardedrecovery"],
@@ -851,6 +849,15 @@
"RetryMax": 1,
"Tags": []
},
+ "vtgate_transaction_twopc_metric": {
+ "File": "unused.go",
+ "Args": ["vitess.io/vitess/go/test/endtoend/transaction/twopc/metric"],
+ "Command": [],
+ "Manual": false,
+ "Shard": "vtgate_transaction",
+ "RetryMax": 1,
+ "Tags": []
+ },
"vtgate_transaction_twopc_stress": {
"File": "unused.go",
"Args": ["vitess.io/vitess/go/test/endtoend/transaction/twopc/stress"],
@@ -878,6 +885,15 @@
"RetryMax": 1,
"Tags": []
},
+ "vtgate_plantests": {
+ "File": "unused.go",
+ "Args": ["vitess.io/vitess/go/test/endtoend/vtgate/plan_tests"],
+ "Command": [],
+ "Manual": false,
+ "Shard": "vtgate_plantests",
+ "RetryMax": 1,
+ "Tags": []
+ },
"vtgate_unsharded": {
"File": "unused.go",
"Args": ["vitess.io/vitess/go/test/endtoend/vtgate/unsharded"],
@@ -1229,6 +1245,17 @@
"RetryMax": 1,
"Tags": []
},
+ "vtop_example": {
+ "File": "",
+ "Args": [],
+ "Command": [
+ "test/vtop_example.sh"
+ ],
+ "Manual": false,
+ "Shard": "",
+ "RetryMax": 1,
+ "Tags": []
+ },
"vtorc_primary_failure": {
"File": "unused.go",
"Args": ["vitess.io/vitess/go/test/endtoend/vtorc/primaryfailure"],
@@ -1319,21 +1346,12 @@
"RetryMax": 1,
"Tags": []
},
- "vreplication_vtctldclient_cli": {
- "File": "unused.go",
- "Args": ["vitess.io/vitess/go/test/endtoend/vreplication", "-run", "TestVtctldclientCLI", "-timeout", "20m"],
- "Command": [],
- "Manual": false,
- "Shard": "vreplication_migrate_vdiff2_convert_tz",
- "RetryMax": 1,
- "Tags": []
- },
"vreplication_vtctl_migrate": {
"File": "unused.go",
"Args": ["vitess.io/vitess/go/test/endtoend/vreplication", "-run", "TestVtctlMigrate", "-timeout", "30m"],
"Command": [],
"Manual": false,
- "Shard": "vreplication_migrate_vdiff2_convert_tz",
+ "Shard": "vreplication_migrate",
"RetryMax": 1,
"Tags": []
},
@@ -1342,7 +1360,7 @@
"Args": ["vitess.io/vitess/go/test/endtoend/vreplication", "-run", "TestVtctldMigrate", "-timeout", "30m"],
"Command": [],
"Manual": false,
- "Shard": "vreplication_migrate_vdiff2_convert_tz",
+ "Shard": "vreplication_migrate",
"RetryMax": 1,
"Tags": []
},
@@ -1351,7 +1369,16 @@
"Args": ["vitess.io/vitess/go/test/endtoend/vreplication", "-run", "TestVDiff2", "-timeout", "30m"],
"Command": [],
"Manual": false,
- "Shard": "vreplication_migrate_vdiff2_convert_tz",
+ "Shard": "vreplication_vtctldclient_vdiff2_movetables_tz",
+ "RetryMax": 1,
+ "Tags": []
+ },
+ "vreplication_vtctldclient_cli": {
+ "File": "unused.go",
+ "Args": ["vitess.io/vitess/go/test/endtoend/vreplication", "-run", "TestVtctldclientCLI", "-timeout", "20m"],
+ "Command": [],
+ "Manual": false,
+ "Shard": "vreplication_vtctldclient_vdiff2_movetables_tz",
"RetryMax": 1,
"Tags": []
},
@@ -1360,7 +1387,25 @@
"Args": ["vitess.io/vitess/go/test/endtoend/vreplication", "-run", "TestMoveTablesTZ"],
"Command": [],
"Manual": false,
- "Shard": "vreplication_migrate_vdiff2_convert_tz",
+ "Shard": "vreplication_vtctldclient_vdiff2_movetables_tz",
+ "RetryMax": 1,
+ "Tags": []
+ },
+ "loopkup_index": {
+ "File": "unused.go",
+ "Args": ["vitess.io/vitess/go/test/endtoend/vreplication", "-run", "TestLookupIndex"],
+ "Command": [],
+ "Manual": false,
+ "Shard": "vreplication_vtctldclient_vdiff2_movetables_tz",
+ "RetryMax": 1,
+ "Tags": []
+ },
+ "vtadmin": {
+ "File": "unused.go",
+ "Args": ["vitess.io/vitess/go/test/endtoend/vtadmin"],
+ "Command": [],
+ "Manual": false,
+ "Shard": "15",
"RetryMax": 1,
"Tags": []
},
diff --git a/test/templates/cluster_endtoend_test.tpl b/test/templates/cluster_endtoend_test.tpl
index 1b035ff0807..8d0a2f650b5 100644
--- a/test/templates/cluster_endtoend_test.tpl
+++ b/test/templates/cluster_endtoend_test.tpl
@@ -14,7 +14,7 @@ env:
jobs:
build:
name: Run endtoend tests on {{.Name}}
- runs-on: {{if .Cores16}}gh-hosted-runners-16cores-1{{else}}ubuntu-latest{{end}}
+ runs-on: {{if .Cores16}}gh-hosted-runners-16cores-1-24.04{{else}}ubuntu-24.04{{end}}
steps:
- name: Skip CI
@@ -117,19 +117,28 @@ jobs:
sudo apt-get -qq update
# Install everything else we need, and configure
- sudo apt-get -qq install -y percona-server-server percona-server-client make unzip g++ etcd git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y percona-server-server percona-server-client make unzip g++ etcd-client etcd-server git wget eatmydata xz-utils libncurses6
{{else}}
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
+
+ # We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
{{end}}
@@ -148,6 +157,15 @@ jobs:
{{end}}
+ {{if .NeedsMinio }}
+ - name: Install Minio
+ if: steps.skip-workflow.outputs.skip-workflow == 'false'
+ run: |
+ wget https://dl.min.io/server/minio/release/linux-amd64/minio
+ chmod +x minio
+ mv minio /usr/local/bin
+ {{end}}
+
{{if .MakeTools}}
- name: Installing zookeeper and consul
diff --git a/test/templates/cluster_endtoend_test_docker.tpl b/test/templates/cluster_endtoend_test_docker.tpl
index f68e4223c75..f7e8aa2c1d8 100644
--- a/test/templates/cluster_endtoend_test_docker.tpl
+++ b/test/templates/cluster_endtoend_test_docker.tpl
@@ -6,7 +6,7 @@ permissions: read-all
jobs:
build:
name: Run endtoend tests on {{.Name}}
- runs-on: {{if .Cores16}}gh-hosted-runners-16cores-1{{else}}ubuntu-latest{{end}}
+ runs-on: {{if .Cores16}}gh-hosted-runners-16cores-1-24.04{{else}}ubuntu-24.04{{end}}
steps:
- name: Skip CI
diff --git a/test/templates/cluster_endtoend_test_mysql57.tpl b/test/templates/cluster_endtoend_test_mysql57.tpl
index 6e2b98cb7e4..f4152c939b0 100644
--- a/test/templates/cluster_endtoend_test_mysql57.tpl
+++ b/test/templates/cluster_endtoend_test_mysql57.tpl
@@ -19,7 +19,7 @@ env:
jobs:
build:
name: Run endtoend tests on {{.Name}}
- runs-on: {{if .Cores16}}gh-hosted-runners-16cores-1{{else}}ubuntu-latest{{end}}
+ runs-on: {{if .Cores16}}gh-hosted-runners-16cores-1-24.04{{else}}ubuntu-24.04{{end}}
steps:
- name: Skip CI
@@ -126,16 +126,20 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.33-1_all.deb
# Bionic packages are still compatible for Jammy since there's no MySQL 5.7
# packages for Jammy.
echo mysql-apt-config mysql-apt-config/repo-codename select bionic | sudo debconf-set-selections
echo mysql-apt-config mysql-apt-config/select-server select mysql-5.7 | 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-client=5.7* mysql-community-server=5.7* mysql-server=5.7* libncurses5
+ # We have to install this old version of libaio1. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ sudo DEBIAN_FRONTEND="noninteractive" apt-get install -y mysql-client=5.7* mysql-community-server=5.7* mysql-server=5.7* libncurses6
- sudo apt-get install -y make unzip g++ etcd curl git wget eatmydata
+ sudo apt-get install -y make unzip g++ etcd-client etcd-server curl git wget eatmydata
sudo service mysql stop
sudo service etcd stop
diff --git a/test/templates/cluster_vitess_tester.tpl b/test/templates/cluster_vitess_tester.tpl
index db492dad21b..b8d77754ba6 100644
--- a/test/templates/cluster_vitess_tester.tpl
+++ b/test/templates/cluster_vitess_tester.tpl
@@ -14,7 +14,7 @@ env:
jobs:
build:
name: Run endtoend tests on {{.Name}}
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -93,12 +93,12 @@ jobs:
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
# Setup MySQL 8.0
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ 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 -qq update
# Install everything else we need, and configure
- sudo apt-get -qq install -y mysql-server mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5
+ sudo apt-get -qq install -y mysql-server mysql-client make unzip g++ etcd-client etcd-server curl git wget eatmydata xz-utils libncurses6
sudo service mysql stop
sudo service etcd stop
@@ -110,7 +110,7 @@ jobs:
go install github.com/vitessio/go-junit-report@HEAD
# install vitess tester
- go install github.com/vitessio/vitess-tester/go/vt@374fd9f495c1afd3b6bea9d4ec7728119714055
+ go install github.com/vitessio/vt/go/vt@e43009309f599378504905d4b804460f47822ac5
- name: Setup launchable dependencies
if: steps.skip-workflow.outputs.is_draft == 'false' && steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' && github.base_ref == 'main'
@@ -140,7 +140,7 @@ jobs:
i=1
for dir in {{.Path}}/*/; do
# We go over all the directories in the given path.
- # If there is a vschema file there, we use it, otherwise we let vitess-tester autogenerate it.
+ # If there is a vschema file there, we use it, otherwise we let vt tester autogenerate it.
if [ -f $dir/vschema.json ]; then
vt tester --xunit --vschema "$dir"vschema.json $dir/*.test
else
diff --git a/test/templates/dockerfile.tpl b/test/templates/dockerfile.tpl
index 3a6d664753c..af4376d3ca9 100644
--- a/test/templates/dockerfile.tpl
+++ b/test/templates/dockerfile.tpl
@@ -1,4 +1,4 @@
-ARG bootstrap_version=36
+ARG bootstrap_version=39
ARG image="vitess/bootstrap:${bootstrap_version}-{{.Platform}}"
FROM "${image}"
diff --git a/test/templates/unit_test.tpl b/test/templates/unit_test.tpl
index 3f5556ee314..3704aebac4e 100644
--- a/test/templates/unit_test.tpl
+++ b/test/templates/unit_test.tpl
@@ -14,7 +14,7 @@ env:
jobs:
test:
name: {{.Name}}
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
steps:
- name: Skip CI
@@ -87,20 +87,20 @@ jobs:
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.unit_tests == 'true'
run: |
export DEBIAN_FRONTEND="noninteractive"
- sudo apt-get -qq update
+ sudo apt-get update
# Uninstall any previously installed MySQL first
sudo systemctl stop apparmor
- sudo DEBIAN_FRONTEND="noninteractive" apt-get -qq remove -y --purge mysql-server mysql-client mysql-common
- sudo apt-get -qq -y autoremove
- sudo apt-get -qq -y autoclean
+ 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
# Get key to latest MySQL repo
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
- wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
+ wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.33-1_all.deb
{{if (eq .Platform "mysql57")}}
# Bionic packages are still compatible for Jammy since there's no MySQL 5.7
@@ -108,25 +108,32 @@ jobs:
echo mysql-apt-config mysql-apt-config/repo-codename select bionic | sudo debconf-set-selections
echo mysql-apt-config mysql-apt-config/select-server select mysql-5.7 | sudo debconf-set-selections
sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config*
- sudo apt-get -qq update
- sudo DEBIAN_FRONTEND="noninteractive" apt-get -qq install -y mysql-client=5.7* mysql-community-server=5.7* mysql-server=5.7* libncurses5
+ sudo apt-get update
+ # We have to install this old version of libaio1. See also:
+ # https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
+ sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
+ # libtinfo5 is also needed for older MySQL 5.7 builds.
+ curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo DEBIAN_FRONTEND="noninteractive" apt-get install -y mysql-client=5.7* mysql-community-server=5.7* mysql-server=5.7* libncurses6
{{end}}
{{if (eq .Platform "mysql80")}}
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 -qq update
- sudo DEBIAN_FRONTEND="noninteractive" apt-get -qq install -y mysql-server mysql-client
+ sudo apt-get update
+ sudo DEBIAN_FRONTEND="noninteractive" apt-get install -y mysql-server mysql-client
{{end}}
{{if (eq .Platform "mysql84")}}
echo mysql-apt-config mysql-apt-config/select-server select mysql-8.4-lts | sudo debconf-set-selections
sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config*
- sudo apt-get -qq update
- sudo DEBIAN_FRONTEND="noninteractive" apt-get -qq install -y mysql-server mysql-client
+ sudo apt-get update
+ sudo DEBIAN_FRONTEND="noninteractive" apt-get install -y mysql-server mysql-client
{{end}}
- sudo apt-get -qq install -y make unzip g++ curl git wget ant openjdk-11-jdk eatmydata
+ sudo apt-get install -y make unzip g++ curl git wget ant openjdk-11-jdk eatmydata
sudo service mysql 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/
diff --git a/test/vtop_example.sh b/test/vtop_example.sh
index 5ff90a2be7e..c537c0f844c 100755
--- a/test/vtop_example.sh
+++ b/test/vtop_example.sh
@@ -482,11 +482,12 @@ EOF
waitForKeyspaceToBeServing customer 80- 1
}
+kind delete cluster --name kind || true
# Build the docker image for vitess/lite using the local code
docker build -f docker/lite/Dockerfile -t vitess/lite:pr .
# Build the docker image for vitess/vtadmin using the local code
-docker build -f docker/binaries/vtadmin/Dockerfile --build-arg VT_BASE_VER=pr -t vitess/vtadmin:pr .
+docker build -f docker/binaries/vtadmin/Dockerfile --build-arg VT_BASE_VER=pr -t vitess/vtadmin:pr ./docker/binaries/vtadmin
# Print the docker images available
docker image ls
diff --git a/tools/get_kubectl_kind.sh b/tools/get_kubectl_kind.sh
index 57df414fdd8..169b120aaa0 100755
--- a/tools/get_kubectl_kind.sh
+++ b/tools/get_kubectl_kind.sh
@@ -12,7 +12,7 @@ source build.env
mkdir -p "$VTROOT/bin"
cd "$VTROOT/bin"
-KUBE_VERSION="${KUBE_VERSION:-v1.21.1}"
+KUBE_VERSION="${KUBE_VERSION:-v1.31.0}"
KUBERNETES_RELEASE_URL="${KUBERNETES_RELEASE_URL:-https://dl.k8s.io}"
# Download kubectl if needed.
@@ -28,7 +28,7 @@ ln -sf "kubectl-${KUBE_VERSION}" kubectl
if ! command -v kind &> /dev/null
then
echo "Downloading kind..."
- curl -L https://kind.sigs.k8s.io/dl/v0.12.0/kind-linux-amd64 > "kind"
+ curl -L https://kind.sigs.k8s.io/dl/v0.22.0/kind-linux-amd64 > "kind"
chmod +x "kind"
echo "Installed kind"
else
diff --git a/tools/map-shard-for-value/Makefile b/tools/map-shard-for-value/Makefile
new file mode 100644
index 00000000000..61bc88ac0ed
--- /dev/null
+++ b/tools/map-shard-for-value/Makefile
@@ -0,0 +1,22 @@
+# Copyright 2024 The Vitess Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+build:
+ go build map-shard-for-value.go
+
+test:
+ echo "1\n-1\n99" | go run map-shard-for-value.go --total_shards=4 --vindex=xxhash
+
+clean:
+ rm -f map-shard-for-value
diff --git a/tools/map-shard-for-value/map-shard-for-value.go b/tools/map-shard-for-value/map-shard-for-value.go
new file mode 100755
index 00000000000..18a092d1371
--- /dev/null
+++ b/tools/map-shard-for-value/map-shard-for-value.go
@@ -0,0 +1,207 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package main
+
+import (
+ "bufio"
+ "context"
+ "encoding/hex"
+ "fmt"
+ "log"
+ "os"
+ "strconv"
+ "strings"
+
+ flag "github.com/spf13/pflag"
+
+ "vitess.io/vitess/go/vt/topo"
+
+ "vitess.io/vitess/go/sqltypes"
+ "vitess.io/vitess/go/vt/key"
+ "vitess.io/vitess/go/vt/proto/topodata"
+ "vitess.io/vitess/go/vt/vtgate/vindexes"
+)
+
+/*
+ * This tool reads a list of values from stdin and prints the
+ * corresponding keyspace ID and shard for each value. It uses the given vindex
+ * and shard ranges to determine the shard. The vindex is expected to be a
+ * single-column vindex. The shard ranges are specified as a comma-separated
+ * list of key ranges, example "-80,80-".
+ * If you have uniformly distributed shards, you can specify the total number
+ * of shards using the -total_shards flag, and the tool will generate the shard ranges
+ * using the same logic as the Vitess operator does (using the key.GenerateShardRanges() function).
+ *
+ * Example usage:
+ * echo "1\n2\n3" | go run shard-from-id.go -vindex=hash -shards=-80,80-
+ *
+ * Currently tested only for integer values and hash/xxhash vindexes.
+ */
+
+func mapShard(allShards []*topodata.ShardReference, ksid key.DestinationKeyspaceID) (string, error) {
+ foundShard := ""
+ addShard := func(shard string) error {
+ foundShard = shard
+ return nil
+ }
+ if err := ksid.Resolve(allShards, addShard); err != nil {
+ return "", fmt.Errorf("failed to resolve keyspace ID: %v:: %s", ksid.String(), err)
+ }
+
+ if foundShard == "" {
+ return "", fmt.Errorf("no shard found for keyspace ID: %v", ksid)
+ }
+ return foundShard, nil
+}
+
+func selectShard(vindex vindexes.Vindex, value sqltypes.Value, allShards []*topodata.ShardReference) (string, key.DestinationKeyspaceID, error) {
+ ctx := context.Background()
+
+ destinations, err := vindexes.Map(ctx, vindex, nil, [][]sqltypes.Value{{value}})
+ if err != nil {
+ return "", nil, fmt.Errorf("failed to map value to keyspace ID: %w", err)
+ }
+
+ if len(destinations) != 1 {
+ return "", nil, fmt.Errorf("unexpected number of destinations: %d", len(destinations))
+ }
+
+ ksid, ok := destinations[0].(key.DestinationKeyspaceID)
+ if !ok {
+ return "", nil, fmt.Errorf("unexpected destination type: %T", destinations[0])
+ }
+
+ foundShard, err := mapShard(allShards, ksid)
+ if err != nil {
+ return "", nil, fmt.Errorf("failed to map shard, original value %v, keyspace id %s: %w", value, ksid, err)
+ }
+ return foundShard, ksid, nil
+}
+
+func getValue(valueStr, valueType string) (sqltypes.Value, error) {
+ var value sqltypes.Value
+
+ switch valueType {
+ case "int":
+ valueInt, err := strconv.ParseInt(valueStr, 10, 64)
+ if err != nil {
+ return value, fmt.Errorf("failed to parse int value: %w", err)
+ }
+ value = sqltypes.NewInt64(valueInt)
+ case "uint":
+ valueUint, err := strconv.ParseUint(valueStr, 10, 64)
+ if err != nil {
+ return value, fmt.Errorf("failed to parse uint value: %w", err)
+ }
+ value = sqltypes.NewUint64(valueUint)
+ case "string":
+ value = sqltypes.NewVarChar(valueStr)
+ default:
+ return value, fmt.Errorf("unsupported value type: %s", valueType)
+ }
+
+ return value, nil
+}
+
+func getShardMap(shardsCSV *string) []*topodata.ShardReference {
+ var allShards []*topodata.ShardReference
+
+ for _, shard := range strings.Split(*shardsCSV, ",") {
+ _, keyRange, err := topo.ValidateShardName(shard)
+ if err != nil {
+ log.Fatalf("invalid shard range: %s", shard)
+ }
+ allShards = append(allShards, &topodata.ShardReference{
+ Name: shard,
+ KeyRange: keyRange,
+ })
+ }
+ return allShards
+}
+
+type output struct {
+ Value string
+ KeyspaceID string
+ Shard string
+}
+
+func processValues(scanner *bufio.Scanner, shardsCSV *string, vindexName string, valueType string) ([]output, error) {
+ allShards := getShardMap(shardsCSV)
+
+ vindex, err := vindexes.CreateVindex(vindexName, vindexName, nil)
+ if err != nil {
+ return nil, fmt.Errorf("failed to create vindex: %v", err)
+ }
+ var outputs []output
+ for scanner.Scan() {
+ valueStr := scanner.Text()
+ if valueStr == "" {
+ continue
+ }
+ value, err := getValue(valueStr, valueType)
+ if err != nil {
+ return nil, fmt.Errorf("failed to get value for: %v, value_type %s:: %v", valueStr, valueType, err)
+ }
+ shard, ksid, err := selectShard(vindex, value, allShards)
+ if err != nil {
+ // ignore errors so that we can go ahead with the computation for other values
+ continue
+ }
+ outputs = append(outputs, output{Value: valueStr, KeyspaceID: hex.EncodeToString(ksid), Shard: shard})
+ }
+ return outputs, nil
+}
+
+func printOutput(outputs []output) {
+ fmt.Println("value,keyspaceID,shard")
+ for _, output := range outputs {
+ fmt.Printf("%s,%s,%s\n", output.Value, output.KeyspaceID, output.Shard)
+ }
+}
+
+func main() {
+ // Explicitly configuring the logger since it was flaky in displaying logs locally without this.
+ log.SetOutput(os.Stderr)
+ log.SetFlags(log.LstdFlags)
+ log.SetPrefix("LOG: ")
+
+ vindexName := flag.String("vindex", "xxhash", "name of the vindex")
+ shardsCSV := flag.String("shards", "", "comma-separated list of shard ranges")
+ totalShards := flag.Int("total_shards", 0, "total number of uniformly distributed shards")
+ valueType := flag.String("value_type", "int", "type of the value (int, uint, or string)")
+ flag.Parse()
+
+ if *totalShards > 0 {
+ if *shardsCSV != "" {
+ log.Fatalf("cannot specify both total_shards and shards")
+ }
+ shardArr, err := key.GenerateShardRanges(*totalShards)
+ if err != nil {
+ log.Fatalf("failed to generate shard ranges: %v", err)
+ }
+ *shardsCSV = strings.Join(shardArr, ",")
+ }
+ if *shardsCSV == "" {
+ log.Fatal("shards or total_shards must be specified")
+ }
+ scanner := bufio.NewScanner(os.Stdin)
+ outputs, err := processValues(scanner, shardsCSV, *vindexName, *valueType)
+ if err != nil {
+ log.Fatalf("failed to process values: %v", err)
+ }
+ printOutput(outputs)
+}
diff --git a/tools/map-shard-for-value/map-shard-for-value.md b/tools/map-shard-for-value/map-shard-for-value.md
new file mode 100644
index 00000000000..17daf7f5fe5
--- /dev/null
+++ b/tools/map-shard-for-value/map-shard-for-value.md
@@ -0,0 +1,47 @@
+## Map Shard for Value Tool
+
+### Overview
+
+The `map-shard-for-value` tool maps a given value to a specific shard. This tool helps in determining
+which shard a particular value belongs to, based on the vindex algorithm and shard ranges.
+
+### Features
+-
+
+- Allows specifying the vindex type (e.g., `hash`, `xxhash`).
+- Allows specifying the shard list of (for uniformly distributed shard ranges) the total number of shards to generate.
+- Designed as a _filter_: Reads input values from `stdin` and outputs the corresponding shard information, so it can be
+ used to map values from a file or another program.
+
+### Usage
+
+```sh
+make build
+```
+
+```sh
+echo "1\n-1\n99" | ./map-shard-for-value --total_shards=4 --vindex=xxhash
+value,keyspaceID,shard
+1,d46405367612b4b7,c0-
+-1,d8e2a6a7c8c7623d,c0-
+99,200533312244abca,-40
+
+echo "1\n-1\n99" | ./map-shard-for-value --vindex=hash --shards="-80,80-"
+value,keyspaceID,shard
+1,166b40b44aba4bd6,-80
+-1,355550b2150e2451,-80
+99,2c40ad56f4593c47,-80
+```
+
+#### Flags
+
+- `--vindex`: Specifies the name of the vindex to use (e.g., `hash`, `xxhash`) (default `xxhash`)
+
+One (and only one) of these is required:
+
+- `--shards`: Comma-separated list of shard ranges
+- `--total_shards`: Total number of shards, only if shards are uniformly distributed
+
+Optional:
+- `--value_type`: Type of the value to map, one of int, uint, string (default `int`)
+
diff --git a/tools/map-shard-for-value/map-shard-for-value_test.go b/tools/map-shard-for-value/map-shard-for-value_test.go
new file mode 100644
index 00000000000..ca014818bb9
--- /dev/null
+++ b/tools/map-shard-for-value/map-shard-for-value_test.go
@@ -0,0 +1,90 @@
+/*
+Copyright 2024 The Vitess Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package main
+
+import (
+ "bufio"
+ "fmt"
+ "strings"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+)
+
+func TestProcess(t *testing.T) {
+ type testCase struct {
+ name string
+ shardsCSV string
+ vindexType string
+ values []int
+ valueType string
+ expected []output
+ }
+ testCases := []testCase{
+ {
+ name: "hash,2 shards",
+ shardsCSV: "-80,80-",
+ vindexType: "hash",
+ values: []int{1, 99},
+ valueType: "int",
+ expected: []output{
+ {
+ Value: "1",
+ KeyspaceID: "166b40b44aba4bd6",
+ Shard: "-80",
+ },
+ {
+ Value: "99",
+ KeyspaceID: "2c40ad56f4593c47",
+ Shard: "-80",
+ },
+ },
+ },
+ {
+ name: "xxhash,4 shards",
+ shardsCSV: "-40,40-80,80-c0,c0-",
+ vindexType: "xxhash",
+ values: []int{1, 99},
+ valueType: "int",
+ expected: []output{
+ {
+ Value: "1",
+ KeyspaceID: "d46405367612b4b7",
+ Shard: "c0-",
+ },
+ {
+ Value: "99",
+ KeyspaceID: "200533312244abca",
+ Shard: "-40",
+ },
+ },
+ },
+ }
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ var input strings.Builder
+ for _, num := range tc.values {
+ fmt.Fprintf(&input, "%d\n", num)
+ }
+ reader := strings.NewReader(input.String())
+ scanner := bufio.NewScanner(reader)
+ got, err := processValues(scanner, &tc.shardsCSV, tc.vindexType, tc.valueType)
+ require.NoError(t, err)
+ require.EqualValues(t, tc.expected, got)
+ })
+ }
+}
diff --git a/web/vtadmin/.prettiercc b/web/vtadmin/.prettiercc
index bed1b4f32cd..6fdc0af39dd 100644
--- a/web/vtadmin/.prettiercc
+++ b/web/vtadmin/.prettiercc
@@ -7,7 +7,6 @@
"bracketSpacing": true,
"endOfLine": "auto",
"jsxSingleQuote": false,
- "jsxBracketSameLine": false,
"quoteProps": "as-needed",
"htmlWhitespaceSensitivity": "css",
"printWidth": 120
diff --git a/web/vtadmin/package-lock.json b/web/vtadmin/package-lock.json
index 2dc201fbf88..8ad7c67a5b4 100644
--- a/web/vtadmin/package-lock.json
+++ b/web/vtadmin/package-lock.json
@@ -52,7 +52,7 @@
"eslint-config-react-app": "^7.0.1",
"i": "^0.3.7",
"jsdom": "^21.1.1",
- "msw": "^0.36.8",
+ "msw": "^2.5.2",
"npm": "^10.8.0",
"postcss": "^8.4.31",
"prettier": "^2.2.1",
@@ -2278,6 +2278,37 @@
"resolved": "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.0.0.tgz",
"integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA=="
},
+ "node_modules/@bundled-es-modules/cookie": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.1.tgz",
+ "integrity": "sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "cookie": "^0.7.2"
+ }
+ },
+ "node_modules/@bundled-es-modules/statuses": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz",
+ "integrity": "sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "statuses": "^2.0.1"
+ }
+ },
+ "node_modules/@bundled-es-modules/tough-cookie": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/@bundled-es-modules/tough-cookie/-/tough-cookie-0.1.6.tgz",
+ "integrity": "sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "@types/tough-cookie": "^4.0.5",
+ "tough-cookie": "^4.1.4"
+ }
+ },
"node_modules/@csstools/cascade-layer-name-parser": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.9.tgz",
@@ -3475,6 +3506,74 @@
"integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
"dev": true
},
+ "node_modules/@inquirer/core": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.0.1.tgz",
+ "integrity": "sha512-KKTgjViBQUi3AAssqjUFMnMO3CM3qwCHvePV9EW+zTKGKafFGFF01sc1yOIYjLJ7QU52G/FbzKc+c01WLzXmVQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@inquirer/figures": "^1.0.7",
+ "@inquirer/type": "^3.0.0",
+ "ansi-escapes": "^4.3.2",
+ "cli-width": "^4.1.0",
+ "mute-stream": "^2.0.0",
+ "signal-exit": "^4.1.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^6.2.0",
+ "yoctocolors-cjs": "^2.1.2"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@inquirer/core/node_modules/@inquirer/type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.0.tgz",
+ "integrity": "sha512-YYykfbw/lefC7yKj7nanzQXILM7r3suIvyFlCcMskc99axmsSewXWkAfXKwMbgxL76iAFVmRwmYdwNZNc8gjog==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@types/node": ">=18"
+ }
+ },
+ "node_modules/@inquirer/core/node_modules/@types/node": {
+ "version": "22.9.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz",
+ "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "undici-types": "~6.19.8"
+ }
+ },
+ "node_modules/@inquirer/core/node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@inquirer/figures": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.7.tgz",
+ "integrity": "sha512-m+Trk77mp54Zma6xLkLuY+mvanPxlE4A7yNKs2HBiyZ4UkVs28Mv5c/pgWrHeInx+USHeX/WEPzjrWrcJiQgjw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
@@ -3663,28 +3762,22 @@
"node": ">=v12.0.0"
}
},
- "node_modules/@mswjs/cookies": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/@mswjs/cookies/-/cookies-0.1.7.tgz",
- "integrity": "sha512-bDg1ReMBx+PYDB4Pk7y1Q07Zz1iKIEUWQpkEXiA2lEWg9gvOZ8UBmGXilCEUvyYoRFlmr/9iXTRR69TrgSwX/Q==",
- "dev": true,
- "dependencies": {
- "@types/set-cookie-parser": "^2.4.0",
- "set-cookie-parser": "^2.4.6"
- }
- },
"node_modules/@mswjs/interceptors": {
- "version": "0.12.7",
- "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.12.7.tgz",
- "integrity": "sha512-eGjZ3JRAt0Fzi5FgXiV/P3bJGj0NqsN7vBS0J0FO2AQRQ0jCKQS4lEFm4wvlSgKQNfeuc/Vz6d81VtU3Gkx/zg==",
+ "version": "0.36.9",
+ "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.36.9.tgz",
+ "integrity": "sha512-mMRDUBwSNeCgjSMEWfjoh4Rm9fbyZ7xQ9SBq8eGHiiyRn1ieTip3pNEt0wxWVPPxR4i1Rv9bTkeEbkX7M4c15A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@open-draft/until": "^1.0.3",
- "@xmldom/xmldom": "^0.7.2",
- "debug": "^4.3.2",
- "headers-utils": "^3.0.2",
- "outvariant": "^1.2.0",
- "strict-event-emitter": "^0.2.0"
+ "@open-draft/deferred-promise": "^2.2.0",
+ "@open-draft/logger": "^0.3.0",
+ "@open-draft/until": "^2.0.0",
+ "is-node-process": "^1.2.0",
+ "outvariant": "^1.4.3",
+ "strict-event-emitter": "^0.5.1"
+ },
+ "engines": {
+ "node": ">=18"
}
},
"node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
@@ -3753,11 +3846,30 @@
"node": ">= 8"
}
},
+ "node_modules/@open-draft/deferred-promise": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz",
+ "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@open-draft/logger": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz",
+ "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-node-process": "^1.2.0",
+ "outvariant": "^1.4.0"
+ }
+ },
"node_modules/@open-draft/until": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-1.0.3.tgz",
- "integrity": "sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==",
- "dev": true
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz",
+ "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@pkgjs/parseargs": {
"version": "0.11.0",
@@ -4381,10 +4493,11 @@
}
},
"node_modules/@types/cookie": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
- "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==",
- "dev": true
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
+ "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/d3": {
"version": "7.4.3",
@@ -4635,16 +4748,6 @@
"resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz",
"integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA=="
},
- "node_modules/@types/inquirer": {
- "version": "8.2.10",
- "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-8.2.10.tgz",
- "integrity": "sha512-IdD5NmHyVjWM8SHWo/kPBgtzXatwPkfwzyP3fN1jF2g9BWt5WO+8hL2F4o2GKIYsU40PpqeevuUWvkS/roXJkA==",
- "dev": true,
- "dependencies": {
- "@types/through": "*",
- "rxjs": "^7.2.0"
- }
- },
"node_modules/@types/istanbul-lib-coverage": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
@@ -4704,12 +4807,6 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
"integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="
},
- "node_modules/@types/js-levenshtein": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@types/js-levenshtein/-/js-levenshtein-1.1.3.tgz",
- "integrity": "sha512-jd+Q+sD20Qfu9e2aEXogiO3vpOC1PYJOUdyN9gvs4Qrvkg4wF43L5OhqrPeokdv8TL0/mXoYfpkcoGZMNN2pkQ==",
- "dev": true
- },
"node_modules/@types/json-schema": {
"version": "7.0.15",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
@@ -4844,20 +4941,18 @@
"integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
"dev": true
},
- "node_modules/@types/set-cookie-parser": {
- "version": "2.4.7",
- "resolved": "https://registry.npmjs.org/@types/set-cookie-parser/-/set-cookie-parser-2.4.7.tgz",
- "integrity": "sha512-+ge/loa0oTozxip6zmhRIk8Z/boU51wl9Q6QdLZcokIGMzY5lFXYy/x7Htj2HTC6/KZP1hUbZ1ekx8DYXICvWg==",
- "dev": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
"node_modules/@types/stack-utils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
"integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw=="
},
+ "node_modules/@types/statuses": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.5.tgz",
+ "integrity": "sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/testing-library__jest-dom": {
"version": "5.14.9",
"resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz",
@@ -4867,14 +4962,12 @@
"@types/jest": "*"
}
},
- "node_modules/@types/through": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.33.tgz",
- "integrity": "sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==",
+ "node_modules/@types/tough-cookie": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz",
+ "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==",
"dev": true,
- "dependencies": {
- "@types/node": "*"
- }
+ "license": "MIT"
},
"node_modules/@types/yargs": {
"version": "17.0.32",
@@ -5312,15 +5405,6 @@
"pretty-format": "^27.5.1"
}
},
- "node_modules/@xmldom/xmldom": {
- "version": "0.7.13",
- "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz",
- "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==",
- "dev": true,
- "engines": {
- "node": ">=10.0.0"
- }
- },
"node_modules/@zeit/schemas": {
"version": "2.36.0",
"resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.36.0.tgz",
@@ -5429,6 +5513,7 @@
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
"integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"type-fest": "^0.21.3"
},
@@ -5444,6 +5529,7 @@
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
"integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
"dev": true,
+ "license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=10"
},
@@ -5898,26 +5984,6 @@
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
- "node_modules/base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
"node_modules/big-integer": {
"version": "1.6.52",
"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz",
@@ -5937,17 +6003,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/bl": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
- "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
- "dev": true,
- "dependencies": {
- "buffer": "^5.5.0",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
- }
- },
"node_modules/bluebird": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
@@ -6145,30 +6200,6 @@
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
- "node_modules/buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
"node_modules/byline": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz",
@@ -6349,12 +6380,6 @@
"url": "https://github.com/chalk/chalk-template?sponsor=1"
}
},
- "node_modules/chardet": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
- "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
- "dev": true
- },
"node_modules/check-error": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz",
@@ -6437,30 +6462,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/cli-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
- "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
- "dev": true,
- "dependencies": {
- "restore-cursor": "^3.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cli-spinners": {
- "version": "2.9.2",
- "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
- "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
- "dev": true,
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/cli-truncate": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz",
@@ -6562,12 +6563,13 @@
}
},
"node_modules/cli-width": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
- "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz",
+ "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==",
"dev": true,
+ "license": "ISC",
"engines": {
- "node": ">= 10"
+ "node": ">= 12"
}
},
"node_modules/client-only": {
@@ -6623,15 +6625,6 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
- "node_modules/clone": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
- "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
- "dev": true,
- "engines": {
- "node": ">=0.8"
- }
- },
"node_modules/clsx": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
@@ -6771,10 +6764,11 @@
"dev": true
},
"node_modules/cookie": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
- "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
+ "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -7570,18 +7564,6 @@
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
"dev": true
},
- "node_modules/defaults": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
- "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
- "dev": true,
- "dependencies": {
- "clone": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/define-data-property": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
@@ -8549,15 +8531,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "dev": true,
- "engines": {
- "node": ">=0.8.x"
- }
- },
"node_modules/execa": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
@@ -8596,20 +8569,6 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/external-editor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
- "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
- "dev": true,
- "dependencies": {
- "chardet": "^0.7.0",
- "iconv-lite": "^0.4.24",
- "tmp": "^0.0.33"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -8683,30 +8642,6 @@
"reusify": "^1.0.4"
}
},
- "node_modules/figures": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
- "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
- "dev": true,
- "dependencies": {
- "escape-string-regexp": "^1.0.5"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/figures/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
"node_modules/file-entry-cache": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
@@ -9141,12 +9076,13 @@
"dev": true
},
"node_modules/graphql": {
- "version": "15.8.0",
- "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz",
- "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==",
+ "version": "16.9.0",
+ "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.9.0.tgz",
+ "integrity": "sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">= 10.x"
+ "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0"
}
},
"node_modules/hard-rejection": {
@@ -9238,11 +9174,12 @@
"node": ">= 0.4"
}
},
- "node_modules/headers-utils": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/headers-utils/-/headers-utils-3.0.2.tgz",
- "integrity": "sha512-xAxZkM1dRyGV2Ou5bzMxBPNLoRCjcX+ya7KSWybQD2KwLphxsapUVK6x/02o7f4VU6GPSXch9vNY2+gkU8tYWQ==",
- "dev": true
+ "node_modules/headers-polyfill": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.3.tgz",
+ "integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/highcharts": {
"version": "10.3.3",
@@ -9379,38 +9316,6 @@
"node": ">=0.4"
}
},
- "node_modules/iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
"node_modules/ignore": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
@@ -9488,32 +9393,6 @@
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
"dev": true
},
- "node_modules/inquirer": {
- "version": "8.2.6",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz",
- "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==",
- "dev": true,
- "dependencies": {
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.1.1",
- "cli-cursor": "^3.1.0",
- "cli-width": "^3.0.0",
- "external-editor": "^3.0.3",
- "figures": "^3.0.0",
- "lodash": "^4.17.21",
- "mute-stream": "0.0.8",
- "ora": "^5.4.1",
- "run-async": "^2.4.0",
- "rxjs": "^7.5.5",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0",
- "through": "^2.3.6",
- "wrap-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
"node_modules/internal-slot": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
@@ -9736,15 +9615,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-interactive": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
- "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/is-map": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
@@ -9773,7 +9643,8 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz",
"integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/is-number": {
"version": "7.0.0",
@@ -9953,18 +9824,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/is-weakmap": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
@@ -10232,15 +10091,6 @@
"jiti": "bin/jiti.js"
}
},
- "node_modules/js-levenshtein": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
- "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/js-sha3": {
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz",
@@ -10562,22 +10412,6 @@
"integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==",
"dev": true
},
- "node_modules/log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/long": {
"version": "5.2.3",
"resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
@@ -10907,62 +10741,107 @@
"dev": true
},
"node_modules/msw": {
- "version": "0.36.8",
- "resolved": "https://registry.npmjs.org/msw/-/msw-0.36.8.tgz",
- "integrity": "sha512-K7lOQoYqhGhTSChsmHMQbf/SDCsxh/m0uhN6Ipt206lGoe81fpTmaGD0KLh4jUxCONMOUnwCSj0jtX2CM4pEdw==",
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/msw/-/msw-2.6.0.tgz",
+ "integrity": "sha512-n3tx2w0MZ3H4pxY0ozrQ4sNPzK/dGtlr2cIIyuEsgq2Bhy4wvcW6ZH2w/gXM9+MEUY6HC1fWhqtcXDxVZr5Jxw==",
"dev": true,
"hasInstallScript": true,
+ "license": "MIT",
"dependencies": {
- "@mswjs/cookies": "^0.1.7",
- "@mswjs/interceptors": "^0.12.7",
- "@open-draft/until": "^1.0.3",
- "@types/cookie": "^0.4.1",
- "@types/inquirer": "^8.1.3",
- "@types/js-levenshtein": "^1.1.0",
- "chalk": "4.1.1",
- "chokidar": "^3.4.2",
- "cookie": "^0.4.1",
- "graphql": "^15.5.1",
- "headers-utils": "^3.0.2",
- "inquirer": "^8.2.0",
- "is-node-process": "^1.0.1",
- "js-levenshtein": "^1.1.6",
- "node-fetch": "^2.6.7",
- "path-to-regexp": "^8.0.0",
- "statuses": "^2.0.0",
- "strict-event-emitter": "^0.2.0",
- "type-fest": "^1.2.2",
- "yargs": "^17.3.0"
+ "@bundled-es-modules/cookie": "^2.0.0",
+ "@bundled-es-modules/statuses": "^1.0.1",
+ "@bundled-es-modules/tough-cookie": "^0.1.6",
+ "@inquirer/confirm": "^5.0.0",
+ "@mswjs/interceptors": "^0.36.5",
+ "@open-draft/deferred-promise": "^2.2.0",
+ "@open-draft/until": "^2.1.0",
+ "@types/cookie": "^0.6.0",
+ "@types/statuses": "^2.0.4",
+ "chalk": "^4.1.2",
+ "graphql": "^16.8.1",
+ "headers-polyfill": "^4.0.2",
+ "is-node-process": "^1.2.0",
+ "outvariant": "^1.4.3",
+ "path-to-regexp": "^6.3.0",
+ "strict-event-emitter": "^0.5.1",
+ "type-fest": "^4.26.1",
+ "yargs": "^17.7.2"
},
"bin": {
"msw": "cli/index.js"
},
+ "engines": {
+ "node": ">=18"
+ },
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/mswjs"
+ "url": "https://github.com/sponsors/mswjs"
+ },
+ "peerDependencies": {
+ "typescript": ">= 4.8.x"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
- "node_modules/msw/node_modules/chalk": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
- "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+ "node_modules/msw/node_modules/@inquirer/confirm": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.0.1.tgz",
+ "integrity": "sha512-6ycMm7k7NUApiMGfVc32yIPp28iPKxhGRMqoNDiUjq2RyTAkbs5Fx0TdzBqhabcKvniDdAAvHCmsRjnNfTsogw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "@inquirer/core": "^10.0.1",
+ "@inquirer/type": "^3.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=18"
},
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "peerDependencies": {
+ "@types/node": ">=18"
+ }
+ },
+ "node_modules/msw/node_modules/@inquirer/type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.0.tgz",
+ "integrity": "sha512-YYykfbw/lefC7yKj7nanzQXILM7r3suIvyFlCcMskc99axmsSewXWkAfXKwMbgxL76iAFVmRwmYdwNZNc8gjog==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@types/node": ">=18"
+ }
+ },
+ "node_modules/msw/node_modules/@types/node": {
+ "version": "22.9.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz",
+ "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "undici-types": "~6.19.8"
}
},
+ "node_modules/msw/node_modules/path-to-regexp": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz",
+ "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/mute-stream": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
- "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
- "dev": true
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz",
+ "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^18.17.0 || >=20.5.0"
+ }
},
"node_modules/mz": {
"version": "2.7.0",
@@ -10984,15 +10863,16 @@
}
},
"node_modules/nanoid": {
- "version": "3.3.7",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
- "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "version": "3.3.8",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
+ "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"bin": {
"nanoid": "bin/nanoid.cjs"
},
@@ -13948,43 +13828,12 @@
"node": ">= 0.8.0"
}
},
- "node_modules/ora": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
- "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
- "dev": true,
- "dependencies": {
- "bl": "^4.1.0",
- "chalk": "^4.1.0",
- "cli-cursor": "^3.1.0",
- "cli-spinners": "^2.5.0",
- "is-interactive": "^1.0.0",
- "is-unicode-supported": "^0.1.0",
- "log-symbols": "^4.1.0",
- "strip-ansi": "^6.0.0",
- "wcwidth": "^1.0.1"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/os-tmpdir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/outvariant": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.2.tgz",
- "integrity": "sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ==",
- "dev": true
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz",
+ "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/p-limit": {
"version": "3.1.0",
@@ -15712,20 +15561,6 @@
"node": ">=8"
}
},
- "node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@@ -15950,19 +15785,6 @@
"resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz",
"integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng=="
},
- "node_modules/restore-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
- "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
- "dev": true,
- "dependencies": {
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -16034,15 +15856,6 @@
"integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==",
"dev": true
},
- "node_modules/run-async": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
- "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
- "dev": true,
- "engines": {
- "node": ">=0.12.0"
- }
- },
"node_modules/run-parallel": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -16071,15 +15884,6 @@
"resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
"integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ=="
},
- "node_modules/rxjs": {
- "version": "7.8.1",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
- "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
- "dev": true,
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
"node_modules/safe-array-concat": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
@@ -16274,12 +16078,6 @@
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true
},
- "node_modules/set-cookie-parser": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz",
- "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==",
- "dev": true
- },
"node_modules/set-function-length": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
@@ -16488,6 +16286,7 @@
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
@@ -16499,13 +16298,11 @@
"dev": true
},
"node_modules/strict-event-emitter": {
- "version": "0.2.8",
- "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.2.8.tgz",
- "integrity": "sha512-KDf/ujU8Zud3YaLtMCcTI4xkZlZVIYxTLr+XIULexP+77EEVWixeXroLUXQXiVtH4XH2W7jr/3PT1v3zBuvc3A==",
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz",
+ "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==",
"dev": true,
- "dependencies": {
- "events": "^3.3.0"
- }
+ "license": "MIT"
},
"node_modules/strict-uri-encode": {
"version": "2.0.0",
@@ -16515,35 +16312,6 @@
"node": ">=4"
}
},
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/string_decoder/node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
"node_modules/string-natural-compare": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz",
@@ -17158,12 +16926,6 @@
"node": ">=0.8"
}
},
- "node_modules/through": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
- "dev": true
- },
"node_modules/tiny-invariant": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
@@ -17198,18 +16960,6 @@
"node": ">=14.0.0"
}
},
- "node_modules/tmp": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
- "dev": true,
- "dependencies": {
- "os-tmpdir": "~1.0.2"
- },
- "engines": {
- "node": ">=0.6.0"
- }
- },
"node_modules/to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@@ -17363,12 +17113,13 @@
}
},
"node_modules/type-fest": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
- "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+ "version": "4.26.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.1.tgz",
+ "integrity": "sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==",
"dev": true,
+ "license": "(MIT OR CC0-1.0)",
"engines": {
- "node": ">=10"
+ "node": ">=16"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -17505,6 +17256,14 @@
"integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==",
"dev": true
},
+ "node_modules/undici-types": {
+ "version": "6.19.8",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
"node_modules/unicode-canonical-property-names-ecmascript": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
@@ -17874,15 +17633,6 @@
"node": ">=14"
}
},
- "node_modules/wcwidth": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
- "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
- "dev": true,
- "dependencies": {
- "defaults": "^1.0.3"
- }
- },
"node_modules/web-vitals": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-3.5.2.tgz",
@@ -18126,6 +17876,7 @@
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
"integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -18285,6 +18036,19 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/yoctocolors-cjs": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz",
+ "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/zustand": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/zustand/-/zustand-3.7.2.tgz",
diff --git a/web/vtadmin/package.json b/web/vtadmin/package.json
index 78d14ea9e9c..5d4d5dc787a 100644
--- a/web/vtadmin/package.json
+++ b/web/vtadmin/package.json
@@ -89,7 +89,7 @@
"eslint-config-react-app": "^7.0.1",
"i": "^0.3.7",
"jsdom": "^21.1.1",
- "msw": "^0.36.8",
+ "msw": "^2.5.2",
"npm": "^10.8.0",
"postcss": "^8.4.31",
"prettier": "^2.2.1",
diff --git a/web/vtadmin/src/api/http.test.ts b/web/vtadmin/src/api/http.test.ts
index 140b1a74c70..8da5d91c55d 100644
--- a/web/vtadmin/src/api/http.test.ts
+++ b/web/vtadmin/src/api/http.test.ts
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-import { rest } from 'msw';
+import { http, HttpResponse } from 'msw';
import * as api from './http';
import {
@@ -32,7 +32,7 @@ vi.mock('../errors/errorHandler');
// for all requests made against the given `endpoint`.
const mockServerJson = (endpoint: string, json: object, status: number = 200) => {
const apiAddr = import.meta.env.VITE_VTADMIN_API_ADDRESS;
- global.server.use(rest.get(`${apiAddr}${endpoint}`, (req, res, ctx) => res(ctx.status(status), ctx.json(json))));
+ global.server.use(http.get(`${apiAddr}${endpoint}`, (info) => HttpResponse.json(json, { status: status })));
};
describe('api/http', () => {
@@ -80,8 +80,10 @@ describe('api/http', () => {
errorHandler.notify.mockReset();
const endpoint = `/api/tablets`;
global.server.use(
- rest.get(`${import.meta.env.VITE_VTADMIN_API_ADDRESS}${endpoint}`, (req, res, ctx) =>
- res(ctx.status(504), ctx.body('504 Gateway Time-out '))
+ http.get(`${import.meta.env.VITE_VTADMIN_API_ADDRESS}${endpoint}`, (info) =>
+ HttpResponse.html('504 Gateway Time-out ', {
+ status: 504,
+ })
)
);
@@ -94,7 +96,7 @@ describe('api/http', () => {
/* eslint-disable jest/no-conditional-expect */
expect(e.name).toEqual(MALFORMED_HTTP_RESPONSE_ERROR);
expect(e.message).toContain(
- '[status 504] /api/tablets: invalid json response body at http://test-api.com/api/tablets'
+ `[status 504] /api/tablets: Unexpected token '<', " {
+ const { result } = await vtfetch(`/api/transaction/${clusterID}/${dtid}/info`);
+
+ const err = vtctldata.GetTransactionInfoResponse.verify(result);
+ if (err) throw Error(err);
+
+ return vtctldata.GetTransactionInfoResponse.create(result);
+};
+
export interface FetchTransactionsParams {
clusterID: string;
keyspace: string;
+ abandonAge?: string;
}
-export const fetchTransactions = async ({ clusterID, keyspace }: FetchTransactionsParams) => {
- const { result } = await vtfetch(`/api/transactions/${clusterID}/${keyspace}`);
+export const fetchTransactions = async ({ clusterID, keyspace, abandonAge = '' }: FetchTransactionsParams) => {
+ const req = new URLSearchParams();
+ req.append('abandon_age', abandonAge);
+
+ const { result } = await vtfetch(`/api/transactions/${clusterID}/${keyspace}?${req}`);
const err = vtctldata.GetUnresolvedTransactionsResponse.verify(result);
if (err) throw Error(err);
@@ -435,6 +453,19 @@ export const fetchTransactions = async ({ clusterID, keyspace }: FetchTransactio
return vtctldata.GetUnresolvedTransactionsResponse.create(result);
};
+export interface ConcludeTransactionParams {
+ clusterID: string;
+ dtid: string;
+}
+
+export const concludeTransaction = async ({ clusterID, dtid }: ConcludeTransactionParams) => {
+ const { result } = await vtfetch(`/api/transaction/${clusterID}/${dtid}/conclude`);
+ const err = vtctldata.ConcludeTransactionResponse.verify(result);
+ if (err) throw Error(err);
+
+ return vtctldata.ConcludeTransactionResponse.create(result);
+};
+
export const fetchWorkflows = async () => {
const { result } = await vtfetch(`/api/workflows`);
@@ -462,6 +493,29 @@ export const fetchWorkflowStatus = async (params: { clusterID: string; keyspace:
return vtctldata.WorkflowStatusResponse.create(result);
};
+export interface CreateMaterializeParams {
+ clusterID: string;
+ tableSettings: string;
+ request: vtctldata.IMaterializeCreateRequest;
+}
+
+export const createMaterialize = async ({ clusterID, tableSettings, request }: CreateMaterializeParams) => {
+ const body = {
+ table_settings: tableSettings,
+ request: request,
+ };
+
+ const { result } = await vtfetch(`/api/workflow/${clusterID}/materialize`, {
+ body: JSON.stringify(body),
+ method: 'post',
+ });
+
+ const err = vtctldata.MaterializeCreateResponse.verify(result);
+ if (err) throw Error(err);
+
+ return vtctldata.MaterializeCreateResponse.create(result);
+};
+
export interface CreateMoveTablesParams {
clusterID: string;
request: vtctldata.IMoveTablesCreateRequest;
@@ -479,6 +533,23 @@ export const createMoveTables = async ({ clusterID, request }: CreateMoveTablesP
return vtctldata.WorkflowStatusResponse.create(result);
};
+export interface CreateReshardParams {
+ clusterID: string;
+ request: vtctldata.IReshardCreateRequest;
+}
+
+export const createReshard = async ({ clusterID, request }: CreateReshardParams) => {
+ const { result } = await vtfetch(`/api/workflow/${clusterID}/reshard`, {
+ body: JSON.stringify(request),
+ method: 'post',
+ });
+
+ const err = vtctldata.WorkflowStatusResponse.verify(result);
+ if (err) throw Error(err);
+
+ return vtctldata.WorkflowStatusResponse.create(result);
+};
+
export interface WorkflowActionParams {
clusterID: string;
keyspace: string;
@@ -501,6 +572,54 @@ export const stopWorkflow = async ({ clusterID, keyspace, name }: WorkflowAction
return vtctldata.WorkflowUpdateResponse.create(result);
};
+export interface MoveTablesCompleteParams {
+ clusterID: string;
+ request: vtctldata.IMoveTablesCompleteRequest;
+}
+
+export const completeMoveTables = async ({ clusterID, request }: MoveTablesCompleteParams) => {
+ const { result } = await vtfetch(`/api/movetables/${clusterID}/complete`, {
+ body: JSON.stringify(request),
+ method: 'post',
+ });
+ const err = vtctldata.MoveTablesCompleteResponse.verify(result);
+ if (err) throw Error(err);
+
+ return vtctldata.MoveTablesCompleteResponse.create(result);
+};
+
+export interface WorkflowSwitchTrafficParams {
+ clusterID: string;
+ request: vtctldata.IWorkflowSwitchTrafficRequest;
+}
+
+export const workflowSwitchTraffic = async ({ clusterID, request }: WorkflowSwitchTrafficParams) => {
+ const { result } = await vtfetch(`/api/workflow/${clusterID}/switchtraffic`, {
+ body: JSON.stringify(request),
+ method: 'post',
+ });
+ const err = vtctldata.WorkflowSwitchTrafficResponse.verify(result);
+ if (err) throw Error(err);
+
+ return vtctldata.WorkflowSwitchTrafficResponse.create(result);
+};
+
+export interface WorkflowDeleteParams {
+ clusterID: string;
+ request: vtctldata.IWorkflowDeleteRequest;
+}
+
+export const workflowDelete = async ({ clusterID, request }: WorkflowDeleteParams) => {
+ const { result } = await vtfetch(`/api/workflow/${clusterID}/delete`, {
+ body: JSON.stringify(request),
+ method: 'post',
+ });
+ const err = vtctldata.WorkflowDeleteResponse.verify(result);
+ if (err) throw Error(err);
+
+ return vtctldata.WorkflowDeleteResponse.create(result);
+};
+
export const fetchVTExplain = async ({ cluster, keyspace, sql }: R) => {
// As an easy enhancement for later, we can also validate the request parameters on the front-end
// instead of defaulting to '', to save a round trip.
@@ -915,3 +1034,75 @@ export const validateVersionShard = async (params: ValidateVersionShardParams) =
return vtctldata.ValidateVersionShardResponse.create(result);
};
+
+export interface CreateVDiffParams {
+ clusterID: string;
+ request: vtctldata.IVDiffCreateRequest;
+}
+
+export const createVDiff = async ({ clusterID, request }: CreateVDiffParams) => {
+ const { result } = await vtfetch(`/api/vdiff/${clusterID}/`, {
+ body: JSON.stringify(request),
+ method: 'post',
+ });
+
+ const err = vtctldata.VDiffCreateResponse.verify(result);
+ if (err) throw Error(err);
+
+ return vtctldata.VDiffCreateResponse.create(result);
+};
+
+export interface ShowVDiffParams {
+ clusterID: string;
+ request: vtctldata.IVDiffShowRequest;
+}
+
+export const showVDiff = async ({ clusterID, request }: ShowVDiffParams) => {
+ const { result } = await vtfetch(`/api/vdiff/${clusterID}/show`, {
+ body: JSON.stringify(request),
+ method: 'post',
+ });
+
+ const err = vtadmin.VDiffShowResponse.verify(result);
+ if (err) throw Error(err);
+
+ return vtadmin.VDiffShowResponse.create(result);
+};
+
+export const fetchSchemaMigrations = async (request: vtadmin.IGetSchemaMigrationsRequest) => {
+ const { result } = await vtfetch(`/api/migrations/`, {
+ body: JSON.stringify(request),
+ method: 'post',
+ });
+
+ const err = vtadmin.GetSchemaMigrationsResponse.verify(result);
+ if (err) throw Error(err);
+
+ return vtadmin.GetSchemaMigrationsResponse.create(result);
+};
+
+export interface ApplySchemaParams {
+ clusterID: string;
+ keyspace: string;
+ callerID: string;
+ sql: string;
+ request: vtctldata.IApplySchemaRequest;
+}
+
+export const applySchema = async ({ clusterID, keyspace, callerID, sql, request }: ApplySchemaParams) => {
+ const body = {
+ sql,
+ caller_id: callerID,
+ request,
+ };
+
+ const { result } = await vtfetch(`/api/migration/${clusterID}/${keyspace}`, {
+ body: JSON.stringify(body),
+ method: 'post',
+ });
+
+ const err = vtctldata.ApplySchemaResponse.verify(result);
+ if (err) throw Error(err);
+
+ return vtctldata.ApplySchemaResponse.create(result);
+};
diff --git a/web/vtadmin/src/components/ActionPanel.test.tsx b/web/vtadmin/src/components/ActionPanel.test.tsx
index 6d0bc02b30f..6f1bed60603 100644
--- a/web/vtadmin/src/components/ActionPanel.test.tsx
+++ b/web/vtadmin/src/components/ActionPanel.test.tsx
@@ -16,7 +16,7 @@
import { render, screen, waitFor } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
-import { rest } from 'msw';
+import { delay, http, HttpResponse } from 'msw';
import { QueryClient, QueryClientProvider, useMutation } from 'react-query';
import { describe, it, expect, vi } from 'vitest';
@@ -33,11 +33,7 @@ describe('ActionPanel', () => {
* provides such a function and should be `render`ed in the context QueryClientProvider.
*/
const Wrapper: React.FC = (props) => {
- const mutation = useMutation(() => fetch(new URL(props['url']), { method: 'post' }), {
- onError: (error) => {
- console.log('ERROR: ', error);
- },
- });
+ const mutation = useMutation(() => fetch(new URL(props['url']), { method: 'post' }));
return ;
};
@@ -46,8 +42,9 @@ describe('ActionPanel', () => {
const url = `${import.meta.env.VITE_VTADMIN_API_ADDRESS}/api/test`;
global.server.use(
- rest.post(url, (req, res, ctx) => {
- return res(ctx.json({ ok: true }));
+ http.post(url, async (info) => {
+ await delay();
+ return HttpResponse.json({ ok: true });
})
);
diff --git a/web/vtadmin/src/components/App.tsx b/web/vtadmin/src/components/App.tsx
index e65bbfde32b..fd0f772ae19 100644
--- a/web/vtadmin/src/components/App.tsx
+++ b/web/vtadmin/src/components/App.tsx
@@ -42,6 +42,12 @@ import { Topology } from './routes/topology/Topology';
import { ClusterTopology } from './routes/topology/ClusterTopology';
import { CreateMoveTables } from './routes/createWorkflow/CreateMoveTables';
import { Transactions } from './routes/Transactions';
+import { Transaction } from './routes/transaction/Transaction';
+import { CreateReshard } from './routes/createWorkflow/CreateReshard';
+import { CreateMaterialize } from './routes/createWorkflow/CreateMaterialize';
+import { TopologyTree } from './routes/topologyTree/TopologyTree';
+import { SchemaMigrations } from './routes/SchemaMigrations';
+import { CreateSchemaMigration } from './routes/createSchemaMigration/CreateSchemaMigration';
export const App = () => {
return (
@@ -117,6 +123,18 @@ export const App = () => {
)}
+ {!isReadOnlyMode() && (
+
+
+
+ )}
+
+ {!isReadOnlyMode() && (
+
+
+
+ )}
+
@@ -125,14 +143,32 @@ export const App = () => {
+
+
+
+
+ {!isReadOnlyMode() && (
+
+
+
+ )}
+
+
+
+
+
+
+
+
+
diff --git a/web/vtadmin/src/components/NavRail.tsx b/web/vtadmin/src/components/NavRail.tsx
index 9f9e1bf1681..b30cd165684 100644
--- a/web/vtadmin/src/components/NavRail.tsx
+++ b/web/vtadmin/src/components/NavRail.tsx
@@ -65,6 +65,9 @@ export const NavRail = () => {
+
+
+
diff --git a/web/vtadmin/src/components/dataTable/DataTable.tsx b/web/vtadmin/src/components/dataTable/DataTable.tsx
index ed14067bd34..9e863a6aa54 100644
--- a/web/vtadmin/src/components/dataTable/DataTable.tsx
+++ b/web/vtadmin/src/components/dataTable/DataTable.tsx
@@ -31,6 +31,10 @@ interface Props {
pageSize?: number;
renderRows: (rows: T[]) => JSX.Element[];
title?: string;
+ // Pass a unique `pageKey` for each DataTable, in case multiple
+ // DataTables access the same URL. This will be used to
+ // access page number from the URL.
+ pageKey?: string;
}
// Generally, page sizes of ~100 rows are fine in terms of performance,
@@ -43,12 +47,15 @@ export const DataTable = ({
pageSize = DEFAULT_PAGE_SIZE,
renderRows,
title,
+ pageKey = '',
}: Props) => {
const { pathname } = useLocation();
const urlQuery = useURLQuery();
+ const pageQueryKey = `${pageKey}page`;
+
const totalPages = Math.ceil(data.length / pageSize);
- const { page } = useURLPagination({ totalPages });
+ const { page } = useURLPagination({ totalPages, pageQueryKey });
const startIndex = (page - 1) * pageSize;
const endIndex = startIndex + pageSize;
@@ -59,7 +66,7 @@ export const DataTable = ({
const formatPageLink = (p: number) => ({
pathname,
- search: stringify({ ...urlQuery.query, page: p === 1 ? undefined : p }),
+ search: stringify({ ...urlQuery.query, [pageQueryKey]: p === 1 ? undefined : p }),
});
return (
diff --git a/web/vtadmin/src/components/routes/createWorkflow/ErrorDialog.tsx b/web/vtadmin/src/components/dialog/ErrorDialog.tsx
similarity index 94%
rename from web/vtadmin/src/components/routes/createWorkflow/ErrorDialog.tsx
rename to web/vtadmin/src/components/dialog/ErrorDialog.tsx
index 25ac5dedb0b..087876e4cd2 100644
--- a/web/vtadmin/src/components/routes/createWorkflow/ErrorDialog.tsx
+++ b/web/vtadmin/src/components/dialog/ErrorDialog.tsx
@@ -14,8 +14,8 @@
* limitations under the License.
*/
import React from 'react';
-import Dialog from '../../dialog/Dialog';
-import { Icon, Icons } from '../../Icon';
+import Dialog from './Dialog';
+import { Icon, Icons } from '../Icon';
export interface ErrorDialogProps {
errorTitle?: string;
diff --git a/web/vtadmin/src/components/inputs/Select.tsx b/web/vtadmin/src/components/inputs/Select.tsx
index d1fdd83af6e..588c350073c 100644
--- a/web/vtadmin/src/components/inputs/Select.tsx
+++ b/web/vtadmin/src/components/inputs/Select.tsx
@@ -37,6 +37,7 @@ interface Props {
size?: 'large';
description?: string;
required?: boolean;
+ disableClearSelection?: boolean;
}
/**
@@ -60,6 +61,7 @@ export const Select = ({
size,
description,
required,
+ disableClearSelection,
}: Props) => {
const _itemToString = React.useCallback(
(item: T | null): string => {
@@ -146,7 +148,7 @@ export const Select = ({
{content}
- {selectedItem && (
+ {selectedItem && !disableClearSelection && (
selectItem(null as any)} type="button">
Clear selection
diff --git a/web/vtadmin/src/components/links/TransactionLink.tsx b/web/vtadmin/src/components/links/TransactionLink.tsx
new file mode 100644
index 00000000000..64f9d12ddf4
--- /dev/null
+++ b/web/vtadmin/src/components/links/TransactionLink.tsx
@@ -0,0 +1,40 @@
+/**
+ * Copyright 2024 The Vitess Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from 'react';
+import { Link } from 'react-router-dom';
+
+interface Props {
+ className?: string;
+ clusterID: string | null | undefined;
+ dtid: string | null | undefined;
+}
+
+export const TransactionLink: React.FunctionComponent
= ({ children, className, clusterID, dtid, ...props }) => {
+ if (!clusterID || !dtid) {
+ return {children} ;
+ }
+
+ const to = {
+ pathname: `/transaction/${clusterID}/${dtid}`,
+ };
+
+ return (
+
+ {children}
+
+ );
+};
diff --git a/web/vtadmin/src/components/routes/SchemaMigrations.tsx b/web/vtadmin/src/components/routes/SchemaMigrations.tsx
new file mode 100644
index 00000000000..1761d26de49
--- /dev/null
+++ b/web/vtadmin/src/components/routes/SchemaMigrations.tsx
@@ -0,0 +1,195 @@
+/**
+ * Copyright 2024 The Vitess Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { useEffect, useState } from 'react';
+import { useKeyspaces, useSchemaMigrations } from '../../hooks/api';
+import { DataCell } from '../dataTable/DataCell';
+import { DataTable } from '../dataTable/DataTable';
+import { ContentContainer } from '../layout/ContentContainer';
+import { WorkspaceHeader } from '../layout/WorkspaceHeader';
+import { WorkspaceTitle } from '../layout/WorkspaceTitle';
+import { QueryLoadingPlaceholder } from '../placeholders/QueryLoadingPlaceholder';
+import { useDocumentTitle } from '../../hooks/useDocumentTitle';
+import { vtadmin } from '../../proto/vtadmin';
+import { Select } from '../inputs/Select';
+import { ShardLink } from '../links/ShardLink';
+import { formatDateTime } from '../../util/time';
+import { ReadOnlyGate } from '../ReadOnlyGate';
+import { formatSchemaMigrationStatus } from '../../util/schemaMigrations';
+import { Link } from 'react-router-dom';
+import { TabletLink } from '../links/TabletLink';
+import { formatAlias } from '../../util/tablets';
+import { useURLQuery } from '../../hooks/useURLQuery';
+
+const COLUMNS = ['UUID', 'Status', 'DDL Action', 'Timestamps', 'Stage', 'Progress'];
+
+export const SchemaMigrations = () => {
+ useDocumentTitle('Schema Migrations');
+
+ const { query, replaceQuery } = useURLQuery();
+ const urlKeyspace = query['keyspace'];
+ const urlCluster = query['cluster'];
+
+ const keyspacesQuery = useKeyspaces();
+ const { data: keyspaces = [], ...ksQuery } = keyspacesQuery;
+
+ const [selectedKeyspace, setSelectedKeypsace] = useState();
+
+ const request: vtadmin.IGetSchemaMigrationsRequest = {
+ cluster_requests: [
+ {
+ cluster_id: selectedKeyspace && selectedKeyspace.cluster?.id,
+ request: {
+ keyspace: selectedKeyspace && selectedKeyspace.keyspace?.name,
+ },
+ },
+ ],
+ };
+
+ const schemaMigrationsQuery = useSchemaMigrations(request, {
+ enabled: !!selectedKeyspace,
+ });
+
+ const schemaMigrations = schemaMigrationsQuery.data ? schemaMigrationsQuery.data.schema_migrations : [];
+
+ const handleKeyspaceChange = (ks: vtadmin.Keyspace | null | undefined) => {
+ setSelectedKeypsace(ks);
+
+ if (ks) {
+ replaceQuery({ keyspace: ks.keyspace?.name, cluster: ks.cluster?.id });
+ } else {
+ replaceQuery({ keyspace: undefined, cluster: undefined });
+ }
+ };
+
+ useEffect(() => {
+ if (urlKeyspace && urlCluster) {
+ const keyspace = keyspaces.find(
+ (ks) => ks.cluster?.id === String(urlCluster) && ks.keyspace?.name === String(urlKeyspace)
+ );
+
+ if (keyspace) {
+ setSelectedKeypsace(keyspace);
+ } else if (!ksQuery.isLoading) {
+ replaceQuery({ keyspace: undefined, cluster: undefined });
+ }
+ } else {
+ setSelectedKeypsace(undefined);
+ }
+ }, [urlKeyspace, urlCluster, keyspaces, ksQuery.isLoading, replaceQuery]);
+
+ const renderRows = (rows: vtadmin.ISchemaMigration[]) => {
+ return rows.map((row) => {
+ const migrationInfo = row.schema_migration;
+
+ if (!migrationInfo) return <>>;
+
+ return (
+
+
+ {migrationInfo.uuid}
+
+ Tablet{' '}
+
+ {formatAlias(migrationInfo.tablet)}
+
+
+
+ Shard{' '}
+
+ {`${migrationInfo.keyspace}/${migrationInfo.shard}`}
+
+
+
+
+ {formatSchemaMigrationStatus(migrationInfo)}
+
+ {migrationInfo.ddl_action ? migrationInfo.ddl_action : '-'}
+
+ {migrationInfo.added_at && (
+
+ Added
+ {formatDateTime(migrationInfo.added_at?.seconds)}
+
+ )}
+ {migrationInfo.requested_at && (
+
+ Requested
+ {formatDateTime(migrationInfo.requested_at?.seconds)}
+
+ )}
+ {migrationInfo.started_at && (
+
+ Started
+ {formatDateTime(migrationInfo.started_at?.seconds)}
+
+ )}
+ {migrationInfo.completed_at && (
+
+ Completed
+ {formatDateTime(migrationInfo.completed_at?.seconds)}
+
+ )}
+
+ {migrationInfo.stage ? migrationInfo.stage : '-'}
+ {migrationInfo.progress ? `${migrationInfo.progress}%` : '-'}
+
+ );
+ });
+ };
+
+ return (
+
+
+
+
Schema Migrations
+
+
+
+ Create Schema Migration Request
+
+
+
+
+
+
+
+
+ handleKeyspaceChange(ks)}
+ placeholder={
+ keyspacesQuery.isLoading
+ ? 'Loading keyspaces...'
+ : 'Select a keyspace to view schema migrations'
+ }
+ renderItem={(ks) => `${ks?.keyspace?.name} (${ks?.cluster?.id})`}
+ selectedItem={selectedKeyspace}
+ />
+
+
+
+
+
+ );
+};
diff --git a/web/vtadmin/src/components/routes/Transactions.tsx b/web/vtadmin/src/components/routes/Transactions.tsx
index 8a40a039394..6320332b0b3 100644
--- a/web/vtadmin/src/components/routes/Transactions.tsx
+++ b/web/vtadmin/src/components/routes/Transactions.tsx
@@ -29,8 +29,41 @@ import { formatTransactionState } from '../../util/transactions';
import { ShardLink } from '../links/ShardLink';
import { formatDateTime, formatRelativeTimeInSeconds } from '../../util/time';
import { orderBy } from 'lodash-es';
+import { ReadOnlyGate } from '../ReadOnlyGate';
+import TransactionActions from './transactions/TransactionActions';
+import { isReadOnlyMode } from '../../util/env';
+import { TransactionLink } from '../links/TransactionLink';
+import * as React from 'react';
-const COLUMNS = ['ID', 'State', 'Participants', 'Time Created'];
+export const COLUMNS = ['ID', 'State', 'Participants', 'Time Created', 'Actions'];
+export const READ_ONLY_COLUMNS = ['ID', 'State', 'Participants', 'Time Created'];
+
+const ABANDON_AGE_OPTIONS = [
+ {
+ displayText: '5sec',
+ abandonAge: '5',
+ },
+ {
+ displayText: '30sec',
+ abandonAge: '30',
+ },
+ {
+ displayText: '1min',
+ abandonAge: '60',
+ },
+ {
+ displayText: '5min',
+ abandonAge: '300',
+ },
+ {
+ displayText: '15min',
+ abandonAge: '900',
+ },
+ {
+ displayText: '1hr',
+ abandonAge: '3600',
+ },
+];
export const Transactions = () => {
useDocumentTitle('In Flight Distributed Transactions');
@@ -39,12 +72,14 @@ export const Transactions = () => {
const { data: keyspaces = [] } = keyspacesQuery;
- const [params, setParams] = useState({ clusterID: '', keyspace: '' });
+ const [params, setParams] = useState({ clusterID: '', keyspace: '', abandonAge: '900' });
const selectedKeyspace = keyspaces.find(
(ks) => ks.keyspace?.name === params.keyspace && ks.cluster?.id === params.clusterID
);
+ const selectedAbandonAge = ABANDON_AGE_OPTIONS.find((option) => option.abandonAge === params.abandonAge);
+
const transactionsQuery = useTransactions(params, {
enabled: !!params.keyspace,
});
@@ -57,7 +92,9 @@ export const Transactions = () => {
return (
- {row.dtid}
+
+ {row.dtid}
+
{formatTransactionState(row)}
@@ -82,6 +119,15 @@ export const Transactions = () => {
{formatRelativeTimeInSeconds(row.time_created)}
+
+
+
+
+
);
});
@@ -94,22 +140,49 @@ export const Transactions = () => {
- setParams({ clusterID: ks?.cluster?.id!, keyspace: ks?.keyspace?.name! })}
- placeholder={
- keyspacesQuery.isLoading
- ? 'Loading keyspaces...'
- : 'Select a keyspace to view unresolved transactions'
- }
- renderItem={(ks) => `${ks?.keyspace?.name} (${ks?.cluster?.id})`}
- selectedItem={selectedKeyspace}
+
+
+ setParams((prevParams) => ({
+ ...prevParams,
+ clusterID: ks?.cluster?.id!,
+ keyspace: ks?.keyspace?.name!,
+ }))
+ }
+ placeholder={
+ keyspacesQuery.isLoading
+ ? 'Loading keyspaces...'
+ : 'Select a keyspace to view unresolved transactions'
+ }
+ renderItem={(ks) => `${ks?.keyspace?.name} (${ks?.cluster?.id})`}
+ selectedItem={selectedKeyspace}
+ />
+
+ setParams((prevParams) => ({ ...prevParams, abandonAge: option?.abandonAge }))
+ }
+ placeholder={'Select abandon age'}
+ renderItem={(option) => `${option?.displayText}`}
+ selectedItem={selectedAbandonAge}
+ />
+
+
-
diff --git a/web/vtadmin/src/components/routes/Workflows.tsx b/web/vtadmin/src/components/routes/Workflows.tsx
index 1c782352954..572907fba3c 100644
--- a/web/vtadmin/src/components/routes/Workflows.tsx
+++ b/web/vtadmin/src/components/routes/Workflows.tsx
@@ -193,10 +193,13 @@ export const Workflows = () => {
@@ -219,8 +222,12 @@ export const Workflows = () => {
MoveTables
- Reshard
- Materialize
+
+ Reshard
+
+
+ Materialize
+
diff --git a/web/vtadmin/src/components/routes/createKeyspace/CreateKeyspace.test.tsx b/web/vtadmin/src/components/routes/createKeyspace/CreateKeyspace.test.tsx
index b983bc3ba36..1a54ae381c4 100644
--- a/web/vtadmin/src/components/routes/createKeyspace/CreateKeyspace.test.tsx
+++ b/web/vtadmin/src/components/routes/createKeyspace/CreateKeyspace.test.tsx
@@ -13,8 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-import { rest } from 'msw';
-import { setupServer } from 'msw/node';
+import { delay, http, HttpResponse } from 'msw';
import { render, screen, waitFor } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { createMemoryHistory } from 'history';
@@ -32,33 +31,27 @@ import * as Snackbar from '../../Snackbar';
// about UI structure (boo!), which means this test is rather brittle
// to UI changes (e.g., like how the Select works, adding new form fields, etc.)
describe('CreateKeyspace integration test', () => {
- const server = setupServer();
-
- afterAll(() => {
- server.close();
- });
-
it('successfully creates a keyspace', async () => {
vi.spyOn(global, 'fetch');
vi.spyOn(Snackbar, 'success');
const cluster = { id: 'local', name: 'local' };
const apiAddr = import.meta.env.VITE_VTADMIN_API_ADDRESS;
- server.use(
- rest.get(`${apiAddr}/api/clusters`, (req, res, ctx) => {
- return res(ctx.json({ result: { clusters: [cluster] }, ok: true }));
+ global.server.use(
+ http.get(`${apiAddr}/api/clusters`, async (info) => {
+ return HttpResponse.json({ result: { clusters: [cluster] }, ok: true });
}),
- rest.post(`${apiAddr}/api/keyspace/:clusterID`, (req, res, ctx) => {
+ http.post(`${apiAddr}/api/keyspace/:clusterID`, async (info) => {
+ await delay();
const data: vtadmin.ICreateKeyspaceResponse = {
keyspace: {
cluster: { id: cluster.id, name: cluster.name },
keyspace: { name: 'some-keyspace' },
},
};
- return res(ctx.json({ result: data, ok: true }));
+ return HttpResponse.json({ result: data, ok: true });
})
);
- server.listen();
const history = createMemoryHistory();
vi.spyOn(history, 'push');
diff --git a/web/vtadmin/src/components/routes/createSchemaMigration/CreateSchemaMigration.module.scss b/web/vtadmin/src/components/routes/createSchemaMigration/CreateSchemaMigration.module.scss
new file mode 100644
index 00000000000..51f5fdca04e
--- /dev/null
+++ b/web/vtadmin/src/components/routes/createSchemaMigration/CreateSchemaMigration.module.scss
@@ -0,0 +1,30 @@
+/**
+ * Copyright 2024 The Vitess Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+.sqlInput {
+ border: solid 2px var(--colorDisabled);
+ border-radius: 6px;
+ display: block;
+ font-family: var(--fontFamilyMonospace);
+ line-height: var(--lineHeightBody);
+ padding: 0.8rem;
+ resize: vertical;
+ width: 100%;
+}
+
+.sqlInput:focus {
+ border-color: var(--colorPrimary);
+ outline: none;
+}
diff --git a/web/vtadmin/src/components/routes/createSchemaMigration/CreateSchemaMigration.tsx b/web/vtadmin/src/components/routes/createSchemaMigration/CreateSchemaMigration.tsx
new file mode 100644
index 00000000000..0f7326d2ae1
--- /dev/null
+++ b/web/vtadmin/src/components/routes/createSchemaMigration/CreateSchemaMigration.tsx
@@ -0,0 +1,270 @@
+/**
+ * Copyright 2024 The Vitess Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { useEffect, useState } from 'react';
+import { Link, useHistory } from 'react-router-dom';
+
+import style from './CreateSchemaMigration.module.scss';
+import { useApplySchema, useClusters, useKeyspaces } from '../../../hooks/api';
+import { useDocumentTitle } from '../../../hooks/useDocumentTitle';
+import { Label } from '../../inputs/Label';
+import { Select } from '../../inputs/Select';
+import { ContentContainer } from '../../layout/ContentContainer';
+import { NavCrumbs } from '../../layout/NavCrumbs';
+import { WorkspaceHeader } from '../../layout/WorkspaceHeader';
+import { WorkspaceTitle } from '../../layout/WorkspaceTitle';
+import { TextInput } from '../../TextInput';
+import { success } from '../../Snackbar';
+import { FormError } from '../../forms/FormError';
+import { vtadmin } from '../../../proto/vtadmin';
+import ErrorDialog from '../../dialog/ErrorDialog';
+
+interface FormData {
+ clusterID: string;
+ keyspace: string;
+ ddlStrategy: string;
+ sql: string;
+ batchSize: number;
+ callerID: string;
+ migrationContext: string;
+ uuidList: string;
+}
+
+const DEFAULT_FORM_DATA: FormData = {
+ clusterID: '',
+ keyspace: '',
+ // Default DDL Strategy set to "vitess".
+ ddlStrategy: 'vitess',
+ sql: '',
+ batchSize: 0,
+ callerID: '',
+ migrationContext: '',
+ uuidList: '',
+};
+
+const DDL_STRATEGY_HELP_TEXT = `Online DDL strategy, compatible with @@ddl_strategy session variable (default "vitess")`;
+
+const MIGRATION_CONTEXT_HELP_TEXT =
+ 'For Online DDL, optionally supply a custom unique string used as context for the migration(s) in this command. By default a unique context is auto-generated by Vitess.';
+
+const CALLER_ID_HELP_TEXT =
+ 'Effective caller ID used for the operation and should map to an ACL name which grants this identity the necessary permissions to perform the operation (this is only necessary when strict table ACLs are used)';
+
+export const CreateSchemaMigration = () => {
+ useDocumentTitle('Create Schema Migration Request');
+
+ const history = useHistory();
+
+ const [formData, setFormData] = useState(DEFAULT_FORM_DATA);
+
+ const [clusterKeyspaces, setClusterKeyspaces] = useState([]);
+
+ const [errorDialogOpen, setErrorDialogOpen] = useState(false);
+
+ const { data: clusters = [], ...clustersQuery } = useClusters();
+
+ const { data: keyspaces = [], ...keyspacesQuery } = useKeyspaces();
+
+ const mutation = useApplySchema(
+ {
+ clusterID: formData.clusterID,
+ keyspace: formData.keyspace,
+ callerID: formData.callerID,
+ sql: formData.sql,
+ request: {
+ ddl_strategy: formData.ddlStrategy,
+ batch_size: formData.batchSize,
+ migration_context: formData.migrationContext,
+ uuid_list: (formData.uuidList && formData.uuidList.split(',').map((uuid) => uuid.trim())) || undefined,
+ },
+ },
+ {
+ onSuccess: () => {
+ success(`Successfully created schema migration request.`, { autoClose: 1600 });
+
+ history.push({
+ pathname: `/migrations`,
+ search: `?keyspace=${formData.keyspace}&cluster=${formData.clusterID}`,
+ });
+ },
+ onError: () => {
+ setErrorDialogOpen(true);
+ },
+ }
+ );
+
+ let selectedCluster = null;
+ if (!!formData.clusterID) {
+ selectedCluster = clusters.find((c) => c.id === formData.clusterID);
+ }
+
+ let selectedKeyspace = null;
+ if (!!formData.keyspace) {
+ selectedKeyspace = keyspaces.find((ks) => ks.keyspace?.name === formData.keyspace);
+ }
+
+ const isValid = !!selectedCluster && !!formData.keyspace && !!formData.sql && !!formData.ddlStrategy;
+
+ const isDisabled = !isValid || mutation.isLoading;
+
+ const onSubmit: React.FormEventHandler = (e) => {
+ e.preventDefault();
+ mutation.mutate();
+ };
+
+ useEffect(() => {
+ // Clear out the selected keyspaces if selected cluster is changed.
+ setFormData((prevFormData) => ({ ...prevFormData, keyspace: '' }));
+ setClusterKeyspaces(keyspaces.filter((ks) => ks.cluster?.id === formData.clusterID));
+ }, [formData.clusterID, keyspaces]);
+
+ useEffect(() => {
+ if (clusters.length === 1) {
+ setFormData((prevFormData) => ({ ...prevFormData, clusterID: clusters[0].id }));
+ }
+ }, [clusters]);
+
+ return (
+
+
+
+ Schema Migrations
+
+
+ Create Schema Migration Request
+
+
+
+
+
+ {mutation.isError && !mutation.isLoading && (
+ {
+ setErrorDialogOpen(false);
+ }}
+ />
+ )}
+
+
+ );
+};
diff --git a/web/vtadmin/src/components/routes/createWorkflow/CreateMaterialize.tsx b/web/vtadmin/src/components/routes/createWorkflow/CreateMaterialize.tsx
new file mode 100644
index 00000000000..81447cd0e6d
--- /dev/null
+++ b/web/vtadmin/src/components/routes/createWorkflow/CreateMaterialize.tsx
@@ -0,0 +1,350 @@
+/**
+ * Copyright 2024 The Vitess Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { useEffect, useState } from 'react';
+import { Link, useHistory } from 'react-router-dom';
+
+import { useClusters, useCreateMaterialize, useKeyspaces, useSchemas } from '../../../hooks/api';
+import { useDocumentTitle } from '../../../hooks/useDocumentTitle';
+import { Label } from '../../inputs/Label';
+import { Select } from '../../inputs/Select';
+import { ContentContainer } from '../../layout/ContentContainer';
+import { NavCrumbs } from '../../layout/NavCrumbs';
+import { WorkspaceHeader } from '../../layout/WorkspaceHeader';
+import { WorkspaceTitle } from '../../layout/WorkspaceTitle';
+import { TextInput } from '../../TextInput';
+import { success } from '../../Snackbar';
+import { FormError } from '../../forms/FormError';
+import Toggle from '../../toggle/Toggle';
+import { tabletmanagerdata, vtadmin, vtctldata } from '../../../proto/vtadmin';
+import { MultiSelect } from '../../inputs/MultiSelect';
+import { TABLET_TYPES } from '../../../util/tablets';
+import ErrorDialog from '../../dialog/ErrorDialog';
+
+interface FormData {
+ clusterID: string;
+ workflow: string;
+ targetKeyspace: string;
+ sourceKeyspace: string;
+ tableSettings: string;
+ cells: string;
+ referenceTables: string[];
+ tabletTypes: number[];
+ stopAfterCopy: boolean;
+ tabletSelectionPreference: boolean;
+}
+
+const DEFAULT_FORM_DATA: FormData = {
+ clusterID: '',
+ workflow: '',
+ targetKeyspace: '',
+ sourceKeyspace: '',
+ tableSettings: '',
+ cells: '',
+ referenceTables: [],
+ tabletTypes: [1, 2],
+ stopAfterCopy: false,
+ tabletSelectionPreference: true,
+};
+
+const TABLET_OPTIONS = [1, 2, 3];
+
+export const CreateMaterialize = () => {
+ useDocumentTitle('Create a Materialize Workflow');
+
+ const history = useHistory();
+
+ const [formData, setFormData] = useState(DEFAULT_FORM_DATA);
+
+ const [clusterKeyspaces, setClusterKeyspaces] = useState([]);
+
+ const [targetTables, setTargetTables] = useState([]);
+
+ const [errorDialogOpen, setErrorDialogOpen] = useState(false);
+
+ const { data: schemas = [] } = useSchemas();
+
+ const { data: clusters = [], ...clustersQuery } = useClusters();
+
+ const { data: keyspaces = [], ...keyspacesQuery } = useKeyspaces();
+
+ const mutation = useCreateMaterialize(
+ {
+ clusterID: formData.clusterID,
+ tableSettings: formData.tableSettings,
+ request: {
+ settings: {
+ workflow: formData.workflow,
+ source_keyspace: formData.sourceKeyspace,
+ target_keyspace: formData.targetKeyspace,
+ reference_tables: formData.referenceTables,
+ cell: formData.cells
+ .split(',')
+ .map((cell) => cell.trim())
+ .join(','),
+ tablet_types: formData.tabletTypes.map((tt) => TABLET_TYPES[tt]).join(','),
+ stop_after_copy: formData.stopAfterCopy,
+ tablet_selection_preference: formData.tabletSelectionPreference
+ ? tabletmanagerdata.TabletSelectionPreference.INORDER
+ : tabletmanagerdata.TabletSelectionPreference.ANY,
+ // Default Value
+ materialization_intent: vtctldata.MaterializationIntent.CUSTOM,
+ },
+ },
+ },
+ {
+ onSuccess: () => {
+ success(`Created workflow ${formData.workflow}`, { autoClose: 1600 });
+ history.push(`/workflows`);
+ },
+ onError: () => {
+ setErrorDialogOpen(true);
+ },
+ }
+ );
+
+ let selectedCluster = null;
+ if (!!formData.clusterID) {
+ selectedCluster = clusters.find((c) => c.id === formData.clusterID);
+ }
+
+ let selectedSourceKeyspace = null;
+ if (!!formData.sourceKeyspace) {
+ selectedSourceKeyspace = keyspaces.find((ks) => ks.keyspace?.name === formData.sourceKeyspace);
+ }
+
+ let selectedTargetKeyspace = null;
+ if (!!formData.targetKeyspace) {
+ selectedTargetKeyspace = keyspaces.find((ks) => ks.keyspace?.name === formData.targetKeyspace);
+ }
+
+ const isValid =
+ !!selectedCluster &&
+ !!formData.sourceKeyspace &&
+ !!formData.targetKeyspace &&
+ !!formData.workflow &&
+ !!formData.tableSettings;
+
+ const isDisabled = !isValid || mutation.isLoading;
+
+ const onSubmit: React.FormEventHandler = (e) => {
+ e.preventDefault();
+ mutation.mutate();
+ };
+
+ useEffect(() => {
+ // Clear out the selected keyspaces if selected cluster is changed.
+ setFormData((prevFormData) => ({ ...prevFormData, sourceKeyspace: '', targetKeyspace: '' }));
+ setClusterKeyspaces(keyspaces.filter((ks) => ks.cluster?.id === formData.clusterID));
+ }, [formData.clusterID, keyspaces]);
+
+ useEffect(() => {
+ if (clusters.length === 1) {
+ setFormData((prevFormData) => ({ ...prevFormData, clusterID: clusters[0].id }));
+ }
+ }, [clusters]);
+
+ useEffect(() => {
+ // Clear out the selected tables if the source keypsace is changed.
+ setFormData((prevFormData) => ({ ...prevFormData, tables: [] }));
+ setTargetTables([]);
+ if (schemas) {
+ const schemaData = schemas.find(
+ (s) => s.keyspace === formData.targetKeyspace && s.cluster?.id === formData.clusterID
+ );
+ if (schemaData) {
+ setTargetTables(schemaData?.table_definitions.map((def) => def.name || ''));
+ }
+ }
+ }, [formData.targetKeyspace, formData.clusterID, schemas]);
+
+ return (
+
+
+
+ Workflows
+
+
+ Create New Materialize Workflow
+
+
+
+
+
+
+ setFormData({ ...formData, workflow: e.target.value })}
+ value={formData.workflow || ''}
+ required
+ />
+
+ ks?.keyspace?.name || ''}
+ items={clusterKeyspaces}
+ label="Source Keyspace"
+ helpText={
+ "Keyspace where the tables queried in the 'source_expression' values within table-settings live"
+ }
+ onChange={(ks) => setFormData({ ...formData, sourceKeyspace: ks?.keyspace?.name || '' })}
+ placeholder={keyspacesQuery.isLoading ? 'Loading keyspaces...' : 'Select a keyspace'}
+ renderItem={(ks) => `${ks?.keyspace?.name}`}
+ selectedItem={selectedSourceKeyspace}
+ />
+ ks?.keyspace?.name || ''}
+ items={clusterKeyspaces}
+ label="Target Keyspace"
+ onChange={(ks) => setFormData({ ...formData, targetKeyspace: ks?.keyspace?.name || '' })}
+ placeholder={keyspacesQuery.isLoading ? 'Loading keyspaces...' : 'Select a keyspace'}
+ renderItem={(ks) => `${ks?.keyspace?.name}`}
+ selectedItem={selectedTargetKeyspace}
+ />
+
+ setFormData({ ...formData, tableSettings: e.target.value })}
+ value={formData.tableSettings || ''}
+ required
+ />
+
+
+
+ Advanced
+
+
+
+ setFormData({ ...formData, cells: e.target.value })}
+ value={formData.cells || ''}
+ />
+
+ cluster?.name || ''}
+ items={clusters}
+ label="Cluster"
+ onChange={(c) => setFormData({ ...formData, clusterID: c?.id || '' })}
+ placeholder={clustersQuery.isLoading ? 'Loading clusters...' : 'Select a cluster'}
+ renderItem={(c) => `${c?.name} (${c?.id})`}
+ selectedItem={selectedCluster}
+ />
+ TABLET_TYPES[tt]}
+ selectedItems={formData.tabletTypes}
+ label="Tablet Types"
+ helpText={'Source tablet types to replicate table data from'}
+ onChange={(types) => setFormData({ ...formData, tabletTypes: types })}
+ placeholder="Select tablet types"
+ />
+ setFormData({ ...formData, referenceTables })}
+ placeholder="Select tables"
+ />
+
+
+
+
+
+
+ setFormData({
+ ...formData,
+ tabletSelectionPreference: !formData.tabletSelectionPreference,
+ })
+ }
+ />
+
+
+
+
+
+
+
+ setFormData({ ...formData, stopAfterCopy: !formData.stopAfterCopy })
+ }
+ />
+
+
+
+
+
+ {clustersQuery.isError && (
+
+ )}
+
+
+
+ {mutation.isLoading ? 'Creating Workflow...' : 'Create Workflow'}
+
+
+
+
+ {mutation.isError && !mutation.isLoading && (
+ {
+ setErrorDialogOpen(false);
+ }}
+ />
+ )}
+
+
+ );
+};
diff --git a/web/vtadmin/src/components/routes/createWorkflow/CreateMoveTables.tsx b/web/vtadmin/src/components/routes/createWorkflow/CreateMoveTables.tsx
index e35b62d4a76..1852d85b848 100644
--- a/web/vtadmin/src/components/routes/createWorkflow/CreateMoveTables.tsx
+++ b/web/vtadmin/src/components/routes/createWorkflow/CreateMoveTables.tsx
@@ -31,7 +31,7 @@ import Toggle from '../../toggle/Toggle';
import { vtadmin } from '../../../proto/vtadmin';
import { MultiSelect } from '../../inputs/MultiSelect';
import { TABLET_TYPES } from '../../../util/tablets';
-import ErrorDialog from './ErrorDialog';
+import ErrorDialog from '../../dialog/ErrorDialog';
interface FormData {
clusterID: string;
@@ -128,7 +128,7 @@ export const CreateMoveTables = () => {
const isValid =
!!selectedCluster &&
- !!formData.targetKeyspace &&
+ !!formData.sourceKeyspace &&
!!formData.targetKeyspace &&
!!formData.workflow &&
!!formData.onDDL;
diff --git a/web/vtadmin/src/components/routes/createWorkflow/CreateReshard.tsx b/web/vtadmin/src/components/routes/createWorkflow/CreateReshard.tsx
new file mode 100644
index 00000000000..05a33825174
--- /dev/null
+++ b/web/vtadmin/src/components/routes/createWorkflow/CreateReshard.tsx
@@ -0,0 +1,375 @@
+/**
+ * Copyright 2024 The Vitess Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { useEffect, useState } from 'react';
+import { Link, useHistory } from 'react-router-dom';
+
+import { useClusters, useCreateReshard, useKeyspaces } from '../../../hooks/api';
+import { useDocumentTitle } from '../../../hooks/useDocumentTitle';
+import { Label } from '../../inputs/Label';
+import { Select } from '../../inputs/Select';
+import { ContentContainer } from '../../layout/ContentContainer';
+import { NavCrumbs } from '../../layout/NavCrumbs';
+import { WorkspaceHeader } from '../../layout/WorkspaceHeader';
+import { WorkspaceTitle } from '../../layout/WorkspaceTitle';
+import { TextInput } from '../../TextInput';
+import { success } from '../../Snackbar';
+import { FormError } from '../../forms/FormError';
+import Toggle from '../../toggle/Toggle';
+import { tabletmanagerdata, vtadmin } from '../../../proto/vtadmin';
+import { MultiSelect } from '../../inputs/MultiSelect';
+import { TABLET_TYPES } from '../../../util/tablets';
+import ErrorDialog from '../../dialog/ErrorDialog';
+
+interface FormData {
+ clusterID: string;
+ workflow: string;
+ keyspace: string;
+ sourceShards: string;
+ targetShards: string;
+ cells: string;
+ tabletTypes: number[];
+ onDDL: string;
+ autoStart: boolean;
+ tabletSelectionPreference: boolean;
+ skipSchemaCopy: boolean;
+ stopAfterCopy: boolean;
+ deferSecondaryKeys: boolean;
+}
+
+const DEFAULT_FORM_DATA: FormData = {
+ clusterID: '',
+ workflow: '',
+ keyspace: '',
+ sourceShards: '',
+ targetShards: '',
+ cells: '',
+ tabletTypes: [1, 2],
+ onDDL: 'IGNORE',
+ autoStart: true,
+ tabletSelectionPreference: true,
+ skipSchemaCopy: false,
+ stopAfterCopy: false,
+ deferSecondaryKeys: false,
+};
+
+const TABLET_OPTIONS = [1, 2, 3];
+
+const onDDLOptions = ['IGNORE', 'STOP', 'EXEC', 'EXEC_IGNORE'];
+
+export const CreateReshard = () => {
+ useDocumentTitle('Create a Reshard Workflow');
+
+ const history = useHistory();
+
+ const [formData, setFormData] = useState(DEFAULT_FORM_DATA);
+
+ const [clusterKeyspaces, setClusterKeyspaces] = useState([]);
+
+ const [errorDialogOpen, setErrorDialogOpen] = useState(false);
+
+ const { data: clusters = [], ...clustersQuery } = useClusters();
+
+ const { data: keyspaces = [], ...keyspacesQuery } = useKeyspaces();
+
+ const mutation = useCreateReshard(
+ {
+ clusterID: formData.clusterID,
+ request: {
+ workflow: formData.workflow,
+ keyspace: formData.keyspace,
+ source_shards: formData.sourceShards.split(',').map((shard) => shard.trim()),
+ target_shards: formData.targetShards.split(',').map((shard) => shard.trim()),
+ cells: formData.cells.split(',').map((cell) => cell.trim()),
+ tablet_types: formData.tabletTypes,
+ tablet_selection_preference: formData.tabletSelectionPreference
+ ? tabletmanagerdata.TabletSelectionPreference.INORDER
+ : tabletmanagerdata.TabletSelectionPreference.ANY,
+ skip_schema_copy: formData.skipSchemaCopy,
+ on_ddl: formData.onDDL,
+ auto_start: formData.autoStart,
+ stop_after_copy: formData.stopAfterCopy,
+ defer_secondary_keys: formData.deferSecondaryKeys,
+ },
+ },
+ {
+ onSuccess: () => {
+ success(`Created workflow ${formData.workflow}`, { autoClose: 1600 });
+ history.push(`/workflows`);
+ },
+ onError: () => {
+ setErrorDialogOpen(true);
+ },
+ }
+ );
+
+ let selectedCluster = null;
+ if (!!formData.clusterID) {
+ selectedCluster = clusters.find((c) => c.id === formData.clusterID);
+ }
+
+ let selectedKeyspace = null;
+ if (!!formData.keyspace) {
+ selectedKeyspace = keyspaces.find((ks) => ks.keyspace?.name === formData.keyspace);
+ }
+
+ const isValid =
+ !!selectedCluster &&
+ !!formData.keyspace &&
+ !!formData.workflow &&
+ !!formData.targetShards &&
+ !!formData.sourceShards &&
+ !!formData.tabletTypes.length &&
+ !!formData.onDDL;
+
+ const isDisabled = !isValid || mutation.isLoading;
+
+ const onSubmit: React.FormEventHandler = (e) => {
+ e.preventDefault();
+ mutation.mutate();
+ };
+
+ useEffect(() => {
+ // Clear out the selected keyspaces if selected cluster is changed.
+ setFormData((prevFormData) => ({ ...prevFormData, keyspace: '' }));
+ setClusterKeyspaces(keyspaces.filter((ks) => ks.cluster?.id === formData.clusterID));
+ }, [formData.clusterID, keyspaces]);
+
+ useEffect(() => {
+ if (clusters.length === 1) {
+ setFormData((prevFormData) => ({ ...prevFormData, clusterID: clusters[0].id }));
+ }
+ }, [clusters]);
+ return (
+
+
+
+ Workflows
+
+
+ Create New Reshard Workflow
+
+
+
+
+
+
+ setFormData({ ...formData, workflow: e.target.value })}
+ value={formData.workflow || ''}
+ required
+ />
+
+
ks?.keyspace?.name || ''}
+ items={clusterKeyspaces}
+ label="Keyspace"
+ onChange={(ks) => setFormData({ ...formData, keyspace: ks?.keyspace?.name || '' })}
+ placeholder={keyspacesQuery.isLoading ? 'Loading keyspaces...' : 'Select a keyspace'}
+ renderItem={(ks) => `${ks?.keyspace?.name}`}
+ selectedItem={selectedKeyspace}
+ />
+
+
+ setFormData({ ...formData, sourceShards: e.target.value })}
+ value={formData.sourceShards || ''}
+ />
+
+
+ setFormData({ ...formData, targetShards: e.target.value })}
+ value={formData.targetShards || ''}
+ />
+
+
+
+
+
+
+ setFormData({ ...formData, autoStart: !formData.autoStart })}
+ />
+
+
+
+
+ Advanced
+
+
+
+ setFormData({ ...formData, cells: e.target.value })}
+ value={formData.cells || ''}
+ />
+
+ setFormData({ ...formData, onDDL: option || '' })}
+ placeholder={'Select the OnDDL strategy'}
+ selectedItem={formData.onDDL}
+ />
+ cluster?.name || ''}
+ items={clusters}
+ label="Cluster"
+ onChange={(c) => setFormData({ ...formData, clusterID: c?.id || '' })}
+ placeholder={clustersQuery.isLoading ? 'Loading clusters...' : 'Select a cluster'}
+ renderItem={(c) => `${c?.name} (${c?.id})`}
+ selectedItem={selectedCluster}
+ />
+ TABLET_TYPES[tt]}
+ selectedItems={formData.tabletTypes}
+ label="Tablet Types"
+ helpText={'Source tablet types to replicate table data from'}
+ onChange={(types) => setFormData({ ...formData, tabletTypes: types })}
+ placeholder="Select tablet types"
+ />
+
+
+
+
+
+
+ setFormData({
+ ...formData,
+ tabletSelectionPreference: !formData.tabletSelectionPreference,
+ })
+ }
+ />
+
+
+
+
+
+
+
+ setFormData({ ...formData, skipSchemaCopy: !formData.skipSchemaCopy })
+ }
+ />
+
+
+
+
+
+
+
+ setFormData({ ...formData, stopAfterCopy: !formData.stopAfterCopy })
+ }
+ />
+
+
+
+
+
+
+
+ setFormData({ ...formData, deferSecondaryKeys: !formData.deferSecondaryKeys })
+ }
+ />
+
+
+
+
+
+ {clustersQuery.isError && (
+
+ )}
+
+
+
+ {mutation.isLoading ? 'Creating Workflow...' : 'Create Workflow'}
+
+
+
+
+ {mutation.isError && !mutation.isLoading && (
+ {
+ setErrorDialogOpen(false);
+ }}
+ />
+ )}
+
+
+ );
+};
diff --git a/web/vtadmin/src/components/routes/keyspace/Advanced.test.tsx b/web/vtadmin/src/components/routes/keyspace/Advanced.test.tsx
index 8b7a00c3a33..a2e770eba67 100644
--- a/web/vtadmin/src/components/routes/keyspace/Advanced.test.tsx
+++ b/web/vtadmin/src/components/routes/keyspace/Advanced.test.tsx
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-import { rest } from 'msw';
+import { http, HttpResponse } from 'msw';
import { setupServer } from 'msw/node';
import { render, screen, waitFor, within } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
@@ -39,11 +39,11 @@ describe('Advanced keyspace actions', () => {
};
const server = setupServer(
- rest.get('/api/keyspace/:clusterID/:keyspace', (req, res, ctx) => {
- return res(ctx.json({ ok: true, result: keyspace }));
+ http.get('/api/keyspace/:clusterID/:keyspace', (info) => {
+ return HttpResponse.json({ ok: true, result: keyspace });
}),
- rest.put('/api/schemas/reload', (req, res, ctx) => {
- return res(ctx.json({ ok: true }));
+ http.put('/api/schemas/reload', (info) => {
+ return HttpResponse.json({ ok: true });
})
);
diff --git a/web/vtadmin/src/components/routes/topology/Topology.tsx b/web/vtadmin/src/components/routes/topology/Topology.tsx
index b4a65c3e8df..bd08dcfd1b1 100644
--- a/web/vtadmin/src/components/routes/topology/Topology.tsx
+++ b/web/vtadmin/src/components/routes/topology/Topology.tsx
@@ -53,6 +53,11 @@ export const Topology = () => {
View Topology
+
+
+ View Topology Tree
+
+
));
@@ -65,7 +70,11 @@ export const Topology = () => {
diff --git a/web/vtadmin/src/components/routes/topologyTree/Node.tsx b/web/vtadmin/src/components/routes/topologyTree/Node.tsx
new file mode 100644
index 00000000000..4bb70ddbe0e
--- /dev/null
+++ b/web/vtadmin/src/components/routes/topologyTree/Node.tsx
@@ -0,0 +1,74 @@
+/**
+ * Copyright 2024 The Vitess Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import React, { useEffect, useState } from 'react';
+
+import { useTopologyPath } from '../../../hooks/api';
+import { buildChildNodes, TopologyNode } from './TopologyTree';
+
+interface NodeParams {
+ topologyNode: TopologyNode;
+ clusterID: string;
+}
+
+export const Node = ({ topologyNode, clusterID }: NodeParams) => {
+ const [isOpen, setIsOpen] = useState(false);
+ const [node, setNode] = useState(topologyNode);
+
+ const childrenPath = `${topologyNode.path}/${topologyNode.name}`;
+ const { data } = useTopologyPath(
+ { clusterID, path: childrenPath },
+ {
+ enabled: isOpen,
+ }
+ );
+
+ useEffect(() => {
+ if (data) {
+ setNode((prevNode) => ({
+ ...prevNode,
+ children: buildChildNodes(data.cell, childrenPath),
+ data: data.cell?.data,
+ }));
+ }
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [data]);
+
+ const nodeTitle = `${isOpen ? '▼' : '►'} ${node.name}`;
+ return (
+
+
setIsOpen(!isOpen)}>
+ {nodeTitle}
+
+
+ {isOpen && (
+
+ {node.data ? (
+
+ {node.data}
+
+ ) : (
+ <>
+ {node.children &&
+ node.children.map((child, idx) => {
+ return
;
+ })}
+ >
+ )}
+
+ )}
+
+ );
+};
diff --git a/web/vtadmin/src/components/routes/topologyTree/TopologyTree.tsx b/web/vtadmin/src/components/routes/topologyTree/TopologyTree.tsx
new file mode 100644
index 00000000000..cb27876391e
--- /dev/null
+++ b/web/vtadmin/src/components/routes/topologyTree/TopologyTree.tsx
@@ -0,0 +1,103 @@
+/**
+ * Copyright 2024 The Vitess Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import React, { useEffect, useState } from 'react';
+
+import { useTopologyPath } from '../../../hooks/api';
+import { useDocumentTitle } from '../../../hooks/useDocumentTitle';
+import { ContentContainer } from '../../layout/ContentContainer';
+import { NavCrumbs } from '../../layout/NavCrumbs';
+import { WorkspaceHeader } from '../../layout/WorkspaceHeader';
+import { WorkspaceTitle } from '../../layout/WorkspaceTitle';
+import { Link, useParams } from 'react-router-dom';
+
+import { Node } from './Node';
+import { vtctldata } from '../../../proto/vtadmin';
+
+export interface TopologyNode {
+ name?: string | null;
+ data?: string | null;
+ path: string;
+ children?: TopologyNode[];
+}
+
+export const buildChildNodes = (cell: vtctldata.ITopologyCell | null | undefined, path: string) => {
+ if (cell) {
+ const childNodes: TopologyNode[] | undefined = cell.children
+ ? cell.children.map((child) => {
+ return {
+ name: child,
+ path,
+ };
+ })
+ : undefined;
+ return childNodes;
+ }
+};
+
+export const TopologyTree = () => {
+ interface RouteParams {
+ clusterID: string;
+ }
+ useDocumentTitle('Cluster Topolgy');
+ const { clusterID } = useParams();
+ const { data } = useTopologyPath({ clusterID, path: '/' });
+ const [topologyNode, setTopologyNode] = useState();
+
+ useEffect(() => {
+ if (data?.cell) {
+ const topologyNode: TopologyNode = {
+ path: data.cell.path || '/',
+ data: data.cell.data,
+ children: buildChildNodes(data.cell, ''),
+ };
+ setTopologyNode(topologyNode);
+ }
+ }, [data]);
+
+ if (!data) {
+ return (
+
+
+
+ Topology
+
+
+ {clusterID}
+
+
+ 404
+
+ );
+ }
+
+ return (
+
+
+
+ Topology
+
+ {clusterID}
+
+
+
+ {topologyNode &&
+ topologyNode.children?.map((child, idx) => (
+
+ ))}
+
+
+ );
+};
diff --git a/web/vtadmin/src/components/routes/transaction/Transaction.tsx b/web/vtadmin/src/components/routes/transaction/Transaction.tsx
new file mode 100644
index 00000000000..acd9a5423e7
--- /dev/null
+++ b/web/vtadmin/src/components/routes/transaction/Transaction.tsx
@@ -0,0 +1,187 @@
+/**
+ * Copyright 2024 The Vitess Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { useTransaction } from '../../../hooks/api';
+import { DataCell } from '../../dataTable/DataCell';
+import { DataTable } from '../../dataTable/DataTable';
+import { ContentContainer } from '../../layout/ContentContainer';
+import { WorkspaceHeader } from '../../layout/WorkspaceHeader';
+import { WorkspaceTitle } from '../../layout/WorkspaceTitle';
+import { QueryLoadingPlaceholder } from '../../placeholders/QueryLoadingPlaceholder';
+import { useDocumentTitle } from '../../../hooks/useDocumentTitle';
+import { query, vtctldata } from '../../../proto/vtadmin';
+import { formatTransactionState } from '../../../util/transactions';
+import { ShardLink } from '../../links/ShardLink';
+import { formatDateTime, formatRelativeTimeInSeconds } from '../../../util/time';
+import { ReadOnlyGate } from '../../ReadOnlyGate';
+import TransactionActions from '../transactions/TransactionActions';
+import { isReadOnlyMode } from '../../../util/env';
+import { useParams } from 'react-router';
+import style from '../keyspace/Keyspace.module.scss';
+import { Link } from 'react-router-dom';
+import { NavCrumbs } from '../../layout/NavCrumbs';
+import { READ_ONLY_COLUMNS } from '../Transactions';
+import { COLUMNS } from '../Transactions';
+import * as React from 'react';
+import { TransactionLink } from '../../links/TransactionLink';
+
+interface RouteParams {
+ clusterID: string;
+ dtid: string;
+}
+
+export const SHARD_STATE_COLUMNS = ['Shard', 'State', 'Message', 'Time Created', 'Statements'];
+
+export const Transaction = () => {
+ const { clusterID, dtid } = useParams();
+
+ useDocumentTitle(`${dtid} (${clusterID})`);
+
+ const transactionQuery = useTransaction({ clusterID, dtid });
+
+ const { data: transaction } = transactionQuery;
+
+ if (transactionQuery.error) {
+ return (
+
+
😰
+
An error occurred
+
+ {(transactionQuery.error as any).response?.error?.message || transactionQuery.error?.message}
+
+
+ ← All Unresolved Transactions
+
+
+ );
+ }
+
+ if (!transactionQuery.isLoading && !transaction) {
+ return (
+
+
😖
+
Transaction not found
+
+ ← All Unresolved Transactions
+
+
+ );
+ }
+
+ const renderMetadataRow = (rows: query.ITransactionMetadata[]) => {
+ return rows.map((row) => {
+ return (
+
+
+
+ {row.dtid}
+
+
+
+ {formatTransactionState(row)}
+
+
+ {row.participants?.map((participant) => {
+ const shard = `${participant.keyspace}/${participant.shard}`;
+ return (
+
+ {shard}
+
+ );
+ })}
+
+
+ {formatDateTime(row.time_created)}
+
+ {formatRelativeTimeInSeconds(row.time_created)}
+
+
+
+
+
+
+
+
+ );
+ });
+ };
+
+ const renderShardStateRow = (rows: vtctldata.IShardTransactionState[]) => {
+ return rows.map((row) => {
+ return (
+
+
+ {row.shard}
+
+
+ {row.state ? row.state : 'COMMITTED'}
+
+
+ {row.message ? row.message : '-'}
+
+
+
+ {row.time_created ? formatDateTime(row.time_created) : '-'}
+
+
+ {row.time_created ? formatRelativeTimeInSeconds(row.time_created) : ''}
+
+
+ {row.statements}
+
+ );
+ });
+ };
+
+ return (
+
+
+
+ ← All Unresolved Transactions
+
+
+ {dtid}
+
+
+
+ Cluster: {clusterID}
+
+
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/web/vtadmin/src/components/routes/transactions/TransactionAction.tsx b/web/vtadmin/src/components/routes/transactions/TransactionAction.tsx
new file mode 100644
index 00000000000..bfb91569421
--- /dev/null
+++ b/web/vtadmin/src/components/routes/transactions/TransactionAction.tsx
@@ -0,0 +1,87 @@
+import React from 'react';
+import { Icon, Icons } from '../../Icon';
+import Dialog from '../../dialog/Dialog';
+import { UseMutationResult } from 'react-query';
+
+interface TransactionActionProps {
+ isOpen: boolean;
+ mutation: UseMutationResult;
+ title: string;
+ confirmText: string;
+ successText: string;
+ errorText: string;
+ loadingText: string;
+ description?: string;
+ body?: JSX.Element;
+ refetchTransactions: Function;
+ closeDialog: () => void;
+}
+
+const TransactionAction: React.FC = ({
+ isOpen,
+ closeDialog,
+ mutation,
+ title,
+ confirmText,
+ description,
+ successText,
+ loadingText,
+ errorText,
+ refetchTransactions,
+ body,
+}) => {
+ const onCloseDialog = () => {
+ setTimeout(mutation.reset, 500);
+ closeDialog();
+ };
+
+ const hasRun = mutation.data || mutation.error;
+ const onConfirm = () => {
+ mutation.mutate(
+ {},
+ {
+ onSuccess: () => {
+ refetchTransactions();
+ },
+ }
+ );
+ };
+ return (
+
+
+ {!hasRun && body}
+ {mutation.data && !mutation.error && (
+
+ )}
+ {mutation.error && (
+
+
+
+
+
{errorText}
+
{mutation.error.message}
+
+ )}
+
+
+ );
+};
+
+export default TransactionAction;
diff --git a/web/vtadmin/src/components/routes/transactions/TransactionActions.tsx b/web/vtadmin/src/components/routes/transactions/TransactionActions.tsx
new file mode 100644
index 00000000000..a9b71a010dc
--- /dev/null
+++ b/web/vtadmin/src/components/routes/transactions/TransactionActions.tsx
@@ -0,0 +1,45 @@
+import React, { useState } from 'react';
+import Dropdown from '../../dropdown/Dropdown';
+import MenuItem from '../../dropdown/MenuItem';
+import { Icons } from '../../Icon';
+import TransactionAction from './TransactionAction';
+import { useConcludeTransaction } from '../../../hooks/api';
+
+interface TransactionActionsProps {
+ refetchTransactions: Function;
+ clusterID: string;
+ dtid: string;
+}
+
+const TransactionActions: React.FC = ({ refetchTransactions, clusterID, dtid }) => {
+ const [currentDialog, setCurrentDialog] = useState('');
+ const closeDialog = () => setCurrentDialog('');
+
+ const concludeTransactionMutation = useConcludeTransaction({ clusterID, dtid });
+
+ return (
+
+
+ setCurrentDialog('Conclude Transaction')}>Conclude Transaction
+
+
+ Conclude the transaction with id: {dtid} .
+
+ }
+ />
+
+ );
+};
+
+export default TransactionActions;
diff --git a/web/vtadmin/src/components/routes/workflow/Workflow.tsx b/web/vtadmin/src/components/routes/workflow/Workflow.tsx
index 2d9c639cee0..939d1c6d386 100644
--- a/web/vtadmin/src/components/routes/workflow/Workflow.tsx
+++ b/web/vtadmin/src/components/routes/workflow/Workflow.tsx
@@ -13,7 +13,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-import { Link, Redirect, Route, Switch, useLocation, useParams, useRouteMatch } from 'react-router-dom';
+import { Link, Redirect, Route, Switch, useParams, useRouteMatch } from 'react-router-dom';
+import { useState } from 'react';
import style from './Workflow.module.scss';
@@ -31,6 +32,9 @@ import { Tab } from '../../tabs/Tab';
import { getStreams } from '../../../util/workflows';
import { Code } from '../../Code';
import { ShardLink } from '../../links/ShardLink';
+import { WorkflowVDiff } from './WorkflowVDiff';
+import { Select } from '../../inputs/Select';
+import { formatDateTimeShort } from '../../../util/time';
interface RouteParams {
clusterID: string;
@@ -38,18 +42,39 @@ interface RouteParams {
name: string;
}
+const REFETCH_OPTIONS = [
+ {
+ displayText: '10s',
+ interval: 10 * 1000,
+ },
+ {
+ displayText: '30s',
+ interval: 30 * 1000,
+ },
+ {
+ displayText: '1m',
+ interval: 60 * 1000,
+ },
+ {
+ displayText: '10m',
+ interval: 600 * 1000,
+ },
+ {
+ displayText: 'Never',
+ interval: 0,
+ },
+];
+
export const Workflow = () => {
const { clusterID, keyspace, name } = useParams();
const { path, url } = useRouteMatch();
- const location = useLocation();
useDocumentTitle(`${name} (${keyspace})`);
- const { data } = useWorkflow({ clusterID, keyspace, name });
- const streams = getStreams(data);
+ const [refetchInterval, setRefetchInterval] = useState(60 * 1000);
- const detailsURL = `${url}/details`;
- const detailsTab = location.pathname === detailsURL;
+ const { data, ...workflowQuery } = useWorkflow({ clusterID, keyspace, name }, { refetchInterval });
+ const streams = getStreams(data);
let isReshard = false;
if (data && data.workflow) {
@@ -59,11 +84,33 @@ export const Workflow = () => {
return (
-
- Workflows
-
+
+
+
+ Workflows
+
+ {name}
+
-
{name}
+
+
option?.displayText || ''}
+ items={REFETCH_OPTIONS}
+ label="Refresh Interval"
+ onChange={(option) => setRefetchInterval(option?.interval || 0)}
+ renderItem={(option) => option?.displayText || ''}
+ placeholder={'Select Interval'}
+ helpText={'Automatically refreshes workflow status after selected intervals'}
+ selectedItem={REFETCH_OPTIONS.find((option) => option.interval === refetchInterval)}
+ disableClearSelection
+ />
+ {`Last updated: ${formatDateTimeShort(
+ workflowQuery.dataUpdatedAt / 1000
+ )}`}
+
+
{isReshard && (
@@ -112,18 +159,14 @@ export const Workflow = () => {
- {detailsTab && (
-
- )}
-
+
+
@@ -133,7 +176,16 @@ export const Workflow = () => {
-
+
+
+
+
+
diff --git a/web/vtadmin/src/components/routes/workflow/WorkflowDetails.tsx b/web/vtadmin/src/components/routes/workflow/WorkflowDetails.tsx
index 1ab82e5261d..10257aa7265 100644
--- a/web/vtadmin/src/components/routes/workflow/WorkflowDetails.tsx
+++ b/web/vtadmin/src/components/routes/workflow/WorkflowDetails.tsx
@@ -43,6 +43,7 @@ interface Props {
clusterID: string;
keyspace: string;
name: string;
+ refetchInterval: number;
}
const SUMMARY_COLUMNS = ['Stream Status', 'Traffic Status', 'Max VReplication Lag', 'Reverse Workflow'];
@@ -53,16 +54,21 @@ const TABLE_COPY_STATE_COLUMNS = ['Table Name', 'Total Bytes', 'Bytes Copied', '
const STREAM_COLUMNS = ['Stream', 'Source Shard', 'Target Shard', 'Message', 'Transaction Timestamp', 'Database Name'];
-export const WorkflowDetails = ({ clusterID, keyspace, name }: Props) => {
+export const WorkflowDetails = ({ clusterID, keyspace, name, refetchInterval }: Props) => {
const { data: workflowData } = useWorkflow({ clusterID, keyspace, name });
- const { data: workflowsData = [] } = useWorkflows();
+ const { data: workflowsData = [] } = useWorkflows({ refetchInterval });
- const { data: workflowStatus } = useWorkflowStatus({
- clusterID,
- keyspace,
- name,
- });
+ const { data: workflowStatus } = useWorkflowStatus(
+ {
+ clusterID,
+ keyspace,
+ name,
+ },
+ {
+ refetchInterval,
+ }
+ );
const reverseWorkflow = getReverseWorkflow(workflowsData, workflowData);
@@ -270,6 +276,7 @@ export const WorkflowDetails = ({ clusterID, keyspace, name }: Props) => {
renderRows={renderSummaryRows}
pageSize={1}
title="Summary"
+ pageKey="summary"
/>
{
renderRows={renderStreamRows}
pageSize={10}
title="Streams"
+ pageKey="streams"
/>
{tableCopyStates && (
{
renderRows={renderTableCopyStateRows}
pageSize={1000}
title="Table Copy State"
+ pageKey="tableCopyState"
/>
)}
Recent Logs
@@ -298,6 +307,7 @@ export const WorkflowDetails = ({ clusterID, keyspace, name }: Props) => {
renderRows={renderLogRows}
pageSize={10}
title={stream.key!}
+ pageKey={`${formatAlias(stream.tablet)}${stream.id}`}
/>
))
diff --git a/web/vtadmin/src/components/routes/workflow/WorkflowVDiff.tsx b/web/vtadmin/src/components/routes/workflow/WorkflowVDiff.tsx
new file mode 100644
index 00000000000..f23fb2290d7
--- /dev/null
+++ b/web/vtadmin/src/components/routes/workflow/WorkflowVDiff.tsx
@@ -0,0 +1,168 @@
+/**
+ * Copyright 2024 The Vitess Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React, { useMemo, useState } from 'react';
+
+import { useCreateVDiff, useShowVDiff } from '../../../hooks/api';
+import { DataTable } from '../../dataTable/DataTable';
+import { DataCell } from '../../dataTable/DataCell';
+import Dialog from '../../dialog/Dialog';
+import { Icon, Icons } from '../../Icon';
+
+interface Props {
+ clusterID: string;
+ keyspace: string;
+ name: string;
+}
+
+const COLUMNS = ['Shard', 'State', 'Has Mismatch', 'Rows Compared', 'Started At', 'Completed At', 'Progress'];
+
+export const WorkflowVDiff = ({ clusterID, keyspace, name }: Props) => {
+ const [dialogOpen, setDialogOpen] = useState(false);
+
+ // Status for the last VDiff
+ const { data: lastVDiffStatus, ...showVDiffQuery } = useShowVDiff({
+ clusterID,
+ request: {
+ target_keyspace: keyspace,
+ workflow: name,
+ arg: 'last',
+ },
+ });
+
+ const createVDiffMutation = useCreateVDiff(
+ {
+ clusterID: clusterID,
+ request: {
+ target_keyspace: keyspace,
+ workflow: name,
+ },
+ },
+ {
+ onSuccess: () => {
+ showVDiffQuery.refetch();
+ },
+ }
+ );
+
+ const handleCreateVDiff = () => {
+ createVDiffMutation.mutate();
+ };
+
+ let hasMutationRun = !!createVDiffMutation.data || !!createVDiffMutation.error;
+
+ const closeDialog = () => {
+ setDialogOpen(false);
+ setTimeout(createVDiffMutation.reset, 500);
+ };
+
+ const shardReports = useMemo(() => {
+ if (!lastVDiffStatus) {
+ return [];
+ }
+ return Object.keys(lastVDiffStatus.shard_report).map((shard) => {
+ return {
+ shard,
+ ...lastVDiffStatus.shard_report[shard],
+ };
+ });
+ }, [lastVDiffStatus]);
+
+ const isStatusEmpty =
+ !lastVDiffStatus ||
+ (Object.keys(lastVDiffStatus.shard_report).length > 0 &&
+ !lastVDiffStatus.shard_report[Object.keys(lastVDiffStatus.shard_report)[0]].state);
+
+ const renderRows = (rows: typeof shardReports) => {
+ return rows.map((row) => {
+ let hasMismatch = 'False';
+ if (row.has_mismatch) {
+ hasMismatch = 'True';
+ }
+ const progress =
+ row.progress && row.progress.eta ? `ETA: ${row.progress.eta} (${row.progress.percentage}%)` : '-';
+ return (
+
+ {row.shard}
+ {row.state ? row.state.toUpperCase() : '-'}
+ {hasMismatch}
+ {row.rows_compared ? `${row.rows_compared}` : '-'}
+ {row.started_at ? row.started_at : '-'}
+ {row.completed_at ? row.completed_at : '-'}
+ {progress}
+
+ );
+ });
+ };
+
+ return (
+
+
+
Last VDiff Status
+
+ setDialogOpen(true)} className="btn btn-secondary btn-md">
+ Create a New VDiff
+
+
+
+ {!isStatusEmpty ? (
+
+ ) : (
+
No VDiff status to show.
+ )}
+
+
+ {createVDiffMutation.data && !createVDiffMutation.error && (
+
+
+
+
+
Created VDiff
+ Successfully created VDiff: {createVDiffMutation.data.UUID}
+
+ )}
+ {createVDiffMutation.error && (
+
+
+
+
+
Error creating VDiff
+ {createVDiffMutation.error.message}
+
+ )}
+
+
+
+ );
+};
diff --git a/web/vtadmin/src/components/routes/workflows/WorkflowAction.tsx b/web/vtadmin/src/components/routes/workflows/WorkflowAction.tsx
index 8ff08801dff..ebc667272cd 100644
--- a/web/vtadmin/src/components/routes/workflows/WorkflowAction.tsx
+++ b/web/vtadmin/src/components/routes/workflows/WorkflowAction.tsx
@@ -8,12 +8,15 @@ interface WorkflowActionProps {
mutation: UseMutationResult;
title: string;
confirmText: string;
- successText: string;
+ successText?: string;
errorText: string;
+ errorDescription?: string;
loadingText: string;
description?: string;
+ className?: string;
body?: JSX.Element;
successBody?: JSX.Element;
+ hideSuccessDialog?: boolean;
refetchWorkflows: Function;
closeDialog: () => void;
}
@@ -29,8 +32,11 @@ const WorkflowAction: React.FC = ({
successBody,
loadingText,
errorText,
+ errorDescription,
refetchWorkflows,
+ hideSuccessDialog,
body,
+ className,
}) => {
const onCloseDialog = () => {
setTimeout(mutation.reset, 500);
@@ -43,6 +49,9 @@ const WorkflowAction: React.FC = ({
{},
{
onSuccess: () => {
+ if (hideSuccessDialog) {
+ closeDialog();
+ }
refetchWorkflows();
},
}
@@ -61,10 +70,11 @@ const WorkflowAction: React.FC = ({
hideCancel={hasRun}
title={hasRun ? undefined : title}
description={hasRun ? undefined : description}
+ className={className}
>
{!hasRun && body}
- {mutation.data && !mutation.error && (
+ {!hideSuccessDialog && mutation.data && !mutation.error && (
@@ -79,6 +89,7 @@ const WorkflowAction: React.FC = ({
{errorText}
+ {errorDescription &&
{errorDescription}
}
)}
diff --git a/web/vtadmin/src/components/routes/workflows/WorkflowActions.tsx b/web/vtadmin/src/components/routes/workflows/WorkflowActions.tsx
index bde3f1374ab..f8ac57162b4 100644
--- a/web/vtadmin/src/components/routes/workflows/WorkflowActions.tsx
+++ b/web/vtadmin/src/components/routes/workflows/WorkflowActions.tsx
@@ -3,28 +3,172 @@ import Dropdown from '../../dropdown/Dropdown';
import MenuItem from '../../dropdown/MenuItem';
import { Icons } from '../../Icon';
import WorkflowAction from './WorkflowAction';
-import { useStartWorkflow, useStopWorkflow } from '../../../hooks/api';
+import {
+ useCompleteMoveTables,
+ useStartWorkflow,
+ useStopWorkflow,
+ useWorkflowDelete,
+ useWorkflowSwitchTraffic,
+} from '../../../hooks/api';
+import Toggle from '../../toggle/Toggle';
+import { success } from '../../Snackbar';
+import { vtadmin, vtctldata } from '../../../proto/vtadmin';
+import { getReverseWorkflow } from '../../../util/workflows';
interface WorkflowActionsProps {
+ streamsByState: {
+ [index: string]: vtctldata.Workflow.IStream[];
+ };
+ workflows?: vtadmin.Workflow[];
refetchWorkflows: Function;
keyspace: string;
clusterID: string;
name: string;
+ workflowType: string;
}
-const WorkflowActions: React.FC = ({ refetchWorkflows, keyspace, clusterID, name }) => {
+interface CompleteMoveTablesOptions {
+ keepData: boolean;
+ keepRoutingRoules: boolean;
+ renameTables: boolean;
+}
+
+const DefaultCompleteMoveTablesOptions: CompleteMoveTablesOptions = {
+ keepData: false,
+ keepRoutingRoules: false,
+ renameTables: false,
+};
+
+interface CancelWorkflowOptions {
+ keepData: boolean;
+ keepRoutingRoules: boolean;
+}
+
+const DefaultCancelWorkflowOptions: CancelWorkflowOptions = {
+ keepData: false,
+ keepRoutingRoules: false,
+};
+
+const WorkflowActions: React.FC = ({
+ streamsByState,
+ workflows,
+ refetchWorkflows,
+ keyspace,
+ clusterID,
+ name,
+ workflowType,
+}) => {
const [currentDialog, setCurrentDialog] = useState('');
+
+ const [completeMoveTablesOptions, SetCompleteMoveTablesOptions] = useState(
+ DefaultCompleteMoveTablesOptions
+ );
+
+ const [cancelWorkflowOptions, SetCancelWorkflowOptions] =
+ useState(DefaultCancelWorkflowOptions);
+
const closeDialog = () => setCurrentDialog('');
const startWorkflowMutation = useStartWorkflow({ keyspace, clusterID, name });
const stopWorkflowMutation = useStopWorkflow({ keyspace, clusterID, name });
+ const switchTrafficMutation = useWorkflowSwitchTraffic({
+ clusterID,
+ request: {
+ keyspace: keyspace,
+ workflow: name,
+ direction: 0,
+ },
+ });
+
+ const reverseTrafficMutation = useWorkflowSwitchTraffic({
+ clusterID,
+ request: {
+ keyspace: keyspace,
+ workflow: name,
+ direction: 1,
+ },
+ });
+
+ const cancelWorkflowMutation = useWorkflowDelete(
+ {
+ clusterID,
+ request: {
+ keyspace: keyspace,
+ workflow: name,
+ keep_data: cancelWorkflowOptions.keepData,
+ keep_routing_rules: cancelWorkflowOptions.keepRoutingRoules,
+ },
+ },
+ {
+ onSuccess: (data) => {
+ success(data.summary, { autoClose: 1600 });
+ },
+ }
+ );
+
+ const completeMoveTablesMutation = useCompleteMoveTables(
+ {
+ clusterID,
+ request: {
+ workflow: name,
+ target_keyspace: keyspace,
+ keep_data: completeMoveTablesOptions.keepData,
+ keep_routing_rules: completeMoveTablesOptions.keepRoutingRoules,
+ rename_tables: completeMoveTablesOptions.renameTables,
+ },
+ },
+ {
+ onSuccess: (data) => {
+ success(data.summary, { autoClose: 1600 });
+ },
+ }
+ );
+
+ const isMoveTablesWorkflow = workflowType === 'MoveTables';
+
+ const isRunning =
+ !(streamsByState['Error'] && streamsByState['Error'].length) &&
+ !(streamsByState['Copying'] && streamsByState['Copying'].length) &&
+ !(streamsByState['Stopped'] && streamsByState['Stopped'].length);
+
+ const isStopped =
+ !(streamsByState['Error'] && streamsByState['Error'].length) &&
+ !(streamsByState['Copying'] && streamsByState['Copying'].length) &&
+ !(streamsByState['Running'] && streamsByState['Running'].length);
+
+ const isSwitched =
+ workflows &&
+ isStopped &&
+ !!getReverseWorkflow(
+ workflows,
+ workflows.find((w) => w.workflow?.name === name && w.cluster?.id === clusterID)
+ );
+
+ const isReverseWorkflow = name.endsWith('_reverse');
+
return (
- setCurrentDialog('Start Workflow')}>Start Workflow
- setCurrentDialog('Stop Workflow')}>Stop Workflow
+ {!isReverseWorkflow && (
+ <>
+ {isMoveTablesWorkflow && isSwitched && (
+ setCurrentDialog('Complete MoveTables')}>Complete
+ )}
+ {isRunning && (
+ setCurrentDialog('Switch Traffic')}>Switch Traffic
+ )}
+ {isSwitched && (
+ setCurrentDialog('Reverse Traffic')}>Reverse Traffic
+ )}
+ {!isSwitched && (
+ setCurrentDialog('Cancel Workflow')}>Cancel Workflow
+ )}
+ >
+ )}
+ {!isRunning && setCurrentDialog('Start Workflow')}>Start Workflow }
+ {!isStopped && setCurrentDialog('Stop Workflow')}>Stop Workflow }
= ({ refetchWorkflows, key
mutation={startWorkflowMutation}
successText="Started workflow"
errorText={`Error occured while starting workflow ${name}`}
+ errorDescription={startWorkflowMutation.error ? startWorkflowMutation.error.message : ''}
closeDialog={closeDialog}
isOpen={currentDialog === 'Start Workflow'}
refetchWorkflows={refetchWorkflows}
@@ -56,6 +201,7 @@ const WorkflowActions: React.FC = ({ refetchWorkflows, key
mutation={stopWorkflowMutation}
successText="Stopped workflow"
errorText={`Error occured while stopping workflow ${name}`}
+ errorDescription={stopWorkflowMutation.error ? stopWorkflowMutation.error.message : ''}
closeDialog={closeDialog}
isOpen={currentDialog === 'Stop Workflow'}
refetchWorkflows={refetchWorkflows}
@@ -72,6 +218,186 @@ const WorkflowActions: React.FC = ({ refetchWorkflows, key
}
/>
+
+ {switchTrafficMutation.data && switchTrafficMutation.data.summary && (
+ {switchTrafficMutation.data.summary}
+ )}
+
+ }
+ body={
+
+ Switch traffic for the {name} workflow.
+
+ }
+ />
+
+ {reverseTrafficMutation.data && reverseTrafficMutation.data.summary && (
+ {reverseTrafficMutation.data.summary}
+ )}
+
+ }
+ body={
+
+ Reverse traffic for the {name} workflow.
+
+ }
+ />
+
+ {cancelWorkflowMutation.data && cancelWorkflowMutation.data.summary && (
+ {cancelWorkflowMutation.data.summary}
+ )}
+
+ }
+ body={
+
+
+
+
Keep Data
+
+ Keep the partially copied table data from the MoveTables workflow in the target
+ keyspace.
+
+
+
+ SetCancelWorkflowOptions((prevOptions) => ({
+ ...prevOptions,
+ keepData: !prevOptions.keepData,
+ }))
+ }
+ />
+
+
+
+
Keep Routing Rules
+
+ Keep the routing rules created for the MoveTables workflow.
+
+
+
+ SetCancelWorkflowOptions((prevOptions) => ({
+ ...prevOptions,
+ keepRoutingRoules: !prevOptions.keepRoutingRoules,
+ }))
+ }
+ />
+
+
+ }
+ />
+
+
+
+
Keep Data
+
+ Keep the original source table data that was copied by the MoveTables workflow.
+
+
+
+ SetCompleteMoveTablesOptions((prevOptions) => ({
+ ...prevOptions,
+ keepData: !prevOptions.keepData,
+ }))
+ }
+ />
+
+
+
+
Keep Routing Rules
+
+ Keep the routing rules in place that direct table traffic from the source keyspace
+ to the target keyspace of the MoveTables workflow.
+
+
+
+ SetCompleteMoveTablesOptions((prevOptions) => ({
+ ...prevOptions,
+ keepRoutingRoules: !prevOptions.keepRoutingRoules,
+ }))
+ }
+ />
+
+
+
+
Rename Tables
+
+ Keep the original source table data that was copied by the MoveTables workflow, but
+ rename each table to{' '}
+ {'__old'} .
+
+
+
+ SetCompleteMoveTablesOptions((prevOptions) => ({
+ ...prevOptions,
+ renameTables: !prevOptions.renameTables,
+ }))
+ }
+ />
+
+
+ }
+ />
);
};
diff --git a/web/vtadmin/src/hooks/api.ts b/web/vtadmin/src/hooks/api.ts
index 1a552dad167..c2e1209f128 100644
--- a/web/vtadmin/src/hooks/api.ts
+++ b/web/vtadmin/src/hooks/api.ts
@@ -82,8 +82,21 @@ import {
createMoveTables,
startWorkflow,
stopWorkflow,
+ FetchTransactionParams,
+ fetchTransaction,
FetchTransactionsParams,
fetchTransactions,
+ completeMoveTables,
+ workflowSwitchTraffic,
+ workflowDelete,
+ createReshard,
+ concludeTransaction,
+ createVDiff,
+ showVDiff,
+ ShowVDiffParams,
+ createMaterialize,
+ fetchSchemaMigrations,
+ applySchema,
} from '../api/http';
import { vtadmin as pb, vtctldata } from '../proto/vtadmin';
import { formatAlias } from '../util/tablets';
@@ -418,6 +431,28 @@ export const useTransactions = (
return useQuery(['transactions', params], () => fetchTransactions(params), { ...options });
};
+/**
+ * useTransaction is a query hook that fetches the details of a transaction for the given dtid.
+ */
+export const useTransaction = (
+ params: FetchTransactionParams,
+ options?: UseQueryOptions | undefined
+) => {
+ return useQuery(['transaction', params], () => fetchTransaction(params), { ...options });
+};
+
+/**
+ * useConcludeTransaction is a mutate hook that concludes a transaction.
+ */
+export const useConcludeTransaction = (
+ params: Parameters[0],
+ options?: UseMutationOptions>, Error>
+) => {
+ return useMutation>, Error>(() => {
+ return concludeTransaction(params);
+ }, options);
+};
+
export const useVTExplain = (
params: Parameters[0],
options?: UseQueryOptions | undefined
@@ -472,7 +507,19 @@ export const useWorkflowStatus = (
params: Parameters[0],
options?: UseQueryOptions | undefined
) => {
- return useQuery(['workflow_status', params], () => fetchWorkflowStatus(params));
+ return useQuery(['workflow_status', params], () => fetchWorkflowStatus(params), options);
+};
+
+/**
+ * useCreateMaterialize is a mutation query hook that creates a materialize workflow.
+ */
+export const useCreateMaterialize = (
+ params: Parameters[0],
+ options: UseMutationOptions>, Error>
+) => {
+ return useMutation>, Error>(() => {
+ return createMaterialize(params);
+ }, options);
};
/**
@@ -487,6 +534,18 @@ export const useCreateMoveTables = (
}, options);
};
+/**
+ * useCreateReshard is a mutation query hook that creates a reshard workflow.
+ */
+export const useCreateReshard = (
+ params: Parameters[0],
+ options: UseMutationOptions>, Error>
+) => {
+ return useMutation>, Error>(() => {
+ return createReshard(params);
+ }, options);
+};
+
/**
* useStartWorkflow is a mutate hook that starts a workflow.
*/
@@ -511,6 +570,42 @@ export const useStopWorkflow = (
}, options);
};
+/**
+ * useCompleteMoveTables is a mutate hook that completes a MoveTables workflow.
+ */
+export const useCompleteMoveTables = (
+ params: Parameters[0],
+ options?: UseMutationOptions>, Error>
+) => {
+ return useMutation>, Error>(() => {
+ return completeMoveTables(params);
+ }, options);
+};
+
+/**
+ * useWorkflowSwitchTraffic is a mutate hook that switches traffic for a workflow.
+ */
+export const useWorkflowSwitchTraffic = (
+ params: Parameters[0],
+ options?: UseMutationOptions>, Error>
+) => {
+ return useMutation>, Error>(() => {
+ return workflowSwitchTraffic(params);
+ }, options);
+};
+
+/**
+ * useWorkflowDelete is a mutate hook that deletes a workflow.
+ */
+export const useWorkflowDelete = (
+ params: Parameters[0],
+ options?: UseMutationOptions>, Error>
+) => {
+ return useMutation>, Error>(() => {
+ return workflowDelete(params);
+ }, options);
+};
+
/**
* useReloadSchema is a mutate hook that reloads schemas in one or more
* keyspaces, shards, or tablets in the cluster, depending on the request parameters.
@@ -634,7 +729,7 @@ export const useTopologyPath = (
params: GetTopologyPathParams,
options?: UseQueryOptions | undefined
) => {
- return useQuery(['topology-path', params], () => getTopologyPath(params));
+ return useQuery(['topology-path', params], () => getTopologyPath(params), options);
};
/**
* useValidate is a mutate hook that validates that all nodes reachable from the global replication graph,
@@ -681,3 +776,47 @@ export const useValidateVersionShard = (
return validateVersionShard(params);
}, options);
};
+
+/**
+ * useCreateVDiff is a mutation query hook that creates a VDiff.
+ */
+export const useCreateVDiff = (
+ params: Parameters[0],
+ options?: UseMutationOptions>, Error>
+) => {
+ return useMutation>, Error>(() => {
+ return createVDiff(params);
+ }, options);
+};
+
+/**
+ * useShowVDiff is a query hook fetches VDiff status.
+ */
+export const useShowVDiff = (
+ params: ShowVDiffParams,
+ options?: UseQueryOptions | undefined
+) => {
+ return useQuery(['vdiff_show', params], () => showVDiff(params), { ...options });
+};
+
+/**
+ * useSchemaMigrations is a query hook that fetches schema migrations.
+ */
+export const useSchemaMigrations = (
+ request: pb.IGetSchemaMigrationsRequest,
+ options?: UseQueryOptions | undefined
+) => {
+ return useQuery(['migrations', request], () => fetchSchemaMigrations(request), { ...options });
+};
+
+/**
+ * useApplySchema is a mutation query hook that creates ApplySchema request.
+ */
+export const useApplySchema = (
+ params: Parameters[0],
+ options: UseMutationOptions>, Error>
+) => {
+ return useMutation>, Error>(() => {
+ return applySchema(params);
+ }, options);
+};
diff --git a/web/vtadmin/src/hooks/useURLPagination.ts b/web/vtadmin/src/hooks/useURLPagination.ts
index ddccdc43b07..b6681e1fd41 100644
--- a/web/vtadmin/src/hooks/useURLPagination.ts
+++ b/web/vtadmin/src/hooks/useURLPagination.ts
@@ -20,6 +20,7 @@ import { useURLQuery } from './useURLQuery';
export interface PaginationOpts {
totalPages: number;
+ pageQueryKey?: string;
}
export interface PaginationParams {
@@ -35,7 +36,7 @@ const FIRST_PAGE = 1;
* - use pagination in some way
* - encode pagination state in the URL (e.g., /some/route?page=123)
*/
-export const useURLPagination = ({ totalPages }: PaginationOpts): PaginationParams => {
+export const useURLPagination = ({ totalPages, pageQueryKey = 'page' }: PaginationOpts): PaginationParams => {
const history = useHistory();
const location = useLocation();
const { query, replaceQuery } = useURLQuery({ parseNumbers: true });
@@ -43,7 +44,7 @@ export const useURLPagination = ({ totalPages }: PaginationOpts): PaginationPara
// A slight nuance here -- if `page` is not in the URL at all, then we can assume
// it's the first page. This makes for slightly nicer URLs for the first/default page:
// "/foo" instead of "/foo?page=1". No redirect required.
- const page = !('page' in query) || query.page === null ? FIRST_PAGE : query.page;
+ const page = !(pageQueryKey in query) || query[pageQueryKey] === null ? FIRST_PAGE : query[pageQueryKey];
useEffect(() => {
// If the value in the URL *is* defined but is negative, non-numeric,
@@ -53,9 +54,9 @@ export const useURLPagination = ({ totalPages }: PaginationOpts): PaginationPara
if (isPageTooBig || isPageTooSmall || typeof page !== 'number') {
// Replace history so the invalid value is not persisted in browser history
- replaceQuery({ page: FIRST_PAGE });
+ replaceQuery({ [pageQueryKey]: FIRST_PAGE });
}
- }, [page, totalPages, history, location.pathname, query, replaceQuery]);
+ }, [page, pageQueryKey, totalPages, history, location.pathname, query, replaceQuery]);
return {
page,
diff --git a/web/vtadmin/src/proto/vtadmin.d.ts b/web/vtadmin/src/proto/vtadmin.d.ts
index ea6bb53ffe4..995ac20d451 100644
--- a/web/vtadmin/src/proto/vtadmin.d.ts
+++ b/web/vtadmin/src/proto/vtadmin.d.ts
@@ -79,6 +79,20 @@ export namespace vtadmin {
*/
public completeSchemaMigration(request: vtadmin.ICompleteSchemaMigrationRequest): Promise;
+ /**
+ * Calls ConcludeTransaction.
+ * @param request ConcludeTransactionRequest message or plain object
+ * @param callback Node-style callback called with the error, if any, and ConcludeTransactionResponse
+ */
+ public concludeTransaction(request: vtadmin.IConcludeTransactionRequest, callback: vtadmin.VTAdmin.ConcludeTransactionCallback): void;
+
+ /**
+ * Calls ConcludeTransaction.
+ * @param request ConcludeTransactionRequest message or plain object
+ * @returns Promise
+ */
+ public concludeTransaction(request: vtadmin.IConcludeTransactionRequest): Promise;
+
/**
* Calls CreateKeyspace.
* @param request CreateKeyspaceRequest message or plain object
@@ -443,6 +457,20 @@ export namespace vtadmin {
*/
public getTopologyPath(request: vtadmin.IGetTopologyPathRequest): Promise;
+ /**
+ * Calls GetTransactionInfo.
+ * @param request GetTransactionInfoRequest message or plain object
+ * @param callback Node-style callback called with the error, if any, and GetTransactionInfoResponse
+ */
+ public getTransactionInfo(request: vtadmin.IGetTransactionInfoRequest, callback: vtadmin.VTAdmin.GetTransactionInfoCallback): void;
+
+ /**
+ * Calls GetTransactionInfo.
+ * @param request GetTransactionInfoRequest message or plain object
+ * @returns Promise
+ */
+ public getTransactionInfo(request: vtadmin.IGetTransactionInfoRequest): Promise;
+
/**
* Calls GetUnresolvedTransactions.
* @param request GetUnresolvedTransactionsRequest message or plain object
@@ -583,6 +611,20 @@ export namespace vtadmin {
*/
public launchSchemaMigration(request: vtadmin.ILaunchSchemaMigrationRequest): Promise;
+ /**
+ * Calls MoveTablesComplete.
+ * @param request MoveTablesCompleteRequest message or plain object
+ * @param callback Node-style callback called with the error, if any, and MoveTablesCompleteResponse
+ */
+ public moveTablesComplete(request: vtadmin.IMoveTablesCompleteRequest, callback: vtadmin.VTAdmin.MoveTablesCompleteCallback): void;
+
+ /**
+ * Calls MoveTablesComplete.
+ * @param request MoveTablesCompleteRequest message or plain object
+ * @returns Promise
+ */
+ public moveTablesComplete(request: vtadmin.IMoveTablesCompleteRequest): Promise;
+
/**
* Calls MoveTablesCreate.
* @param request MoveTablesCreateRequest message or plain object
@@ -597,6 +639,20 @@ export namespace vtadmin {
*/
public moveTablesCreate(request: vtadmin.IMoveTablesCreateRequest): Promise;
+ /**
+ * Calls MaterializeCreate.
+ * @param request MaterializeCreateRequest message or plain object
+ * @param callback Node-style callback called with the error, if any, and MaterializeCreateResponse
+ */
+ public materializeCreate(request: vtadmin.IMaterializeCreateRequest, callback: vtadmin.VTAdmin.MaterializeCreateCallback): void;
+
+ /**
+ * Calls MaterializeCreate.
+ * @param request MaterializeCreateRequest message or plain object
+ * @returns Promise
+ */
+ public materializeCreate(request: vtadmin.IMaterializeCreateRequest): Promise;
+
/**
* Calls PingTablet.
* @param request PingTabletRequest message or plain object
@@ -737,6 +793,20 @@ export namespace vtadmin {
*/
public runHealthCheck(request: vtadmin.IRunHealthCheckRequest): Promise;
+ /**
+ * Calls ReshardCreate.
+ * @param request ReshardCreateRequest message or plain object
+ * @param callback Node-style callback called with the error, if any, and WorkflowStatusResponse
+ */
+ public reshardCreate(request: vtadmin.IReshardCreateRequest, callback: vtadmin.VTAdmin.ReshardCreateCallback): void;
+
+ /**
+ * Calls ReshardCreate.
+ * @param request ReshardCreateRequest message or plain object
+ * @returns Promise
+ */
+ public reshardCreate(request: vtadmin.IReshardCreateRequest): Promise;
+
/**
* Calls SetReadOnly.
* @param request SetReadOnlyRequest message or plain object
@@ -891,6 +961,34 @@ export namespace vtadmin {
*/
public validateVersionShard(request: vtadmin.IValidateVersionShardRequest): Promise;
+ /**
+ * Calls VDiffCreate.
+ * @param request VDiffCreateRequest message or plain object
+ * @param callback Node-style callback called with the error, if any, and VDiffCreateResponse
+ */
+ public vDiffCreate(request: vtadmin.IVDiffCreateRequest, callback: vtadmin.VTAdmin.VDiffCreateCallback): void;
+
+ /**
+ * Calls VDiffCreate.
+ * @param request VDiffCreateRequest message or plain object
+ * @returns Promise
+ */
+ public vDiffCreate(request: vtadmin.IVDiffCreateRequest): Promise;
+
+ /**
+ * Calls VDiffShow.
+ * @param request VDiffShowRequest message or plain object
+ * @param callback Node-style callback called with the error, if any, and VDiffShowResponse
+ */
+ public vDiffShow(request: vtadmin.IVDiffShowRequest, callback: vtadmin.VTAdmin.VDiffShowCallback): void;
+
+ /**
+ * Calls VDiffShow.
+ * @param request VDiffShowRequest message or plain object
+ * @returns Promise
+ */
+ public vDiffShow(request: vtadmin.IVDiffShowRequest): Promise;
+
/**
* Calls VTExplain.
* @param request VTExplainRequest message or plain object
@@ -904,6 +1002,34 @@ export namespace vtadmin {
* @returns Promise
*/
public vTExplain(request: vtadmin.IVTExplainRequest): Promise;
+
+ /**
+ * Calls WorkflowDelete.
+ * @param request WorkflowDeleteRequest message or plain object
+ * @param callback Node-style callback called with the error, if any, and WorkflowDeleteResponse
+ */
+ public workflowDelete(request: vtadmin.IWorkflowDeleteRequest, callback: vtadmin.VTAdmin.WorkflowDeleteCallback): void;
+
+ /**
+ * Calls WorkflowDelete.
+ * @param request WorkflowDeleteRequest message or plain object
+ * @returns Promise
+ */
+ public workflowDelete(request: vtadmin.IWorkflowDeleteRequest): Promise;
+
+ /**
+ * Calls WorkflowSwitchTraffic.
+ * @param request WorkflowSwitchTrafficRequest message or plain object
+ * @param callback Node-style callback called with the error, if any, and WorkflowSwitchTrafficResponse
+ */
+ public workflowSwitchTraffic(request: vtadmin.IWorkflowSwitchTrafficRequest, callback: vtadmin.VTAdmin.WorkflowSwitchTrafficCallback): void;
+
+ /**
+ * Calls WorkflowSwitchTraffic.
+ * @param request WorkflowSwitchTrafficRequest message or plain object
+ * @returns Promise
+ */
+ public workflowSwitchTraffic(request: vtadmin.IWorkflowSwitchTrafficRequest): Promise;
}
namespace VTAdmin {
@@ -936,6 +1062,13 @@ export namespace vtadmin {
*/
type CompleteSchemaMigrationCallback = (error: (Error|null), response?: vtctldata.CompleteSchemaMigrationResponse) => void;
+ /**
+ * Callback as used by {@link vtadmin.VTAdmin#concludeTransaction}.
+ * @param error Error, if any
+ * @param [response] ConcludeTransactionResponse
+ */
+ type ConcludeTransactionCallback = (error: (Error|null), response?: vtctldata.ConcludeTransactionResponse) => void;
+
/**
* Callback as used by {@link vtadmin.VTAdmin#createKeyspace}.
* @param error Error, if any
@@ -1118,6 +1251,13 @@ export namespace vtadmin {
*/
type GetTopologyPathCallback = (error: (Error|null), response?: vtctldata.GetTopologyPathResponse) => void;
+ /**
+ * Callback as used by {@link vtadmin.VTAdmin#getTransactionInfo}.
+ * @param error Error, if any
+ * @param [response] GetTransactionInfoResponse
+ */
+ type GetTransactionInfoCallback = (error: (Error|null), response?: vtctldata.GetTransactionInfoResponse) => void;
+
/**
* Callback as used by {@link vtadmin.VTAdmin#getUnresolvedTransactions}.
* @param error Error, if any
@@ -1188,6 +1328,13 @@ export namespace vtadmin {
*/
type LaunchSchemaMigrationCallback = (error: (Error|null), response?: vtctldata.LaunchSchemaMigrationResponse) => void;
+ /**
+ * Callback as used by {@link vtadmin.VTAdmin#moveTablesComplete}.
+ * @param error Error, if any
+ * @param [response] MoveTablesCompleteResponse
+ */
+ type MoveTablesCompleteCallback = (error: (Error|null), response?: vtctldata.MoveTablesCompleteResponse) => void;
+
/**
* Callback as used by {@link vtadmin.VTAdmin#moveTablesCreate}.
* @param error Error, if any
@@ -1195,6 +1342,13 @@ export namespace vtadmin {
*/
type MoveTablesCreateCallback = (error: (Error|null), response?: vtctldata.WorkflowStatusResponse) => void;
+ /**
+ * Callback as used by {@link vtadmin.VTAdmin#materializeCreate}.
+ * @param error Error, if any
+ * @param [response] MaterializeCreateResponse
+ */
+ type MaterializeCreateCallback = (error: (Error|null), response?: vtctldata.MaterializeCreateResponse) => void;
+
/**
* Callback as used by {@link vtadmin.VTAdmin#pingTablet}.
* @param error Error, if any
@@ -1265,6 +1419,13 @@ export namespace vtadmin {
*/
type RunHealthCheckCallback = (error: (Error|null), response?: vtadmin.RunHealthCheckResponse) => void;
+ /**
+ * Callback as used by {@link vtadmin.VTAdmin#reshardCreate}.
+ * @param error Error, if any
+ * @param [response] WorkflowStatusResponse
+ */
+ type ReshardCreateCallback = (error: (Error|null), response?: vtctldata.WorkflowStatusResponse) => void;
+
/**
* Callback as used by {@link vtadmin.VTAdmin#setReadOnly}.
* @param error Error, if any
@@ -1342,12 +1503,40 @@ export namespace vtadmin {
*/
type ValidateVersionShardCallback = (error: (Error|null), response?: vtctldata.ValidateVersionShardResponse) => void;
+ /**
+ * Callback as used by {@link vtadmin.VTAdmin#vDiffCreate}.
+ * @param error Error, if any
+ * @param [response] VDiffCreateResponse
+ */
+ type VDiffCreateCallback = (error: (Error|null), response?: vtctldata.VDiffCreateResponse) => void;
+
+ /**
+ * Callback as used by {@link vtadmin.VTAdmin#vDiffShow}.
+ * @param error Error, if any
+ * @param [response] VDiffShowResponse
+ */
+ type VDiffShowCallback = (error: (Error|null), response?: vtadmin.VDiffShowResponse) => void;
+
/**
* Callback as used by {@link vtadmin.VTAdmin#vTExplain}.
* @param error Error, if any
* @param [response] VTExplainResponse
*/
type VTExplainCallback = (error: (Error|null), response?: vtadmin.VTExplainResponse) => void;
+
+ /**
+ * Callback as used by {@link vtadmin.VTAdmin#workflowDelete}.
+ * @param error Error, if any
+ * @param [response] WorkflowDeleteResponse
+ */
+ type WorkflowDeleteCallback = (error: (Error|null), response?: vtctldata.WorkflowDeleteResponse) => void;
+
+ /**
+ * Callback as used by {@link vtadmin.VTAdmin#workflowSwitchTraffic}.
+ * @param error Error, if any
+ * @param [response] WorkflowSwitchTrafficResponse
+ */
+ type WorkflowSwitchTrafficCallback = (error: (Error|null), response?: vtctldata.WorkflowSwitchTrafficResponse) => void;
}
/** Properties of a Cluster. */
@@ -3319,12 +3508,224 @@ export namespace vtadmin {
public static getTypeUrl(typeUrlPrefix?: string): string;
}
+ /** Properties of a WorkflowDeleteRequest. */
+ interface IWorkflowDeleteRequest {
+
+ /** WorkflowDeleteRequest cluster_id */
+ cluster_id?: (string|null);
+
+ /** WorkflowDeleteRequest request */
+ request?: (vtctldata.IWorkflowDeleteRequest|null);
+ }
+
+ /** Represents a WorkflowDeleteRequest. */
+ class WorkflowDeleteRequest implements IWorkflowDeleteRequest {
+
+ /**
+ * Constructs a new WorkflowDeleteRequest.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: vtadmin.IWorkflowDeleteRequest);
+
+ /** WorkflowDeleteRequest cluster_id. */
+ public cluster_id: string;
+
+ /** WorkflowDeleteRequest request. */
+ public request?: (vtctldata.IWorkflowDeleteRequest|null);
+
+ /**
+ * Creates a new WorkflowDeleteRequest instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns WorkflowDeleteRequest instance
+ */
+ public static create(properties?: vtadmin.IWorkflowDeleteRequest): vtadmin.WorkflowDeleteRequest;
+
+ /**
+ * Encodes the specified WorkflowDeleteRequest message. Does not implicitly {@link vtadmin.WorkflowDeleteRequest.verify|verify} messages.
+ * @param message WorkflowDeleteRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: vtadmin.IWorkflowDeleteRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified WorkflowDeleteRequest message, length delimited. Does not implicitly {@link vtadmin.WorkflowDeleteRequest.verify|verify} messages.
+ * @param message WorkflowDeleteRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: vtadmin.IWorkflowDeleteRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a WorkflowDeleteRequest message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns WorkflowDeleteRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): vtadmin.WorkflowDeleteRequest;
+
+ /**
+ * Decodes a WorkflowDeleteRequest message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns WorkflowDeleteRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): vtadmin.WorkflowDeleteRequest;
+
+ /**
+ * Verifies a WorkflowDeleteRequest message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a WorkflowDeleteRequest message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns WorkflowDeleteRequest
+ */
+ public static fromObject(object: { [k: string]: any }): vtadmin.WorkflowDeleteRequest;
+
+ /**
+ * Creates a plain object from a WorkflowDeleteRequest message. Also converts values to other types if specified.
+ * @param message WorkflowDeleteRequest
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: vtadmin.WorkflowDeleteRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this WorkflowDeleteRequest to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for WorkflowDeleteRequest
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a WorkflowSwitchTrafficRequest. */
+ interface IWorkflowSwitchTrafficRequest {
+
+ /** WorkflowSwitchTrafficRequest cluster_id */
+ cluster_id?: (string|null);
+
+ /** WorkflowSwitchTrafficRequest request */
+ request?: (vtctldata.IWorkflowSwitchTrafficRequest|null);
+ }
+
+ /** Represents a WorkflowSwitchTrafficRequest. */
+ class WorkflowSwitchTrafficRequest implements IWorkflowSwitchTrafficRequest {
+
+ /**
+ * Constructs a new WorkflowSwitchTrafficRequest.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: vtadmin.IWorkflowSwitchTrafficRequest);
+
+ /** WorkflowSwitchTrafficRequest cluster_id. */
+ public cluster_id: string;
+
+ /** WorkflowSwitchTrafficRequest request. */
+ public request?: (vtctldata.IWorkflowSwitchTrafficRequest|null);
+
+ /**
+ * Creates a new WorkflowSwitchTrafficRequest instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns WorkflowSwitchTrafficRequest instance
+ */
+ public static create(properties?: vtadmin.IWorkflowSwitchTrafficRequest): vtadmin.WorkflowSwitchTrafficRequest;
+
+ /**
+ * Encodes the specified WorkflowSwitchTrafficRequest message. Does not implicitly {@link vtadmin.WorkflowSwitchTrafficRequest.verify|verify} messages.
+ * @param message WorkflowSwitchTrafficRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: vtadmin.IWorkflowSwitchTrafficRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified WorkflowSwitchTrafficRequest message, length delimited. Does not implicitly {@link vtadmin.WorkflowSwitchTrafficRequest.verify|verify} messages.
+ * @param message WorkflowSwitchTrafficRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: vtadmin.IWorkflowSwitchTrafficRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a WorkflowSwitchTrafficRequest message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns WorkflowSwitchTrafficRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): vtadmin.WorkflowSwitchTrafficRequest;
+
+ /**
+ * Decodes a WorkflowSwitchTrafficRequest message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns WorkflowSwitchTrafficRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): vtadmin.WorkflowSwitchTrafficRequest;
+
+ /**
+ * Verifies a WorkflowSwitchTrafficRequest message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a WorkflowSwitchTrafficRequest message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns WorkflowSwitchTrafficRequest
+ */
+ public static fromObject(object: { [k: string]: any }): vtadmin.WorkflowSwitchTrafficRequest;
+
+ /**
+ * Creates a plain object from a WorkflowSwitchTrafficRequest message. Also converts values to other types if specified.
+ * @param message WorkflowSwitchTrafficRequest
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: vtadmin.WorkflowSwitchTrafficRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this WorkflowSwitchTrafficRequest to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for WorkflowSwitchTrafficRequest
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
/** Properties of an ApplySchemaRequest. */
interface IApplySchemaRequest {
/** ApplySchemaRequest cluster_id */
cluster_id?: (string|null);
+ /** ApplySchemaRequest sql */
+ sql?: (string|null);
+
+ /** ApplySchemaRequest caller_id */
+ caller_id?: (string|null);
+
/** ApplySchemaRequest request */
request?: (vtctldata.IApplySchemaRequest|null);
}
@@ -3341,6 +3742,12 @@ export namespace vtadmin {
/** ApplySchemaRequest cluster_id. */
public cluster_id: string;
+ /** ApplySchemaRequest sql. */
+ public sql: string;
+
+ /** ApplySchemaRequest caller_id. */
+ public caller_id: string;
+
/** ApplySchemaRequest request. */
public request?: (vtctldata.IApplySchemaRequest|null);
@@ -3731,6 +4138,109 @@ export namespace vtadmin {
public static getTypeUrl(typeUrlPrefix?: string): string;
}
+ /** Properties of a ConcludeTransactionRequest. */
+ interface IConcludeTransactionRequest {
+
+ /** ConcludeTransactionRequest cluster_id */
+ cluster_id?: (string|null);
+
+ /** ConcludeTransactionRequest dtid */
+ dtid?: (string|null);
+ }
+
+ /** Represents a ConcludeTransactionRequest. */
+ class ConcludeTransactionRequest implements IConcludeTransactionRequest {
+
+ /**
+ * Constructs a new ConcludeTransactionRequest.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: vtadmin.IConcludeTransactionRequest);
+
+ /** ConcludeTransactionRequest cluster_id. */
+ public cluster_id: string;
+
+ /** ConcludeTransactionRequest dtid. */
+ public dtid: string;
+
+ /**
+ * Creates a new ConcludeTransactionRequest instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns ConcludeTransactionRequest instance
+ */
+ public static create(properties?: vtadmin.IConcludeTransactionRequest): vtadmin.ConcludeTransactionRequest;
+
+ /**
+ * Encodes the specified ConcludeTransactionRequest message. Does not implicitly {@link vtadmin.ConcludeTransactionRequest.verify|verify} messages.
+ * @param message ConcludeTransactionRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: vtadmin.IConcludeTransactionRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified ConcludeTransactionRequest message, length delimited. Does not implicitly {@link vtadmin.ConcludeTransactionRequest.verify|verify} messages.
+ * @param message ConcludeTransactionRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: vtadmin.IConcludeTransactionRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a ConcludeTransactionRequest message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns ConcludeTransactionRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): vtadmin.ConcludeTransactionRequest;
+
+ /**
+ * Decodes a ConcludeTransactionRequest message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns ConcludeTransactionRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): vtadmin.ConcludeTransactionRequest;
+
+ /**
+ * Verifies a ConcludeTransactionRequest message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a ConcludeTransactionRequest message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns ConcludeTransactionRequest
+ */
+ public static fromObject(object: { [k: string]: any }): vtadmin.ConcludeTransactionRequest;
+
+ /**
+ * Creates a plain object from a ConcludeTransactionRequest message. Also converts values to other types if specified.
+ * @param message ConcludeTransactionRequest
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: vtadmin.ConcludeTransactionRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this ConcludeTransactionRequest to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for ConcludeTransactionRequest
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
/** Properties of a CreateKeyspaceRequest. */
interface ICreateKeyspaceRequest {
@@ -8115,6 +8625,109 @@ export namespace vtadmin {
public static getTypeUrl(typeUrlPrefix?: string): string;
}
+ /** Properties of a GetTransactionInfoRequest. */
+ interface IGetTransactionInfoRequest {
+
+ /** GetTransactionInfoRequest cluster_id */
+ cluster_id?: (string|null);
+
+ /** GetTransactionInfoRequest request */
+ request?: (vtctldata.IGetTransactionInfoRequest|null);
+ }
+
+ /** Represents a GetTransactionInfoRequest. */
+ class GetTransactionInfoRequest implements IGetTransactionInfoRequest {
+
+ /**
+ * Constructs a new GetTransactionInfoRequest.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: vtadmin.IGetTransactionInfoRequest);
+
+ /** GetTransactionInfoRequest cluster_id. */
+ public cluster_id: string;
+
+ /** GetTransactionInfoRequest request. */
+ public request?: (vtctldata.IGetTransactionInfoRequest|null);
+
+ /**
+ * Creates a new GetTransactionInfoRequest instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns GetTransactionInfoRequest instance
+ */
+ public static create(properties?: vtadmin.IGetTransactionInfoRequest): vtadmin.GetTransactionInfoRequest;
+
+ /**
+ * Encodes the specified GetTransactionInfoRequest message. Does not implicitly {@link vtadmin.GetTransactionInfoRequest.verify|verify} messages.
+ * @param message GetTransactionInfoRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: vtadmin.IGetTransactionInfoRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified GetTransactionInfoRequest message, length delimited. Does not implicitly {@link vtadmin.GetTransactionInfoRequest.verify|verify} messages.
+ * @param message GetTransactionInfoRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: vtadmin.IGetTransactionInfoRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a GetTransactionInfoRequest message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns GetTransactionInfoRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): vtadmin.GetTransactionInfoRequest;
+
+ /**
+ * Decodes a GetTransactionInfoRequest message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns GetTransactionInfoRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): vtadmin.GetTransactionInfoRequest;
+
+ /**
+ * Verifies a GetTransactionInfoRequest message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a GetTransactionInfoRequest message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns GetTransactionInfoRequest
+ */
+ public static fromObject(object: { [k: string]: any }): vtadmin.GetTransactionInfoRequest;
+
+ /**
+ * Creates a plain object from a GetTransactionInfoRequest message. Also converts values to other types if specified.
+ * @param message GetTransactionInfoRequest
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: vtadmin.GetTransactionInfoRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this GetTransactionInfoRequest to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for GetTransactionInfoRequest
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
/** Properties of a GetUnresolvedTransactionsRequest. */
interface IGetUnresolvedTransactionsRequest {
@@ -8123,6 +8736,9 @@ export namespace vtadmin {
/** GetUnresolvedTransactionsRequest keyspace */
keyspace?: (string|null);
+
+ /** GetUnresolvedTransactionsRequest abandon_age */
+ abandon_age?: (number|Long|null);
}
/** Represents a GetUnresolvedTransactionsRequest. */
@@ -8140,6 +8756,9 @@ export namespace vtadmin {
/** GetUnresolvedTransactionsRequest keyspace. */
public keyspace: string;
+ /** GetUnresolvedTransactionsRequest abandon_age. */
+ public abandon_age: (number|Long);
+
/**
* Creates a new GetUnresolvedTransactionsRequest instance using the specified properties.
* @param [properties] Properties to set
@@ -9466,6 +10085,218 @@ export namespace vtadmin {
public static getTypeUrl(typeUrlPrefix?: string): string;
}
+ /** Properties of a MaterializeCreateRequest. */
+ interface IMaterializeCreateRequest {
+
+ /** MaterializeCreateRequest cluster_id */
+ cluster_id?: (string|null);
+
+ /** MaterializeCreateRequest table_settings */
+ table_settings?: (string|null);
+
+ /** MaterializeCreateRequest request */
+ request?: (vtctldata.IMaterializeCreateRequest|null);
+ }
+
+ /** Represents a MaterializeCreateRequest. */
+ class MaterializeCreateRequest implements IMaterializeCreateRequest {
+
+ /**
+ * Constructs a new MaterializeCreateRequest.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: vtadmin.IMaterializeCreateRequest);
+
+ /** MaterializeCreateRequest cluster_id. */
+ public cluster_id: string;
+
+ /** MaterializeCreateRequest table_settings. */
+ public table_settings: string;
+
+ /** MaterializeCreateRequest request. */
+ public request?: (vtctldata.IMaterializeCreateRequest|null);
+
+ /**
+ * Creates a new MaterializeCreateRequest instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns MaterializeCreateRequest instance
+ */
+ public static create(properties?: vtadmin.IMaterializeCreateRequest): vtadmin.MaterializeCreateRequest;
+
+ /**
+ * Encodes the specified MaterializeCreateRequest message. Does not implicitly {@link vtadmin.MaterializeCreateRequest.verify|verify} messages.
+ * @param message MaterializeCreateRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: vtadmin.IMaterializeCreateRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified MaterializeCreateRequest message, length delimited. Does not implicitly {@link vtadmin.MaterializeCreateRequest.verify|verify} messages.
+ * @param message MaterializeCreateRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: vtadmin.IMaterializeCreateRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a MaterializeCreateRequest message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns MaterializeCreateRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): vtadmin.MaterializeCreateRequest;
+
+ /**
+ * Decodes a MaterializeCreateRequest message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns MaterializeCreateRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): vtadmin.MaterializeCreateRequest;
+
+ /**
+ * Verifies a MaterializeCreateRequest message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a MaterializeCreateRequest message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns MaterializeCreateRequest
+ */
+ public static fromObject(object: { [k: string]: any }): vtadmin.MaterializeCreateRequest;
+
+ /**
+ * Creates a plain object from a MaterializeCreateRequest message. Also converts values to other types if specified.
+ * @param message MaterializeCreateRequest
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: vtadmin.MaterializeCreateRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this MaterializeCreateRequest to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for MaterializeCreateRequest
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a MoveTablesCompleteRequest. */
+ interface IMoveTablesCompleteRequest {
+
+ /** MoveTablesCompleteRequest cluster_id */
+ cluster_id?: (string|null);
+
+ /** MoveTablesCompleteRequest request */
+ request?: (vtctldata.IMoveTablesCompleteRequest|null);
+ }
+
+ /** Represents a MoveTablesCompleteRequest. */
+ class MoveTablesCompleteRequest implements IMoveTablesCompleteRequest {
+
+ /**
+ * Constructs a new MoveTablesCompleteRequest.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: vtadmin.IMoveTablesCompleteRequest);
+
+ /** MoveTablesCompleteRequest cluster_id. */
+ public cluster_id: string;
+
+ /** MoveTablesCompleteRequest request. */
+ public request?: (vtctldata.IMoveTablesCompleteRequest|null);
+
+ /**
+ * Creates a new MoveTablesCompleteRequest instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns MoveTablesCompleteRequest instance
+ */
+ public static create(properties?: vtadmin.IMoveTablesCompleteRequest): vtadmin.MoveTablesCompleteRequest;
+
+ /**
+ * Encodes the specified MoveTablesCompleteRequest message. Does not implicitly {@link vtadmin.MoveTablesCompleteRequest.verify|verify} messages.
+ * @param message MoveTablesCompleteRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: vtadmin.IMoveTablesCompleteRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified MoveTablesCompleteRequest message, length delimited. Does not implicitly {@link vtadmin.MoveTablesCompleteRequest.verify|verify} messages.
+ * @param message MoveTablesCompleteRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: vtadmin.IMoveTablesCompleteRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a MoveTablesCompleteRequest message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns MoveTablesCompleteRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): vtadmin.MoveTablesCompleteRequest;
+
+ /**
+ * Decodes a MoveTablesCompleteRequest message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns MoveTablesCompleteRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): vtadmin.MoveTablesCompleteRequest;
+
+ /**
+ * Verifies a MoveTablesCompleteRequest message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a MoveTablesCompleteRequest message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns MoveTablesCompleteRequest
+ */
+ public static fromObject(object: { [k: string]: any }): vtadmin.MoveTablesCompleteRequest;
+
+ /**
+ * Creates a plain object from a MoveTablesCompleteRequest message. Also converts values to other types if specified.
+ * @param message MoveTablesCompleteRequest
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: vtadmin.MoveTablesCompleteRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this MoveTablesCompleteRequest to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for MoveTablesCompleteRequest
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
/** Properties of a MoveTablesCreateRequest. */
interface IMoveTablesCreateRequest {
@@ -11940,6 +12771,109 @@ export namespace vtadmin {
public static getTypeUrl(typeUrlPrefix?: string): string;
}
+ /** Properties of a ReshardCreateRequest. */
+ interface IReshardCreateRequest {
+
+ /** ReshardCreateRequest cluster_id */
+ cluster_id?: (string|null);
+
+ /** ReshardCreateRequest request */
+ request?: (vtctldata.IReshardCreateRequest|null);
+ }
+
+ /** Represents a ReshardCreateRequest. */
+ class ReshardCreateRequest implements IReshardCreateRequest {
+
+ /**
+ * Constructs a new ReshardCreateRequest.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: vtadmin.IReshardCreateRequest);
+
+ /** ReshardCreateRequest cluster_id. */
+ public cluster_id: string;
+
+ /** ReshardCreateRequest request. */
+ public request?: (vtctldata.IReshardCreateRequest|null);
+
+ /**
+ * Creates a new ReshardCreateRequest instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns ReshardCreateRequest instance
+ */
+ public static create(properties?: vtadmin.IReshardCreateRequest): vtadmin.ReshardCreateRequest;
+
+ /**
+ * Encodes the specified ReshardCreateRequest message. Does not implicitly {@link vtadmin.ReshardCreateRequest.verify|verify} messages.
+ * @param message ReshardCreateRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: vtadmin.IReshardCreateRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified ReshardCreateRequest message, length delimited. Does not implicitly {@link vtadmin.ReshardCreateRequest.verify|verify} messages.
+ * @param message ReshardCreateRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: vtadmin.IReshardCreateRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a ReshardCreateRequest message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns ReshardCreateRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): vtadmin.ReshardCreateRequest;
+
+ /**
+ * Decodes a ReshardCreateRequest message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns ReshardCreateRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): vtadmin.ReshardCreateRequest;
+
+ /**
+ * Verifies a ReshardCreateRequest message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a ReshardCreateRequest message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns ReshardCreateRequest
+ */
+ public static fromObject(object: { [k: string]: any }): vtadmin.ReshardCreateRequest;
+
+ /**
+ * Creates a plain object from a ReshardCreateRequest message. Also converts values to other types if specified.
+ * @param message ReshardCreateRequest
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: vtadmin.ReshardCreateRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this ReshardCreateRequest to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for ReshardCreateRequest
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
/** Properties of a SetReadOnlyRequest. */
interface ISetReadOnlyRequest {
@@ -13709,6 +14643,539 @@ export namespace vtadmin {
public static getTypeUrl(typeUrlPrefix?: string): string;
}
+ /** Properties of a VDiffCreateRequest. */
+ interface IVDiffCreateRequest {
+
+ /** VDiffCreateRequest cluster_id */
+ cluster_id?: (string|null);
+
+ /** VDiffCreateRequest request */
+ request?: (vtctldata.IVDiffCreateRequest|null);
+ }
+
+ /** Represents a VDiffCreateRequest. */
+ class VDiffCreateRequest implements IVDiffCreateRequest {
+
+ /**
+ * Constructs a new VDiffCreateRequest.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: vtadmin.IVDiffCreateRequest);
+
+ /** VDiffCreateRequest cluster_id. */
+ public cluster_id: string;
+
+ /** VDiffCreateRequest request. */
+ public request?: (vtctldata.IVDiffCreateRequest|null);
+
+ /**
+ * Creates a new VDiffCreateRequest instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns VDiffCreateRequest instance
+ */
+ public static create(properties?: vtadmin.IVDiffCreateRequest): vtadmin.VDiffCreateRequest;
+
+ /**
+ * Encodes the specified VDiffCreateRequest message. Does not implicitly {@link vtadmin.VDiffCreateRequest.verify|verify} messages.
+ * @param message VDiffCreateRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: vtadmin.IVDiffCreateRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified VDiffCreateRequest message, length delimited. Does not implicitly {@link vtadmin.VDiffCreateRequest.verify|verify} messages.
+ * @param message VDiffCreateRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: vtadmin.IVDiffCreateRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a VDiffCreateRequest message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns VDiffCreateRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): vtadmin.VDiffCreateRequest;
+
+ /**
+ * Decodes a VDiffCreateRequest message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns VDiffCreateRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): vtadmin.VDiffCreateRequest;
+
+ /**
+ * Verifies a VDiffCreateRequest message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a VDiffCreateRequest message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns VDiffCreateRequest
+ */
+ public static fromObject(object: { [k: string]: any }): vtadmin.VDiffCreateRequest;
+
+ /**
+ * Creates a plain object from a VDiffCreateRequest message. Also converts values to other types if specified.
+ * @param message VDiffCreateRequest
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: vtadmin.VDiffCreateRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this VDiffCreateRequest to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for VDiffCreateRequest
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a VDiffShowRequest. */
+ interface IVDiffShowRequest {
+
+ /** VDiffShowRequest cluster_id */
+ cluster_id?: (string|null);
+
+ /** VDiffShowRequest request */
+ request?: (vtctldata.IVDiffShowRequest|null);
+ }
+
+ /** Represents a VDiffShowRequest. */
+ class VDiffShowRequest implements IVDiffShowRequest {
+
+ /**
+ * Constructs a new VDiffShowRequest.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: vtadmin.IVDiffShowRequest);
+
+ /** VDiffShowRequest cluster_id. */
+ public cluster_id: string;
+
+ /** VDiffShowRequest request. */
+ public request?: (vtctldata.IVDiffShowRequest|null);
+
+ /**
+ * Creates a new VDiffShowRequest instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns VDiffShowRequest instance
+ */
+ public static create(properties?: vtadmin.IVDiffShowRequest): vtadmin.VDiffShowRequest;
+
+ /**
+ * Encodes the specified VDiffShowRequest message. Does not implicitly {@link vtadmin.VDiffShowRequest.verify|verify} messages.
+ * @param message VDiffShowRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: vtadmin.IVDiffShowRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified VDiffShowRequest message, length delimited. Does not implicitly {@link vtadmin.VDiffShowRequest.verify|verify} messages.
+ * @param message VDiffShowRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: vtadmin.IVDiffShowRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a VDiffShowRequest message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns VDiffShowRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): vtadmin.VDiffShowRequest;
+
+ /**
+ * Decodes a VDiffShowRequest message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns VDiffShowRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): vtadmin.VDiffShowRequest;
+
+ /**
+ * Verifies a VDiffShowRequest message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a VDiffShowRequest message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns VDiffShowRequest
+ */
+ public static fromObject(object: { [k: string]: any }): vtadmin.VDiffShowRequest;
+
+ /**
+ * Creates a plain object from a VDiffShowRequest message. Also converts values to other types if specified.
+ * @param message VDiffShowRequest
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: vtadmin.VDiffShowRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this VDiffShowRequest to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for VDiffShowRequest
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a VDiffProgress. */
+ interface IVDiffProgress {
+
+ /** VDiffProgress percentage */
+ percentage?: (number|null);
+
+ /** VDiffProgress eta */
+ eta?: (string|null);
+ }
+
+ /** Represents a VDiffProgress. */
+ class VDiffProgress implements IVDiffProgress {
+
+ /**
+ * Constructs a new VDiffProgress.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: vtadmin.IVDiffProgress);
+
+ /** VDiffProgress percentage. */
+ public percentage: number;
+
+ /** VDiffProgress eta. */
+ public eta: string;
+
+ /**
+ * Creates a new VDiffProgress instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns VDiffProgress instance
+ */
+ public static create(properties?: vtadmin.IVDiffProgress): vtadmin.VDiffProgress;
+
+ /**
+ * Encodes the specified VDiffProgress message. Does not implicitly {@link vtadmin.VDiffProgress.verify|verify} messages.
+ * @param message VDiffProgress message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: vtadmin.IVDiffProgress, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified VDiffProgress message, length delimited. Does not implicitly {@link vtadmin.VDiffProgress.verify|verify} messages.
+ * @param message VDiffProgress message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: vtadmin.IVDiffProgress, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a VDiffProgress message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns VDiffProgress
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): vtadmin.VDiffProgress;
+
+ /**
+ * Decodes a VDiffProgress message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns VDiffProgress
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): vtadmin.VDiffProgress;
+
+ /**
+ * Verifies a VDiffProgress message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a VDiffProgress message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns VDiffProgress
+ */
+ public static fromObject(object: { [k: string]: any }): vtadmin.VDiffProgress;
+
+ /**
+ * Creates a plain object from a VDiffProgress message. Also converts values to other types if specified.
+ * @param message VDiffProgress
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: vtadmin.VDiffProgress, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this VDiffProgress to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for VDiffProgress
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a VDiffShardReport. */
+ interface IVDiffShardReport {
+
+ /** VDiffShardReport state */
+ state?: (string|null);
+
+ /** VDiffShardReport rows_compared */
+ rows_compared?: (number|Long|null);
+
+ /** VDiffShardReport has_mismatch */
+ has_mismatch?: (boolean|null);
+
+ /** VDiffShardReport started_at */
+ started_at?: (string|null);
+
+ /** VDiffShardReport completed_at */
+ completed_at?: (string|null);
+
+ /** VDiffShardReport progress */
+ progress?: (vtadmin.IVDiffProgress|null);
+ }
+
+ /** Represents a VDiffShardReport. */
+ class VDiffShardReport implements IVDiffShardReport {
+
+ /**
+ * Constructs a new VDiffShardReport.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: vtadmin.IVDiffShardReport);
+
+ /** VDiffShardReport state. */
+ public state: string;
+
+ /** VDiffShardReport rows_compared. */
+ public rows_compared: (number|Long);
+
+ /** VDiffShardReport has_mismatch. */
+ public has_mismatch: boolean;
+
+ /** VDiffShardReport started_at. */
+ public started_at: string;
+
+ /** VDiffShardReport completed_at. */
+ public completed_at: string;
+
+ /** VDiffShardReport progress. */
+ public progress?: (vtadmin.IVDiffProgress|null);
+
+ /**
+ * Creates a new VDiffShardReport instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns VDiffShardReport instance
+ */
+ public static create(properties?: vtadmin.IVDiffShardReport): vtadmin.VDiffShardReport;
+
+ /**
+ * Encodes the specified VDiffShardReport message. Does not implicitly {@link vtadmin.VDiffShardReport.verify|verify} messages.
+ * @param message VDiffShardReport message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: vtadmin.IVDiffShardReport, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified VDiffShardReport message, length delimited. Does not implicitly {@link vtadmin.VDiffShardReport.verify|verify} messages.
+ * @param message VDiffShardReport message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: vtadmin.IVDiffShardReport, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a VDiffShardReport message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns VDiffShardReport
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): vtadmin.VDiffShardReport;
+
+ /**
+ * Decodes a VDiffShardReport message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns VDiffShardReport
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): vtadmin.VDiffShardReport;
+
+ /**
+ * Verifies a VDiffShardReport message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a VDiffShardReport message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns VDiffShardReport
+ */
+ public static fromObject(object: { [k: string]: any }): vtadmin.VDiffShardReport;
+
+ /**
+ * Creates a plain object from a VDiffShardReport message. Also converts values to other types if specified.
+ * @param message VDiffShardReport
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: vtadmin.VDiffShardReport, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this VDiffShardReport to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for VDiffShardReport
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a VDiffShowResponse. */
+ interface IVDiffShowResponse {
+
+ /** VDiffShowResponse shard_report */
+ shard_report?: ({ [k: string]: vtadmin.IVDiffShardReport }|null);
+ }
+
+ /** Represents a VDiffShowResponse. */
+ class VDiffShowResponse implements IVDiffShowResponse {
+
+ /**
+ * Constructs a new VDiffShowResponse.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: vtadmin.IVDiffShowResponse);
+
+ /** VDiffShowResponse shard_report. */
+ public shard_report: { [k: string]: vtadmin.IVDiffShardReport };
+
+ /**
+ * Creates a new VDiffShowResponse instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns VDiffShowResponse instance
+ */
+ public static create(properties?: vtadmin.IVDiffShowResponse): vtadmin.VDiffShowResponse;
+
+ /**
+ * Encodes the specified VDiffShowResponse message. Does not implicitly {@link vtadmin.VDiffShowResponse.verify|verify} messages.
+ * @param message VDiffShowResponse message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: vtadmin.IVDiffShowResponse, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified VDiffShowResponse message, length delimited. Does not implicitly {@link vtadmin.VDiffShowResponse.verify|verify} messages.
+ * @param message VDiffShowResponse message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: vtadmin.IVDiffShowResponse, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a VDiffShowResponse message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns VDiffShowResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): vtadmin.VDiffShowResponse;
+
+ /**
+ * Decodes a VDiffShowResponse message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns VDiffShowResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): vtadmin.VDiffShowResponse;
+
+ /**
+ * Verifies a VDiffShowResponse message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a VDiffShowResponse message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns VDiffShowResponse
+ */
+ public static fromObject(object: { [k: string]: any }): vtadmin.VDiffShowResponse;
+
+ /**
+ * Creates a plain object from a VDiffShowResponse message. Also converts values to other types if specified.
+ * @param message VDiffShowResponse
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: vtadmin.VDiffShowResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this VDiffShowResponse to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for VDiffShowResponse
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
/** Properties of a VTExplainRequest. */
interface IVTExplainRequest {
@@ -24433,6 +25900,218 @@ export namespace tabletmanagerdata {
public static getTypeUrl(typeUrlPrefix?: string): string;
}
+ /** Properties of a GetTransactionInfoRequest. */
+ interface IGetTransactionInfoRequest {
+
+ /** GetTransactionInfoRequest dtid */
+ dtid?: (string|null);
+ }
+
+ /** Represents a GetTransactionInfoRequest. */
+ class GetTransactionInfoRequest implements IGetTransactionInfoRequest {
+
+ /**
+ * Constructs a new GetTransactionInfoRequest.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: tabletmanagerdata.IGetTransactionInfoRequest);
+
+ /** GetTransactionInfoRequest dtid. */
+ public dtid: string;
+
+ /**
+ * Creates a new GetTransactionInfoRequest instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns GetTransactionInfoRequest instance
+ */
+ public static create(properties?: tabletmanagerdata.IGetTransactionInfoRequest): tabletmanagerdata.GetTransactionInfoRequest;
+
+ /**
+ * Encodes the specified GetTransactionInfoRequest message. Does not implicitly {@link tabletmanagerdata.GetTransactionInfoRequest.verify|verify} messages.
+ * @param message GetTransactionInfoRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: tabletmanagerdata.IGetTransactionInfoRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified GetTransactionInfoRequest message, length delimited. Does not implicitly {@link tabletmanagerdata.GetTransactionInfoRequest.verify|verify} messages.
+ * @param message GetTransactionInfoRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: tabletmanagerdata.IGetTransactionInfoRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a GetTransactionInfoRequest message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns GetTransactionInfoRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): tabletmanagerdata.GetTransactionInfoRequest;
+
+ /**
+ * Decodes a GetTransactionInfoRequest message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns GetTransactionInfoRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): tabletmanagerdata.GetTransactionInfoRequest;
+
+ /**
+ * Verifies a GetTransactionInfoRequest message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a GetTransactionInfoRequest message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns GetTransactionInfoRequest
+ */
+ public static fromObject(object: { [k: string]: any }): tabletmanagerdata.GetTransactionInfoRequest;
+
+ /**
+ * Creates a plain object from a GetTransactionInfoRequest message. Also converts values to other types if specified.
+ * @param message GetTransactionInfoRequest
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: tabletmanagerdata.GetTransactionInfoRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this GetTransactionInfoRequest to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for GetTransactionInfoRequest
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a GetTransactionInfoResponse. */
+ interface IGetTransactionInfoResponse {
+
+ /** GetTransactionInfoResponse state */
+ state?: (string|null);
+
+ /** GetTransactionInfoResponse message */
+ message?: (string|null);
+
+ /** GetTransactionInfoResponse time_created */
+ time_created?: (number|Long|null);
+
+ /** GetTransactionInfoResponse statements */
+ statements?: (string[]|null);
+ }
+
+ /** Represents a GetTransactionInfoResponse. */
+ class GetTransactionInfoResponse implements IGetTransactionInfoResponse {
+
+ /**
+ * Constructs a new GetTransactionInfoResponse.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: tabletmanagerdata.IGetTransactionInfoResponse);
+
+ /** GetTransactionInfoResponse state. */
+ public state: string;
+
+ /** GetTransactionInfoResponse message. */
+ public message: string;
+
+ /** GetTransactionInfoResponse time_created. */
+ public time_created: (number|Long);
+
+ /** GetTransactionInfoResponse statements. */
+ public statements: string[];
+
+ /**
+ * Creates a new GetTransactionInfoResponse instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns GetTransactionInfoResponse instance
+ */
+ public static create(properties?: tabletmanagerdata.IGetTransactionInfoResponse): tabletmanagerdata.GetTransactionInfoResponse;
+
+ /**
+ * Encodes the specified GetTransactionInfoResponse message. Does not implicitly {@link tabletmanagerdata.GetTransactionInfoResponse.verify|verify} messages.
+ * @param message GetTransactionInfoResponse message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: tabletmanagerdata.IGetTransactionInfoResponse, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified GetTransactionInfoResponse message, length delimited. Does not implicitly {@link tabletmanagerdata.GetTransactionInfoResponse.verify|verify} messages.
+ * @param message GetTransactionInfoResponse message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: tabletmanagerdata.IGetTransactionInfoResponse, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a GetTransactionInfoResponse message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns GetTransactionInfoResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): tabletmanagerdata.GetTransactionInfoResponse;
+
+ /**
+ * Decodes a GetTransactionInfoResponse message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns GetTransactionInfoResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): tabletmanagerdata.GetTransactionInfoResponse;
+
+ /**
+ * Verifies a GetTransactionInfoResponse message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a GetTransactionInfoResponse message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns GetTransactionInfoResponse
+ */
+ public static fromObject(object: { [k: string]: any }): tabletmanagerdata.GetTransactionInfoResponse;
+
+ /**
+ * Creates a plain object from a GetTransactionInfoResponse message. Also converts values to other types if specified.
+ * @param message GetTransactionInfoResponse
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: tabletmanagerdata.GetTransactionInfoResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this GetTransactionInfoResponse to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for GetTransactionInfoResponse
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
/** Properties of a ConcludeTransactionRequest. */
interface IConcludeTransactionRequest {
@@ -27489,6 +29168,194 @@ export namespace tabletmanagerdata {
public static getTypeUrl(typeUrlPrefix?: string): string;
}
+ /** Properties of a ReadReparentJournalInfoRequest. */
+ interface IReadReparentJournalInfoRequest {
+ }
+
+ /** Represents a ReadReparentJournalInfoRequest. */
+ class ReadReparentJournalInfoRequest implements IReadReparentJournalInfoRequest {
+
+ /**
+ * Constructs a new ReadReparentJournalInfoRequest.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: tabletmanagerdata.IReadReparentJournalInfoRequest);
+
+ /**
+ * Creates a new ReadReparentJournalInfoRequest instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns ReadReparentJournalInfoRequest instance
+ */
+ public static create(properties?: tabletmanagerdata.IReadReparentJournalInfoRequest): tabletmanagerdata.ReadReparentJournalInfoRequest;
+
+ /**
+ * Encodes the specified ReadReparentJournalInfoRequest message. Does not implicitly {@link tabletmanagerdata.ReadReparentJournalInfoRequest.verify|verify} messages.
+ * @param message ReadReparentJournalInfoRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: tabletmanagerdata.IReadReparentJournalInfoRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified ReadReparentJournalInfoRequest message, length delimited. Does not implicitly {@link tabletmanagerdata.ReadReparentJournalInfoRequest.verify|verify} messages.
+ * @param message ReadReparentJournalInfoRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: tabletmanagerdata.IReadReparentJournalInfoRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a ReadReparentJournalInfoRequest message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns ReadReparentJournalInfoRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): tabletmanagerdata.ReadReparentJournalInfoRequest;
+
+ /**
+ * Decodes a ReadReparentJournalInfoRequest message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns ReadReparentJournalInfoRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): tabletmanagerdata.ReadReparentJournalInfoRequest;
+
+ /**
+ * Verifies a ReadReparentJournalInfoRequest message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a ReadReparentJournalInfoRequest message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns ReadReparentJournalInfoRequest
+ */
+ public static fromObject(object: { [k: string]: any }): tabletmanagerdata.ReadReparentJournalInfoRequest;
+
+ /**
+ * Creates a plain object from a ReadReparentJournalInfoRequest message. Also converts values to other types if specified.
+ * @param message ReadReparentJournalInfoRequest
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: tabletmanagerdata.ReadReparentJournalInfoRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this ReadReparentJournalInfoRequest to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for ReadReparentJournalInfoRequest
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a ReadReparentJournalInfoResponse. */
+ interface IReadReparentJournalInfoResponse {
+
+ /** ReadReparentJournalInfoResponse length */
+ length?: (number|null);
+ }
+
+ /** Represents a ReadReparentJournalInfoResponse. */
+ class ReadReparentJournalInfoResponse implements IReadReparentJournalInfoResponse {
+
+ /**
+ * Constructs a new ReadReparentJournalInfoResponse.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: tabletmanagerdata.IReadReparentJournalInfoResponse);
+
+ /** ReadReparentJournalInfoResponse length. */
+ public length: number;
+
+ /**
+ * Creates a new ReadReparentJournalInfoResponse instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns ReadReparentJournalInfoResponse instance
+ */
+ public static create(properties?: tabletmanagerdata.IReadReparentJournalInfoResponse): tabletmanagerdata.ReadReparentJournalInfoResponse;
+
+ /**
+ * Encodes the specified ReadReparentJournalInfoResponse message. Does not implicitly {@link tabletmanagerdata.ReadReparentJournalInfoResponse.verify|verify} messages.
+ * @param message ReadReparentJournalInfoResponse message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: tabletmanagerdata.IReadReparentJournalInfoResponse, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified ReadReparentJournalInfoResponse message, length delimited. Does not implicitly {@link tabletmanagerdata.ReadReparentJournalInfoResponse.verify|verify} messages.
+ * @param message ReadReparentJournalInfoResponse message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: tabletmanagerdata.IReadReparentJournalInfoResponse, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a ReadReparentJournalInfoResponse message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns ReadReparentJournalInfoResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): tabletmanagerdata.ReadReparentJournalInfoResponse;
+
+ /**
+ * Decodes a ReadReparentJournalInfoResponse message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns ReadReparentJournalInfoResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): tabletmanagerdata.ReadReparentJournalInfoResponse;
+
+ /**
+ * Verifies a ReadReparentJournalInfoResponse message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a ReadReparentJournalInfoResponse message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns ReadReparentJournalInfoResponse
+ */
+ public static fromObject(object: { [k: string]: any }): tabletmanagerdata.ReadReparentJournalInfoResponse;
+
+ /**
+ * Creates a plain object from a ReadReparentJournalInfoResponse message. Also converts values to other types if specified.
+ * @param message ReadReparentJournalInfoResponse
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: tabletmanagerdata.ReadReparentJournalInfoResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this ReadReparentJournalInfoResponse to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for ReadReparentJournalInfoResponse
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
/** Properties of an InitReplicaRequest. */
interface IInitReplicaRequest {
@@ -30110,6 +31977,200 @@ export namespace tabletmanagerdata {
public static getTypeUrl(typeUrlPrefix?: string): string;
}
+ /** Properties of a DeleteTableDataRequest. */
+ interface IDeleteTableDataRequest {
+
+ /** DeleteTableDataRequest table_filters */
+ table_filters?: ({ [k: string]: string }|null);
+
+ /** DeleteTableDataRequest batch_size */
+ batch_size?: (number|Long|null);
+ }
+
+ /** Represents a DeleteTableDataRequest. */
+ class DeleteTableDataRequest implements IDeleteTableDataRequest {
+
+ /**
+ * Constructs a new DeleteTableDataRequest.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: tabletmanagerdata.IDeleteTableDataRequest);
+
+ /** DeleteTableDataRequest table_filters. */
+ public table_filters: { [k: string]: string };
+
+ /** DeleteTableDataRequest batch_size. */
+ public batch_size: (number|Long);
+
+ /**
+ * Creates a new DeleteTableDataRequest instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns DeleteTableDataRequest instance
+ */
+ public static create(properties?: tabletmanagerdata.IDeleteTableDataRequest): tabletmanagerdata.DeleteTableDataRequest;
+
+ /**
+ * Encodes the specified DeleteTableDataRequest message. Does not implicitly {@link tabletmanagerdata.DeleteTableDataRequest.verify|verify} messages.
+ * @param message DeleteTableDataRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: tabletmanagerdata.IDeleteTableDataRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified DeleteTableDataRequest message, length delimited. Does not implicitly {@link tabletmanagerdata.DeleteTableDataRequest.verify|verify} messages.
+ * @param message DeleteTableDataRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: tabletmanagerdata.IDeleteTableDataRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a DeleteTableDataRequest message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns DeleteTableDataRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): tabletmanagerdata.DeleteTableDataRequest;
+
+ /**
+ * Decodes a DeleteTableDataRequest message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns DeleteTableDataRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): tabletmanagerdata.DeleteTableDataRequest;
+
+ /**
+ * Verifies a DeleteTableDataRequest message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a DeleteTableDataRequest message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns DeleteTableDataRequest
+ */
+ public static fromObject(object: { [k: string]: any }): tabletmanagerdata.DeleteTableDataRequest;
+
+ /**
+ * Creates a plain object from a DeleteTableDataRequest message. Also converts values to other types if specified.
+ * @param message DeleteTableDataRequest
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: tabletmanagerdata.DeleteTableDataRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this DeleteTableDataRequest to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for DeleteTableDataRequest
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a DeleteTableDataResponse. */
+ interface IDeleteTableDataResponse {
+ }
+
+ /** Represents a DeleteTableDataResponse. */
+ class DeleteTableDataResponse implements IDeleteTableDataResponse {
+
+ /**
+ * Constructs a new DeleteTableDataResponse.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: tabletmanagerdata.IDeleteTableDataResponse);
+
+ /**
+ * Creates a new DeleteTableDataResponse instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns DeleteTableDataResponse instance
+ */
+ public static create(properties?: tabletmanagerdata.IDeleteTableDataResponse): tabletmanagerdata.DeleteTableDataResponse;
+
+ /**
+ * Encodes the specified DeleteTableDataResponse message. Does not implicitly {@link tabletmanagerdata.DeleteTableDataResponse.verify|verify} messages.
+ * @param message DeleteTableDataResponse message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: tabletmanagerdata.IDeleteTableDataResponse, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified DeleteTableDataResponse message, length delimited. Does not implicitly {@link tabletmanagerdata.DeleteTableDataResponse.verify|verify} messages.
+ * @param message DeleteTableDataResponse message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: tabletmanagerdata.IDeleteTableDataResponse, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a DeleteTableDataResponse message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns DeleteTableDataResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): tabletmanagerdata.DeleteTableDataResponse;
+
+ /**
+ * Decodes a DeleteTableDataResponse message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns DeleteTableDataResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): tabletmanagerdata.DeleteTableDataResponse;
+
+ /**
+ * Verifies a DeleteTableDataResponse message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a DeleteTableDataResponse message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns DeleteTableDataResponse
+ */
+ public static fromObject(object: { [k: string]: any }): tabletmanagerdata.DeleteTableDataResponse;
+
+ /**
+ * Creates a plain object from a DeleteTableDataResponse message. Also converts values to other types if specified.
+ * @param message DeleteTableDataResponse
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: tabletmanagerdata.DeleteTableDataResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this DeleteTableDataResponse to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for DeleteTableDataResponse
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
/** Properties of a DeleteVReplicationWorkflowRequest. */
interface IDeleteVReplicationWorkflowRequest {
@@ -33768,6 +35829,206 @@ export namespace tabletmanagerdata {
public static getTypeUrl(typeUrlPrefix?: string): string;
}
}
+
+ /** Properties of a ChangeTagsRequest. */
+ interface IChangeTagsRequest {
+
+ /** ChangeTagsRequest tags */
+ tags?: ({ [k: string]: string }|null);
+
+ /** ChangeTagsRequest replace */
+ replace?: (boolean|null);
+ }
+
+ /** Represents a ChangeTagsRequest. */
+ class ChangeTagsRequest implements IChangeTagsRequest {
+
+ /**
+ * Constructs a new ChangeTagsRequest.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: tabletmanagerdata.IChangeTagsRequest);
+
+ /** ChangeTagsRequest tags. */
+ public tags: { [k: string]: string };
+
+ /** ChangeTagsRequest replace. */
+ public replace: boolean;
+
+ /**
+ * Creates a new ChangeTagsRequest instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns ChangeTagsRequest instance
+ */
+ public static create(properties?: tabletmanagerdata.IChangeTagsRequest): tabletmanagerdata.ChangeTagsRequest;
+
+ /**
+ * Encodes the specified ChangeTagsRequest message. Does not implicitly {@link tabletmanagerdata.ChangeTagsRequest.verify|verify} messages.
+ * @param message ChangeTagsRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: tabletmanagerdata.IChangeTagsRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified ChangeTagsRequest message, length delimited. Does not implicitly {@link tabletmanagerdata.ChangeTagsRequest.verify|verify} messages.
+ * @param message ChangeTagsRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: tabletmanagerdata.IChangeTagsRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a ChangeTagsRequest message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns ChangeTagsRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): tabletmanagerdata.ChangeTagsRequest;
+
+ /**
+ * Decodes a ChangeTagsRequest message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns ChangeTagsRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): tabletmanagerdata.ChangeTagsRequest;
+
+ /**
+ * Verifies a ChangeTagsRequest message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a ChangeTagsRequest message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns ChangeTagsRequest
+ */
+ public static fromObject(object: { [k: string]: any }): tabletmanagerdata.ChangeTagsRequest;
+
+ /**
+ * Creates a plain object from a ChangeTagsRequest message. Also converts values to other types if specified.
+ * @param message ChangeTagsRequest
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: tabletmanagerdata.ChangeTagsRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this ChangeTagsRequest to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for ChangeTagsRequest
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a ChangeTagsResponse. */
+ interface IChangeTagsResponse {
+
+ /** ChangeTagsResponse tags */
+ tags?: ({ [k: string]: string }|null);
+ }
+
+ /** Represents a ChangeTagsResponse. */
+ class ChangeTagsResponse implements IChangeTagsResponse {
+
+ /**
+ * Constructs a new ChangeTagsResponse.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: tabletmanagerdata.IChangeTagsResponse);
+
+ /** ChangeTagsResponse tags. */
+ public tags: { [k: string]: string };
+
+ /**
+ * Creates a new ChangeTagsResponse instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns ChangeTagsResponse instance
+ */
+ public static create(properties?: tabletmanagerdata.IChangeTagsResponse): tabletmanagerdata.ChangeTagsResponse;
+
+ /**
+ * Encodes the specified ChangeTagsResponse message. Does not implicitly {@link tabletmanagerdata.ChangeTagsResponse.verify|verify} messages.
+ * @param message ChangeTagsResponse message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: tabletmanagerdata.IChangeTagsResponse, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified ChangeTagsResponse message, length delimited. Does not implicitly {@link tabletmanagerdata.ChangeTagsResponse.verify|verify} messages.
+ * @param message ChangeTagsResponse message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: tabletmanagerdata.IChangeTagsResponse, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a ChangeTagsResponse message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns ChangeTagsResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): tabletmanagerdata.ChangeTagsResponse;
+
+ /**
+ * Decodes a ChangeTagsResponse message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns ChangeTagsResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): tabletmanagerdata.ChangeTagsResponse;
+
+ /**
+ * Verifies a ChangeTagsResponse message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a ChangeTagsResponse message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns ChangeTagsResponse
+ */
+ public static fromObject(object: { [k: string]: any }): tabletmanagerdata.ChangeTagsResponse;
+
+ /**
+ * Creates a plain object from a ChangeTagsResponse message. Also converts values to other types if specified.
+ * @param message ChangeTagsResponse
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: tabletmanagerdata.ChangeTagsResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this ChangeTagsResponse to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for ChangeTagsResponse
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
}
/** Namespace binlogdata. */
@@ -41560,8 +43821,18 @@ export namespace query {
public static getTypeUrl(typeUrlPrefix?: string): string;
}
+ /** StartCommitState enum. */
+ enum StartCommitState {
+ Unknown = 0,
+ Fail = 1,
+ Success = 2
+ }
+
/** Properties of a StartCommitResponse. */
interface IStartCommitResponse {
+
+ /** StartCommitResponse state */
+ state?: (query.StartCommitState|null);
}
/** Represents a StartCommitResponse. */
@@ -41573,6 +43844,9 @@ export namespace query {
*/
constructor(properties?: query.IStartCommitResponse);
+ /** StartCommitResponse state. */
+ public state: query.StartCommitState;
+
/**
* Creates a new StartCommitResponse instance using the specified properties.
* @param [properties] Properties to set
@@ -45667,6 +47941,9 @@ export namespace replicationdata {
/** Status replication_lag_unknown */
replication_lag_unknown?: (boolean|null);
+
+ /** Status backup_running */
+ backup_running?: (boolean|null);
}
/** Represents a Status. */
@@ -45744,6 +48021,9 @@ export namespace replicationdata {
/** Status replication_lag_unknown. */
public replication_lag_unknown: boolean;
+ /** Status backup_running. */
+ public backup_running: boolean;
+
/**
* Creates a new Status instance using the specified properties.
* @param [properties] Properties to set
@@ -46042,6 +48322,9 @@ export namespace replicationdata {
/** PrimaryStatus file_position */
file_position?: (string|null);
+
+ /** PrimaryStatus server_uuid */
+ server_uuid?: (string|null);
}
/** Represents a PrimaryStatus. */
@@ -46059,6 +48342,9 @@ export namespace replicationdata {
/** PrimaryStatus file_position. */
public file_position: string;
+ /** PrimaryStatus server_uuid. */
+ public server_uuid: string;
+
/**
* Creates a new PrimaryStatus instance using the specified properties.
* @param [properties] Properties to set
@@ -49318,20 +51604,30 @@ export namespace vtctldata {
public static getTypeUrl(typeUrlPrefix?: string): string;
}
+ /** ShardedAutoIncrementHandling enum. */
+ enum ShardedAutoIncrementHandling {
+ LEAVE = 0,
+ REMOVE = 1,
+ REPLACE = 2
+ }
+
/** Properties of a WorkflowOptions. */
interface IWorkflowOptions {
/** WorkflowOptions tenant_id */
tenant_id?: (string|null);
- /** WorkflowOptions strip_sharded_auto_increment */
- strip_sharded_auto_increment?: (boolean|null);
+ /** WorkflowOptions sharded_auto_increment_handling */
+ sharded_auto_increment_handling?: (vtctldata.ShardedAutoIncrementHandling|null);
/** WorkflowOptions shards */
shards?: (string[]|null);
/** WorkflowOptions config */
config?: ({ [k: string]: string }|null);
+
+ /** WorkflowOptions global_keyspace */
+ global_keyspace?: (string|null);
}
/** Represents a WorkflowOptions. */
@@ -49346,8 +51642,8 @@ export namespace vtctldata {
/** WorkflowOptions tenant_id. */
public tenant_id: string;
- /** WorkflowOptions strip_sharded_auto_increment. */
- public strip_sharded_auto_increment: boolean;
+ /** WorkflowOptions sharded_auto_increment_handling. */
+ public sharded_auto_increment_handling: vtctldata.ShardedAutoIncrementHandling;
/** WorkflowOptions shards. */
public shards: string[];
@@ -49355,6 +51651,9 @@ export namespace vtctldata {
/** WorkflowOptions config. */
public config: { [k: string]: string };
+ /** WorkflowOptions global_keyspace. */
+ public global_keyspace: string;
+
/**
* Creates a new WorkflowOptions instance using the specified properties.
* @param [properties] Properties to set
@@ -52508,6 +54807,218 @@ export namespace vtctldata {
public static getTypeUrl(typeUrlPrefix?: string): string;
}
+ /** Properties of a ChangeTabletTagsRequest. */
+ interface IChangeTabletTagsRequest {
+
+ /** ChangeTabletTagsRequest tablet_alias */
+ tablet_alias?: (topodata.ITabletAlias|null);
+
+ /** ChangeTabletTagsRequest tags */
+ tags?: ({ [k: string]: string }|null);
+
+ /** ChangeTabletTagsRequest replace */
+ replace?: (boolean|null);
+ }
+
+ /** Represents a ChangeTabletTagsRequest. */
+ class ChangeTabletTagsRequest implements IChangeTabletTagsRequest {
+
+ /**
+ * Constructs a new ChangeTabletTagsRequest.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: vtctldata.IChangeTabletTagsRequest);
+
+ /** ChangeTabletTagsRequest tablet_alias. */
+ public tablet_alias?: (topodata.ITabletAlias|null);
+
+ /** ChangeTabletTagsRequest tags. */
+ public tags: { [k: string]: string };
+
+ /** ChangeTabletTagsRequest replace. */
+ public replace: boolean;
+
+ /**
+ * Creates a new ChangeTabletTagsRequest instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns ChangeTabletTagsRequest instance
+ */
+ public static create(properties?: vtctldata.IChangeTabletTagsRequest): vtctldata.ChangeTabletTagsRequest;
+
+ /**
+ * Encodes the specified ChangeTabletTagsRequest message. Does not implicitly {@link vtctldata.ChangeTabletTagsRequest.verify|verify} messages.
+ * @param message ChangeTabletTagsRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: vtctldata.IChangeTabletTagsRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified ChangeTabletTagsRequest message, length delimited. Does not implicitly {@link vtctldata.ChangeTabletTagsRequest.verify|verify} messages.
+ * @param message ChangeTabletTagsRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: vtctldata.IChangeTabletTagsRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a ChangeTabletTagsRequest message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns ChangeTabletTagsRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): vtctldata.ChangeTabletTagsRequest;
+
+ /**
+ * Decodes a ChangeTabletTagsRequest message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns ChangeTabletTagsRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): vtctldata.ChangeTabletTagsRequest;
+
+ /**
+ * Verifies a ChangeTabletTagsRequest message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a ChangeTabletTagsRequest message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns ChangeTabletTagsRequest
+ */
+ public static fromObject(object: { [k: string]: any }): vtctldata.ChangeTabletTagsRequest;
+
+ /**
+ * Creates a plain object from a ChangeTabletTagsRequest message. Also converts values to other types if specified.
+ * @param message ChangeTabletTagsRequest
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: vtctldata.ChangeTabletTagsRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this ChangeTabletTagsRequest to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for ChangeTabletTagsRequest
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a ChangeTabletTagsResponse. */
+ interface IChangeTabletTagsResponse {
+
+ /** ChangeTabletTagsResponse before_tags */
+ before_tags?: ({ [k: string]: string }|null);
+
+ /** ChangeTabletTagsResponse after_tags */
+ after_tags?: ({ [k: string]: string }|null);
+ }
+
+ /** Represents a ChangeTabletTagsResponse. */
+ class ChangeTabletTagsResponse implements IChangeTabletTagsResponse {
+
+ /**
+ * Constructs a new ChangeTabletTagsResponse.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: vtctldata.IChangeTabletTagsResponse);
+
+ /** ChangeTabletTagsResponse before_tags. */
+ public before_tags: { [k: string]: string };
+
+ /** ChangeTabletTagsResponse after_tags. */
+ public after_tags: { [k: string]: string };
+
+ /**
+ * Creates a new ChangeTabletTagsResponse instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns ChangeTabletTagsResponse instance
+ */
+ public static create(properties?: vtctldata.IChangeTabletTagsResponse): vtctldata.ChangeTabletTagsResponse;
+
+ /**
+ * Encodes the specified ChangeTabletTagsResponse message. Does not implicitly {@link vtctldata.ChangeTabletTagsResponse.verify|verify} messages.
+ * @param message ChangeTabletTagsResponse message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: vtctldata.IChangeTabletTagsResponse, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified ChangeTabletTagsResponse message, length delimited. Does not implicitly {@link vtctldata.ChangeTabletTagsResponse.verify|verify} messages.
+ * @param message ChangeTabletTagsResponse message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: vtctldata.IChangeTabletTagsResponse, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a ChangeTabletTagsResponse message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns ChangeTabletTagsResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): vtctldata.ChangeTabletTagsResponse;
+
+ /**
+ * Decodes a ChangeTabletTagsResponse message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns ChangeTabletTagsResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): vtctldata.ChangeTabletTagsResponse;
+
+ /**
+ * Verifies a ChangeTabletTagsResponse message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a ChangeTabletTagsResponse message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns ChangeTabletTagsResponse
+ */
+ public static fromObject(object: { [k: string]: any }): vtctldata.ChangeTabletTagsResponse;
+
+ /**
+ * Creates a plain object from a ChangeTabletTagsResponse message. Also converts values to other types if specified.
+ * @param message ChangeTabletTagsResponse
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: vtctldata.ChangeTabletTagsResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this ChangeTabletTagsResponse to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for ChangeTabletTagsResponse
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
/** Properties of a ChangeTabletTypeRequest. */
interface IChangeTabletTypeRequest {
@@ -55003,6 +57514,9 @@ export namespace vtctldata {
/** EmergencyReparentShardRequest wait_for_all_tablets */
wait_for_all_tablets?: (boolean|null);
+
+ /** EmergencyReparentShardRequest expected_primary */
+ expected_primary?: (topodata.ITabletAlias|null);
}
/** Represents an EmergencyReparentShardRequest. */
@@ -55035,6 +57549,9 @@ export namespace vtctldata {
/** EmergencyReparentShardRequest wait_for_all_tablets. */
public wait_for_all_tablets: boolean;
+ /** EmergencyReparentShardRequest expected_primary. */
+ public expected_primary?: (topodata.ITabletAlias|null);
+
/**
* Creates a new EmergencyReparentShardRequest instance using the specified properties.
* @param [properties] Properties to set
@@ -61739,6 +64256,327 @@ export namespace vtctldata {
public static getTypeUrl(typeUrlPrefix?: string): string;
}
+ /** Properties of a GetTransactionInfoRequest. */
+ interface IGetTransactionInfoRequest {
+
+ /** GetTransactionInfoRequest dtid */
+ dtid?: (string|null);
+ }
+
+ /** Represents a GetTransactionInfoRequest. */
+ class GetTransactionInfoRequest implements IGetTransactionInfoRequest {
+
+ /**
+ * Constructs a new GetTransactionInfoRequest.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: vtctldata.IGetTransactionInfoRequest);
+
+ /** GetTransactionInfoRequest dtid. */
+ public dtid: string;
+
+ /**
+ * Creates a new GetTransactionInfoRequest instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns GetTransactionInfoRequest instance
+ */
+ public static create(properties?: vtctldata.IGetTransactionInfoRequest): vtctldata.GetTransactionInfoRequest;
+
+ /**
+ * Encodes the specified GetTransactionInfoRequest message. Does not implicitly {@link vtctldata.GetTransactionInfoRequest.verify|verify} messages.
+ * @param message GetTransactionInfoRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: vtctldata.IGetTransactionInfoRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified GetTransactionInfoRequest message, length delimited. Does not implicitly {@link vtctldata.GetTransactionInfoRequest.verify|verify} messages.
+ * @param message GetTransactionInfoRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: vtctldata.IGetTransactionInfoRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a GetTransactionInfoRequest message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns GetTransactionInfoRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): vtctldata.GetTransactionInfoRequest;
+
+ /**
+ * Decodes a GetTransactionInfoRequest message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns GetTransactionInfoRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): vtctldata.GetTransactionInfoRequest;
+
+ /**
+ * Verifies a GetTransactionInfoRequest message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a GetTransactionInfoRequest message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns GetTransactionInfoRequest
+ */
+ public static fromObject(object: { [k: string]: any }): vtctldata.GetTransactionInfoRequest;
+
+ /**
+ * Creates a plain object from a GetTransactionInfoRequest message. Also converts values to other types if specified.
+ * @param message GetTransactionInfoRequest
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: vtctldata.GetTransactionInfoRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this GetTransactionInfoRequest to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for GetTransactionInfoRequest
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a ShardTransactionState. */
+ interface IShardTransactionState {
+
+ /** ShardTransactionState shard */
+ shard?: (string|null);
+
+ /** ShardTransactionState state */
+ state?: (string|null);
+
+ /** ShardTransactionState message */
+ message?: (string|null);
+
+ /** ShardTransactionState time_created */
+ time_created?: (number|Long|null);
+
+ /** ShardTransactionState statements */
+ statements?: (string[]|null);
+ }
+
+ /** Represents a ShardTransactionState. */
+ class ShardTransactionState implements IShardTransactionState {
+
+ /**
+ * Constructs a new ShardTransactionState.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: vtctldata.IShardTransactionState);
+
+ /** ShardTransactionState shard. */
+ public shard: string;
+
+ /** ShardTransactionState state. */
+ public state: string;
+
+ /** ShardTransactionState message. */
+ public message: string;
+
+ /** ShardTransactionState time_created. */
+ public time_created: (number|Long);
+
+ /** ShardTransactionState statements. */
+ public statements: string[];
+
+ /**
+ * Creates a new ShardTransactionState instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns ShardTransactionState instance
+ */
+ public static create(properties?: vtctldata.IShardTransactionState): vtctldata.ShardTransactionState;
+
+ /**
+ * Encodes the specified ShardTransactionState message. Does not implicitly {@link vtctldata.ShardTransactionState.verify|verify} messages.
+ * @param message ShardTransactionState message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: vtctldata.IShardTransactionState, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified ShardTransactionState message, length delimited. Does not implicitly {@link vtctldata.ShardTransactionState.verify|verify} messages.
+ * @param message ShardTransactionState message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: vtctldata.IShardTransactionState, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a ShardTransactionState message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns ShardTransactionState
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): vtctldata.ShardTransactionState;
+
+ /**
+ * Decodes a ShardTransactionState message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns ShardTransactionState
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): vtctldata.ShardTransactionState;
+
+ /**
+ * Verifies a ShardTransactionState message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a ShardTransactionState message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns ShardTransactionState
+ */
+ public static fromObject(object: { [k: string]: any }): vtctldata.ShardTransactionState;
+
+ /**
+ * Creates a plain object from a ShardTransactionState message. Also converts values to other types if specified.
+ * @param message ShardTransactionState
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: vtctldata.ShardTransactionState, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this ShardTransactionState to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for ShardTransactionState
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a GetTransactionInfoResponse. */
+ interface IGetTransactionInfoResponse {
+
+ /** GetTransactionInfoResponse metadata */
+ metadata?: (query.ITransactionMetadata|null);
+
+ /** GetTransactionInfoResponse shard_states */
+ shard_states?: (vtctldata.IShardTransactionState[]|null);
+ }
+
+ /** Represents a GetTransactionInfoResponse. */
+ class GetTransactionInfoResponse implements IGetTransactionInfoResponse {
+
+ /**
+ * Constructs a new GetTransactionInfoResponse.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: vtctldata.IGetTransactionInfoResponse);
+
+ /** GetTransactionInfoResponse metadata. */
+ public metadata?: (query.ITransactionMetadata|null);
+
+ /** GetTransactionInfoResponse shard_states. */
+ public shard_states: vtctldata.IShardTransactionState[];
+
+ /**
+ * Creates a new GetTransactionInfoResponse instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns GetTransactionInfoResponse instance
+ */
+ public static create(properties?: vtctldata.IGetTransactionInfoResponse): vtctldata.GetTransactionInfoResponse;
+
+ /**
+ * Encodes the specified GetTransactionInfoResponse message. Does not implicitly {@link vtctldata.GetTransactionInfoResponse.verify|verify} messages.
+ * @param message GetTransactionInfoResponse message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: vtctldata.IGetTransactionInfoResponse, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified GetTransactionInfoResponse message, length delimited. Does not implicitly {@link vtctldata.GetTransactionInfoResponse.verify|verify} messages.
+ * @param message GetTransactionInfoResponse message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: vtctldata.IGetTransactionInfoResponse, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a GetTransactionInfoResponse message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns GetTransactionInfoResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): vtctldata.GetTransactionInfoResponse;
+
+ /**
+ * Decodes a GetTransactionInfoResponse message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns GetTransactionInfoResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): vtctldata.GetTransactionInfoResponse;
+
+ /**
+ * Verifies a GetTransactionInfoResponse message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a GetTransactionInfoResponse message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns GetTransactionInfoResponse
+ */
+ public static fromObject(object: { [k: string]: any }): vtctldata.GetTransactionInfoResponse;
+
+ /**
+ * Creates a plain object from a GetTransactionInfoResponse message. Also converts values to other types if specified.
+ * @param message GetTransactionInfoResponse
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: vtctldata.GetTransactionInfoResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this GetTransactionInfoResponse to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for GetTransactionInfoResponse
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
/** Properties of a ConcludeTransactionRequest. */
interface IConcludeTransactionRequest {
@@ -65665,6 +68503,9 @@ export namespace vtctldata {
/** PlannedReparentShardRequest allow_cross_cell_promotion */
allow_cross_cell_promotion?: (boolean|null);
+
+ /** PlannedReparentShardRequest expected_primary */
+ expected_primary?: (topodata.ITabletAlias|null);
}
/** Represents a PlannedReparentShardRequest. */
@@ -65697,6 +68538,9 @@ export namespace vtctldata {
/** PlannedReparentShardRequest allow_cross_cell_promotion. */
public allow_cross_cell_promotion: boolean;
+ /** PlannedReparentShardRequest expected_primary. */
+ public expected_primary?: (topodata.ITabletAlias|null);
+
/**
* Creates a new PlannedReparentShardRequest instance using the specified properties.
* @param [properties] Properties to set
@@ -75003,6 +77847,9 @@ export namespace vtctldata {
/** WorkflowDeleteRequest shards */
shards?: (string[]|null);
+
+ /** WorkflowDeleteRequest delete_batch_size */
+ delete_batch_size?: (number|Long|null);
}
/** Represents a WorkflowDeleteRequest. */
@@ -75029,6 +77876,9 @@ export namespace vtctldata {
/** WorkflowDeleteRequest shards. */
public shards: string[];
+ /** WorkflowDeleteRequest delete_batch_size. */
+ public delete_batch_size: (number|Long);
+
/**
* Creates a new WorkflowDeleteRequest instance using the specified properties.
* @param [properties] Properties to set
diff --git a/web/vtadmin/src/proto/vtadmin.js b/web/vtadmin/src/proto/vtadmin.js
index f33a0590a15..0516ed44352 100644
--- a/web/vtadmin/src/proto/vtadmin.js
+++ b/web/vtadmin/src/proto/vtadmin.js
@@ -180,6 +180,39 @@ export const vtadmin = $root.vtadmin = (() => {
* @variation 2
*/
+ /**
+ * Callback as used by {@link vtadmin.VTAdmin#concludeTransaction}.
+ * @memberof vtadmin.VTAdmin
+ * @typedef ConcludeTransactionCallback
+ * @type {function}
+ * @param {Error|null} error Error, if any
+ * @param {vtctldata.ConcludeTransactionResponse} [response] ConcludeTransactionResponse
+ */
+
+ /**
+ * Calls ConcludeTransaction.
+ * @function concludeTransaction
+ * @memberof vtadmin.VTAdmin
+ * @instance
+ * @param {vtadmin.IConcludeTransactionRequest} request ConcludeTransactionRequest message or plain object
+ * @param {vtadmin.VTAdmin.ConcludeTransactionCallback} callback Node-style callback called with the error, if any, and ConcludeTransactionResponse
+ * @returns {undefined}
+ * @variation 1
+ */
+ Object.defineProperty(VTAdmin.prototype.concludeTransaction = function concludeTransaction(request, callback) {
+ return this.rpcCall(concludeTransaction, $root.vtadmin.ConcludeTransactionRequest, $root.vtctldata.ConcludeTransactionResponse, request, callback);
+ }, "name", { value: "ConcludeTransaction" });
+
+ /**
+ * Calls ConcludeTransaction.
+ * @function concludeTransaction
+ * @memberof vtadmin.VTAdmin
+ * @instance
+ * @param {vtadmin.IConcludeTransactionRequest} request ConcludeTransactionRequest message or plain object
+ * @returns {Promise} Promise
+ * @variation 2
+ */
+
/**
* Callback as used by {@link vtadmin.VTAdmin#createKeyspace}.
* @memberof vtadmin.VTAdmin
@@ -1038,6 +1071,39 @@ export const vtadmin = $root.vtadmin = (() => {
* @variation 2
*/
+ /**
+ * Callback as used by {@link vtadmin.VTAdmin#getTransactionInfo}.
+ * @memberof vtadmin.VTAdmin
+ * @typedef GetTransactionInfoCallback
+ * @type {function}
+ * @param {Error|null} error Error, if any
+ * @param {vtctldata.GetTransactionInfoResponse} [response] GetTransactionInfoResponse
+ */
+
+ /**
+ * Calls GetTransactionInfo.
+ * @function getTransactionInfo
+ * @memberof vtadmin.VTAdmin
+ * @instance
+ * @param {vtadmin.IGetTransactionInfoRequest} request GetTransactionInfoRequest message or plain object
+ * @param {vtadmin.VTAdmin.GetTransactionInfoCallback} callback Node-style callback called with the error, if any, and GetTransactionInfoResponse
+ * @returns {undefined}
+ * @variation 1
+ */
+ Object.defineProperty(VTAdmin.prototype.getTransactionInfo = function getTransactionInfo(request, callback) {
+ return this.rpcCall(getTransactionInfo, $root.vtadmin.GetTransactionInfoRequest, $root.vtctldata.GetTransactionInfoResponse, request, callback);
+ }, "name", { value: "GetTransactionInfo" });
+
+ /**
+ * Calls GetTransactionInfo.
+ * @function getTransactionInfo
+ * @memberof vtadmin.VTAdmin
+ * @instance
+ * @param {vtadmin.IGetTransactionInfoRequest} request GetTransactionInfoRequest message or plain object
+ * @returns {Promise} Promise
+ * @variation 2
+ */
+
/**
* Callback as used by {@link vtadmin.VTAdmin#getUnresolvedTransactions}.
* @memberof vtadmin.VTAdmin
@@ -1368,6 +1434,39 @@ export const vtadmin = $root.vtadmin = (() => {
* @variation 2
*/
+ /**
+ * Callback as used by {@link vtadmin.VTAdmin#moveTablesComplete}.
+ * @memberof vtadmin.VTAdmin
+ * @typedef MoveTablesCompleteCallback
+ * @type {function}
+ * @param {Error|null} error Error, if any
+ * @param {vtctldata.MoveTablesCompleteResponse} [response] MoveTablesCompleteResponse
+ */
+
+ /**
+ * Calls MoveTablesComplete.
+ * @function moveTablesComplete
+ * @memberof vtadmin.VTAdmin
+ * @instance
+ * @param {vtadmin.IMoveTablesCompleteRequest} request MoveTablesCompleteRequest message or plain object
+ * @param {vtadmin.VTAdmin.MoveTablesCompleteCallback} callback Node-style callback called with the error, if any, and MoveTablesCompleteResponse
+ * @returns {undefined}
+ * @variation 1
+ */
+ Object.defineProperty(VTAdmin.prototype.moveTablesComplete = function moveTablesComplete(request, callback) {
+ return this.rpcCall(moveTablesComplete, $root.vtadmin.MoveTablesCompleteRequest, $root.vtctldata.MoveTablesCompleteResponse, request, callback);
+ }, "name", { value: "MoveTablesComplete" });
+
+ /**
+ * Calls MoveTablesComplete.
+ * @function moveTablesComplete
+ * @memberof vtadmin.VTAdmin
+ * @instance
+ * @param {vtadmin.IMoveTablesCompleteRequest} request MoveTablesCompleteRequest message or plain object
+ * @returns {Promise} Promise
+ * @variation 2
+ */
+
/**
* Callback as used by {@link vtadmin.VTAdmin#moveTablesCreate}.
* @memberof vtadmin.VTAdmin
@@ -1401,6 +1500,39 @@ export const vtadmin = $root.vtadmin = (() => {
* @variation 2
*/
+ /**
+ * Callback as used by {@link vtadmin.VTAdmin#materializeCreate}.
+ * @memberof vtadmin.VTAdmin
+ * @typedef MaterializeCreateCallback
+ * @type {function}
+ * @param {Error|null} error Error, if any
+ * @param {vtctldata.MaterializeCreateResponse} [response] MaterializeCreateResponse
+ */
+
+ /**
+ * Calls MaterializeCreate.
+ * @function materializeCreate
+ * @memberof vtadmin.VTAdmin
+ * @instance
+ * @param {vtadmin.IMaterializeCreateRequest} request MaterializeCreateRequest message or plain object
+ * @param {vtadmin.VTAdmin.MaterializeCreateCallback} callback Node-style callback called with the error, if any, and MaterializeCreateResponse
+ * @returns {undefined}
+ * @variation 1
+ */
+ Object.defineProperty(VTAdmin.prototype.materializeCreate = function materializeCreate(request, callback) {
+ return this.rpcCall(materializeCreate, $root.vtadmin.MaterializeCreateRequest, $root.vtctldata.MaterializeCreateResponse, request, callback);
+ }, "name", { value: "MaterializeCreate" });
+
+ /**
+ * Calls MaterializeCreate.
+ * @function materializeCreate
+ * @memberof vtadmin.VTAdmin
+ * @instance
+ * @param {vtadmin.IMaterializeCreateRequest} request MaterializeCreateRequest message or plain object
+ * @returns {Promise} Promise
+ * @variation 2
+ */
+
/**
* Callback as used by {@link vtadmin.VTAdmin#pingTablet}.
* @memberof vtadmin.VTAdmin
@@ -1731,6 +1863,39 @@ export const vtadmin = $root.vtadmin = (() => {
* @variation 2
*/
+ /**
+ * Callback as used by {@link vtadmin.VTAdmin#reshardCreate}.
+ * @memberof vtadmin.VTAdmin
+ * @typedef ReshardCreateCallback
+ * @type {function}
+ * @param {Error|null} error Error, if any
+ * @param {vtctldata.WorkflowStatusResponse} [response] WorkflowStatusResponse
+ */
+
+ /**
+ * Calls ReshardCreate.
+ * @function reshardCreate
+ * @memberof vtadmin.VTAdmin
+ * @instance
+ * @param {vtadmin.IReshardCreateRequest} request ReshardCreateRequest message or plain object
+ * @param {vtadmin.VTAdmin.ReshardCreateCallback} callback Node-style callback called with the error, if any, and WorkflowStatusResponse
+ * @returns {undefined}
+ * @variation 1
+ */
+ Object.defineProperty(VTAdmin.prototype.reshardCreate = function reshardCreate(request, callback) {
+ return this.rpcCall(reshardCreate, $root.vtadmin.ReshardCreateRequest, $root.vtctldata.WorkflowStatusResponse, request, callback);
+ }, "name", { value: "ReshardCreate" });
+
+ /**
+ * Calls ReshardCreate.
+ * @function reshardCreate
+ * @memberof vtadmin.VTAdmin
+ * @instance
+ * @param {vtadmin.IReshardCreateRequest} request ReshardCreateRequest message or plain object
+ * @returns {Promise} Promise
+ * @variation 2
+ */
+
/**
* Callback as used by {@link vtadmin.VTAdmin#setReadOnly}.
* @memberof vtadmin.VTAdmin
@@ -2094,6 +2259,72 @@ export const vtadmin = $root.vtadmin = (() => {
* @variation 2
*/
+ /**
+ * Callback as used by {@link vtadmin.VTAdmin#vDiffCreate}.
+ * @memberof vtadmin.VTAdmin
+ * @typedef VDiffCreateCallback
+ * @type {function}
+ * @param {Error|null} error Error, if any
+ * @param {vtctldata.VDiffCreateResponse} [response] VDiffCreateResponse
+ */
+
+ /**
+ * Calls VDiffCreate.
+ * @function vDiffCreate
+ * @memberof vtadmin.VTAdmin
+ * @instance
+ * @param {vtadmin.IVDiffCreateRequest} request VDiffCreateRequest message or plain object
+ * @param {vtadmin.VTAdmin.VDiffCreateCallback} callback Node-style callback called with the error, if any, and VDiffCreateResponse
+ * @returns {undefined}
+ * @variation 1
+ */
+ Object.defineProperty(VTAdmin.prototype.vDiffCreate = function vDiffCreate(request, callback) {
+ return this.rpcCall(vDiffCreate, $root.vtadmin.VDiffCreateRequest, $root.vtctldata.VDiffCreateResponse, request, callback);
+ }, "name", { value: "VDiffCreate" });
+
+ /**
+ * Calls VDiffCreate.
+ * @function vDiffCreate
+ * @memberof vtadmin.VTAdmin
+ * @instance
+ * @param {vtadmin.IVDiffCreateRequest} request VDiffCreateRequest message or plain object
+ * @returns {Promise} Promise
+ * @variation 2
+ */
+
+ /**
+ * Callback as used by {@link vtadmin.VTAdmin#vDiffShow}.
+ * @memberof vtadmin.VTAdmin
+ * @typedef VDiffShowCallback
+ * @type {function}
+ * @param {Error|null} error Error, if any
+ * @param {vtadmin.VDiffShowResponse} [response] VDiffShowResponse
+ */
+
+ /**
+ * Calls VDiffShow.
+ * @function vDiffShow
+ * @memberof vtadmin.VTAdmin
+ * @instance
+ * @param {vtadmin.IVDiffShowRequest} request VDiffShowRequest message or plain object
+ * @param {vtadmin.VTAdmin.VDiffShowCallback} callback Node-style callback called with the error, if any, and VDiffShowResponse
+ * @returns {undefined}
+ * @variation 1
+ */
+ Object.defineProperty(VTAdmin.prototype.vDiffShow = function vDiffShow(request, callback) {
+ return this.rpcCall(vDiffShow, $root.vtadmin.VDiffShowRequest, $root.vtadmin.VDiffShowResponse, request, callback);
+ }, "name", { value: "VDiffShow" });
+
+ /**
+ * Calls VDiffShow.
+ * @function vDiffShow
+ * @memberof vtadmin.VTAdmin
+ * @instance
+ * @param {vtadmin.IVDiffShowRequest} request VDiffShowRequest message or plain object
+ * @returns {Promise} Promise
+ * @variation 2
+ */
+
/**
* Callback as used by {@link vtadmin.VTAdmin#vTExplain}.
* @memberof vtadmin.VTAdmin
@@ -2127,6 +2358,72 @@ export const vtadmin = $root.vtadmin = (() => {
* @variation 2
*/
+ /**
+ * Callback as used by {@link vtadmin.VTAdmin#workflowDelete}.
+ * @memberof vtadmin.VTAdmin
+ * @typedef WorkflowDeleteCallback
+ * @type {function}
+ * @param {Error|null} error Error, if any
+ * @param {vtctldata.WorkflowDeleteResponse} [response] WorkflowDeleteResponse
+ */
+
+ /**
+ * Calls WorkflowDelete.
+ * @function workflowDelete
+ * @memberof vtadmin.VTAdmin
+ * @instance
+ * @param {vtadmin.IWorkflowDeleteRequest} request WorkflowDeleteRequest message or plain object
+ * @param {vtadmin.VTAdmin.WorkflowDeleteCallback} callback Node-style callback called with the error, if any, and WorkflowDeleteResponse
+ * @returns {undefined}
+ * @variation 1
+ */
+ Object.defineProperty(VTAdmin.prototype.workflowDelete = function workflowDelete(request, callback) {
+ return this.rpcCall(workflowDelete, $root.vtadmin.WorkflowDeleteRequest, $root.vtctldata.WorkflowDeleteResponse, request, callback);
+ }, "name", { value: "WorkflowDelete" });
+
+ /**
+ * Calls WorkflowDelete.
+ * @function workflowDelete
+ * @memberof vtadmin.VTAdmin
+ * @instance
+ * @param {vtadmin.IWorkflowDeleteRequest} request WorkflowDeleteRequest message or plain object
+ * @returns {Promise} Promise
+ * @variation 2
+ */
+
+ /**
+ * Callback as used by {@link vtadmin.VTAdmin#workflowSwitchTraffic}.
+ * @memberof vtadmin.VTAdmin
+ * @typedef WorkflowSwitchTrafficCallback
+ * @type {function}
+ * @param {Error|null} error Error, if any
+ * @param {vtctldata.WorkflowSwitchTrafficResponse} [response] WorkflowSwitchTrafficResponse
+ */
+
+ /**
+ * Calls WorkflowSwitchTraffic.
+ * @function workflowSwitchTraffic
+ * @memberof vtadmin.VTAdmin
+ * @instance
+ * @param {vtadmin.IWorkflowSwitchTrafficRequest} request WorkflowSwitchTrafficRequest message or plain object
+ * @param {vtadmin.VTAdmin.WorkflowSwitchTrafficCallback} callback Node-style callback called with the error, if any, and WorkflowSwitchTrafficResponse
+ * @returns {undefined}
+ * @variation 1
+ */
+ Object.defineProperty(VTAdmin.prototype.workflowSwitchTraffic = function workflowSwitchTraffic(request, callback) {
+ return this.rpcCall(workflowSwitchTraffic, $root.vtadmin.WorkflowSwitchTrafficRequest, $root.vtctldata.WorkflowSwitchTrafficResponse, request, callback);
+ }, "name", { value: "WorkflowSwitchTraffic" });
+
+ /**
+ * Calls WorkflowSwitchTraffic.
+ * @function workflowSwitchTraffic
+ * @memberof vtadmin.VTAdmin
+ * @instance
+ * @param {vtadmin.IWorkflowSwitchTrafficRequest} request WorkflowSwitchTrafficRequest message or plain object
+ * @returns {Promise} Promise
+ * @variation 2
+ */
+
return VTAdmin;
})();
@@ -7070,6 +7367,470 @@ export const vtadmin = $root.vtadmin = (() => {
return Workflow;
})();
+ vtadmin.WorkflowDeleteRequest = (function() {
+
+ /**
+ * Properties of a WorkflowDeleteRequest.
+ * @memberof vtadmin
+ * @interface IWorkflowDeleteRequest
+ * @property {string|null} [cluster_id] WorkflowDeleteRequest cluster_id
+ * @property {vtctldata.IWorkflowDeleteRequest|null} [request] WorkflowDeleteRequest request
+ */
+
+ /**
+ * Constructs a new WorkflowDeleteRequest.
+ * @memberof vtadmin
+ * @classdesc Represents a WorkflowDeleteRequest.
+ * @implements IWorkflowDeleteRequest
+ * @constructor
+ * @param {vtadmin.IWorkflowDeleteRequest=} [properties] Properties to set
+ */
+ function WorkflowDeleteRequest(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * WorkflowDeleteRequest cluster_id.
+ * @member {string} cluster_id
+ * @memberof vtadmin.WorkflowDeleteRequest
+ * @instance
+ */
+ WorkflowDeleteRequest.prototype.cluster_id = "";
+
+ /**
+ * WorkflowDeleteRequest request.
+ * @member {vtctldata.IWorkflowDeleteRequest|null|undefined} request
+ * @memberof vtadmin.WorkflowDeleteRequest
+ * @instance
+ */
+ WorkflowDeleteRequest.prototype.request = null;
+
+ /**
+ * Creates a new WorkflowDeleteRequest instance using the specified properties.
+ * @function create
+ * @memberof vtadmin.WorkflowDeleteRequest
+ * @static
+ * @param {vtadmin.IWorkflowDeleteRequest=} [properties] Properties to set
+ * @returns {vtadmin.WorkflowDeleteRequest} WorkflowDeleteRequest instance
+ */
+ WorkflowDeleteRequest.create = function create(properties) {
+ return new WorkflowDeleteRequest(properties);
+ };
+
+ /**
+ * Encodes the specified WorkflowDeleteRequest message. Does not implicitly {@link vtadmin.WorkflowDeleteRequest.verify|verify} messages.
+ * @function encode
+ * @memberof vtadmin.WorkflowDeleteRequest
+ * @static
+ * @param {vtadmin.IWorkflowDeleteRequest} message WorkflowDeleteRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ WorkflowDeleteRequest.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.cluster_id != null && Object.hasOwnProperty.call(message, "cluster_id"))
+ writer.uint32(/* id 1, wireType 2 =*/10).string(message.cluster_id);
+ if (message.request != null && Object.hasOwnProperty.call(message, "request"))
+ $root.vtctldata.WorkflowDeleteRequest.encode(message.request, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified WorkflowDeleteRequest message, length delimited. Does not implicitly {@link vtadmin.WorkflowDeleteRequest.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof vtadmin.WorkflowDeleteRequest
+ * @static
+ * @param {vtadmin.IWorkflowDeleteRequest} message WorkflowDeleteRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ WorkflowDeleteRequest.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a WorkflowDeleteRequest message from the specified reader or buffer.
+ * @function decode
+ * @memberof vtadmin.WorkflowDeleteRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {vtadmin.WorkflowDeleteRequest} WorkflowDeleteRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ WorkflowDeleteRequest.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.vtadmin.WorkflowDeleteRequest();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.cluster_id = reader.string();
+ break;
+ }
+ case 2: {
+ message.request = $root.vtctldata.WorkflowDeleteRequest.decode(reader, reader.uint32());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a WorkflowDeleteRequest message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof vtadmin.WorkflowDeleteRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {vtadmin.WorkflowDeleteRequest} WorkflowDeleteRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ WorkflowDeleteRequest.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a WorkflowDeleteRequest message.
+ * @function verify
+ * @memberof vtadmin.WorkflowDeleteRequest
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ WorkflowDeleteRequest.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.cluster_id != null && message.hasOwnProperty("cluster_id"))
+ if (!$util.isString(message.cluster_id))
+ return "cluster_id: string expected";
+ if (message.request != null && message.hasOwnProperty("request")) {
+ let error = $root.vtctldata.WorkflowDeleteRequest.verify(message.request);
+ if (error)
+ return "request." + error;
+ }
+ return null;
+ };
+
+ /**
+ * Creates a WorkflowDeleteRequest message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof vtadmin.WorkflowDeleteRequest
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {vtadmin.WorkflowDeleteRequest} WorkflowDeleteRequest
+ */
+ WorkflowDeleteRequest.fromObject = function fromObject(object) {
+ if (object instanceof $root.vtadmin.WorkflowDeleteRequest)
+ return object;
+ let message = new $root.vtadmin.WorkflowDeleteRequest();
+ if (object.cluster_id != null)
+ message.cluster_id = String(object.cluster_id);
+ if (object.request != null) {
+ if (typeof object.request !== "object")
+ throw TypeError(".vtadmin.WorkflowDeleteRequest.request: object expected");
+ message.request = $root.vtctldata.WorkflowDeleteRequest.fromObject(object.request);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a WorkflowDeleteRequest message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof vtadmin.WorkflowDeleteRequest
+ * @static
+ * @param {vtadmin.WorkflowDeleteRequest} message WorkflowDeleteRequest
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ WorkflowDeleteRequest.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.cluster_id = "";
+ object.request = null;
+ }
+ if (message.cluster_id != null && message.hasOwnProperty("cluster_id"))
+ object.cluster_id = message.cluster_id;
+ if (message.request != null && message.hasOwnProperty("request"))
+ object.request = $root.vtctldata.WorkflowDeleteRequest.toObject(message.request, options);
+ return object;
+ };
+
+ /**
+ * Converts this WorkflowDeleteRequest to JSON.
+ * @function toJSON
+ * @memberof vtadmin.WorkflowDeleteRequest
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ WorkflowDeleteRequest.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for WorkflowDeleteRequest
+ * @function getTypeUrl
+ * @memberof vtadmin.WorkflowDeleteRequest
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ WorkflowDeleteRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/vtadmin.WorkflowDeleteRequest";
+ };
+
+ return WorkflowDeleteRequest;
+ })();
+
+ vtadmin.WorkflowSwitchTrafficRequest = (function() {
+
+ /**
+ * Properties of a WorkflowSwitchTrafficRequest.
+ * @memberof vtadmin
+ * @interface IWorkflowSwitchTrafficRequest
+ * @property {string|null} [cluster_id] WorkflowSwitchTrafficRequest cluster_id
+ * @property {vtctldata.IWorkflowSwitchTrafficRequest|null} [request] WorkflowSwitchTrafficRequest request
+ */
+
+ /**
+ * Constructs a new WorkflowSwitchTrafficRequest.
+ * @memberof vtadmin
+ * @classdesc Represents a WorkflowSwitchTrafficRequest.
+ * @implements IWorkflowSwitchTrafficRequest
+ * @constructor
+ * @param {vtadmin.IWorkflowSwitchTrafficRequest=} [properties] Properties to set
+ */
+ function WorkflowSwitchTrafficRequest(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * WorkflowSwitchTrafficRequest cluster_id.
+ * @member {string} cluster_id
+ * @memberof vtadmin.WorkflowSwitchTrafficRequest
+ * @instance
+ */
+ WorkflowSwitchTrafficRequest.prototype.cluster_id = "";
+
+ /**
+ * WorkflowSwitchTrafficRequest request.
+ * @member {vtctldata.IWorkflowSwitchTrafficRequest|null|undefined} request
+ * @memberof vtadmin.WorkflowSwitchTrafficRequest
+ * @instance
+ */
+ WorkflowSwitchTrafficRequest.prototype.request = null;
+
+ /**
+ * Creates a new WorkflowSwitchTrafficRequest instance using the specified properties.
+ * @function create
+ * @memberof vtadmin.WorkflowSwitchTrafficRequest
+ * @static
+ * @param {vtadmin.IWorkflowSwitchTrafficRequest=} [properties] Properties to set
+ * @returns {vtadmin.WorkflowSwitchTrafficRequest} WorkflowSwitchTrafficRequest instance
+ */
+ WorkflowSwitchTrafficRequest.create = function create(properties) {
+ return new WorkflowSwitchTrafficRequest(properties);
+ };
+
+ /**
+ * Encodes the specified WorkflowSwitchTrafficRequest message. Does not implicitly {@link vtadmin.WorkflowSwitchTrafficRequest.verify|verify} messages.
+ * @function encode
+ * @memberof vtadmin.WorkflowSwitchTrafficRequest
+ * @static
+ * @param {vtadmin.IWorkflowSwitchTrafficRequest} message WorkflowSwitchTrafficRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ WorkflowSwitchTrafficRequest.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.cluster_id != null && Object.hasOwnProperty.call(message, "cluster_id"))
+ writer.uint32(/* id 1, wireType 2 =*/10).string(message.cluster_id);
+ if (message.request != null && Object.hasOwnProperty.call(message, "request"))
+ $root.vtctldata.WorkflowSwitchTrafficRequest.encode(message.request, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified WorkflowSwitchTrafficRequest message, length delimited. Does not implicitly {@link vtadmin.WorkflowSwitchTrafficRequest.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof vtadmin.WorkflowSwitchTrafficRequest
+ * @static
+ * @param {vtadmin.IWorkflowSwitchTrafficRequest} message WorkflowSwitchTrafficRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ WorkflowSwitchTrafficRequest.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a WorkflowSwitchTrafficRequest message from the specified reader or buffer.
+ * @function decode
+ * @memberof vtadmin.WorkflowSwitchTrafficRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {vtadmin.WorkflowSwitchTrafficRequest} WorkflowSwitchTrafficRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ WorkflowSwitchTrafficRequest.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.vtadmin.WorkflowSwitchTrafficRequest();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.cluster_id = reader.string();
+ break;
+ }
+ case 2: {
+ message.request = $root.vtctldata.WorkflowSwitchTrafficRequest.decode(reader, reader.uint32());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a WorkflowSwitchTrafficRequest message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof vtadmin.WorkflowSwitchTrafficRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {vtadmin.WorkflowSwitchTrafficRequest} WorkflowSwitchTrafficRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ WorkflowSwitchTrafficRequest.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a WorkflowSwitchTrafficRequest message.
+ * @function verify
+ * @memberof vtadmin.WorkflowSwitchTrafficRequest
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ WorkflowSwitchTrafficRequest.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.cluster_id != null && message.hasOwnProperty("cluster_id"))
+ if (!$util.isString(message.cluster_id))
+ return "cluster_id: string expected";
+ if (message.request != null && message.hasOwnProperty("request")) {
+ let error = $root.vtctldata.WorkflowSwitchTrafficRequest.verify(message.request);
+ if (error)
+ return "request." + error;
+ }
+ return null;
+ };
+
+ /**
+ * Creates a WorkflowSwitchTrafficRequest message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof vtadmin.WorkflowSwitchTrafficRequest
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {vtadmin.WorkflowSwitchTrafficRequest} WorkflowSwitchTrafficRequest
+ */
+ WorkflowSwitchTrafficRequest.fromObject = function fromObject(object) {
+ if (object instanceof $root.vtadmin.WorkflowSwitchTrafficRequest)
+ return object;
+ let message = new $root.vtadmin.WorkflowSwitchTrafficRequest();
+ if (object.cluster_id != null)
+ message.cluster_id = String(object.cluster_id);
+ if (object.request != null) {
+ if (typeof object.request !== "object")
+ throw TypeError(".vtadmin.WorkflowSwitchTrafficRequest.request: object expected");
+ message.request = $root.vtctldata.WorkflowSwitchTrafficRequest.fromObject(object.request);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a WorkflowSwitchTrafficRequest message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof vtadmin.WorkflowSwitchTrafficRequest
+ * @static
+ * @param {vtadmin.WorkflowSwitchTrafficRequest} message WorkflowSwitchTrafficRequest
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ WorkflowSwitchTrafficRequest.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.cluster_id = "";
+ object.request = null;
+ }
+ if (message.cluster_id != null && message.hasOwnProperty("cluster_id"))
+ object.cluster_id = message.cluster_id;
+ if (message.request != null && message.hasOwnProperty("request"))
+ object.request = $root.vtctldata.WorkflowSwitchTrafficRequest.toObject(message.request, options);
+ return object;
+ };
+
+ /**
+ * Converts this WorkflowSwitchTrafficRequest to JSON.
+ * @function toJSON
+ * @memberof vtadmin.WorkflowSwitchTrafficRequest
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ WorkflowSwitchTrafficRequest.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for WorkflowSwitchTrafficRequest
+ * @function getTypeUrl
+ * @memberof vtadmin.WorkflowSwitchTrafficRequest
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ WorkflowSwitchTrafficRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/vtadmin.WorkflowSwitchTrafficRequest";
+ };
+
+ return WorkflowSwitchTrafficRequest;
+ })();
+
vtadmin.ApplySchemaRequest = (function() {
/**
@@ -7077,6 +7838,8 @@ export const vtadmin = $root.vtadmin = (() => {
* @memberof vtadmin
* @interface IApplySchemaRequest
* @property {string|null} [cluster_id] ApplySchemaRequest cluster_id
+ * @property {string|null} [sql] ApplySchemaRequest sql
+ * @property {string|null} [caller_id] ApplySchemaRequest caller_id
* @property {vtctldata.IApplySchemaRequest|null} [request] ApplySchemaRequest request
*/
@@ -7103,6 +7866,22 @@ export const vtadmin = $root.vtadmin = (() => {
*/
ApplySchemaRequest.prototype.cluster_id = "";
+ /**
+ * ApplySchemaRequest sql.
+ * @member {string} sql
+ * @memberof vtadmin.ApplySchemaRequest
+ * @instance
+ */
+ ApplySchemaRequest.prototype.sql = "";
+
+ /**
+ * ApplySchemaRequest caller_id.
+ * @member {string} caller_id
+ * @memberof vtadmin.ApplySchemaRequest
+ * @instance
+ */
+ ApplySchemaRequest.prototype.caller_id = "";
+
/**
* ApplySchemaRequest request.
* @member {vtctldata.IApplySchemaRequest|null|undefined} request
@@ -7137,8 +7916,12 @@ export const vtadmin = $root.vtadmin = (() => {
writer = $Writer.create();
if (message.cluster_id != null && Object.hasOwnProperty.call(message, "cluster_id"))
writer.uint32(/* id 1, wireType 2 =*/10).string(message.cluster_id);
+ if (message.sql != null && Object.hasOwnProperty.call(message, "sql"))
+ writer.uint32(/* id 2, wireType 2 =*/18).string(message.sql);
+ if (message.caller_id != null && Object.hasOwnProperty.call(message, "caller_id"))
+ writer.uint32(/* id 3, wireType 2 =*/26).string(message.caller_id);
if (message.request != null && Object.hasOwnProperty.call(message, "request"))
- $root.vtctldata.ApplySchemaRequest.encode(message.request, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+ $root.vtctldata.ApplySchemaRequest.encode(message.request, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
return writer;
};
@@ -7178,6 +7961,14 @@ export const vtadmin = $root.vtadmin = (() => {
break;
}
case 2: {
+ message.sql = reader.string();
+ break;
+ }
+ case 3: {
+ message.caller_id = reader.string();
+ break;
+ }
+ case 4: {
message.request = $root.vtctldata.ApplySchemaRequest.decode(reader, reader.uint32());
break;
}
@@ -7219,6 +8010,12 @@ export const vtadmin = $root.vtadmin = (() => {
if (message.cluster_id != null && message.hasOwnProperty("cluster_id"))
if (!$util.isString(message.cluster_id))
return "cluster_id: string expected";
+ if (message.sql != null && message.hasOwnProperty("sql"))
+ if (!$util.isString(message.sql))
+ return "sql: string expected";
+ if (message.caller_id != null && message.hasOwnProperty("caller_id"))
+ if (!$util.isString(message.caller_id))
+ return "caller_id: string expected";
if (message.request != null && message.hasOwnProperty("request")) {
let error = $root.vtctldata.ApplySchemaRequest.verify(message.request);
if (error)
@@ -7241,6 +8038,10 @@ export const vtadmin = $root.vtadmin = (() => {
let message = new $root.vtadmin.ApplySchemaRequest();
if (object.cluster_id != null)
message.cluster_id = String(object.cluster_id);
+ if (object.sql != null)
+ message.sql = String(object.sql);
+ if (object.caller_id != null)
+ message.caller_id = String(object.caller_id);
if (object.request != null) {
if (typeof object.request !== "object")
throw TypeError(".vtadmin.ApplySchemaRequest.request: object expected");
@@ -7264,10 +8065,16 @@ export const vtadmin = $root.vtadmin = (() => {
let object = {};
if (options.defaults) {
object.cluster_id = "";
+ object.sql = "";
+ object.caller_id = "";
object.request = null;
}
if (message.cluster_id != null && message.hasOwnProperty("cluster_id"))
object.cluster_id = message.cluster_id;
+ if (message.sql != null && message.hasOwnProperty("sql"))
+ object.sql = message.sql;
+ if (message.caller_id != null && message.hasOwnProperty("caller_id"))
+ object.caller_id = message.caller_id;
if (message.request != null && message.hasOwnProperty("request"))
object.request = $root.vtctldata.ApplySchemaRequest.toObject(message.request, options);
return object;
@@ -7998,6 +8805,233 @@ export const vtadmin = $root.vtadmin = (() => {
return CompleteSchemaMigrationRequest;
})();
+ vtadmin.ConcludeTransactionRequest = (function() {
+
+ /**
+ * Properties of a ConcludeTransactionRequest.
+ * @memberof vtadmin
+ * @interface IConcludeTransactionRequest
+ * @property {string|null} [cluster_id] ConcludeTransactionRequest cluster_id
+ * @property {string|null} [dtid] ConcludeTransactionRequest dtid
+ */
+
+ /**
+ * Constructs a new ConcludeTransactionRequest.
+ * @memberof vtadmin
+ * @classdesc Represents a ConcludeTransactionRequest.
+ * @implements IConcludeTransactionRequest
+ * @constructor
+ * @param {vtadmin.IConcludeTransactionRequest=} [properties] Properties to set
+ */
+ function ConcludeTransactionRequest(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * ConcludeTransactionRequest cluster_id.
+ * @member {string} cluster_id
+ * @memberof vtadmin.ConcludeTransactionRequest
+ * @instance
+ */
+ ConcludeTransactionRequest.prototype.cluster_id = "";
+
+ /**
+ * ConcludeTransactionRequest dtid.
+ * @member {string} dtid
+ * @memberof vtadmin.ConcludeTransactionRequest
+ * @instance
+ */
+ ConcludeTransactionRequest.prototype.dtid = "";
+
+ /**
+ * Creates a new ConcludeTransactionRequest instance using the specified properties.
+ * @function create
+ * @memberof vtadmin.ConcludeTransactionRequest
+ * @static
+ * @param {vtadmin.IConcludeTransactionRequest=} [properties] Properties to set
+ * @returns {vtadmin.ConcludeTransactionRequest} ConcludeTransactionRequest instance
+ */
+ ConcludeTransactionRequest.create = function create(properties) {
+ return new ConcludeTransactionRequest(properties);
+ };
+
+ /**
+ * Encodes the specified ConcludeTransactionRequest message. Does not implicitly {@link vtadmin.ConcludeTransactionRequest.verify|verify} messages.
+ * @function encode
+ * @memberof vtadmin.ConcludeTransactionRequest
+ * @static
+ * @param {vtadmin.IConcludeTransactionRequest} message ConcludeTransactionRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ ConcludeTransactionRequest.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.cluster_id != null && Object.hasOwnProperty.call(message, "cluster_id"))
+ writer.uint32(/* id 1, wireType 2 =*/10).string(message.cluster_id);
+ if (message.dtid != null && Object.hasOwnProperty.call(message, "dtid"))
+ writer.uint32(/* id 2, wireType 2 =*/18).string(message.dtid);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified ConcludeTransactionRequest message, length delimited. Does not implicitly {@link vtadmin.ConcludeTransactionRequest.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof vtadmin.ConcludeTransactionRequest
+ * @static
+ * @param {vtadmin.IConcludeTransactionRequest} message ConcludeTransactionRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ ConcludeTransactionRequest.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a ConcludeTransactionRequest message from the specified reader or buffer.
+ * @function decode
+ * @memberof vtadmin.ConcludeTransactionRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {vtadmin.ConcludeTransactionRequest} ConcludeTransactionRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ ConcludeTransactionRequest.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.vtadmin.ConcludeTransactionRequest();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.cluster_id = reader.string();
+ break;
+ }
+ case 2: {
+ message.dtid = reader.string();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a ConcludeTransactionRequest message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof vtadmin.ConcludeTransactionRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {vtadmin.ConcludeTransactionRequest} ConcludeTransactionRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ ConcludeTransactionRequest.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a ConcludeTransactionRequest message.
+ * @function verify
+ * @memberof vtadmin.ConcludeTransactionRequest
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ ConcludeTransactionRequest.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.cluster_id != null && message.hasOwnProperty("cluster_id"))
+ if (!$util.isString(message.cluster_id))
+ return "cluster_id: string expected";
+ if (message.dtid != null && message.hasOwnProperty("dtid"))
+ if (!$util.isString(message.dtid))
+ return "dtid: string expected";
+ return null;
+ };
+
+ /**
+ * Creates a ConcludeTransactionRequest message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof vtadmin.ConcludeTransactionRequest
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {vtadmin.ConcludeTransactionRequest} ConcludeTransactionRequest
+ */
+ ConcludeTransactionRequest.fromObject = function fromObject(object) {
+ if (object instanceof $root.vtadmin.ConcludeTransactionRequest)
+ return object;
+ let message = new $root.vtadmin.ConcludeTransactionRequest();
+ if (object.cluster_id != null)
+ message.cluster_id = String(object.cluster_id);
+ if (object.dtid != null)
+ message.dtid = String(object.dtid);
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a ConcludeTransactionRequest message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof vtadmin.ConcludeTransactionRequest
+ * @static
+ * @param {vtadmin.ConcludeTransactionRequest} message ConcludeTransactionRequest
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ ConcludeTransactionRequest.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.cluster_id = "";
+ object.dtid = "";
+ }
+ if (message.cluster_id != null && message.hasOwnProperty("cluster_id"))
+ object.cluster_id = message.cluster_id;
+ if (message.dtid != null && message.hasOwnProperty("dtid"))
+ object.dtid = message.dtid;
+ return object;
+ };
+
+ /**
+ * Converts this ConcludeTransactionRequest to JSON.
+ * @function toJSON
+ * @memberof vtadmin.ConcludeTransactionRequest
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ ConcludeTransactionRequest.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for ConcludeTransactionRequest
+ * @function getTypeUrl
+ * @memberof vtadmin.ConcludeTransactionRequest
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ ConcludeTransactionRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/vtadmin.ConcludeTransactionRequest";
+ };
+
+ return ConcludeTransactionRequest;
+ })();
+
vtadmin.CreateKeyspaceRequest = (function() {
/**
@@ -18293,6 +19327,238 @@ export const vtadmin = $root.vtadmin = (() => {
return GetTopologyPathRequest;
})();
+ vtadmin.GetTransactionInfoRequest = (function() {
+
+ /**
+ * Properties of a GetTransactionInfoRequest.
+ * @memberof vtadmin
+ * @interface IGetTransactionInfoRequest
+ * @property {string|null} [cluster_id] GetTransactionInfoRequest cluster_id
+ * @property {vtctldata.IGetTransactionInfoRequest|null} [request] GetTransactionInfoRequest request
+ */
+
+ /**
+ * Constructs a new GetTransactionInfoRequest.
+ * @memberof vtadmin
+ * @classdesc Represents a GetTransactionInfoRequest.
+ * @implements IGetTransactionInfoRequest
+ * @constructor
+ * @param {vtadmin.IGetTransactionInfoRequest=} [properties] Properties to set
+ */
+ function GetTransactionInfoRequest(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * GetTransactionInfoRequest cluster_id.
+ * @member {string} cluster_id
+ * @memberof vtadmin.GetTransactionInfoRequest
+ * @instance
+ */
+ GetTransactionInfoRequest.prototype.cluster_id = "";
+
+ /**
+ * GetTransactionInfoRequest request.
+ * @member {vtctldata.IGetTransactionInfoRequest|null|undefined} request
+ * @memberof vtadmin.GetTransactionInfoRequest
+ * @instance
+ */
+ GetTransactionInfoRequest.prototype.request = null;
+
+ /**
+ * Creates a new GetTransactionInfoRequest instance using the specified properties.
+ * @function create
+ * @memberof vtadmin.GetTransactionInfoRequest
+ * @static
+ * @param {vtadmin.IGetTransactionInfoRequest=} [properties] Properties to set
+ * @returns {vtadmin.GetTransactionInfoRequest} GetTransactionInfoRequest instance
+ */
+ GetTransactionInfoRequest.create = function create(properties) {
+ return new GetTransactionInfoRequest(properties);
+ };
+
+ /**
+ * Encodes the specified GetTransactionInfoRequest message. Does not implicitly {@link vtadmin.GetTransactionInfoRequest.verify|verify} messages.
+ * @function encode
+ * @memberof vtadmin.GetTransactionInfoRequest
+ * @static
+ * @param {vtadmin.IGetTransactionInfoRequest} message GetTransactionInfoRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ GetTransactionInfoRequest.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.cluster_id != null && Object.hasOwnProperty.call(message, "cluster_id"))
+ writer.uint32(/* id 1, wireType 2 =*/10).string(message.cluster_id);
+ if (message.request != null && Object.hasOwnProperty.call(message, "request"))
+ $root.vtctldata.GetTransactionInfoRequest.encode(message.request, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified GetTransactionInfoRequest message, length delimited. Does not implicitly {@link vtadmin.GetTransactionInfoRequest.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof vtadmin.GetTransactionInfoRequest
+ * @static
+ * @param {vtadmin.IGetTransactionInfoRequest} message GetTransactionInfoRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ GetTransactionInfoRequest.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a GetTransactionInfoRequest message from the specified reader or buffer.
+ * @function decode
+ * @memberof vtadmin.GetTransactionInfoRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {vtadmin.GetTransactionInfoRequest} GetTransactionInfoRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ GetTransactionInfoRequest.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.vtadmin.GetTransactionInfoRequest();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.cluster_id = reader.string();
+ break;
+ }
+ case 2: {
+ message.request = $root.vtctldata.GetTransactionInfoRequest.decode(reader, reader.uint32());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a GetTransactionInfoRequest message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof vtadmin.GetTransactionInfoRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {vtadmin.GetTransactionInfoRequest} GetTransactionInfoRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ GetTransactionInfoRequest.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a GetTransactionInfoRequest message.
+ * @function verify
+ * @memberof vtadmin.GetTransactionInfoRequest
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ GetTransactionInfoRequest.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.cluster_id != null && message.hasOwnProperty("cluster_id"))
+ if (!$util.isString(message.cluster_id))
+ return "cluster_id: string expected";
+ if (message.request != null && message.hasOwnProperty("request")) {
+ let error = $root.vtctldata.GetTransactionInfoRequest.verify(message.request);
+ if (error)
+ return "request." + error;
+ }
+ return null;
+ };
+
+ /**
+ * Creates a GetTransactionInfoRequest message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof vtadmin.GetTransactionInfoRequest
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {vtadmin.GetTransactionInfoRequest} GetTransactionInfoRequest
+ */
+ GetTransactionInfoRequest.fromObject = function fromObject(object) {
+ if (object instanceof $root.vtadmin.GetTransactionInfoRequest)
+ return object;
+ let message = new $root.vtadmin.GetTransactionInfoRequest();
+ if (object.cluster_id != null)
+ message.cluster_id = String(object.cluster_id);
+ if (object.request != null) {
+ if (typeof object.request !== "object")
+ throw TypeError(".vtadmin.GetTransactionInfoRequest.request: object expected");
+ message.request = $root.vtctldata.GetTransactionInfoRequest.fromObject(object.request);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a GetTransactionInfoRequest message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof vtadmin.GetTransactionInfoRequest
+ * @static
+ * @param {vtadmin.GetTransactionInfoRequest} message GetTransactionInfoRequest
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ GetTransactionInfoRequest.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.cluster_id = "";
+ object.request = null;
+ }
+ if (message.cluster_id != null && message.hasOwnProperty("cluster_id"))
+ object.cluster_id = message.cluster_id;
+ if (message.request != null && message.hasOwnProperty("request"))
+ object.request = $root.vtctldata.GetTransactionInfoRequest.toObject(message.request, options);
+ return object;
+ };
+
+ /**
+ * Converts this GetTransactionInfoRequest to JSON.
+ * @function toJSON
+ * @memberof vtadmin.GetTransactionInfoRequest
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ GetTransactionInfoRequest.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for GetTransactionInfoRequest
+ * @function getTypeUrl
+ * @memberof vtadmin.GetTransactionInfoRequest
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ GetTransactionInfoRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/vtadmin.GetTransactionInfoRequest";
+ };
+
+ return GetTransactionInfoRequest;
+ })();
+
vtadmin.GetUnresolvedTransactionsRequest = (function() {
/**
@@ -18301,6 +19567,7 @@ export const vtadmin = $root.vtadmin = (() => {
* @interface IGetUnresolvedTransactionsRequest
* @property {string|null} [cluster_id] GetUnresolvedTransactionsRequest cluster_id
* @property {string|null} [keyspace] GetUnresolvedTransactionsRequest keyspace
+ * @property {number|Long|null} [abandon_age] GetUnresolvedTransactionsRequest abandon_age
*/
/**
@@ -18334,6 +19601,14 @@ export const vtadmin = $root.vtadmin = (() => {
*/
GetUnresolvedTransactionsRequest.prototype.keyspace = "";
+ /**
+ * GetUnresolvedTransactionsRequest abandon_age.
+ * @member {number|Long} abandon_age
+ * @memberof vtadmin.GetUnresolvedTransactionsRequest
+ * @instance
+ */
+ GetUnresolvedTransactionsRequest.prototype.abandon_age = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
/**
* Creates a new GetUnresolvedTransactionsRequest instance using the specified properties.
* @function create
@@ -18362,6 +19637,8 @@ export const vtadmin = $root.vtadmin = (() => {
writer.uint32(/* id 1, wireType 2 =*/10).string(message.cluster_id);
if (message.keyspace != null && Object.hasOwnProperty.call(message, "keyspace"))
writer.uint32(/* id 2, wireType 2 =*/18).string(message.keyspace);
+ if (message.abandon_age != null && Object.hasOwnProperty.call(message, "abandon_age"))
+ writer.uint32(/* id 3, wireType 0 =*/24).int64(message.abandon_age);
return writer;
};
@@ -18404,6 +19681,10 @@ export const vtadmin = $root.vtadmin = (() => {
message.keyspace = reader.string();
break;
}
+ case 3: {
+ message.abandon_age = reader.int64();
+ break;
+ }
default:
reader.skipType(tag & 7);
break;
@@ -18445,6 +19726,9 @@ export const vtadmin = $root.vtadmin = (() => {
if (message.keyspace != null && message.hasOwnProperty("keyspace"))
if (!$util.isString(message.keyspace))
return "keyspace: string expected";
+ if (message.abandon_age != null && message.hasOwnProperty("abandon_age"))
+ if (!$util.isInteger(message.abandon_age) && !(message.abandon_age && $util.isInteger(message.abandon_age.low) && $util.isInteger(message.abandon_age.high)))
+ return "abandon_age: integer|Long expected";
return null;
};
@@ -18464,6 +19748,15 @@ export const vtadmin = $root.vtadmin = (() => {
message.cluster_id = String(object.cluster_id);
if (object.keyspace != null)
message.keyspace = String(object.keyspace);
+ if (object.abandon_age != null)
+ if ($util.Long)
+ (message.abandon_age = $util.Long.fromValue(object.abandon_age)).unsigned = false;
+ else if (typeof object.abandon_age === "string")
+ message.abandon_age = parseInt(object.abandon_age, 10);
+ else if (typeof object.abandon_age === "number")
+ message.abandon_age = object.abandon_age;
+ else if (typeof object.abandon_age === "object")
+ message.abandon_age = new $util.LongBits(object.abandon_age.low >>> 0, object.abandon_age.high >>> 0).toNumber();
return message;
};
@@ -18483,11 +19776,21 @@ export const vtadmin = $root.vtadmin = (() => {
if (options.defaults) {
object.cluster_id = "";
object.keyspace = "";
+ if ($util.Long) {
+ let long = new $util.Long(0, 0, false);
+ object.abandon_age = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+ } else
+ object.abandon_age = options.longs === String ? "0" : 0;
}
if (message.cluster_id != null && message.hasOwnProperty("cluster_id"))
object.cluster_id = message.cluster_id;
if (message.keyspace != null && message.hasOwnProperty("keyspace"))
object.keyspace = message.keyspace;
+ if (message.abandon_age != null && message.hasOwnProperty("abandon_age"))
+ if (typeof message.abandon_age === "number")
+ object.abandon_age = options.longs === String ? String(message.abandon_age) : message.abandon_age;
+ else
+ object.abandon_age = options.longs === String ? $util.Long.prototype.toString.call(message.abandon_age) : options.longs === Number ? new $util.LongBits(message.abandon_age.low >>> 0, message.abandon_age.high >>> 0).toNumber() : message.abandon_age;
return object;
};
@@ -21455,6 +22758,493 @@ export const vtadmin = $root.vtadmin = (() => {
return LaunchSchemaMigrationRequest;
})();
+ vtadmin.MaterializeCreateRequest = (function() {
+
+ /**
+ * Properties of a MaterializeCreateRequest.
+ * @memberof vtadmin
+ * @interface IMaterializeCreateRequest
+ * @property {string|null} [cluster_id] MaterializeCreateRequest cluster_id
+ * @property {string|null} [table_settings] MaterializeCreateRequest table_settings
+ * @property {vtctldata.IMaterializeCreateRequest|null} [request] MaterializeCreateRequest request
+ */
+
+ /**
+ * Constructs a new MaterializeCreateRequest.
+ * @memberof vtadmin
+ * @classdesc Represents a MaterializeCreateRequest.
+ * @implements IMaterializeCreateRequest
+ * @constructor
+ * @param {vtadmin.IMaterializeCreateRequest=} [properties] Properties to set
+ */
+ function MaterializeCreateRequest(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * MaterializeCreateRequest cluster_id.
+ * @member {string} cluster_id
+ * @memberof vtadmin.MaterializeCreateRequest
+ * @instance
+ */
+ MaterializeCreateRequest.prototype.cluster_id = "";
+
+ /**
+ * MaterializeCreateRequest table_settings.
+ * @member {string} table_settings
+ * @memberof vtadmin.MaterializeCreateRequest
+ * @instance
+ */
+ MaterializeCreateRequest.prototype.table_settings = "";
+
+ /**
+ * MaterializeCreateRequest request.
+ * @member {vtctldata.IMaterializeCreateRequest|null|undefined} request
+ * @memberof vtadmin.MaterializeCreateRequest
+ * @instance
+ */
+ MaterializeCreateRequest.prototype.request = null;
+
+ /**
+ * Creates a new MaterializeCreateRequest instance using the specified properties.
+ * @function create
+ * @memberof vtadmin.MaterializeCreateRequest
+ * @static
+ * @param {vtadmin.IMaterializeCreateRequest=} [properties] Properties to set
+ * @returns {vtadmin.MaterializeCreateRequest} MaterializeCreateRequest instance
+ */
+ MaterializeCreateRequest.create = function create(properties) {
+ return new MaterializeCreateRequest(properties);
+ };
+
+ /**
+ * Encodes the specified MaterializeCreateRequest message. Does not implicitly {@link vtadmin.MaterializeCreateRequest.verify|verify} messages.
+ * @function encode
+ * @memberof vtadmin.MaterializeCreateRequest
+ * @static
+ * @param {vtadmin.IMaterializeCreateRequest} message MaterializeCreateRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ MaterializeCreateRequest.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.cluster_id != null && Object.hasOwnProperty.call(message, "cluster_id"))
+ writer.uint32(/* id 1, wireType 2 =*/10).string(message.cluster_id);
+ if (message.table_settings != null && Object.hasOwnProperty.call(message, "table_settings"))
+ writer.uint32(/* id 2, wireType 2 =*/18).string(message.table_settings);
+ if (message.request != null && Object.hasOwnProperty.call(message, "request"))
+ $root.vtctldata.MaterializeCreateRequest.encode(message.request, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified MaterializeCreateRequest message, length delimited. Does not implicitly {@link vtadmin.MaterializeCreateRequest.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof vtadmin.MaterializeCreateRequest
+ * @static
+ * @param {vtadmin.IMaterializeCreateRequest} message MaterializeCreateRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ MaterializeCreateRequest.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a MaterializeCreateRequest message from the specified reader or buffer.
+ * @function decode
+ * @memberof vtadmin.MaterializeCreateRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {vtadmin.MaterializeCreateRequest} MaterializeCreateRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ MaterializeCreateRequest.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.vtadmin.MaterializeCreateRequest();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.cluster_id = reader.string();
+ break;
+ }
+ case 2: {
+ message.table_settings = reader.string();
+ break;
+ }
+ case 3: {
+ message.request = $root.vtctldata.MaterializeCreateRequest.decode(reader, reader.uint32());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a MaterializeCreateRequest message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof vtadmin.MaterializeCreateRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {vtadmin.MaterializeCreateRequest} MaterializeCreateRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ MaterializeCreateRequest.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a MaterializeCreateRequest message.
+ * @function verify
+ * @memberof vtadmin.MaterializeCreateRequest
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ MaterializeCreateRequest.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.cluster_id != null && message.hasOwnProperty("cluster_id"))
+ if (!$util.isString(message.cluster_id))
+ return "cluster_id: string expected";
+ if (message.table_settings != null && message.hasOwnProperty("table_settings"))
+ if (!$util.isString(message.table_settings))
+ return "table_settings: string expected";
+ if (message.request != null && message.hasOwnProperty("request")) {
+ let error = $root.vtctldata.MaterializeCreateRequest.verify(message.request);
+ if (error)
+ return "request." + error;
+ }
+ return null;
+ };
+
+ /**
+ * Creates a MaterializeCreateRequest message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof vtadmin.MaterializeCreateRequest
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {vtadmin.MaterializeCreateRequest} MaterializeCreateRequest
+ */
+ MaterializeCreateRequest.fromObject = function fromObject(object) {
+ if (object instanceof $root.vtadmin.MaterializeCreateRequest)
+ return object;
+ let message = new $root.vtadmin.MaterializeCreateRequest();
+ if (object.cluster_id != null)
+ message.cluster_id = String(object.cluster_id);
+ if (object.table_settings != null)
+ message.table_settings = String(object.table_settings);
+ if (object.request != null) {
+ if (typeof object.request !== "object")
+ throw TypeError(".vtadmin.MaterializeCreateRequest.request: object expected");
+ message.request = $root.vtctldata.MaterializeCreateRequest.fromObject(object.request);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a MaterializeCreateRequest message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof vtadmin.MaterializeCreateRequest
+ * @static
+ * @param {vtadmin.MaterializeCreateRequest} message MaterializeCreateRequest
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ MaterializeCreateRequest.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.cluster_id = "";
+ object.table_settings = "";
+ object.request = null;
+ }
+ if (message.cluster_id != null && message.hasOwnProperty("cluster_id"))
+ object.cluster_id = message.cluster_id;
+ if (message.table_settings != null && message.hasOwnProperty("table_settings"))
+ object.table_settings = message.table_settings;
+ if (message.request != null && message.hasOwnProperty("request"))
+ object.request = $root.vtctldata.MaterializeCreateRequest.toObject(message.request, options);
+ return object;
+ };
+
+ /**
+ * Converts this MaterializeCreateRequest to JSON.
+ * @function toJSON
+ * @memberof vtadmin.MaterializeCreateRequest
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ MaterializeCreateRequest.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for MaterializeCreateRequest
+ * @function getTypeUrl
+ * @memberof vtadmin.MaterializeCreateRequest
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ MaterializeCreateRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/vtadmin.MaterializeCreateRequest";
+ };
+
+ return MaterializeCreateRequest;
+ })();
+
+ vtadmin.MoveTablesCompleteRequest = (function() {
+
+ /**
+ * Properties of a MoveTablesCompleteRequest.
+ * @memberof vtadmin
+ * @interface IMoveTablesCompleteRequest
+ * @property {string|null} [cluster_id] MoveTablesCompleteRequest cluster_id
+ * @property {vtctldata.IMoveTablesCompleteRequest|null} [request] MoveTablesCompleteRequest request
+ */
+
+ /**
+ * Constructs a new MoveTablesCompleteRequest.
+ * @memberof vtadmin
+ * @classdesc Represents a MoveTablesCompleteRequest.
+ * @implements IMoveTablesCompleteRequest
+ * @constructor
+ * @param {vtadmin.IMoveTablesCompleteRequest=} [properties] Properties to set
+ */
+ function MoveTablesCompleteRequest(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * MoveTablesCompleteRequest cluster_id.
+ * @member {string} cluster_id
+ * @memberof vtadmin.MoveTablesCompleteRequest
+ * @instance
+ */
+ MoveTablesCompleteRequest.prototype.cluster_id = "";
+
+ /**
+ * MoveTablesCompleteRequest request.
+ * @member {vtctldata.IMoveTablesCompleteRequest|null|undefined} request
+ * @memberof vtadmin.MoveTablesCompleteRequest
+ * @instance
+ */
+ MoveTablesCompleteRequest.prototype.request = null;
+
+ /**
+ * Creates a new MoveTablesCompleteRequest instance using the specified properties.
+ * @function create
+ * @memberof vtadmin.MoveTablesCompleteRequest
+ * @static
+ * @param {vtadmin.IMoveTablesCompleteRequest=} [properties] Properties to set
+ * @returns {vtadmin.MoveTablesCompleteRequest} MoveTablesCompleteRequest instance
+ */
+ MoveTablesCompleteRequest.create = function create(properties) {
+ return new MoveTablesCompleteRequest(properties);
+ };
+
+ /**
+ * Encodes the specified MoveTablesCompleteRequest message. Does not implicitly {@link vtadmin.MoveTablesCompleteRequest.verify|verify} messages.
+ * @function encode
+ * @memberof vtadmin.MoveTablesCompleteRequest
+ * @static
+ * @param {vtadmin.IMoveTablesCompleteRequest} message MoveTablesCompleteRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ MoveTablesCompleteRequest.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.cluster_id != null && Object.hasOwnProperty.call(message, "cluster_id"))
+ writer.uint32(/* id 1, wireType 2 =*/10).string(message.cluster_id);
+ if (message.request != null && Object.hasOwnProperty.call(message, "request"))
+ $root.vtctldata.MoveTablesCompleteRequest.encode(message.request, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified MoveTablesCompleteRequest message, length delimited. Does not implicitly {@link vtadmin.MoveTablesCompleteRequest.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof vtadmin.MoveTablesCompleteRequest
+ * @static
+ * @param {vtadmin.IMoveTablesCompleteRequest} message MoveTablesCompleteRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ MoveTablesCompleteRequest.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a MoveTablesCompleteRequest message from the specified reader or buffer.
+ * @function decode
+ * @memberof vtadmin.MoveTablesCompleteRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {vtadmin.MoveTablesCompleteRequest} MoveTablesCompleteRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ MoveTablesCompleteRequest.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.vtadmin.MoveTablesCompleteRequest();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.cluster_id = reader.string();
+ break;
+ }
+ case 2: {
+ message.request = $root.vtctldata.MoveTablesCompleteRequest.decode(reader, reader.uint32());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a MoveTablesCompleteRequest message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof vtadmin.MoveTablesCompleteRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {vtadmin.MoveTablesCompleteRequest} MoveTablesCompleteRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ MoveTablesCompleteRequest.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a MoveTablesCompleteRequest message.
+ * @function verify
+ * @memberof vtadmin.MoveTablesCompleteRequest
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ MoveTablesCompleteRequest.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.cluster_id != null && message.hasOwnProperty("cluster_id"))
+ if (!$util.isString(message.cluster_id))
+ return "cluster_id: string expected";
+ if (message.request != null && message.hasOwnProperty("request")) {
+ let error = $root.vtctldata.MoveTablesCompleteRequest.verify(message.request);
+ if (error)
+ return "request." + error;
+ }
+ return null;
+ };
+
+ /**
+ * Creates a MoveTablesCompleteRequest message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof vtadmin.MoveTablesCompleteRequest
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {vtadmin.MoveTablesCompleteRequest} MoveTablesCompleteRequest
+ */
+ MoveTablesCompleteRequest.fromObject = function fromObject(object) {
+ if (object instanceof $root.vtadmin.MoveTablesCompleteRequest)
+ return object;
+ let message = new $root.vtadmin.MoveTablesCompleteRequest();
+ if (object.cluster_id != null)
+ message.cluster_id = String(object.cluster_id);
+ if (object.request != null) {
+ if (typeof object.request !== "object")
+ throw TypeError(".vtadmin.MoveTablesCompleteRequest.request: object expected");
+ message.request = $root.vtctldata.MoveTablesCompleteRequest.fromObject(object.request);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a MoveTablesCompleteRequest message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof vtadmin.MoveTablesCompleteRequest
+ * @static
+ * @param {vtadmin.MoveTablesCompleteRequest} message MoveTablesCompleteRequest
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ MoveTablesCompleteRequest.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.cluster_id = "";
+ object.request = null;
+ }
+ if (message.cluster_id != null && message.hasOwnProperty("cluster_id"))
+ object.cluster_id = message.cluster_id;
+ if (message.request != null && message.hasOwnProperty("request"))
+ object.request = $root.vtctldata.MoveTablesCompleteRequest.toObject(message.request, options);
+ return object;
+ };
+
+ /**
+ * Converts this MoveTablesCompleteRequest to JSON.
+ * @function toJSON
+ * @memberof vtadmin.MoveTablesCompleteRequest
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ MoveTablesCompleteRequest.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for MoveTablesCompleteRequest
+ * @function getTypeUrl
+ * @memberof vtadmin.MoveTablesCompleteRequest
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ MoveTablesCompleteRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/vtadmin.MoveTablesCompleteRequest";
+ };
+
+ return MoveTablesCompleteRequest;
+ })();
+
vtadmin.MoveTablesCreateRequest = (function() {
/**
@@ -27449,6 +29239,238 @@ export const vtadmin = $root.vtadmin = (() => {
return RunHealthCheckResponse;
})();
+ vtadmin.ReshardCreateRequest = (function() {
+
+ /**
+ * Properties of a ReshardCreateRequest.
+ * @memberof vtadmin
+ * @interface IReshardCreateRequest
+ * @property {string|null} [cluster_id] ReshardCreateRequest cluster_id
+ * @property {vtctldata.IReshardCreateRequest|null} [request] ReshardCreateRequest request
+ */
+
+ /**
+ * Constructs a new ReshardCreateRequest.
+ * @memberof vtadmin
+ * @classdesc Represents a ReshardCreateRequest.
+ * @implements IReshardCreateRequest
+ * @constructor
+ * @param {vtadmin.IReshardCreateRequest=} [properties] Properties to set
+ */
+ function ReshardCreateRequest(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * ReshardCreateRequest cluster_id.
+ * @member {string} cluster_id
+ * @memberof vtadmin.ReshardCreateRequest
+ * @instance
+ */
+ ReshardCreateRequest.prototype.cluster_id = "";
+
+ /**
+ * ReshardCreateRequest request.
+ * @member {vtctldata.IReshardCreateRequest|null|undefined} request
+ * @memberof vtadmin.ReshardCreateRequest
+ * @instance
+ */
+ ReshardCreateRequest.prototype.request = null;
+
+ /**
+ * Creates a new ReshardCreateRequest instance using the specified properties.
+ * @function create
+ * @memberof vtadmin.ReshardCreateRequest
+ * @static
+ * @param {vtadmin.IReshardCreateRequest=} [properties] Properties to set
+ * @returns {vtadmin.ReshardCreateRequest} ReshardCreateRequest instance
+ */
+ ReshardCreateRequest.create = function create(properties) {
+ return new ReshardCreateRequest(properties);
+ };
+
+ /**
+ * Encodes the specified ReshardCreateRequest message. Does not implicitly {@link vtadmin.ReshardCreateRequest.verify|verify} messages.
+ * @function encode
+ * @memberof vtadmin.ReshardCreateRequest
+ * @static
+ * @param {vtadmin.IReshardCreateRequest} message ReshardCreateRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ ReshardCreateRequest.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.cluster_id != null && Object.hasOwnProperty.call(message, "cluster_id"))
+ writer.uint32(/* id 1, wireType 2 =*/10).string(message.cluster_id);
+ if (message.request != null && Object.hasOwnProperty.call(message, "request"))
+ $root.vtctldata.ReshardCreateRequest.encode(message.request, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified ReshardCreateRequest message, length delimited. Does not implicitly {@link vtadmin.ReshardCreateRequest.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof vtadmin.ReshardCreateRequest
+ * @static
+ * @param {vtadmin.IReshardCreateRequest} message ReshardCreateRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ ReshardCreateRequest.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a ReshardCreateRequest message from the specified reader or buffer.
+ * @function decode
+ * @memberof vtadmin.ReshardCreateRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {vtadmin.ReshardCreateRequest} ReshardCreateRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ ReshardCreateRequest.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.vtadmin.ReshardCreateRequest();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.cluster_id = reader.string();
+ break;
+ }
+ case 2: {
+ message.request = $root.vtctldata.ReshardCreateRequest.decode(reader, reader.uint32());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a ReshardCreateRequest message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof vtadmin.ReshardCreateRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {vtadmin.ReshardCreateRequest} ReshardCreateRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ ReshardCreateRequest.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a ReshardCreateRequest message.
+ * @function verify
+ * @memberof vtadmin.ReshardCreateRequest
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ ReshardCreateRequest.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.cluster_id != null && message.hasOwnProperty("cluster_id"))
+ if (!$util.isString(message.cluster_id))
+ return "cluster_id: string expected";
+ if (message.request != null && message.hasOwnProperty("request")) {
+ let error = $root.vtctldata.ReshardCreateRequest.verify(message.request);
+ if (error)
+ return "request." + error;
+ }
+ return null;
+ };
+
+ /**
+ * Creates a ReshardCreateRequest message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof vtadmin.ReshardCreateRequest
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {vtadmin.ReshardCreateRequest} ReshardCreateRequest
+ */
+ ReshardCreateRequest.fromObject = function fromObject(object) {
+ if (object instanceof $root.vtadmin.ReshardCreateRequest)
+ return object;
+ let message = new $root.vtadmin.ReshardCreateRequest();
+ if (object.cluster_id != null)
+ message.cluster_id = String(object.cluster_id);
+ if (object.request != null) {
+ if (typeof object.request !== "object")
+ throw TypeError(".vtadmin.ReshardCreateRequest.request: object expected");
+ message.request = $root.vtctldata.ReshardCreateRequest.fromObject(object.request);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a ReshardCreateRequest message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof vtadmin.ReshardCreateRequest
+ * @static
+ * @param {vtadmin.ReshardCreateRequest} message ReshardCreateRequest
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ ReshardCreateRequest.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.cluster_id = "";
+ object.request = null;
+ }
+ if (message.cluster_id != null && message.hasOwnProperty("cluster_id"))
+ object.cluster_id = message.cluster_id;
+ if (message.request != null && message.hasOwnProperty("request"))
+ object.request = $root.vtctldata.ReshardCreateRequest.toObject(message.request, options);
+ return object;
+ };
+
+ /**
+ * Converts this ReshardCreateRequest to JSON.
+ * @function toJSON
+ * @memberof vtadmin.ReshardCreateRequest
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ ReshardCreateRequest.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for ReshardCreateRequest
+ * @function getTypeUrl
+ * @memberof vtadmin.ReshardCreateRequest
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ ReshardCreateRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/vtadmin.ReshardCreateRequest";
+ };
+
+ return ReshardCreateRequest;
+ })();
+
vtadmin.SetReadOnlyRequest = (function() {
/**
@@ -31516,6 +33538,1280 @@ export const vtadmin = $root.vtadmin = (() => {
return ValidateVersionShardRequest;
})();
+ vtadmin.VDiffCreateRequest = (function() {
+
+ /**
+ * Properties of a VDiffCreateRequest.
+ * @memberof vtadmin
+ * @interface IVDiffCreateRequest
+ * @property {string|null} [cluster_id] VDiffCreateRequest cluster_id
+ * @property {vtctldata.IVDiffCreateRequest|null} [request] VDiffCreateRequest request
+ */
+
+ /**
+ * Constructs a new VDiffCreateRequest.
+ * @memberof vtadmin
+ * @classdesc Represents a VDiffCreateRequest.
+ * @implements IVDiffCreateRequest
+ * @constructor
+ * @param {vtadmin.IVDiffCreateRequest=} [properties] Properties to set
+ */
+ function VDiffCreateRequest(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * VDiffCreateRequest cluster_id.
+ * @member {string} cluster_id
+ * @memberof vtadmin.VDiffCreateRequest
+ * @instance
+ */
+ VDiffCreateRequest.prototype.cluster_id = "";
+
+ /**
+ * VDiffCreateRequest request.
+ * @member {vtctldata.IVDiffCreateRequest|null|undefined} request
+ * @memberof vtadmin.VDiffCreateRequest
+ * @instance
+ */
+ VDiffCreateRequest.prototype.request = null;
+
+ /**
+ * Creates a new VDiffCreateRequest instance using the specified properties.
+ * @function create
+ * @memberof vtadmin.VDiffCreateRequest
+ * @static
+ * @param {vtadmin.IVDiffCreateRequest=} [properties] Properties to set
+ * @returns {vtadmin.VDiffCreateRequest} VDiffCreateRequest instance
+ */
+ VDiffCreateRequest.create = function create(properties) {
+ return new VDiffCreateRequest(properties);
+ };
+
+ /**
+ * Encodes the specified VDiffCreateRequest message. Does not implicitly {@link vtadmin.VDiffCreateRequest.verify|verify} messages.
+ * @function encode
+ * @memberof vtadmin.VDiffCreateRequest
+ * @static
+ * @param {vtadmin.IVDiffCreateRequest} message VDiffCreateRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ VDiffCreateRequest.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.cluster_id != null && Object.hasOwnProperty.call(message, "cluster_id"))
+ writer.uint32(/* id 1, wireType 2 =*/10).string(message.cluster_id);
+ if (message.request != null && Object.hasOwnProperty.call(message, "request"))
+ $root.vtctldata.VDiffCreateRequest.encode(message.request, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified VDiffCreateRequest message, length delimited. Does not implicitly {@link vtadmin.VDiffCreateRequest.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof vtadmin.VDiffCreateRequest
+ * @static
+ * @param {vtadmin.IVDiffCreateRequest} message VDiffCreateRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ VDiffCreateRequest.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a VDiffCreateRequest message from the specified reader or buffer.
+ * @function decode
+ * @memberof vtadmin.VDiffCreateRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {vtadmin.VDiffCreateRequest} VDiffCreateRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ VDiffCreateRequest.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.vtadmin.VDiffCreateRequest();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.cluster_id = reader.string();
+ break;
+ }
+ case 2: {
+ message.request = $root.vtctldata.VDiffCreateRequest.decode(reader, reader.uint32());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a VDiffCreateRequest message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof vtadmin.VDiffCreateRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {vtadmin.VDiffCreateRequest} VDiffCreateRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ VDiffCreateRequest.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a VDiffCreateRequest message.
+ * @function verify
+ * @memberof vtadmin.VDiffCreateRequest
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ VDiffCreateRequest.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.cluster_id != null && message.hasOwnProperty("cluster_id"))
+ if (!$util.isString(message.cluster_id))
+ return "cluster_id: string expected";
+ if (message.request != null && message.hasOwnProperty("request")) {
+ let error = $root.vtctldata.VDiffCreateRequest.verify(message.request);
+ if (error)
+ return "request." + error;
+ }
+ return null;
+ };
+
+ /**
+ * Creates a VDiffCreateRequest message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof vtadmin.VDiffCreateRequest
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {vtadmin.VDiffCreateRequest} VDiffCreateRequest
+ */
+ VDiffCreateRequest.fromObject = function fromObject(object) {
+ if (object instanceof $root.vtadmin.VDiffCreateRequest)
+ return object;
+ let message = new $root.vtadmin.VDiffCreateRequest();
+ if (object.cluster_id != null)
+ message.cluster_id = String(object.cluster_id);
+ if (object.request != null) {
+ if (typeof object.request !== "object")
+ throw TypeError(".vtadmin.VDiffCreateRequest.request: object expected");
+ message.request = $root.vtctldata.VDiffCreateRequest.fromObject(object.request);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a VDiffCreateRequest message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof vtadmin.VDiffCreateRequest
+ * @static
+ * @param {vtadmin.VDiffCreateRequest} message VDiffCreateRequest
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ VDiffCreateRequest.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.cluster_id = "";
+ object.request = null;
+ }
+ if (message.cluster_id != null && message.hasOwnProperty("cluster_id"))
+ object.cluster_id = message.cluster_id;
+ if (message.request != null && message.hasOwnProperty("request"))
+ object.request = $root.vtctldata.VDiffCreateRequest.toObject(message.request, options);
+ return object;
+ };
+
+ /**
+ * Converts this VDiffCreateRequest to JSON.
+ * @function toJSON
+ * @memberof vtadmin.VDiffCreateRequest
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ VDiffCreateRequest.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for VDiffCreateRequest
+ * @function getTypeUrl
+ * @memberof vtadmin.VDiffCreateRequest
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ VDiffCreateRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/vtadmin.VDiffCreateRequest";
+ };
+
+ return VDiffCreateRequest;
+ })();
+
+ vtadmin.VDiffShowRequest = (function() {
+
+ /**
+ * Properties of a VDiffShowRequest.
+ * @memberof vtadmin
+ * @interface IVDiffShowRequest
+ * @property {string|null} [cluster_id] VDiffShowRequest cluster_id
+ * @property {vtctldata.IVDiffShowRequest|null} [request] VDiffShowRequest request
+ */
+
+ /**
+ * Constructs a new VDiffShowRequest.
+ * @memberof vtadmin
+ * @classdesc Represents a VDiffShowRequest.
+ * @implements IVDiffShowRequest
+ * @constructor
+ * @param {vtadmin.IVDiffShowRequest=} [properties] Properties to set
+ */
+ function VDiffShowRequest(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * VDiffShowRequest cluster_id.
+ * @member {string} cluster_id
+ * @memberof vtadmin.VDiffShowRequest
+ * @instance
+ */
+ VDiffShowRequest.prototype.cluster_id = "";
+
+ /**
+ * VDiffShowRequest request.
+ * @member {vtctldata.IVDiffShowRequest|null|undefined} request
+ * @memberof vtadmin.VDiffShowRequest
+ * @instance
+ */
+ VDiffShowRequest.prototype.request = null;
+
+ /**
+ * Creates a new VDiffShowRequest instance using the specified properties.
+ * @function create
+ * @memberof vtadmin.VDiffShowRequest
+ * @static
+ * @param {vtadmin.IVDiffShowRequest=} [properties] Properties to set
+ * @returns {vtadmin.VDiffShowRequest} VDiffShowRequest instance
+ */
+ VDiffShowRequest.create = function create(properties) {
+ return new VDiffShowRequest(properties);
+ };
+
+ /**
+ * Encodes the specified VDiffShowRequest message. Does not implicitly {@link vtadmin.VDiffShowRequest.verify|verify} messages.
+ * @function encode
+ * @memberof vtadmin.VDiffShowRequest
+ * @static
+ * @param {vtadmin.IVDiffShowRequest} message VDiffShowRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ VDiffShowRequest.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.cluster_id != null && Object.hasOwnProperty.call(message, "cluster_id"))
+ writer.uint32(/* id 1, wireType 2 =*/10).string(message.cluster_id);
+ if (message.request != null && Object.hasOwnProperty.call(message, "request"))
+ $root.vtctldata.VDiffShowRequest.encode(message.request, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified VDiffShowRequest message, length delimited. Does not implicitly {@link vtadmin.VDiffShowRequest.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof vtadmin.VDiffShowRequest
+ * @static
+ * @param {vtadmin.IVDiffShowRequest} message VDiffShowRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ VDiffShowRequest.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a VDiffShowRequest message from the specified reader or buffer.
+ * @function decode
+ * @memberof vtadmin.VDiffShowRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {vtadmin.VDiffShowRequest} VDiffShowRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ VDiffShowRequest.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.vtadmin.VDiffShowRequest();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.cluster_id = reader.string();
+ break;
+ }
+ case 2: {
+ message.request = $root.vtctldata.VDiffShowRequest.decode(reader, reader.uint32());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a VDiffShowRequest message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof vtadmin.VDiffShowRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {vtadmin.VDiffShowRequest} VDiffShowRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ VDiffShowRequest.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a VDiffShowRequest message.
+ * @function verify
+ * @memberof vtadmin.VDiffShowRequest
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ VDiffShowRequest.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.cluster_id != null && message.hasOwnProperty("cluster_id"))
+ if (!$util.isString(message.cluster_id))
+ return "cluster_id: string expected";
+ if (message.request != null && message.hasOwnProperty("request")) {
+ let error = $root.vtctldata.VDiffShowRequest.verify(message.request);
+ if (error)
+ return "request." + error;
+ }
+ return null;
+ };
+
+ /**
+ * Creates a VDiffShowRequest message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof vtadmin.VDiffShowRequest
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {vtadmin.VDiffShowRequest} VDiffShowRequest
+ */
+ VDiffShowRequest.fromObject = function fromObject(object) {
+ if (object instanceof $root.vtadmin.VDiffShowRequest)
+ return object;
+ let message = new $root.vtadmin.VDiffShowRequest();
+ if (object.cluster_id != null)
+ message.cluster_id = String(object.cluster_id);
+ if (object.request != null) {
+ if (typeof object.request !== "object")
+ throw TypeError(".vtadmin.VDiffShowRequest.request: object expected");
+ message.request = $root.vtctldata.VDiffShowRequest.fromObject(object.request);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a VDiffShowRequest message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof vtadmin.VDiffShowRequest
+ * @static
+ * @param {vtadmin.VDiffShowRequest} message VDiffShowRequest
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ VDiffShowRequest.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.cluster_id = "";
+ object.request = null;
+ }
+ if (message.cluster_id != null && message.hasOwnProperty("cluster_id"))
+ object.cluster_id = message.cluster_id;
+ if (message.request != null && message.hasOwnProperty("request"))
+ object.request = $root.vtctldata.VDiffShowRequest.toObject(message.request, options);
+ return object;
+ };
+
+ /**
+ * Converts this VDiffShowRequest to JSON.
+ * @function toJSON
+ * @memberof vtadmin.VDiffShowRequest
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ VDiffShowRequest.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for VDiffShowRequest
+ * @function getTypeUrl
+ * @memberof vtadmin.VDiffShowRequest
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ VDiffShowRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/vtadmin.VDiffShowRequest";
+ };
+
+ return VDiffShowRequest;
+ })();
+
+ vtadmin.VDiffProgress = (function() {
+
+ /**
+ * Properties of a VDiffProgress.
+ * @memberof vtadmin
+ * @interface IVDiffProgress
+ * @property {number|null} [percentage] VDiffProgress percentage
+ * @property {string|null} [eta] VDiffProgress eta
+ */
+
+ /**
+ * Constructs a new VDiffProgress.
+ * @memberof vtadmin
+ * @classdesc Represents a VDiffProgress.
+ * @implements IVDiffProgress
+ * @constructor
+ * @param {vtadmin.IVDiffProgress=} [properties] Properties to set
+ */
+ function VDiffProgress(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * VDiffProgress percentage.
+ * @member {number} percentage
+ * @memberof vtadmin.VDiffProgress
+ * @instance
+ */
+ VDiffProgress.prototype.percentage = 0;
+
+ /**
+ * VDiffProgress eta.
+ * @member {string} eta
+ * @memberof vtadmin.VDiffProgress
+ * @instance
+ */
+ VDiffProgress.prototype.eta = "";
+
+ /**
+ * Creates a new VDiffProgress instance using the specified properties.
+ * @function create
+ * @memberof vtadmin.VDiffProgress
+ * @static
+ * @param {vtadmin.IVDiffProgress=} [properties] Properties to set
+ * @returns {vtadmin.VDiffProgress} VDiffProgress instance
+ */
+ VDiffProgress.create = function create(properties) {
+ return new VDiffProgress(properties);
+ };
+
+ /**
+ * Encodes the specified VDiffProgress message. Does not implicitly {@link vtadmin.VDiffProgress.verify|verify} messages.
+ * @function encode
+ * @memberof vtadmin.VDiffProgress
+ * @static
+ * @param {vtadmin.IVDiffProgress} message VDiffProgress message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ VDiffProgress.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.percentage != null && Object.hasOwnProperty.call(message, "percentage"))
+ writer.uint32(/* id 1, wireType 1 =*/9).double(message.percentage);
+ if (message.eta != null && Object.hasOwnProperty.call(message, "eta"))
+ writer.uint32(/* id 2, wireType 2 =*/18).string(message.eta);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified VDiffProgress message, length delimited. Does not implicitly {@link vtadmin.VDiffProgress.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof vtadmin.VDiffProgress
+ * @static
+ * @param {vtadmin.IVDiffProgress} message VDiffProgress message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ VDiffProgress.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a VDiffProgress message from the specified reader or buffer.
+ * @function decode
+ * @memberof vtadmin.VDiffProgress
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {vtadmin.VDiffProgress} VDiffProgress
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ VDiffProgress.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.vtadmin.VDiffProgress();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.percentage = reader.double();
+ break;
+ }
+ case 2: {
+ message.eta = reader.string();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a VDiffProgress message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof vtadmin.VDiffProgress
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {vtadmin.VDiffProgress} VDiffProgress
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ VDiffProgress.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a VDiffProgress message.
+ * @function verify
+ * @memberof vtadmin.VDiffProgress
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ VDiffProgress.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.percentage != null && message.hasOwnProperty("percentage"))
+ if (typeof message.percentage !== "number")
+ return "percentage: number expected";
+ if (message.eta != null && message.hasOwnProperty("eta"))
+ if (!$util.isString(message.eta))
+ return "eta: string expected";
+ return null;
+ };
+
+ /**
+ * Creates a VDiffProgress message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof vtadmin.VDiffProgress
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {vtadmin.VDiffProgress} VDiffProgress
+ */
+ VDiffProgress.fromObject = function fromObject(object) {
+ if (object instanceof $root.vtadmin.VDiffProgress)
+ return object;
+ let message = new $root.vtadmin.VDiffProgress();
+ if (object.percentage != null)
+ message.percentage = Number(object.percentage);
+ if (object.eta != null)
+ message.eta = String(object.eta);
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a VDiffProgress message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof vtadmin.VDiffProgress
+ * @static
+ * @param {vtadmin.VDiffProgress} message VDiffProgress
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ VDiffProgress.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.percentage = 0;
+ object.eta = "";
+ }
+ if (message.percentage != null && message.hasOwnProperty("percentage"))
+ object.percentage = options.json && !isFinite(message.percentage) ? String(message.percentage) : message.percentage;
+ if (message.eta != null && message.hasOwnProperty("eta"))
+ object.eta = message.eta;
+ return object;
+ };
+
+ /**
+ * Converts this VDiffProgress to JSON.
+ * @function toJSON
+ * @memberof vtadmin.VDiffProgress
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ VDiffProgress.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for VDiffProgress
+ * @function getTypeUrl
+ * @memberof vtadmin.VDiffProgress
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ VDiffProgress.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/vtadmin.VDiffProgress";
+ };
+
+ return VDiffProgress;
+ })();
+
+ vtadmin.VDiffShardReport = (function() {
+
+ /**
+ * Properties of a VDiffShardReport.
+ * @memberof vtadmin
+ * @interface IVDiffShardReport
+ * @property {string|null} [state] VDiffShardReport state
+ * @property {number|Long|null} [rows_compared] VDiffShardReport rows_compared
+ * @property {boolean|null} [has_mismatch] VDiffShardReport has_mismatch
+ * @property {string|null} [started_at] VDiffShardReport started_at
+ * @property {string|null} [completed_at] VDiffShardReport completed_at
+ * @property {vtadmin.IVDiffProgress|null} [progress] VDiffShardReport progress
+ */
+
+ /**
+ * Constructs a new VDiffShardReport.
+ * @memberof vtadmin
+ * @classdesc Represents a VDiffShardReport.
+ * @implements IVDiffShardReport
+ * @constructor
+ * @param {vtadmin.IVDiffShardReport=} [properties] Properties to set
+ */
+ function VDiffShardReport(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * VDiffShardReport state.
+ * @member {string} state
+ * @memberof vtadmin.VDiffShardReport
+ * @instance
+ */
+ VDiffShardReport.prototype.state = "";
+
+ /**
+ * VDiffShardReport rows_compared.
+ * @member {number|Long} rows_compared
+ * @memberof vtadmin.VDiffShardReport
+ * @instance
+ */
+ VDiffShardReport.prototype.rows_compared = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+ /**
+ * VDiffShardReport has_mismatch.
+ * @member {boolean} has_mismatch
+ * @memberof vtadmin.VDiffShardReport
+ * @instance
+ */
+ VDiffShardReport.prototype.has_mismatch = false;
+
+ /**
+ * VDiffShardReport started_at.
+ * @member {string} started_at
+ * @memberof vtadmin.VDiffShardReport
+ * @instance
+ */
+ VDiffShardReport.prototype.started_at = "";
+
+ /**
+ * VDiffShardReport completed_at.
+ * @member {string} completed_at
+ * @memberof vtadmin.VDiffShardReport
+ * @instance
+ */
+ VDiffShardReport.prototype.completed_at = "";
+
+ /**
+ * VDiffShardReport progress.
+ * @member {vtadmin.IVDiffProgress|null|undefined} progress
+ * @memberof vtadmin.VDiffShardReport
+ * @instance
+ */
+ VDiffShardReport.prototype.progress = null;
+
+ /**
+ * Creates a new VDiffShardReport instance using the specified properties.
+ * @function create
+ * @memberof vtadmin.VDiffShardReport
+ * @static
+ * @param {vtadmin.IVDiffShardReport=} [properties] Properties to set
+ * @returns {vtadmin.VDiffShardReport} VDiffShardReport instance
+ */
+ VDiffShardReport.create = function create(properties) {
+ return new VDiffShardReport(properties);
+ };
+
+ /**
+ * Encodes the specified VDiffShardReport message. Does not implicitly {@link vtadmin.VDiffShardReport.verify|verify} messages.
+ * @function encode
+ * @memberof vtadmin.VDiffShardReport
+ * @static
+ * @param {vtadmin.IVDiffShardReport} message VDiffShardReport message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ VDiffShardReport.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.state != null && Object.hasOwnProperty.call(message, "state"))
+ writer.uint32(/* id 1, wireType 2 =*/10).string(message.state);
+ if (message.rows_compared != null && Object.hasOwnProperty.call(message, "rows_compared"))
+ writer.uint32(/* id 2, wireType 0 =*/16).int64(message.rows_compared);
+ if (message.has_mismatch != null && Object.hasOwnProperty.call(message, "has_mismatch"))
+ writer.uint32(/* id 3, wireType 0 =*/24).bool(message.has_mismatch);
+ if (message.started_at != null && Object.hasOwnProperty.call(message, "started_at"))
+ writer.uint32(/* id 4, wireType 2 =*/34).string(message.started_at);
+ if (message.completed_at != null && Object.hasOwnProperty.call(message, "completed_at"))
+ writer.uint32(/* id 5, wireType 2 =*/42).string(message.completed_at);
+ if (message.progress != null && Object.hasOwnProperty.call(message, "progress"))
+ $root.vtadmin.VDiffProgress.encode(message.progress, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified VDiffShardReport message, length delimited. Does not implicitly {@link vtadmin.VDiffShardReport.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof vtadmin.VDiffShardReport
+ * @static
+ * @param {vtadmin.IVDiffShardReport} message VDiffShardReport message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ VDiffShardReport.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a VDiffShardReport message from the specified reader or buffer.
+ * @function decode
+ * @memberof vtadmin.VDiffShardReport
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {vtadmin.VDiffShardReport} VDiffShardReport
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ VDiffShardReport.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.vtadmin.VDiffShardReport();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.state = reader.string();
+ break;
+ }
+ case 2: {
+ message.rows_compared = reader.int64();
+ break;
+ }
+ case 3: {
+ message.has_mismatch = reader.bool();
+ break;
+ }
+ case 4: {
+ message.started_at = reader.string();
+ break;
+ }
+ case 5: {
+ message.completed_at = reader.string();
+ break;
+ }
+ case 6: {
+ message.progress = $root.vtadmin.VDiffProgress.decode(reader, reader.uint32());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a VDiffShardReport message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof vtadmin.VDiffShardReport
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {vtadmin.VDiffShardReport} VDiffShardReport
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ VDiffShardReport.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a VDiffShardReport message.
+ * @function verify
+ * @memberof vtadmin.VDiffShardReport
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ VDiffShardReport.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.state != null && message.hasOwnProperty("state"))
+ if (!$util.isString(message.state))
+ return "state: string expected";
+ if (message.rows_compared != null && message.hasOwnProperty("rows_compared"))
+ if (!$util.isInteger(message.rows_compared) && !(message.rows_compared && $util.isInteger(message.rows_compared.low) && $util.isInteger(message.rows_compared.high)))
+ return "rows_compared: integer|Long expected";
+ if (message.has_mismatch != null && message.hasOwnProperty("has_mismatch"))
+ if (typeof message.has_mismatch !== "boolean")
+ return "has_mismatch: boolean expected";
+ if (message.started_at != null && message.hasOwnProperty("started_at"))
+ if (!$util.isString(message.started_at))
+ return "started_at: string expected";
+ if (message.completed_at != null && message.hasOwnProperty("completed_at"))
+ if (!$util.isString(message.completed_at))
+ return "completed_at: string expected";
+ if (message.progress != null && message.hasOwnProperty("progress")) {
+ let error = $root.vtadmin.VDiffProgress.verify(message.progress);
+ if (error)
+ return "progress." + error;
+ }
+ return null;
+ };
+
+ /**
+ * Creates a VDiffShardReport message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof vtadmin.VDiffShardReport
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {vtadmin.VDiffShardReport} VDiffShardReport
+ */
+ VDiffShardReport.fromObject = function fromObject(object) {
+ if (object instanceof $root.vtadmin.VDiffShardReport)
+ return object;
+ let message = new $root.vtadmin.VDiffShardReport();
+ if (object.state != null)
+ message.state = String(object.state);
+ if (object.rows_compared != null)
+ if ($util.Long)
+ (message.rows_compared = $util.Long.fromValue(object.rows_compared)).unsigned = false;
+ else if (typeof object.rows_compared === "string")
+ message.rows_compared = parseInt(object.rows_compared, 10);
+ else if (typeof object.rows_compared === "number")
+ message.rows_compared = object.rows_compared;
+ else if (typeof object.rows_compared === "object")
+ message.rows_compared = new $util.LongBits(object.rows_compared.low >>> 0, object.rows_compared.high >>> 0).toNumber();
+ if (object.has_mismatch != null)
+ message.has_mismatch = Boolean(object.has_mismatch);
+ if (object.started_at != null)
+ message.started_at = String(object.started_at);
+ if (object.completed_at != null)
+ message.completed_at = String(object.completed_at);
+ if (object.progress != null) {
+ if (typeof object.progress !== "object")
+ throw TypeError(".vtadmin.VDiffShardReport.progress: object expected");
+ message.progress = $root.vtadmin.VDiffProgress.fromObject(object.progress);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a VDiffShardReport message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof vtadmin.VDiffShardReport
+ * @static
+ * @param {vtadmin.VDiffShardReport} message VDiffShardReport
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ VDiffShardReport.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.state = "";
+ if ($util.Long) {
+ let long = new $util.Long(0, 0, false);
+ object.rows_compared = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+ } else
+ object.rows_compared = options.longs === String ? "0" : 0;
+ object.has_mismatch = false;
+ object.started_at = "";
+ object.completed_at = "";
+ object.progress = null;
+ }
+ if (message.state != null && message.hasOwnProperty("state"))
+ object.state = message.state;
+ if (message.rows_compared != null && message.hasOwnProperty("rows_compared"))
+ if (typeof message.rows_compared === "number")
+ object.rows_compared = options.longs === String ? String(message.rows_compared) : message.rows_compared;
+ else
+ object.rows_compared = options.longs === String ? $util.Long.prototype.toString.call(message.rows_compared) : options.longs === Number ? new $util.LongBits(message.rows_compared.low >>> 0, message.rows_compared.high >>> 0).toNumber() : message.rows_compared;
+ if (message.has_mismatch != null && message.hasOwnProperty("has_mismatch"))
+ object.has_mismatch = message.has_mismatch;
+ if (message.started_at != null && message.hasOwnProperty("started_at"))
+ object.started_at = message.started_at;
+ if (message.completed_at != null && message.hasOwnProperty("completed_at"))
+ object.completed_at = message.completed_at;
+ if (message.progress != null && message.hasOwnProperty("progress"))
+ object.progress = $root.vtadmin.VDiffProgress.toObject(message.progress, options);
+ return object;
+ };
+
+ /**
+ * Converts this VDiffShardReport to JSON.
+ * @function toJSON
+ * @memberof vtadmin.VDiffShardReport
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ VDiffShardReport.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for VDiffShardReport
+ * @function getTypeUrl
+ * @memberof vtadmin.VDiffShardReport
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ VDiffShardReport.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/vtadmin.VDiffShardReport";
+ };
+
+ return VDiffShardReport;
+ })();
+
+ vtadmin.VDiffShowResponse = (function() {
+
+ /**
+ * Properties of a VDiffShowResponse.
+ * @memberof vtadmin
+ * @interface IVDiffShowResponse
+ * @property {Object.|null} [shard_report] VDiffShowResponse shard_report
+ */
+
+ /**
+ * Constructs a new VDiffShowResponse.
+ * @memberof vtadmin
+ * @classdesc Represents a VDiffShowResponse.
+ * @implements IVDiffShowResponse
+ * @constructor
+ * @param {vtadmin.IVDiffShowResponse=} [properties] Properties to set
+ */
+ function VDiffShowResponse(properties) {
+ this.shard_report = {};
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * VDiffShowResponse shard_report.
+ * @member {Object.} shard_report
+ * @memberof vtadmin.VDiffShowResponse
+ * @instance
+ */
+ VDiffShowResponse.prototype.shard_report = $util.emptyObject;
+
+ /**
+ * Creates a new VDiffShowResponse instance using the specified properties.
+ * @function create
+ * @memberof vtadmin.VDiffShowResponse
+ * @static
+ * @param {vtadmin.IVDiffShowResponse=} [properties] Properties to set
+ * @returns {vtadmin.VDiffShowResponse} VDiffShowResponse instance
+ */
+ VDiffShowResponse.create = function create(properties) {
+ return new VDiffShowResponse(properties);
+ };
+
+ /**
+ * Encodes the specified VDiffShowResponse message. Does not implicitly {@link vtadmin.VDiffShowResponse.verify|verify} messages.
+ * @function encode
+ * @memberof vtadmin.VDiffShowResponse
+ * @static
+ * @param {vtadmin.IVDiffShowResponse} message VDiffShowResponse message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ VDiffShowResponse.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.shard_report != null && Object.hasOwnProperty.call(message, "shard_report"))
+ for (let keys = Object.keys(message.shard_report), i = 0; i < keys.length; ++i) {
+ writer.uint32(/* id 1, wireType 2 =*/10).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]);
+ $root.vtadmin.VDiffShardReport.encode(message.shard_report[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim();
+ }
+ return writer;
+ };
+
+ /**
+ * Encodes the specified VDiffShowResponse message, length delimited. Does not implicitly {@link vtadmin.VDiffShowResponse.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof vtadmin.VDiffShowResponse
+ * @static
+ * @param {vtadmin.IVDiffShowResponse} message VDiffShowResponse message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ VDiffShowResponse.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a VDiffShowResponse message from the specified reader or buffer.
+ * @function decode
+ * @memberof vtadmin.VDiffShowResponse
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {vtadmin.VDiffShowResponse} VDiffShowResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ VDiffShowResponse.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.vtadmin.VDiffShowResponse(), key, value;
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ if (message.shard_report === $util.emptyObject)
+ message.shard_report = {};
+ let end2 = reader.uint32() + reader.pos;
+ key = "";
+ value = null;
+ while (reader.pos < end2) {
+ let tag2 = reader.uint32();
+ switch (tag2 >>> 3) {
+ case 1:
+ key = reader.string();
+ break;
+ case 2:
+ value = $root.vtadmin.VDiffShardReport.decode(reader, reader.uint32());
+ break;
+ default:
+ reader.skipType(tag2 & 7);
+ break;
+ }
+ }
+ message.shard_report[key] = value;
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a VDiffShowResponse message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof vtadmin.VDiffShowResponse
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {vtadmin.VDiffShowResponse} VDiffShowResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ VDiffShowResponse.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a VDiffShowResponse message.
+ * @function verify
+ * @memberof vtadmin.VDiffShowResponse
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ VDiffShowResponse.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.shard_report != null && message.hasOwnProperty("shard_report")) {
+ if (!$util.isObject(message.shard_report))
+ return "shard_report: object expected";
+ let key = Object.keys(message.shard_report);
+ for (let i = 0; i < key.length; ++i) {
+ let error = $root.vtadmin.VDiffShardReport.verify(message.shard_report[key[i]]);
+ if (error)
+ return "shard_report." + error;
+ }
+ }
+ return null;
+ };
+
+ /**
+ * Creates a VDiffShowResponse message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof vtadmin.VDiffShowResponse
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {vtadmin.VDiffShowResponse} VDiffShowResponse
+ */
+ VDiffShowResponse.fromObject = function fromObject(object) {
+ if (object instanceof $root.vtadmin.VDiffShowResponse)
+ return object;
+ let message = new $root.vtadmin.VDiffShowResponse();
+ if (object.shard_report) {
+ if (typeof object.shard_report !== "object")
+ throw TypeError(".vtadmin.VDiffShowResponse.shard_report: object expected");
+ message.shard_report = {};
+ for (let keys = Object.keys(object.shard_report), i = 0; i < keys.length; ++i) {
+ if (typeof object.shard_report[keys[i]] !== "object")
+ throw TypeError(".vtadmin.VDiffShowResponse.shard_report: object expected");
+ message.shard_report[keys[i]] = $root.vtadmin.VDiffShardReport.fromObject(object.shard_report[keys[i]]);
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a VDiffShowResponse message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof vtadmin.VDiffShowResponse
+ * @static
+ * @param {vtadmin.VDiffShowResponse} message VDiffShowResponse
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ VDiffShowResponse.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.objects || options.defaults)
+ object.shard_report = {};
+ let keys2;
+ if (message.shard_report && (keys2 = Object.keys(message.shard_report)).length) {
+ object.shard_report = {};
+ for (let j = 0; j < keys2.length; ++j)
+ object.shard_report[keys2[j]] = $root.vtadmin.VDiffShardReport.toObject(message.shard_report[keys2[j]], options);
+ }
+ return object;
+ };
+
+ /**
+ * Converts this VDiffShowResponse to JSON.
+ * @function toJSON
+ * @memberof vtadmin.VDiffShowResponse
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ VDiffShowResponse.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for VDiffShowResponse
+ * @function getTypeUrl
+ * @memberof vtadmin.VDiffShowResponse
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ VDiffShowResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/vtadmin.VDiffShowResponse";
+ };
+
+ return VDiffShowResponse;
+ })();
+
vtadmin.VTExplainRequest = (function() {
/**
@@ -56622,6 +59918,513 @@ export const tabletmanagerdata = $root.tabletmanagerdata = (() => {
return ReadTransactionResponse;
})();
+ tabletmanagerdata.GetTransactionInfoRequest = (function() {
+
+ /**
+ * Properties of a GetTransactionInfoRequest.
+ * @memberof tabletmanagerdata
+ * @interface IGetTransactionInfoRequest
+ * @property {string|null} [dtid] GetTransactionInfoRequest dtid
+ */
+
+ /**
+ * Constructs a new GetTransactionInfoRequest.
+ * @memberof tabletmanagerdata
+ * @classdesc Represents a GetTransactionInfoRequest.
+ * @implements IGetTransactionInfoRequest
+ * @constructor
+ * @param {tabletmanagerdata.IGetTransactionInfoRequest=} [properties] Properties to set
+ */
+ function GetTransactionInfoRequest(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * GetTransactionInfoRequest dtid.
+ * @member {string} dtid
+ * @memberof tabletmanagerdata.GetTransactionInfoRequest
+ * @instance
+ */
+ GetTransactionInfoRequest.prototype.dtid = "";
+
+ /**
+ * Creates a new GetTransactionInfoRequest instance using the specified properties.
+ * @function create
+ * @memberof tabletmanagerdata.GetTransactionInfoRequest
+ * @static
+ * @param {tabletmanagerdata.IGetTransactionInfoRequest=} [properties] Properties to set
+ * @returns {tabletmanagerdata.GetTransactionInfoRequest} GetTransactionInfoRequest instance
+ */
+ GetTransactionInfoRequest.create = function create(properties) {
+ return new GetTransactionInfoRequest(properties);
+ };
+
+ /**
+ * Encodes the specified GetTransactionInfoRequest message. Does not implicitly {@link tabletmanagerdata.GetTransactionInfoRequest.verify|verify} messages.
+ * @function encode
+ * @memberof tabletmanagerdata.GetTransactionInfoRequest
+ * @static
+ * @param {tabletmanagerdata.IGetTransactionInfoRequest} message GetTransactionInfoRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ GetTransactionInfoRequest.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.dtid != null && Object.hasOwnProperty.call(message, "dtid"))
+ writer.uint32(/* id 1, wireType 2 =*/10).string(message.dtid);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified GetTransactionInfoRequest message, length delimited. Does not implicitly {@link tabletmanagerdata.GetTransactionInfoRequest.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof tabletmanagerdata.GetTransactionInfoRequest
+ * @static
+ * @param {tabletmanagerdata.IGetTransactionInfoRequest} message GetTransactionInfoRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ GetTransactionInfoRequest.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a GetTransactionInfoRequest message from the specified reader or buffer.
+ * @function decode
+ * @memberof tabletmanagerdata.GetTransactionInfoRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {tabletmanagerdata.GetTransactionInfoRequest} GetTransactionInfoRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ GetTransactionInfoRequest.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.tabletmanagerdata.GetTransactionInfoRequest();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.dtid = reader.string();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a GetTransactionInfoRequest message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof tabletmanagerdata.GetTransactionInfoRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {tabletmanagerdata.GetTransactionInfoRequest} GetTransactionInfoRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ GetTransactionInfoRequest.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a GetTransactionInfoRequest message.
+ * @function verify
+ * @memberof tabletmanagerdata.GetTransactionInfoRequest
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ GetTransactionInfoRequest.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.dtid != null && message.hasOwnProperty("dtid"))
+ if (!$util.isString(message.dtid))
+ return "dtid: string expected";
+ return null;
+ };
+
+ /**
+ * Creates a GetTransactionInfoRequest message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof tabletmanagerdata.GetTransactionInfoRequest
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {tabletmanagerdata.GetTransactionInfoRequest} GetTransactionInfoRequest
+ */
+ GetTransactionInfoRequest.fromObject = function fromObject(object) {
+ if (object instanceof $root.tabletmanagerdata.GetTransactionInfoRequest)
+ return object;
+ let message = new $root.tabletmanagerdata.GetTransactionInfoRequest();
+ if (object.dtid != null)
+ message.dtid = String(object.dtid);
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a GetTransactionInfoRequest message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof tabletmanagerdata.GetTransactionInfoRequest
+ * @static
+ * @param {tabletmanagerdata.GetTransactionInfoRequest} message GetTransactionInfoRequest
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ GetTransactionInfoRequest.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults)
+ object.dtid = "";
+ if (message.dtid != null && message.hasOwnProperty("dtid"))
+ object.dtid = message.dtid;
+ return object;
+ };
+
+ /**
+ * Converts this GetTransactionInfoRequest to JSON.
+ * @function toJSON
+ * @memberof tabletmanagerdata.GetTransactionInfoRequest
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ GetTransactionInfoRequest.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for GetTransactionInfoRequest
+ * @function getTypeUrl
+ * @memberof tabletmanagerdata.GetTransactionInfoRequest
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ GetTransactionInfoRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/tabletmanagerdata.GetTransactionInfoRequest";
+ };
+
+ return GetTransactionInfoRequest;
+ })();
+
+ tabletmanagerdata.GetTransactionInfoResponse = (function() {
+
+ /**
+ * Properties of a GetTransactionInfoResponse.
+ * @memberof tabletmanagerdata
+ * @interface IGetTransactionInfoResponse
+ * @property {string|null} [state] GetTransactionInfoResponse state
+ * @property {string|null} [message] GetTransactionInfoResponse message
+ * @property {number|Long|null} [time_created] GetTransactionInfoResponse time_created
+ * @property {Array.|null} [statements] GetTransactionInfoResponse statements
+ */
+
+ /**
+ * Constructs a new GetTransactionInfoResponse.
+ * @memberof tabletmanagerdata
+ * @classdesc Represents a GetTransactionInfoResponse.
+ * @implements IGetTransactionInfoResponse
+ * @constructor
+ * @param {tabletmanagerdata.IGetTransactionInfoResponse=} [properties] Properties to set
+ */
+ function GetTransactionInfoResponse(properties) {
+ this.statements = [];
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * GetTransactionInfoResponse state.
+ * @member {string} state
+ * @memberof tabletmanagerdata.GetTransactionInfoResponse
+ * @instance
+ */
+ GetTransactionInfoResponse.prototype.state = "";
+
+ /**
+ * GetTransactionInfoResponse message.
+ * @member {string} message
+ * @memberof tabletmanagerdata.GetTransactionInfoResponse
+ * @instance
+ */
+ GetTransactionInfoResponse.prototype.message = "";
+
+ /**
+ * GetTransactionInfoResponse time_created.
+ * @member {number|Long} time_created
+ * @memberof tabletmanagerdata.GetTransactionInfoResponse
+ * @instance
+ */
+ GetTransactionInfoResponse.prototype.time_created = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+ /**
+ * GetTransactionInfoResponse statements.
+ * @member {Array.} statements
+ * @memberof tabletmanagerdata.GetTransactionInfoResponse
+ * @instance
+ */
+ GetTransactionInfoResponse.prototype.statements = $util.emptyArray;
+
+ /**
+ * Creates a new GetTransactionInfoResponse instance using the specified properties.
+ * @function create
+ * @memberof tabletmanagerdata.GetTransactionInfoResponse
+ * @static
+ * @param {tabletmanagerdata.IGetTransactionInfoResponse=} [properties] Properties to set
+ * @returns {tabletmanagerdata.GetTransactionInfoResponse} GetTransactionInfoResponse instance
+ */
+ GetTransactionInfoResponse.create = function create(properties) {
+ return new GetTransactionInfoResponse(properties);
+ };
+
+ /**
+ * Encodes the specified GetTransactionInfoResponse message. Does not implicitly {@link tabletmanagerdata.GetTransactionInfoResponse.verify|verify} messages.
+ * @function encode
+ * @memberof tabletmanagerdata.GetTransactionInfoResponse
+ * @static
+ * @param {tabletmanagerdata.IGetTransactionInfoResponse} message GetTransactionInfoResponse message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ GetTransactionInfoResponse.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.state != null && Object.hasOwnProperty.call(message, "state"))
+ writer.uint32(/* id 1, wireType 2 =*/10).string(message.state);
+ if (message.message != null && Object.hasOwnProperty.call(message, "message"))
+ writer.uint32(/* id 2, wireType 2 =*/18).string(message.message);
+ if (message.time_created != null && Object.hasOwnProperty.call(message, "time_created"))
+ writer.uint32(/* id 3, wireType 0 =*/24).int64(message.time_created);
+ if (message.statements != null && message.statements.length)
+ for (let i = 0; i < message.statements.length; ++i)
+ writer.uint32(/* id 4, wireType 2 =*/34).string(message.statements[i]);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified GetTransactionInfoResponse message, length delimited. Does not implicitly {@link tabletmanagerdata.GetTransactionInfoResponse.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof tabletmanagerdata.GetTransactionInfoResponse
+ * @static
+ * @param {tabletmanagerdata.IGetTransactionInfoResponse} message GetTransactionInfoResponse message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ GetTransactionInfoResponse.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a GetTransactionInfoResponse message from the specified reader or buffer.
+ * @function decode
+ * @memberof tabletmanagerdata.GetTransactionInfoResponse
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {tabletmanagerdata.GetTransactionInfoResponse} GetTransactionInfoResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ GetTransactionInfoResponse.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.tabletmanagerdata.GetTransactionInfoResponse();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.state = reader.string();
+ break;
+ }
+ case 2: {
+ message.message = reader.string();
+ break;
+ }
+ case 3: {
+ message.time_created = reader.int64();
+ break;
+ }
+ case 4: {
+ if (!(message.statements && message.statements.length))
+ message.statements = [];
+ message.statements.push(reader.string());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a GetTransactionInfoResponse message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof tabletmanagerdata.GetTransactionInfoResponse
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {tabletmanagerdata.GetTransactionInfoResponse} GetTransactionInfoResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ GetTransactionInfoResponse.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a GetTransactionInfoResponse message.
+ * @function verify
+ * @memberof tabletmanagerdata.GetTransactionInfoResponse
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ GetTransactionInfoResponse.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.state != null && message.hasOwnProperty("state"))
+ if (!$util.isString(message.state))
+ return "state: string expected";
+ if (message.message != null && message.hasOwnProperty("message"))
+ if (!$util.isString(message.message))
+ return "message: string expected";
+ if (message.time_created != null && message.hasOwnProperty("time_created"))
+ if (!$util.isInteger(message.time_created) && !(message.time_created && $util.isInteger(message.time_created.low) && $util.isInteger(message.time_created.high)))
+ return "time_created: integer|Long expected";
+ if (message.statements != null && message.hasOwnProperty("statements")) {
+ if (!Array.isArray(message.statements))
+ return "statements: array expected";
+ for (let i = 0; i < message.statements.length; ++i)
+ if (!$util.isString(message.statements[i]))
+ return "statements: string[] expected";
+ }
+ return null;
+ };
+
+ /**
+ * Creates a GetTransactionInfoResponse message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof tabletmanagerdata.GetTransactionInfoResponse
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {tabletmanagerdata.GetTransactionInfoResponse} GetTransactionInfoResponse
+ */
+ GetTransactionInfoResponse.fromObject = function fromObject(object) {
+ if (object instanceof $root.tabletmanagerdata.GetTransactionInfoResponse)
+ return object;
+ let message = new $root.tabletmanagerdata.GetTransactionInfoResponse();
+ if (object.state != null)
+ message.state = String(object.state);
+ if (object.message != null)
+ message.message = String(object.message);
+ if (object.time_created != null)
+ if ($util.Long)
+ (message.time_created = $util.Long.fromValue(object.time_created)).unsigned = false;
+ else if (typeof object.time_created === "string")
+ message.time_created = parseInt(object.time_created, 10);
+ else if (typeof object.time_created === "number")
+ message.time_created = object.time_created;
+ else if (typeof object.time_created === "object")
+ message.time_created = new $util.LongBits(object.time_created.low >>> 0, object.time_created.high >>> 0).toNumber();
+ if (object.statements) {
+ if (!Array.isArray(object.statements))
+ throw TypeError(".tabletmanagerdata.GetTransactionInfoResponse.statements: array expected");
+ message.statements = [];
+ for (let i = 0; i < object.statements.length; ++i)
+ message.statements[i] = String(object.statements[i]);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a GetTransactionInfoResponse message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof tabletmanagerdata.GetTransactionInfoResponse
+ * @static
+ * @param {tabletmanagerdata.GetTransactionInfoResponse} message GetTransactionInfoResponse
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ GetTransactionInfoResponse.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.arrays || options.defaults)
+ object.statements = [];
+ if (options.defaults) {
+ object.state = "";
+ object.message = "";
+ if ($util.Long) {
+ let long = new $util.Long(0, 0, false);
+ object.time_created = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+ } else
+ object.time_created = options.longs === String ? "0" : 0;
+ }
+ if (message.state != null && message.hasOwnProperty("state"))
+ object.state = message.state;
+ if (message.message != null && message.hasOwnProperty("message"))
+ object.message = message.message;
+ if (message.time_created != null && message.hasOwnProperty("time_created"))
+ if (typeof message.time_created === "number")
+ object.time_created = options.longs === String ? String(message.time_created) : message.time_created;
+ else
+ object.time_created = options.longs === String ? $util.Long.prototype.toString.call(message.time_created) : options.longs === Number ? new $util.LongBits(message.time_created.low >>> 0, message.time_created.high >>> 0).toNumber() : message.time_created;
+ if (message.statements && message.statements.length) {
+ object.statements = [];
+ for (let j = 0; j < message.statements.length; ++j)
+ object.statements[j] = message.statements[j];
+ }
+ return object;
+ };
+
+ /**
+ * Converts this GetTransactionInfoResponse to JSON.
+ * @function toJSON
+ * @memberof tabletmanagerdata.GetTransactionInfoResponse
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ GetTransactionInfoResponse.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for GetTransactionInfoResponse
+ * @function getTypeUrl
+ * @memberof tabletmanagerdata.GetTransactionInfoResponse
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ GetTransactionInfoResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/tabletmanagerdata.GetTransactionInfoResponse";
+ };
+
+ return GetTransactionInfoResponse;
+ })();
+
tabletmanagerdata.ConcludeTransactionRequest = (function() {
/**
@@ -62947,6 +66750,384 @@ export const tabletmanagerdata = $root.tabletmanagerdata = (() => {
return PopulateReparentJournalResponse;
})();
+ tabletmanagerdata.ReadReparentJournalInfoRequest = (function() {
+
+ /**
+ * Properties of a ReadReparentJournalInfoRequest.
+ * @memberof tabletmanagerdata
+ * @interface IReadReparentJournalInfoRequest
+ */
+
+ /**
+ * Constructs a new ReadReparentJournalInfoRequest.
+ * @memberof tabletmanagerdata
+ * @classdesc Represents a ReadReparentJournalInfoRequest.
+ * @implements IReadReparentJournalInfoRequest
+ * @constructor
+ * @param {tabletmanagerdata.IReadReparentJournalInfoRequest=} [properties] Properties to set
+ */
+ function ReadReparentJournalInfoRequest(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * Creates a new ReadReparentJournalInfoRequest instance using the specified properties.
+ * @function create
+ * @memberof tabletmanagerdata.ReadReparentJournalInfoRequest
+ * @static
+ * @param {tabletmanagerdata.IReadReparentJournalInfoRequest=} [properties] Properties to set
+ * @returns {tabletmanagerdata.ReadReparentJournalInfoRequest} ReadReparentJournalInfoRequest instance
+ */
+ ReadReparentJournalInfoRequest.create = function create(properties) {
+ return new ReadReparentJournalInfoRequest(properties);
+ };
+
+ /**
+ * Encodes the specified ReadReparentJournalInfoRequest message. Does not implicitly {@link tabletmanagerdata.ReadReparentJournalInfoRequest.verify|verify} messages.
+ * @function encode
+ * @memberof tabletmanagerdata.ReadReparentJournalInfoRequest
+ * @static
+ * @param {tabletmanagerdata.IReadReparentJournalInfoRequest} message ReadReparentJournalInfoRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ ReadReparentJournalInfoRequest.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified ReadReparentJournalInfoRequest message, length delimited. Does not implicitly {@link tabletmanagerdata.ReadReparentJournalInfoRequest.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof tabletmanagerdata.ReadReparentJournalInfoRequest
+ * @static
+ * @param {tabletmanagerdata.IReadReparentJournalInfoRequest} message ReadReparentJournalInfoRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ ReadReparentJournalInfoRequest.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a ReadReparentJournalInfoRequest message from the specified reader or buffer.
+ * @function decode
+ * @memberof tabletmanagerdata.ReadReparentJournalInfoRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {tabletmanagerdata.ReadReparentJournalInfoRequest} ReadReparentJournalInfoRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ ReadReparentJournalInfoRequest.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.tabletmanagerdata.ReadReparentJournalInfoRequest();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a ReadReparentJournalInfoRequest message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof tabletmanagerdata.ReadReparentJournalInfoRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {tabletmanagerdata.ReadReparentJournalInfoRequest} ReadReparentJournalInfoRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ ReadReparentJournalInfoRequest.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a ReadReparentJournalInfoRequest message.
+ * @function verify
+ * @memberof tabletmanagerdata.ReadReparentJournalInfoRequest
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ ReadReparentJournalInfoRequest.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ return null;
+ };
+
+ /**
+ * Creates a ReadReparentJournalInfoRequest message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof tabletmanagerdata.ReadReparentJournalInfoRequest
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {tabletmanagerdata.ReadReparentJournalInfoRequest} ReadReparentJournalInfoRequest
+ */
+ ReadReparentJournalInfoRequest.fromObject = function fromObject(object) {
+ if (object instanceof $root.tabletmanagerdata.ReadReparentJournalInfoRequest)
+ return object;
+ return new $root.tabletmanagerdata.ReadReparentJournalInfoRequest();
+ };
+
+ /**
+ * Creates a plain object from a ReadReparentJournalInfoRequest message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof tabletmanagerdata.ReadReparentJournalInfoRequest
+ * @static
+ * @param {tabletmanagerdata.ReadReparentJournalInfoRequest} message ReadReparentJournalInfoRequest
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ ReadReparentJournalInfoRequest.toObject = function toObject() {
+ return {};
+ };
+
+ /**
+ * Converts this ReadReparentJournalInfoRequest to JSON.
+ * @function toJSON
+ * @memberof tabletmanagerdata.ReadReparentJournalInfoRequest
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ ReadReparentJournalInfoRequest.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for ReadReparentJournalInfoRequest
+ * @function getTypeUrl
+ * @memberof tabletmanagerdata.ReadReparentJournalInfoRequest
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ ReadReparentJournalInfoRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/tabletmanagerdata.ReadReparentJournalInfoRequest";
+ };
+
+ return ReadReparentJournalInfoRequest;
+ })();
+
+ tabletmanagerdata.ReadReparentJournalInfoResponse = (function() {
+
+ /**
+ * Properties of a ReadReparentJournalInfoResponse.
+ * @memberof tabletmanagerdata
+ * @interface IReadReparentJournalInfoResponse
+ * @property {number|null} [length] ReadReparentJournalInfoResponse length
+ */
+
+ /**
+ * Constructs a new ReadReparentJournalInfoResponse.
+ * @memberof tabletmanagerdata
+ * @classdesc Represents a ReadReparentJournalInfoResponse.
+ * @implements IReadReparentJournalInfoResponse
+ * @constructor
+ * @param {tabletmanagerdata.IReadReparentJournalInfoResponse=} [properties] Properties to set
+ */
+ function ReadReparentJournalInfoResponse(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * ReadReparentJournalInfoResponse length.
+ * @member {number} length
+ * @memberof tabletmanagerdata.ReadReparentJournalInfoResponse
+ * @instance
+ */
+ ReadReparentJournalInfoResponse.prototype.length = 0;
+
+ /**
+ * Creates a new ReadReparentJournalInfoResponse instance using the specified properties.
+ * @function create
+ * @memberof tabletmanagerdata.ReadReparentJournalInfoResponse
+ * @static
+ * @param {tabletmanagerdata.IReadReparentJournalInfoResponse=} [properties] Properties to set
+ * @returns {tabletmanagerdata.ReadReparentJournalInfoResponse} ReadReparentJournalInfoResponse instance
+ */
+ ReadReparentJournalInfoResponse.create = function create(properties) {
+ return new ReadReparentJournalInfoResponse(properties);
+ };
+
+ /**
+ * Encodes the specified ReadReparentJournalInfoResponse message. Does not implicitly {@link tabletmanagerdata.ReadReparentJournalInfoResponse.verify|verify} messages.
+ * @function encode
+ * @memberof tabletmanagerdata.ReadReparentJournalInfoResponse
+ * @static
+ * @param {tabletmanagerdata.IReadReparentJournalInfoResponse} message ReadReparentJournalInfoResponse message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ ReadReparentJournalInfoResponse.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.length != null && Object.hasOwnProperty.call(message, "length"))
+ writer.uint32(/* id 1, wireType 0 =*/8).int32(message.length);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified ReadReparentJournalInfoResponse message, length delimited. Does not implicitly {@link tabletmanagerdata.ReadReparentJournalInfoResponse.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof tabletmanagerdata.ReadReparentJournalInfoResponse
+ * @static
+ * @param {tabletmanagerdata.IReadReparentJournalInfoResponse} message ReadReparentJournalInfoResponse message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ ReadReparentJournalInfoResponse.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a ReadReparentJournalInfoResponse message from the specified reader or buffer.
+ * @function decode
+ * @memberof tabletmanagerdata.ReadReparentJournalInfoResponse
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {tabletmanagerdata.ReadReparentJournalInfoResponse} ReadReparentJournalInfoResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ ReadReparentJournalInfoResponse.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.tabletmanagerdata.ReadReparentJournalInfoResponse();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.length = reader.int32();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a ReadReparentJournalInfoResponse message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof tabletmanagerdata.ReadReparentJournalInfoResponse
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {tabletmanagerdata.ReadReparentJournalInfoResponse} ReadReparentJournalInfoResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ ReadReparentJournalInfoResponse.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a ReadReparentJournalInfoResponse message.
+ * @function verify
+ * @memberof tabletmanagerdata.ReadReparentJournalInfoResponse
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ ReadReparentJournalInfoResponse.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.length != null && message.hasOwnProperty("length"))
+ if (!$util.isInteger(message.length))
+ return "length: integer expected";
+ return null;
+ };
+
+ /**
+ * Creates a ReadReparentJournalInfoResponse message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof tabletmanagerdata.ReadReparentJournalInfoResponse
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {tabletmanagerdata.ReadReparentJournalInfoResponse} ReadReparentJournalInfoResponse
+ */
+ ReadReparentJournalInfoResponse.fromObject = function fromObject(object) {
+ if (object instanceof $root.tabletmanagerdata.ReadReparentJournalInfoResponse)
+ return object;
+ let message = new $root.tabletmanagerdata.ReadReparentJournalInfoResponse();
+ if (object.length != null)
+ message.length = object.length | 0;
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a ReadReparentJournalInfoResponse message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof tabletmanagerdata.ReadReparentJournalInfoResponse
+ * @static
+ * @param {tabletmanagerdata.ReadReparentJournalInfoResponse} message ReadReparentJournalInfoResponse
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ ReadReparentJournalInfoResponse.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults)
+ object.length = 0;
+ if (message.length != null && message.hasOwnProperty("length"))
+ object.length = message.length;
+ return object;
+ };
+
+ /**
+ * Converts this ReadReparentJournalInfoResponse to JSON.
+ * @function toJSON
+ * @memberof tabletmanagerdata.ReadReparentJournalInfoResponse
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ ReadReparentJournalInfoResponse.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for ReadReparentJournalInfoResponse
+ * @function getTypeUrl
+ * @memberof tabletmanagerdata.ReadReparentJournalInfoResponse
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ ReadReparentJournalInfoResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/tabletmanagerdata.ReadReparentJournalInfoResponse";
+ };
+
+ return ReadReparentJournalInfoResponse;
+ })();
+
tabletmanagerdata.InitReplicaRequest = (function() {
/**
@@ -68900,6 +73081,457 @@ export const tabletmanagerdata = $root.tabletmanagerdata = (() => {
return CreateVReplicationWorkflowResponse;
})();
+ tabletmanagerdata.DeleteTableDataRequest = (function() {
+
+ /**
+ * Properties of a DeleteTableDataRequest.
+ * @memberof tabletmanagerdata
+ * @interface IDeleteTableDataRequest
+ * @property {Object.|null} [table_filters] DeleteTableDataRequest table_filters
+ * @property {number|Long|null} [batch_size] DeleteTableDataRequest batch_size
+ */
+
+ /**
+ * Constructs a new DeleteTableDataRequest.
+ * @memberof tabletmanagerdata
+ * @classdesc Represents a DeleteTableDataRequest.
+ * @implements IDeleteTableDataRequest
+ * @constructor
+ * @param {tabletmanagerdata.IDeleteTableDataRequest=} [properties] Properties to set
+ */
+ function DeleteTableDataRequest(properties) {
+ this.table_filters = {};
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * DeleteTableDataRequest table_filters.
+ * @member {Object.} table_filters
+ * @memberof tabletmanagerdata.DeleteTableDataRequest
+ * @instance
+ */
+ DeleteTableDataRequest.prototype.table_filters = $util.emptyObject;
+
+ /**
+ * DeleteTableDataRequest batch_size.
+ * @member {number|Long} batch_size
+ * @memberof tabletmanagerdata.DeleteTableDataRequest
+ * @instance
+ */
+ DeleteTableDataRequest.prototype.batch_size = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+ /**
+ * Creates a new DeleteTableDataRequest instance using the specified properties.
+ * @function create
+ * @memberof tabletmanagerdata.DeleteTableDataRequest
+ * @static
+ * @param {tabletmanagerdata.IDeleteTableDataRequest=} [properties] Properties to set
+ * @returns {tabletmanagerdata.DeleteTableDataRequest} DeleteTableDataRequest instance
+ */
+ DeleteTableDataRequest.create = function create(properties) {
+ return new DeleteTableDataRequest(properties);
+ };
+
+ /**
+ * Encodes the specified DeleteTableDataRequest message. Does not implicitly {@link tabletmanagerdata.DeleteTableDataRequest.verify|verify} messages.
+ * @function encode
+ * @memberof tabletmanagerdata.DeleteTableDataRequest
+ * @static
+ * @param {tabletmanagerdata.IDeleteTableDataRequest} message DeleteTableDataRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ DeleteTableDataRequest.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.table_filters != null && Object.hasOwnProperty.call(message, "table_filters"))
+ for (let keys = Object.keys(message.table_filters), i = 0; i < keys.length; ++i)
+ writer.uint32(/* id 1, wireType 2 =*/10).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 2 =*/18).string(message.table_filters[keys[i]]).ldelim();
+ if (message.batch_size != null && Object.hasOwnProperty.call(message, "batch_size"))
+ writer.uint32(/* id 2, wireType 0 =*/16).int64(message.batch_size);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified DeleteTableDataRequest message, length delimited. Does not implicitly {@link tabletmanagerdata.DeleteTableDataRequest.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof tabletmanagerdata.DeleteTableDataRequest
+ * @static
+ * @param {tabletmanagerdata.IDeleteTableDataRequest} message DeleteTableDataRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ DeleteTableDataRequest.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a DeleteTableDataRequest message from the specified reader or buffer.
+ * @function decode
+ * @memberof tabletmanagerdata.DeleteTableDataRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {tabletmanagerdata.DeleteTableDataRequest} DeleteTableDataRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ DeleteTableDataRequest.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.tabletmanagerdata.DeleteTableDataRequest(), key, value;
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ if (message.table_filters === $util.emptyObject)
+ message.table_filters = {};
+ let end2 = reader.uint32() + reader.pos;
+ key = "";
+ value = "";
+ while (reader.pos < end2) {
+ let tag2 = reader.uint32();
+ switch (tag2 >>> 3) {
+ case 1:
+ key = reader.string();
+ break;
+ case 2:
+ value = reader.string();
+ break;
+ default:
+ reader.skipType(tag2 & 7);
+ break;
+ }
+ }
+ message.table_filters[key] = value;
+ break;
+ }
+ case 2: {
+ message.batch_size = reader.int64();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a DeleteTableDataRequest message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof tabletmanagerdata.DeleteTableDataRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {tabletmanagerdata.DeleteTableDataRequest} DeleteTableDataRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ DeleteTableDataRequest.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a DeleteTableDataRequest message.
+ * @function verify
+ * @memberof tabletmanagerdata.DeleteTableDataRequest
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ DeleteTableDataRequest.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.table_filters != null && message.hasOwnProperty("table_filters")) {
+ if (!$util.isObject(message.table_filters))
+ return "table_filters: object expected";
+ let key = Object.keys(message.table_filters);
+ for (let i = 0; i < key.length; ++i)
+ if (!$util.isString(message.table_filters[key[i]]))
+ return "table_filters: string{k:string} expected";
+ }
+ if (message.batch_size != null && message.hasOwnProperty("batch_size"))
+ if (!$util.isInteger(message.batch_size) && !(message.batch_size && $util.isInteger(message.batch_size.low) && $util.isInteger(message.batch_size.high)))
+ return "batch_size: integer|Long expected";
+ return null;
+ };
+
+ /**
+ * Creates a DeleteTableDataRequest message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof tabletmanagerdata.DeleteTableDataRequest
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {tabletmanagerdata.DeleteTableDataRequest} DeleteTableDataRequest
+ */
+ DeleteTableDataRequest.fromObject = function fromObject(object) {
+ if (object instanceof $root.tabletmanagerdata.DeleteTableDataRequest)
+ return object;
+ let message = new $root.tabletmanagerdata.DeleteTableDataRequest();
+ if (object.table_filters) {
+ if (typeof object.table_filters !== "object")
+ throw TypeError(".tabletmanagerdata.DeleteTableDataRequest.table_filters: object expected");
+ message.table_filters = {};
+ for (let keys = Object.keys(object.table_filters), i = 0; i < keys.length; ++i)
+ message.table_filters[keys[i]] = String(object.table_filters[keys[i]]);
+ }
+ if (object.batch_size != null)
+ if ($util.Long)
+ (message.batch_size = $util.Long.fromValue(object.batch_size)).unsigned = false;
+ else if (typeof object.batch_size === "string")
+ message.batch_size = parseInt(object.batch_size, 10);
+ else if (typeof object.batch_size === "number")
+ message.batch_size = object.batch_size;
+ else if (typeof object.batch_size === "object")
+ message.batch_size = new $util.LongBits(object.batch_size.low >>> 0, object.batch_size.high >>> 0).toNumber();
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a DeleteTableDataRequest message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof tabletmanagerdata.DeleteTableDataRequest
+ * @static
+ * @param {tabletmanagerdata.DeleteTableDataRequest} message DeleteTableDataRequest
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ DeleteTableDataRequest.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.objects || options.defaults)
+ object.table_filters = {};
+ if (options.defaults)
+ if ($util.Long) {
+ let long = new $util.Long(0, 0, false);
+ object.batch_size = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+ } else
+ object.batch_size = options.longs === String ? "0" : 0;
+ let keys2;
+ if (message.table_filters && (keys2 = Object.keys(message.table_filters)).length) {
+ object.table_filters = {};
+ for (let j = 0; j < keys2.length; ++j)
+ object.table_filters[keys2[j]] = message.table_filters[keys2[j]];
+ }
+ if (message.batch_size != null && message.hasOwnProperty("batch_size"))
+ if (typeof message.batch_size === "number")
+ object.batch_size = options.longs === String ? String(message.batch_size) : message.batch_size;
+ else
+ object.batch_size = options.longs === String ? $util.Long.prototype.toString.call(message.batch_size) : options.longs === Number ? new $util.LongBits(message.batch_size.low >>> 0, message.batch_size.high >>> 0).toNumber() : message.batch_size;
+ return object;
+ };
+
+ /**
+ * Converts this DeleteTableDataRequest to JSON.
+ * @function toJSON
+ * @memberof tabletmanagerdata.DeleteTableDataRequest
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ DeleteTableDataRequest.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for DeleteTableDataRequest
+ * @function getTypeUrl
+ * @memberof tabletmanagerdata.DeleteTableDataRequest
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ DeleteTableDataRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/tabletmanagerdata.DeleteTableDataRequest";
+ };
+
+ return DeleteTableDataRequest;
+ })();
+
+ tabletmanagerdata.DeleteTableDataResponse = (function() {
+
+ /**
+ * Properties of a DeleteTableDataResponse.
+ * @memberof tabletmanagerdata
+ * @interface IDeleteTableDataResponse
+ */
+
+ /**
+ * Constructs a new DeleteTableDataResponse.
+ * @memberof tabletmanagerdata
+ * @classdesc Represents a DeleteTableDataResponse.
+ * @implements IDeleteTableDataResponse
+ * @constructor
+ * @param {tabletmanagerdata.IDeleteTableDataResponse=} [properties] Properties to set
+ */
+ function DeleteTableDataResponse(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * Creates a new DeleteTableDataResponse instance using the specified properties.
+ * @function create
+ * @memberof tabletmanagerdata.DeleteTableDataResponse
+ * @static
+ * @param {tabletmanagerdata.IDeleteTableDataResponse=} [properties] Properties to set
+ * @returns {tabletmanagerdata.DeleteTableDataResponse} DeleteTableDataResponse instance
+ */
+ DeleteTableDataResponse.create = function create(properties) {
+ return new DeleteTableDataResponse(properties);
+ };
+
+ /**
+ * Encodes the specified DeleteTableDataResponse message. Does not implicitly {@link tabletmanagerdata.DeleteTableDataResponse.verify|verify} messages.
+ * @function encode
+ * @memberof tabletmanagerdata.DeleteTableDataResponse
+ * @static
+ * @param {tabletmanagerdata.IDeleteTableDataResponse} message DeleteTableDataResponse message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ DeleteTableDataResponse.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified DeleteTableDataResponse message, length delimited. Does not implicitly {@link tabletmanagerdata.DeleteTableDataResponse.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof tabletmanagerdata.DeleteTableDataResponse
+ * @static
+ * @param {tabletmanagerdata.IDeleteTableDataResponse} message DeleteTableDataResponse message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ DeleteTableDataResponse.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a DeleteTableDataResponse message from the specified reader or buffer.
+ * @function decode
+ * @memberof tabletmanagerdata.DeleteTableDataResponse
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {tabletmanagerdata.DeleteTableDataResponse} DeleteTableDataResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ DeleteTableDataResponse.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.tabletmanagerdata.DeleteTableDataResponse();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a DeleteTableDataResponse message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof tabletmanagerdata.DeleteTableDataResponse
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {tabletmanagerdata.DeleteTableDataResponse} DeleteTableDataResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ DeleteTableDataResponse.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a DeleteTableDataResponse message.
+ * @function verify
+ * @memberof tabletmanagerdata.DeleteTableDataResponse
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ DeleteTableDataResponse.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ return null;
+ };
+
+ /**
+ * Creates a DeleteTableDataResponse message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof tabletmanagerdata.DeleteTableDataResponse
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {tabletmanagerdata.DeleteTableDataResponse} DeleteTableDataResponse
+ */
+ DeleteTableDataResponse.fromObject = function fromObject(object) {
+ if (object instanceof $root.tabletmanagerdata.DeleteTableDataResponse)
+ return object;
+ return new $root.tabletmanagerdata.DeleteTableDataResponse();
+ };
+
+ /**
+ * Creates a plain object from a DeleteTableDataResponse message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof tabletmanagerdata.DeleteTableDataResponse
+ * @static
+ * @param {tabletmanagerdata.DeleteTableDataResponse} message DeleteTableDataResponse
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ DeleteTableDataResponse.toObject = function toObject() {
+ return {};
+ };
+
+ /**
+ * Converts this DeleteTableDataResponse to JSON.
+ * @function toJSON
+ * @memberof tabletmanagerdata.DeleteTableDataResponse
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ DeleteTableDataResponse.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for DeleteTableDataResponse
+ * @function getTypeUrl
+ * @memberof tabletmanagerdata.DeleteTableDataResponse
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ DeleteTableDataResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/tabletmanagerdata.DeleteTableDataResponse";
+ };
+
+ return DeleteTableDataResponse;
+ })();
+
tabletmanagerdata.DeleteVReplicationWorkflowRequest = (function() {
/**
@@ -79138,6 +83770,506 @@ export const tabletmanagerdata = $root.tabletmanagerdata = (() => {
return GetThrottlerStatusResponse;
})();
+ tabletmanagerdata.ChangeTagsRequest = (function() {
+
+ /**
+ * Properties of a ChangeTagsRequest.
+ * @memberof tabletmanagerdata
+ * @interface IChangeTagsRequest
+ * @property {Object.|null} [tags] ChangeTagsRequest tags
+ * @property {boolean|null} [replace] ChangeTagsRequest replace
+ */
+
+ /**
+ * Constructs a new ChangeTagsRequest.
+ * @memberof tabletmanagerdata
+ * @classdesc Represents a ChangeTagsRequest.
+ * @implements IChangeTagsRequest
+ * @constructor
+ * @param {tabletmanagerdata.IChangeTagsRequest=} [properties] Properties to set
+ */
+ function ChangeTagsRequest(properties) {
+ this.tags = {};
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * ChangeTagsRequest tags.
+ * @member {Object.} tags
+ * @memberof tabletmanagerdata.ChangeTagsRequest
+ * @instance
+ */
+ ChangeTagsRequest.prototype.tags = $util.emptyObject;
+
+ /**
+ * ChangeTagsRequest replace.
+ * @member {boolean} replace
+ * @memberof tabletmanagerdata.ChangeTagsRequest
+ * @instance
+ */
+ ChangeTagsRequest.prototype.replace = false;
+
+ /**
+ * Creates a new ChangeTagsRequest instance using the specified properties.
+ * @function create
+ * @memberof tabletmanagerdata.ChangeTagsRequest
+ * @static
+ * @param {tabletmanagerdata.IChangeTagsRequest=} [properties] Properties to set
+ * @returns {tabletmanagerdata.ChangeTagsRequest} ChangeTagsRequest instance
+ */
+ ChangeTagsRequest.create = function create(properties) {
+ return new ChangeTagsRequest(properties);
+ };
+
+ /**
+ * Encodes the specified ChangeTagsRequest message. Does not implicitly {@link tabletmanagerdata.ChangeTagsRequest.verify|verify} messages.
+ * @function encode
+ * @memberof tabletmanagerdata.ChangeTagsRequest
+ * @static
+ * @param {tabletmanagerdata.IChangeTagsRequest} message ChangeTagsRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ ChangeTagsRequest.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.tags != null && Object.hasOwnProperty.call(message, "tags"))
+ for (let keys = Object.keys(message.tags), i = 0; i < keys.length; ++i)
+ writer.uint32(/* id 1, wireType 2 =*/10).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 2 =*/18).string(message.tags[keys[i]]).ldelim();
+ if (message.replace != null && Object.hasOwnProperty.call(message, "replace"))
+ writer.uint32(/* id 2, wireType 0 =*/16).bool(message.replace);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified ChangeTagsRequest message, length delimited. Does not implicitly {@link tabletmanagerdata.ChangeTagsRequest.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof tabletmanagerdata.ChangeTagsRequest
+ * @static
+ * @param {tabletmanagerdata.IChangeTagsRequest} message ChangeTagsRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ ChangeTagsRequest.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a ChangeTagsRequest message from the specified reader or buffer.
+ * @function decode
+ * @memberof tabletmanagerdata.ChangeTagsRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {tabletmanagerdata.ChangeTagsRequest} ChangeTagsRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ ChangeTagsRequest.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.tabletmanagerdata.ChangeTagsRequest(), key, value;
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ if (message.tags === $util.emptyObject)
+ message.tags = {};
+ let end2 = reader.uint32() + reader.pos;
+ key = "";
+ value = "";
+ while (reader.pos < end2) {
+ let tag2 = reader.uint32();
+ switch (tag2 >>> 3) {
+ case 1:
+ key = reader.string();
+ break;
+ case 2:
+ value = reader.string();
+ break;
+ default:
+ reader.skipType(tag2 & 7);
+ break;
+ }
+ }
+ message.tags[key] = value;
+ break;
+ }
+ case 2: {
+ message.replace = reader.bool();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a ChangeTagsRequest message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof tabletmanagerdata.ChangeTagsRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {tabletmanagerdata.ChangeTagsRequest} ChangeTagsRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ ChangeTagsRequest.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a ChangeTagsRequest message.
+ * @function verify
+ * @memberof tabletmanagerdata.ChangeTagsRequest
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ ChangeTagsRequest.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.tags != null && message.hasOwnProperty("tags")) {
+ if (!$util.isObject(message.tags))
+ return "tags: object expected";
+ let key = Object.keys(message.tags);
+ for (let i = 0; i < key.length; ++i)
+ if (!$util.isString(message.tags[key[i]]))
+ return "tags: string{k:string} expected";
+ }
+ if (message.replace != null && message.hasOwnProperty("replace"))
+ if (typeof message.replace !== "boolean")
+ return "replace: boolean expected";
+ return null;
+ };
+
+ /**
+ * Creates a ChangeTagsRequest message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof tabletmanagerdata.ChangeTagsRequest
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {tabletmanagerdata.ChangeTagsRequest} ChangeTagsRequest
+ */
+ ChangeTagsRequest.fromObject = function fromObject(object) {
+ if (object instanceof $root.tabletmanagerdata.ChangeTagsRequest)
+ return object;
+ let message = new $root.tabletmanagerdata.ChangeTagsRequest();
+ if (object.tags) {
+ if (typeof object.tags !== "object")
+ throw TypeError(".tabletmanagerdata.ChangeTagsRequest.tags: object expected");
+ message.tags = {};
+ for (let keys = Object.keys(object.tags), i = 0; i < keys.length; ++i)
+ message.tags[keys[i]] = String(object.tags[keys[i]]);
+ }
+ if (object.replace != null)
+ message.replace = Boolean(object.replace);
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a ChangeTagsRequest message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof tabletmanagerdata.ChangeTagsRequest
+ * @static
+ * @param {tabletmanagerdata.ChangeTagsRequest} message ChangeTagsRequest
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ ChangeTagsRequest.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.objects || options.defaults)
+ object.tags = {};
+ if (options.defaults)
+ object.replace = false;
+ let keys2;
+ if (message.tags && (keys2 = Object.keys(message.tags)).length) {
+ object.tags = {};
+ for (let j = 0; j < keys2.length; ++j)
+ object.tags[keys2[j]] = message.tags[keys2[j]];
+ }
+ if (message.replace != null && message.hasOwnProperty("replace"))
+ object.replace = message.replace;
+ return object;
+ };
+
+ /**
+ * Converts this ChangeTagsRequest to JSON.
+ * @function toJSON
+ * @memberof tabletmanagerdata.ChangeTagsRequest
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ ChangeTagsRequest.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for ChangeTagsRequest
+ * @function getTypeUrl
+ * @memberof tabletmanagerdata.ChangeTagsRequest
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ ChangeTagsRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/tabletmanagerdata.ChangeTagsRequest";
+ };
+
+ return ChangeTagsRequest;
+ })();
+
+ tabletmanagerdata.ChangeTagsResponse = (function() {
+
+ /**
+ * Properties of a ChangeTagsResponse.
+ * @memberof tabletmanagerdata
+ * @interface IChangeTagsResponse
+ * @property {Object.|null} [tags] ChangeTagsResponse tags
+ */
+
+ /**
+ * Constructs a new ChangeTagsResponse.
+ * @memberof tabletmanagerdata
+ * @classdesc Represents a ChangeTagsResponse.
+ * @implements IChangeTagsResponse
+ * @constructor
+ * @param {tabletmanagerdata.IChangeTagsResponse=} [properties] Properties to set
+ */
+ function ChangeTagsResponse(properties) {
+ this.tags = {};
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * ChangeTagsResponse tags.
+ * @member {Object.} tags
+ * @memberof tabletmanagerdata.ChangeTagsResponse
+ * @instance
+ */
+ ChangeTagsResponse.prototype.tags = $util.emptyObject;
+
+ /**
+ * Creates a new ChangeTagsResponse instance using the specified properties.
+ * @function create
+ * @memberof tabletmanagerdata.ChangeTagsResponse
+ * @static
+ * @param {tabletmanagerdata.IChangeTagsResponse=} [properties] Properties to set
+ * @returns {tabletmanagerdata.ChangeTagsResponse} ChangeTagsResponse instance
+ */
+ ChangeTagsResponse.create = function create(properties) {
+ return new ChangeTagsResponse(properties);
+ };
+
+ /**
+ * Encodes the specified ChangeTagsResponse message. Does not implicitly {@link tabletmanagerdata.ChangeTagsResponse.verify|verify} messages.
+ * @function encode
+ * @memberof tabletmanagerdata.ChangeTagsResponse
+ * @static
+ * @param {tabletmanagerdata.IChangeTagsResponse} message ChangeTagsResponse message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ ChangeTagsResponse.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.tags != null && Object.hasOwnProperty.call(message, "tags"))
+ for (let keys = Object.keys(message.tags), i = 0; i < keys.length; ++i)
+ writer.uint32(/* id 1, wireType 2 =*/10).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 2 =*/18).string(message.tags[keys[i]]).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified ChangeTagsResponse message, length delimited. Does not implicitly {@link tabletmanagerdata.ChangeTagsResponse.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof tabletmanagerdata.ChangeTagsResponse
+ * @static
+ * @param {tabletmanagerdata.IChangeTagsResponse} message ChangeTagsResponse message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ ChangeTagsResponse.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a ChangeTagsResponse message from the specified reader or buffer.
+ * @function decode
+ * @memberof tabletmanagerdata.ChangeTagsResponse
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {tabletmanagerdata.ChangeTagsResponse} ChangeTagsResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ ChangeTagsResponse.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.tabletmanagerdata.ChangeTagsResponse(), key, value;
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ if (message.tags === $util.emptyObject)
+ message.tags = {};
+ let end2 = reader.uint32() + reader.pos;
+ key = "";
+ value = "";
+ while (reader.pos < end2) {
+ let tag2 = reader.uint32();
+ switch (tag2 >>> 3) {
+ case 1:
+ key = reader.string();
+ break;
+ case 2:
+ value = reader.string();
+ break;
+ default:
+ reader.skipType(tag2 & 7);
+ break;
+ }
+ }
+ message.tags[key] = value;
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a ChangeTagsResponse message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof tabletmanagerdata.ChangeTagsResponse
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {tabletmanagerdata.ChangeTagsResponse} ChangeTagsResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ ChangeTagsResponse.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a ChangeTagsResponse message.
+ * @function verify
+ * @memberof tabletmanagerdata.ChangeTagsResponse
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ ChangeTagsResponse.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.tags != null && message.hasOwnProperty("tags")) {
+ if (!$util.isObject(message.tags))
+ return "tags: object expected";
+ let key = Object.keys(message.tags);
+ for (let i = 0; i < key.length; ++i)
+ if (!$util.isString(message.tags[key[i]]))
+ return "tags: string{k:string} expected";
+ }
+ return null;
+ };
+
+ /**
+ * Creates a ChangeTagsResponse message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof tabletmanagerdata.ChangeTagsResponse
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {tabletmanagerdata.ChangeTagsResponse} ChangeTagsResponse
+ */
+ ChangeTagsResponse.fromObject = function fromObject(object) {
+ if (object instanceof $root.tabletmanagerdata.ChangeTagsResponse)
+ return object;
+ let message = new $root.tabletmanagerdata.ChangeTagsResponse();
+ if (object.tags) {
+ if (typeof object.tags !== "object")
+ throw TypeError(".tabletmanagerdata.ChangeTagsResponse.tags: object expected");
+ message.tags = {};
+ for (let keys = Object.keys(object.tags), i = 0; i < keys.length; ++i)
+ message.tags[keys[i]] = String(object.tags[keys[i]]);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a ChangeTagsResponse message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof tabletmanagerdata.ChangeTagsResponse
+ * @static
+ * @param {tabletmanagerdata.ChangeTagsResponse} message ChangeTagsResponse
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ ChangeTagsResponse.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.objects || options.defaults)
+ object.tags = {};
+ let keys2;
+ if (message.tags && (keys2 = Object.keys(message.tags)).length) {
+ object.tags = {};
+ for (let j = 0; j < keys2.length; ++j)
+ object.tags[keys2[j]] = message.tags[keys2[j]];
+ }
+ return object;
+ };
+
+ /**
+ * Converts this ChangeTagsResponse to JSON.
+ * @function toJSON
+ * @memberof tabletmanagerdata.ChangeTagsResponse
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ ChangeTagsResponse.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for ChangeTagsResponse
+ * @function getTypeUrl
+ * @memberof tabletmanagerdata.ChangeTagsResponse
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ ChangeTagsResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/tabletmanagerdata.ChangeTagsResponse";
+ };
+
+ return ChangeTagsResponse;
+ })();
+
return tabletmanagerdata;
})();
@@ -100334,12 +105466,29 @@ export const query = $root.query = (() => {
return StartCommitRequest;
})();
+ /**
+ * StartCommitState enum.
+ * @name query.StartCommitState
+ * @enum {number}
+ * @property {number} Unknown=0 Unknown value
+ * @property {number} Fail=1 Fail value
+ * @property {number} Success=2 Success value
+ */
+ query.StartCommitState = (function() {
+ const valuesById = {}, values = Object.create(valuesById);
+ values[valuesById[0] = "Unknown"] = 0;
+ values[valuesById[1] = "Fail"] = 1;
+ values[valuesById[2] = "Success"] = 2;
+ return values;
+ })();
+
query.StartCommitResponse = (function() {
/**
* Properties of a StartCommitResponse.
* @memberof query
* @interface IStartCommitResponse
+ * @property {query.StartCommitState|null} [state] StartCommitResponse state
*/
/**
@@ -100357,6 +105506,14 @@ export const query = $root.query = (() => {
this[keys[i]] = properties[keys[i]];
}
+ /**
+ * StartCommitResponse state.
+ * @member {query.StartCommitState} state
+ * @memberof query.StartCommitResponse
+ * @instance
+ */
+ StartCommitResponse.prototype.state = 0;
+
/**
* Creates a new StartCommitResponse instance using the specified properties.
* @function create
@@ -100381,6 +105538,8 @@ export const query = $root.query = (() => {
StartCommitResponse.encode = function encode(message, writer) {
if (!writer)
writer = $Writer.create();
+ if (message.state != null && Object.hasOwnProperty.call(message, "state"))
+ writer.uint32(/* id 1, wireType 0 =*/8).int32(message.state);
return writer;
};
@@ -100415,6 +105574,10 @@ export const query = $root.query = (() => {
while (reader.pos < end) {
let tag = reader.uint32();
switch (tag >>> 3) {
+ case 1: {
+ message.state = reader.int32();
+ break;
+ }
default:
reader.skipType(tag & 7);
break;
@@ -100450,6 +105613,15 @@ export const query = $root.query = (() => {
StartCommitResponse.verify = function verify(message) {
if (typeof message !== "object" || message === null)
return "object expected";
+ if (message.state != null && message.hasOwnProperty("state"))
+ switch (message.state) {
+ default:
+ return "state: enum value expected";
+ case 0:
+ case 1:
+ case 2:
+ break;
+ }
return null;
};
@@ -100464,7 +105636,28 @@ export const query = $root.query = (() => {
StartCommitResponse.fromObject = function fromObject(object) {
if (object instanceof $root.query.StartCommitResponse)
return object;
- return new $root.query.StartCommitResponse();
+ let message = new $root.query.StartCommitResponse();
+ switch (object.state) {
+ default:
+ if (typeof object.state === "number") {
+ message.state = object.state;
+ break;
+ }
+ break;
+ case "Unknown":
+ case 0:
+ message.state = 0;
+ break;
+ case "Fail":
+ case 1:
+ message.state = 1;
+ break;
+ case "Success":
+ case 2:
+ message.state = 2;
+ break;
+ }
+ return message;
};
/**
@@ -100476,8 +105669,15 @@ export const query = $root.query = (() => {
* @param {$protobuf.IConversionOptions} [options] Conversion options
* @returns {Object.} Plain object
*/
- StartCommitResponse.toObject = function toObject() {
- return {};
+ StartCommitResponse.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults)
+ object.state = options.enums === String ? "Unknown" : 0;
+ if (message.state != null && message.hasOwnProperty("state"))
+ object.state = options.enums === String ? $root.query.StartCommitState[message.state] === undefined ? message.state : $root.query.StartCommitState[message.state] : message.state;
+ return object;
};
/**
@@ -111119,6 +116319,7 @@ export const replicationdata = $root.replicationdata = (() => {
* @property {boolean|null} [has_replication_filters] Status has_replication_filters
* @property {boolean|null} [ssl_allowed] Status ssl_allowed
* @property {boolean|null} [replication_lag_unknown] Status replication_lag_unknown
+ * @property {boolean|null} [backup_running] Status backup_running
*/
/**
@@ -111312,6 +116513,14 @@ export const replicationdata = $root.replicationdata = (() => {
*/
Status.prototype.replication_lag_unknown = false;
+ /**
+ * Status backup_running.
+ * @member {boolean} backup_running
+ * @memberof replicationdata.Status
+ * @instance
+ */
+ Status.prototype.backup_running = false;
+
/**
* Creates a new Status instance using the specified properties.
* @function create
@@ -111380,6 +116589,8 @@ export const replicationdata = $root.replicationdata = (() => {
writer.uint32(/* id 23, wireType 0 =*/184).bool(message.ssl_allowed);
if (message.replication_lag_unknown != null && Object.hasOwnProperty.call(message, "replication_lag_unknown"))
writer.uint32(/* id 24, wireType 0 =*/192).bool(message.replication_lag_unknown);
+ if (message.backup_running != null && Object.hasOwnProperty.call(message, "backup_running"))
+ writer.uint32(/* id 25, wireType 0 =*/200).bool(message.backup_running);
return writer;
};
@@ -111502,6 +116713,10 @@ export const replicationdata = $root.replicationdata = (() => {
message.replication_lag_unknown = reader.bool();
break;
}
+ case 25: {
+ message.backup_running = reader.bool();
+ break;
+ }
default:
reader.skipType(tag & 7);
break;
@@ -111603,6 +116818,9 @@ export const replicationdata = $root.replicationdata = (() => {
if (message.replication_lag_unknown != null && message.hasOwnProperty("replication_lag_unknown"))
if (typeof message.replication_lag_unknown !== "boolean")
return "replication_lag_unknown: boolean expected";
+ if (message.backup_running != null && message.hasOwnProperty("backup_running"))
+ if (typeof message.backup_running !== "boolean")
+ return "backup_running: boolean expected";
return null;
};
@@ -111662,6 +116880,8 @@ export const replicationdata = $root.replicationdata = (() => {
message.ssl_allowed = Boolean(object.ssl_allowed);
if (object.replication_lag_unknown != null)
message.replication_lag_unknown = Boolean(object.replication_lag_unknown);
+ if (object.backup_running != null)
+ message.backup_running = Boolean(object.backup_running);
return message;
};
@@ -111701,6 +116921,7 @@ export const replicationdata = $root.replicationdata = (() => {
object.has_replication_filters = false;
object.ssl_allowed = false;
object.replication_lag_unknown = false;
+ object.backup_running = false;
}
if (message.position != null && message.hasOwnProperty("position"))
object.position = message.position;
@@ -111746,6 +116967,8 @@ export const replicationdata = $root.replicationdata = (() => {
object.ssl_allowed = message.ssl_allowed;
if (message.replication_lag_unknown != null && message.hasOwnProperty("replication_lag_unknown"))
object.replication_lag_unknown = message.replication_lag_unknown;
+ if (message.backup_running != null && message.hasOwnProperty("backup_running"))
+ object.backup_running = message.backup_running;
return object;
};
@@ -112264,6 +117487,7 @@ export const replicationdata = $root.replicationdata = (() => {
* @interface IPrimaryStatus
* @property {string|null} [position] PrimaryStatus position
* @property {string|null} [file_position] PrimaryStatus file_position
+ * @property {string|null} [server_uuid] PrimaryStatus server_uuid
*/
/**
@@ -112297,6 +117521,14 @@ export const replicationdata = $root.replicationdata = (() => {
*/
PrimaryStatus.prototype.file_position = "";
+ /**
+ * PrimaryStatus server_uuid.
+ * @member {string} server_uuid
+ * @memberof replicationdata.PrimaryStatus
+ * @instance
+ */
+ PrimaryStatus.prototype.server_uuid = "";
+
/**
* Creates a new PrimaryStatus instance using the specified properties.
* @function create
@@ -112325,6 +117557,8 @@ export const replicationdata = $root.replicationdata = (() => {
writer.uint32(/* id 1, wireType 2 =*/10).string(message.position);
if (message.file_position != null && Object.hasOwnProperty.call(message, "file_position"))
writer.uint32(/* id 2, wireType 2 =*/18).string(message.file_position);
+ if (message.server_uuid != null && Object.hasOwnProperty.call(message, "server_uuid"))
+ writer.uint32(/* id 3, wireType 2 =*/26).string(message.server_uuid);
return writer;
};
@@ -112367,6 +117601,10 @@ export const replicationdata = $root.replicationdata = (() => {
message.file_position = reader.string();
break;
}
+ case 3: {
+ message.server_uuid = reader.string();
+ break;
+ }
default:
reader.skipType(tag & 7);
break;
@@ -112408,6 +117646,9 @@ export const replicationdata = $root.replicationdata = (() => {
if (message.file_position != null && message.hasOwnProperty("file_position"))
if (!$util.isString(message.file_position))
return "file_position: string expected";
+ if (message.server_uuid != null && message.hasOwnProperty("server_uuid"))
+ if (!$util.isString(message.server_uuid))
+ return "server_uuid: string expected";
return null;
};
@@ -112427,6 +117668,8 @@ export const replicationdata = $root.replicationdata = (() => {
message.position = String(object.position);
if (object.file_position != null)
message.file_position = String(object.file_position);
+ if (object.server_uuid != null)
+ message.server_uuid = String(object.server_uuid);
return message;
};
@@ -112446,11 +117689,14 @@ export const replicationdata = $root.replicationdata = (() => {
if (options.defaults) {
object.position = "";
object.file_position = "";
+ object.server_uuid = "";
}
if (message.position != null && message.hasOwnProperty("position"))
object.position = message.position;
if (message.file_position != null && message.hasOwnProperty("file_position"))
object.file_position = message.file_position;
+ if (message.server_uuid != null && message.hasOwnProperty("server_uuid"))
+ object.server_uuid = message.server_uuid;
return object;
};
@@ -121745,6 +126991,22 @@ export const vtctldata = $root.vtctldata = (() => {
return Shard;
})();
+ /**
+ * ShardedAutoIncrementHandling enum.
+ * @name vtctldata.ShardedAutoIncrementHandling
+ * @enum {number}
+ * @property {number} LEAVE=0 LEAVE value
+ * @property {number} REMOVE=1 REMOVE value
+ * @property {number} REPLACE=2 REPLACE value
+ */
+ vtctldata.ShardedAutoIncrementHandling = (function() {
+ const valuesById = {}, values = Object.create(valuesById);
+ values[valuesById[0] = "LEAVE"] = 0;
+ values[valuesById[1] = "REMOVE"] = 1;
+ values[valuesById[2] = "REPLACE"] = 2;
+ return values;
+ })();
+
vtctldata.WorkflowOptions = (function() {
/**
@@ -121752,9 +127014,10 @@ export const vtctldata = $root.vtctldata = (() => {
* @memberof vtctldata
* @interface IWorkflowOptions
* @property {string|null} [tenant_id] WorkflowOptions tenant_id
- * @property {boolean|null} [strip_sharded_auto_increment] WorkflowOptions strip_sharded_auto_increment
+ * @property {vtctldata.ShardedAutoIncrementHandling|null} [sharded_auto_increment_handling] WorkflowOptions sharded_auto_increment_handling
* @property {Array.|null} [shards] WorkflowOptions shards
* @property {Object.|null} [config] WorkflowOptions config
+ * @property {string|null} [global_keyspace] WorkflowOptions global_keyspace
*/
/**
@@ -121783,12 +127046,12 @@ export const vtctldata = $root.vtctldata = (() => {
WorkflowOptions.prototype.tenant_id = "";
/**
- * WorkflowOptions strip_sharded_auto_increment.
- * @member {boolean} strip_sharded_auto_increment
+ * WorkflowOptions sharded_auto_increment_handling.
+ * @member {vtctldata.ShardedAutoIncrementHandling} sharded_auto_increment_handling
* @memberof vtctldata.WorkflowOptions
* @instance
*/
- WorkflowOptions.prototype.strip_sharded_auto_increment = false;
+ WorkflowOptions.prototype.sharded_auto_increment_handling = 0;
/**
* WorkflowOptions shards.
@@ -121806,6 +127069,14 @@ export const vtctldata = $root.vtctldata = (() => {
*/
WorkflowOptions.prototype.config = $util.emptyObject;
+ /**
+ * WorkflowOptions global_keyspace.
+ * @member {string} global_keyspace
+ * @memberof vtctldata.WorkflowOptions
+ * @instance
+ */
+ WorkflowOptions.prototype.global_keyspace = "";
+
/**
* Creates a new WorkflowOptions instance using the specified properties.
* @function create
@@ -121832,14 +127103,16 @@ export const vtctldata = $root.vtctldata = (() => {
writer = $Writer.create();
if (message.tenant_id != null && Object.hasOwnProperty.call(message, "tenant_id"))
writer.uint32(/* id 1, wireType 2 =*/10).string(message.tenant_id);
- if (message.strip_sharded_auto_increment != null && Object.hasOwnProperty.call(message, "strip_sharded_auto_increment"))
- writer.uint32(/* id 2, wireType 0 =*/16).bool(message.strip_sharded_auto_increment);
+ if (message.sharded_auto_increment_handling != null && Object.hasOwnProperty.call(message, "sharded_auto_increment_handling"))
+ writer.uint32(/* id 2, wireType 0 =*/16).int32(message.sharded_auto_increment_handling);
if (message.shards != null && message.shards.length)
for (let i = 0; i < message.shards.length; ++i)
writer.uint32(/* id 3, wireType 2 =*/26).string(message.shards[i]);
if (message.config != null && Object.hasOwnProperty.call(message, "config"))
for (let keys = Object.keys(message.config), i = 0; i < keys.length; ++i)
writer.uint32(/* id 4, wireType 2 =*/34).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 2 =*/18).string(message.config[keys[i]]).ldelim();
+ if (message.global_keyspace != null && Object.hasOwnProperty.call(message, "global_keyspace"))
+ writer.uint32(/* id 5, wireType 2 =*/42).string(message.global_keyspace);
return writer;
};
@@ -121879,7 +127152,7 @@ export const vtctldata = $root.vtctldata = (() => {
break;
}
case 2: {
- message.strip_sharded_auto_increment = reader.bool();
+ message.sharded_auto_increment_handling = reader.int32();
break;
}
case 3: {
@@ -121911,6 +127184,10 @@ export const vtctldata = $root.vtctldata = (() => {
message.config[key] = value;
break;
}
+ case 5: {
+ message.global_keyspace = reader.string();
+ break;
+ }
default:
reader.skipType(tag & 7);
break;
@@ -121949,9 +127226,15 @@ export const vtctldata = $root.vtctldata = (() => {
if (message.tenant_id != null && message.hasOwnProperty("tenant_id"))
if (!$util.isString(message.tenant_id))
return "tenant_id: string expected";
- if (message.strip_sharded_auto_increment != null && message.hasOwnProperty("strip_sharded_auto_increment"))
- if (typeof message.strip_sharded_auto_increment !== "boolean")
- return "strip_sharded_auto_increment: boolean expected";
+ if (message.sharded_auto_increment_handling != null && message.hasOwnProperty("sharded_auto_increment_handling"))
+ switch (message.sharded_auto_increment_handling) {
+ default:
+ return "sharded_auto_increment_handling: enum value expected";
+ case 0:
+ case 1:
+ case 2:
+ break;
+ }
if (message.shards != null && message.hasOwnProperty("shards")) {
if (!Array.isArray(message.shards))
return "shards: array expected";
@@ -121967,6 +127250,9 @@ export const vtctldata = $root.vtctldata = (() => {
if (!$util.isString(message.config[key[i]]))
return "config: string{k:string} expected";
}
+ if (message.global_keyspace != null && message.hasOwnProperty("global_keyspace"))
+ if (!$util.isString(message.global_keyspace))
+ return "global_keyspace: string expected";
return null;
};
@@ -121984,8 +127270,26 @@ export const vtctldata = $root.vtctldata = (() => {
let message = new $root.vtctldata.WorkflowOptions();
if (object.tenant_id != null)
message.tenant_id = String(object.tenant_id);
- if (object.strip_sharded_auto_increment != null)
- message.strip_sharded_auto_increment = Boolean(object.strip_sharded_auto_increment);
+ switch (object.sharded_auto_increment_handling) {
+ default:
+ if (typeof object.sharded_auto_increment_handling === "number") {
+ message.sharded_auto_increment_handling = object.sharded_auto_increment_handling;
+ break;
+ }
+ break;
+ case "LEAVE":
+ case 0:
+ message.sharded_auto_increment_handling = 0;
+ break;
+ case "REMOVE":
+ case 1:
+ message.sharded_auto_increment_handling = 1;
+ break;
+ case "REPLACE":
+ case 2:
+ message.sharded_auto_increment_handling = 2;
+ break;
+ }
if (object.shards) {
if (!Array.isArray(object.shards))
throw TypeError(".vtctldata.WorkflowOptions.shards: array expected");
@@ -122000,6 +127304,8 @@ export const vtctldata = $root.vtctldata = (() => {
for (let keys = Object.keys(object.config), i = 0; i < keys.length; ++i)
message.config[keys[i]] = String(object.config[keys[i]]);
}
+ if (object.global_keyspace != null)
+ message.global_keyspace = String(object.global_keyspace);
return message;
};
@@ -122022,12 +127328,13 @@ export const vtctldata = $root.vtctldata = (() => {
object.config = {};
if (options.defaults) {
object.tenant_id = "";
- object.strip_sharded_auto_increment = false;
+ object.sharded_auto_increment_handling = options.enums === String ? "LEAVE" : 0;
+ object.global_keyspace = "";
}
if (message.tenant_id != null && message.hasOwnProperty("tenant_id"))
object.tenant_id = message.tenant_id;
- if (message.strip_sharded_auto_increment != null && message.hasOwnProperty("strip_sharded_auto_increment"))
- object.strip_sharded_auto_increment = message.strip_sharded_auto_increment;
+ if (message.sharded_auto_increment_handling != null && message.hasOwnProperty("sharded_auto_increment_handling"))
+ object.sharded_auto_increment_handling = options.enums === String ? $root.vtctldata.ShardedAutoIncrementHandling[message.sharded_auto_increment_handling] === undefined ? message.sharded_auto_increment_handling : $root.vtctldata.ShardedAutoIncrementHandling[message.sharded_auto_increment_handling] : message.sharded_auto_increment_handling;
if (message.shards && message.shards.length) {
object.shards = [];
for (let j = 0; j < message.shards.length; ++j)
@@ -122039,6 +127346,8 @@ export const vtctldata = $root.vtctldata = (() => {
for (let j = 0; j < keys2.length; ++j)
object.config[keys2[j]] = message.config[keys2[j]];
}
+ if (message.global_keyspace != null && message.hasOwnProperty("global_keyspace"))
+ object.global_keyspace = message.global_keyspace;
return object;
};
@@ -130086,6 +135395,593 @@ export const vtctldata = $root.vtctldata = (() => {
return CancelSchemaMigrationResponse;
})();
+ vtctldata.ChangeTabletTagsRequest = (function() {
+
+ /**
+ * Properties of a ChangeTabletTagsRequest.
+ * @memberof vtctldata
+ * @interface IChangeTabletTagsRequest
+ * @property {topodata.ITabletAlias|null} [tablet_alias] ChangeTabletTagsRequest tablet_alias
+ * @property {Object.|null} [tags] ChangeTabletTagsRequest tags
+ * @property {boolean|null} [replace] ChangeTabletTagsRequest replace
+ */
+
+ /**
+ * Constructs a new ChangeTabletTagsRequest.
+ * @memberof vtctldata
+ * @classdesc Represents a ChangeTabletTagsRequest.
+ * @implements IChangeTabletTagsRequest
+ * @constructor
+ * @param {vtctldata.IChangeTabletTagsRequest=} [properties] Properties to set
+ */
+ function ChangeTabletTagsRequest(properties) {
+ this.tags = {};
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * ChangeTabletTagsRequest tablet_alias.
+ * @member {topodata.ITabletAlias|null|undefined} tablet_alias
+ * @memberof vtctldata.ChangeTabletTagsRequest
+ * @instance
+ */
+ ChangeTabletTagsRequest.prototype.tablet_alias = null;
+
+ /**
+ * ChangeTabletTagsRequest tags.
+ * @member {Object.} tags
+ * @memberof vtctldata.ChangeTabletTagsRequest
+ * @instance
+ */
+ ChangeTabletTagsRequest.prototype.tags = $util.emptyObject;
+
+ /**
+ * ChangeTabletTagsRequest replace.
+ * @member {boolean} replace
+ * @memberof vtctldata.ChangeTabletTagsRequest
+ * @instance
+ */
+ ChangeTabletTagsRequest.prototype.replace = false;
+
+ /**
+ * Creates a new ChangeTabletTagsRequest instance using the specified properties.
+ * @function create
+ * @memberof vtctldata.ChangeTabletTagsRequest
+ * @static
+ * @param {vtctldata.IChangeTabletTagsRequest=} [properties] Properties to set
+ * @returns {vtctldata.ChangeTabletTagsRequest} ChangeTabletTagsRequest instance
+ */
+ ChangeTabletTagsRequest.create = function create(properties) {
+ return new ChangeTabletTagsRequest(properties);
+ };
+
+ /**
+ * Encodes the specified ChangeTabletTagsRequest message. Does not implicitly {@link vtctldata.ChangeTabletTagsRequest.verify|verify} messages.
+ * @function encode
+ * @memberof vtctldata.ChangeTabletTagsRequest
+ * @static
+ * @param {vtctldata.IChangeTabletTagsRequest} message ChangeTabletTagsRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ ChangeTabletTagsRequest.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.tablet_alias != null && Object.hasOwnProperty.call(message, "tablet_alias"))
+ $root.topodata.TabletAlias.encode(message.tablet_alias, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+ if (message.tags != null && Object.hasOwnProperty.call(message, "tags"))
+ for (let keys = Object.keys(message.tags), i = 0; i < keys.length; ++i)
+ writer.uint32(/* id 2, wireType 2 =*/18).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 2 =*/18).string(message.tags[keys[i]]).ldelim();
+ if (message.replace != null && Object.hasOwnProperty.call(message, "replace"))
+ writer.uint32(/* id 3, wireType 0 =*/24).bool(message.replace);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified ChangeTabletTagsRequest message, length delimited. Does not implicitly {@link vtctldata.ChangeTabletTagsRequest.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof vtctldata.ChangeTabletTagsRequest
+ * @static
+ * @param {vtctldata.IChangeTabletTagsRequest} message ChangeTabletTagsRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ ChangeTabletTagsRequest.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a ChangeTabletTagsRequest message from the specified reader or buffer.
+ * @function decode
+ * @memberof vtctldata.ChangeTabletTagsRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {vtctldata.ChangeTabletTagsRequest} ChangeTabletTagsRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ ChangeTabletTagsRequest.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.vtctldata.ChangeTabletTagsRequest(), key, value;
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.tablet_alias = $root.topodata.TabletAlias.decode(reader, reader.uint32());
+ break;
+ }
+ case 2: {
+ if (message.tags === $util.emptyObject)
+ message.tags = {};
+ let end2 = reader.uint32() + reader.pos;
+ key = "";
+ value = "";
+ while (reader.pos < end2) {
+ let tag2 = reader.uint32();
+ switch (tag2 >>> 3) {
+ case 1:
+ key = reader.string();
+ break;
+ case 2:
+ value = reader.string();
+ break;
+ default:
+ reader.skipType(tag2 & 7);
+ break;
+ }
+ }
+ message.tags[key] = value;
+ break;
+ }
+ case 3: {
+ message.replace = reader.bool();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a ChangeTabletTagsRequest message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof vtctldata.ChangeTabletTagsRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {vtctldata.ChangeTabletTagsRequest} ChangeTabletTagsRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ ChangeTabletTagsRequest.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a ChangeTabletTagsRequest message.
+ * @function verify
+ * @memberof vtctldata.ChangeTabletTagsRequest
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ ChangeTabletTagsRequest.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.tablet_alias != null && message.hasOwnProperty("tablet_alias")) {
+ let error = $root.topodata.TabletAlias.verify(message.tablet_alias);
+ if (error)
+ return "tablet_alias." + error;
+ }
+ if (message.tags != null && message.hasOwnProperty("tags")) {
+ if (!$util.isObject(message.tags))
+ return "tags: object expected";
+ let key = Object.keys(message.tags);
+ for (let i = 0; i < key.length; ++i)
+ if (!$util.isString(message.tags[key[i]]))
+ return "tags: string{k:string} expected";
+ }
+ if (message.replace != null && message.hasOwnProperty("replace"))
+ if (typeof message.replace !== "boolean")
+ return "replace: boolean expected";
+ return null;
+ };
+
+ /**
+ * Creates a ChangeTabletTagsRequest message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof vtctldata.ChangeTabletTagsRequest
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {vtctldata.ChangeTabletTagsRequest} ChangeTabletTagsRequest
+ */
+ ChangeTabletTagsRequest.fromObject = function fromObject(object) {
+ if (object instanceof $root.vtctldata.ChangeTabletTagsRequest)
+ return object;
+ let message = new $root.vtctldata.ChangeTabletTagsRequest();
+ if (object.tablet_alias != null) {
+ if (typeof object.tablet_alias !== "object")
+ throw TypeError(".vtctldata.ChangeTabletTagsRequest.tablet_alias: object expected");
+ message.tablet_alias = $root.topodata.TabletAlias.fromObject(object.tablet_alias);
+ }
+ if (object.tags) {
+ if (typeof object.tags !== "object")
+ throw TypeError(".vtctldata.ChangeTabletTagsRequest.tags: object expected");
+ message.tags = {};
+ for (let keys = Object.keys(object.tags), i = 0; i < keys.length; ++i)
+ message.tags[keys[i]] = String(object.tags[keys[i]]);
+ }
+ if (object.replace != null)
+ message.replace = Boolean(object.replace);
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a ChangeTabletTagsRequest message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof vtctldata.ChangeTabletTagsRequest
+ * @static
+ * @param {vtctldata.ChangeTabletTagsRequest} message ChangeTabletTagsRequest
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ ChangeTabletTagsRequest.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.objects || options.defaults)
+ object.tags = {};
+ if (options.defaults) {
+ object.tablet_alias = null;
+ object.replace = false;
+ }
+ if (message.tablet_alias != null && message.hasOwnProperty("tablet_alias"))
+ object.tablet_alias = $root.topodata.TabletAlias.toObject(message.tablet_alias, options);
+ let keys2;
+ if (message.tags && (keys2 = Object.keys(message.tags)).length) {
+ object.tags = {};
+ for (let j = 0; j < keys2.length; ++j)
+ object.tags[keys2[j]] = message.tags[keys2[j]];
+ }
+ if (message.replace != null && message.hasOwnProperty("replace"))
+ object.replace = message.replace;
+ return object;
+ };
+
+ /**
+ * Converts this ChangeTabletTagsRequest to JSON.
+ * @function toJSON
+ * @memberof vtctldata.ChangeTabletTagsRequest
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ ChangeTabletTagsRequest.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for ChangeTabletTagsRequest
+ * @function getTypeUrl
+ * @memberof vtctldata.ChangeTabletTagsRequest
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ ChangeTabletTagsRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/vtctldata.ChangeTabletTagsRequest";
+ };
+
+ return ChangeTabletTagsRequest;
+ })();
+
+ vtctldata.ChangeTabletTagsResponse = (function() {
+
+ /**
+ * Properties of a ChangeTabletTagsResponse.
+ * @memberof vtctldata
+ * @interface IChangeTabletTagsResponse
+ * @property {Object.|null} [before_tags] ChangeTabletTagsResponse before_tags
+ * @property {Object.|null} [after_tags] ChangeTabletTagsResponse after_tags
+ */
+
+ /**
+ * Constructs a new ChangeTabletTagsResponse.
+ * @memberof vtctldata
+ * @classdesc Represents a ChangeTabletTagsResponse.
+ * @implements IChangeTabletTagsResponse
+ * @constructor
+ * @param {vtctldata.IChangeTabletTagsResponse=} [properties] Properties to set
+ */
+ function ChangeTabletTagsResponse(properties) {
+ this.before_tags = {};
+ this.after_tags = {};
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * ChangeTabletTagsResponse before_tags.
+ * @member {Object.} before_tags
+ * @memberof vtctldata.ChangeTabletTagsResponse
+ * @instance
+ */
+ ChangeTabletTagsResponse.prototype.before_tags = $util.emptyObject;
+
+ /**
+ * ChangeTabletTagsResponse after_tags.
+ * @member {Object.} after_tags
+ * @memberof vtctldata.ChangeTabletTagsResponse
+ * @instance
+ */
+ ChangeTabletTagsResponse.prototype.after_tags = $util.emptyObject;
+
+ /**
+ * Creates a new ChangeTabletTagsResponse instance using the specified properties.
+ * @function create
+ * @memberof vtctldata.ChangeTabletTagsResponse
+ * @static
+ * @param {vtctldata.IChangeTabletTagsResponse=} [properties] Properties to set
+ * @returns {vtctldata.ChangeTabletTagsResponse} ChangeTabletTagsResponse instance
+ */
+ ChangeTabletTagsResponse.create = function create(properties) {
+ return new ChangeTabletTagsResponse(properties);
+ };
+
+ /**
+ * Encodes the specified ChangeTabletTagsResponse message. Does not implicitly {@link vtctldata.ChangeTabletTagsResponse.verify|verify} messages.
+ * @function encode
+ * @memberof vtctldata.ChangeTabletTagsResponse
+ * @static
+ * @param {vtctldata.IChangeTabletTagsResponse} message ChangeTabletTagsResponse message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ ChangeTabletTagsResponse.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.before_tags != null && Object.hasOwnProperty.call(message, "before_tags"))
+ for (let keys = Object.keys(message.before_tags), i = 0; i < keys.length; ++i)
+ writer.uint32(/* id 1, wireType 2 =*/10).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 2 =*/18).string(message.before_tags[keys[i]]).ldelim();
+ if (message.after_tags != null && Object.hasOwnProperty.call(message, "after_tags"))
+ for (let keys = Object.keys(message.after_tags), i = 0; i < keys.length; ++i)
+ writer.uint32(/* id 2, wireType 2 =*/18).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 2 =*/18).string(message.after_tags[keys[i]]).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified ChangeTabletTagsResponse message, length delimited. Does not implicitly {@link vtctldata.ChangeTabletTagsResponse.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof vtctldata.ChangeTabletTagsResponse
+ * @static
+ * @param {vtctldata.IChangeTabletTagsResponse} message ChangeTabletTagsResponse message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ ChangeTabletTagsResponse.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a ChangeTabletTagsResponse message from the specified reader or buffer.
+ * @function decode
+ * @memberof vtctldata.ChangeTabletTagsResponse
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {vtctldata.ChangeTabletTagsResponse} ChangeTabletTagsResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ ChangeTabletTagsResponse.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.vtctldata.ChangeTabletTagsResponse(), key, value;
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ if (message.before_tags === $util.emptyObject)
+ message.before_tags = {};
+ let end2 = reader.uint32() + reader.pos;
+ key = "";
+ value = "";
+ while (reader.pos < end2) {
+ let tag2 = reader.uint32();
+ switch (tag2 >>> 3) {
+ case 1:
+ key = reader.string();
+ break;
+ case 2:
+ value = reader.string();
+ break;
+ default:
+ reader.skipType(tag2 & 7);
+ break;
+ }
+ }
+ message.before_tags[key] = value;
+ break;
+ }
+ case 2: {
+ if (message.after_tags === $util.emptyObject)
+ message.after_tags = {};
+ let end2 = reader.uint32() + reader.pos;
+ key = "";
+ value = "";
+ while (reader.pos < end2) {
+ let tag2 = reader.uint32();
+ switch (tag2 >>> 3) {
+ case 1:
+ key = reader.string();
+ break;
+ case 2:
+ value = reader.string();
+ break;
+ default:
+ reader.skipType(tag2 & 7);
+ break;
+ }
+ }
+ message.after_tags[key] = value;
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a ChangeTabletTagsResponse message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof vtctldata.ChangeTabletTagsResponse
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {vtctldata.ChangeTabletTagsResponse} ChangeTabletTagsResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ ChangeTabletTagsResponse.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a ChangeTabletTagsResponse message.
+ * @function verify
+ * @memberof vtctldata.ChangeTabletTagsResponse
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ ChangeTabletTagsResponse.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.before_tags != null && message.hasOwnProperty("before_tags")) {
+ if (!$util.isObject(message.before_tags))
+ return "before_tags: object expected";
+ let key = Object.keys(message.before_tags);
+ for (let i = 0; i < key.length; ++i)
+ if (!$util.isString(message.before_tags[key[i]]))
+ return "before_tags: string{k:string} expected";
+ }
+ if (message.after_tags != null && message.hasOwnProperty("after_tags")) {
+ if (!$util.isObject(message.after_tags))
+ return "after_tags: object expected";
+ let key = Object.keys(message.after_tags);
+ for (let i = 0; i < key.length; ++i)
+ if (!$util.isString(message.after_tags[key[i]]))
+ return "after_tags: string{k:string} expected";
+ }
+ return null;
+ };
+
+ /**
+ * Creates a ChangeTabletTagsResponse message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof vtctldata.ChangeTabletTagsResponse
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {vtctldata.ChangeTabletTagsResponse} ChangeTabletTagsResponse
+ */
+ ChangeTabletTagsResponse.fromObject = function fromObject(object) {
+ if (object instanceof $root.vtctldata.ChangeTabletTagsResponse)
+ return object;
+ let message = new $root.vtctldata.ChangeTabletTagsResponse();
+ if (object.before_tags) {
+ if (typeof object.before_tags !== "object")
+ throw TypeError(".vtctldata.ChangeTabletTagsResponse.before_tags: object expected");
+ message.before_tags = {};
+ for (let keys = Object.keys(object.before_tags), i = 0; i < keys.length; ++i)
+ message.before_tags[keys[i]] = String(object.before_tags[keys[i]]);
+ }
+ if (object.after_tags) {
+ if (typeof object.after_tags !== "object")
+ throw TypeError(".vtctldata.ChangeTabletTagsResponse.after_tags: object expected");
+ message.after_tags = {};
+ for (let keys = Object.keys(object.after_tags), i = 0; i < keys.length; ++i)
+ message.after_tags[keys[i]] = String(object.after_tags[keys[i]]);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a ChangeTabletTagsResponse message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof vtctldata.ChangeTabletTagsResponse
+ * @static
+ * @param {vtctldata.ChangeTabletTagsResponse} message ChangeTabletTagsResponse
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ ChangeTabletTagsResponse.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.objects || options.defaults) {
+ object.before_tags = {};
+ object.after_tags = {};
+ }
+ let keys2;
+ if (message.before_tags && (keys2 = Object.keys(message.before_tags)).length) {
+ object.before_tags = {};
+ for (let j = 0; j < keys2.length; ++j)
+ object.before_tags[keys2[j]] = message.before_tags[keys2[j]];
+ }
+ if (message.after_tags && (keys2 = Object.keys(message.after_tags)).length) {
+ object.after_tags = {};
+ for (let j = 0; j < keys2.length; ++j)
+ object.after_tags[keys2[j]] = message.after_tags[keys2[j]];
+ }
+ return object;
+ };
+
+ /**
+ * Converts this ChangeTabletTagsResponse to JSON.
+ * @function toJSON
+ * @memberof vtctldata.ChangeTabletTagsResponse
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ ChangeTabletTagsResponse.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for ChangeTabletTagsResponse
+ * @function getTypeUrl
+ * @memberof vtctldata.ChangeTabletTagsResponse
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ ChangeTabletTagsResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/vtctldata.ChangeTabletTagsResponse";
+ };
+
+ return ChangeTabletTagsResponse;
+ })();
+
vtctldata.ChangeTabletTypeRequest = (function() {
/**
@@ -135772,6 +141668,7 @@ export const vtctldata = $root.vtctldata = (() => {
* @property {vttime.IDuration|null} [wait_replicas_timeout] EmergencyReparentShardRequest wait_replicas_timeout
* @property {boolean|null} [prevent_cross_cell_promotion] EmergencyReparentShardRequest prevent_cross_cell_promotion
* @property {boolean|null} [wait_for_all_tablets] EmergencyReparentShardRequest wait_for_all_tablets
+ * @property {topodata.ITabletAlias|null} [expected_primary] EmergencyReparentShardRequest expected_primary
*/
/**
@@ -135846,6 +141743,14 @@ export const vtctldata = $root.vtctldata = (() => {
*/
EmergencyReparentShardRequest.prototype.wait_for_all_tablets = false;
+ /**
+ * EmergencyReparentShardRequest expected_primary.
+ * @member {topodata.ITabletAlias|null|undefined} expected_primary
+ * @memberof vtctldata.EmergencyReparentShardRequest
+ * @instance
+ */
+ EmergencyReparentShardRequest.prototype.expected_primary = null;
+
/**
* Creates a new EmergencyReparentShardRequest instance using the specified properties.
* @function create
@@ -135885,6 +141790,8 @@ export const vtctldata = $root.vtctldata = (() => {
writer.uint32(/* id 6, wireType 0 =*/48).bool(message.prevent_cross_cell_promotion);
if (message.wait_for_all_tablets != null && Object.hasOwnProperty.call(message, "wait_for_all_tablets"))
writer.uint32(/* id 7, wireType 0 =*/56).bool(message.wait_for_all_tablets);
+ if (message.expected_primary != null && Object.hasOwnProperty.call(message, "expected_primary"))
+ $root.topodata.TabletAlias.encode(message.expected_primary, writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim();
return writer;
};
@@ -135949,6 +141856,10 @@ export const vtctldata = $root.vtctldata = (() => {
message.wait_for_all_tablets = reader.bool();
break;
}
+ case 8: {
+ message.expected_primary = $root.topodata.TabletAlias.decode(reader, reader.uint32());
+ break;
+ }
default:
reader.skipType(tag & 7);
break;
@@ -136015,6 +141926,11 @@ export const vtctldata = $root.vtctldata = (() => {
if (message.wait_for_all_tablets != null && message.hasOwnProperty("wait_for_all_tablets"))
if (typeof message.wait_for_all_tablets !== "boolean")
return "wait_for_all_tablets: boolean expected";
+ if (message.expected_primary != null && message.hasOwnProperty("expected_primary")) {
+ let error = $root.topodata.TabletAlias.verify(message.expected_primary);
+ if (error)
+ return "expected_primary." + error;
+ }
return null;
};
@@ -136058,6 +141974,11 @@ export const vtctldata = $root.vtctldata = (() => {
message.prevent_cross_cell_promotion = Boolean(object.prevent_cross_cell_promotion);
if (object.wait_for_all_tablets != null)
message.wait_for_all_tablets = Boolean(object.wait_for_all_tablets);
+ if (object.expected_primary != null) {
+ if (typeof object.expected_primary !== "object")
+ throw TypeError(".vtctldata.EmergencyReparentShardRequest.expected_primary: object expected");
+ message.expected_primary = $root.topodata.TabletAlias.fromObject(object.expected_primary);
+ }
return message;
};
@@ -136083,6 +142004,7 @@ export const vtctldata = $root.vtctldata = (() => {
object.wait_replicas_timeout = null;
object.prevent_cross_cell_promotion = false;
object.wait_for_all_tablets = false;
+ object.expected_primary = null;
}
if (message.keyspace != null && message.hasOwnProperty("keyspace"))
object.keyspace = message.keyspace;
@@ -136101,6 +142023,8 @@ export const vtctldata = $root.vtctldata = (() => {
object.prevent_cross_cell_promotion = message.prevent_cross_cell_promotion;
if (message.wait_for_all_tablets != null && message.hasOwnProperty("wait_for_all_tablets"))
object.wait_for_all_tablets = message.wait_for_all_tablets;
+ if (message.expected_primary != null && message.hasOwnProperty("expected_primary"))
+ object.expected_primary = $root.topodata.TabletAlias.toObject(message.expected_primary, options);
return object;
};
@@ -151572,6 +157496,789 @@ export const vtctldata = $root.vtctldata = (() => {
return GetUnresolvedTransactionsResponse;
})();
+ vtctldata.GetTransactionInfoRequest = (function() {
+
+ /**
+ * Properties of a GetTransactionInfoRequest.
+ * @memberof vtctldata
+ * @interface IGetTransactionInfoRequest
+ * @property {string|null} [dtid] GetTransactionInfoRequest dtid
+ */
+
+ /**
+ * Constructs a new GetTransactionInfoRequest.
+ * @memberof vtctldata
+ * @classdesc Represents a GetTransactionInfoRequest.
+ * @implements IGetTransactionInfoRequest
+ * @constructor
+ * @param {vtctldata.IGetTransactionInfoRequest=} [properties] Properties to set
+ */
+ function GetTransactionInfoRequest(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * GetTransactionInfoRequest dtid.
+ * @member {string} dtid
+ * @memberof vtctldata.GetTransactionInfoRequest
+ * @instance
+ */
+ GetTransactionInfoRequest.prototype.dtid = "";
+
+ /**
+ * Creates a new GetTransactionInfoRequest instance using the specified properties.
+ * @function create
+ * @memberof vtctldata.GetTransactionInfoRequest
+ * @static
+ * @param {vtctldata.IGetTransactionInfoRequest=} [properties] Properties to set
+ * @returns {vtctldata.GetTransactionInfoRequest} GetTransactionInfoRequest instance
+ */
+ GetTransactionInfoRequest.create = function create(properties) {
+ return new GetTransactionInfoRequest(properties);
+ };
+
+ /**
+ * Encodes the specified GetTransactionInfoRequest message. Does not implicitly {@link vtctldata.GetTransactionInfoRequest.verify|verify} messages.
+ * @function encode
+ * @memberof vtctldata.GetTransactionInfoRequest
+ * @static
+ * @param {vtctldata.IGetTransactionInfoRequest} message GetTransactionInfoRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ GetTransactionInfoRequest.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.dtid != null && Object.hasOwnProperty.call(message, "dtid"))
+ writer.uint32(/* id 1, wireType 2 =*/10).string(message.dtid);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified GetTransactionInfoRequest message, length delimited. Does not implicitly {@link vtctldata.GetTransactionInfoRequest.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof vtctldata.GetTransactionInfoRequest
+ * @static
+ * @param {vtctldata.IGetTransactionInfoRequest} message GetTransactionInfoRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ GetTransactionInfoRequest.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a GetTransactionInfoRequest message from the specified reader or buffer.
+ * @function decode
+ * @memberof vtctldata.GetTransactionInfoRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {vtctldata.GetTransactionInfoRequest} GetTransactionInfoRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ GetTransactionInfoRequest.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.vtctldata.GetTransactionInfoRequest();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.dtid = reader.string();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a GetTransactionInfoRequest message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof vtctldata.GetTransactionInfoRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {vtctldata.GetTransactionInfoRequest} GetTransactionInfoRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ GetTransactionInfoRequest.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a GetTransactionInfoRequest message.
+ * @function verify
+ * @memberof vtctldata.GetTransactionInfoRequest
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ GetTransactionInfoRequest.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.dtid != null && message.hasOwnProperty("dtid"))
+ if (!$util.isString(message.dtid))
+ return "dtid: string expected";
+ return null;
+ };
+
+ /**
+ * Creates a GetTransactionInfoRequest message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof vtctldata.GetTransactionInfoRequest
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {vtctldata.GetTransactionInfoRequest} GetTransactionInfoRequest
+ */
+ GetTransactionInfoRequest.fromObject = function fromObject(object) {
+ if (object instanceof $root.vtctldata.GetTransactionInfoRequest)
+ return object;
+ let message = new $root.vtctldata.GetTransactionInfoRequest();
+ if (object.dtid != null)
+ message.dtid = String(object.dtid);
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a GetTransactionInfoRequest message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof vtctldata.GetTransactionInfoRequest
+ * @static
+ * @param {vtctldata.GetTransactionInfoRequest} message GetTransactionInfoRequest
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ GetTransactionInfoRequest.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults)
+ object.dtid = "";
+ if (message.dtid != null && message.hasOwnProperty("dtid"))
+ object.dtid = message.dtid;
+ return object;
+ };
+
+ /**
+ * Converts this GetTransactionInfoRequest to JSON.
+ * @function toJSON
+ * @memberof vtctldata.GetTransactionInfoRequest
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ GetTransactionInfoRequest.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for GetTransactionInfoRequest
+ * @function getTypeUrl
+ * @memberof vtctldata.GetTransactionInfoRequest
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ GetTransactionInfoRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/vtctldata.GetTransactionInfoRequest";
+ };
+
+ return GetTransactionInfoRequest;
+ })();
+
+ vtctldata.ShardTransactionState = (function() {
+
+ /**
+ * Properties of a ShardTransactionState.
+ * @memberof vtctldata
+ * @interface IShardTransactionState
+ * @property {string|null} [shard] ShardTransactionState shard
+ * @property {string|null} [state] ShardTransactionState state
+ * @property {string|null} [message] ShardTransactionState message
+ * @property {number|Long|null} [time_created] ShardTransactionState time_created
+ * @property {Array.|null} [statements] ShardTransactionState statements
+ */
+
+ /**
+ * Constructs a new ShardTransactionState.
+ * @memberof vtctldata
+ * @classdesc Represents a ShardTransactionState.
+ * @implements IShardTransactionState
+ * @constructor
+ * @param {vtctldata.IShardTransactionState=} [properties] Properties to set
+ */
+ function ShardTransactionState(properties) {
+ this.statements = [];
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * ShardTransactionState shard.
+ * @member {string} shard
+ * @memberof vtctldata.ShardTransactionState
+ * @instance
+ */
+ ShardTransactionState.prototype.shard = "";
+
+ /**
+ * ShardTransactionState state.
+ * @member {string} state
+ * @memberof vtctldata.ShardTransactionState
+ * @instance
+ */
+ ShardTransactionState.prototype.state = "";
+
+ /**
+ * ShardTransactionState message.
+ * @member {string} message
+ * @memberof vtctldata.ShardTransactionState
+ * @instance
+ */
+ ShardTransactionState.prototype.message = "";
+
+ /**
+ * ShardTransactionState time_created.
+ * @member {number|Long} time_created
+ * @memberof vtctldata.ShardTransactionState
+ * @instance
+ */
+ ShardTransactionState.prototype.time_created = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+ /**
+ * ShardTransactionState statements.
+ * @member {Array.} statements
+ * @memberof vtctldata.ShardTransactionState
+ * @instance
+ */
+ ShardTransactionState.prototype.statements = $util.emptyArray;
+
+ /**
+ * Creates a new ShardTransactionState instance using the specified properties.
+ * @function create
+ * @memberof vtctldata.ShardTransactionState
+ * @static
+ * @param {vtctldata.IShardTransactionState=} [properties] Properties to set
+ * @returns {vtctldata.ShardTransactionState} ShardTransactionState instance
+ */
+ ShardTransactionState.create = function create(properties) {
+ return new ShardTransactionState(properties);
+ };
+
+ /**
+ * Encodes the specified ShardTransactionState message. Does not implicitly {@link vtctldata.ShardTransactionState.verify|verify} messages.
+ * @function encode
+ * @memberof vtctldata.ShardTransactionState
+ * @static
+ * @param {vtctldata.IShardTransactionState} message ShardTransactionState message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ ShardTransactionState.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.shard != null && Object.hasOwnProperty.call(message, "shard"))
+ writer.uint32(/* id 1, wireType 2 =*/10).string(message.shard);
+ if (message.state != null && Object.hasOwnProperty.call(message, "state"))
+ writer.uint32(/* id 2, wireType 2 =*/18).string(message.state);
+ if (message.message != null && Object.hasOwnProperty.call(message, "message"))
+ writer.uint32(/* id 3, wireType 2 =*/26).string(message.message);
+ if (message.time_created != null && Object.hasOwnProperty.call(message, "time_created"))
+ writer.uint32(/* id 4, wireType 0 =*/32).int64(message.time_created);
+ if (message.statements != null && message.statements.length)
+ for (let i = 0; i < message.statements.length; ++i)
+ writer.uint32(/* id 5, wireType 2 =*/42).string(message.statements[i]);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified ShardTransactionState message, length delimited. Does not implicitly {@link vtctldata.ShardTransactionState.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof vtctldata.ShardTransactionState
+ * @static
+ * @param {vtctldata.IShardTransactionState} message ShardTransactionState message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ ShardTransactionState.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a ShardTransactionState message from the specified reader or buffer.
+ * @function decode
+ * @memberof vtctldata.ShardTransactionState
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {vtctldata.ShardTransactionState} ShardTransactionState
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ ShardTransactionState.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.vtctldata.ShardTransactionState();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.shard = reader.string();
+ break;
+ }
+ case 2: {
+ message.state = reader.string();
+ break;
+ }
+ case 3: {
+ message.message = reader.string();
+ break;
+ }
+ case 4: {
+ message.time_created = reader.int64();
+ break;
+ }
+ case 5: {
+ if (!(message.statements && message.statements.length))
+ message.statements = [];
+ message.statements.push(reader.string());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a ShardTransactionState message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof vtctldata.ShardTransactionState
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {vtctldata.ShardTransactionState} ShardTransactionState
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ ShardTransactionState.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a ShardTransactionState message.
+ * @function verify
+ * @memberof vtctldata.ShardTransactionState
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ ShardTransactionState.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.shard != null && message.hasOwnProperty("shard"))
+ if (!$util.isString(message.shard))
+ return "shard: string expected";
+ if (message.state != null && message.hasOwnProperty("state"))
+ if (!$util.isString(message.state))
+ return "state: string expected";
+ if (message.message != null && message.hasOwnProperty("message"))
+ if (!$util.isString(message.message))
+ return "message: string expected";
+ if (message.time_created != null && message.hasOwnProperty("time_created"))
+ if (!$util.isInteger(message.time_created) && !(message.time_created && $util.isInteger(message.time_created.low) && $util.isInteger(message.time_created.high)))
+ return "time_created: integer|Long expected";
+ if (message.statements != null && message.hasOwnProperty("statements")) {
+ if (!Array.isArray(message.statements))
+ return "statements: array expected";
+ for (let i = 0; i < message.statements.length; ++i)
+ if (!$util.isString(message.statements[i]))
+ return "statements: string[] expected";
+ }
+ return null;
+ };
+
+ /**
+ * Creates a ShardTransactionState message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof vtctldata.ShardTransactionState
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {vtctldata.ShardTransactionState} ShardTransactionState
+ */
+ ShardTransactionState.fromObject = function fromObject(object) {
+ if (object instanceof $root.vtctldata.ShardTransactionState)
+ return object;
+ let message = new $root.vtctldata.ShardTransactionState();
+ if (object.shard != null)
+ message.shard = String(object.shard);
+ if (object.state != null)
+ message.state = String(object.state);
+ if (object.message != null)
+ message.message = String(object.message);
+ if (object.time_created != null)
+ if ($util.Long)
+ (message.time_created = $util.Long.fromValue(object.time_created)).unsigned = false;
+ else if (typeof object.time_created === "string")
+ message.time_created = parseInt(object.time_created, 10);
+ else if (typeof object.time_created === "number")
+ message.time_created = object.time_created;
+ else if (typeof object.time_created === "object")
+ message.time_created = new $util.LongBits(object.time_created.low >>> 0, object.time_created.high >>> 0).toNumber();
+ if (object.statements) {
+ if (!Array.isArray(object.statements))
+ throw TypeError(".vtctldata.ShardTransactionState.statements: array expected");
+ message.statements = [];
+ for (let i = 0; i < object.statements.length; ++i)
+ message.statements[i] = String(object.statements[i]);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a ShardTransactionState message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof vtctldata.ShardTransactionState
+ * @static
+ * @param {vtctldata.ShardTransactionState} message ShardTransactionState
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ ShardTransactionState.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.arrays || options.defaults)
+ object.statements = [];
+ if (options.defaults) {
+ object.shard = "";
+ object.state = "";
+ object.message = "";
+ if ($util.Long) {
+ let long = new $util.Long(0, 0, false);
+ object.time_created = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+ } else
+ object.time_created = options.longs === String ? "0" : 0;
+ }
+ if (message.shard != null && message.hasOwnProperty("shard"))
+ object.shard = message.shard;
+ if (message.state != null && message.hasOwnProperty("state"))
+ object.state = message.state;
+ if (message.message != null && message.hasOwnProperty("message"))
+ object.message = message.message;
+ if (message.time_created != null && message.hasOwnProperty("time_created"))
+ if (typeof message.time_created === "number")
+ object.time_created = options.longs === String ? String(message.time_created) : message.time_created;
+ else
+ object.time_created = options.longs === String ? $util.Long.prototype.toString.call(message.time_created) : options.longs === Number ? new $util.LongBits(message.time_created.low >>> 0, message.time_created.high >>> 0).toNumber() : message.time_created;
+ if (message.statements && message.statements.length) {
+ object.statements = [];
+ for (let j = 0; j < message.statements.length; ++j)
+ object.statements[j] = message.statements[j];
+ }
+ return object;
+ };
+
+ /**
+ * Converts this ShardTransactionState to JSON.
+ * @function toJSON
+ * @memberof vtctldata.ShardTransactionState
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ ShardTransactionState.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for ShardTransactionState
+ * @function getTypeUrl
+ * @memberof vtctldata.ShardTransactionState
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ ShardTransactionState.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/vtctldata.ShardTransactionState";
+ };
+
+ return ShardTransactionState;
+ })();
+
+ vtctldata.GetTransactionInfoResponse = (function() {
+
+ /**
+ * Properties of a GetTransactionInfoResponse.
+ * @memberof vtctldata
+ * @interface IGetTransactionInfoResponse
+ * @property {query.ITransactionMetadata|null} [metadata] GetTransactionInfoResponse metadata
+ * @property {Array.|null} [shard_states] GetTransactionInfoResponse shard_states
+ */
+
+ /**
+ * Constructs a new GetTransactionInfoResponse.
+ * @memberof vtctldata
+ * @classdesc Represents a GetTransactionInfoResponse.
+ * @implements IGetTransactionInfoResponse
+ * @constructor
+ * @param {vtctldata.IGetTransactionInfoResponse=} [properties] Properties to set
+ */
+ function GetTransactionInfoResponse(properties) {
+ this.shard_states = [];
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * GetTransactionInfoResponse metadata.
+ * @member {query.ITransactionMetadata|null|undefined} metadata
+ * @memberof vtctldata.GetTransactionInfoResponse
+ * @instance
+ */
+ GetTransactionInfoResponse.prototype.metadata = null;
+
+ /**
+ * GetTransactionInfoResponse shard_states.
+ * @member {Array.} shard_states
+ * @memberof vtctldata.GetTransactionInfoResponse
+ * @instance
+ */
+ GetTransactionInfoResponse.prototype.shard_states = $util.emptyArray;
+
+ /**
+ * Creates a new GetTransactionInfoResponse instance using the specified properties.
+ * @function create
+ * @memberof vtctldata.GetTransactionInfoResponse
+ * @static
+ * @param {vtctldata.IGetTransactionInfoResponse=} [properties] Properties to set
+ * @returns {vtctldata.GetTransactionInfoResponse} GetTransactionInfoResponse instance
+ */
+ GetTransactionInfoResponse.create = function create(properties) {
+ return new GetTransactionInfoResponse(properties);
+ };
+
+ /**
+ * Encodes the specified GetTransactionInfoResponse message. Does not implicitly {@link vtctldata.GetTransactionInfoResponse.verify|verify} messages.
+ * @function encode
+ * @memberof vtctldata.GetTransactionInfoResponse
+ * @static
+ * @param {vtctldata.IGetTransactionInfoResponse} message GetTransactionInfoResponse message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ GetTransactionInfoResponse.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.metadata != null && Object.hasOwnProperty.call(message, "metadata"))
+ $root.query.TransactionMetadata.encode(message.metadata, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+ if (message.shard_states != null && message.shard_states.length)
+ for (let i = 0; i < message.shard_states.length; ++i)
+ $root.vtctldata.ShardTransactionState.encode(message.shard_states[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified GetTransactionInfoResponse message, length delimited. Does not implicitly {@link vtctldata.GetTransactionInfoResponse.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof vtctldata.GetTransactionInfoResponse
+ * @static
+ * @param {vtctldata.IGetTransactionInfoResponse} message GetTransactionInfoResponse message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ GetTransactionInfoResponse.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a GetTransactionInfoResponse message from the specified reader or buffer.
+ * @function decode
+ * @memberof vtctldata.GetTransactionInfoResponse
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {vtctldata.GetTransactionInfoResponse} GetTransactionInfoResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ GetTransactionInfoResponse.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.vtctldata.GetTransactionInfoResponse();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.metadata = $root.query.TransactionMetadata.decode(reader, reader.uint32());
+ break;
+ }
+ case 2: {
+ if (!(message.shard_states && message.shard_states.length))
+ message.shard_states = [];
+ message.shard_states.push($root.vtctldata.ShardTransactionState.decode(reader, reader.uint32()));
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a GetTransactionInfoResponse message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof vtctldata.GetTransactionInfoResponse
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {vtctldata.GetTransactionInfoResponse} GetTransactionInfoResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ GetTransactionInfoResponse.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a GetTransactionInfoResponse message.
+ * @function verify
+ * @memberof vtctldata.GetTransactionInfoResponse
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ GetTransactionInfoResponse.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.metadata != null && message.hasOwnProperty("metadata")) {
+ let error = $root.query.TransactionMetadata.verify(message.metadata);
+ if (error)
+ return "metadata." + error;
+ }
+ if (message.shard_states != null && message.hasOwnProperty("shard_states")) {
+ if (!Array.isArray(message.shard_states))
+ return "shard_states: array expected";
+ for (let i = 0; i < message.shard_states.length; ++i) {
+ let error = $root.vtctldata.ShardTransactionState.verify(message.shard_states[i]);
+ if (error)
+ return "shard_states." + error;
+ }
+ }
+ return null;
+ };
+
+ /**
+ * Creates a GetTransactionInfoResponse message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof vtctldata.GetTransactionInfoResponse
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {vtctldata.GetTransactionInfoResponse} GetTransactionInfoResponse
+ */
+ GetTransactionInfoResponse.fromObject = function fromObject(object) {
+ if (object instanceof $root.vtctldata.GetTransactionInfoResponse)
+ return object;
+ let message = new $root.vtctldata.GetTransactionInfoResponse();
+ if (object.metadata != null) {
+ if (typeof object.metadata !== "object")
+ throw TypeError(".vtctldata.GetTransactionInfoResponse.metadata: object expected");
+ message.metadata = $root.query.TransactionMetadata.fromObject(object.metadata);
+ }
+ if (object.shard_states) {
+ if (!Array.isArray(object.shard_states))
+ throw TypeError(".vtctldata.GetTransactionInfoResponse.shard_states: array expected");
+ message.shard_states = [];
+ for (let i = 0; i < object.shard_states.length; ++i) {
+ if (typeof object.shard_states[i] !== "object")
+ throw TypeError(".vtctldata.GetTransactionInfoResponse.shard_states: object expected");
+ message.shard_states[i] = $root.vtctldata.ShardTransactionState.fromObject(object.shard_states[i]);
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a GetTransactionInfoResponse message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof vtctldata.GetTransactionInfoResponse
+ * @static
+ * @param {vtctldata.GetTransactionInfoResponse} message GetTransactionInfoResponse
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ GetTransactionInfoResponse.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.arrays || options.defaults)
+ object.shard_states = [];
+ if (options.defaults)
+ object.metadata = null;
+ if (message.metadata != null && message.hasOwnProperty("metadata"))
+ object.metadata = $root.query.TransactionMetadata.toObject(message.metadata, options);
+ if (message.shard_states && message.shard_states.length) {
+ object.shard_states = [];
+ for (let j = 0; j < message.shard_states.length; ++j)
+ object.shard_states[j] = $root.vtctldata.ShardTransactionState.toObject(message.shard_states[j], options);
+ }
+ return object;
+ };
+
+ /**
+ * Converts this GetTransactionInfoResponse to JSON.
+ * @function toJSON
+ * @memberof vtctldata.GetTransactionInfoResponse
+ * @instance
+ * @returns {Object.